文件类型

当我们使用命令查看linux目录下的内容时,如下:

[root@optimize ~]# ll
total 4
-rw-------. 1 root root 1246 Jun 11 10:54 anaconda-ks.cfg

左侧第一个字符代表的就是文件类型
-:普通文件(可执行、图片、文本) REG
d:目录
l:链接
b:块设备- 硬盘
c:字符设备- 键盘 CHR
s:socket
p:pipeline
[eventpoll]:

示例:

[root@optimize opt]# ll
total 21428
-rw-r--r-- 1 root root  3642862 Jun 23 11:02 11683.log
drwxr-xr-x 9 root root      160 Nov 27  2018 apache-tomcat-8.0.53

如上图所示,11683.log是一个普通文件,apache-tomcat-8.0.53是一个目录

[root@optimize opt]# cd /dev/
[root@optimize dev]# ll
total 0
crw-rw---- 1 root video    10, 175 Jun 28 00:44 agpgart
crw------- 1 root root     10, 235 Jun 28 00:44 autofs
lrwxrwxrwx 1 root root           3 Jun 28 00:44 cdrom -> sr0
drwxr-xr-x 6 root root         120 Jun 28 00:44 disk
brw-rw---- 1 root disk    253,   0 Jun 28 00:44 dm-0
brw-rw---- 1 root disk    253,   1 Jun 28 00:44 dm-1
drwxr-xr-x 2 root root           0 Jun 28 00:44 hugepages
srw-rw-rw- 1 root root           0 Jun 28 00:44 log
brw-rw---- 1 root disk      8,   0 Jun 28 00:44 sda
brw-rw---- 1 root disk      8,   1 Jun 28 00:44 sda1
brw-rw---- 1 root disk      8,   2 Jun 28 00:44 sda2
crw-rw---- 1 root disk     21,   0 Jun 28 00:44 sg0
crw-rw---- 1 root cdrom    21,   1 Jun 28 00:44 sg1
drwxrwxrwt 2 root root          40 Jun 28 00:44 shm
crw------- 1 root root     10, 231 Jun 28 00:44 snapshot
drwxr-xr-x 3 root root         200 Jun 28 00:44 snd
brw-rw---- 1 root cdrom    11,   0 Jun 28 00:44 sr0
lrwxrwxrwx 1 root root          15 Jun 28 00:44 stderr -> /proc/self/fd/2
crw-rw-rw- 1 root tty       5,   0 Jun 28 00:44 tty

如上所示:对实际显示的内容进行了删减,sda代表一块硬盘,类型为b,是块设备;像我们的终端tty,就是一个字符设备,类型为c;

[root@optimize opt]# ll
total 21428
-rw-r--r-- 1 root root  3642862 Jun 23 11:02 11683.log
drwxr-xr-x 9 root root      160 Nov 27  2018 apache-tomcat-8.0.53
[root@optimize opt]# ln 11683.log 11684.log
[root@optimize opt]# ll
total 24988
-rw-r--r-- 2 root root  3642862 Jun 23 11:02 11683.log
-rw-r--r-- 2 root root  3642862 Jun 23 11:02 11684.log
drwxr-xr-x 9 root root      160 Nov 27  2018 apache-tomcat-8.0.53
[root@optimize opt]# stat 11683.log File: ‘11683.log’Size: 3642862     Blocks: 7120       IO Block: 4096   regular file
Device: fd00h/64768d    Inode: 879676      Links: 2
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2020-06-23 11:02:21.861608273 -0400
Modify: 2020-06-23 11:02:07.665576387 -0400
Change: 2020-06-28 07:29:17.096904730 -0400Birth: -
[root@optimize opt]# stat 11684.log File: ‘11684.log’Size: 3642862     Blocks: 7120       IO Block: 4096   regular file
Device: fd00h/64768d    Inode: 879676      Links: 2
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2020-06-23 11:02:21.861608273 -0400
Modify: 2020-06-23 11:02:07.665576387 -0400
Change: 2020-06-28 07:29:17.096904730 -0400Birth: -

做完以上操作后,我们发现11683.log和11684.log的Inode id是一样的,证明这是一个硬链接,下面我们再做一个软连接进行对比

