Linux IO重定向
1.重定向概述
1.1 什么是重定向;
将原本要输出到屏幕的数据信息,重新定向到某个指定的文件中。
1.2 重定向使用的场景;
1.当屏幕输出的信息很重要,而且希望保存重要的信息时;
2.后台执行中的程序,不希望他干扰屏幕正常的输出结果时;
3.系统的例行命令, 例如定时任务的执行结果,希望可以存下来时;
4.一些执行命令,我们已经知道他可能出现错误信息, 想将他直接丢弃时;
5.错误日志与正确日志需要分别输出至不同的文件保存时;
1.3 学习重定向的基本知识;
在Linux上面打开一个程序的时候,通常会自动打开三个文件,分别是标准输入,标准输出,错误输出。
1.首先进程是无法直接访问硬件,需要借助内核来访问文件;而内核 kernel 需要利用文件描述符 (filedescriptor) 来访问文件。
2.文件标识符:
3.总结:进程--通过-->文件描述符(非负整数)--访问-->文件名称--通过-->自身inode(存放着原始文件路径信息)读到了软链接信息--找到了--原始文件;文件标识符,本质上就是一个软链接。
ll /proc/$$/fd #当前运行终端进程运行的信息,每打开一个文件,都会自动分配0、1、2这三个数字。

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


例如:
第一步:运行 tail -f /etc/passwd
第二步:通过文件描述符3 -->/etc/passwd 文件-->inode 信息--> block数据块
第三步:正确输出---> 默认情况下通过文件描述 1 ---> 当前终端 1>(改变输出的位置,指定文件、黑洞/dev/null)
第四步:错误输出--> 默认情况下通过文件描述2 --->当前终端 2>
通常程序访问一个文件至少会打开三个标准文件,分别是标准输入、标准输出、错误输出。
进程将从标准输入中得到数据,将正常输出打印至屏幕终端,将错误的输出信息也打印至屏幕终端。
2.输出重定向案例
输出重定向,改变输出内容的位置。输出重定向有如下几种方式,如表格所示。


2.1 标注输出重定向

PS:> /etc/passwd =后面直接跟文件,这样做直接会将文件清空,是个危险的操作。






3.输入重定向案例
输入重定向:指的是 ”重新指定设备“ 来 “代替键盘” 作为新的输入设备。
3.1 通过输入重定向读入文件内容;

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

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

3.4 输入重定向使用场景
1.恢复数据的时候;
2.脚本打印菜单时会用到;
3.cat写入文件时;vim
4.进程管道技术
概念:管道操作符号 “ | ”,主要用来主要用来连接左右两个命令, 将左侧的命令的【标准输出】,交给右侧命令的【标准输入】。
示例1:awk -F: '{print $7}'/etc/passwd |sort |uniq -c ==统计当前 /etc/passwd 中用户使用的shell 类型
示例2:sort -t":" -k3 -n/etc/passwd |head ==将 /etc/passwd 中的用户按 UID 大小排序
示例3:ip addr |grep 'inet ' |awk '{print $2}' |awk -F"/" '{print $1}' ==打印当前主机所有网卡的ip地址
PS:前者命令的标准错误输出,无法传递!!!

4. 管道中使用tee
tee:命令用于将数据重定向到文件,同时提供一份重定向数据的副本作为后续命令的标准输入。简单地说就是把数据重定向到指定文件和屏幕上(多重定向)。
-a :向文件追加内容,而不是覆盖。
范例:

5. 管道中使用xargs
参数传递,主要让一些不支持管道的命令可以使用管道技术。
xargs命令是向其他命令传递命令行参数的一个过滤器,能够将管道或者标准输入传递的数据转换成xargs命令后跟随的命令的命令行参数。
选项:
-n 指定每行的最大参数量n,可以将标准输入的文本划分成为多行,每行n个参数,默认空格为分隔符。
范例:将30个数字,每行10个排序。

-i 以{}替代前面的结果
范例:将find查找到的文件,用移动到/data目录下。

-I (大写I)指定一个符号代替前面的结果,不用-i默认的{}
范例:用“[]”代替前面的结果,然后拷贝到/root/目录下。

-d 自定义分割符
范例:将“:”作为分割符,每行做多输出4个。

-0 (数字0)用null代替空格作为分隔符,配合find命令的-print0选项输出使用。
范例:


浙公网安备 33010602011771号