Linux输入输出重定向与管道

在平时的运维工作中,会经常遇到linux重定向操作和管道符。linux重定向分为输入重定向和输出重定向。简言之,输入重定向就是将文件内容导入到命令中,而输出重定向则是将原本要输出到屏幕上的信息写入到指定的文件中。


重定向

标准输入重定向(STDIN,文件描述符为0):默认从键盘输入,也可以从其他文件或命令输入

标准输出重定向(STDOUT,文件描述符为1):默认输出到屏幕

标准错误重定向(STDERR,文件描述符为2):默认输出到屏幕


输入重定向及其作用

命令 < 文件 : 将文件作为命令的标准输入

命令 << 分界符 : 从标准输入中读取,直到遇见分界符才终止

命令 < 文件1 > 文件2 : 将文件1作为命令的标准输入并将标准输出到文件2


输出重定向及其作用

命令 > 文件 : 将标准输出重定向到文件中(清空原有文件的数据)

命令 >> 文件 : 将标准输出重定向到文件中(追加到原有的文件中)

命令 2> 文件 : 将标准错误重定向到一个文件中(清空原有文件的数据)

命令 2>> 文件 : 将标准错误重定向到一个文件中(追加到原有文件中)

命令 >> 文件 2>&1 或 命令 &>> 文件 : 将标准输出和标准错误重定向到文件中(追加到原有文件中)

[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原有的内容。

[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文件原有的内容被保留了。

[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"


统计系统中的用户数

[root@linux ~]# cat /etc/passwd | wc -l
38

cat命令的输出作为wc命令的输入,然后得到/etc/passwd文件的行数,效果等价于wc -l < /etc/passwd


统计系统中不能登录的用户数

[root@linux ~]# cat /etc/passwd | grep "/sbin/nologin" | wc -l
33

cat命令的输出中查找包含"/sbin/nologin"的行,并将其作为wc命令的输入,得到的就是系统在被限制登录的用户数。

Linux输入输出重定向与管道》上有 6 条评论!

  1. kai45666
    11111
  2. chenchen123
    666
  3. ruhaozhang
    666
  4. 1
    666
  5. ruhaozhang
    好棒啊
  6. yyyyyyyy
    えですねsdf

发表评论