系统默认打开的文件描述符
一个进程默认会打开标准输入、标准输出、错误输出三个文件描述符。可以在/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文件里边。

> 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

上边截图里边的命令和输出结果结合起来可以说明&>确实可以把标准输出和标准错误输出都写入指定文件里边,而且是覆盖写入。
标准输出重定向和标准输入重定向结合
cat << 分界符 >> 需要写入的文件,这种方法一般应用于配置文件的修改。比如cat << EOF >> teststd.txt,然后就可以输出你想要输入的内容,每输入一行,按一下回车键,最后一行输入EOF,然后按下回车键就可以退出并把内容(内容中不包括EOF)保存到teststd.txt里边。

此文章为7月Day 11学习笔记,内容来源于极客时间《Linux 实战技能 100 讲》。