Linux一切皆文件
Linux一切皆文件教程
Linux 中所有内容都是以文件的形式保存和管理的,即一切皆文件,普通文件是文件,目录是文件,硬件设备(键盘、监视器、硬盘、打印机)是文件,就连套接字(socket)、网络通信等资源也都是文件。
Linux一切皆文件说明
普通文件
类似 mp4、pdf、html 这样,可直接拿来使用的文件都属于普通文件,Linux 用户根据访问权限的不同可以对这些文件进行查看、删除以及更改操作。
目录文件
对于用惯 Windows 系统的用户来说,目录是文件可能不太好理解。
Linux 系统中,目录文件包含了此目录中各个文件的文件名以及指向这些文件的指针,打开目录等同于打开目录文件,只要你有权限,可以随意访问目录中的任何文件。
注意,目录文件的访问权限,同普通文件的执行权限,是一个意思。
字符设备文件和块设备文件
这些文件通常隐藏在 /dev/ 目录下,当进行设备读取或外设交互时才会被使用。例如,磁盘光驱属于块设备文件,串口设备则属于字符设备文件。
Linux 系统中的所有设备,要么是块设备文件,要么是字符设备文件。
套接字文件(socket)
套接字文件一般隐藏在 /var/run/ 目录下,用于进程间的网络通信。
符号链接文件(symbolic link)
类似与 Windows 中的快捷方式,是指向另一文件的简介指针(也就是软链接)。
管道文件(pipe)
主要用于进程间通信。例如,使用 mkfifo 命令创建一个 FIFO 文件,与此同时,启用进程 A 从 FIFO文件读数据,启用进程 B 从 FIFO文件中写数据,随写随读。
Linux一切皆文件总结
Linux 中所有内容都是以文件的形式保存和管理的,即一切皆文件,普通文件是文件,目录是文件,硬件设备(键盘、监视器、硬盘、打印机)是文件,就连套接字(socket)、网络通信等资源也都是文件。
Linux文件类型
Linux文件类型教程
Linux 中一共有七种文件类型,即普通文件(-)、目录文件(d)、字符设备文件©、块设备文件(b)、套接字文件(s)、符号链接文件(l)和管道文件§。
Linux七种文件类型详解
文件属性 | 文件类型 |
---|---|
- | 常规文件,即 file |
d | 目录文件 |
b | block device 即块设备文件,如硬盘;支持以 block 为单位进行随机访问 |
c | character device 即字符设备文件,如键盘支持以 character 为单位进行线性访问 |
l | symbolic link 即符号链接文件,又称软链接文件 |
p | pipe 即命名管道文件 |
s | socket 即套接字文件,用于实现两个进程进行通信 |
普通文件
Linux 下的普通文件就是我们在 Windows 系统各个盘里看到的那些文件。
字符设备与块设备文件
字符设备只能以字节为最小单位访问,而块设备以块为单位访问,例如 512 字节,1024 字节等。
块设备可以随机访问,但是字符设备不可以,字符和块没有访问量大小的限制,块也可以以字节为单位来访问。
套接字文件
使用套接字除了可以实现网络间不同主机间的通信外,还可以实现同一主机的不同进程间的通信,且建立的通信是双向的通信。
Unix 域套接字是通过套接字 API 实现的简单的协议族。实际上它并不代表一个网络协议;它只能连接到同一台机器上的套接字。它提供了灵活的IPC机制。它的地址是它所在的文件系统的路径名,创建之后套接字就和路径名绑定在一起。用来表示 Unix 域地址的套接字文件能够使用 stat() 但是不能通过 open() 打开,而且应该使用套接字 API 对它进行操作。
Unix 域套接字是面向连接的,每个套接字的连接都建立了一个新的通讯信道。服务器可能同时处理许多连接,但对于每个连接都有不同的文件描述符。这个属性使 Unix 域套接字能够比命名管道更好的适应 IPC 任务。
链接文件
链接文件可以分为硬链接文件和软链接文件。
硬链接
硬链接就是通过设备节点 inode 创建的,硬链接就是同一个文件使用了多个别名,他们有共同的 inode。
由于硬链接是有着相同 inode 号仅文件名不同的文件,因此,删除一个硬链接文件并不影响其他有相同 inode 号的文件。
硬链接不能对目录进行创建,只可对文件创建。
软链接
软链接文件是通过文件的绝对路径创建的,软链接(也叫符号链接)与硬链接不同,文件用户数据块中存放的内容是另一文件的路径名的指向。软链接就是一个普通文件,只是数据块内容有点特殊。软链接可对文件或目录创建。
删除软链接并不影响被指向的文件,但若被指向的原文件被删除,则相关软连接就变成了死链接。
命名管道文件
命名管道文件负责将一个进程的信息传递给另一个进程,从而使该进程的输出成为一个另一个进程的输入的内存部分,这样的文件被称作命名管道文件,又称管道文件。
管道是 Linux 提供的最早的进程间通信方式之一,大致可以分为有无名管道和命名管道两种。Linux 中的命名管道提供两个进程之间的通讯方式,可以把一个程序的输出直接连接到另一个程序的输入。
管道通常用于从一个进程读取数据直接发送给第二个进程处理的场合。
Linux查看文件
我们在 Linux 上,使用 ls 命令,随便查看一个文件,具体命令如下:
ls -l haicoder.txt
运行后,终端输出如下:
我们看到,最前面的输出的字符 -rw-r--r--
就是文件的属性信息,其中第 1 个字母代表的就是文件类型,这里的 - 代表的就是普通的文件。现在,我们再次使用 ls 命令,查看一个文件夹,具体命令如下:
ls -ld haicoder
运行后,终端输出如下:
我们看到,这次输出的第一个字符变成了 d,即,表明其是一个文件夹。
Linux查看设备文件
我们在 Linux 上,使用 ls 命令,查看 /dev 目录下文件,具体命令如下:
ls -l /dev
运行后,终端输出如下:
我们看到,第一行的输出和第三行的输出的第 1 个字母代表是 c,表明其是一个字符设备文件,我们继续往下看,可以看到如下的输出:
我们可以看到,第一行的第一个设备信息为 l,其代表的就是链接文件,同时,第四行的第一个设备信息为 s,表明其为 socket 文件,我们接着往下看,可以看到如下的输出:
我们可以看到,第一行的第一个设备信息为 b,其代表的就是块设备文件。
Linux文件类型总结
Linux 中一共有七种文件类型,即普通文件(-)、目录文件(d)、字符设备文件©、块设备文件(b)、套接字文件(s)、符号链接文件(l)和管道文件§。