180天Linux小白到大神-Linux IO重定向

08.Linux IO重定向

08.Linux IO重定向

1.重定向基础概述

1.1 什么是重定向

1.2 为什么需要重定向

1.3 标准输入与输出

2.输出重定向案例

2.1 案例1-标准输出重定向

2.2 案例2-标准追加输出重定向

2.3 案例3-错误输出重定向

2.4 案例4-混合和输出重定向

2.5 案例5-将内容输出至黑洞

3.输入重定向案例

3.1 输入重定向示例

3.2 脚本输入重定向

3.3 输入重定向场景

4.进程管道技术

4.1 什么是管道

4.2 管道流程示意图

4.3 管道使用案例

4.3.1 案例1

4.3.2 案例2

4.3.2 案例3

4.4 tee与xargs

4.4.1 管道中使用tee

4.4.2 管道中使用xargs

本章课程内容大纲

1.什么是重定向

2.为什么要使用重定向

3.标准输入、标准输出、错误输出

4.重定向、追加重定向、案例演示

5.进程管道技术、tee、xargs

1.重定向基础概述

1.1 什么是重定向

将原本要输出到屏幕中的数据信息,重新定向到某个指定的文件中,或者定向到黑洞(/dev/null)中。

1.2 为什么需要重定向

1、当程序执行输出的信息比较多时,需要保存下来

在进行分页查看;

2、后台执行的程序一般都会有输出,不希望它的输

出干扰到屏幕;

3、定时执行的备份任务,希望将备份的结果保留下

来时;

4、当重复创建用户,会提示一些错误信息,可以直

接将信息丢弃;

5、希望将错误日志与正确日志,分别输出保存到不同文件时;

1.3 标准输入与输出

当进程操作一个文件时:

1.首先进程是无法直接访问硬件,需要借助内核来访问文件;

2.而内核 kernel 需要利用文件描述符 (file descriptor) 来访问文件。文件描述符百度百科

总结:进程–通过–>文件描述符(非负整数)–访问-- >文件名称;进程使用文件描述符来管理打开的文件对应关系;

第一步:运行 tail -f /etc/passwd

第二步:通过文件描述符3 --> /etc/passwd --> inode --> block

第三步:正确输出—> 默认情况下通过文件描述 1 —

当前终端 1>(改变输出的位置,文件,黑洞)

第四步:错误输出–> 默认情况下通过文件描述2 —>

当前终端 2>

通常程序访问一个文件至少会打开三个标准文件,分别是标准输入、标准输出、错误输出。

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

文件		

名称 描述 作用

标准输入 0 默认是键盘,也可以是文件
(STDIN) 或其他命令的输出。

标准输出 1 默认输出到屏幕。
(STDOUT)

错误输出 2 默认输出到屏幕。
(STDERR)

文件名称 3+
(filename)

2.输出重定向案例

输出重定向,改变输出内容的位置。输出重定向有如下几种方式,如表格所示

类型 作 用途

标准覆盖 将程序输出的正确结果输出到指定
输出重定 1>
的文件中,会覆盖文件原有的内容

标准追加 将程序输出的正确结果以追加的方
输出重定 1>> 式输出到指定文件,不会覆盖原有
向 文件

错误覆盖 将程序的错误结果输出到执行的文
输出重定 2>
件中,会覆盖文件原有的内容

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

2.1 案例1-标准输出重定向

标准输出重定向示例

1.如果文件不存在则创建

2.如果文件存在则清空内容

[root@oldxu ~]# > edu.txt

[root@oldxu ~]# ifconfig eth0 > edu.txt

2.2 案例2-标准追加输出重定向

标准追加输出重定向示例

1.如果文件不存在则创建

2.如果文件存在则在文件尾部添加内容

[root@oldxu ~]# echo “Hello Students” >> if

2.3 案例3-错误输出重定向

标准错误输出重定向

1.正确输出及错误输出至相同文件

2.正确输出及错误输出至不同的文件

[xuliangwei@oldxu ~]$ find /etc -name

“*.conf” 1>ok 2>ok

[xuliangwei@oldxu ~]$ find /etc -name

“*.conf” 1>ok 2>err

2.4 案例4-混合和输出重定向

混合输出重定向

