Linux系统管理-标准输入和标准输出

Linux系统管理-输入输出

重定向

什么是重定向

将原本要输出到屏幕的数据信息,重新定向到指定的文件中。

为什么要使用重定向

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

输入和输出

**文件描述符:**每一个程序都会有自己的文件描述符,每个程序的文件描述符的数量都不一样,至少有3个。

名称文件描述符作用
标准输入(stdin)0通常是键盘,也可以是其他文件或者命令的输出的内容可以作为标准输入
标准输出(stdout)1默认输出到屏幕
错误输出(stderr)2默认输出到屏幕
文件名称(filename)3+

进程将从标准输入中得到数据,将正常输出打印至屏幕终端,将错误的输出信息也打印至屏幕终端。

进程使用文件描述符(file descriptors)来管理打开的文件

img

输出重定向

类型操作符用途
标准输出覆盖重定向1>或者>将原本默认输出到屏幕上的内容标准输出到指定文件中并覆盖
标准输出追加重定向>>或者1>>将原本默认输出到屏幕上的内容追加到其它文件或设备的末尾
错误输出覆盖重定向2>将程序的错误结果输出到执行的文件中,会覆盖原文件内容
错误输出追加重定向2>>将程序输出的错误结果以追加的方式输出到指定文件中,不会覆盖原文件
标准输出和错误输出同时输出到文件中&>将程序所有文件描述符的输出内容重定向到指定文件中
标准输出和错误输出同时输出到文件中2,3,4……>&1将程序除1之外其它文件描述符的输出内容交给标准输出1,然后让标准输出1重定向到指定文件中

标准输出覆盖重定向

[root@oldboy /tmp]# ls /etc/passwd > /tmp/a.txt
[root@oldboy /tmp]# cat a.txt 
/etc/passwd

img

标准输出追加重定向

[root@oldboy /tmp]# ls /etc/passwd >> /tmp/a.txt 
[root@oldboy /tmp]# ls /etc/passwd >> /tmp/a.txt 
[root@oldboy /tmp]# cat /tmp/a.txt
/etc/passwd
/etc/passwd

img

错输出覆盖重定向

[root@oldboy /tmp]# ls /etc/passsssss 2> /tmp/a.txt 
[root@oldboy /tmp]# cat /tmp/a.txt
ls: cannot access /etc/passsssss: No such file or directory

img

错误输出追加重定向

[root@oldboy /tmp]# ls /etc/passsssss 2>> /tmp/a.txt 
[root@oldboy /tmp]# cat /tmp/a.txt
ls: cannot access /etc/passsssss: No such file or directory
ls: cannot access /etc/passsssss: No such file or directory

标准输出和错误输出同时输出到文件中

[root@oldboy /tmp]# ls /etc/passwd /etc/passsss &> /tmp/a.txt 
[root@oldboy /tmp]# cat /tmp/a.txt
ls: cannot access /etc/passsss: No such file or directory
/etc/passwd

img

[root@oldboy /tmp]# ls /etc/passwd /etc/passss > /tmp/a.txt  2>&1
[root@oldboy /tmp]# cat a.txt 
ls: cannot access /etc/passss: No such file or directory
/etc/passwd

img

输入重定向

输入重定向,即原本从键盘等设备上获得的输入信息,重定向由命令的输出作为输入。

类型操作符用途
标准输入重定向<或者0<原本从键盘等设备上获取的输入信息,重定向为由命令的输出为作为输入
标准输入追加重定向<<或者0<<目前只知道cat,原本从键盘等设备上获取的输入信息,追加重定向为由命令的输出作为输入
# 案例1
[root@oldboy /tmp]# grep '^root' < /etc/passwd
root:x:0:0:root:/root:/bin/bash

# 案例2
[root@oldboy /tmp]# dd </dev/zero>/tmp/disk.txt bs=1M count=2
[root@oldboy /tmp]# ll -h /tmp/disk.txt 
-rw-r--r--. 1 root root 2.0M Jun 17 18:18 /tmp/disk.txt

管道符

什么是管道符

管道操作符号 | 连接左右两个命令,把管道符左边命令的标准输出交给管道符右边的标准输入来处理。

注意:错误输出无法处理

在这里插入图片描述

管道符的例子

# 案例1:按照/etc/passwd 中的UID大小倒序排序
[root@oldboy ~]# sort -t ':' -k 3 -nr /etc/passwd
user2:x:1011:1011::/home/user2:/bin/bash
user1:x:1010:1010::/home/user1:/bin/bash

# 案例2: 统计当前/etc/passwd 中用户使用的 shell 类型
[root@oldboy ~]# awk -F: '{print $7}' /etc/passwd|sort|uniq -c|sort -nr
     14 /sbin/nologin
      7 /bin/bash
      1 /sbin/shutdown
      1 /sbin/halt
      1 /bin/sync

**注意:**管道符能让命令之间搭配使用,提高命令输出值的处理效率,但是尽可能的减少管道的数量,管道的数量越多效率越低。

tee 管道技术

在这里插入图片描述

# 创建5个用户,密码随机,并且记录到文件
seq 5|awk '{print "useradd user"$1";echo $RANDOM|md5sum|cut -c 1-10|tee -a /tmp/user.txt|passwd --stdin user"$1}'|bash

重定向与tee的区别

[root@oldboy ~]# date > /tmp/date.txt
[root@oldboy ~]# date |tee /tmp/date.txt
Fri Jun 18 15:20:38 CST 2021
区别:重定向只定向到指定文件中,tee不仅定向到指定文件中还在屏幕上显示。

xargs 传递参数

xargs的作用

将原本没有标准输入的命令,收到xargs的标准输入中,然后交给这些命令处理。

读入stdin的数据流转换为参数添加至命令后面

将参数列表转换成小块分段传递给其它命令

-I:将数据流保存到{}中,后面的命令可以直接调用{}
[root@oldboy ~]# echo '/root/file1'|xargs -I {} cp {} /tmp/
[root@oldboy ~]# echo '/root/file1'|xargs -I {} cp {} /tmp/oldboy/[root@oldboy ~]# ls /tmp/oldboy/
file1

[root@oldboy ~]# echo '/tmp/oldboy/'|xargs ls
file01  file02

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值