文本文件(重定向)

一、将输出重定向到文件或程序。

用法说明
> file重定向标准输出(stdout);以覆盖文件
>> file重定向标准输出(stdout);以附加到文件
2> file重定向标准输入(stderr);以覆盖文件
2> /dev/null将标准输入(stderr)错误消息重定向到/dev/null,从而将他丢弃
&> file 或 > file 2>&1重定向标准输出(stdout)和标准输入(stderr)以覆盖同一个文件
&>> file 或 >> file 2>&1重定向标准输出(stdout)和标准输入(stderr)以附加到同一个文件

注意:重定向操作的文件顺序非常重要

> file 2>&1

将标准输出重定向到file,然后将标准错误作为标准输出重定向到相同位置(file)。

2>&1 > file

与以上相反,将标准错误重定向到标准输出的默认位置(终端窗口,因此没有任何更改),然后仅将标准输出重定向file。

示例

1、使用date命令查看的时间戳保存到/tmp/dateback中,供日后参考。

[student@controller ~]$ date > /tmp/dateback
[student@controller ~]$ cat /tmp/dateback
Wed  3 Aug 19:55:43 CST 2022

2、将一个日志文件最后100行复制到另一个文件。

[student@controller ~]$ sudo tail -n 100 /var/log/messages > /tmp/end-100
[student@controller ~]$ wc -l /tmp/end-100
100 /tmp/end-100

3、将4个文件连接为1个文件。

[student@controller log]$ sudo cat lastlog maillog tallylog > /tmp/old-log

4、将主目录的隐藏文件名和常规文件名列出到文件中。

[student@controller ~]$ ls -a > /tmp/my-file

5、将输出附加到现有文件。

[student@controller ~]$ echo "new line of information" >> /tmp/many-lines
[student@controller log]$ sudo diff lastlog tallylog >> /tmp/tracking-mode

6、在终端上查看普通命令输出时,将错误重定向到文件。

[student@controller ~]$ find /etc -name passwd 2> /tmp/errors
/etc/pam.d/passwd
/etc/passwd

[student@controller ~]$ cat /tmp/errors
find: ‘/etc/lvm/archive’: Permission denied
find: ‘/etc/lvm/backup’: Permission denied
find: ‘/etc/lvm/cache’: Permission denied
find: ‘/etc/pki/rsyslog’: Permission denied
find: ‘/etc/pki/pesign’: Permission denied
find: ‘/etc/ssh/sshd_config.d’: Permission denied
find: ‘/etc/grub.d’: Permission denied
find: ‘/etc/sssd’: Permission denied
find: ‘/etc/polkit-1/rules.d’: Permission denied
find: ‘/etc/polkit-1/localauthority’: Permission denied
find: ‘/etc/cups/ssl’: Permission denied
find: ‘/etc/cni/net.d’: Permission denied
find: ‘/etc/nftables’: Permission denied
find: ‘/etc/audit’: Permission denied
find: ‘/etc/sudoers.d’: Permission denied
find: ‘/etc/libvirt’: Permission denied
find: ‘/etc/containers/networks’: Permission denied
find: ‘/etc/sos/cleaner’: Permission denied
find: ‘/etc/ipsec.d’: Permission denied
find: ‘/etc/firewalld’: Permission denied

7、将进程输出保存到/tmp/output文件中,将错误消息保存到/tmp/errors文件中。

[student@controller ~]$ find /etc -name passwd > /tmp/output 2> /tmp/errors

[student@controller ~]$ cat /tmp/output
/etc/pam.d/passwd
/etc/passwd

[student@controller ~]$ cat /tmp/errors
find: ‘/etc/lvm/archive’: Permission denied
find: ‘/etc/lvm/backup’: Permission denied
find: ‘/etc/lvm/cache’: Permission denied
find: ‘/etc/pki/rsyslog’: Permission denied
find: ‘/etc/pki/pesign’: Permission denied
find: ‘/etc/ssh/sshd_config.d’: Permission denied
find: ‘/etc/grub.d’: Permission denied
find: ‘/etc/sssd’: Permission denied
find: ‘/etc/polkit-1/rules.d’: Permission denied
find: ‘/etc/polkit-1/localauthority’: Permission denied
find: ‘/etc/cups/ssl’: Permission denied
find: ‘/etc/cni/net.d’: Permission denied
find: ‘/etc/nftables’: Permission denied
find: ‘/etc/audit’: Permission denied
find: ‘/etc/sudoers.d’: Permission denied
find: ‘/etc/libvirt’: Permission denied
find: ‘/etc/containers/networks’: Permission denied
find: ‘/etc/sos/cleaner’: Permission denied
find: ‘/etc/ipsec.d’: Permission denied
find: ‘/etc/firewalld’: Permission denied

8、忽略并丢弃错误消息,但保存进程输出的消息。

[student@controller ~]$ find /etc -name passwd > /tmp/export 2> /dev/null

[student@controller ~]$ cat /tmp/export
/etc/pam.d/passwd
/etc/passwd

[student@controller ~]$ cat /dev/null

9、将输出和生成的错误消息存储在一起。

[student@controller ~]$ find /etc -name passwd &> /tmp/save-both

