命令别名(alias)
(1)alias
显示当前shell进程所有可用的命令别名:
(2)alias NAME='VALUE'
定义别名NAME,相当于执行命令value
(3)unlias
撤销别名
注意:
在命令行中定义的别名,仅对当前shell进程有效:如果想永久有效,要定义再配置文件中
仅对当前用户:~/.bashrc
对所有用户有效:/etc/.bashrc
别名持久化:
vim .bashrc
alias NAME='VALUE'
source .bashrc
glob(globbing)
bash中用于实现文件"通配"
通配符:*,?,[]
(1)*:
任意长度的任意字符
a*b:
aab,ab,a123b
(2)?:
任意单个字符
a?b
aab
(3)[]:
匹配指定范围内的任意单个字符
[a-z]:不区分字符大小写
[0-9]:
[A-Z]:代表大写字母
(4)^:
匹配指定范围之外的任意字符
[^0-9]
专用字符集合:
[:alnum:]:任意数字或字母
[:alpha:]:任意大小写字母
[:digit:]:任意数字,相当于0-9
[:lower:]:任意小写字母
[:punct:]:表示标点符号
[:space:]:匹配空格字符
[:upper:]:任意大写字母
[:xdigit:]
[:blank:]
[:cntrl:]
[:print:]
[:graph:]
练习
1.显示/var目录下所有以l开头,以一个小写字母结尾,且中间至少出现一位数字的文件或者目录;
2.显示/etc目录下以任意一位数字开头,且以非数字结尾的文件或者目录
3.显示/etc目录下,以非字母开头,后面跟了一个字母及其他任意长度任意字符的文件或者目录
4.复制/etc目录下,所有以m开头,以非数字结尾的文件或者目录至/tmp/fengzi目录中
5.复制/etc目录下,所有以.d结尾的文件或者目录到/tmp/fengzi目录中
6.复制/etc目录下,所有以.conf结尾,且以m,n,r,p开头的文件或者目录到/tmp/fengzi目录下
答案
1.ls -ltr l*[0-9]*[[:lower:]]
2.ls -ltr [0-9]*[^0-9]
3.ls -ltr [^0-9][a-z]*
4.cp /etc/m*[^0-9] /tmp/fenzi
5.cp /etc/*.d /tmp/fengzi
6.cp /etc/{m,n,r,p}*.conf
bash的快捷键
ctrl+l:清屏,相当于clear命令
ctrl+a:跳转至命令开始处
ctrl+e:跳转至命令结尾
ctrl+c:取消命令的执行
ctrl+u:删除命令行首至光标所在处的所有内容
ctrl+k:删除光标所在处至命令行尾部的所有内容
bash的I/O重定向管道
程序:指令+数据
读入数据:input
输出数据:output
打开的文件都有一个fd:file descriptor(文件描述符)
标准输入:keyboard, 0
标准输出:monitor,1
标准错误输出:monitor,2
I/O重定向:改变标准位置
输出重定向:command > new_pos, command >> new_pos
>:覆盖重定向,目标文件中的原有内容将会被清除;
>>:追加重定向,新内容会追加到目标文件尾部;
#set -C:禁止将内容覆盖已有文件的内容
强制覆盖:>|
#set +C:关闭禁止内容覆盖已有文件的内容
2>:覆盖重定向错误输出数据流;
2>>:追加重定向错误输出数据流;
标准输出和错误输出鸽子定向不通的位置;
command > /path/to/file.out 2 > /path/to/error.out
合并标准输出和错误输出为同一个数据流进行重定向:
&>:覆盖重定向
&>>:追加重定向
command > /path/to/file.out 2>&1
输入重定向
tr命令:转换成删除字符
HERE Documentation: <<
#cat << EOF
#cat > /path/to/somefile <<EOF
管道:
COMMAND1 | COMMAND2 | COMMAND3 |...
Note:最后一个命令会在当前shell进程的子shell进程中