【Linux】一步一步学Linux——Linux文件类型详解(27)

00. 目录

文章目录

01. Linux中文件类型

Linux系统中大致分为7种文件类型。具体7中如下表所示:

前缀描述
普通文件。如文本文件、二进制可执行文件、源代码等。
b块设备文件。硬盘可以使用块设备文件。
c字符设备文件。硬盘也可以使用字符设备文件。
d目录文件。目录可以包含文件和其他目录。
l符号链接(软链接)。可以链接任何普通文件,类似于 Windows 中的快捷方式。
p具名管道。管道是进程间的一种通信机制。
s用于进程间通信的套接字。

02. 文件类型详解

2.1 普通文件

我们用 ls -l 来查看某个文件的属性,可以看到有类似-rwxrwxrwx,值得注意的是第一个符号是 – ,这样的文件在Linux中就是普通文件。这些文件一般是用一些相关的应用程序创建,比如图像工具、文档工具、归档工具… … 或 cp工具等。这类文件的删除方式是用rm 命令。

依照文件的内容,又大略可以分为:

2.1.1 纯文本档(ASCII)

Linux系统中最多的一种文件类型,称为纯文本档是因为内容为我们人类可以直接读到的数据,例如数字、字母等等。 几乎只要我们可以用来做为设定的文件都属于这一种文件类型。 举例来说,你可以用命令: cat ~/.bashrc 来看到该文件的内容。

2.1.2 二进制文件(binary):

Linux系统其实仅认识且可以执行二进制文件(binary file)。Linux当中的可执行文件(scripts, 文字型批处理文件不算)就是这种格式的文件。常用的一些命令几乎都是二进制文件。

2.1.3 数据格式文件(data):

有些程序在运作的过程当中会读取某些特定格式的文件,那些特定格式的文件可以被称为数据文件 (data file)。举例来说,我们的Linux在使用者登录时,都会将登录的数据记录在 /var/log/wtmp那个文件内,该文件是一个数据文件,他能够通过last这个指令读出来。 但是使用cat时,会读出乱码,因为该文件是一种特殊格式的文件。

[deng@localhost ~]$ ls -l /etc/bashrc 
-rw-r--r--. 1 root root 2853 4月  11 2018 /etc/bashrc
[deng@localhost ~]$ 

2.2 目录文件

当我们查看文件的详细信息的时候,看到有类似 drwxr-xr-x ,这样的文件就是目录。目录在Linux是一个比较特殊的文件。注意它的第一个字符是d。创建目录的命令可以用 mkdir 命令,cp可以把一个目录复制为另一个目录。删除用rm 或rmdir命令。

[deng@localhost ~]$ ls -ld /home
drwxr-xr-x. 5 root root 46 7月  12 17:32 /home
[deng@localhost ~]$ 

2.3 字符设备

字符设备是指在I/O传输过程中以字符为单位进行传输的设备,例如键盘,打印机等。在UNIX系统中,字符设备以特别文件方式在文件目录树中占据位置并拥有相应的结点。

字符设备可以使用与普通文件相同的文件操作命令对字符设备文件进行操作,例如打开、关闭、读、写等。

[deng@localhost ~]$ ls -l /dev/input/mouse1
crw-rw---- 1 root input 13, 33 7月  12 09:45 /dev/input/mouse1
[deng@localhost ~]$

我们看到/dev/input/mouse1的属性是crw-rw—- ,注意前面第一个字符是 c ,这表示字符设备文件。

字符设备文件可以使用mknode来创建,用rm来删除。目前在最新的Linux发行版本中,我们一般不用自己来创建设备文件。因为这些文件是和内核相关联的。

2.4 块设备

块设备将信息存储在固定大小的块中,每个块都有自己的地址。数据块的大小通常在512字节到32768字节之间。块设备的基本特征是每个块都能独立于其它块而读写。磁盘是最常见的块设备。

[deng@localhost ~]$ ls -l /dev/sda1
brw-rw---- 1 root disk 8, 1 7月  12 09:45 /dev/sda1
[deng@localhost ~]$

/dev/sda1 的属性是 brw-rw—- ,注意前面的第一个字符是b,这表示块设备,比如硬盘,光驱等设备。

2.5 套接字

套接字(socket)是一个抽象层,应用程序可以通过它发送或接收数据,可对其进行像对文件一样的打开、读写和关闭等操作。套接字允许应用程序将I/O插入到网络中,并与网络中的其他应用程序进行通信。网络套接字是IP地址与端口的组合。

[root@localhost ~]# ls -l /var/lib/mysql/mysql.sock
srwxrwxrwx 1 mysql mysql 0 7月  12 09:45 /var/lib/mysql/mysql.sock
[root@localhost ~]# 

注意这个文件的属性的第一个字符是 s。

2.6 符号链接

符号链接(软链接)是一类特殊的文件, 其包含有一条以绝对路径或者相对路径的形式指向其它文件或者目录的引用。今天POSIX操作系统标准、大多数类Unix系统Windows VistaWindows 7都支持符号链接。Windows 2000与Windows XP在某种程度上也支持符号链接。

