更好的排版及更全的图片显示请移步:

www.nextkara.net


cp复制命令:

  •  cp [OPTION]... [-T] SOURCE DEST

  •  cp [OPTION]... SOURCE... DIRECTORY

  •  cp [OPTION]... -t DIRECTORY SOURCE...

  •  cp SRC DEST

SRC是文件:
如果目标不存在:新建DEST,并将SRC中内容填充至
DEST中
如果目标存在:
如果DEST是文件:将SRC中的内容覆盖至DEST中
基于安全,建议为cp命令使用-i选项
如果DEST是目录:在DEST下新建与原文件同名的文
件,并将SRC中内容填充至新文件中

cp SRC... DEST
SRC...:多个文件
DEST必须存在,且为目录,其它情形均会出错;
cp SRC DEST
SRC是目录:此时使用选项:-r
如果DEST不存在:则创建指定目录,复制SRC目录中所
有文件至DEST中;
如果DEST存在:
如果DEST是文件:报错
如果DEST是目录:

第九天:基础文件管理

选项[ options ]:

  • -i:交互式

  • -r, -R: 递归复制目录及内部的所有内容;

  • -a: 归档,相当于-dR --preserv=all

  • -d:--no-dereference --preserv=links 不复制原文件,只复制链接名

  • --preserv[=ATTR_LIST] ;mode: 权限 ;ownership: 属主属组 ;timestamp:时间戳;links;xattr;context;all

  • -p: 等同--preserv=mode,ownership,timestamp

  • -v: --verbose 详细信息

  • -f: --force 强制

mv移动命令:

  • mv [OPTION]... [-T] SOURCE DEST

  • mv [OPTION]... SOURCE... DIRECTORY

  • mv [OPTION]... -t DIRECTORY SOURCE...

常用选项:

  • -i: 交互式

  • -f: 强制

rm命令:移除文件或目录操作

rm [OPTION]... FILE...
常用选项:

  • -i: 交互式

  • -f: 强制删除

  • -r: 递归

  • --no-preserve-root:强制执行作死命令必要选项

例: #rm -rf /

练习:

1、使用别名命令,每日将/etc/目录下所有文件,
备份到/testdir/下独立的新目录下,并要求新目录
格式为 backupYYYY-mm-dd ,备份过程可见

alias baketc="cp -viRp /etc /testdir/backup`date +%F`"

第九天:基础文件管理

2、先创建/testdir/rootdir目录,再复制/root所有
下文件到该目录内,并要求保留原有权限

第九天:基础文件管理基本目录操作:

 tree 显示目录树

  • -d: 只显示目录

  • -L level:指定显示的层级数目

  • -P pattern: 只显示由指定pattern匹配到的路径

mkdir 创建目录

  • -p: 存在于不报错,且可自动创建所需的各目录;

  • -v: 显示详细信息

  • -m MODE: 创建目录时直接指定权限;

  •  rmdir 删除空目录

  • -p: 递归删除父空目录

  • -v: 显示详细信息

rm -r 递归删除目录树

练习:

(1) 如何创建/testdir/dir1/x, /testdir/dir1/y,
/testdir/dir1/x/a, /testdir/dir1/x/b,
/testdir/dir1/y/a, /testdir/dir1/y/b

mkdir -p /testdir/dir1/{x,y}/{a,b}
(2) 如何创建/testdir/dir2/x, /testdir/dir2/y,
/testdir -p /dir2/x/a, /testdir/dir2/x/b

mkdir /dir2/{x/{a,b},y}
(3) 如何创建/testdir/dir3, /testdir/dir4, /testdir/dir5,
/testdir/dir5/dir3, /testdir/dir5/dir4

mkdir /testdir/dir{3,4,5/dir{3,4}}

显示当前shell进程所有可用的命令别名

  • alias

定义别名NAME,其相当于执行命令VALUE;

  • alias NAME='VALUE'

在命令行中定义的别名,仅对当前shell进程有效
如果想永久有效,要定义在配置文件中
仅对当前用户:~/.bashrc
对所有用户有效:/etc/bashrc
第九天:基础文件管理重新载入配置文件:

source /path/to/file

. /path/to/file

撤销别名:unalias new_command

如果别名同原命令同名,如果要执行原命令,可使用
“\COMMAND”
’COMMAND’
/PATH/COMMAND:外部命令

ls命令补充内容:
用法:
ls [options] [files_or_dirs]
Example:

  • ls -a 包含隐藏文件

  • ls -l 显示额外的信息

  • ls -R 目录递归通过

  • ls -ld 目录和符号链接信息

  • ls -1 文件分行显示

  • ls –S 按从大到小排序

  • ls –u 配合-t选项,显示并按atime从新到旧排序

  • ls –U 不排序按目录存放顺序显示

文件通配符:

  •  * 匹配零个或多个字符

  •  ? 匹配任何单个字符

  •  ~ 当前用户家目录

  •  ~username 用户家目录

  •  ~+ 当前工作目录

  •  ~- 前一个工作目录

  •  [0-9] 匹配一个数字范围

  •  [a-z]:大写和小写字母

  •  [A-Z]:大写字母

  •  [wxc] 匹配列表中的任何的一个字符

  • [^wxc] 匹配列表中的所有字符以外的字符

  •  预定义的字符类:#man 7 glob

  • [:digit:]:任意数字,相当于0-9

  • [:lower:]:任意小写字母

  • [:upper:]: 任意大写字母

  • [:alpha:]: 任意大小写字母

  • [:alnum:]:任意数字或字母

  • [:space:]:空格

  • [:punct:]:标点符号

练习:

1、显示/var目录下所有以l开头,以一个小写字母结尾,且中
间出现至少一位数字的文件或目录

ll -h /var/l*[[:digit:]]*[[:lower:]]
2、显示/etc目录下以任意一位数字开头,且以非数字结尾的
文件或目录

ll -h /etc/[[:digit:]]*[^[:digit:]]
3、显示/etc/目录下以非字母开头,后面跟了一个字母及其
它任意长度任意字符的文件或目录

ll -h /etc/[^[:alpha:]][[:alpha:]]*
4、显示/etc目录下所有以m开头以非数字结尾的文件或目录

ll -h /etc/m*[^[:digit:]]
5、显示/etc目录下,所有以.d结尾的文件或目录

ll -h /etc/*.d
6、显示/etc目录下,所有.conf结尾,且以m,n,r,p开头的文
件或目录

ll -h /etc/`mnrp`*

 

 stat
文件类别:metadata, data
三个时间戳:

  • access time:访问时间,atime,读取文件内容

  • modify time: 修改时间, mtime,改变文件内容(数据)

  • change time: 改变时间, ctime,元数据发生改变

创建空文件和刷新时间

touch命令:

touch [OPTION]... FILE...

  • -a: 仅改变 atime

  • -m: 仅改变 mtime

  • -t:STAMP:  [[CC]YY]MMDDhhmm[.ss]

  • -c: 如果文件不存在,则不予创建

inode(index node)表中包含文件系统所有文件列表
一个节点 (索引节点)是在一个表项,包含有关文件的信息
( 元数据 ),包括:

  • 文件类型,权限,UID,GID

  • 链接数(指向这个文件名路径名称个数)

  • 该文件的大小和不同的时间戳

  • 指向磁盘上文件的数据块指针

  • 有关文件的其他数据

第九天:基础文件管理文件引用一个是 inode号
是通过文件名来引用一个文件
一个目录是目录下的文件名和文件inode号之间的映射
注意:文件夹是特殊文件,记载有目录下的文件名和inode值,可使用vim编辑器查看文件夹内的内容

第九天:基础文件管理第九天:基础文件管理mv和inode

如果mv命令的目标和源在相同的文件系统,作为mv 命令
用新的文件名创建对应新的目录项
删除旧目录条目对应的旧的文件名
不影响inode表(除时间戳)或磁盘上的数据位置:没有
数据被移动!
如果目标和源在一个不同的文件系统, mv相当于cp和rm

rm和inode

链接数递减,从而释放的inode号可以被重用
把数据块放在空闲列表中
删除目录项
数据实际上不会马上被删除,但当另一个文件使用数据块
时将被覆盖。

cp和inode

分配一个空闲的inode号,在inode表中生成新条目
在目录中创建一个目录项,将名称与inode编号关联
拷贝数据生成新的文件
硬链接
创建硬链接会增加额外的记录项以引用文件
对应于同一文件系统上一个物理文件
每个目录引用相同的inode号
创建时链接数递增

删除文件时:

rm命令递减计数的链接
文件要存在,至少有一个链接数
当链接数为零时,该文件被删除
不能跨越驱动器或分区

语法:
ln filename [linkname ]

文件可以包含多种类型的数据
检查文文件类型,然后确定适当的开放命令或应用程序使用
file [options] <filename>...
Option:

  • -b列出文件辨识结果时,不显示文件名称。

  • -c详细显示指令执行过程,便于排错或分析程序执行形

  • -f列出文件中文件名的文件类型

  • -F使用指定分隔符号替换输出文件名后默认的”:”分隔符

  • -i输出mime类型的字符串

  • -L查看对应软链接对应文件的文件类型

  • -z尝试去解读压缩文件的内容

  • --help显示命令在线帮助

课后作业:

1、将/etc/issue文件中的内容转换为大写后保存至/tmp/issue.out文件中
tr 'a-z' 'A-Z' < /etc/issue
2、将当前系统登录用户的信息转换为大写后保存至/tmp/who.out文件中
echo `who` | tr 'a-z' 'A-Z' > /tmp/who.out
3、一个linux用户给root发邮件,要求邮件标题为”help”,邮件正文如下:
Hello, I am 用户名,the system version is here,pleasehelp me to check it ,thanks!
操作系统版本信息
echo "hello I am `whoami`,the system version is here, please help me to check it ,thanks..`cat /proc/version`"|mail -s "help" root

4、将/root/下文件列表,显示成一行,并文件名之间用空格隔开
ls -1 /root | tr '*\n' '* '

5、file1文件的内容为:”1 2 3 4 5 6 7 8 9 10” 计算出所有数字的总和
echo $[$(tr ' ' '+' < file1)]
6、删除Windows文本文件中的'^M'字符
tr -d '^M'  < fileW

7、处理字符串“xt.,l 1 jr#!$mn2 c*/fe3 uz4”,只保留其中的数字和空格
[root@CentOS7 testdir]# echo "xt.,l 1 jr#"xt.,l 1 jr#donemn2 c*/fe3 uz4"mn2 c*/fe3 uz4" |  tr -d '[[:punct:]]' | tr -d '[[:alpha:]]'

第九天:基础文件管理
8、将PATH变量每个目录显示在独立的一行
[root@CentOS7 testdir]# echo $PATH | tr ':' '\n'

第九天:基础文件管理

9、删除指定文件的空行

[root@CentOS7 testdir]# tr -s "\n" < ll

第九天:基础文件管理

10、将文件中每个单词(字母)显示在独立的一行,并无空行
[root@CentOS7 testdir]# cat hostname | tr "[[:space:]]" "\n" | tr -s "\n"

第九天:基础文件管理