[root@optimize opt]# ln -s 11683.log 11685.log
[root@optimize opt]# stat 11683.log File: ‘11683.log’Size: 3642862     Blocks: 7120       IO Block: 4096   regular file
Device: fd00h/64768d    Inode: 879676      Links: 2
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2020-06-23 11:02:21.861608273 -0400
Modify: 2020-06-23 11:02:07.665576387 -0400
Change: 2020-06-28 07:29:17.096904730 -0400Birth: -
[root@optimize opt]# stat 11685.log File: ‘11685.log’ -> ‘11683.log’Size: 9             Blocks: 0          IO Block: 4096   symbolic link
Device: fd00h/64768d    Inode: 889760      Links: 1
Access: (0777/lrwxrwxrwx)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2020-06-28 07:32:00.583214231 -0400
Modify: 2020-06-28 07:32:00.583214231 -0400
Change: 2020-06-28 07:32:00.583214231 -0400Birth: -

经过与硬链接对比,我们发现软连接的两个文件的Inode id是不一样的

所谓硬链接:两个变量名指向同一个物理文件,修改一个文件,另一个文件也会随之变动

[root@optimize opt]# ll
total 24988
-rw-r--r-- 2 root root  3642862 Jun 23 11:02 11683.log
-rw-r--r-- 2 root root  3642862 Jun 23 11:02 11684.log
lrwxrwxrwx 1 root root        9 Jun 28 07:32 11685.log -> 11683.log
drwxr-xr-x 9 root root      160 Nov 27  2018 apache-tomcat-8.0.53
[root@optimize opt]# rm -rf 11684.log
[root@optimize opt]# ll
total 21428
-rw-r--r-- 1 root root  3642862 Jun 23 11:02 11683.log
lrwxrwxrwx 1 root root        9 Jun 28 07:32 11685.log -> 11683.log
drwxr-xr-x 9 root root      160 Nov 27  2018 apache-tomcat-8.0.53

当我们删除刚才创建的硬链接文件后,发现原来的11683.log还在,只是引用的数由2变成了1,root前面的那个数
区别:软连接删除原文件后,软连接指向的文件会爆红显示不存在,而硬链接则不受影响

我们准备一个干净的目录做下面的测试

[root@optimize opt]# mkdir itliu
[root@optimize opt]# ll
total 24988
-rw-r--r-- 2 root root  3642862 Jun 23 11:02 11683.log
-rw-r--r-- 2 root root  3642862 Jun 23 11:02 11684.log
lrwxrwxrwx 1 root root        9 Jun 28 07:32 11685.log -> 11683.log
drwxr-xr-x 9 root root      160 Nov 27  2018 apache-tomcat-8.0.53
drwxr-xr-x 2 root root        6 Jun 28 07:43 itliu
[root@optimize opt]# cd itliu
[root@optimize itliu]# ls
[root@optimize itliu]# dd if=/dev/zero of=mydisk.img bs=1048576 count=100
100+0 records in
100+0 records out
104857600 bytes (105 MB) copied, 0.37027 s, 283 MB/s
[root@optimize itliu]# ll
total 102400
-rw-r--r-- 1 root root 104857600 Jun 28 07:43 mydisk.img
[root@optimize itliu]# ll -h
total 100M
-rw-r--r-- 1 root root 100M Jun 28 07:43 mydisk.img

if -> inputfile
of -> outputfile
bs -> blocksize块大小 1048576 -> 1M
count -> 有多少个bs,100个1M大小的bs,也就是说创建的mydisk.img是100M
dd命令参考 https://www.runoob.com/linux/linux-comm-dd.html

创建mydisk.img的目的是把这个文件当做一个磁盘挂载到我们的文件系统中去

[root@optimize itliu]# losetup /dev/loop0 mydisk.img
[root@optimize itliu]# mke2fs /dev/loop0
mke2fs 1.42.9 (28-Dec-2013)
Discarding device blocks: done
Filesystem label=
OS type: Linux
Block size=1024 (log=0)
Fragment size=1024 (log=0)
Stride=0 blocks, Stripe width=0 blocks
25688 inodes, 102400 blocks
5120 blocks (5.00%) reserved for the super user
First data block=1
Maximum filesystem blocks=67371008
13 block groups
8192 blocks per group, 8192 fragments per group
1976 inodes per group
Superblock backups stored on blocks: 8193, 24577, 40961, 57345, 73729Allocating group tables: done
Writing inode tables: done
Writing superblocks and filesystem accounting information: done

