bash的基础特性(2)
目录
一、命令别名(alias)
1.通过alias命令实现
① alias
显示当前shell进程所有可用的命令别名
② alias NAME='VALUE'
定义别名NAME,其相当于执行命令VALUE
注意:在命令行中定义的别名,仅对当前shell进程有效;如果想永久有效,要定义在配置文件中
仅对当前用户:~/.bashrc
对所有用户有效:/etc/bashrc
问题:编辑方式给出的新配置不会立即生效,如何操作可以立即生效
命令:bash进程重新读取配置文件source /path/to/config_file
或 . /path/to/config_file
2.撤消别名:unalias
unalias [-a] name [name ...]
Note:如果别名同原命令的名称,则如果要执行原命令,可使用"\COMMAND"
二、glob (globbing)
bash中用于实现文件名“通配”
1.通配符:*, ?, []
① *
任意长度的任意字符
a*b:
aab, ab, a123b,
abc
② ?
任意单个字符
a?b:
aab
ab, a12b, abc
③ []
匹配指定范围内的任意单个字符
[0-9]
[a-z]:不区分字符大小写
④ [^]
匹配指定范围外的任意单个字符
[^0-9]
专用字符集合:
[:digit:]:任意数字,相当于0-9
P.S.[[:digit:]]相当于[0-9]
[:lower:]:任意小写字母
[:upper:]:任意大写字母
[:alpha:]:任意大小写字母
[:alnum:]:任意数字或字母
[:space:]:
[:punct:]:标点符号
[[email protected] me]$ ls a[[:lower:]]c
aac abc
转义:\
2.练习
①显示/tmp目录下所有以l开头,以一个小写字母结尾,且中间出现至少一位数字的文件或目录
# ls -d /tmp/l*[0-9]*[[:lower:]]
②显示/tmp目录下,以任意一位数字开头,且以非数字结尾的文件或目录
# ls -d /tmp/[0-9]*[^0-9]
③显示/tmp/目录下,以非字母开头,后面跟了一个字母及其它任意长度任意字符的文件或目录
# ls -d /tmp/[^[:alpha:]][[:alpha:]]*
④复制/etc目录下,所有以m开头,以非数字结尾的文件或目录至/tmp/tudou目录中
# cp -a /etc/m*[^0-9] /tmp/tudou
或# cp -r /etc/m*[^0-9] /tmp/tudou
⑤复制/etc目录下,所有以.d结尾的文件或目录至/tmp/tudou目录中
# cp -a /etc/*.d /tmp/tudou
或# cp -r /etc/*.d /tmp/tudou
⑥复制/etc目录下,所以有.conf结尾,且以m,n,r,p开头的文件或目录至/tmp/mageedu.com目录中
# cp -a /etc/[mnrp]*.conf /tmp/mageedu.com
三、bash的快捷键
Ctrl+l:清屏,相当于clear命令
Ctrl+a:跳转至命令开始处
Ctrl+e:跳转至命令结尾处
Ctrl+c:取消命令的执行
Ctrl+u:删除 命令行首 至 光标所在处 的所有内容
Ctrl+k:删除 光标所在处 至 命令行尾部 的所有内容
四、bash的的I/O重定向及管道
程序:指令+数据
读入数据:Input
输出数据:Output
Linux一切皆文件,内核识别设备文件需要id,因此打开的文件都有一个fd:file descriptor (文件描述符)
标准输入:keyborad, 0
命令本身无默认参数且输入命令时未给予参数,则从标准输入(键盘)中获取数据
标准输出:monitor, 1
命令的执行结果
标准错误输出:monitor, 2
命令的执行错误状态结果
e.g. cat不指定位置则从标准输入(键盘)中获取数据
I/O重定向:改变标准位置
1.输出重定向
COMMAND > NEW_POS
COMMAND >> NEW_POS
>:覆盖重定向,目标文件中的原有内容会被清除
>>:追加重定向,新内容会追加至目标文件尾部
问题:如何禁止对覆盖重定向
# set -C:禁止将内容覆盖输出至已有文件中
问题:系统已经禁止对覆盖重定向,如果还想覆盖呢
强制覆盖:>|
或# set +C: P.S. C要大写 (仅对当前shell有效)
2>:覆盖重定向错误输出数据流
2>>:追加重定向错误输出数据流
2.标准输出和错误输出各自定向至不同位置
COMMAND > /path/to/file.out 2> /path/to/error.out
3.合并标准输出和错误输出
两类标准输出合并为同一个数据流进行重定向
&>:覆盖重定向
&>>:追加重定向
COMMAND > /path/to/file.out 2> &1
COMMAND >> /path/to/file.out 2>> &1
4.输入重定向:<
不能接文件作为参数的命令,可以用输入重定向获取参数
命令:tr转换或删除字符 (tr不能接文件作参数)
tr [OPTION]... SET1 [SET2]
-d:把参数中的与SET1相同的字符都删去
不加参数:把字符集SET1 对位替换成SET2
P.S. 使用输入重定向时一般不会跟两个参数
<<结束字符 创建文档
# cat << EOF
# cat > /path/to/somefile << EOF
此处生成文档:从键盘键入一些字符保存到指定文档,遇到给定字符结束
5.管道
COMMAND1 | COMMAND2 | COMMAND3 |...
Note:最后一个命令会在当前shell进程的子shell进程中执行
命令:tee 既输出到屏幕又保存到指定路径下
tee [OPTION]... [FILE]... 一路输入,两路输出
练习
①将/etc/passwd文件中的前5行内容转换为大写后保存至/tmp/passwd文件中
$ head -5 /etc/passwd | tr 'a-z' 'A-Z' > /tmp/passwd
②将登录至将前系统上用户信息中的后3行的信息转换为大写后保存至/tmp/who.out文件中
# who | tail -n 3 | tr 'a-z' 'A-Z' > /tmp/who.out
回顾
alias/unalias, glob (*, ?, [], [^]), 快捷键
bash基础特性:
命令行展开:~, {}
命令别名:alias/unalias
命令历史:history
命令和路径补全:$PATH
glob:*, ?, [], [^]
快捷键:Ctrl+{a,e,l,c,u,k}
命令hash:hash
IO重定向、管道:
标准输出重定向:>, >>
标准错误重定向:2>, 2>>
&>, &>>
COMMAND > /path/to/somefile.out 2> &1
输入重定向:<
显式使用:tr
隐式使用:...
管道:COMMAND1 | COMMAND2 | ...
参考资料:
马哥随堂笔记
注:诚恳欢迎读者对本文提出批评意见,若发现存在错误,我定第一时间修改。如果读者觉得文章对您有帮助,欢迎点赞鼓励一下哟٩(๑❛ᴗ❛๑)۶。