1、重定向
一般地,输出送到屏幕,输入来自键盘, 但是通过 I/O 重定向,我们可以改变输入输出方向。
执行命令后的输出,错误,命令的输入来源是stdout, stderr, stdin。默认前两者会输出到屏幕,后者会从键盘输入。
1.1、重定向输出
ls -l /usr/bin > ls-output.txt//覆盖或创建
会覆盖或者创建一个txt文件夹。
创建一个空文件夹:
>a.txt
ls -l /usr/bin >> ls-output.txt//追加或创建
1.2、重定向错误
0 1 2代表输入 输出 错误。
ls 2> error.txt
1.3、同时重定向输出和错误
0 1 2代表输入 输出 错误。所以>
和1>
相同
ls -l /bin/usr > ls-output.txt 2>&1
或者
ls -l /bin/usr &> ls-output.txt
1.4 重定向输入
cat < a.txt
1.5、 处理不需要的输出
把输出或者错误信息扔掉,只需要把它重定向到 /del/null文件。
ls -l /bin/usr 2> /dev/null
2、 管道
把前一个指令的输出 当作后一个指令的输入。
常见指令:
cat - 连接文件
sort - 排序文本行
uniq - 报道或省略重复行
grep - 打印匹配行
wc - 打印文件中换行符,字,和字节个数
head - 输出文件第一部分
tail - 输出文件最后一部分
cat
用于查看文本内容,复制目标文件,传入标准输出(如屏幕打印)
cat a.txt
使用cat连接多个文件
cat movie.mpeg.0* > movie.mpeg
单独输入一个cat会等待输入,按ctrl+d结束输入。
如果输入cat > lazy_dog.txt,会等待输入并重定向输出。按ctrl+d结束输入。
cat > lazy_dog.txt
The quick brown fox jumped over the lazy dog.
cat < lazy_dog.txt
等价于
cat lazy_dog.txt
以less方式查看输出
ls -l /usr/bin | less
sort
排序
uniq
去重
加 -d :只显示重复的
例如,我们想把目录/bin 和/usr/bin 中 的可执行程序都联合在一起,再把它们排序,然后浏览执行结果:
ls /bin /usr/bin | sort | less
只看重复的部分
ls /bin /usr/bin | sort | uniq -d | less
wc - 打印行,字和字节数
wc ls-output.txt
7902 64566 503634 ls-output.txt
统计程序数量:
ls /bin /usr/bin | sort | uniq | wc -l
grep - 打印匹配行
找到所有zip文件
ls /bin /usr/bin | sort | uniq | grep zip
”-i”导致 grep 忽略大小
”-v”选项会告诉 grep 只打印不匹配的行。
head / tail - 打印文件开头部分/结尾部分
head 只打印前10行
-n 指定行数
head -n 5 ls-output.txt
ls /usr/bin | tail -n 5
tail -f /var/log/messages//读取日志
-f 持续等待读取
tee
从标准输入
输出到屏幕和文件
保存ls的输出,并在里面查找zip,打印出结果。
ls /usr/bin | tee ls.txt | grep zip
3、通道和重定向的区别
所有的指令和文件可以分为这几类:
A: 能产生输出的指令,如cat,echo(注意echo不能接受输入)
B: 能接受输入的指令,如cat,sort
AB: 既能接收输入又能产生输出的指令。 如cat
C: 文件
管道:连接标准输出和标准输入
左边是一行命令,返回标准输出。
右边是一行命令,支持从标准输入读取
A | AB |...| AB | B
重定向输入:
左边是一行命令,支持从标准输入读取
右边是一个文件路径
重定向输出:
左边是一行命令,返回标准输出。
右边是一个文件路径
B < C
A > C