1、命令行展开
~: 展开为用户的主目录
~USERNAME:展开为指定用户的主目录
{}:可承载一个以逗号分隔的列表,并将其展开为多个路径
- /tmp/{a,b} = /tmp/a, /tmp/b
- /tmp/{tom,jerry}/hi = /tmp/tom/hi, /tmp/jerry/hi
1 练习: 2 (1) 如何创建/tmp/x/y1, /tmp/x/y2, /tmp/x/y1/a, /tmp/x/y1/b, /tmp/x/y2/a, /tmp/x/y2/b 3 mkdir /tmp/x/{y1,y2}/{a,b} 4 5 (2) 如何创建x_m, y_m, x_n, y_n 6 mkdir {x,y}_{m,n} 7 8 (3) 如何创建/tmp/bin, /tmp/sbin, /tmp/usr, /tmp/usr/bin, /tmp/usr/sbin 9 mkdir -p /tmp/{bin,sbin,usr/{bin,sbin}}
2、命令别名(alias)
通过alias命令实现:
(1) alias
显示当前shell进程所有可用的命令别名;
(2) alias NAME='VALUE'
定义别名NAME,其相当于执行命令VALUE;
注意:在命令行中定义的别名,仅对当前shell进程有效;如果想永久有效,要定义在配置文件中;
- 仅对当前用户:~/.bashrc
- 对所有用户有效:/etc/bashrc
小Tips:
编辑配置给出的新配置不会立即生效,需要让bash进程重新读取配置文件:source /path/to/config_file 或 . /path/to/config_file
撤消别名:unalias
unalias [-a] name [name ...]
Note: 如果别名同原命令的名称,则如果要执行原命令,可使用"COMMAND";
3、bash的快捷键
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重定向:改变标准位置
1)输出重定向
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
2)输入重定向:<
tr命令:转换或删除字符
命令格式:tr [OPTION]... SET1 [SET2]
HERE Documentation:<<
# cat << EOF
# cat > /path/to/somefile << EOF
5、管道
管道:一个命令的输出可以通过管道做为另一个命令的输入。
管道我们可以理解现实生活中的管子,管子的一头塞东西进去,另一头取出来,这里“ | ”的左右分为两端,左端塞东西(写),右端取东西(读)。
例:ls -alh | more # 将当前路径下的文件的详细信息按照分页的方式打印在屏幕上
1 练习: 2 1、将/etc/passwd文件中的前5行内容转换为大写后保存至/tmp/passwd.out文件中; 3 # head -n 5 /etc/passwd | tr "a-z" "A-Z" > passwd.out 4 2、将登录至将前系统上用户信息中的后3行的信息转换为大写后保存至/tmp/who.out文件中; 5 # who | tail -n 3 | tr 'a-z' 'A-Z' > /tmp/who.out
6、文本处理工具:
wc命令:
命令格式:wc [OPTION]... [FILE]...
- -l: lines
- -w: words
- -c: characters
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 DELIMITER: 字段分隔符
- -k #:以指定字段为标准排序
- -n: 以数值大小进行排序
- -u: uniq,排序后去重
uniq命令:
命令格式:uniq [OPTION]... [FILE]...
- -c: 显示每行重复出现的次数;
- -d: 仅显示重复过的行;
- -u: 仅显示不曾重复的行;
- Note: 连续且完全相同方为重复