文件管理
cp,mv,rm
复制命令:cp
cp [OPTION]... SOURCE DEST #复制单个文件命名为新文件名或保持原文件名
cp [OPTION]... SOURCE... DIRECTORY #复制一个或多个文件到指定目录下
cp [OPTION]... -t DIRECTORY SOURCE... #与上一条结果相同,只不过源和目标做了个调换
cp SRC DEST
SRC是文件:
如果目标不存在,新建DEST,并将SRC中的内容填充至DEST
如果目标存在
如果DEST是文件,直接将SRC中的内容覆盖至DEST中
如果DEST是目录,保留SRC原名并复制到DEST
SRC是目录:
-r:递归复制SRC目录,默认不添加选项是不支持的
如果DEST不存在:创建指定目录,并将SRC下的内容复制到DEST中
如果DEST存在
如果DEST是文件:执行结果状态失败
如果DEST是目录:复制到DEST目录中
cp SRC... DEST
SRC...:表示多个源文件
DEST必须存在并且为目录,其它情况命令执行结果状态都会失败
常用选项:
-i:交互式提示是否覆盖目标文件
-r,-R:递归复制目录以及内部的所有内容
-a:保留源文件的所有文件属性
--preserv=[要保留的下列参数]
mode:权限
ownership:属主属组
timestamp:时间属性
links:链接属性
context:安全上下文
all:保留所有属性
xattr:扩展属性,隐藏属性
-d:不去跟踪符号链接文件的源文件,也就是说复制的时候复制显示的符号链接文件
-p:保留权限,属主属组时间戳 = --preserv=mode,ownership,timestamp
-v:显示复制过程
-f:强制复制
移动,重命名命令:mv
mv [OPTION]... SOURCE DEST
mv [OPTION]... SOURCE... DIRECTORY
mv [OPTION]... -t DIRECTORY SOURCE
如果SRC是单个文件:
如果DEST不存在:移动到指定目录下并改名为指定名称,源文件就没了
如果DEST存在
如果目标是文件:将SRC文件内容覆盖至目标文件中并且删除源文件
如果目标是目录:保留SRC文件名,直接移动到目标目录下
如果SRC是多个文件:
DEST必须存在,否则命令执行状态结果就会失败
删除命令:rm
rm [OPTION]...FILE...
常用选项:
-i:交互式提醒
-r:递归删除
-r:强制删除
Bash的基础特性(2)
1、命令别名(alias)
Note:当直接执行"alias"命令不加任何选项时,会打印出当前shell进程中已存在的命令别名,如图
(1)alias NAME='VALUE'
定义别名"NAME",其相当于执行命令"VALUE"
例子:
alias cdnet='cd /etc/sysconfig/network-scripts'
Note:在命令行中定义的别名,仅对当前shell进程有效
(2)如果想永久定义就要编辑以下配置文件
对当前用户有效:~/.bashrc,保存后使用"source ~/.bashrc"重新读取配置文件生效,此处使用"vim"编辑工具打开的,后续会
有文章详解
对所有用户有效:/etc/bashrc,保存后使用"source ~/.bashrc"重新读取配置文件生效
撤销别名
unalias [-a] name
-a:撤销当前shell中的所有别名定义
后面跟name就是撤销自己定义的别名
例子:
unalias cdnet #撤销上面例子中定义的别名
Note:如果别名同原命令的名称,则如果要执行原命令,可使用"\COMMAND"来执行
2 通配符:glob(globbing)
bash中用于实现文件名"通配"
通配符:*,?,[]
(1)*
任意长度的任意字符
例子:
a*b:以a开头b结尾,中间是任意长度任意字符的文件,"aab,a123b,acb..."都是符合的
(2)?
任意单个字符
例子:
a?b:以a开头b结尾,中间只能有一个任意字符的文件,"a3b,acb,adb..."都是符合的
任意两个字符
例子:
a??b:以a开头b结尾,中间可以有两个任意字符的文件,"accb,a12b,addb..."都是符合的
任意三个字符(一次类推,之间匹配几个字符,就写几个"?")
.....
(3)[]
只能匹配指定范围内的任意单个字符
[0-9]:所有数字中挑一个
[a-z]:所有字符中挑一个,默认不区分大小写
[A-Z]:仅匹配大写字母
例子:
ls /tmp/a[0-9]b:这就会匹配所有以a开头,b结尾,中间是0-9之间任意一个数字的文件
专用字符集合:
[:digit:] :任意的数字,相当于0-9,[[:digit:]] = [0-9]
ls /tmp a[[:digit:]]b #匹配/tmp下a开头b结尾并且中间是任意单个数字的文件
[:lower:] :任意小写字母
ls /tmp a[[:lower:]]b #匹配/tmp下a开头b结尾并中间是单个小写字母的文件
[:upper:] :任意大写字母
ls /tmp a[[:upper:]]b #匹配/tmp下a开头b结尾并中间是单个大写字母的文件
[:alpha:] :任意大小写字母
ls /tmp a[[:alpha:]]b #匹配/tmp下a开头b结尾并中间是任意单个大小写字母的文件
[:alnum:] :数字或字母
ls /tmp a[[:alnum:]]b #匹配/tmp下a开头b结尾并中间是任意单个大小写字母以及数字的文件
[:space:] :空格字符
[:punct:] :标点符号
转义符号"\"
加入要匹配[a-z]中的"-"就要使用"\-"转义,让系统知道按照一个普通字符处理
(4)[^]
匹配指定范围之外的任意单个字符
练习:
1、显示/var目录下所有以"l"开头,以一个小写字母结尾,且中间出现至少一位数字的文件或目录?
解:ls -d /var/l*[[:digit:]]*[[:lower:]]
2、显示/etc目录下,任意一位数字开头,且以非数字结尾的文件或目录
解:ls -d /etc/[[:digit:]]*[^[:digit:]]
3、显示/etc目录下,以非字母开头,后面跟了一个字母及其他任意长度任意字符的文件或目录
解:ls -d /etc/[^[:alpha:]][[:alpha:]]*
4、复制/etc目录下,所有以m开头,以非数字结尾的文件或目录至/tmp/glob目录中
解:cp -a /etc/m*[^[:digit:]] /tmp/glob
5、复制/etc目录下,所有以.d结尾的文件或目录至/tmp/glob目录中
解:cp -a /etc/*.d /tmp/glob
6、复制/etc目录下,所有以.conf结尾,且以m,n,r,p开头的文件或目录至/tmp/glob目录中
解:cp -a /etc/[m,n,r,p]*.conf /tmp/glob