重定向
将原本要输出到屏幕的数据,重新定向到某个文件中去
为什么要是用重定向
屏幕输出的信息很重要,而且希望保存重要的信息
后台执行中的程序,不希望它干扰到屏幕正常的输出结果
系统的例行(临时)命令,比如定时任务的执行结果,希望可以存储下来
一些执行命令,我们已经知道它可能出现错误,想将它直接丢弃
错误日志和正确日志需要分别存储到不同的文件中去
标准输入 (文件描述符 0)
比如我输入一个命令 ,这个就是标准输入
标准输出 (文件描述符 1)
执行命令时输出的正确结果
错误输出 (文件描述符 2)
比如输入一个错误的命令,回车之后显示的错误结果
输出重定向
标准输出重定向 > (每次都会覆盖原文件,正确的进文件,错误的在屏幕)
>> (会在文件尾部追加内容)
错误输出 2> (每次都会覆盖,错误的输出进文件,正确的输出到屏幕)
>> (会追加内容)
如何将正确的和错误的分别定向在不同的文件
命令 > ok.txt 2> err.txt
如何将正确和错误的都定向到一个文件(混合输出)
命令 &> ok.txt
如何将正确的输出到屏幕,错误的丢到垃圾桶(黑洞)
命令 2> /dev/null
两条命令同时重定向
;分号表示 无论ls命令执行是否成功,都会执行date命令
进程的管道符号
'|' 主要连接左右两个命令,将左侧的命令的标椎输出,交给右侧命令的标椎输入
但是无法传递错误输出到后者的命令
比如,统计当前/etc/passwd 中用户使用的shell类型
管道中的tee技术
tee就是把执行命令时输出的结果储存在另一个文件键,如上图我将tee放在中间位置,就是把tee前面的输出结果储存在5.txt文件中
tee和重定向的区别
tee是将输出结果显示在屏幕上的同时在储存一份到另一个文件中
重定向只是将输出结果储存在一个文件中去,不显示在屏幕
xargs参数传递
主要让一些不支持管道的命令可以使用管道技术
比如说先查看 cat命令的路径 然后以长格式显示文件
我想用管道符来执行,但是它查看的不是cat命令所在的文件路径
是因为这命令不支持管道,所以我可以用xargs,把管道符左边的作为右边的参数
命令 '命令'
命令 $(命令)
先执行单引号或者括号里的命令