Linux标准输入输出与重定向、管道技术
1. 标准输入输出
1.1 概念
- 每个Linux程序执行时,默认打开三个标准文件描述符:
- 标准输入(STDIN):文件描述符为0,通常对应终端键盘。
- 标准输出(STDOUT):文件描述符为1,默认输出到屏幕。
- 错误输出(STDERR):文件描述符为2,默认输出到屏幕。
1.2 示例
- cat 命令:从命令行给定文件中读取数据,并直接送到标准输出。
cat /etc/passwd
: 将/etc/passwd
的内容显示到屏幕上。cat
: 从标准输入读取数据,并送到标准输出。
2. 输出重定向
2.1 类型
- 标准覆盖输出重定向(>):将命令执行结果输出到指定文件,若文件不存在则创建。
- 标准追加输出重定向(>>):将命令执行结果追加输出到指定文件。
- 错误覆盖输出重定向(2>):将错误信息输出到指定文件,覆盖原有内容。
- 错误追加输出重定向(2>>):将错误信息追加输出到指定文件。
2.2 示例
- 标准输出重定向:
ifconfig en33 > abc
: 先清空abc
文件然后将ifconfig的输出写入。echo "This is network conf" >> if
: 将内容追加到if
文件末尾。
- 错误输出重定向:
useradd test 2> errors.log
: 将用户add的错误信息重定向到errors.log
。
- 输入重定向:
ls < files.txt
: 从files.txt
文件读取数据,并送到ls命令的标准输入。
3. 进程管道技术
3.1 概念
- 使用管道操作符 "|" 连接两个命令,将左侧命令的标准输出传递给右侧命令的标准输入。
3.2 示例
- 按UID排序用户:
sort -t':' -k3 -n /etc/passwd | head -n10 | tail -n1
- 统计shell类型:
awk -F: '{print $7}' /etc/passwd | sort | uniq -c
- 统计CPU使用率高的进程:
ps aux --sort=-%cpu | head -n6 | tail -n1
- 统计网站访问情况:
netstat -antup | grep :80 | grep ESTAB | sort | uniq -c | sort -k1 -rn | head -n20
- 打印所有IP地址:
ip addr | grep 'inet' | awk '{print $2}' | awk -F'/' '{print $1}'
3.3 tee技术
tee
命令可以将标准输出的内容同时发送到文件和屏幕。ip addr | grep 'inet' | tee ip.txt | awk '{print $1}'
3.4 xargs
xargs
可以将命令行参数列表转换为小块,传递给其他命令。ls | xargs rm -rvf
4. 注意事项
-
1.在管道后⾯的命令,都不应该在写⽂件名
2.在管道中只有标准输出才可以传递下⼀个命令, 标准错误输出会直接输出终端显示, 建议在使⽤管道前将标
准错误输出重定向。
3有些命令不⽀持管道技术, 但是可以通过xargs 实现
例如: which cat|xargs ls -l 例如: ls |xargs rm -rvf 例如: ls |xargs cp -rvft /tmp/ -> ls | xargs -I {} cp -rvf {} /tmp 例如: ls |xargs mv -t /tmp/ -> ls | xargs -I {} mv {} /tmp