使用 losetup将磁盘镜像文件虚拟成块设备并格式化成ext2文件系统
losetup -> https://www.runoob.com/linux/linux-comm-losetup.html
mke2fs -> https://www.runoob.com/linux/linux-comm-mke2fs.html

挂载块设备

[root@optimize itliu]# cd /mnt/
[root@optimize mnt]# ls
[root@optimize mnt]# mkdir tmp
[root@optimize mnt]# mount -t ext2 /dev/loop0 /mnt/tmp/
[root@optimize mnt]# df
Filesystem              1K-blocks    Used Available Use% Mounted on
/dev/mapper/centos-root  17811456 2033304  15778152  12% /
devtmpfs                  1001892       0   1001892   0% /dev
tmpfs                     1014056       0   1014056   0% /dev/shm
tmpfs                     1014056    9720   1004336   1% /run
tmpfs                     1014056       0   1014056   0% /sys/fs/cgroup
/dev/sda1                 1038336  135596    902740  14% /boot
tmpfs                      202812       0    202812   0% /run/user/0
/dev/loop0                  99150    1550     92480   2% /mnt/tmp

挂载后我们的虚拟文件目录下面多了/mnt/tmp,我们访问这个目录也就相当于访问了我们的/dev/loop0块设备

进入到我们的虚拟目录/mnt/tmp中,现在是空的

[root@optimize mnt]# cd tmp/
[root@optimize tmp]# ls
lost+found

查看我们的解释程序在哪

[root@optimize tmp]# whereis bash
bash: /usr/bin/bash /usr/share/man/man1/bash.1.gz

创建我们自己的bin目录,用来放bash解释程序,lib64用来放bash关联的动态链接库,ldd用来查看bash关联的动态链接库

[root@optimize tmp]# mkdir bin lib64
[root@optimize tmp]# ldd /usr/bin/bashlinux-vdso.so.1 =>  (0x00007ffd2efef000)libtinfo.so.5 => /lib64/libtinfo.so.5 (0x00007fb05b2f4000)libdl.so.2 => /lib64/libdl.so.2 (0x00007fb05b0f0000)libc.so.6 => /lib64/libc.so.6 (0x00007fb05ad23000)/lib64/ld-linux-x86-64.so.2 (0x00007fb05b51e000)

将bash解释程序copy至当前目录下的bin目录,将bash需要的动态链接库copy至lib64目录

[root@optimize tmp]# cp /usr/bin/bash ./bin/
[root@optimize tmp]# cp /lib64/{libtinfo.so.5,libdl.so.2,libc.so.6,ld-linux-x86-64.so.2} ./lib64/

将当前目录变更为根目录并打印进程号

[root@optimize tmp]# chroot ./
bash-4.2# echo $$
19915

写入字符串到跟目录下的文件abc.txt,退出到之前的根目录,发现并没有abc.txt,abc.txt存在于刚才chroot后的根目录

bash-4.2# echo "aaa" -> /abc.txt
bash-4.2# exit
exit
[root@optimize tmp]# ls /
bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
[root@optimize tmp]# cd /mnt/tmp/
[root@optimize tmp]# ls
abc.txt  bin  lib64  lost+found
[root@optimize tmp]# echo $$
19763

下面演示当前进程打开了那些文件,使用lsof命令
lsof命令传送门

