Linux的文件类型

Linux中一切皆文件,而文件的种类很多,有普通文件、目录文件、设备文件等等。下面将仔细看看有哪些文件类型。通过"ls -l"命令可以查看文件的属性信息,在该命令查看的结果中,排在最左边的第一个字符即为改文件的类型,比如常见的普通文件(“-”)以及目录文件(“d”)等。

0. 7种文件类型

-        普通文件
d        目录文件
l        链接文件
p        管道文件
c        字符设备文件
b        块设备文件
s        套接字文件

1. 普通文件

普通文件(regular file),简言之就是一般的文件,没有什么特殊之处,使用"ls -al"查看文件的属性时,最左边(第一个字符)表现为“-”,例如:-rwxr-xr-x,另外根据文件内容的不同,普通文件又可细分为以下几种类型;

1.1 纯文本文件

纯文本文件,顾名思义这种文件存储的内容全部是可读的数据,像数字,字母,下划线等文字相关的内容。而Linux哲学思想之一,就是配置信息存放在文本文件中,几乎所有Linux的配置配置文件都属于这一文件类型。例如:/etc/fstab,/etc/issue等,可使用cat命令查看文本文件的内容.

[root@centos7 ~]# ls -l /etc/issue
-rw-r--r--. 1 root root 23 Sep  5  2019 /etc/issue
[root@centos7 ~]# cat /etc/issue
\S
Kernel \r on an \m
1.2 二进制可执行文件

二进制可执行文件是有特殊格式的可执行程序,其文件内容表现为不可直接读懂的字符,如果用cat工具直接看,会出现乱码的现象。在Linux中有很多二进制可执行文件,比如很多的外部命令都是二进制可执行文件,就连查看文本文件内容的命令“cat”本身就是一个二进制执行文件.

[root@centos7 ~]# ls -l /bin/cat
-rwxr-xr-x. 1 root root 54080 Aug 20  2019 /bin/cat
[root@centos7 ~]# cat /bin/cat |head -n1                                                                                  ELF>D&@@K@8   @@@@@88@8@@@쮬­ H¼H¼`H¼`ֆ` 辨½`輠΁TT@T@DDP䳤´´@´@
                                                                  
                                                                 Q䳤R䳤H¼H¼`H¼`¸¸/lib64/ld-linux-x86-64.so.2GNU GNU¹|Ƶْ>!90O婞¡¯ª8Mþ鿒ii@eXӒq0 G\¾ƁTO'{,Ղ b¦ῒºʒp
1.3 数据格式文件

数据格式文件是一些程序在运行过程中需要读取的存放在某些特定格式的数据文件,比如:图片文件,压缩文件,日志文件。通常,此类文件需要使用特定的工具才能打开。例如:用户登录时,系统会将登录的信息记录在/var/log/wtmp文件中,这就是一个数据文件。数据格式文件不能使用文本查看工具来读取内容,否则可能会出现乱码。可通过last命令打开此文件查看内容.

[root@centos7 ~]# ls -l /var/log/wtmp 
-rw-rw-r--. 1 root utmp 29952 Apr  2 22:18 /var/log/wtmp
[root@centos7 ~]# cat /var/log/wtmp |head -n1
~~~reboot3.10.0-1062.el7.x86_64=ٝԮ5~~~runlevel3.10.0-1062.el7.x86_64=ٝc £$:0fu:06=ٝ|º)pts/0/0fu:0ƽٝڦ*tty2tty2*ؽٝG*tty2tty2LOGIb*tٝty6tty6fub*b*徚]W»tty6tty6b*徚]W»
               *tty5tty5*þ冟*tty5tty5LOGIN*þ磪tty4tty4¥*F¥*tty4tty4LOGIN¥*F¥*tty4tty4root¥*>ٝ¸@*tty5tty5fu*>ٝ*tty5tty5* >ٝ჆+tty5tty5+ >ٝ5ˆ+tty5tty5LOGIN+ >ٝ5+tty5tty5+b>ٝ;ڂЫtty5tty5Ыb>ٝ£¬Ыtty5tty5LOGINЫb>ٝ£¬٫tty3tty3٫f>ٝ@٫tty3tty3LOGIN٫f>ٝ@٫tty3tty3fu٫j٫ٝtty3tty3٫=ٝ,tty3tty3=,>ٝ=,tty3tty3LOGIN=,>ٝЫtty5tty5rootЫ?ٝpts/0/0fun*ٝtty2tty2*nbٝ*tty6tty6b*n¥ٝ*tty4tty4¥*nCٝЫtty5tty5ЫnCٝ=,tty3tty3=,nCٝ¥~~~shutdown3.10.0-1062.el7.x86_64sCٝ+~~~reboot3.10.0-1062.el7.x86_64焚]?~~~runlevel3.10.0-1062.el7.x86_64:0fu:0DٝR
                                                                                                                          ~~~shutdown3.10.0-1062.el7.x86_64KDٝ¯~~~reboot3.10.0-1062.el7.x86_64
                                                                   5~~~runlevel3.10.0-1062.el7.x86_64#    ~~~shutdown3.10.0-1062.el7.x86_649~~~reboot3.10.0-1062.el7.x86_64¦5~~~runlevel3.10.0-1062.el7.x86_64µ
