php获取文件描述符,LINUX教程:Linux教程之文件描述符、重定向、管道符、tee命令...

《LINUX教程:Linux教程之文件描述符、重定向、管道符、tee命令》要点:

本文介绍了LINUX教程:Linux教程之文件描述符、重定向、管道符、tee命令,希望对您有用。如果有疑问,可以联系我们。

本节讨论一下几个问题:

1. 文件描述符.

2. 重定向.

3. 管道符

4. tee的用法.

1. 文件描述符.

在Linux系统中一切皆文件.文件夹和设备都是文件.如何用来区别不同的文件呢?这里的区别不是我们在Windows下看到的后缀名不同来区别.也不是我们在Linux下用ls 命令看到的不同文件的列表.这里的文件描述符主要讨论的是对文件操作的一个标识符.无操作就无标识符. 好比两个进程同时在对同一个文件进行读操作.

如何区分这两个读操作呢?这就必要文件文件描述符来区别了.每一次打开一个文件就形成了一个文件描述符,后打开的描述符一般都要比先打开的文件描述符大.

好比:我们可以man 一下 open函数. 看一下返回值:

[root@xiaolyu ~]# man open

388f6df669cfe165a7fb20bbd137485d.png

也便是说文件描述符是一个整数.当然了,系统默认最大是1024. 我们不妨用ulimit -n 来查看一下.

814aabb123805875d84b7992e8f801f0.png

我们也可以查看一下:man socket 一下 看一下效果:

1adf79bcf78042f4b8aaed3220e34b6f.png

也便是说文件描述符可以通过多种途径来生成.记住:只要对文件进行操作,就会返回文件描述符.

然后我们来看看系统自带的3个文件描述符.

8fd25146dc45e78cd2060da020257ea4.png

这三个是最小的文件描述符,我们本身操作文件,返回的文件描述符最小都是从4开始的.

stdin   尺度输入  默认的设备是键盘    文件描述符为:0

命令将从标准输入文件中  读取  在执行过程中的 必要的  输入数据.  -->数据来源于文件

stdout 尺度输出  默认的设备是 显示器  文件描述符为:1

命令执行后的输出结果,发送到尺度输出文件.  -->结果输出到文件

stderr 尺度错误   默认的设备是显示器  文件描述符为:2

命令将执行期间的各种错误信息发送到尺度错误文件 -->错误信息发送到文件

尺度输入,尺度输出和尺度错误默认使用键盘和显示器作为关联设备与操作系统进行交互完成最基本的输入,输出操作.

我们不妨用man stdin 来看一下:[root@xiaolyu ~]# man stdin

a2d03ea3ffab2dcd831190ce35d919d8.png

以上就是关于文件描述符.

2. 重定向.

重定向包括:重定向输出和重定向输入:

重定向输出:

将命令的正常输出结果保留到指定的文件中,而不是直接显示在显示器的屏幕上

重定向输出使用”>” “>>” 操作符号

>  覆盖文件

>> 追加内容

若重定向的输出的文件不存在,则会新建该文件

eg:查看当前主机的CPU的类型保留到kernel.txt文件中(而不是直接显示到屏幕上)

uname -p查看cpu类型信息

e5a56abf02c6e53bfba33a1cb9d57fff.png

将内核 的版本信息 和操作系统信息 追加到kernel.txt

61660e26f0318f16b29ce86e73ffa04a.png

重定向输出就将结果输出到文件中(覆盖和追加两种方式)

重定向输入

将命令中接收输入的途径由默认的键盘改为其他文件.而不是等待从键盘输入

从文件读取数据

操作符: “

通过重定向输入可以使一些交互式操作过程能够通过读取文件来完成

eg:使用passwd 设置暗码时.每次都根据提示输入暗码比较烦琐

改用重定向输入将可以忽略交互式的过程.而自动完成暗码设置(结合—stdin 选项来识别标准的输入)

使用非交互式的去执行设置暗码:

7a2d856fb8ba498faba34736cc72fe63.png

[root@xiaolyu ~]# touch passwd.txt

[root@xiaolyu ~]# vim passwd.txt

[root@xiaolyu ~]# useradd zhangsan

