1、linux文件描述符:
可以理解为linux跟踪打开文件,而分配的一个数字,这个数字有点类似c语言操作文件时候的句柄,通过句柄就可以实现文件的读写操作。
linux启动后,会默认打开3个文件描述符,分别是:标准输入standard input 0,标准错误standard output 1,错误输出:error output 2
以后打开文件后。新增文件绑定描述符 可以依次增加。因此,所有运行的shell命令,都会有默认3个文件描述符。
标准输入
command < input_file
标准输出
command > out_file
标准错误
command 2> error_file
操作符">"重定向输出到一个文件。如果没有命令指定并且文件不存在的话,Bash将会创建一个空文件。
java -jar abc.java > /dev/null 2>&1 &
2>&1 意思是把 标准错误输出 重定向到 标准输出.
二、 管道
在 Bash 中,管道符使用"丨"代表。管道符也是用来连接多条命令的,如"命令1丨命令2"。不过和多命令顺序执行不同的是,用管道符连接的命令,命令 1 的正确输出作为命令 2 的操作对象。这里需要注意,命令 1 必须有正确输出,而命令 2 必须可以处理命令 1 的输出结果;
xargs命令 可以处理一些管道符不接受的命令如:cp rm mv
find /home/arrow/*.txt | xargs -i rm -rf {}
find /home/arrow/*.txt | xargs rm -rf
-exec命令
find /home/arrow/*.txt -exec rm {} \;
xargs与exec区别
1、xargs借助与 | 管道,-exec不需要
2、xargs将前一个命令的标准输出传递给下一个命令,作为它的参数,xargs的默认命令是echo,空格是默认定界符,将多行输入转换为单行。exec参数是一个一个传递的,传递一个参数执行一次命令。
3、2个命令在处理的流程上不一样所以在处理效率上也不同。xargs在处理大量文件上时间比exec短
4、xargs特殊符号处理(空格等)
find . -type f -name "*.txt" -print0 | xargs -0 rm -f