Linux运维实战:CentOS7.6操作系统(重定向/文件查找/磁盘管理/文件系统/RAID/LVM&SSM)

第11章 重定向和文件的查找
第12章 磁盘介绍及管理
第13章 Linux文件系统结构
第14章 RAID的原理与搭建
第15章 LVM管理和SSM工具使用

Linux运维实战:CentOS7.6操作系统从入门到精通(11-15)

第11章 重定向和文件的查找

Linux下一切皆文件,包括所有的程序和一些设备的访问入口都展示为文件。

Linux中的文件分为普通文件、目录文件、链接文件和设备文件四种类型。

11.1 文件描述符

文件描述符是内核为了高效管理已被打开的文件所创建的索引,用于指向被打开的文件,所有执行I/O操作的系统调用都通过文件描述符;文件描述符是一个简单的非负整数,用以标明每一个被进程所打开的文件,程序刚刚启动的时候,第一个打开的设备文件是0,第二个是1,依此类推。也可以理解为是文件的身份ID。

用户通过操作系统处理信息的过程中,使用的交互设备文件(键盘,鼠标,显示器)如图所示。

1.标准输入输出说明,如图11-2所示


图11-2 标准输入、输出

  • STDIN标准输入,默认的设备是键盘,文件编号为0。
  • STDOUT标准输出,默认的设备是显示器,文件编号为1,也可以重定向到文件。
  • STDERR标准错误输出,默认的设备是显示器,文件编号为2,也可以重定向到文件。

2.查看一个进程打开了哪些文件

语法:ll /proc/PID/fd, 该文件下专门存文件描述符。

[root@utahstu2 utah]# ps -ef | grep vim
root      34007   2994  0 11月01 pts/0  00:00:00 vim test.txt
root      78577   2994  0 19:11 pts/0    00:00:00 grep --color=auto vim
[root@utahstu2 utah]# ll /proc/34007/fd   #查看vim进程打开的文件
总用量 0
lrwx------. 1 root root 64 113 19:12 0 -> /dev/pts/0
lrwx------. 1 root root 64 113 19:12 1 -> /dev/pts/0
lrwx------. 1 root root 64 113 19:11 2 -> /dev/pts/0
lrwx------. 1 root root 64 113 19:12 4 -> /home/utah/utah/.test.txt.swp

这些0、1、2、4就是文件的描述符。一个进程启动时,都会打开3个文件:标准输入、标准输出和标准错误输出。这3个文件分别对应的文件描述符为0、1和2,也就是宏替换STDIN_FILENOSTDOUT_FILENOSTDERR_FILENO

⚠️注意:对文件描述符的操作就是对文件本身的操作,可以直接通过操作文件描述符来修改文件。

例11.2:查看和临时设置一个进程最多可以打开几个文件,也就是说,一个进程可以打开的文件描述符的个数限制。

[utah@utahstu2 ~]$ ulimit -n        #查看一个进程最多可以同时打开的文件数1024
[utah@utahstu2 ~]$ ulimit -n 2048   #修改一个进程最多可以同时打开的文件数2048.
[utah@utahstu2 ~]$ ulimit -n
2048

11.2 重定向的含义及管道、tee命令的使用

11.2.1 输入重定向

定义:输入重定向主要更改程序的数据输入方式。

11.2.1 输入重定向更改程序的数据输入方式。

11.2.2 输出重定向

定义:输出重定向是指将命令的正常输出结果保存到指定的文件中,而不是直接显示在显示器的屏幕上输出重定向使用“>”“>>”操作符号。

语法:

> 文件名,表示将标准输出的内容,写到后面的文件中,如果此文件名已经存在,将会覆盖原文件中的内容,若此文件不存在,则会以此文件名写新建文件。

>> 文件名,表示将标准输出的内容,以追加形式写到后面的文件中。若此文件不存在,则会以此文件名新建该文件。

Eg. 查看当前主机的CPU的类型并保存到cpu.txt文件中(而不是直接显示到屏幕上)。

[utah@utahstu2 utah]$ cat /proc/cpuinfo > cpuinfo.txt

Eg. 清空一个文件

[utah@utahstu2 utah]$ > test.txt 

11.2.3 EOF的使用

EOF本意是End Of File,表明到了文件末尾。“EOF”通常与“<<”结合使用,“<<EOF”表示后续的输入作为子命令或者子Shell的输入,直到命令又遇到“EOF”,再次返回到主调Shell,可将其理解为分界符(delimiter)。既然是分界符,那么形式自然不是固定的,这里可以将“EOF”进行自定义,但是前后的分界符必须成对出现且不能和Shell命令冲突。