符号链接的操作是透明的:对符号链接文件进行读写的程序会表现得直接对目标文件进行操作。某些需要特别处理符号链接的程序(如备份程序)可能会识别并直接对其进行操作。

一个符号链接文件仅包含有一个文本字符串,其被操作系统解释为一条指向另一个文件或者目录的路径。它是一个独立文件,其存在并不依赖于目标文件。如果删除一个符号链接,它指向的目标文件不受影响。如果目标文件被移动、重命名或者删除,任何指向它的符号链接仍然存在,但是它们将会指向一个不复存在的文件。这种情况被有时被称为被遗弃

[root@localhost ~]# ls -l /bin/cc
lrwxrwxrwx. 1 root root 3 11月  8 2018 /bin/cc -> gcc
[root@localhost ~]# 

当我们查看文件属性时,会看到有类似 lrwxrwxrwx,注意第一个字符是l,这类文件是链接文件。Windows操作系统中的快捷方式有点相似。

2.7 管道文件

它是一种文件类型,在文件系统中可以看到。程序中可以查看文件stat结构中st_mode成员的值来判断文件是否是FIFO文件。创建一个FIFO文件类似于创建文件,FIFO文件就像普通文件一样。

FIFO中可以很好地解决在无关进程间数据交换的要求,并且由于它们是存在于文件系统中的,这也提供了一种比匿名管道更持久稳定的通信办法。

FIFO的通信方式类似于在进程中使用文件来传输数据,只不过FIFO类型文件同时具有管道的特性。在数据读出时,FIFO管道中同时清除数据。在shell中mkfifo命令可以建立有名管道,下面通过一个实例来帮助读者理解FIFO。

[root@localhost ~]# ls -l fifo 
prw-r--r-- 1 root root 0 7月  12 19:30 fifo
[root@localhost ~]# 

查看文件属性时,第一个字符是p,就表示是管道文件。

03. 文件扩展名和文件名

3.1 扩展名类型

实际上,Linux的文件是没有所谓的扩展名的,一个Linux文件能不能被执行,与他的第一栏的十个属性有关, 与扩展名根本一点关系也没有。这个观念跟Windows的情况不相同喔!在Windows底下, 能被执行的文件扩展名通常是 .com .exe .bat等等,而在Linux底下,只要你的权限当中具有x的话,例如[ -rwx-r-xr-x ] 即代表这个文件可以被执行。

不过,可以被执行跟可以执行成功是不一样的~举例来说,在root家目录下的install.log 是一个纯文本档,如果经由修改权限成为 -rwxrwxrwx 后,这个文件能够真的执行成功吗? 当然不行~因为他的内容根本就没有可以执行的数据。所以说,这个x代表这个文件具有可执行的能力, 但是能不能执行成功,当然就得要看该文件的内容.

不过我们仍然希望可以使用扩展名来了解该文件是什么东西,所以,通常我们还是会以适当的扩展名来表示该文件是什么种类的。Linux平台有以下常用的扩展名:

*.sh : 脚本或批处理文件 (scripts),因为批处理文件为使用shell写成的,所以扩展名就编成 .sh

*Z, *.tar, *.tar.gz, *.zip, *.tgz: 经过打包的压缩文件。这是因为压缩软件分别为 gunzip, tar 等等的,由于不同的压缩软件,而取其相关的扩展名!

*.html, *.php:网页相关文件,分别代表 HTML 语法与 PHP 语法的网页文件。 .html 的文件可使用网页浏览器来直接开启,至于 .php 的文件, 则可以透过 client 端的浏览器来 server 端浏览,以得到运算后的网页结果。

基本上,Linux系统上的文件名真的只是让你了解该文件可能的用途而已,真正的执行与否仍然需要权限的规范才行。例如虽然有一个文件为可执行文件,如常见的/bin/ls这个显示文件属性的指令,不过,如果这个文件的权限被修改成无法执行时,那么ls就变成不能执行。

3.2 文件名长度限制

在Linux底下,使用预设的Ext2/Ext3文件系统时,针对文件名长度限制为:

单一文件或目录的最大容许文件名为 255 个字符

包含完整路径名称及目录 (/) 之完整档名为 4096 个字符

3.3 文件名字符限制

由于Linux在文字接口下的一些指令操作关系,一般来说,你在设定Linux底下的文件名时, 最好可以避免一些特殊字符比较好!例如底下这些:

* ? > < ; & ! [ ] | \ ’ ” ` ( ) { }

因为这些符号在文字接口下,是有特殊意义的。另外,文件名的开头为小数点“.”时, 代表这个文件为隐藏文件!同时,由于指令下达当中,常常会使用到 -option 之类的选项, 所以你最好也避免将文件档名的开头以 – 或 + 来命名。

温馨提示

一般建议使用字母和数字来取文件名。

04. 附录

参考:【Linux】一步一步学Linux系列教程汇总

参考:百度百科

    原文作者:沧海一笑-dj
    原文地址: https://blog.csdn.net/dengjin20104042056/article/details/95652065
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