[root@optimize tmp]# lsof -p $$
COMMAND   PID USER   FD   TYPE DEVICE  SIZE/OFF     NODE NAME
bash    19763 root  cwd    DIR    7,0      1024        2 /mnt/tmp
bash    19763 root  rtd    DIR  253,0       224       64 /
bash    19763 root  txt    REG  253,0    964608 50333656 /usr/bin/bash
bash    19763 root  mem    REG  253,0 106075056 50566106 /usr/lib/locale/locale-archive
bash    19763 root  mem    REG  253,0     61624    42280 /usr/lib64/libnss_files-2.17.so
bash    19763 root  mem    REG  253,0   2151672    42262 /usr/lib64/libc-2.17.so
bash    19763 root  mem    REG  253,0     19288    42268 /usr/lib64/libdl-2.17.so
bash    19763 root  mem    REG  253,0    174576    73357 /usr/lib64/libtinfo.so.5.9
bash    19763 root  mem    REG  253,0    163400    42255 /usr/lib64/ld-2.17.so
bash    19763 root  mem    REG  253,0     26254 33726611 /usr/lib64/gconv/gconv-modules.cache
bash    19763 root    0u   CHR  136,0       0t0        3 /dev/pts/0
bash    19763 root    1u   CHR  136,0       0t0        3 /dev/pts/0
bash    19763 root    2u   CHR  136,0       0t0        3 /dev/pts/0
bash    19763 root  255u   CHR  136,0       0t0        3 /dev/pts/0

上述命令显示的REG就对应之前所说的文件类型为-的普通文件,CHR对应文件类型为c的字符设备
FD -> 文件描述符
TYPE -> 文件类型
DEVICE -> 哪一个设备号的哪一块
SIZE/OFF -> 偏移量

创建文件描述符8 ,输入来自于文件ooxx.txt

[root@optimize /]# exec 8< ooxx.txt
[root@optimize /]# lsof -op $$
COMMAND   PID USER   FD   TYPE DEVICE OFFSET     NODE NAME
bash    19763 root  cwd    DIR  253,0              64 /
bash    19763 root  rtd    DIR  253,0              64 /
bash    19763 root  txt    REG  253,0        50333656 /usr/bin/bash
bash    19763 root  mem    REG  253,0        50566106 /usr/lib/locale/locale-archive
bash    19763 root  mem    REG  253,0           42280 /usr/lib64/libnss_files-2.17.so
bash    19763 root  mem    REG  253,0           42262 /usr/lib64/libc-2.17.so
bash    19763 root  mem    REG  253,0           42268 /usr/lib64/libdl-2.17.so
bash    19763 root  mem    REG  253,0           73357 /usr/lib64/libtinfo.so.5.9
bash    19763 root  mem    REG  253,0           42255 /usr/lib64/ld-2.17.so
bash    19763 root  mem    REG  253,0        33726611 /usr/lib64/gconv/gconv-modules.cache
bash    19763 root    0u   CHR  136,0    0t0        3 /dev/pts/0
bash    19763 root    1u   CHR  136,0    0t0        3 /dev/pts/0
bash    19763 root    2u   CHR  136,0    0t0        3 /dev/pts/0
bash    19763 root    8r   REG  253,0    0t0   889779 /ooxx.txt
bash    19763 root  255u   CHR  136,0    0t0        3 /dev/pts/0

注意:文件描述符8后面跟的是r,代表只读,而u代表读写都可以,并且这个文件刚打开,偏移量为0

从标准输入中读取信息到变量a,标准输入的信息来自于文件描述符8
查看到文件描述8的偏移量到了4,刚才读了字符aaa,加上一个换行符,正好偏移量到了4,并且变量a的内容也是文件ooxx.txt的第一行内容,read命令遇到换行符就停止

[root@optimize /]# read a 0<& 8
[root@optimize /]# lsof -op $$
COMMAND   PID USER   FD   TYPE DEVICE OFFSET     NODE NAME
bash    19763 root  cwd    DIR  253,0              64 /
bash    19763 root  rtd    DIR  253,0              64 /
bash    19763 root  txt    REG  253,0        50333656 /usr/bin/bash
bash    19763 root  mem    REG  253,0        50566106 /usr/lib/locale/locale-archive
bash    19763 root  mem    REG  253,0           42280 /usr/lib64/libnss_files-2.17.so
bash    19763 root  mem    REG  253,0           42262 /usr/lib64/libc-2.17.so
bash    19763 root  mem    REG  253,0           42268 /usr/lib64/libdl-2.17.so
bash    19763 root  mem    REG  253,0           73357 /usr/lib64/libtinfo.so.5.9
bash    19763 root  mem    REG  253,0           42255 /usr/lib64/ld-2.17.so
bash    19763 root  mem    REG  253,0        33726611 /usr/lib64/gconv/gconv-modules.cache
bash    19763 root    0u   CHR  136,0    0t0        3 /dev/pts/0
bash    19763 root    1u   CHR  136,0    0t0        3 /dev/pts/0
bash    19763 root    2u   CHR  136,0    0t0        3 /dev/pts/0
bash    19763 root    8r   REG  253,0    0t4   889779 /ooxx.txt
bash    19763 root  255u   CHR  136,0    0t0        3 /dev/pts/0
[root@optimize /]# echo $a
aaa

