本节所讲内容:

 

      重定向的作用

      文件描述符0、1、2

      实现输入输出重定向 >、 >>

      tee 命令介绍

      管道|

      which      查看可执行文件的位置 
whereis    查看可执行文件的位置 及相关文件
locate       配合数据库查看文件位置 
find          实际搜寻硬盘查询文件名称 

      grep      过滤

 

 

文件描述符:内核(kernel)利用文件描述符(file descriptor)来访问文件。文件描述符是非负整数。打开现存文件或新建文件时,内核会返回一个文件描述符。读写文件也需要使用文件描述符来指定待读写的文件。

 

linux下一切皆文件。

STDIN  标准输入  如:键盘文件   文件描述符为:0

STDOUT 标准输出 屏幕终端  文件描述符为:1

STDERR 错误输出 屏幕终端  文件描述符为:2

 

[root@localhost ~]#echo 123456 | passwd --stdin rm > /dev/null

/dev/null 代表空设备文件,就是Linux中的黑洞。放多少东西都填不满。

 

输出重定向

>   #输出重定向到哪里

1>   表示stdout标准输出,系统默认值是1,所以">  /dev/null"等同于"1>  /dev/null"

[root@localhost ~]# ls/home/  1>  a.txt

[root@localhost ~]# cata.txt

rm

 

2>  #表示标准错误输出

[root@localhost ~]# ls/homee  2>  b.txt

[root@localhost ~]# catb.txt

ls: cannot access/homee: No such file or directory

 

&  & 表示等同于的意思

[root@localhost ~]# ls/home/  /homee  > d.txt 2>&1

[root@localhost ~]# catd.txt

ls: cannot access/homee: No such file or directory

/home/:

rm

[root@localhost ~]# ls/home/  /homee  2> d.txt >&2

 

&>混合输出

[root@localhost ~]# ls/home/  /homee  &> a.txt

[root@localhost ~]# cata.txt

ls: cannot access/homee: No such file or directory

/home/:

rm

 

输出重定向,追加和覆盖

> 和>> 的区别
> 每次都产生新文件。

>> 是追加,不产生新的文件。

[root@localhost ~]#echo yangguangqiming > a.txt

[root@localhost ~]# cata.txt

yangguangqiming

 

[root@localhost ~]#echo yangguangqiming >>  a.txt

[root@localhost ~]# cata.txt

yangguangqiming

yangguangqiming

 

 

输入重定向

实例1:wc查看文件的字节数、字数、行数

[root@localhost ~]# wc/etc/passwd

  39             77                               2002                      /etc/passwd

行    字数(以空格为分隔符) 大小(字节为单位)

 

[root@localhost ~]# wc< /etc/passwd

  39   772002

 

[root@localhost ~]# cat> a.txt <<EOF

>**********************************

> ****  welcome to hero aliance ****

>**********************************

> EOF

[root@localhost ~]# cata.txt

**********************************

****  welcome to hero aliance ****

**********************************

 

管道

前一个程序的标准输出,交给后一个程序做标准输入。

[root@localhost ~]# ps-aux | grep vim

 

tee命令:

功能说明:读取标准输出的数据,并将其内容输入成文件。

[root@localhost ~]# ps-aux | grep vim  | tee a.txt

root       3597 0.0  0.1 151456  5232 pts/1   S+   21:20   0:00 vim a.txt

root       3723 0.0  0.0 112640   956 pts/0   S+   21:29   0:00 grep --color=auto vim

[root@localhost ~]# cata.txt

root       3597 0.0  0.1 151456  5232 pts/1   S+   21:20   0:00 vim a.txt

root       3723 0.0  0.0 112640   956 pts/0   S+   21:29   0:00 grep --color=auto vim

 

文件查找方法

which      查看可执行文件的位置 

grep      过滤
whereis    查看可执行文件的位置 及相关文件
locate       配合数据库缓存,快速查看文件位置
 
find         
实际搜寻硬盘查询文件名称 

 

查找文件:

#which CHMMAND

[root@localhost ~]#which shutdown

/usr/sbin/shutdown

[root@localhost ~]# rpm-qf /usr/sbin/shutdown

systemd-208-20.el7.x86_64

[root@localhost ~]# rpm-qf `which shutdown`

systemd-208-20.el7.x86_64

[root@localhost ~]# rpm-qf $(which shutdown)

systemd-208-20.el7.x86_64

 

#whereis CHMMAND

[root@localhost ~]#whereis shutdown

shutdown:/usr/sbin/shutdown /usr/share/man/man2/shutdown.2.gz/usr/share/man/man3p/shutdown.3p.gz /usr/share/man/man8/shutdown.8.gz

 

 

locate      配合数据库缓存,快速查看文件位置 
[root@localhost ~]# locate hucheng

[root@localhost ~]#updatedb

[root@localhost ~]#locate hucheng

/root/hucheng

 

grep      过滤
[root@localhost ~]# grep  bash  passwd

root:x:0:0:root:/root:/bin/bash

rm:x:1000:1000:rm:/home/rm:/bin/bash

 

-v  反转

-i  忽略大小写

^#   以#开头

#$   以#结尾

^$   空行

 

例:-v取反,查找出文件中不带nologin的行

[root@localhost ~]#grep  -v "nologin"   passwd

root:x:0:0:root:/root:/bin/bash

sync:x:5:0:sync:/sbin:/bin/sync

shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown

halt:x:7:0:halt:/sbin:/sbin/halt

rm:x:1000:1000:rm:/home/rm:/bin/bash

 

例:-i  忽略大小写进行查找

[root@localhost ~]#grep -i "rm"   passwd

rm:x:1000:1000:rm:/home/rm:/bin/bash

RM********************************************

 

例:^ 过滤文件中的所有以#号开头的行

[root@localhost ~]#grep "^#"  passwd

#ftp:x:14:50:FTPUser:/var/ftp:/sbin/nologin

#usbmuxd:x:113:113:usbmuxduser:/:/sbin/nologin

#ntp:x:38:38::/etc/ntp:/sbin/nologin

 

例:$ 过滤文件中的所有以%结尾的行

[root@localhost ~]#grep "%$"  passwd

nobody:x:99:99:Nobody:/:/sbin/nologin%

abrt:x:173:173::/etc/abrt:/sbin/nologin%

radvd:x:75:75:radvduser:/:/sbin/nologin%

 

例:^$ 过滤文件中的空行

[root@localhost ~]#grep "^$"  passwd  -n

16:

22:

27:

 

注:-n 对过滤的内容加上行号

 

扩展:过滤文件中没有空行和注释行的真实有效的内容

[root@localhost ~]#grep  -v "^$"  /etc/ssh/sshd_config | grep  -v "^#"

学习过程中如果问题,请留言。更多内容请加:
学神IT-linux讲师-RM老师QQ:2805537762
学神IT-戚老师QQ:3341251313
学神IT-旭斌QQ:372469347
学神IT教育RHEL7交流群:468845589