bash的基础特性(2)
一. 命令的别名(alias)
- alias可以将复杂的命令简化, 来提高工作的效率. 例如系统中默认将"ls -l"alias成了"ll".
- 通过alias来管理命令
- (1) alias:显示当前shell进程中所有可用的命令别名
$ alias alias l.='ls -d .* --color=auto' alias ll='ls -l --color=auto' alias ls='ls --color=auto' alias vi='vim' alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
- (2) alias NAME='VALUE'定义别名NAME, NAME就相当于NAME了
$ alias cdnet='cd /etc/sysconfig/network-scripts' $ cdnet $ pwd /etc/sysconfig/network-scripts ```
Note: 在命令行中定义的别名, 仅对当前shell进程有效, 要定义在配置文件中
-
仅对当前用户有效: ~/.bashrc
-
对所有用户有效: /etc/bashrc
bash进程重新读取配置文件: source /path/to/config_file
-
撤销别名(unalias)
unalias [-a] name[name....]-a: 撤销所有别名
Note: 如果别名同原命令的名称相同, 想要执行原命令, 可使用"\COMMAND"
二. glob/globbing: 通配符
glob在bash中用于实现文件名"通配"
通配符: *, ?, []
-
(1) * 用于任意长度的的任意字符 例如a*b和aab,abb,acb,accccccb是一样的
$ ls /etc/a*b /etc/aliases.db /etc/anacrontab
-
(2) ? 匹配任意单个字符 例如a?b和akb,a1b,acb是一样的
$ ls -d Downloa?s Downloads
-
(3) [] 匹配指定范围内的任意单个字符 例如[a-z]
-
(4) [^] 匹配指定范围外的任意单个字符 例如[^0-9]表示除数字以外的任意字符
专用字符合集:
[:digit:] 任意数字,相当于0-9(实际用的时候要[[:digit:]]这样用)
[:lower:] 任意小写字符
[:upper:] 任意大写字符
[:alpha:] 任意大小写字符
[:alnum:] 任意数字或字母
[:space:] 任意空格字符
[:punct:] 标点符号
[:alnum:] [:alpha:] [:blank:] [:cntrl:]
[:digit:] [:graph:] [:lower:] [:print:]
[:punct:] [:space:] [:upper:] [:xdigit:]
三. bash的快捷键
- Ctrl+l: 清屏, 相当于clear
- Ctrl+a: 将光标跳转至命令开始处
- Ctrl+e: 跳转至命令结尾处
- Ctrl+c: 取消命令执行
- Ctrl+u: 删除命令行首至光标所在处的所有内容
- Ctrl+k: 删除光标所在处至命令尾部的所有内容
四. bash的I/O重定向及管道
程序: 指令+数据
读入数据: Input
输出输入: Output
打开的文件都有一个fd: file description(文件描述符)
标准输入: keyboard, 0
标准输出: monitor, 1
标准错误输出: monitor, 2
I/O重定向: 改变标准位置
-
输出重定向: COMMAND > NEW_POSITION, COMMAND >> NEW_POSITION
-
>: 覆盖重定向, 目标文件中的原有内容会被清除
-
>>: 追加重定向, 新内容会追加到目标文件中
-
# 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
-
输入重定向: <
-
HERE Documentation: <<
$ cat << EOF > fdsfadfads > fdsfs > EOF fdsfadfads fdsfs
- cat > /path/to/somefile << EOF: 输入字符以EOF结尾并输出至somefile
-
管道(将前一个命令的结果作为后一个命令的参数)
COMMAND1 | COMMAND2 | COMMAND3.....
Note :最后一个命令会在当前shell的子进程中执行
五. tee命令:
tee [OPTION]... [FILE]...
Copy standard input to each FILE, and also to standard output.