文件管理相关知识点和命令



文件通配符

*:匹配零个或者多个任意字符

?:匹配任意单个字符

~:当前用户家目录

~username:用户家目录

~+:当前工作目录

~-:前一个工作目录

[0-9]:匹配任意单个数字

[a-z][A-Z]:字母匹配特作说明,字母顺序设定aAbBcC,

所以[a-z]不能代表所有小写字母,里面还包含了除Z以外的大写字母

同理[A-Z]也不能代表所有大写字母,里面还包含了除a以外的小写字母

[abc]:匹配列表中任意一个字符

[^abc]:匹配除了列表中字符以外的任意字符

预定义的字符类:

可通过man 7 glob查询

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

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

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

[[:alpha:]]:任意字母(包含大小写字母)

[[:alnum:]]:任意数字和字母

[[:blank:]]:水平空白符

[[:space:]]:水平或垂直空白字符

[[:punct:]]:标点符号

[[:print:]]:可打印字符

[[:cntrl:]]:控制(非打印)字符

[[:graph:]]:图形字符

[[:xdigit:]]:十六进制字符


小练习:


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

ls -a /var/l*[0-9]*[[:lower:]]

文件管理相关知识点和命令_通配符

2 、显示/etc 目录下以任意一位数字开头,且以非数字结尾的文件或目录

ls -a /etc/[0-9]*[^0-9]

文件管理相关知识点和命令_知识点_02

3 、显示/etc/ 目录下以非字母开头,后面跟了一个字母及其它任意长度任意字符的文件或目录

 ls -a /etc/[^[:alpha:]][[:alpha:]]*

文件管理相关知识点和命令_通配符_03

4 、显示/etc 目录下所有以m 开头以非数字结尾的文件或目录

 ls -a /etc/m*[^0-9]