我们再打开一个窗口,查看新窗口的进程id号,同样也创建一个文件描述符6,让它的输入也来自文件ooxx.txt,查看进程打开的文件,观察文件描述符6的偏移量,发现是0;

[root@optimize ~]# exec 6< /ooxx.txt
[root@optimize ~]# lsof -op $$
COMMAND   PID USER   FD   TYPE DEVICE OFFSET     NODE NAME
bash    19989 root  cwd    DIR  253,0        33574977 /root
bash    19989 root  rtd    DIR  253,0              64 /
bash    19989 root  txt    REG  253,0        50333656 /usr/bin/bash
bash    19989 root  mem    REG  253,0        50566106 /usr/lib/locale/locale-archive
bash    19989 root  mem    REG  253,0           42280 /usr/lib64/libnss_files-2.17.so
bash    19989 root  mem    REG  253,0           42262 /usr/lib64/libc-2.17.so
bash    19989 root  mem    REG  253,0           42268 /usr/lib64/libdl-2.17.so
bash    19989 root  mem    REG  253,0           73357 /usr/lib64/libtinfo.so.5.9
bash    19989 root  mem    REG  253,0           42255 /usr/lib64/ld-2.17.so
bash    19989 root  mem    REG  253,0        33726611 /usr/lib64/gconv/gconv-modules.cache
bash    19989 root    0u   CHR  136,1    0t0        4 /dev/pts/1
bash    19989 root    1u   CHR  136,1    0t0        4 /dev/pts/1
bash    19989 root    2u   CHR  136,1    0t0        4 /dev/pts/1
bash    19989 root    6r   REG  253,0    0t0   889779 /ooxx.txt
bash    19989 root  255u   CHR  136,1    0t0        4 /dev/pts/1

以上两个操作证明了:两个程序可以打开一个文件,但是每个程序维护了自己的那个指针,但是文件是同一个文件

创建一个文件描述符9,来自文件描述9的信息都输出到文件xxoo.txt

[root@optimize /]# exec 9> bula.txt
[root@optimize /]# ll /proc/$$/fd
total 0
lrwx------ 1 root root 64 Jun 28 07:14 0 -> /dev/pts/0
lrwx------ 1 root root 64 Jun 28 07:14 1 -> /dev/pts/0
lrwx------ 1 root root 64 Jun 28 07:14 2 -> /dev/pts/0
lrwx------ 1 root root 64 Jun 28 08:30 255 -> /dev/pts/0
lr-x------ 1 root root 64 Jun 28 08:57 8 -> /ooxx.txt
l-wx------ 1 root root 64 Jun 28 09:34 9 -> /bula.txt
[root@optimize /]# lsof -op $$
COMMAND   PID USER   FD   TYPE DEVICE OFFSET     NODE NAME
bash    19763 root  cwd    DIR  253,0              64 /
bash    19763 root  rtd    DIR  253,0              64 /
bash    19763 root  txt    REG  253,0        50333656 /usr/bin/bash
bash    19763 root  mem    REG  253,0        50566106 /usr/lib/locale/locale-archive
bash    19763 root  mem    REG  253,0           42280 /usr/lib64/libnss_files-2.17.so
bash    19763 root  mem    REG  253,0           42262 /usr/lib64/libc-2.17.so
bash    19763 root  mem    REG  253,0           42268 /usr/lib64/libdl-2.17.so
bash    19763 root  mem    REG  253,0           73357 /usr/lib64/libtinfo.so.5.9
bash    19763 root  mem    REG  253,0           42255 /usr/lib64/ld-2.17.so
bash    19763 root  mem    REG  253,0        33726611 /usr/lib64/gconv/gconv-modules.cache
bash    19763 root    0u   CHR  136,0    0t0        3 /dev/pts/0
bash    19763 root    1u   CHR  136,0    0t0        3 /dev/pts/0
bash    19763 root    2u   CHR  136,0    0t0        3 /dev/pts/0
bash    19763 root    8r   REG  253,0    0t4   889779 /ooxx.txt
bash    19763 root    9w   REG  253,0    0t0   889763 /bula.txt
bash    19763 root  255u   CHR  136,0    0t0        3 /dev/pts/0