[student@controller ~]$ cat /tmp/save-both
find: ‘/etc/lvm/archive’: Permission denied
find: ‘/etc/lvm/backup’: Permission denied
find: ‘/etc/lvm/cache’: Permission denied
find: ‘/etc/pki/rsyslog’: Permission denied
find: ‘/etc/pki/pesign’: Permission denied
find: ‘/etc/ssh/sshd_config.d’: Permission denied
/etc/pam.d/passwd
find: ‘/etc/grub.d’: Permission denied
/etc/passwd
find: ‘/etc/sssd’: Permission denied
find: ‘/etc/polkit-1/rules.d’: Permission denied
find: ‘/etc/polkit-1/localauthority’: Permission denied
find: ‘/etc/cups/ssl’: Permission denied
find: ‘/etc/cni/net.d’: Permission denied
find: ‘/etc/nftables’: Permission denied
find: ‘/etc/audit’: Permission denied
find: ‘/etc/sudoers.d’: Permission denied
find: ‘/etc/libvirt’: Permission denied
find: ‘/etc/containers/networks’: Permission denied
find: ‘/etc/sos/cleaner’: Permission denied
find: ‘/etc/ipsec.d’: Permission denied
find: ‘/etc/firewalld’: Permission denied

10、将输出和生成的错误附加到现有文件。

[student@controller ~]$ find /etc -name passwd >> /tmp/save-both 2>&1

[student@controller ~]$ cat /tmp/save-both
find: ‘/etc/lvm/archive’: Permission denied
find: ‘/etc/lvm/backup’: Permission denied
find: ‘/etc/lvm/cache’: Permission denied
find: ‘/etc/pki/rsyslog’: Permission denied
find: ‘/etc/pki/pesign’: Permission denied
find: ‘/etc/ssh/sshd_config.d’: Permission denied
/etc/pam.d/passwd
find: ‘/etc/grub.d’: Permission denied
/etc/passwd
find: ‘/etc/sssd’: Permission denied
find: ‘/etc/polkit-1/rules.d’: Permission denied
find: ‘/etc/polkit-1/localauthority’: Permission denied
find: ‘/etc/cups/ssl’: Permission denied
find: ‘/etc/cni/net.d’: Permission denied
find: ‘/etc/nftables’: Permission denied
find: ‘/etc/audit’: Permission denied
find: ‘/etc/sudoers.d’: Permission denied
find: ‘/etc/libvirt’: Permission denied
find: ‘/etc/containers/networks’: Permission denied
find: ‘/etc/sos/cleaner’: Permission denied
find: ‘/etc/ipsec.d’: Permission denied
find: ‘/etc/firewalld’: Permission denied
find: ‘/etc/lvm/archive’: Permission denied
find: ‘/etc/lvm/backup’: Permission denied
find: ‘/etc/lvm/cache’: Permission denied
find: ‘/etc/pki/rsyslog’: Permission denied
find: ‘/etc/pki/pesign’: Permission denied
find: ‘/etc/ssh/sshd_config.d’: Permission denied
/etc/pam.d/passwd
find: ‘/etc/grub.d’: Permission denied
/etc/passwd
find: ‘/etc/sssd’: Permission denied
find: ‘/etc/polkit-1/rules.d’: Permission denied
find: ‘/etc/polkit-1/localauthority’: Permission denied
find: ‘/etc/cups/ssl’: Permission denied
find: ‘/etc/cni/net.d’: Permission denied
find: ‘/etc/nftables’: Permission denied
find: ‘/etc/audit’: Permission denied
find: ‘/etc/sudoers.d’: Permission denied
find: ‘/etc/libvirt’: Permission denied
find: ‘/etc/containers/networks’: Permission denied
find: ‘/etc/sos/cleaner’: Permission denied
find: ‘/etc/ipsec.d’: Permission denied
find: ‘/etc/firewalld’: Permission denied

二、构建管道

说明:管道是一个或者多个命令的序列,用竖线字符“|”分隔;管道将第一个命令的标准输出连接到下一个命令的标准输入。想象一下:数据正在通过管道从一个进程流向另一个进程,在其流过的管道中每个命令都会略微对其做些改动。

重定向:会向文件发送标准输出或从文件获取标准输入。

管道:会将一个进程的标准输出发送到另一个进程的标准输入。

示例

1、使用ls命令的输出并使用less在终端上以一次一次的方式显示输出。

[student@controller ~]$ ls -l /usr/bin | less

2、ls命令的输出传送到wc -l,用户统计从ls收到的行数,并将该行数显示在终端。

[student@controller ~]$ ls | wc -l
9

3、在管道中输入出当前查询结果的前10行,并将最终结果重定向到一个文件中。

[student@controller ~]$ ls -t | head -n 10 > /tmp/ten-last
[student@controller ~]$ cat /tmp/ten-last
rhel-8.6-x86_64-dvd.iso
Downloads
Desktop
Documents
Music
Pictures
Public
Templates
Videos

三、管道、重定向和tee命令

当重定向与管道组合时,shell会首先设置整个管道,然后重定向输入/输出。如果在管道的中间使用了输出重定向,则输出将转至文件,而不是前往管道中的下一个命令。tee命令克服了这个限制;在管道中,tee将其标准输入复制到其标准输出中,并且还将标准输出重定向到指定为命令参数的文件。如果将数据想象成流经管道的水,那么可将tee视觉化为管道中的T形接头,负责输出在两个方向上的流向。

示例

1、将ls命令的输出重定向到文件,并且将输出传递到less,以便在终端上以一次一屏的方式显示。

[student@controller ~]$ ls -l | tee /tmp/save-both | less

2、如果管道末尾使用了tee,则可以保存命令的最终输出并且同时输出到终端。

[student@controller ~]$ ls -t | head -n 10 | tee /tmp/ten-lest
rhel-8.6-x86_64-dvd.iso
Downloads
Desktop
Documents
Music
Pictures
Public
Templates
Videos
[student@controller ~]$ cat /tmp/ten-lest
rhel-8.6-x86_64-dvd.iso
Downloads
Desktop
Documents
Music
Pictures
Public
Templates
Videos
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值