Linux学习-创建、查看和编辑文本文件(1)

标准输入、标准输出和标准错误

标准输入(通道0)从键盘读取输入

标准输出(通道1)将正常输出发送到终端

标准错误(通道2)将错误消息发送到终端

Linux学习-创建、查看和编辑文本文件(1)

 

 

                               进程I/O通道(文件描述符)

通道(文件描述符)

编号 通道名称 描述 默认链接 用法
0 stdin 标准输入 键盘 仅读取
1 stdout 标准输出 终端 仅写入
2 stderr 标准错误 终端 仅写入
3+ filename 其他文件 读取和/或写入

输出重定向操作符

Linux学习-创建、查看和编辑文本文件(1)

输出重定向示例

保存时间戳以供日后参考
[jumpserver@192 ~]$ date > /tmp/saved-timestamp
[jumpserver@192 ~]$ cat /tmp/saved-timestamp 
Mon Nov 16 23:46:36 PST 2020
将一个日志文件的最后100行复制到另一个文件
[jumpserver@192 ~]$ sudo tail -n 100 /var/log/messages > /tmp/last-100
将四个文件连成一个
[jumpserver@192 test]$ cat file1 file3 file5 file6 > /tmp/four
将输出附加到现有文件
[jumpserver@192 test]$ echo "haha" >> ./file1 
[jumpserver@192 test]$ cat file1
1
haha

将错误重定向到文件
[jumpserver@192 test]$ find /etc -name passwd 2> /tmp/errors
/etc/pam.d/passwd
/etc/passwd
[jumpserver@192 test]$ cat /tmp/errors 
find: ‘/etc/pki/rsyslog’: Permission denied
find: ‘/etc/lvm/archive’: Permission denied
将进程输出和错误消息保存到单独文件中
[jumpserver@192 test]$ find /etc -name passwd >/tmp/ouput 2>/tmp/errors2
[jumpserver@192 test]$ cat /tmp/ouput 
/etc/pam.d/passwd
/etc/passwd
[jumpserver@192 test]$ cat /tmp/errors2 
find: ‘/etc/pki/rsyslog’: Permission denied
find: ‘/etc/lvm/archive’: Permission denied
忽略并丢弃错误信息
[jumpserver@192 test]$ find /etc -name passwd >/tmp/ouput 2>/dev/null
将输出和生成的错误消息存储在一起
[jumpserver@192 test]$ find /etc -name passwd &> /tmp/saveboth
[jumpserver@192 test]$ cat /tmp/saveboth 
find: ‘/etc/pki/rsyslog’: Permission denied
find: ‘/etc/lvm/archive’: Permission denied
find: ‘/etc/lvm/backup’: Permission denied
find: ‘/etc/lvm/cache’: Permission denied
find: ‘/etc/dhcp’: Permission denied
find: ‘/etc/cups/ssl’: Permission denied
/etc/pam.d/passwd
/etc/passwd
将输出和生产城的错误附加到现有文件
[jumpserver@192 test]$ find /etc -name passwd >> /tmp/saveboth 2>&1

构建管道

管道是一个或多个命令的序列,用竖线(|)分隔。管道将第一个命令的标准输出链接到下一个命令的标准输入

Linux学习-创建、查看和编辑文本文件(1)

 

 管道示例

ls命令输出并使用less在终端上以一次一屏的方式显示输出
[jumpserver@192 test]$ ls -l /usr/bin | less
head将ls -t 内容输出内容前十行,并且最终结果重定向到一个文件
[jumpserver@192 test]$ ls -t | head -n 10 > /tmp/ten

管道、重定向和tee命令

当重定向与管道组合时,shell会首先设置整个管道符,然后重定向输入/输出。如果在管道的中间使用了重定向,则输出将转至文件,而不是前往管道中的下一个命令

[jumpserver@192 test]$ ls > /tmp/save | less
空白

tee命令克服了这个限制。在管道中,tee将其标准输入复制到其标准输出中,并且还将标准输出重定向到指定为命令参数的文件

Linux学习-创建、查看和编辑文本文件(1)

 

 示例

[jumpserver@192 test]$ ls |tee /tmp/save | less
file1
file3
file5
file6
rhel6
rhel7
rhel8
[jumpserver@192 test]$ ls | head -n 10 | tee /tmp/ten
[jumpserver@192 test]$ ls | head -n 10 | tee /tmp/ten
file1
file3
file5
file6
rhel6
rhel7
rhel8

注意:可通过管道来重定向标准错误,但是不能使用合并重定向运算符(&>和&>>)执行此操作

以下是通过管道来重定向标准输出和标准错误的正确方法

[jumpserver@192 test]$ find -name /passwd 2>&1 | less

Linux学习-创建、查看和编辑文本文件(1)

上一篇:面试高频算法题之组合问题


下一篇:2020运营商SDN和NFV的投入超200亿美元