linux重定向>、<、管道|、tee、xargx详解
FD简介,即file descriptors 文件描述符,是访问文件的标识、链接文件,和windows中的快捷方式类似,接下来我们来观察一下,fd的信息首先我们打开一个vim编辑器,用另一个终端来登录系统查看如下我们在/proc/pin号/fd 就能看到文件的FD调用情况[root@localhost ~]# ps aux|grep vimroot36000.00.5 1497085400 pts
FD简介
,即file descriptors 文件描述符,是访问文件的标识、链接文件,和windows中的快捷方式类似,
接下来我们来观察一下,fd的信息
首先我们打开一个vim编辑器,用另一个终端来登录系统查看如下
我们在/proc/pin号/fd 就能看到文件的FD调用情况
[root@localhost ~]# ps aux|grep vim
root 3600 0.0 0.5 149708 5400 pts/0 S+ 19:08 0:00 vim 1.txt
root 3651 0.0 0.0 112728 968 pts/1 R+ 19:12 0:00 grep --color=auto vim
[root@localhost ~]# ll /proc/3600/fd
总用量 0
lrwx------ 1 root root 64 7月 30 19:09 0 -> /dev/pts/0
lrwx------ 1 root root 64 7月 30 19:09 1 -> /dev/pts/0
lrwx------ 1 root root 64 7月 30 19:08 2 -> /dev/pts/0
lrwx------ 1 root root 64 7月 30 19:09 3 -> /root/.1.txt.swp
其中第一行的“0 ->”代表的是标准输入,“1-> “表示标准输出,” 2 -> “表示错误输出。每个进程都有这三项信息。
接下来我们来进行实验,
输出重定向:
正常情况下输入date会直接打印在屏幕上,我们在此用输出重定向,把信息赋给date.txt文件内,其中一个>表示覆盖原来date.txt中的内容,两个>>表示在原来内容的基础上追加。完成后我们查看一下date.txt 结果显示了刚才没有在屏幕上打印的信息,说明重定向成功。
其中程序的正常输出的信息都可以重定向到其他文件。
[root@localhost ~]# date 1> date.txt
[root@localhost ~]# date 1>> date.txt
[root@localhost ~]# cat date.txt
2020年 07月 30日 星期四 19:19:20 CST
2020年 07月 30日 星期四 19:19:28 CST
[root@localhost ~]#
错误输出重定向:
错误输出是某个程序出现错误的时候才会出现的提示,这时候我们可以通过错误输出重定向将提示的错误信息重定向到另一个文件。
[root@localhost ~]# cat /bbb 2> error
[root@localhost ~]# cat error
cat: /bbb: 没有那个文件或目录
[root@localhost ~]#
我们查看根目录下的bbb文件,其实并没有那个文件,这时候我们把错误重定向到error文件中,接下来查看error中的错误提示。
正确提示和错误提示输入到相同文件中:
[root@localhost ~]# cat date.txt /bbb &>test
[root@localhost ~]# cat test
2020年 07月 30日 星期四 19:31:16 CST
cat: /bbb: 没有那个文件或目录
[root@localhost ~]#
我们查看刚才的date.txt文件是可以查看的,查看/bbb文件是不存在的,把正确的和不正确的提示都给test文件中,用“&“符号。
输入重定向
我们知道输出重定向的格式为>,标准输入的格式为<,我们用linux中的邮件来做演示。
[root@localhost ~]# mail -s "输入重定向测试" a <date.txt
发送邮件 -s““为邮件名,到用户a,并且用date.txt输入进文件内容。
接下来我们用用户a来查看邮件。可以看到文件内容“2020年 07月 30日 星期四 19:31:16 CST“已经发送了过来。
[a@localhost ~]$ mail
Heirloom Mail version 12.5 7/5/10. Type ? for help.
"/var/spool/mail/a": 1 message 1 new
>N 1 root Thu Jul 30 19:40 18/665 "输入重定向测试"
& 1
Message 1:
From root@localhost.localdomain Thu Jul 30 19:40:00 2020
Return-Path: <root@localhost.localdomain>
X-Original-To: a
Delivered-To: a@localhost.localdomain
Date: Thu, 30 Jul 2020 19:40:00 +0800
To: a@localhost.localdomain
Subject: 输入重定向测试
User-Agent: Heirloom mailx 12.5 7/5/10
Content-Type: text/plain; charset=utf-8
From: root@localhost.localdomain (root)
Status: R
2020年 07月 30日 星期四 19:31:16 CST
&
管道 |
Piping管道:
管道命令可以将多个命令组合起来使用,一次完成自己需要的处理任务。
如下,我们查看进程,并从所有进程中通过管道|来筛选其中sleep的进程。
[root@localhost ~]# ps aux | grep sleep
root 4083 0.0 0.0 107956 612 ? S 19:48 0:00 sleep 60
root 4086 0.0 0.0 112728 972 pts/1 S+ 19:48 0:00 grep --color=auto sleep
tee管道:
三通管道 我们在使用管道的时候有时想查看各个管道中间的内容,此时就需要tee管道,接下来我进行演示。
[root@localhost ~]# ps aux |grep root|tee gdtest.txt |grep 1250
root 1250 0.0 0.4 481488 4724 ? Ssl 16:41 0:00 /usr/sbin/gdm
root 4188 0.0 0.0 112728 972 pts/1 S+ 19:57 0:00 grep --color=auto 1250
[root@localhost ~]# tail -10 gdtest.txt
root 2638 0.0 0.0 0 0 ? S 17:40 0:00 [kworker/u256:1]
root 3906 0.0 0.6 163616 6048 ? Ss 19:36 0:00 sshd: a [priv]
root 3974 0.0 0.0 0 0 ? S 19:39 0:00 [kworker/0:0]
root 4106 0.0 0.0 0 0 ? S 19:50 0:00 [kworker/0:3]
root 4150 0.0 0.0 0 0 ? S 19:55 0:00 [kworker/0:1]
root 4182 0.0 0.0 107956 616 ? S 19:57 0:00 sleep 60
root 4185 0.0 0.1 155372 1872 pts/1 R+ 19:57 0:00 ps aux
root 4186 0.0 0.0 112732 964 pts/1 R+ 19:57 0:00 grep --color=auto root
root 4187 0.0 0.0 108172 676 pts/1 S+ 19:57 0:00 tee gdtest.txt
root 4188 0.0 0.0 112728 972 pts/1 S+ 19:57 0:00 grep --color=auto 1250
[root@localhost ~]#
第一行命令解释查看进程过滤出root字段的进程,然后通过三通管道tee 把得到的信息存储进gdtest.txt文件中,记续过滤出含有1250的进程,
完成后查看gdtest.txt 因为文件中内容过多 我们只显示其中的前十行用作演示。
参数传递 Xargs
作用示例,我们可以用这种操作来批量删除文件
[root@localhost ~]# touch file{1..3} //创建文件file1 file2 file3
[root@localhost ~]# ls file* //查看文件夹下file开头的文件
file1 file2 file3
[root@localhost ~]# vim test
[root@localhost ~]# cat test //创建test文件,并写入三个文件的路径
/root/file1
/root/file2
/root/file3
[root@localhost ~]# cat test | xargs rm -rf //查看文件内容,并且通过参数传递把内容传递给rm -rf
[root@localhost ~]# ls file* //结果显示三个文件已经被删除。
ls: 无法访问file*: 没有那个文件或目录
奋斗!
更多推荐
所有评论(0)