linux中的一切都已文件的形式存在,一切皆文件!
linux的文件目录以树状结构的形式组织,所有目录均以根目录/为起点,目录结构遵循FHS标准. 根据FHS的要求,每个目录都有特定的含义和用途,了解Linux文件系统的目录结构和每个目录的详细功能,是学好Linux至关重要的一步。

一.linux文件与文件类型

回到顶部

每个linux用户在登录系统后,首先进入的就是自己的家目录,也叫用户主目录,在linux命令中,也用'~'表示主目录. ls命令可以列出一个目录下的所有文件,加上-al可以以列表的形式列出包括隐藏文件在内的所有文件的详细信息. 我们在主目录下运行ls -al命令:

              [root@initroot ~]# ls -al
              total 92
              dr-xr-x---. 10 root root  4096 Dec 17 19:52 .
              dr-xr-xr-x. 18 root root  4096 Aug  6 17:44 ..
              -rw-------   1 root root 14663 Jan  2 14:49 .bash_history
              ...省略...
              drwxr-xr-x   3 root root  4096 Dec 17 19:52 testdir
              drwxr-xr-x   3 root root  4096 Dec 17 19:52 kblogdepository
              ...省略...
            
从输出中可以看出,每一行有九个字段,表示一个文件的属性信息,各字段含义如下所示:
文件类型和权限 文件链接数 文件所有者 文件所属用户组 文件大小 文件最后一次修改时间 文件名
上述列表中第一个文件和第二个文件的文件名分别为.和.., 其中.表示当前目录, ..表示上一级目录. 有些文件名的前面有一个点.,文件名以.开头的文件表示该文件是隐藏文件.所以.和..这两个文件也属于隐藏文件.
各个字段的详细信息,我们会在 linux文件权限和属性中详细介绍.
文件类型和权限字段包含十个字符,其中第一个字符为文件类型属性,表示文件类型,剩下的九个字符为文件权限属性,表示文件的权限. 这里只需要关注文件类型属性,从以上输出中我们可以看出,文件类型属性有的是-,有的是d. 其中-表示该文件是普通文件,d表示该文件是一个目录.在linux系统中,目录也是文件. 任何设备在Linux中也是文件,不仅如此,有些数据通信的接口也是文件. 所以,Linux下的文件种类非常多,包括前面遇到的普通文件(-)与目录文件(d)在内,linux系统中的文件主要有以下几种类型:

linux文件类型
linux文件类型
文件类型 类型说明
1.普通文件(regular file) 普通文件是我们最经常遇到的文件类型,在ls -al的输出中,文件类型属性为-。 根据文件的内容,普通文件大致可以分为:
纯文本文件(ASCII):这是Linux系统中最多的一种文件类型了,纯文本文件可以直接被用户编辑和查看, 在linux命令行下,我们可以用vim编辑纯文本文件,也可以用cat查看纯文本文件的内容. 更多关于vim和cat的信息参考:
用vim编辑文本文件
cat和tac命令
linux文件与目录操作管理
二进制文件(binary):如果说文本文件是为了人类阅读方便,那么二进制文件就是方便计算机阅读执行了. 计算机cpu执行的计算机指令就是以二进制可执行文件的形式存放的.这些文件都是通过gcc编译工具编译c/c++程序文件生成的. 例如大部分的linux命令对应的可执行文件都是二进制文件.一般可以用hexdump,objdump等命令查看二进制文件.
更多关于编程的知识可以参考:
c/c++程序的基本概念
c/c++程序设计
linux高级编程
关于命令的更多信息可以参考:
什么是linux命令
特殊格式数据文件(data): 有些程序在运行的过程中会读取某些特殊格式的文件,这些特定格式的文件称为数据文件(data file)。 这种文件只有特定的程序可以识别.举例来说,Linux会将用户登录的数据记录在/var/log/wtmp文件中,这个文件只有last命令可以识别并读取. 但是用cat命令查看只会读出一堆乱码,该文件就是一个具有特殊格式的数据文件data file.还有我们以后会碰到的mysql数据库文件,都属于这类文件.
值得一提的是,在图形用户模式下,我们经常遇到的图片文件,比如png,jpg也只有特定的程序可以打开,还有windows下的word文件,只有办公软件才可以打开. 这些都属于特殊格式数据文件.而在linux下,也有很多相对应的优秀软件可以替代windows下的办公软件,比如图片处理可以用gimp替代photoshop, libreoffice可以替代微软的office办公软件.
更多linux下好玩的软件工具可以参考: 用linux替代windows办公
2.目录文件(directory) linux下的目录也是文件,文件类型属性为d.例如上面ls -al列出的testdir就是一个目录.
3.链接文件(link) 链接文件类似Windows下的快捷方式! 文件类型属性为l(英文L的小写);
4.设备文件(device) linux设备大致分为字符设备和块设备,linux下的所有设备都用文件表示,大部分设备文件存放在/dev目录下! 可以用ls -al /dev命令查看/dev目录下的设备文件,也可以先用cd /dev命令切换到/dev目录,然后再用ls -al命令查看. 可以发现大部分设备文件的文件类型属性为c或者b,分别对应两种设备类型:
字符(character)设备文件
字符设备文件的文件类型属性为c。字符设备是指在I/O传输过程中以字符为单位进行传输的设备, 例如键盘、鼠标等!
块(block)设备文件:
块设备文件的文件类型属性为b。块设备提供系统随机存取数据接口,块设备将信息存储在固定大小的块中,每个块都有自己的地址。数据块的大小通常在512字节到32768字节之间。 块设备的基本特征是每个块都能独立于其它块而读写,可以在设备的任意位置读取一定长度的数据.常见的块设备有磁盘,U盘,SD卡等。 可以随机的在硬盘的不同区块中读写.
关于设备驱动程序开发的更多信息可以参考:
linux高级程序设计
linux内核架构设计
嵌入式linux系统开发
5.sockets文件(sockets) sockets文件类型属性为s,大多分布在/run或/tmp目录中,这种类型的文件通常被用在网络通信的数据传输中。我们可以启动一 个socket程序来监听来自客户端的请求,而客户端可以通过这个socket来进行数据的传输。 更多关于socket的信息可通过man socket查询.
更多关于socket编程的知识可以参考:
linux socket网络编程
linux高级程序设计
linux内核架构设计
7.FIFO文件(FIFO, pipe) FIFO文件的文件类型属性为p,FIFO是first-in-first-out的缩写,表示先进先出,目的在解决多个程序同时存取一个文件所造成的错误问题。
更多关于fifo的信息可通过man fifo查询.

二.通过file命令查看文件类型

回到顶部

除了通过ls -al输出查看文件类型外,我们也可以通过file命令查看文件的类型。 file命令是一个非常有用的命令,可以输出文件的类型。 让我们看看~/.bashrc文件的类型:

              [root@initroot ~]# file ~/.bashrc
              /root/.bashrc: ASCII text
            
~/.bashrc文件是各ASCII纯文本文件。 我们已经知道/usr/bin/passwd文件是个二进制可执行文件,看看file的输出吧:
              [root@initroot ~]# file /usr/bin/passwd
              /usr/bin/passwd: setuid ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/l, for GNU/Linux 3.2.0, BuildID[sha1]=7842b6fc0e39aceb47814351fc187ef18fa8e14a, stripped  
            
linux下的二进制可执行文件采用ELF格式标准,关于ELF二进制可执行文件的更多信息可以参考: c/c++程序设计
locate命令的数据库文件/var/lib/mlocate/mlocate.db:
              [root@initroot ~]# file /var/lib/mlocate/mlocate.db
              /var/lib/mlocate/mlocate.db: mlocate database, version 0, require visibility, root /        
            
很明显这是一个数据库文件。
file查看设备文件/dev/tty1的类型:
              [root@initroot ~]# file /dev/tty1
              /dev/tty1: character special (4/1)    
            
总之,如果你碰到一个文件,除了用ls -l,lsattr、stat等命令查看文件的属性信息外,还可以用file命令查看文件的类型信息。 注意file命令和type命令的区别,file命令主要是查看文件的类型,而type主要是用来一条linux命令的类型,比如是shell内置命令还是外置命令。

file命令可以打印文件的类型信息,比如是ASCII文本文件、二进制文件、数据库文件等

              [root@initroot ~]# file /etc/passwd
              /etc/passwd: ASCII text
              [root@initroot ~]# file ~/.bashrc
                /home/peter/.bashrc: ASCII text
              [root@initroot ~]# file /usr/bin/passwd
                /usr/bin/passwd: setuid ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/l, for GNU/Linux 3.2.0, BuildID[sha1]=7842b6fc0e39aceb47814351fc187ef18fa8e14a, stripped
              [root@initroot ~]# file /dev/tty0
                /dev/tty0: character special (4/0)
            

initroot编辑整理,转载请注明www.initroot.com