谈一谈Linux中一切皆文件
1、
Linux中所有内容都是以文件的形式保存和管理,即:一切皆文件。
普通文件是文件。
目录(在win下称为文件夹)是文件。
硬件设备(键盘、硬盘、打印机)是文件。
套接字(socket)、网络通信等资源也都是文件。
2、
文件类型:
1) 普通文件
类似 mp4、jgp、html这样,可直接拿来使用的文件都属于普通文件。
2) 目录文件
习惯win系统的用户来说,目录是文件可能不太好接受。
Linux系统中,目录文件包含了此目录中各个文件的文件名以及指向这些文件的指针,打开目录等同于打开目录文件。
即:只要有权限,可以随意访问目录中的任何文件。
vim 目录名
3) 字符设备文件和块设备文件
通常隐藏在/dev/目录下,当进行设备读取或外设交互时才会被使用。
例如:磁盘光驱属于块设备文件,串口设备则属于字符设备文件。
4) 套接字文件(socket)
套接字文件一般隐藏在 /var/run/目录下,用于进程间的网络通信。
5) 符号链接文件(symbolic link)
类似与win中的快捷方式,是指向另一文件的指针(软链接)。
6) 管道文件(pipe)
主要用于进程间通信。
例如:使用mkfifo命令创建一个FIFO文件,与此同时启用进程A从FIFO文件读数据,启用进程B从FIFO文件中写数据,随写随读。
3、
一切皆文件的利弊:
与Windows 系统不同,Linux 系统没有C盘、D盘、E盘那么多的盘符,只有一个根目录(/),所有的文件(资源)都存储在以根目录(/)为树根的树形目录结构中。
(1)这样做最明显的好处是,开发者仅需要使用一套 API 和开发工具即可调取 Linux 系统中绝大部分的资源。举个简单的例子,Linux 中几乎所有读(读文件,读系统状态,读 socket,读PIPE)的操作都可以用read函数来进行;几乎所有更改(更改文件,更改系统参数,写 socket,写 PIPE)的操作都可以用write函数来进行。
(2)不利之处在于,使用任何硬件设备都必须与根目录下某一目录执行挂载操作,否则无法使用。我们知道,本身Linux具有一个以根目录为树根的文件目录结构,每个设备也同样如此,它们是相互独立的。如果我们想通过Linux上的根目录找到设备文件的目录结构,就必须将这两个文件系统目录合二为一,这就是挂载的真正含义。
欢迎大家给予宝贵的意见或者建议。
欢迎大家补充或者共享一些其他的方法。
感谢支持。