Linux 虚拟文件系统或虚拟文件系统通常是位于实际文件系统之上的一层。它允许用户访问不同类型的文件系统,可以将虚拟文件系统视为内核与实际文件系统之间的接口。
这意味着您将在 /etc/fstab 文件中找不到这些 Linux 虚拟文件系统的任何条目。然而,当您键入 mount 命令时,您仍然会找到它们。
如果您来自 Windows,则虚拟文件系统有点像 Windows 中的注册表。
/proc 文件系统
proc文件系统是系统挂载在/proc目录下的虚拟文件系统。
/proc 上不存在真正的文件系统;它是一个虚拟层,可用于处理内核功能。
例如,要获取处理器规格,请键入以下命令:
$ cat /proc/cpuinfo
这是查询 Linux 内核的一种引人注目且简单的方法。
请注意,如果检查 /proc 目录中的文件大小,您会发现所有文件大小均为 0,因为正如我们所说,它们不存在于磁盘上。
当您键入猫 /proc/cpuinfo命令后,系统会动态创建一个文件来显示 CPU 信息。
/proc 目录中唯一具有大小的文件是 /proc/kcore 文件,它显示 RAM 内容。该文件不占用磁盘上的任何空间。
写入 proc 文件
正如我们所看到的,我们可以读取 proc 文件的内容,但其中一些是可写的,因此我们可以写入它们来更改某些功能。
例如,如果您有多个网卡,则此 /proc/sys/net/ipv4/ip_forward 文件控制 IP 转发。
您可以像这样更改此文件的值:
$ echo "1" > /proc/sys/net/ipv4/ip_forward
请记住,当您更改 /proc 目录下的任何文件或值时,不会验证您正在执行的操作,如果输入错误的设置,您可能会崩溃系统。
持久保存 /proc 文件更改
之前的修改为/proc/sys/net/ipv4/ip_forward重新启动后,条目将不会保留,因为您没有写入文件,这是一个虚拟文件系统,这意味着内存会发生更改。
如果需要将更改保存在/proc下,有两种方法:
- 您可以在 /etc/rc.d/rc.local 文件中写入条目并使其可执行,并启用允许使用 rc.local 文件的 systemd 服务单元并写入条目。
- 您可以使用 sysctl 命令更改 /proc/sys/ 目录中的条目。
$ sysctl net.ipv4.ip_forward
这将显示条目的值,要更改它,请使用 -w 选项:
$ sysctl -w net.ipv4.ip_forward=1
最后一步是将更改写入 /etc/sysctl.conf:
$ echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
在写入更改之前,请确保文件 /etc/sysctl.conf 不包含该条目。
常见的 /proc 条目
以下是一些常见的 /proc 条目:
/proc/cpuinfo |
Information about CPUs in the system. |
/proc/meminfo |
information about memory usage. |
/proc/ioports |
list of port regions used for I/O communication with devices. |
/proc/mdstat |
display the status of RAID disks configuration. |
/proc/kcore |
displays the actual system memory. |
/proc/modules |
displays a list of kernel loaded modules. |
/proc/cmdline |
displays the passed boot parameters. |
/proc/swaps |
displays the status of swap partitions. |
/proc/iomem |
the current map of the system memory for each physical device. |
/proc/version |
displays the kernel version and time of compilation. |
/proc/net/dev |
displays information about each network device like packets count. |
/proc/net/sockstat |
displays statistics about network socket utilization. |
/proc/sys/net/ipv4/ip_local_port_range |
display the range of ports that Linux uses. |
/proc/sys/net/ipv4/tcp_ syncookies |
protection against syn flood attacks. |
这些是 /proc 目录中的一些常见条目。
列出 /proc 目录
如果你列出/proc目录下的文件,你会发现很多目录都有数字名称,这些目录包含正在运行的进程的信息,数字值就是对应的进程ID。
您可以从这些目录中查看特定进程消耗的资源。
如果你看一下名为 1 的文件夹,它属于 init 进程或 systemd(如 CentOS 7),这是 Linux 启动时运行的第一个进程。
$ ls -l /proc/1
The
/sbin/init
在使用 init 二进制文件的其他系统中。
相同的概念适用于 /proc 目录下的所有数字文件夹。
/proc 有用的例子
为了保护您的服务器免受 SYN Flood 攻击,您可以使用 iptables 来阻止 SYN 数据包。
更好的解决方案是使用同步 cookies。内核中的一种特殊方法,用于跟踪来自哪些 SYN 数据包。如果 SYN 数据包在合理的时间间隔内没有移动到已建立的状态,内核将丢弃它们。
$ sysctl -w net.ipv4.tcp_syncookies=1
并坚持改变。
$ echo "net.ipv4.tcp_syncookies = 1" >> /etc/sysctl.conf
另一个有用的例子是/proc/sys/fs/文件最大,该值显示可以同时打开的最大文件数(包括套接字、文件等)。
您可以像这样增加这个数字:
$ sysctl -w "fs.file-max=96992"
$ echo "fs.file-max = 96992" >> /etc/sysctl.conf
sysfs虚拟文件系统
sysfs 是一个 Linux 虚拟文件系统,这意味着它也在内存中。
您可以在以下位置找到 sysfs 文件系统:/sys。 sysfs 可用于获取有关系统硬件的信息。
$ ls -l /sys
从上述命令的结果来看,文件大小全部为零,因为我们知道,这是一个 Linux 虚拟文件系统。
/sys 的顶级目录包含以下内容:
Block |
list of block devices detected on the system like sda. |
Bus |
contains subdirectories for physical buses detected in the kernel. |
class |
describes the class of device like audio, network, or printer. |
Devices |
list all detected devices by the physical bus registered with the kernel. |
Module |
lists all loaded modules. |
Power |
the power state of your devices. |
tmpfs虚拟文件系统
tmpfs 是一个 Linux 虚拟文件系统,将数据保存在系统虚拟内存中。它与任何其他虚拟文件系统相同;所有文件都临时存储在内核的内部缓存中。
您可以使用/tmp 文件系统作为临时文件的存储位置。
/tmp 文件系统由实际的基于磁盘的存储支持,而不是由虚拟系统支持。
您在期间选择此位置Linux安装.
/tmp 是在系统启动时由 systemd 服务自动创建的。
您可以使用 mount 命令设置具有所需大小的 tmpfs 样式文件系统。
$ mount it tmpfs -o size=2GB tmpfs /home/myfolder
惊人的!!
使用 Linux 虚拟文件系统非常容易。