[root@centos7 ~]# XshellXshellXshellXshellXshellXshellXshellXshellXshellXshellXshell
bash: XshellXshellXshellXshellXshellXshellXshellXshellXshellXshellXshell: command not found...
[root@centos7 ~]# last
root     pts/2        192.168.43.1     Thu Apr  2 22:18   still logged in   
root     pts/2        192.168.43.1     Thu Apr  2 22:17 - 22:18  (00:00)    
root     pts/3        192.168.43.1     Thu Apr  2 22:16 - 22:17  (00:00)    
root     pts/2        192.168.43.1     Thu Apr  2 22:07 - 22:17  (00:09)    
root     pts/1        192.168.43.1     Wed Apr  1 22:51   still logged in   
root     pts/0        :0               Wed Apr  1 22:51   still logged in   
root     :0           :0               Wed Apr  1 22:51   still logged in   
root     pts/2        192.168.43.1     Wed Apr  1 12:03 - 23:37  (11:33) 

2. 目录文件

目录文件即文件夹,通过"ls -l"查看文件属性时,第一个属性表现为"d"

[root@centos7 ~]# ls -l
total 8
-rw-------. 1 root root 1932 Nov 24 16:15 anaconda-ks.cfg
drwxr-xr-x. 2 root root    6 Mar 14 23:49 Desktop
drwxr-xr-x. 2 root root    6 Mar 14 23:49 Documents
drwxr-xr-x. 2 root root    6 Mar 14 23:49 Downloads
-rw-r--r--. 1 root root 1980 Nov 24 16:19 initial-setup-ks.cfg
drwxr-xr-x. 2 root root    6 Mar 14 23:49 Music
drwxr-xr-x. 2 root root    6 Mar 14 23:49 Pictures
drwxr-xr-x. 2 root root    6 Mar 14 23:49 Public
drwxr-xr-x. 2 root root    6 Mar 14 23:49 Templates
drwxr-xr-x. 2 root root    6 Mar 14 23:49 Videos
[root@centos7 ~]# ls -l|grep "^d"
drwxr-xr-x. 2 root root    6 Mar 14 23:49 Desktop
drwxr-xr-x. 2 root root    6 Mar 14 23:49 Documents
drwxr-xr-x. 2 root root    6 Mar 14 23:49 Downloads
drwxr-xr-x. 2 root root    6 Mar 14 23:49 Music
drwxr-xr-x. 2 root root    6 Mar 14 23:49 Pictures
drwxr-xr-x. 2 root root    6 Mar 14 23:49 Public
drwxr-xr-x. 2 root root    6 Mar 14 23:49 Templates
drwxr-xr-x. 2 root root    6 Mar 14 23:49 Videos

3. 链接文件

链接文件,即将两个文件建立关联关系,这种操作实际上是给系统中已有的某个文件指定另外一个可用于访问它的不同文件名称。对于整个新的文件名,我们可以为之指定不同的访问路径,从未实现更为灵活的访问控制。链接文件又分为两种,软链接(Symbolic Link)和硬链接(Hard Link)。其中软链接又称为“符号链接”。简单理解,Linux中软链接文件就类似Wins系统中的“快捷方式”,是进入或读取另外一个文件的新的入口,使用"ls -l"命令查看时第一个属性表现为"l".

