Linux 输入输出重定向与管道 在平时的运维工作中,会经常遇到 linux 重定向操作和管道符。linux 重定向分为输入重定向和输出重定向。简言之,输入重定向就是将文件内容导入到命令中,而输出重定向则是将原本要输出到屏幕上的信息写入到指定的文件中。 #### 重定向 标准输入重定向(STDIN,文件描述符为0):默认从键盘输入,也可以从其他文件或命令输入 标准输出重定向(STDOUT,文件描述符为1):默认输出到屏幕 标准错误重定向(STDERR,文件描述符为2):默认输出到屏幕 ##### 输入重定向及其作用 命令 < 文件 : 将文件作为命令的标准输入 命令 << 分界符 : 从标准输入中读取,直到遇见分界符才终止 命令 < 文件1 > 文件2 : 将文件1作为命令的标准输入并将标准输出到文件2 ##### 输出重定向及其作用 命令 > 文件 : 将标准输出重定向到文件中(清空原有文件的数据) 命令 >> 文件 : 将标准输出重定向到文件中(追加到原有的文件中) 命令 2> 文件 : 将标准错误重定向到一个文件中(清空原有文件的数据) 命令 2>> 文件 : 将标准错误重定向到一个文件中(追加到原有文件中) 命令 >> 文件 2>&1 或 命令 &>> 文件 : 将标准输出和标准错误重定向到文件中(追加到原有文件中) ```php [root@linux ~]# ls -l > ls.txt [root@linux ~]# cat ls.txt 总用量 581856 -rw-r--r--. 1 root root 587202560 1月 5 22:47 560_file drwxr-xr-x. 2 root root 6 1月 20 22:20 Desktop -rw-r--r--. 1 root root 19 1月 5 22:36 diff_a.txt -rw-r--r--. 1 root root 19 1月 5 22:37 diff_b.txt drwxr-xr-x. 2 root root 6 1月 5 21:53 Documents drwxr-xr-x. 2 root root 6 1月 5 21:53 Downloads drwxr-xr-x. 3 root root 16 1月 5 22:52 etc -rw-r--r--. 1 root root 8596360 1月 5 22:50 etc.tar.gz drwx------. 57 linux linux 4096 1月 5 22:57 findresults -rw-r--r--. 1 root root 0 1月 20 22:33 linuxprobe -rw-r--r--. 1 root root 0 1月 20 23:39 ls.txt drwxr-xr-x. 2 root root 6 1月 5 21:53 Music drwxr-xr-x. 2 root root 6 1月 5 21:53 Pictures drwxr-xr-x. 2 root root 6 1月 5 21:53 Public -rw-r--r--. 1 root root 55 1月 20 22:36 readme.txt -rw-r--r--. 1 root root 50 1月 20 22:39 stderr.txt drwxr-xr-x. 2 root root 6 1月 5 21:53 Templates drwxr-xr-x. 2 root root 6 1月 5 21:53 Videos ``` `ls -l > ls.txt`将 ls 命令的标准输出重定向到文件中,并且是以覆盖的方式,这样会清空 ls.txt 原有的内容。 ```php [root@linux ~]# echo 'welcome to beijing' > ls.txt [root@linux ~]# echo 'welcome to hangzhou' >> ls.txt [root@linux ~]# cat ls.txt welcome to beijing welcome to hangzhou ``` `echo 'welcome to beijing' > ls.txt`以覆盖的方式将命令的标准输出重定向到文件 ls.txt 可见 ls.txt 文件原有的内容被清除了。 `echo 'welcome to hangzhou' >> ls.txt`以追加的方式将命令的标准输出重定向到文件 ls.txt 可见 ls.txt 文件原有的内容被保留了。 ```php [root@linux ~]# ls -l xxxxxx ls: 无法访问xxxxxx: 没有那个文件或目录 [root@linux ~]# ls -l xxxxxx 2> error.txt [root@linux ~]# cat error.txt ls: 无法访问xxxxxx: 没有那个文件或目录 ``` `ls -l xxxxxx 2> error.txt`将命令的标准错误重定向到文件 error.txt 文件中。这时本应该显示在屏幕上的错误信息会重定向到文件 error.txt 中。 #### 管道 管道的作用简言之就是将上一个命令的输出作为下一个命令的输入,格式为`"命令A | 命令B | 命令C"` ##### 统计系统中的用户数 ```php [root@linux ~]# cat /etc/passwd | wc -l 38 ``` 将 cat 命令的输出作为 wc 命令的输入,然后得到 /etc/passwd 文件的行数,效果等价于`wc -l < /etc/passwd` ##### 统计系统中不能登录的用户数 ```php [root@linux ~]# cat /etc/passwd | grep "/sbin/nologin" | wc -l 33 ``` 在 cat 命令的输出中查找包含`/sbin/nologin`的行,并将其作为 wc 命令的输入,得到的就是系统在被限制登录的用户数。
《Linux 输入输出重定向与管道》上暂无评论!