例11.8:以<<EOF开始,以EOF结尾。

[utah@utahstu2 utah]$ cat > test.txt <<EOF
> qwer
> asdf
> EOF
[utah@utahstu2 utah]$ cat test.txt 
qwer
asdf

例11.9:以ccc作为分界符(自定义一个结束符)。

[utah@utahstu2 utah]$ cat >test.txt <<ccc
> qwe
> sdf
> ccc
[utah@utahstu2 utah]$ cat test.txt 
qwe
sdf

例11.10:在脚本中可以通过输入重定向来打印消息菜单。在使用的时候需要在“<<”右边跟一对终止符。终止符是可以自定义的。

在这里插入图片描述

11.2.4 错误重定向

定义:将命令执行过程中出现的错误信息(选项或参数错误)保存到指定的文件中,而不是直接显示到显示器。

重定向操作符:

  • 输入重定向:0<或简写为<。

  • 输出重定向:1>或简写为>。

  • 错误重定向:2>。

    其中的2指的是标准错误输出的文件描述符(在使用标准输入和输出时省略了1、0编号)。

在实际应用中,错误重定向可以用来收集执行的错误信息,为排错提供依据。对于Shell脚本还可以将无关紧要的错误信息重定向到空文件/dev/null中,以保持脚本输出的简洁。

例11.11:将错误显示的内容和正确显示的内容分开。

[utah@utahstu2 utah]$ ls /etc/passwd xxx          #没有重定向时的正常显示
ls: 无法访问xxx: 没有那个文件或目录
/etc/passwd
[utah@utahstu2 utah]$ ls /etc/passwd xxx > a.txt   #用>重定向正确的输出,不重定向错误输出。所以显示错误
ls: 无法访问xxx: 没有那个文件或目录
[utah@utahstu2 utah]$ cat a.txt                   #查看正确输出重定向到a.txt中的内容,没有错误信息。
/etc/passwd
[utah@utahstu2 utah]$ ls /etc/passwd xxx 2> a.txt  #用2>重定向错误的输出,不重定向正确输出
/etc/passwd
[utah@utahstu2 utah]$ cat a.txt                   #查看错误信息被重定向到a.txt中,且覆盖之前的内容。
ls: 无法访问xxx: 没有那个文件或目录
[utah@utahstu2 utah]$ 

注意:使用“2>”操作符时,像使用“>”操作符时一样,会覆盖目标文件的内容,若要追加而不覆盖文件的内容可使用“2>>”操作符。

11.2.5 null黑洞和zero空文件

1.可以把/dev/null文件看作“黑洞”(是个特殊设备),所有写入的内容都会永远丢失,而尝试读取内容则什么也读不到,然而/dev/null文件对命令行和脚本都非常有用。

[utah@utahstu2 utah]$ echo aaa > /dev/null
[utah@utahstu2 utah]$ cat /dev/null            #读取不到任何信息

2./dev/zero,在类UNIX操作系统中是一个特殊的设备文件,读取该文件的时候,它会提供无限的空字符(NULL,ASCII NUL,0x00)。典型用法是用它来产生一个特定大小的空白文件

例11.12:使用dd命令产生一个50MB的空白文件。

dd命令:用于转换并复制一个文件。

参数如下。

(1)if 代表输入文件。如果不指定if,默认就会从stdin中读取输入。
(2)of 代表输出文件。如果不指定of,默认就会将stdout作为默认输出。
(3)bs 代表以字节为单位的块大小。
(4)count代表被复制的块数。

[utah@utahstu2 utah]$ dd if=/dev/zero of=a.txt bs=1M count=50    #产生一个50M文件
记录了50+0 的读入
记录了50+0 的写出
52428800字节(52 MB)已复制,1.12023 秒,46.8 MB/秒
[utah@utahstu2 utah]$ du -sh a.txt  #使用du命令查看a.txt文件的内容,大小为50M
50M	a.txt
[utah@utahstu2 utah]$ cat a.txt     #使用cat命令查看,没有内容显示。

11.2.6 &> 和 >& 符号

&表示等同于的意思。

>& 将一个句柄的输出写入到另一个句柄的输入中

<& 从一个句柄读取输入并将其写入到另一个句柄输出中

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值