Linux程序设计读书笔记,供新手阅读这本书的重点,同时也是加强自己的记忆,扫扫忙点。
首先我们来看最简单的重定向输出:
ls -l > output.txt
现在我们只需知道,标准的文件描述符的三个,0代表标准输入,1代表标准输出, 2代表标准错误输出。
这个例子是通过>操作进行重定向输出,如果源文件存在则直接覆盖,如果不想覆盖,可以使用两种方法:
- set -o noclobber 设置noclobber选项 set +o noclobber 取消选项
但我们设置之后我们再去覆盖会有提示:
当我们取消该选项之后,就可以直接覆盖了。
- ">>" 使用追加操作符可以将内容直接追加到一个文件中
当我们想把命令的标准输入和标准输出分别重定向到不同文件中时:
kill -HUP 1234 > killout.txt 2>killerr.txt
这样就分别重定向,那么如果想同时重定向到一个文件中呢?
kill -l 1234 > killouterr.txt 2>&1
使用 >& 操作可以使标准输入输出同时定向到同一个文件中。
这里要注意操作符出现的顺序,这条命令的意思是:把标准输出重定向到文件killouterr.txt中,然后将标准错误输出重定向到和1(标准输出)一样的地方这里不要弄错顺序,不然的道德不是理想的结果。
上面是重定向的简单解释,后续还会有更多的内容,接着我们来看管道:
不同管道中有着不同的数据流,我们可以使用管道操作符 | 来链接进程,在Linux中,通过管道连接的进程可以同时运行,并且随着数据流在它们之间的传递可以自动的协调,一个简单的例子,
使用sort命令对ps命令的输出进行排序。不使用管道我们要走两步:
ps > psout.txt
sort psout.txt > pssort.out
如果使用管道,那么就会变的简单精巧:
ps | sort > pssort.out
允许链接的数目是没有限制的我们再来一个稍微复杂点的命令
ps -xo comm | sort | uniq | grep -v sh | more
这个命令的意思是:显示错有进程,进行排序,去除重复,抓取不是sh的进程,最后分屏显示。