文件管理相关知识点和命令
文件通配符
*:匹配零个或者多个任意字符
?:匹配任意单个字符
~:当前用户家目录
~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]
3 、显示/etc/ 目录下以非字母开头,后面跟了一个字母及其它任意长度任意字符的文件或目录ls -a /etc/[^[:alpha:]][[:alpha:]]*
4 、显示/etc 目录下所有以m 开头以非数字结尾的文件或目录ls -a /etc/m*[^0-9]
5 、显示/etc 目录下,所有以.d 结尾的文件或目录ls -ad /etc/*.d
6 、显示/etc 目录下,所有.conf 结尾,且以m,n,r,p 开头的文件或目录ls -ad /etc/[mnrp]*.conf
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不会发生改变,结果如下:
r如上cat shabi文件时,atime并没有更改,是因为系统设定
因为有些文件会经常被访问,如果每访问一次,就刷新一次atime,会很占用资源且极其浪费,
所以系统设定为一般情况下atime的时间比mtime或ctime早时,访问atime后,atime会自动刷
新为当前时间
如下atime比mtime时间晚,当访问了shabi文件后,amtime是没有刷新的
设置mtime时间,如下atime时间比mtime时间早,访问shabi文件后,atime刷新了
touch 选项 file
touch f1:如果f1文件存在,则会刷新f1的时间戳
如果f1文件不存在,则会创建f1文件(空的)
touch -c file:如果文件存在则刷新时间戳,
如果文件不存在也不创建
touch -a file:刷新文件的atime,且ctime会随之刷新
touch -m file:刷新文件的mtime,且ctime会随之刷新
touch -t 201007281029.30(时间格式) file :指定atime,mtime时间,同时ctime也会改变为当前时
间,因为atime和mtime变更了,元数据必然改变
touch -d “+2 day” file:指定时间,同上说明,同上效果
touch -d "+2 day" file
文件管理工具:cp mv rm
cp命令==>copy
源文件;目标文件
源文件为单个文件时:
如果目标文件不存在,则事先创建此文件,并复制源文件的数据流值目标文件中
如果目标文件存在:
目标文件为非目录文件时,则覆盖目标文件
目标文件是目录文件时,则先在目标目录下创建一个与源文件同名的文件,并复制其数据流
源文件为多个文件时:
如果目标文件不存在:错误
如果目标文件存在
如果目标文件是非目录文件;错误
如果目标是目录文件:分别复制每一个文件至目标目录中,并保持原名
源文件为目录时:
须使用-r选项,否则命令无法执行成功
如果目标文件不存在;则创建与源目录同名的目录,并复制源目录中所有的文件至目标目录下
如果目标文件存在
如果目标文件是非目录文件,错误
如果目标是目录文件:则在目标目录下创建一个和源目录同名的目录,
并复制目录中所有的文件至新创建的与源目录同名目录下
直观图:
常用选项
-i:交互式复制,即覆盖之前会提醒用户确认
注意:一般情况下,root用户的cp是“cp -i”的别名,执行cp命令是默认有交互式提醒
而在普通用户中,cp命令就是单指cp命令,没有带选项,所以在普通用户中,
执行cp命令时,不会有交互式提醒,
-f:强制覆盖目标文件。此选项在一般cp文件时无作用
用法:在root用户上cp一个/etc/issue文件到普通用户上~username/,
这个在普通用户上的issue的属主和属组都是root,
此时普通用户想要cp文件到issue会提示权限不够,无法复制
但是加上-f选项就可以强制覆盖目标文件
可理解为:普通用户权限不够不能执行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某文件时,可以修改文件名
例如:
在不同路径下,mv某文件时,则是把源文件移动到目标路径目录下
-i交互式
-f:强制覆盖现有的文件
源文件为单个文件时:
如果目标文件不存在,则将源文件名改为目标文件名,内容不变(可理解为改名)
如果目标文件存在:
目标文件为非目录文件时,则将源文件名改为目标文件名,内容不变(貌似和上面一样啊
目标文件是目录文件时,则将源文件移动至目标目录中
源文件为多个文件时:
如果目标文件存在
如果目标文件是非目录文件;错误
如果目标是目录文件:将所有的源文件都移动至目标目录中
源文件为目录时:
如果目标文件不存在;则将源目录改名为目标为目录
如果目标文件存在
如果目标文件是非目录文件,错误
如果目标是目录文件:则将源目录移动至目标文件中
rm:可以删除一个目录中的一个或多个文件或目录,也可以将某个目录及其下属的所有文件及其 子目录 均删除掉。对于链接文件,只是删除整个链接文件,而原有文件保持不变。
-i交互式
-r:递归删除
-rf:强制递归删除
-f:强制
危险操作: rm -rf /*
注意:所有不用的文件建议不要直接删除,而是移动至某个专用目录;(模拟回收站)
命令别名:alias
alias可以显示当前shell进程所有可用的命令的别名
定义别名:alias cls=clear,执行cls时和clear效果一样
但是在命令行里定义的别名。仅对当前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'
使用了原命令后,颜色标识没了
小练习:
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:不以树状图列出目录的内容
-d:只显示目录,不显示文件
-s:列出文件和目录大小(配合-h选项更直观)
-t用文件和目录的更改时间排序(配合-D效果更好)
-L level:指定显示目录的层级数目
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 -pv /testdir/dir1/{x,y}/{a,b}
(2) 如何创建/testdir/dir2/x, /testdir/dir2/y,
/testdir/dir2/x/a, /testdir/dir2/x/b指令:mkdir -pv /testdir/dir2/{x/{a,b},y}
(3) 如何创建/testdir/dir3, /testdir/dir4, /testdir/dir5,
/testdir/dir5/dir6, /testdir/dir5/dir7指令:mkdir -pv /testdir/dir{3,4,5/dir{6,7}}
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}}