重定向
  DcpJeOZ6VzTX 2023年11月02日 28 0

重定向的概念

什么是重定向 #将原本要输出到屏幕的数据信息,重新定向到指定的文件中 #改变标准输入、标准输出的方向就是重定向

比如:每天凌晨定时备份数据,希望将备份数据的结果保存到某个文件中。这样第二天通过查看结果文件,就知道昨天备份数据是成功,还是失败。

为何要使用重定向 1.当屏幕输出的信息很重要,而且希望保存重要的信息时。 2.后台执行中的程序,不希望他干扰屏幕正常的输出结果时。 3.系统的例行命令, 例如定时任务的执行结果,希望他可以存下来时。 4.一些执行命令,我们已经知道他可能出现错误信息, 想将他直接丢弃时。 5.执行一个命令,可能报错和正确的输出并存,类似错误日志与标准正确日志需要分别输出至不同的文件。

输入和输出

# stdin
  标准输入
# stdout
  标准输出

命令返回值

# 如何判断上一条命令的执行是否成功
echo $?
返回值是0 就代表上一条命令执行成功
返回值如果不是0 就代表上一条命令不成功

标准输入和输出

执行一个shell程序时通常会自动打开三个文件描述符

名称

文件描述

作用

stdin

0

标准输入(通常是键盘,也可以是其他文件或者命令的输出的内容可以作为标准输入)

stdout

1

标准输出(默认输出到屏幕)

stderr

2

错误输出(默认输出到屏幕)

文件名

3+


把标准输出放入黑洞,1是标准输出的文件描述(用1代表标准输出结果,把标准输出放到黑洞)
[root@web03 ~]# cat 1.txt
abcd
[root@web03 ~]# echo $?
0
[root@web03 ~]# cat 1.txt 1>/dev/null

进程将从标准输入中得到数据,将正常输出打印至屏幕终端,将错误的输出信息也打印至屏幕终端。 进程使用文件描述符(file descriptors)来管理打开的文件

重定向_管道技术

以cat命令为例, cat命令的功能是从命令行给出的文件中读取数据,并将这些数据直接送到标准输出。

若使用如下命令:

#会把文件`/etc/passwd`的内容依次显示到屏幕上 
[root@web03 ~]# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt

但如果cat命令行中没有参数, 它就会从标准输入中读取数据, 并将其送到标准输出。

[root@web03 ~]# cat
www
www
^C
//用户输入的每一行都立刻被cat命令输出到屏幕上。

输入输出过程检测

#持续追踪查看文件内容(tail -f)
[root@web03 ~]# tail -f /etc/passwd
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
^Z
[1]+  Stopped                 tail -f /etc/passwd

#查看运行的进程 
[root@web03 ~]# ps
   PID TTY          TIME CMD
  6966 pts/0    00:00:00 bash
  7588 pts/0    00:00:00 tail
  7629 pts/0    00:00:00 ps

# Linux查看标准输入输出设备
[root@web03 ~]# ll /dev/std*
lrwxrwxrwx 1 root root 15 Aug 14 15:54 /dev/stderr -> /proc/self/fd/2
lrwxrwxrwx 1 root root 15 Aug 14 15:54 /dev/stdin -> /proc/self/fd/0
lrwxrwxrwx 1 root root 15 Aug 14 15:54 /dev/stdout -> /proc/self/fd/1

输出重定向

类型

操作符

用途

标准覆盖输出重定向

1>

将命令执行结果输出到指定的文件中,而不是直接显示到屏幕上

标准追加重定向

>>

将命令的执行结果追加输出到指定文件

错误覆盖输出重定向

2>

将程序的错误结果输出到执行的文件中,会覆盖源文件内容

错误追加输出重 定向

2>>

将程序输出的错误结果以追加的方式输出到指定文件中,不会覆盖原文件

标准输入重定向

<<

将命令中接收输入的途径由默认的键盘更改为指定的文件

标准输出重定向(覆盖)

重定向_标准输出_02

# 覆盖重定向
[root@web03 ~]# cat 1.txt
abcd
[root@web03 ~]# echo efg > 1.txt
[root@web03 ~]# cat 1.txt
efg

标准输出重定向(追加)

重定向_标准输入_03

[root@web03 ~]# cat 1.txt
efg
[root@web03 ~]# echo hell word >> 1.txt
[root@web03 ~]# cat 1.txt
efg
hell word

错误输出重定向

重定向_管道技术_04

ll /asdasdasd 2> 1.txt

正确和错误都输出到相同位置

  • 输出到同一个文件

重定向_管道技术_05

# & 将正确输出和错误输出都定向到了一个文件
[root@web03 ~]# find / -name "*.conf" &>ab
[root@web03 ~]# cat ab
find: ‘/-name’: No such file or directory
find: ‘*.conf’: No such file or directory
  • 输出到不同文件,再合并

重定向_标准输出_06

# 将标准输出和标准错误输出重定向到不同文件
[root@web03 ~]# find /etc -name "*.conf" 1>a 2>b

#合并两个文件内容至一个文件
[root@web03 ~]# cat a b > c

重定向到空设备

重定向_标准输入_07

#空设备,即将产生的输出丢掉(/dev/null黑洞)
[root@web03 ~]# ls /root /error >ab 2>/dev/null
[root@web03 ~]# ls /root /error >ab &>/dev/null

输出重定向

# 从/dev/zero去数据放到/root/1.txt(/dev/zero白洞)
[root@web03 ~]# dd if=/dev/zero of=/root/1.txt bs=1M count=20
20+0 records in
20+0 records out
20971520 bytes (21 MB) copied, 0.164332 s, 128 MB/s

[root@web03 ~]# dd bs=1K count=1024 </dev/zero > /root/4.txt
1024+0 records in
1024+0 records out
1048576 bytes (1.0 MB) copied, 0.00146606 s, 715 MB/s

管道技术

# 将/etc/passwd以uid排序并展示前10行
[root@pkq ~]# sort -t ':' -k3 -n /etc/passwd|head

# 统计/etc/passwd的所有shell类型
[root@pkq ~]# awk -F: '{print $NF}' /etc/passwd | sort | uniq -c

tee

# 分流到文件
ip addr |grep 'inet ' |tee ip.txt |awk -F"/" '{print $1}' |awk '{print $2}'
# 分流到终端
ip addr |grep 'inet ' |tee /dev/pts/0 |awk -F"/" '{print $1}' |awk '{print $2}'

重定向_标准输出_08

参数传递xargs

将原本没有标准输入的命令,收到xargs的标准输入中,在传递给后面的命令处理

-I 将数据保存在{}之中, 后面的命令可以直接调用{}
find /root/ -name '*.sh' | xargs -I {} cp {} /opt/

重定向_标准输出_09

-n 将前面的数据以列的形式排,指定数字是几,一行就有
几个
# 一行一列
[root@pkq ~]# ls |xargs -n1
10.txt
11.txt
# 一行两列
[root@pkq ~]# ls |xargs -n2
10.txt 11.txt
12.txt 13.txt
# 一行三列
[root@pkq ~]# ls |xargs -n3
10.txt 11.txt 12.txt
13.txt 14.txt 15.txt

-i
-I
【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

上一篇: 文件查找Find 下一篇: Linux权限管理
  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  17eFBvSPo0pz   2023年11月02日   18   0   0 nohup标准输入标准输出
  L83A5jZvvg3Q   2023年11月22日   17   0   0 HTTP重定向字段
  YKMEHzdP8aoh   2023年11月24日   36   0   0 ide重定向Rust