查看当前脏页为0

[root@optimize /]# cat /proc/vmstat | grep dirty
nr_dirty 0
nr_dirty_threshold 129585
nr_dirty_background_threshold 43195

写入信息到文件描述符9后再次查看脏页为1,并且查看脏页的刷新策略

[root@optimize /]# echo "aagfagasgagafadsgagagvagadagasdgagadgadgagagaga" >& 9
[root@optimize /]# cat /proc/vmstat | grep dirty
nr_dirty 1
nr_dirty_threshold 129601
nr_dirty_background_threshold 43200
[root@optimize bin]# sysctl -a | grep dirty
sysctl: reading key "net.ipv6.conf.all.stable_secret"
sysctl: reading key "net.ipv6.conf.default.stable_secret"
sysctl: reading key "net.ipv6.conf.ens33.stable_secret"
sysctl: reading key "net.ipv6.conf.lo.stable_secret"
vm.dirty_background_bytes = 0
vm.dirty_background_ratio = 10
vm.dirty_bytes = 0
vm.dirty_expire_centisecs = 3000
vm.dirty_ratio = 30
vm.dirty_writeback_centisecs = 500

打开一个新的窗口进行演示
socket和pipeline文件类型的演示,文件描述符8代表的就是一个socket

[root@optimize ~]# exec  8<>  /dev/tcp/www.baidu.com/80
[root@optimize ~]# lsof -op $$
COMMAND   PID USER   FD   TYPE DEVICE OFFSET     NODE NAME
bash    20587 root  cwd    DIR  253,0        33574977 /root
bash    20587 root  rtd    DIR  253,0              64 /
bash    20587 root  txt    REG  253,0        50333656 /usr/bin/bash
bash    20587 root  mem    REG  253,0           42290 /usr/lib64/libresolv-2.17.so
bash    20587 root  mem    REG  253,0           42278 /usr/lib64/libnss_dns-2.17.so
bash    20587 root  mem    REG  253,0        50566106 /usr/lib/locale/locale-archive
bash    20587 root  mem    REG  253,0           42280 /usr/lib64/libnss_files-2.17.so
bash    20587 root  mem    REG  253,0           42262 /usr/lib64/libc-2.17.so
bash    20587 root  mem    REG  253,0           42268 /usr/lib64/libdl-2.17.so
bash    20587 root  mem    REG  253,0           73357 /usr/lib64/libtinfo.so.5.9
bash    20587 root  mem    REG  253,0           42255 /usr/lib64/ld-2.17.so
bash    20587 root  mem    REG  253,0        33726611 /usr/lib64/gconv/gconv-modules.cache
bash    20587 root    0u   CHR  136,1    0t0        4 /dev/pts/1
bash    20587 root    1u   CHR  136,1    0t0        4 /dev/pts/1
bash    20587 root    2u   CHR  136,1    0t0        4 /dev/pts/1
bash    20587 root    8u  IPv4  57270    0t0      TCP optimize:35482->103.235.46.39:http (ESTABLISHED)
bash    20587 root  255u   CHR  136,1    0t0        4 /dev/pts/1

pipeline可用管道进行演示

[root@optimize ~]# { echo $BASHPID ;  read x;  }  |  { cat ; echo $BASHPID ;  read y; }
55235

使用两个管道,第二个管道接收第一个管道的输出
由输出可见第一个管道是起了一个子进程,且进程号为55235,我们根据55235找到它的父进程从而找到右边管道的子进程id

