伪文件
不用来存储数据,本身不占用任何空间。是文件系统的一部分,并按目录进行组织。
目的:提供一种服务,采取和常规文件相同的访问方式进行访问。
多数情况下,伪文件用来访问内核(操作系统的核心部分)提供的服务。
类型:设备文件,命名管道,proc文件
设备文件:也称特殊文件,是物理设备的内部表示,包括计算机和网络中的每个设备都可以当作特殊文件来访问。如键盘,显示器,打印机,磁盘驱动器。
命名管道:管道功能的一个扩展,经一个程序的输出连接到另一个程序的输入上。
proc文件:运行访问内核中的信息。
设备文件
表示物理设备的伪文件。
所有连接到计算机上的设备都通过设备文件访问。
所有的设备文件存放在/dev目录中。
设备文件分为3类:硬件,终端,伪设备
/dev/fd0 | 软盘 |
/dev/hda | 硬盘 |
/dev/hda1 | 硬盘:第1分区 |
/dev/sda | SCSI或SATA硬盘驱动器 |
/dev/sda1 | SCSI或SATA硬盘驱动器:第1分区 |
/dev/sda1 | USB闪存卡 |
/dev/lp0 | 打印机 |
/dev/usb/lp0 | USB打印机 |
设备后的数字指的是一个具体的设备,dev/fd0指第一个软盘驱动器(计算机程序通常从0开始计数)
硬盘的处理有些不同,/dev/hda指第一个硬盘,/dev/hdb指第二个硬盘。
硬盘还被划分为一个或多个分区,分区可以作为单独的设备,/dev/hda1指第一个硬盘的第一个分区(分区的计数从1开始)
SCSI和SATA硬盘驱动器拥有自己的名称,/dev/sda指第一个SCSI或SATA硬盘驱动器,分区命名同上。
USB闪存被视为一个可移除的SCSI硬盘。
总之,有分区的先以a,b……命名后缀,然后从1,2……命名分区后缀。没有分区的以0,1……命名后缀。
/dev/tty | 当前终端 |
/dev/tty1 | 控制台/虚拟控制台 |
/dev/pts/0 | 伪终端 |
/dev/ttyp0 | 伪终端 |
以前,终端是连接到主机计算机的独立物理设备。现在终端充当硬件设备。
为了方便起见,当前终端用/dev/tty表示。
当以单用户模式运行Linux时,键盘和显示器充当内置的基于文本的终端,表示这个终端的特殊文件为/dev/tty1。
同样,在桌面环境中使用虚拟控制台时,它也充当一个实际终端。
默认情况下,Linux支持6个这样的控制台,分别由/dev/tty1到/dev/tty6命名。
当在窗口中使用GUI(图形用户界面)运行终端仿真程序时,是创建伪终端来模拟终端。
/dev/null | 放弃输出,输入不返回内容(eof) |
/dev/zero | 放弃输出,输入返回null(0) |
/dev/random | 随机数生成器 |
/dev/urandom | 随机数生成器 |
伪设备是一个充当输入源或输出目标的文件,并不对应实际设备。
/dev/null也被称为黑洞,输入的数据消失,读取不返回任何东西。
/dev/zero输入的数据消失,但是从/dev/zero中读取数据时,文件生成和请求一样多的字符0(数字0被认为是null字符)。
当需要清除文件或整个磁盘的内容,可以用null字符覆盖已有的数据。(这才是真正的清空,不可能再找回数据)。
/dev/random用来生成随机数,经收集到的“环境噪音”存储到一个“熵池”中,使用“熵池”中的数据位生成随机数,如果熵池被耗尽,那么暂停等待填充,这样就可能会出现延迟。
/dev/urandom与/dev/random相似,但是永远不会停止生成随机数,如果熵池短缺,则重用旧的数据位。
理论上,使用/dev/urandom随机数可能会有一点安全问题,但是其实很难会有。
命名管道
命名管道是常规管道的扩展。
管道:将一个进程的输出连接到另一个进程的输入。
匿名管道:管道没有具体的名称,自动创建,且仅当两个进程正在运行时它才存在。
命名管道:必须显式地创建,当两个进程结束时,命令管道不会消失。除非删除它,不然会一直存在。
通常将命名管道称为FIFO(first-in,first-out),即数据结构中的队列。
mkfifo 可以创建一个管道。
通常使用它来进行进程间通信。
在一个进程中将数据重定向到命名管道中,另一个进程中从命名管道中读取数据。
proc文件
提供一种简单的途径来检查多种类型的系统文件的伪文件。
直接从内核获取信息,而不是使用复杂的程序搜出数据。
所有的proc文件都存放在/proc目录中。
在这个目录中,不同的文件包含不同内核信息,并且系统中每个进程对应一个子目录,名称为进程ID。
/proc/xxx/ | 进程#xxx |
/proc/cmdline | 内核选项 |
/proc/cpuinfo | 处理器 |
/proc/devices | 设备 |
/proc/diskstats | 逻辑磁盘设备 |
/proc/filesystems | 文件系统 |
/proc/meminfo | 内存管理 |
/proc/modules | 内核模块 |
/proc/mounts | 已挂载设备,挂载点 |
/proc/partitions | 磁盘分区 |
/proc/scsi | SCSI和RAID设备 |
/proc/swaps | 交换分区 |
/proc/uptime | 内核运行时间(秒),内核空闲时间(秒) |
/proc/version | 内核版本,分发,gcc编辑器(用来构建内核) |
/proc/kcore | 计算机的实际物理内存 |