LINUX学习之管道和重定向(十)
输入/输出流控制
在Linux系统中, 执行一个shell命令通常会自动打开三个标准文件, 分别是标准输入文件、标准输出文件和标准错误输出文件。进程将从标准输入文件得到输入数据,将正常输出数据输出到标准输出文件,而将错误信息送到标准错误文件
如下表格所示, linux shell下有三种标准的文件描述符:
文件描述符 | 描述 | 操作符 |
---|---|---|
0 | 标准输入(stdin) | < ,<< |
1 | 标准输出(stdout) | > , >> , 1 >或1>> |
2 | 标准错误输出(stderr) | 2> 或 2>> |
输入重定向
输入重定向用于改变命令的输入源, 指输入可以不来自标准输入,而来自指定的文件
输入重定向的符号为<
, 命令格式为命令<文件名
如下代码所示, 通过重定向输入将文件file的内容作为输入让cat命令执行
[herry@localhost ~]$ cat test.txt
hello world
[herry@localhost ~]$ cat<test.txt
hello world
虽然执行结果相同,但第一行代表是以键盘作为输入设备,而第二行代码是以
test.txt
文件作为输入设备。
输出重定向
在LINUX中,输出重定向是指将命令的输出重定向到一个文件或者设备上。这可以通过使用">"或">>"符号来实现
类型 | 操作符 | 描述 |
---|---|---|
重定向标准输出 | > |
输出重定向将命令执行的结果输出至指定的文件中, 而不会显示在屏幕上 |
重定向标准输出 | >> |
将命令的执行结果追加输出至指定文件 |
重定向标准错误 | 2> |
清空指定文件的内容, 并将标准错误信息输出至此文件 |
重定向标准错误 | 2>> |
将标准错误信息追加输出至指定的文件 |
重定向标准输出和标准错误 | &> |
将标准输出、标准错误的内容全部输出至指定文件, 而不会显示在屏幕上 当 >& 后面接文件时,表示将标准输出和标准错误输出重定向至文件当 >& 后面接文件描述符时,表示将前面的文件描述符重定向至后面的文件描述符 |
将`ls /etc`的执行结果输出至test.txt文件
[root@localhost 桌面]# ls /root/ >test.txt
[root@localhost 桌面]# cat test.txt
anaconda-ks.cfg
file
initial-setup-ks.cfg
test
将`ls /etc`的执行结果追加至test.txt文件
[root@localhost 桌面]# ls /root/ >>test.txt
[root@localhost 桌面]# cat test.txt
anaconda-ks.cfg
file
initial-setup-ks.cfg
test
anaconda-ks.cfg
file
initial-setup-ks.cfg
test
将执行`fuckcmd`命令的错误信息输出至test.txt文件
[root@localhost 桌面]# fuckcmd 2>test.txt
[root@localhost 桌面]# cat test.txt
bash: fuckcmd: 未找到命令...
将执行`fuckcmd`命令的错误信息追加输出至test.txt文件
[root@localhost 桌面]# fuckcmd 2>>test.txt
[root@localhost 桌面]# cat test.txt
bash: fuckcmd: 未找到命令...
bash: fuckcmd: 未找到命令...
管道操作
管道可以把一系列的命令连接起来, 将第一个命令的输出作为第二个命令的输入, 而第二个命令的输出又会作为第三个命令的输入, 以此类推下去, 显示在屏幕上的内容是管道行最后一个命令的输出
管道命令由若干个指令组成, 每个指令用|
隔开, 仅有在前一个指令执行正确后才会执行后面的指令, 管道命令的使用格式如下:
command1 | command2 | command3
cut
cut命令可将字符串按指定分隔符分割成多个部分,其中-f
参数是用来指定输出哪些区块,默认是输出所有区块。
-d
:后接分割字符,默认是制表符(tab),可以指定分割字符。-f
:后接表示输出第几个区块或者区块范围,多个区块可以用逗号分隔
例如,将/etc/passwd文件中所有用户名输出:
cut -f 1 -d ":" /etc/passwd
使用实例
1.查询PATH变量的第三部分内容
[root@localhost 桌面]# echo $PATH | cut -d: -f 3
/usr/bin
2.查询系统中有多少个用户使用bash
[root@localhost 桌面]# cat /etc/passwd | grep /bin/bash | wc -l
2
wc
命令是Linux中的一个文本统计工具,用于统计文本中的字符数、单词数和行数, 其中-l
参数用于统计行数