一个进程默认会打开标准输入、标准输出、错误输出三个文件描述符。可以在/proc/PID/fd
里边可以看到打开文件的描述符,PID需要改成具体的pid
,比如可以使用A终端
输入vim proctest
之后按下回车键。
打开一个vim编辑窗口。
再打开一个B终端
,输入ps -aux | grep 'vim'
查找一下vim
的pid,发现是22730
。
还是在B终端
上输入ls -l /proc/22730/fd
,可以看到22730
进程的文件描述符
0 – stdin (standard input) 标准输入
1 – stdout (standard output) 标准输出
2 – stderr (standard error) 标准错误输出
这三个文件描述符是系统默认打开的。
在B终端
上执行kill -9 22730
,把vim proctest
这个进程关闭,再次ls -l /proc/22730/fd
和ls -l /proc/22730
都是报ls: cannot access xxxx: No such file or directory
,下边的截图,我把执行kill -9 22730
也显示出来了。
重定向包括两种:
输入重定向:使用文件里边的内容代替键盘输入
输出重定向:使用文件代替终端输出
可以使用grep root /etc/passwd
。
也可以grep root < /etc/passwd
将/etc/passwd
的文件内容重定向给grep
命令,处理过之后再输出到标准输出上。
wc -l
可以统计输入字符的行数。wc -l
输入到命令行之后按下回车,就可以输入字符串,然后按下回车键,还可以接着输入字符串,然后按回车键,依次类推,而最后一行输入之后需要按下回车键,再按Ctrl+d,就能统计输出字符的行数。
使用输入重定向可以统计出来一个文件里边的行数,比如wc -l < /etc/passwd
可以统计出来passwd
里边的行数。
cat -n /etc/passwd
把行号显示出来,同时显示文件所有内容,可以验证上边的行数统计没有错误。
还可以使用输入重定向,把一个文件里边的内容赋值给一个变量。vim goodPerson.txt
把good person
写入到goodPerson.txt
,要是不知道怎么操作的话,可以参考《Linux学习之vim在光标所在处写入内容,保存退出》,cat goodPerson.txt
可以看一下里边的内容。
read expection < goodPerson.txt
把文件里边的内容赋值给一个变量,echo ${expection}
看一下变量expection
里边的值。
输出重定向有以下几种格式:
>,覆盖输出重定向。
>>,追加输出重定向
2>,标准错误输出重定向,会覆盖原来的内容
2>>,标准错误输出重定向,在原来的内容后边追加
&>,标准输出和标准错误输出都重定向一个文件,会覆盖原来的内容
&>>,标准输出和标准错误输出都重定向一个文件,在原来的内容后边追加
cd /shelllearn/
进入到/shelllearn
里边。
echo
本来是往标准输出写入内容的,可以使用输出重定向往文件里边写入内容。
echo "123" > good.txt
可以将字符串写到good.txt
文件里边,使用cat -A
可以看到echo
会默认添加换行符。
echo "456" > good.txt
,把文件里边的123
清空之后,把456
写到good.txt
文件里边。
echo "good" >> good.txt
,echo "study" >> good.txt
,可以看到是追加输出重定向,字符串都写到了good.txt
里边。
依次执行的命令如下:
ls -l
ls -l 2> error.txt
cat error.txt
ls -l test
ls -l test 2> error.txt
cat error.txt
nocmd
cat error.txt
nocmd 2> error.txt
cat error.txt
执行下边命令:
ls -l
ls -l &> stdouterror.txt
cat stdouterror.txt
ls -l test &> stdouterror.txt
cat stdouterror.txt
上边截图里边的命令和输出结果结合起来可以说明&>
确实可以把标准输出和标准错误输出都写入指定文件里边,而且是覆盖写入。
此文章为7月Day 11学习笔记,内容来源于极客时间《Linux 实战技能 100 讲》。