一、重定向
程序=指令+数据
没打开一个文件都有一个文件描述符fd(其实就是数字)
输入输出
标准输出
标准正确输出 1
标准错误输出 2
输出重定向
>:正确覆盖重定向
>>:正确追加重定向
2>:错误覆盖重定向
2>>:错误追加重定向
标准输出和错误出各自重定向到不同的位置中
合并标准输出和错误输出为同一个数据流进行重定向
&>:标准覆盖重定向
&>>:标准追加重定向
2>&1:将错误流重定向到标准正确流中
1>&2:将正确流重定向到标准错误流中
标准输入
覆盖
[root@localhost ~]# cat > test <<EOF
> ...
> EOF
追加
[root@localhost ~]# cat >> test <<EOF
> ...
> EOF
二、管道
管道符:|
command1 | command2 | command3
后一个命令会将当前shell进程的子shell中执行
tr命令:转换命令
-d删除
案例1
将/etc/passwd文件中的前5行内容转换为大写后保存至/root/passwd.out文件中
[root@localhost ~]# head -n 5 /etc/passwd | tr 'a-z' 'A-Z' > /root/passwd.out
[root@localhost ~]# cat passwd.out
ROOT:X:0:0:ROOT:/ROOT:/BIN/BASH
BIN:X:1:1:BIN:/BIN:/SBIN/NOLOGIN
DAEMON:X:2:2:DAEMON:/SBIN:/SBIN/NOLOGIN
ADM:X:3:4:ADM:/VAR/ADM:/SBIN/NOLOGIN
LP:X:4:7:LP:/VAR/SPOOL/LPD:/SBIN/NOLOGIN
案例2
将登录至当前系统上用户信息中最后一行的信息转换为大写后保存至who.out文件中
who | tail -n 1 | tr 'a-z' 'A-Z' > who.out
wc命令
-l:显示行数
-w:单词数
-c:显示字符数
cut命令
-d:指定分割符
-f:指定字段
sort命令
-f:忽略大小写
-r:逆序
-t:字段分隔符
-k:以指定字段为标准排序
-n:以数值进行排序
-u:排序后去重
uniq命令
-c显示每行重复出现的次数
-d:仅显示重复过的行
-u:仅显示没有重复过的行
案例
以冒号为分隔符,取出/etc/passwd文件中的第6列到第10列,并将这些信息按照第2个字段的数值大小进行排序,最后仅显示一个字段。
[root@localhost ~]# cut -d: -f6-10 /etc/passwd | cut -d: -f2 | sort -n | uniq -c