1、命令别名(alias)
通过alias命令实现:
(1) alias
显示当前shell进程所有可用的命别名
(2) alias NAME='VALUE'
定义别名NAME,其相当于执行命令VALUE
注意:在命令行中定义的别名,仅对当前shell进程有效,如果先永久有效,要定义在配置文件中
仅对当前用户:~/.bashrc
对所有用户有效: /etc/bashrc
Note:编辑配置给出的新配置不会立即生效
bash进程重新读取配置文件:
source /path/to/config_file
. /path/to/config_file
撤销别名:unalias
unalias [-a] name [name...]
-a 删除全部的别名
Note:如果别名同原来命令名称,则如果要执行原命令,可使用“\COMMAND”
2、glob(globbing)
bash中用于实现文件名“通配”
通配符:*, ?, []
(1) *
任意长度的任意字符
a*b:
aab, ab, a12b, abc
(2) ?
任意单个字符
a?b:
aab, ab, a12b, abc
(3) []
匹配指定范围内的任意单个字符
[0-9]
[a-z]:不区分字符大小写
[A-Z]:大写字母
(4) [^]
匹配指定范围外的任意单个字符
[^0-9]
专用字符集合:
[:digit:]:任意数字,相当于0-9
[:lower:]:任意小写字母
[:upper:]:任意大写字母
[:alpha:]:任意大小写字母
[:alnum:]:任意数字或字母
[:space:]:空格
[:punct:]:标点符号
练习:
1、显示/var/目录下所有以l开头,以一个小写字母结尾,且中间出现至少一位数字的文件或目录
[root@controller var]# ls /var/l*[0-9]*[[:lower:]]
/var/l2a /var/l666b
2、显示/var/目录下,以任意以为数字开头,且以非数字结尾的文件或目录
[root@controller var]# touch 78M@adaa
[root@controller var]# ls /var/[0-9]*[^0-9]
/var/78M@adaa
3、显示/var/目录下,以非字母开头,后面跟一个字母及其他任意长度任意字符的文件或目录
[root@controller var]# ls /etc/[^[:alpha:]][[:alpha:]]*
[root@controller var]# ls /var/[^a-z]*
/var/09adfaef@ /var/78M@adaa /var/88ancnemM
4、显示/var目录下,所有以m开头,以非数字结尾的文件或目录至/tmp/mageedu目录中
[root@controller var]# ls /var/m*[^0-9] /tmp/mageedu
/var/m666.com /var/m893edu
5、复制/etc/目录下,所有以.d结尾的文件或目录至/tmp/mageedu.com目录中
[root@controller ~]# mkdir /tmp/mageedu.com
[root@controller ~]# cp -r /etc/*.d /tmp/mageedu.com
6、复制/etc/目录下,所有以.conf结尾,且以m,n,r,p开头的文件或目录至/tmp/mageedu.com目录中
[root@controller ~]# ls /etc/[m,n,r,p]*.conf
/etc/man_db.conf /etc/nsswitch.conf /etc/rsyncd.conf
/etc/mke2fs.conf /etc/resolv.conf /etc/rsyslog.conf
[root@controller ~]# cp /etc/[m,n,r,p]*.conf /tmp/mageedu.com
3、bash的快捷键
Ctrl + l:清屏
Ctrl + a:跳转至命令开始处
Ctrl + e:跳转至命令结束处
Ctrl + c:取消命令的执行
Ctrl + u:删除命令行首是光标所在处的所有内容
Ctrl + k:删除光标所在处至命令行尾部的所有内容
4、bash的I/O重定向及管道
程序:指令+数据
读入数据:Input
输出数据:Output
打开的文件都有一个fd:file descriptor(文件描述符)
标准输入:keyborad,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
COMMAND >> /path/to/file.out 2>> &1
输入重定向:<
tr命令:转换或删除字符
tr [OPTION]... SET1 [SET2]
HERE Documentation:<<
# cat << EOF
# CAT > /path/to/somefile << EOF
管道:
COMMAND1 | COMMAND2 | COMMAND3 |...
Note:最后一个命令会在当前shell进程的子shell进程中执行
tee命令:
tee [OPTION]... [FILE]...
显示程序的输出并将其复制到一个或多个文件中
[root@syh ~]# cat syh.txt | tee syh.ttt
qweruiop
poiurewq
[root@syh ~]# cat syh.ttt
qweruiop
poiurewq
echo $PATH | tr 'a-z' 'A-Z' | tee syh.txt
练习:
1、将/etc/passwd文件中的前5行内容转换为大写后保存至/tmp/passwd.out文件中
[root@syh ~]# head -5 /etc/passwd| tr 'a-z' 'A-Z' >/tmp/passwd.out
2、将登录至当前系统上用户信息中的后3行的信息转换为大写后保存至/tmp/who.out文件中
[root@syh ~]# who | tail -n 1 |tr 'a-z' 'A-Z' > /tmp/who.out
文件处理工具:wc, cut, sort, uniq
wc命令:
wc [OPTION]... [FILE]...
-l:行
-w:单词
-c:字符
cut命令:
cut [OPTION]... [FILE]...
-d DELIMITER:指明分隔符
-f FILEDS:
#:第#个字段
#,#:离散的多个字段,例如1,3,6
#-#:连续的多个字段,例如1-6
混合使用:1-3,7
--output-delimiter=STRING
sort命令:
sort [OPTION]... [FILE]...
-f:忽略字符大小写
-r:逆序
-t:字段分隔符
-k #:以指定字段为标准排序
-n:以数值大小进行排序
-u:uniq,排序后去重
uniq命令:
uniq [OPTION]... [FILE]...
-c:显示每行重复出现的次数
-d:仅显示重复过的行
-u:仅显示不曾重复的行
Note:连续且完全相同方为重复
练习:以冒号分割,取出/etc/passwd文件的第6至第10行,并将这些信息按照第3个字段的数值大小进行排序,最后仅显示的各自的第1个字段
[root@syh ~]# head /etc/passwd|tail -4|sort -t: -k3 -n| cut -d: -f1