[root@centos7 ~]# ls -l /sbin/init
lrwxrwxrwx. 1 root root 22 Nov 24 16:06 /sbin/init -> ../lib/systemd/systemd

4. 管道文件

管道pipe文件是一种特殊的文件类型,其本质是一个伪文件(实为内核缓冲区)。其主要目的是为了实现进程间通讯(InterProcess Communication,IPC)的问题。由于管道文件是一个与进程没有“血缘关系”的、真正独立的文件,所以它可以在任意进程之间实现通信。由于管道通道不支持诸如lseek()等文件定位操作,严格遵守先进先出的原则进行传输数据,即对管道的读总是开始处返回数据,对它的写总是把数据添加到末尾,所以也叫做FIFO(first in first out)文件。在"ls -l"显示可以看到,行首第一个字符属性为"p".

管道文件有以下局限性
1)自己写的数据不能自己读
2)数据一旦被读后,便不在管道中存在,不可反复读取
3)管道采用半双工通信方式,即同一时间数据只能在一个方向上流动

[root@centos7 ~]# ls -l /run |grep "^p"
prw-------.  1 root           root              0 Apr  1 00:07 dmeventd-client
prw-------.  1 root           root              0 Apr  1 00:07 dmeventd-server

5. 字符设备文件

字符(charcater)设备文件,通常是一些串行接口设备在用户空间的体现,像键盘鼠标等。字符设备是按字符为单位进行输入输出,且按一定的顺序进行,这里打开的文件第一个属性表现为“c”即为字符设备文件。比如向我们登录到Linux主机,系统会提供一个终端文件tty供我们登录,就是字符文件.

[root@centos7 ~]# ls -l /dev/null /dev/zero /dev/tty* 
crw-rw-rw-. 1 root root    1,  3 Apr  1 00:07 /dev/null
crw-rw-rw-. 1 root tty     5,  0 Apr  1 00:07 /dev/tty
crw--w----. 1 root tty     4,  0 Apr  1 00:07 /dev/tty0
crw--w----. 1 root tty     4,  1 Apr  1 00:07 /dev/tty1
crw--w----. 1 root tty     4,  2 Apr  1 00:07 /dev/tty2
crw-rw-rw-. 1 root root    1,  5 Apr  1 00:07 /dev/zero

6. 块设备文件

块设备文件(block),就是一些以“块”为单位,如:4096个字节,访问数据,提供随机访问的接口设备,例如键盘,鼠标,U盘等。可以随机的在硬盘的不同块读写,通常块设备可利用缓存提供速度,这些块设备通常有多个,使用"ls -l"查看时表现为"b".

[root@centos7 ~]# ls -l /dev/sd*
brw-rw----. 1 root disk 8, 0 Apr  1 00:07 /dev/sda
brw-rw----. 1 root disk 8, 1 Apr  1 00:07 /dev/sda1
brw-rw----. 1 root disk 8, 2 Apr  1 00:07 /dev/sda2
brw-rw----. 1 root disk 8, 3 Apr  1 00:07 /dev/sda3
brw-rw----. 1 root disk 8, 4 Apr  1 00:07 /dev/sda4
brw-rw----. 1 root disk 8, 5 Apr  1 00:07 /dev/sda5

7. 套接字文件

套接字文件(socket),被称为数据接口文件,这种类型文件通常别用于基于网络的数据通讯使用。当两个进程在同一个主机上,但是想通过网络方式通信,可基于socket方式进行数据通信,可基于全双工方式实现,即可支持同时双向传输数据。可用"ls -l"命令,可看到第一个属性表现为"s".

[root@centos7 ~]# ls -l /run/*.sock
srw-rw-rw-. 1 root root 0 Apr  1 00:07 /run/gssproxy.sock
srw-rw-rw-. 1 root root 0 Apr  1 00:07 /run/rpcbind.sock

你可能感兴趣的:(Linux的文件类型)