linux 有三个steam来实现输入输出:stdin, stdout,stderr。std表示standard(标准的)
ls 命令就使用了stdout,来输出信息,
如果你输入了错误的命令,stderr就会输出错误信息。
这三种stream可以被数字代表,0代表stdin,1代表stdout,2代表stderr。
怎样读取目录的stdout 存到一个文件里呢?
ls > list.out
list.out 是一个文件,>表示输入。如果用 less list.out 就可以浏览 list.out 的内容。
但是这样操作会重写文件,即覆盖文件里原有内容。
date >> list.out
用>>就不会重写,而是在原有内容下面添加内容。上面的命令即添加了时间信息到文件中。
怎样将错误信息记录下来?
ls -y 2> error.out
-y不属于ls的选项,因此会有错误信息,此时如果仅用>,是无法写入报错信息的,需要在前面加上代表stderr的数字2,这样就能把前面命令的报错给存下来,同理用>>不会覆盖文件原有内容。
su
wc -l /var/log/messages
su 获取root权限后,我们可以操作更高权限的内容。
wc 会获取文件有多少内容,-l 表示行数,我执行这条命令会得到message文件里有多少行
5041 /var/log/messages
tail -n 100 /var/log/messages
可以输出最后的100条log信息,让我们重定向这些内容:
tail -n 100 /var/log/messages > /home/100messages.log
这样我们就把这些内容保存到了新的文件里。
我们可以使用cat命令将两个文件合并到一起,存到一个新文件里:
cat /etc/passwd /etc/group > /home/passwdgroup
pipe
|
pipe可以将上一条命令的输出,传到下一条命令里,如
ls -l | less
ls -l 显示的内容,会用less viewer显示出来。但是屏幕上只显示less的内容,不显示ls的内容,很容易分辨出来
cat /etc/passwd | wc -l
cat读取的passwd文件被wc -l 计算行数
tee
tee 可以同时将输出显示并存储到文件里
ls | tee ls.txt
tee命令将ls的内容打印在屏幕上,并保存到 ls.txt 中。
更多例子:
如果以普通u用户权限执行这条命令
find /etc -name network
我们会得到stdout和stderr混杂在一起的信息,但是如果我们只想拿到stderr,使用2>即可:
find /etc -name network 2> error.txt
也能同时存储stdout 和stderr
find /etc -name network > output.txt 2> error.txt
/dev/null是空设备,相当于丢弃信息,下面这条命令只保存stdout,不保存stderr
find /etc -name network > output.txt 2> /dev/null
将stdout 和 stderr存到一起:
find /etc -name network &> network.txt
将stderr重定向为stdout,并写入 network.txt
find /etc -name network >> network.txt 2>&1
将/etc/passwd的内容,输入到cat(显示)里
cat < /etc/passwd