Linux标准输入输出与重定向、管道技术

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
    
    
    
posted @ 2024-08-08 20:53  hhhaaa12138  阅读(356)  评论(0)    收藏  举报