useradd: user 'zhangsan' already exists

[root@xiaolyu ~]# useradd lisi

[root@xiaolyu ~]# passwd --stdin lisi < passwd.txt

Changing password for user lisi.

passwd: all authentication tokens updated successfully.

重定向输入便是通过文件中的内容作为输入的数据

错误重定向:

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

错误信息保留到文件

操作符: 使用2>

2指的是错误文件的编号 (在使用尺度的输入和输出省略了1 0 编号)

在实际应用中,错误重定向可以用来收集执行的错误信息.为排错提供依据;

对于shell脚本还可以将无关紧要的错误信息重定向到空文件/dev/null中以坚持脚本输出的简洁

eg: 使用tar命令进行备份的时候出新的错误信息保留到err.log文件中

f931bd4b2c6eb7b27dacb03968db7ab3.png

把/dev/null看作"黑洞". 它非常等价于一个只写文件. 所有写入它的内容都会永远丢失. 而尝试从它那儿读取内容则什么也读不到. 然而, /dev/null对命令行和脚本都非常的有用.

c1539c40b1ab965eb10978fb7a834d1f.png

echo $?   表示最近一次操作是否成功 . 0成功  非零不成功

正确的写到一个文件,错误的在写到一个文件

[root@xiaolyu ~]#  ls /tmp/ /nginx  1> a.txt 2>b.txt

7a10cf08ad5a81d7db5c835103317f01.png

ebff9f9ab252a7e56c3a7a948583028f.png

保留到一张图片比较清爽:

33c3177cd46072d1f0727be9b9041a7b.png

输出到同一个文件中:

[root@xiaolyu ~]#ls   /tmp/  /nginx/  1>a.txt  2>&1

606666efa9b9e3a8e635c3f24909817a.png

或者以下这种写法 ,重定向到文件的1可以省略,因为默认便是1.

[root@xiaolyu ~]#  ls /tmp/ /nginx/ >a.txt 2>&1

cf7ecaeec68069fa4158343c5cfdedf6.png

&>混合输出

不分正确的还是错误的

[root@xiaolyu ~]# ls /opt/  /mysql &> a.txt

df98d66a9d2cb62cdacaadb7b8e70e9b.png

3. 管道符

这里只提管道符,关于管道有专门创建管道的函数,以及有名管道和无名管道,以及管道之间的通信,我放在IPC通信中阐述.

管道符,可以把两条命令连起来,前面一条命令的输出当成后面一条命令的输入.

eg: 查看nginx的进程.

[root@xiaolyu ~]# ps -aux | grep nginx

0f8e8922943428edfbba251f78a3d4a5.png

eg: 查看某个进程的端口:

8fcd36a523fc9697e38eed6b1c2406d3.png

4. tree命令.

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

语法:tee [-a][--help][--version][文件...]

tee指令会从标准输入设备读取数据,将其内容输出到标准输出设备,同时保存成文件.

参  数:

-a或  --append  追加

--help  在线赞助.

--version  显示版本信息

eg1

[root@xiaolyu ~]# who查看用户登录信息

root :0 2016-08-13 07:58 (:0)

root pts/0 2016-08-13 11:21 (:0)

[root@xiaolyu ~]# who | tee who.out

将who的结果输出到who.out文件 ,同时在终端显示:

37f4137137968a1338baa6fee4e4cabd.png

eg2

[root@xiaolyu ~]# pwd | tee -a who.out追加

b2777e26549e4cdaccefb41df11d4b9e.png

要注意的是:在使用管道线时,前一个命令的尺度错误输出不会被tee读取.

[root@xiaolyu ~]# ls -l yyy | tee -a who.out

3127fc3bc885c0711ca33b0a661cef3b.png

把尺度错误也被tee读取

[root@xiaolyu ~]# ls -l yyy   2>&1 | tee -a who.out

9d16241a41f5b87c80f611d2fe1bf12e.png

本文永久更新链接地址:

维易PHP培训学院每天发布《LINUX教程:Linux教程之文件描述符、重定向、管道符、tee命令》等实战技能,PHP、MYSQL、LINUX、APP、JS,CSS全面培养人才。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值