一.思考
date输出的结果,能否在下一次开机查看。
答案是不
解决办法
date > date.txt
命令date所输出的结果 重定向 收集在文件date.txt里
二.重定向
1.标准输入、标准输出、标准错误
== FD简介==
1.简介
file descriptors ,FD,文件描述符
进程使用文件描述符来管理打开的文件
链接文件
2.图示:
FD是访问文件的标识,即链接文件
0是键盘只读,
1,2是终端可以理解是屏幕,
3+是文件,可读可写
3. 示例
通过我们非常熟悉的VIM程序。来观察一个进程的FD(文件描述)信息。
(1)通过一个终端,打开一个文本。
vim 1.txt
(2)通过另一个终端,查询文本程序的进程号
ps aux| grep vim
第一条为vim查询结果,第二为查找本身命令的信息
(3)在/proc目录中查看文本程序的FD(文件描述)
通常在 /proc/PID/fd 就能看到文件的FD调用情况
[root@localhost ~]# ls /proc/5606/fd
感觉好像没什么。用用ls -l呢?
[root@localhost ~]# ll /proc/5606/fd
总用量 0
lrwx------. 1 root root 64 10月 10 07:37 0 -> /dev/pts/2
标准输入
lrwx------. 1 root root 64 10月 10 07:37 1 -> /dev/pts/2
标准输出
lrwx------. 1 root root 64 10月 10 07:37 2 -> /dev/pts/2
标准错误输出
lrwx------. 1 root root 64 10月 10 07:37 4 -> /root/.1.txt.swp
常规文件
ll /root/ -a
本身打开的vim是1.txt。w保存就会出现1.txt和1.txt.swp。内容一样,第二个相当于备胎用于修改。
当你再打开vim进行修改时,如改过 没有保存 直接点q!,得到原来内容,则1.txt.swp消失
,修改过wq! 。留下改过的内容,则1.txt.swp替代1.txt文件。1.txt.swp消失。
如果你在修改时直接给他关了,计算机会自动保存两份内容,等待用户选择
(4)总结
看到的0124就是FD(文件描述),程序通过描述符访问文件,
可以是常规文件,也可以是设备文件。
2.重定向案例 >_<
1.输出重定向及综合案例
==简介==
FD(文件描述): 1和2
输出重定向分为
正确输出
"1>" 等价于 " > " -----覆盖
"1>> "等价于">>" -----追加
错误输出
2> 没有简写
2>> 没有简写
==案例1,输出重定向==
[root@localhost~]# date 1> date.txt
[root@localhost ~]# date >> date.txt
检验
[root@localhost ~]# cat date.txt
2020年 05月 29日 星期五 11:30:14 CST
其他程序可以吗?
mkdir -v 可以吗?
程序本身需要输出
== 案例2:错误输出重定向==
错误示范
[root@localhost ~]# ls /home/ 2> list.txt
观察list.txt文件中有没有内容?
因为没有错误信息
正确示范
当某条命令产生错误时,才会有错误输出。
[root@localhost ~]# ls /aaaaaaaaa 2> list.txt
[root@localhost ~]#cat list.txt
ls: 无法访问/aaaaaaaaa: 没有那个文件或目录
案例3: 正确和错误都输入到相同位置
[root@localhost ~]# ls /home/ /aaaaaaaaa &>list.txt
生产环境
如下命令不需要操作
[root@localhost ~]#yum install httpd &>/dev/null
2.输入重定向及结合案例
==简介==
标准输入:" <" 等价 "0<"
==案例:输入重定向发送邮件==
(1) 观察默认发送邮件的过程
编写邮件
[root@localhost ~]# mail -s "ssss" alice
111
222
333
.
点代表邮件编辑已结束。
mail 电子邮件
-s 标题
ssssssss 标题内容
alice 邮件接收人
. 结束符号
查看邮件
[root@localhost ~]# su - alice
[alice@localhost ~]$ mail
Mail version 8.1 6/6/93. Type ? for help.
"/var/spool/mail/alice": 1 message 1 new
>N 1 root@localhost .local Mon Oct 29 14:09 18/657 "ssss"
&
按邮件编号:1.即可看邮件。
按q 退出。
(2) 使用重定向快速创建邮件
如果已经有了现成的邮件内容呢,如何快速输入邮件内容。
就可以用重定向创建邮件!!!
先准备一段邮件内容
vim word.txt
[root@localhost ~]# mail -s "test01" alice < word.txt
邮件命令 标题 收件用户 导入内容
原理:利用输入重定向,把文件内容代替人为的输入。
三.管道 |
1.进程管道piping
1.简介
管道命令可以将多条命令组合起来,一次性完成复杂的处理任务。
2.语法
command1 | command2 |command3 |...
指令1的标准输出 作为指令2的标准输入
3.案例
[root@localhost ~]# cat /etc/passwd | tail -3
查看用户信息 只看其中的后三行
[root@localhost ~]# ps aux | grep 'sshd'
查看程序进程 带sshd的进程
2. tee 管道
1.简介
三通管道,即交给另一个程序处理。又保存一份副本
2.案例
[root@localhost ~]# cat /etc/passwd |tee 88.txt | tail -1
localhost:x:1001:1001::/home/qianfeng:/bin/bash
[root@localhost ~]# cat 88.txt
88.txt 输出所有行,因为是命令1 (cat)处理的结果
|tee 88.txt :把cat的命令输出结果保存在 文件88.txt里
|tail -1 : 把cat 命令执行的结果, 输入到 tail -1 的命令里
cat 88.txt 查看文件88.txt所接收的cat /etc/passwd内容
3.参数传递Xargs
1. cp rm一些特殊命令就是不服其他程序。
2.案例
==环境准备,准备一些文件==
[root@localhost ~]# touch /home/file{1..5}
[root@localhost ~]#ls /home
创建文件夹1 2 3 4 5 查看是否创建好
==接收消息,部分文件需要删除==
[root@localhost ~]# vim files
/home/file1
/home/file3
/home/file5
==使用管道==
[root@localhost ~]# cat files.txt |rm -rvf
结果失败
==结果不行,加 xargs
[root@localhost ~]# cat files |xargs rm -rv f
查看文件内容 |xargs 删除 f
执行结果: removed ‘/home/file1’
removed ‘/home/file3’
removed ‘/home/file5’
结果成功