1.将正确输出和错误输出混合至同一文件

2.将两个文件内容组合为一个文件

[xuliangwei@oldxu ~]$ find /etc -name “*.conf” &>ab

[xuliangwei@oldxu ~]$ cat a b > c

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

[root@oldxu ~]# ls /root /error >ab 2>&1

2.5 案例5-将内容输出至黑洞

将内容输出至黑洞设备 /dev/null

[root@oldxu ~]# ls /root /error >ab 2>/dev/null

[root@oldxu ~]# ls /root /error >ab &>/dev/null

3.输入重定向案例

输入重定向:指的是 ”重新指定设备“ 来 “代替键盘” 作为新的输入设备;

3.1 输入重定向示例

1.通过输入重定向读取文件内容;

[root@oldxu ~]# cat < /etc/hosts

2.通过输入重定向读入多行内容;

[root@dns-master ~]# cat <<EOF 小明 99

小红 100

小王 80

EOF # 只要不出现EOF则可以一直输入

3.通过输入重定向将数据导入至数据库中;

[root@oldxu ~]# mysql -uroot -poldxu.com < /opt/wordpress.sql

3.2 脚本输入重定向

使用输入重定向打印安装服务的菜单导航栏;

[root@dns-master ~]# cat install.sh #!/usr/bin/bash

cat <<-EOF

---------主菜单----------

| 1) 安装nginx

| 2) 安装php

| 3) 退出

|

|

|


EOF

read -p "请选择你要安装的软件编号 [ 1 | 2 | 3 ]: "

3.3 输入重定向场景

1.恢复数据时;

2.脚本打印菜单时会用到;

3.cat写入文件时;vim

输出重定向:

正确输出:

1> :覆盖(先清空,后写入)

1>> :直接写入文件的尾部(末尾)

错误输出:

2> :覆盖(先清空,后写入)

2>> :直接写入文件的尾部(末尾)

混合输出

&>/dev/null

&>>/dev/null

1>/dev/null 2>&1

4.进程管道技术

4.1 什么是管道

管道操作符号 “|” ,主要用来连接左右两个命令, 将左侧的命令的【标准输出】, 交给右侧命令的【标准

输入】

注意事项:无法传递标准错误输出至后者命令

管道命令符能让大家能进一步掌握命令之间的搭配使用方法,进一步提高命令输出值的处理效率

4.2 管道流程示意图

格式: cmd1 | cmd2 […|cmdn]

4.3 管道使用案例

4.3.1 案例1

案例1:将 /etc/passwd 中的用户按 UID 大小排序

[root@oldxu ~]# sort -t":" -k3 -n /etc/passwd

[root@oldxu ~]# sort -t":" -k3 -n /etc/passwd -r

[root@oldxu ~]# sort -t":" -k3 -n /etc/passwd |head

4.3.2 案例2

案例2:统计当前 /etc/passwd 中用户使用的 shell 类型

思路:取出第七列(shell) | 排序(把相同归类)| 去重

[root@oldxu ~]# awk -F: ‘{print $7}’ /etc/passwd

[root@oldxu ~]# awk -F: ‘{print $7}’ /etc/passwd |sort

[root@oldxu ~]# awk -F: ‘{print $7}’ /etc/passwd |sort |uniq [root@oldxu ~]# awk -F: ‘{print $7}’ /etc/passwd |sort |uniq -c

4.3.2 案例3

案例3:打印并输出当前所有主机所有网卡的 IP 地址

[root@oldxu ~]# ip addr |grep 'inet ’ |awk

‘{print $2}’ |awk -F"/" ‘{print $1}’

127.0.0.1

10.0.0.100

4.4 tee与xargs

4.4.1 管道中使用tee

#选项: -a追加

[root@web ~]# ip addr |grep 'inet ’ |tee ip.txt |awk -F"/" ‘{print $1}’ |awk ‘{print $2}’

127.0.0.1

10.0.0.100

[root@web ~]# cat ip.txt

inet 127.0.0.1/8 scope host lo

inet 10.0.0.100/24 brd 192.168.69.255 scope global ens32

4.4.2 管道中使用xargs

xargs 参数传递,主要让一些不支持管道的命令可以使用管道技术

which cat | xargs ls -l

ls | xargs rm -fv

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值