[root@optimize ~]# ps -ef|grep 55235
root      55235  55210  0 07:02 pts/0    00:00:00 -bash
root      55313  55251  0 07:03 pts/1    00:00:00 grep --color=auto 55235
[root@optimize ~]# ps -ef|grep 55210
root      55210  55208  0 07:02 pts/0    00:00:00 -bash
root      55235  55210  0 07:02 pts/0    00:00:00 -bash
root      55236  55210  0 07:02 pts/0    00:00:00 -bash
root      55325  55251  0 07:04 pts/1    00:00:00 grep --color=auto 55210

根据55235找到父进程55210,然后根据55210找到两个子进程55235和55236,很明显55235就是左边管道的进程id,55236就是右边管道的子进程id

通过lsof -op pid 查看进程打开的文件描述符

[root@optimize ~]# lsof -op 55235
COMMAND   PID USER   FD   TYPE DEVICE OFFSET     NODE NAME
bash    55235 root  cwd    DIR  253,0        33574977 /root
bash    55235 root  rtd    DIR  253,0              64 /
bash    55235 root  txt    REG  253,0        50333656 /usr/bin/bash
bash    55235 root  mem    REG  253,0        50566106 /usr/lib/locale/locale-archive
bash    55235 root  mem    REG  253,0           42280 /usr/lib64/libnss_files-2.17.so
bash    55235 root  mem    REG  253,0           42262 /usr/lib64/libc-2.17.so
bash    55235 root  mem    REG  253,0           42268 /usr/lib64/libdl-2.17.so
bash    55235 root  mem    REG  253,0           73357 /usr/lib64/libtinfo.so.5.9
bash    55235 root  mem    REG  253,0           42255 /usr/lib64/ld-2.17.so
bash    55235 root  mem    REG  253,0        33726611 /usr/lib64/gconv/gconv-modules.cache
bash    55235 root    0u   CHR  136,0    0t0        3 /dev/pts/0
bash    55235 root    1w  FIFO    0,9    0t0    87907 pipe
bash    55235 root    2u   CHR  136,0    0t0        3 /dev/pts/0
bash    55235 root  255u   CHR  136,0    0t0        3 /dev/pts/0
[root@optimize ~]# lsof -op 55236
COMMAND   PID USER   FD   TYPE DEVICE OFFSET     NODE NAME
bash    55236 root  cwd    DIR  253,0        33574977 /root
bash    55236 root  rtd    DIR  253,0              64 /
bash    55236 root  txt    REG  253,0        50333656 /usr/bin/bash
bash    55236 root  mem    REG  253,0        50566106 /usr/lib/locale/locale-archive
bash    55236 root  mem    REG  253,0           42280 /usr/lib64/libnss_files-2.17.so
bash    55236 root  mem    REG  253,0           42262 /usr/lib64/libc-2.17.so
bash    55236 root  mem    REG  253,0           42268 /usr/lib64/libdl-2.17.so
bash    55236 root  mem    REG  253,0           73357 /usr/lib64/libtinfo.so.5.9
bash    55236 root  mem    REG  253,0           42255 /usr/lib64/ld-2.17.so
bash    55236 root  mem    REG  253,0        33726611 /usr/lib64/gconv/gconv-modules.cache
bash    55236 root    0r  FIFO    0,9    0t0    87907 pipe
bash    55236 root    1u   CHR  136,0    0t0        3 /dev/pts/0
bash    55236 root    2u   CHR  136,0    0t0        3 /dev/pts/0
bash    55236 root  255u   CHR  136,0    0t0        3 /dev/pts/0

可以看到55236的87907 pipe标准输入在等待55235的87907 pipe的标准输出