文件管理相关知识点和命令_通配符_045 、显示/etc 目录下,所有以.d 结尾的文件或目录

 ls  -ad /etc/*.d

文件管理相关知识点和命令_通配符_056 、显示/etc 目录下,所有.conf 结尾,且以m,n,r,p 开头的文件或目录

 ls -ad  /etc/[mnrp]*.conf

文件管理相关知识点和命令_文件管理_06

touch命令:改变文件的时间戳(atime,ctime,mtime)

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

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

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

小实验:

指令

echo aa >> shabi


使用输出重定向,将echo aa的结果追加至shabi文件中,此时shabi文件的数据和元数据改变,ctime和mtime改变为当前时间,但是因为没有访问shabi文件,只是将aa内容重定向至shabi文件中,所以访问时间atime不会发生改变,结果如下:


文件管理相关知识点和命令_通配符_07

r如上cat shabi文件时,atime并没有更改,是因为系统设定

因为有些文件会经常被访问,如果每访问一次,就刷新一次atime,会很占用资源且极其浪费,

所以系统设定为一般情况下atime的时间比mtime或ctime早时,访问atime后,atime会自动刷

新为当前时间

如下atime比mtime时间晚,当访问了shabi文件后,amtime是没有刷新的

文件管理相关知识点和命令_文件管理_08

设置mtime时间,如下atime时间比mtime时间早,访问shabi文件后,atime刷新了


文件管理相关知识点和命令_文件管理_09


touch 选项 file

touch f1:如果f1文件存在,则会刷新f1的时间戳

          如果f1文件不存在,则会创建f1文件(空的)

文件管理相关知识点和命令_知识点_10touch  -c  file:如果文件存在则刷新时间戳,

                 如果文件不存在也不创建

文件管理相关知识点和命令_知识点_11


touch  -a  file:刷新文件的atime,且ctime会随之刷新

文件管理相关知识点和命令_知识点_12touch  -m  file:刷新文件的mtime,且ctime会随之刷新

文件管理相关知识点和命令_文件管理_13


touch -t 201007281029.30(时间格式) file :指定atime,mtime时间,同时ctime也会改变为当前时


间,因为atime和mtime变更了,元数据必然改变


touch -d “+2 day” file:指定时间,同上说明,同上效果


touch -d "+2 day" file

文件管理相关知识点和命令_通配符_14


文件管理工具:cp  mv  rm


cp命令==>copy


源文件;目标文件


源文件为单个文件时:


如果目标文件不存在,则事先创建此文件,并复制源文件的数据流值目标文件中

如果目标文件存在:

        目标文件为非目录文件时,则覆盖目标文件

        目标文件是目录文件时,则先在目标目录下创建一个与源文件同名的文件,并复制其数据流

文件管理相关知识点和命令_知识点_15

源文件为多个文件时:


如果目标文件不存在:错误

如果目标文件存在

         如果目标文件是非目录文件;错误

         如果目标是目录文件:分别复制每一个文件至目标目录中,并保持原名

文件管理相关知识点和命令_知识点_16

源文件为目录时:


须使用-r选项,否则命令无法执行成功

如果目标文件不存在;则创建与源目录同名的目录,并复制源目录中所有的文件至目标目录下

文件管理相关知识点和命令_通配符_17

如果目标文件存在

         如果目标文件是非目录文件,错误

         如果目标是目录文件:则在目标目录下创建一个和源目录同名的目录,

                             并复制目录中所有的文件至新创建的与源目录同名目录下

文件管理相关知识点和命令_通配符_18


直观图:


文件管理相关知识点和命令_文件管理_19


常用选项

-i:交互式复制,即覆盖之前会提醒用户确认

注意:一般情况下,root用户的cp是“cp -i”的别名,执行cp命令是默认有交互式提醒

       而在普通用户中,cp命令就是单指cp命令,没有带选项,所以在普通用户中,

       执行cp命令时,不会有交互式提醒,

 文件管理相关知识点和命令_文件管理_20     

-f:强制覆盖目标文件。此选项在一般cp文件时无作用

    用法:在root用户上cp一个/etc/issue文件到普通用户上~username/,

          这个在普通用户上的issue的属主和属组都是root,

          此时普通用户想要cp文件到issue会提示权限不够,无法复制

          但是加上-f选项就可以强制覆盖目标文件

文件管理相关知识点和命令_通配符_21

可理解为:普通用户权限不够不能执行cp a issue,加上-f选项的效果为删除root权限的issue,

          然后复制a里面的内容到一个新建的issue文件中,权限为普通用户的


-d:链接文件cp时,会默认cp链接指向的源文件,加上-d选项,则是cp链接本身

-a:-dR --preserve=all:用于实现归档


--preserve=  mode:权限

             ownership:属主属组

             timestamps:时间戳

             context:安全上下文

             xattr:扩展属性

             links:符号链接

              all:上述所有属性


-p:等同于--preserve=mode,ownership,timestamp

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



mv:move(和cp命令用法相似)


在相同路径下,mv某文件时,可以修改文件名

例如:

文件管理相关知识点和命令_通配符_22


在不同路径下,mv某文件时,则是把源文件移动到目标路径目录下

文件管理相关知识点和命令_知识点_23


-i交互式

-f:强制覆盖现有的文件


源文件为单个文件时:


如果目标文件不存在,则将源文件名改为目标文件名,内容不变(可理解为改名)

如果目标文件存在:

        目标文件为非目录文件时,则将源文件名改为目标文件名,内容不变(貌似和上面一样啊文件管理相关知识点和命令_文件管理_24

        目标文件是目录文件时,则将源文件移动至目标目录中

文件管理相关知识点和命令_通配符_25


源文件为多个文件时:


如果目标文件存在

         如果目标文件是非目录文件;错误

         如果目标是目录文件:将所有的源文件都移动至目标目录中

文件管理相关知识点和命令_知识点_26

源文件为目录时:


如果目标文件不存在;则将源目录改名为目标为目录

如果目标文件存在

         如果目标文件是非目录文件,错误

         如果目标是目录文件:则将源目录移动至目标文件中

文件管理相关知识点和命令_知识点_27



rm:可以删除一个目录中的一个或多个文件或目录,也可以将某个目录及其下属的所有文件及其             子目录 均删除掉。对于链接文件,只是删除整个链接文件,而原有文件保持不变。

    

-i交互式

-r:递归删除

-rf:强制递归删除

-f:强制

危险操作: rm -rf /*

注意:所有不用的文件建议不要直接删除,而是移动至某个专用目录;(模拟回收站)


命令别名:alias

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


定义别名:alias  cls=clear,执行cls时和clear效果一样

文件管理相关知识点和命令_通配符_28

但是在命令行里定义的别名。仅对当前shell进程有效

如果想永久有效,则要在配置文件中修改相关配置文件:

   仅对当前用户有效:~/.bashrc

   对所有用户有效:/etc/bashrc

 

修改配置文件给出的新配置不会立即生效

bash进程重新读取配置文件:

source /path/to/config_file

. /path/to/config_file



撤销别名:unalias


unalias  cls:撤销clear的别名cls

如果指令有定义了别名,但是想使用原命令

\command

’command‘  “command”

/PATH/COMMAND:外部命令

以ls为例

alias ls='ls --color=auto'

使用了原命令后,颜色标识没了

文件管理相关知识点和命令_通配符_29


小练习:

1 、定义别名命令baketc ,每 天将 将/etc/ 目录下所有文件,备份到/testdir 独立的子目录 下,


 并要求子目录为 格式为 backupYYYY-mm-dd  ,备份过程可见

指令为:

alias  baketc= 'cp -rv  /etc/ /testdir/backup'date +%F''

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

cp --preserv=mode -R /root  /testdir/rootdir


目录操作:


tree:以树状图列出目录的内容

-D:列出文件或目录的更改时间

-i:不以树状图列出目录的内容

文件管理相关知识点和命令_知识点_30

-d:只显示目录,不显示文件

文件管理相关知识点和命令_知识点_31

-s:列出文件和目录大小(配合-h选项更直观)

-t用文件和目录的更改时间排序(配合-D效果更好

文件管理相关知识点和命令_知识点_32

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


mkdir:创建目录


-p:自动按需创建父目录

-v:显示详细创建过程

文件管理相关知识点和命令_通配符_33

-m mode:创建目录时直接给定权限,否则为默认权限

文件管理相关知识点和命令_通配符_34


rmdir删除空目录

-p:递归删除父目录

-v:显示详细信息

文件管理相关知识点和命令_知识点_35

rm -r:递归删除目录树

文件管理相关知识点和命令_文件管理_36


练习:

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

/testdir/dir1/x/a, /testdir/dir1/x/b,

/testdir/dir1/y/a, /testdir/dir1/y/b

指令:mkdir -pv /testdir/dir1/{x,y}/{a,b}

文件管理相关知识点和命令_文件管理_37


 (2)  如何创建/testdir/dir2/x, /testdir/dir2/y,

/testdir/dir2/x/a, /testdir/dir2/x/b

指令:mkdir -pv /testdir/dir2/{x/{a,b},y}

文件管理相关知识点和命令_知识点_38


(3)  如何创建/testdir/dir3, /testdir/dir4, /testdir/dir5,

/testdir/dir5/dir6, /testdir/dir5/dir7

指令:mkdir -pv /testdir/dir{3,4,5/dir{6,7}}

文件管理相关知识点和命令_文件管理_39

 mkdir -pv /test/{a,b}_{c,d}
 
 mkdir -pv /test/{bin,sbin,etc/sysconfig/network-scripts,usr/{bin,sbin,local/{bin,sbin,etc,lib},lib,lib64},var/{cahce,log,run}}

文件管理相关知识点和命令_文件管理_40