Linux-文件类型相关推荐

  1. Linux文件类型有哪些?

    Linux文件类型: -:普通文件 d:目录文件(directory) l:链接文件(link) b:块设备文件 (binary) c:字符设备文件 (character) p:管道文件 (pipe) ...

  2. linux ls 中文乱码_每天一个linux命令:Linux文件类型与扩展名

    Linux文件类型和Linux文件的文件名所代表的意义是两个不同的概念.我们通过一般应用程序而创建的比如file.txt.file.tar.gz ,这些文件虽然要用不同的程序来打开,但放在Linux文 ...

  3. 每天一个linux命令(目录文件操作):【转载】Linux文件类型与扩展名

    Linux文件类型和Linux文件的文件名所代表的意义是两个不同的概念.我们通过一般应用程序而创建的比如file.txt.file.tar.gz ,这些文件虽然要用不同的程序来打开,但放在Linux文 ...

  4. Linux文件类型及颜色标识整理

    Linux文件类型及颜色标识整理 使用工具: ls命令 ls –l:以常格式显示文件及目录的详细信息 例如:-rw-r--r--  1 root root       0 10月 12 13:32 2 ...

  5. linux文件类型及用户相关命令

    Linux文件类型: 普通文件:-,file(内容格式) 目录文件:d 块设备:  b 字符设备:c 符号链接文件:l 套接字文件:s 命名管道文件:p 文件:属主.属组 属主:拥有者 属组:所属的组 ...

  6. Linux文件类型和权限

    一.Linux文件类型分类 Linux文件一般是用一些相关的应用程序创建,比如图像工具.文档工具.归档工具... .... 或 cp工具等.linux文件的删除方式是用rm 命令. Linux文件类型 ...

  7. Linux基本命令及Linux文件类型

    Linux文件类型 1.普通文件它最常使用的一类文件,其特点是不包含有文件系统的结构信息.通常用户所接触到的文件,如图形文件.数据文件.文档文件.声音文件等都属于这种文件.这种类型的文件按其内部结构又 ...

  8. Linux文件类型和根目录结构

    一.Linux的文件类型 Linux系统常见的文件有以下几种: Linux的目录一般为蓝色 如上图,l 开头的是链接文件,颜色为浅蓝色. Linux文件类型的判断通过文件的首字母判断,例如: c开头的 ...

  9. Linux文件类型发布啦!

    在windows下面是通过文件的扩展名来区分文件类型的,但是在linux中却不是这儿样的.在linux中就没有所谓的文件扩展名,一个linux文件能不能被执行时取决于它的属性中是否有x,与文件名一点关 ...

  10. Linux文件类型与扩展名

    Linux文件类型和Linux文件的文件名所代表的意义是两个不同的概念.我们通过一般应用程序而创建的比如file.txt.file.tar.gz ,这些文件虽然要用不同的程序来打开,但放在Linux文 ...

最新文章

  1. KDE与GNOME的起源与发展
  2. iOS 13 Xcode11 中的 Scene Delegate
  3. C语言复习:指针知识
  4. 如何提高代码质量:代码复查
  5. 数学建论文模标准模板
  6. 英语作文谈谈你对计算机的看法,英语作文:谈谈你对网络语言的看法
  7. 万字长文,SpringSecurity
  8. 文件用户Apache shiro学习笔记+ spring整合shiro (一)
  9. 系统服务器地云盘上,系统服务器地云盘上
  10. 第四行记录到第12韩记录
  11. Linux学习(一)虚拟机安装linux资源,linux目录结构,购买阿里云服务器远程登陆linux,下载安装并使用Xshell与Xftp
  12. 感谢csdn 2021年中秋月饼礼盒
  13. 计算机毕业设计(附源码)python智慧医疗系统
  14. Scrum立会报告+燃尽图(Final阶段第七次)
  15. c8815 android os,华为c8815刷机包 乐蛙OS5 完美版 0823期
  16. 李林计算机学院广西大学,李茹-广西大学·生命科学与技术学院
  17. 前端基本功---JS数据类型知多少
  18. C语言江苏大学校园导航系统
  19. 光纤收发器常见指示灯的意义
  20. 嵌入式工程师应该有的工作态度

热门文章

  1. 【20220629】【信号处理】(平稳随机信号)自相关函数性质的证明过程
  2. 关于Windows命令提示符中的 xxx > nul 2 > nul
  3. VOD (Video On Demand),视频点播技术
  4. 数学之美读书笔记第一章
  5. 计算机专业考研集成电路,准备考研,“控制科学与工程”与“集成电路”,该怎么选?...
  6. java.security.egd 作用
  7. iconv命令的使用方法
  8. 布斯(Steve Jobs)在斯坦福大学的演讲稿,中英文对照版
  9. Camshift知识点
  10. 基于嵌入式ARM工控主板与X86工控主板的比较 1