/proc 非常特殊,因为它也是一个虚拟文件系统。它有时被称为进程信息伪文件系统。它不包含“真实”文件,而是运行时系统信息(例如,系统内存、已挂载的设备、硬件配置等)。因此,它可以被视为内核的控制和信息中心。事实上,很多系统实用程序只是调用此目录中的文件。例如,“lsmod”与“cat /proc/modules”相同,而“lspci”是“cat /proc/pci”的同义词。通过更改位于此目录中的文件,您甚至可以在系统运行时读取/更改内核参数 (sysctl)。
此目录中文件最显著的特点是它们的文件大小都为 0,除了 kcore、mtrr 和 self。目录列表如下所示
total 525256 dr-xr-xr-x 3 root root 0 Jan 19 15:00 1 dr-xr-xr-x 3 daemon root 0 Jan 19 15:00 109 dr-xr-xr-x 3 root root 0 Jan 19 15:00 170 dr-xr-xr-x 3 root root 0 Jan 19 15:00 173 dr-xr-xr-x 3 root root 0 Jan 19 15:00 178 dr-xr-xr-x 3 root root 0 Jan 19 15:00 2 dr-xr-xr-x 3 root root 0 Jan 19 15:00 3 dr-xr-xr-x 3 root root 0 Jan 19 15:00 4 dr-xr-xr-x 3 root root 0 Jan 19 15:00 421 dr-xr-xr-x 3 root root 0 Jan 19 15:00 425 dr-xr-xr-x 3 root root 0 Jan 19 15:00 433 dr-xr-xr-x 3 root root 0 Jan 19 15:00 439 dr-xr-xr-x 3 root root 0 Jan 19 15:00 444 dr-xr-xr-x 3 daemon daemon 0 Jan 19 15:00 446 dr-xr-xr-x 3 root root 0 Jan 19 15:00 449 dr-xr-xr-x 3 root root 0 Jan 19 15:00 453 dr-xr-xr-x 3 root root 0 Jan 19 15:00 456 dr-xr-xr-x 3 root root 0 Jan 19 15:00 458 dr-xr-xr-x 3 root root 0 Jan 19 15:00 462 dr-xr-xr-x 3 root root 0 Jan 19 15:00 463 dr-xr-xr-x 3 root root 0 Jan 19 15:00 464 dr-xr-xr-x 3 root root 0 Jan 19 15:00 465 dr-xr-xr-x 3 root root 0 Jan 19 15:00 466 dr-xr-xr-x 3 root root 0 Jan 19 15:00 467 dr-xr-xr-x 3 gdm gdm 0 Jan 19 15:00 472 dr-xr-xr-x 3 root root 0 Jan 19 15:00 483 dr-xr-xr-x 3 root root 0 Jan 19 15:00 5 dr-xr-xr-x 3 root root 0 Jan 19 15:00 6 dr-xr-xr-x 3 root root 0 Jan 19 15:00 7 dr-xr-xr-x 3 root root 0 Jan 19 15:00 8 -r--r--r-- 1 root root 0 Jan 19 15:00 apm dr-xr-xr-x 3 root root 0 Jan 19 15:00 bus -r--r--r-- 1 root root 0 Jan 19 15:00 cmdline -r--r--r-- 1 root root 0 Jan 19 15:00 cpuinfo -r--r--r-- 1 root root 0 Jan 19 15:00 devices -r--r--r-- 1 root root 0 Jan 19 15:00 dma dr-xr-xr-x 3 root root 0 Jan 19 15:00 driver -r--r--r-- 1 root root 0 Jan 19 15:00 execdomains -r--r--r-- 1 root root 0 Jan 19 15:00 fb -r--r--r-- 1 root root 0 Jan 19 15:00 filesystems dr-xr-xr-x 2 root root 0 Jan 19 15:00 fs dr-xr-xr-x 4 root root 0 Jan 19 15:00 ide -r--r--r-- 1 root root 0 Jan 19 15:00 interrupts -r--r--r-- 1 root root 0 Jan 19 15:00 iomem -r--r--r-- 1 root root 0 Jan 19 15:00 ioports dr-xr-xr-x 18 root root 0 Jan 19 15:00 irq -r-------- 1 root root 536809472 Jan 19 15:00 kcore -r-------- 1 root root 0 Jan 19 14:58 kmsg -r--r--r-- 1 root root 0 Jan 19 15:00 ksyms -r--r--r-- 1 root root 0 Jan 19 15:00 loadavg -r--r--r-- 1 root root 0 Jan 19 15:00 locks -r--r--r-- 1 root root 0 Jan 19 15:00 mdstat -r--r--r-- 1 root root 0 Jan 19 15:00 meminfo -r--r--r-- 1 root root 0 Jan 19 15:00 misc -r--r--r-- 1 root root 0 Jan 19 15:00 modules -r--r--r-- 1 root root 0 Jan 19 15:00 mounts -rw-r--r-- 1 root root 137 Jan 19 14:59 mtrr dr-xr-xr-x 3 root root 0 Jan 19 15:00 net dr-xr-xr-x 2 root root 0 Jan 19 15:00 nv -r--r--r-- 1 root root 0 Jan 19 15:00 partitions -r--r--r-- 1 root root 0 Jan 19 15:00 pci dr-xr-xr-x 4 root root 0 Jan 19 15:00 scsi lrwxrwxrwx 1 root root 64 Jan 19 14:58 self -> 483 -rw-r--r-- 1 root root 0 Jan 19 15:00 slabinfo -r--r--r-- 1 root root 0 Jan 19 15:00 stat -r--r--r-- 1 root root 0 Jan 19 15:00 swaps dr-xr-xr-x 10 root root 0 Jan 19 15:00 sys dr-xr-xr-x 2 root root 0 Jan 19 15:00 sysvipc dr-xr-xr-x 4 root root 0 Jan 19 15:00 tty -r--r--r-- 1 root root 0 Jan 19 15:00 uptime -r--r--r-- 1 root root 0 Jan 19 15:00 version |
每个编号的目录都对应于一个实际的进程 ID。查看进程表,您可以将进程与关联的进程 ID 匹配。例如,进程表可能指示安全 shell 服务器的以下信息
# ps ax | grep sshd 439 ? S 0:00 /usr/sbin/sshd |
可以通过查看此进程的目录 /proc/460 中的关联文件来获得此进程的详细信息。您可能想知道如何查看文件大小为 0 的进程的详细信息。如果您将其视为内核的窗口,则更有意义。该文件实际上不包含任何数据;它只是充当指向实际进程信息所在位置的指针。例如,/proc/460 目录中文件的列表如下所示
total 0 -r--r--r-- 1 root root 0 Jan 19 15:02 cmdline lrwxrwxrwx 1 root root 0 Jan 19 15:02 cwd -> / -r-------- 1 root root 0 Jan 19 15:02 environ lrwxrwxrwx 1 root root 0 Jan 19 15:02 exe -> /usr/sbin/sshd dr-x------ 2 root root 0 Jan 19 15:02 fd -r--r--r-- 1 root root 0 Jan 19 15:02 maps -rw------- 1 root root 0 Jan 19 15:02 mem lrwxrwxrwx 1 root root 0 Jan 19 15:02 root -> / -r--r--r-- 1 root root 0 Jan 19 15:02 stat -r--r--r-- 1 root root 0 Jan 19 15:02 statm -r--r--r-- 1 root root 0 Jan 19 15:02 status |
下面解释每个文件的用途和内容
命令行参数。
当前和上次执行的 CPU。
指向当前工作目录的链接。
环境变量的值。
指向此进程可执行文件的链接。
目录,其中包含所有文件描述符。
到可执行文件和库文件的内存映射。
此进程持有的内存。
指向此进程根目录的链接。
进程状态。
进程内存状态信息。
人类可读格式的进程状态。
如果您想了解更多信息,proc 的 man 手册更详细地描述了与正在运行的进程 ID 关联的每个文件。
即使文件大小显示为 0,检查其内容也会显示并非如此
# cat status |
Name: sshd State: S (sleeping) Tgid: 439 Pid: 439 PPid: 1 TracerPid: 0 Uid: 0 0 0 0 Gid: 0 0 0 0 FDSize: 32 Groups: VmSize: 2788 kB VmLck: 0 kB VmRSS: 1280 kB VmData: 252 kB VmStk: 16 kB VmExe: 268 kB VmLib: 2132 kB SigPnd: 0000000000000000 SigBlk: 0000000000000000 SigIgn: 8000000000001000 SigCgt: 0000000000014005 CapInh: 0000000000000000 CapPrm: 00000000fffffeff CapEff: 00000000fffffeff |
/proc 目录中的文件与进程 ID 子目录文件非常相似。例如,检查 /proc/interrupts 文件的内容会显示如下内容
# cat interrupts |
CPU0 0: 32657 XT-PIC timer 1: 1063 XT-PIC keyboard 2: 0 XT-PIC cascade 8: 3 XT-PIC rtc 9: 0 XT-PIC cmpci 11: 332 XT-PIC nvidia 14: 5289 XT-PIC ide0 15: 13 XT-PIC ide1 NMI: 0 ERR: 0 |
左侧列中的每个数字代表正在使用的中断。检查文件的内容会动态收集关联的数据并将其显示在屏幕上。大多数 /proc 文件系统是只读的;但是,某些文件允许更改内核变量。这提供了一种在不重新编译和重新启动的情况下实际调整内核的机制。
procinfo 实用程序将 /proc 文件系统信息汇总到类似于以下的显示中
# /usr/bin/procinfo |
Linux 2.4.18 (root@DEB) (gcc 2.95.4 20011002 ) #2 1CPU [DEB.(none)] Memory: Total Used Free Shared Buffers Cached Mem: 513908 107404 406504 0 2832 82180 Swap: 265032 0 265032 Bootup: Sun Jan 19 14:58:27 2003 Load average: 0.29 0.13 0.05 1/30 566 user : 0:00:10.26 2.3% page in : 74545 disk 1: 6459r 796w nice : 0:00:00.00 0.0% page out: 9416 disk 2: 19r 0w system: 0:00:19.55 4.5% swap in : 1 idle : 0:06:48.30 93.2% swap out: 0 uptime: 0:07:18.11 context : 22059 irq 0: 43811 timer irq 9: 0 cmpci irq 1: 1427 keyboard irq 11: 332 nvidia irq 2: 0 cascade [4] irq 12: 2 irq 6: 2 irq 14: 7251 ide0 irq 8: 3 rtc irq 15: 83 ide1 |
高级电源管理信息。
包含特定于总线的信息的目录。
内核命令行。
有关处理器的信息,例如其类型、制造商、型号和性能。
配置到当前运行的内核中的设备驱动程序列表(块设备和字符设备)。
显示当前正在使用的 DMA 通道。
此处分组了各种驱动程序,当前为 rtc
执行域,与安全性相关。
帧缓冲区设备。
配置/支持到内核中/由内核支持的文件系统。
文件系统参数,当前为 nfs/exports。
此子目录包含内核知道的所有 IDE 设备的信息。每个 IDE 控制器都有一个子目录,文件 drivers 和每个 IDE 设备的链接,指向控制器特定子树中的设备目录。文件 drivers 包含有关用于 IDE 设备的驱动程序的一般信息。更详细的信息可以在控制器特定的子目录中找到。这些子目录名为 ide0、ide1 等。这些目录中的每一个都包含此处显示的文件
IDE 通道(0 或 1)
配置(仅适用于 PCI/IDE 桥接器)
Mate 名称(片上合作伙伴控制器)
IDE 控制器的类型/芯片组
连接到控制器的每个设备在控制器目录中都有一个单独的子目录。下面列出的文件包含在这些目录中
缓存。
介质容量(以 512 字节块为单位)
驱动程序和版本
物理和逻辑几何结构
设备识别块
介质类型
设备标识符
设备设置
IDE 磁盘管理阈值
IDE 磁盘管理值
显示正在使用的中断以及每种中断的次数。
例如,您可以通过查看 /proc/interrupts 文件来检查当前正在使用的中断及其用途
# cat /proc/interrupts |
CPU0 0: 8728810 XT-PIC timer 1: 895 XT-PIC keyboard 2: 0 XT-PIC cascade 3: 531695 XT-PIC aha152x 4: 2014133 XT-PIC serial 5: 44401 XT-PIC pcnet_cs 8: 2 XT-PIC rtc 11: 8 XT-PIC i82365 12: 182918 XT-PIC PS/2 Mouse 13: 1 XT-PIC fpu 14: 1232265 XT-PIC ide0 15: 7 XT-PIC ide1 NMI: 0 |
在基于 2.4 的内核中,此文件中添加了几行 LOC & ERR(这是 SMP 机器的输出)
# cat /proc/interrupts |
CPU0 CPU1 0: 1243498 1214548 IO-APIC-edge timer 1: 8949 8958 IO-APIC-edge keyboard 2: 0 0 XT-PIC cascade 5: 11286 10161 IO-APIC-edge soundblaster 8: 1 0 IO-APIC-edge rtc 9: 27422 27407 IO-APIC-edge 3c503 12: 113645 113873 IO-APIC-edge PS/2 Mouse 13: 0 0 XT-PIC fpu 14: 22491 24012 IO-APIC-edge ide0 15: 2183 2415 IO-APIC-edge ide1 17: 30564 30414 IO-APIC-level eth0 18: 177 164 IO-APIC-level bttv NMI: 2457961 2457959 LOC: 2457882 2457881 ERR: 2155 |
在这种情况下,NMI 会递增,因为每个计时器中断都会生成一个 NMI(不可屏蔽中断),NMI 监视程序使用该中断来检测查找。
LOC 是每个 CPU 内部 APIC 的本地中断计数器。
ERR 在 IO-APIC 总线(连接 SMP 系统中 CPU 的总线)中发生错误时递增。这意味着已检测到错误,IO-APIC 会自动重试传输,因此这应该不是大问题,但您应该阅读 SMP-FAQ。
在这种情况下,值得注意的是 2.4 中的新 irq 目录。它可以用于设置 IRQ 到 CPU 的亲和性,这意味着您可以将 IRQ“挂钩”到仅一个 CPU,或排除 CPU 处理 IRQ。irq 子目录的内容是每个 IRQ 的一个子目录和一个文件;prof_cpu_mask。例如,
# ls /proc/irq/ 0 10 12 14 16 18 2 4 6 8 prof_cpu_mask 1 11 13 15 17 19 3 5 7 9 |
# ls /proc/irq/0/ smp_affinity |
prof_cpu_mask 文件和每个 IRQ 的每个 smp_affinity 文件的内容默认情况下相同
# cat /proc/irq/0/smp_affinity ffffffff |
这是一个位掩码,您可以在其中指定哪些 CPU 可以处理 IRQ,您可以通过执行以下操作来设置它
# echo 1 > /proc/irq/prof_cpu_mask |
这意味着只有第一个 CPU 将处理 IRQ,但您也可以回显 5,这意味着只有第一个和第四个 CPU 可以处理 IRQ。IRQ 的路由方式由 IO-APIC 处理,并在允许处理它的所有 CPU 之间进行轮询。与往常一样,内核比您拥有更多信息,并且比您做得更好,因此默认设置几乎是每个人的最佳选择。
内存映射。
当前正在使用的 I/O 端口。
irq 到 cpu 亲和性的掩码。
ISA PnP (即插即用) 信息。
系统物理内存的映像(可以是 ELF 或 A.OUT(在 2.4 中已弃用))。这与您的物理内存大小完全相同,但实际上并不占用那么多内存;它是在程序访问时动态生成的。(记住:除非您将其复制到其他位置,否则 /proc 下的任何内容都不会占用任何磁盘空间。)
内核输出的消息。这些消息也会路由到 syslog。
内核符号表。
系统的“负载平均值”;过去 1、5 和 15 分钟系统完成的工作量的三个指标。
内核锁。
有关内存使用情况的信息,包括物理内存和交换内存。连接此文件会产生类似于使用“free”或“top”的前几行的结果。
各种信息片段。这适用于在 proc 文件系统的其余部分中没有实际位置的信息。
当前加载的内核模块。通常,其输出与“lsmod”命令给出的输出相同。
已挂载的文件系统
有关 mtrr 的信息。(在 Intel P6 系列处理器(奔腾 Pro、奔腾 II 及更高版本)上,内存类型范围寄存器 (MTRR) 可用于控制处理器对内存范围的访问。当您在 PCI 或 AGP 总线上有视频 (VGA) 卡时,这非常有用。启用写合并允许总线写入传输在通过 PCI/AGP 总线突发传输之前合并为更大的传输。这可以将图像写入操作的性能提高 2.5 倍或更多。Cyrix 6x86、6x86MX 和 M II 处理器具有地址范围寄存器 (ARR),它们提供与 MTRR 类似的功能。对于这些,ARR 用于模拟 MTRR。AMD K6-2(步进 8 及更高版本)和 K6-3 处理器具有两个 MTRR。这些都受支持。AMD Athlon 系列提供 8 个 Intel 风格的 MTRR。Centaur C6 (WinChip) 具有 8 个 MCR,允许写合并。这些也受支持。VIA Cyrix III 和 VIA C3 CPU 提供 8 个 Intel 风格的 MTRR。)有关 mtrr 技术的更多详细信息,请参阅 /usr/src/linux/Documentation/mtrr.txt。
有关网络协议的状态信息。
UDP 套接字 (IPv6)。
TCP 套接字 (IPv6)。
原始设备统计信息 (IPv6)。
此主机加入的 IP 组播地址 (IPv6)。
IPv6 接口地址列表。
IPv6 的内核路由表。
全局 IPv6 路由表统计信息。
套接字统计信息 (IPv6)。
Snmp 数据 (IPv6)。
内核 ARP 表。
具有统计信息的网络设备。
设备正在侦听的 Layer2 组播组(接口索引、标签、引用次数、绑定地址数)。
网络设备状态。
防火墙链链接。
防火墙链名称。
包含伪装表的目录。
主要伪装表。
网络统计信息。
原始设备统计信息。
内核路由表。
包含 rpc 信息的目录。
路由缓存。
SNMP 数据。
套接字统计信息。
TCP 套接字。
令牌环 RIF 路由表。
UDP 套接字。
UNIX 域套接字。
无线接口数据 (Wavelan 等)。
此主机加入的 IP 组播地址。
全局数据包调度程序参数。
PF_NETLINK 套接字列表。
组播虚拟接口列表。
组播路由缓存列表。
您可以使用此信息来查看系统中可用的网络设备以及通过这些设备路由的流量。此外,每个通道绑定接口都有自己的目录。例如,bond0 设备将有一个名为 /proc/net/bond0/ 的目录。它将包含特定于该绑定的信息,例如绑定的当前从属设备、从属设备的链接状态以及从属设备链接失败的次数。
/proc/parport 目录包含有关系统并行端口的信息。每个端口都有一个子目录,以端口号命名 (0,1,2,...)。
已获取的任何 IEEE-1284 设备 ID 信息。
使用该端口的设备驱动程序的列表。当前正在使用该端口的设备的名称旁边会出现一个 + 号(可能不会出现在任何设备旁边)。
并行端口的基地址、IRQ 行和 DMA 通道。
parport 正在该端口上使用的 IRQ。这位于一个单独的文件中,允许您通过写入新值来更改它(IRQ 号或 none)。
系统已知的分区表
已弃用的 PCI 总线信息。
实时时钟
如果您的系统中有 SCSI 主机适配器,您将在 /proc/scsi 中找到一个以该适配器的驱动程序命名的子目录。您还将在 /proc/scsi 中看到所有已识别的 SCSI 设备的列表。以驱动程序命名的目录为系统中找到的每个适配器包含一个文件。这些文件包含有关控制器的信息,包括使用的 IRQ 和 IO 地址范围。显示的信息量取决于您使用的适配器。
指向正在查看 /proc 的程序的进程目录的符号链接。当两个进程查看 /proc 时,它们会获得不同的链接。这主要是为了方便程序更容易访问其进程目录。
slabinfo 文件提供有关 slab 级别的内存使用情况的信息。Linux 在 2.2 版本中对页级以上的内存管理使用 slab 池。常用对象有自己的 slab 池(例如网络缓冲区、目录缓存等)。
有关系统的总体/各种统计信息,例如自系统启动以来的页错误数。
交换空间利用率
这不仅是信息的来源,还允许您更改内核中的参数,而无需重新编译甚至系统重启。尝试这样做时请小心,因为它既可以优化您的系统,也可能导致系统崩溃。建议在实际进行调整之前阅读文档和源代码。/proc 中的条目在内核版本之间可能会略有变化,因此如果有任何疑问,请查看 /usr/src/linux/Documentation 目录中的内核文档。在某些情况下,您可能别无选择,只能在发生错误后重新启动计算机。要更改值,只需将新值回显到文件中即可。文件系统数据部分中给出了一个示例。当然,您需要是“root”才能执行任何这些操作。您可以创建自己的启动脚本,以便在每次系统启动时执行此操作。
包含文件系统数据。此子目录包含特定的文件系统、文件句柄、inode、dentry 和配额信息。
目录缓存的状态。由于目录条目是动态分配和释放的,因此此文件指示当前状态。它包含六个值,其中最后两个未使用且始终为零。其他值如下
File Content nr_dentry Almost always zero nr_unused Number of unused cache entries age_limit in seconds after the entry may be reclaimed, when memory is short want_pages internally |
dquot-max 文件显示缓存的磁盘配额条目的最大数量。
显示已分配的磁盘配额条目的数量和空闲磁盘配额条目的数量。如果可用的缓存磁盘配额数量非常低,并且您有大量同时系统用户,您可能需要提高限制。
内核动态分配文件句柄,但此时不再释放它们。file-max 中的值表示 Linux 内核将分配的最大文件句柄数。当您收到大量关于文件句柄耗尽的错误消息时,您可能需要提高此限制。默认值为 4096。要更改它,只需将新数字写入文件
# cat /proc/sys/fs/file-max 4096 # echo 8192 > /proc/sys/fs/file-max # cat /proc/sys/fs/file-max 8192 |
这种修订方法对于内核的所有可自定义参数都很有用 - 只需将新值回显到相应的文件即可。
file-nr 中的三个值表示已分配的文件句柄数、已使用的文件句柄数和最大文件句柄数。当已分配的文件句柄接近最大值,但实际使用的句柄数远远落后时,您遇到了文件句柄使用高峰,您无需增加最大值。
与文件句柄一样,内核动态分配 inode 结构,但目前无法释放它们。
inode-max 中的值表示 inode 处理程序的最大数量。此值应为 file-max 中值的 3 到 4 倍,因为 stdin、stdout 和网络套接字也需要 inode 结构来处理它们。如果您经常耗尽 inode,则应增加此值。
inode-nr 文件包含 inode-state 中的前两项,因此我们将跳过该文件...
inode-state 包含三个实际数字和四个虚拟值。数字是 nr_inodes、nr_free_inodes 和 preshrink(按出现顺序)。
表示系统已分配的 inode 数。这可能略大于 inode-max,因为 Linux 一次分配一页。
表示空闲 inode 的数量,当 nr_inodes 大于 inode-max 并且系统需要修剪 inode 列表而不是分配更多 inode 时,preshrink 为非零。
同样,超级块结构由内核分配,但不会释放。super-max 文件包含超级块处理程序的最大数量,其中 super-nr 显示当前已分配的数量。每个挂载的文件系统都需要一个超级块,因此如果您计划挂载大量文件系统,您可能需要增加这些数字。
这处理内核对各种二进制格式的支持。binfmt_misc 提供了向内核注册其他二进制格式的能力,而无需编译额外的模块/内核。因此,binfmt_misc 需要知道二进制文件开头或文件扩展名处的幻数。它的工作原理是维护一个结构链表,其中包含二进制格式的描述,包括带有大小(或文件扩展名)、偏移量和掩码的幻数,以及解释器名称。应请求,它使用原始程序作为参数调用给定的解释器,就像 binfmt_java 和 binfmt_em86 和 binfmt_mz 所做的那样。由于 binfmt_misc 没有定义任何默认二进制格式,因此您必须注册其他二进制格式。binfmt_misc 中有两个通用文件,每个注册格式一个文件。这两个通用文件是 register 和 status。要注册新的二进制格式,您必须发出命令 echo :name:type:offset:magic:mask:interpreter: > /proc/sys/fs/binfmt_misc/register,其中包含适当的名称(/proc-dir 条目的名称)、偏移量(如果省略,则默认为 0)、幻数、掩码(可以省略,默认为所有 0xff),最后但并非最不重要的,是要调用的解释器(例如和测试 /bin/echo)。Type 可以是 M,用于通常的幻数匹配,也可以是 E,用于文件扩展名匹配(在幻数的位置给出扩展名)。如果您对文件 /proc/sys/fs/binfmt_misc/status 执行 cat 操作,您将获得 binfmt_misc 的当前状态(启用/禁用)。通过将 0(禁用)或 1(启用)或 -1(警告:这将清除所有先前注册的二进制格式)回显到 status 来更改状态。例如,echo 0 > status 暂时禁用 binfmt_misc。每个注册的处理程序在 /proc/sys/fs/binfmt_misc 中都有一个条目。这些文件的功能与 status 相同,但其范围仅限于实际的二进制格式。通过“cat”此文件,您还可以接收有关 binfmt 的解释器/幻数的所有相关信息。以下是 binfmt_misc 用法的示例(模拟 binfmt_java)
cd /proc/sys/fs/binfmt_misc echo ':Java:M::\xca\xfe\xba\xbe::/usr/local/java/bin/javawrapper:' > register echo ':HTML:E::html::/usr/local/java/bin/appletviewer:' > register echo ':Applet:M::<!--applet::/usr/local/java/bin/appletviewer:' > register echo ':DEXE:M::\x0eDEX::/usr/bin/dosexec:' < register |
这四行添加了对 Java 可执行文件和 Java applet 的支持(如 binfmt_java,另外还识别 .html 扩展名,无需在每个 applet 文件中放置 <!--applet>)。您必须安装 JDK 和 shell 脚本 /usr/local/java/bin/javawrapper。它可以解决 Java 文件名处理的缺陷。要添加 Java 二进制文件,只需在路径中的某处创建指向类文件的链接即可。
此目录反映了一般的内核行为,内容将取决于您的配置。您可以在此处找到最重要的文件,以及有关其含义以及如何使用它们的描述。
该文件包含三个值;highwater、lowwater 和 frequency。仅当启用 BSD 样式进程记帐时才存在。这些值控制其行为。如果日志所在的文件系统上的可用空间低于 lowwater 百分比,则记帐暂停。如果高于 highwater 百分比,则记帐恢复。Frequency 确定您检查可用空间量的频率(值以秒为单位)。默认设置为:4、2 和 30。也就是说,如果可用空间少于 2%,则暂停记帐;如果我们有 3% 或更多的值,则恢复它;考虑有关可用空间量的有效信息 30 秒
当此文件中的值为 0 时,ctrl-alt-del 被捕获并发送到 init 程序以处理正常重启。但是,当该值大于零时,Linux 对此组合键的反应将是立即重启,而不会同步其脏缓冲区。应该注意的是,当程序(如 dosemu)的键盘处于原始模式时,ctrl-alt-del 会被程序拦截,然后才到达内核 tty 层,并且由程序决定如何处理它。
可以控制这些文件来设置您计算机的 NIS 域名和主机名。对于经典的 darkstar.frop.org,一个简单的:# echo "darkstar" > /proc/sys/kernel/hostname # echo "frop.org" > /proc/sys/kernel/domainname 就足以设置您的主机名和 NIS 域名。/proc/sys/kernel/osrelease、/proc/sys/kernel/ostype、/proc/sys/kernel/version 这些名称使其非常清楚地表明这些字段包含的内容:# cat /proc/sys/kernel/osrelease 2.2.12 # cat /proc/sys/kernel/ostype Linux # cat /proc/sys/kernel/version #4 Fri Oct 1 12:41:14 PDT 1999 osrelease 和 ostype 文件应该足够清楚。版本需要更多说明。#4 表示这是从该源代码库构建的第 4 个内核,其后的日期表示内核构建的时间。调整这些值的唯一方法是重新构建内核。
此文件中的值表示内核在发生 panic 时重启之前等待的秒数。当您使用软件看门狗时,建议设置为 60。如果设置为 0,则禁用内核 panic 后的自动重启,这是默认设置。
printk 中的四个值分别表示 * console_loglevel、* default_message_loglevel、* minimum_console_level 和 * default_console_loglevel。这些值会影响 printk() 在打印或记录来自内核内部的错误消息时的行为。有关不同日志级别的更多信息,请参阅 syslog(2)。
优先级高于此级别的消息将打印到控制台。
没有显式优先级的消息将以此优先级打印。
可以设置 console_loglevel 的最小值(最高值)。
console_loglevel 的默认值。
此文件显示通用 SCSI (sg) 缓冲区的大小。此时,您还无法对其进行调整,但您可以在编译时通过编辑 include/scsi/sg.h 并更改 SG_BIG_BUFF 的值来更改它。如果您将扫描仪与 SANE (Scanner Access Now Easy) 一起使用,您可能需要将此值设置为更高的值。有关此问题的更多信息,请参阅 SANE 文档。
modprobe 二进制文件所在的位置。内核使用此程序按需加载模块。
此目录中的文件可用于调整 Linux 内核的虚拟内存 (VM) 子系统的操作。此外,其中一个文件 (bdflush) 对磁盘使用情况有一定影响。
此参数控制缓冲区缓存中脏缓冲区的最大数量。脏缓冲区意味着缓冲区的内容仍需写入磁盘(与可以忽略的干净缓冲区相反)。将其设置为更高的值意味着 Linux 可以将磁盘写入延迟很长时间,但也意味着当内存不足时,它将不得不一次执行大量 I/O。较低的值将更均匀地分散磁盘 I/O。
Ndirty 给出了 bdflush 一次可以写入磁盘的最大脏缓冲区数。较高的值意味着延迟的突发 I/O,而较小的值可能会导致 bdflush 没有经常唤醒时内存短缺。
这是当调用 refill_freelist() 时 bdflush 将添加到空闲缓冲区列表的缓冲区数。预先分配空闲缓冲区是必要的,因为缓冲区的大小通常与内存页的大小不同,并且需要预先完成一些簿记工作。数字越高,浪费的内存就越多,refill_freelist() 需要运行的频率就越低。
当 refill_freelist() 遇到超过 nref_dirt 个脏缓冲区时,它将唤醒 bdflush。
最后,age_buffer 和 age_super 参数控制 Linux 在将脏缓冲区写入磁盘之前等待的最长时间。该值以 jiffies(时钟滴答)表示,每秒的 jiffies 数为 100。Age_buffer 是数据块的最大生存时间,而 age_super 是文件系统元数据的最大生存时间。
此文件中的三个值控制应为缓冲区内存使用多少内存。百分比计算为占系统总内存的百分比。
这些值是
这是应用于缓冲区内存的内存的最小百分比。
当 Linux 内存不足,并且缓冲区缓存使用的内存超过分配给它的内存时,内存管理 (MM) 子系统将比其他内存更重地修剪缓冲区缓存以进行补偿。
这是可用于缓冲区内存的最大内存量。
此文件包含三个值:min、low 和 high
当系统中的空闲页数达到此数字时,只有内核可以分配更多内存。
如果空闲页数降到此点以下,内核将开始积极交换。
内核尝试保持高达此数量的空闲内存;如果内存降到此点以下,内核将开始温和地交换,希望它永远不必进行真正积极的交换。
Kswapd 是内核交换守护程序。也就是说,kswapd 是内核中在内存碎片化或满时释放内存的部分。由于每个系统都不同,您可能需要对系统的这一部分进行一些控制。
该文件包含三个数字
kswapd 在一轮中尝试释放的最大页数由此数字计算得出。通常,此数字将除以 4 或 8(请参阅 mm/vmscan.c),因此它没有看起来那么大。当您需要增加与交换空间的带宽时,您需要增加此数字。
这是每次调用 kswapd 时 kswapd 尝试释放页面的最小次数。基本上,它只是为了确保 kswapd 即使在以最低优先级调用时也释放一些页面。
这可能是对系统性能影响最大的因素。swap_cluster 是 kswapd 一次写入的页数。您希望此值很大,以便 kswapd 以大块执行 I/O,并且磁盘不必经常寻道,但您不希望它太大,因为这会淹没请求队列。
此文件包含一个值。以下算法用于确定是否有足够的内存:如果 overcommit_memory 的值为正数,则始终有足够的内存。这是一个有用的功能,因为程序通常会 malloc() 大量内存“以防万一”,而它们只使用其中的一小部分。将此值保持为 0 将导致此类大型 malloc() 失败,而实际上系统有足够的内存供程序运行。另一方面,启用此功能可能会导致您耗尽内存并使系统崩溃,因此大型和/或重要的服务器会希望将此值设置为 0。
此文件执行与 buffermem 完全相同的工作,只是此文件控制允许用于内存映射和文件通用缓存的内存量。您不希望最低级别太低,否则当内存紧张或碎片过多时,您的系统可能会抖动。
内核在每个处理器的缓存中保留许多页表(这在 SMP 系统上非常有帮助)。每个处理器的缓存大小将在低值和高值之间。在低内存、单 CPU 系统上,您可以安全地将这些值设置为 0,这样您就不会浪费内存。它在 SMP 系统上使用,以便系统可以执行快速页表分配,而无需获取内核内存锁。对于大型系统,这些设置可能已经足够好。对于普通系统,它们不会有任何坏处。对于小型系统(小于 16MB 内存),将这两个值都设置为 0 可能是有利的。
此文件包含不少于 8 个变量。所有这些值都由 kswapd 使用。前四个变量 sc_max_page_age、sc_page_advance、sc_page_decline 和 sc_page_initial_age 用于跟踪 Linux 的页面老化。页面老化是一种簿记方法,用于跟踪哪些内存页经常使用,哪些页可以交换出去而不会产生后果。
当页面被换入时,它从 sc_page_initial_age(默认值 3)开始,当页面被 kswapd 扫描时,其年龄会根据以下方案进行调整。
如果自上次扫描以来页面被使用过,则其年龄会增加 sc_page_advance(默认值 3)。其中最大值由 sc_max_page_age(默认值 20)给出。否则(意味着它没有被使用),其年龄会减少 sc_page_decline(默认值 1)。
当页面达到 0 岁时,就可以被交换出去。
变量 sc_age_cluster_fract、sc_age_cluster_min、sc_pageout_weight 和 sc_bufferout_weight 可用于控制 kswapd 在交换出页面时的积极程度。
Sc_age_cluster_fract 用于计算要由 kswapd 扫描的进程中的页面数。使用的公式是
(sc_age_cluster_fract 除以 1024)乘以常驻集大小
因此,如果您希望 kswapd 扫描整个进程,则 sc_age_cluster_fract 需要具有 1024 的值。kswapd 将扫描的最小页面数由 sc_age_cluster_min 表示,这样做是为了让 kswapd 也扫描小型进程。sc_pageout_weight 和 sc_bufferout_weight 的值用于控制 kswapd 为了交换出一个页面/缓冲区而进行的尝试次数。这些值可用于微调用户页面和缓冲区/缓存内存之间的比率。当您发现您的 Linux 系统交换出过多的进程页面以满足缓冲区内存需求时,您可能需要增加 sc_bufferout_weight,或减小 sc_pageout_weight 的值。
设备特定参数。目前仅支持 CDROM 驱动器,对于这些驱动器,只有一个只读文件包含有关连接到系统的 CD-ROM 驱动器的信息:>cat /proc/sys/dev/cdrom/info CD-ROM 信息,Id: cdrom.c 2.55 1999/04/25 驱动器名称:sr0 hdb 驱动器速度:32 40 驱动器插槽数:1 0 可以关闭托盘:1 1 可以打开托盘:1 1 可以锁定托盘:1 1 可以更改速度:1 1 可以选择光盘:0 1 可以读取多会话:1 1 可以读取 MCN:1 1 报告介质已更改:1 1 可以播放音频:1 1 您可以看到两个驱动器,sr0 和 hdb,以及它们的功能列表。
此目录包含四个文件,这些文件启用或禁用 RPC 函数 NFS、NFS-daemon、RPC 和 NLM 的调试。默认值为 0。可以将它们设置为 1 以打开调试。(每个的默认值均为 0)
内核网络部分的接口位于 /proc/sys/net 中。下表显示了所有可能的子目录。您可能只会看到其中一部分,具体取决于您的内核配置。我们的主要重点将放在 IP 网络上,因为 AX15、X.25 和 DEC Net 在 Linux 世界中只是次要角色。如果您希望查看在线文档和内核源代码以详细了解此处未涵盖的那些协议的参数。在本节中,我们将讨论上面列出的子目录。由于默认值适用于大多数需求,因此无需更改这些值。
网络核心选项
套接字接收缓冲区(以字节为单位)的默认设置。
最大接收套接字缓冲区大小(以字节为单位)。
套接字发送缓冲区(以字节为单位)的默认设置。
最大发送套接字缓冲区大小(以字节为单位)。
这些参数用于限制从网络代码写入内核日志的警告消息。它们强制执行速率限制,以防止拒绝服务攻击。message_cost 因子越高,写入的消息就越少。message_burst 控制何时丢弃消息。默认设置将警告消息限制为每五秒一条。
当接口接收数据包的速度快于内核处理速度时,在 INPUT 端排队的最大数据包数。
每个套接字允许的最大辅助缓冲区大小。辅助数据是一个 struct cmsghdr 结构序列,附加了数据。
Unix 域套接字的参数
此子目录中只有两个文件。它们控制删除和销毁套接字描述符的延迟。
IPV4 设置。IP 版本 4 仍然是 Unix 网络中最常用的协议。它将在未来几年内被 IP 版本 6 取代,但目前它是互联网的事实标准,并在世界各地的大多数网络环境中使用。由于此协议的重要性,我们将深入了解控制 Linux 内核 Ipv4 子系统行为的子树。
让我们从 /proc/sys/net/ipv4 中的条目开始。
打开 (1) 或关闭 (0),如果内核应忽略所有 ICMP ECHO 请求,或者仅忽略广播和多播地址的请求。
请注意,如果您接受目标地址为广播/多播地址的 ICMP 回显请求,则您的网络可能会被用作针对其他主机的拒绝服务数据包洪泛攻击的利用工具。
设置向特定目标发送 ICMP 数据包的限制。值为零禁用所有限制。任何正值都设置最大数据包速率,单位为百分之一秒(在 Intel 系统上)。
如果主机通过 RARP、BOOTP、DHCP 或类似机制接收到其 IP 配置,则此文件包含数字 1。否则为零。
IPv4 接口的 TTL(生存时间)。这只是数据包可能经过的最大跃点数。
在接口地址更改时启用动态套接字地址重写。这对于 IP 地址不断变化的拨号接口非常有用。
启用或禁用接口之间 IP 数据包的转发。更改此值会将所有其他参数重置为其默认值。如果内核配置为主机或路由器,则它们的默认值会有所不同。
TCP 和 UDP 用于选择本地端口的端口范围。包含两个数字,第一个数字是最低端口,第二个数字是最高本地端口。默认值为 1024-4999。对于高使用率系统,应更改为 32768-61000。
全局开关,用于关闭路径 MTU 发现。也可以由应用程序在每个套接字基础上或在每个路由基础上进行设置。
启用/禁用 IP 伪装的调试。
用于重新组装 IP 分片的最大内存。当为此目的分配了 ipfrag_high_thrash 字节的内存时,分片处理程序将抛弃数据包,直到达到 ipfrag_low_thrash。
IP 分片在内存中保留的时间(以秒为单位)。
此文件控制 IPv4 标头中 ECN 位的使用,这是一项关于显式拥塞通知的新功能,但某些路由器和防火墙会阻止设置了此位的流量,因此如果想要与这些站点通信,可能需要将 0 回显到 /proc/sys/net/ipv4/tcp_ecn。有关更多信息,您可以阅读 RFC2481。
与某些损坏的打印机的错误到错误兼容性。在重传时,尝试发送更大的数据包以解决某些 TCP 堆栈中的错误。可以通过将其设置为零来关闭。
TCP 发送的保持活动探测的数量,直到它确定连接已断开。
启用保持活动后,TCP 发送保持活动消息的频率。默认值为 2 小时。
TCP 连接尝试的初始 SYN 将被重传的次数。不应高于 255。这只是传出连接的超时时间,对于传入连接,重传次数由 tcp_retries1 定义。
在 RFC2018 之后启用选择性确认。
启用 RFC1323 中定义的时间戳。
启用对 TCP 紧急指针字段的严格 RFC793 解释。默认值是使用 BSD 兼容的紧急指针解释,该指针指向紧急数据后的第一个字节。RFC793 解释是使其指向紧急数据的最后一个字节。启用此选项可能会导致互操作性问题。默认情况下禁用。
仅当内核使用 CONFIG_SYNCOOKIES 编译时才有效。当套接字的 syn 后备队列溢出时,发送同步 Cookie。这是为了抵御常见的“syn 洪水攻击”。默认情况下禁用。请注意,套接字后备队列的概念已被放弃。这意味着启用同步 Cookie 的过载服务器可能无法接收可靠的错误消息。
启用 RFC1323 中定义的窗口缩放。
接收最终 FIN 之前的秒数,之后套接字始终关闭。这严格来说违反了 TCP 规范,但为了防止拒绝服务攻击而需要。
指示每个慢速计时器运行发送多少保持活动探测。不应设置得太高以防止突发。
每个套接字后备队列的长度。自 Linux 2.2 以来,listen(2) 中指定的后备队列仅指定已建立套接字的后备队列的长度。当更多连接请求到达时,Linux 开始丢弃数据包。当启用同步 Cookie 时,数据包仍然会得到响应,并且最大队列实际上被忽略。
定义在放弃之前,TCP 连接请求的答复将被重传多少次。
定义在放弃之前,TCP 数据包将被重传多少次。
在这里,您会找到系统知道的每个接口的一个子目录,以及一个名为 all 的目录。all 子目录中的更改会影响所有接口,而其他子目录中的更改仅影响一个接口。所有目录都具有相同的条目
此开关决定内核是否接受 ICMP 重定向消息。如果内核配置为常规主机,则默认值为“yes”,对于路由器配置,则默认值为“no”。
应接受还是拒绝源路由数据包。默认值取决于内核配置。对于路由器,它是“yes”,对于主机,它是“no”。
接受源地址为 0.b.c.d 且目标地址不是此主机的本地数据包。据推测,BOOTP 中继守护程序将捕获并转发此类数据包。默认值为 0。
启用或禁用此接口上的 IP 转发。
记录源地址没有已知路由到内核日志的数据包。
执行多播路由。内核需要使用 CONFIG_MROUTE 编译,并且需要多播路由守护程序。
是否 (1) 执行代理 ARP,或不 (0) 执行。
整数值确定是否应进行源验证。1 表示是,0 表示否。默认情况下禁用,但始终启用本地/广播地址欺骗。如果您在作为网络到 Internet 的唯一连接的路由器上将其设置为 1,则它可以防止针对您的内部网络的欺骗攻击(外部地址仍然可以被欺骗),而无需额外的防火墙规则。
仅接受默认网关列表中列出的网关的 ICMP 重定向消息。默认情况下启用。
如果未设置,则内核不假设此设备上不同的子网可以直接通信。默认设置为“yes”。
确定是否向其他主机发送 ICMP 重定向。
目录 /proc/sys/net/ipv4/route 包含多个文件,用于控制路由问题。
这些参数用于限制从路由代码写入内核日志的警告消息。error_cost 因子越高,写入的消息就越少。error_burst 控制何时丢弃消息。默认设置将警告消息限制为每五秒一条。
写入此文件会导致刷新路由缓存。
用于控制路由缓存垃圾回收算法的频率和行为的值。
路由缓存的最大大小。一旦缓存达到此大小,旧条目将被清除。
刷新路由缓存的延迟。
确定是否应向特定主机发送更多 ICPM 重定向的因素。一旦达到负载限制或最大重定向次数,将不再发送重定向。
重定向的超时时间。在此期间之后,即使由于已达到负载或数量限制而停止,也将再次发送重定向。
网络邻居处理。它包含有关如何处理与直接邻居(连接到同一链路的节点)的连接的设置。正如我们在 conf 目录中看到的那样,有一个 default 子目录,其中包含默认值,每个接口都有一个目录。目录的内容是相同的,唯一的例外是默认设置包含用于设置垃圾回收参数的附加选项。
在接口目录中,您会找到以下条目
用于计算 RFC2461 中指定的随机可达时间值的基本值。
以 jiffies(1/100 秒)表示的时间,用于重传邻居请求消息。用于地址解析和确定邻居是否不可达。
挂起的 arp 请求的最大队列长度 - 在 ARP 地址仍在解析时从其他层接受的数据包数。
以 jiffies(1/100 秒)为单位的邻居请求消息答案的最大随机延迟。尚未实现(Linux 尚不支持任播)。
单播请求的最大重试次数。
多播请求的最大重试次数。
如果邻居可达,则第一次探测的延迟时间。(参见 gc_stale_time)
仅当旧的 ARP/邻居条目至少达到 locktime 时,才会被新的条目替换。这可以防止 ARP 缓存抖动。
在我们拥有代理 ARP 条目的 ARP 请求的应答之前的最大时间(实际时间是随机的 [0..proxytime])。在某些情况下,这用于防止网络泛洪。
延迟代理 arp 计时器的最大队列长度。(参见 proxy_delay)。
确定要发送到用户级 ARP 守护程序的请求数。使用 0 关闭。
确定检查过时 ARP 条目的频率。在 ARP 条目过时后,它将再次被解析(当 IP 地址迁移到另一台机器时很有用)。当 ucast_solicit 大于 0 时,它首先尝试将 ARP 数据包直接发送到已知主机。如果失败且 mcast_solicit 大于 0,则会广播 ARP 请求。
加载 Appletalk 时,保存 Appletalk 配置数据。可配置参数为
我们在使 ARP 条目过期之前保留它的时间量。用于使旧主机老化。
我们将花费尝试解析 Appletalk 地址的时间量。
我们在放弃之前将重新传输查询的次数。
控制检查过期的速率。
保存机器上活动 Appletalk 套接字的列表。字段指示 DDP 类型、本地地址(网络:节点格式)、远程地址、传输挂起队列的大小、接收队列的大小(等待应用程序读取的字节)、状态和拥有套接字的 uid。
列出为 appletalk 配置的所有接口。它显示接口的名称、其 Appletalk 地址、该地址上的网络范围(或第 1 阶段网络的网络号)以及接口的状态。
列出每个已知的网络路由。它列出路由通向的目标(网络)、路由器(可能是直接连接的)、路由标志以及路由正在使用的设备。
IPX 协议在 proc/sys/net 中没有可调值,但它确实提供了 proc/net/ipx。这列出了每个 IPX 套接字,给出了 Novell 格式的本地和远程地址(即 network:node:port)。按照奇怪的 Novell 传统,除了端口之外,所有内容都是十六进制的。Not_Connected 显示用于未绑定到特定远程地址的套接字。Tx 和 Rx 队列大小指示传输和接收的挂起字节数。状态指示套接字所处的状态,uid 是套接字的拥有 uid。
列出所有 IPX 接口。对于每个接口,它给出网络号、节点号,并指示网络是否是主网络。它还指示它绑定到的设备(或内部网络的 Internal)以及帧类型(如果适用)。Linux 支持 802.3、802.2、802.2 SNAP 和 DIX (Blue Book) 以太网帧格式用于 IPX。
表,其中包含 IPX 路由列表。对于每个路由,它给出目标网络、路由器节点(或直接连接)以及内部网络的路由器的网络地址(或已连接)。
SysVIPC 资源(msg、sem、shm)的信息 (2.4)
有关可用和实际使用的 tty 的信息可以在目录 /proc/tty 中找到。您可以在此目录中找到驱动程序和线路规程的条目。
驱动程序及其使用情况列表。
注册的线路规程。
单个 tty 线路的使用统计信息和状态。
要查看当前正在使用哪些 tty,您只需查看文件 /proc/tty/drivers
# cat /proc/tty/drivers serial /dev/cua 5 64-127 serial:callout serial /dev/ttyS 4 64-127 serial pty_slave /dev/pts 143 0-255 pty:slave pty_master /dev/ptm 135 0-255 pty:master pty_slave /dev/pts 142 0-255 pty:slave pty_master /dev/ptm 134 0-255 pty:master pty_slave /dev/pts 141 0-255 pty:slave pty_master /dev/ptm 133 0-255 pty:master pty_slave /dev/pts 140 0-255 pty:slave pty_master /dev/ptm 132 0-255 pty:master pty_slave /dev/pts 139 0-255 pty:slave pty_master /dev/ptm 131 0-255 pty:master pty_slave /dev/pts 138 0-255 pty:slave pty_master /dev/ptm 130 0-255 pty:master pty_slave /dev/pts 137 0-255 pty:slave pty_master /dev/ptm 129 0-255 pty:master pty_slave /dev/pts 136 0-255 pty:slave pty_master /dev/ptm 128 0-255 pty:master pty_slave /dev/ttyp 3 0-255 pty:slave pty_master /dev/pty 2 0-255 pty:master /dev/vc/0 /dev/vc/0 4 0 system:vtmaster /dev/ptmx /dev/ptmx 5 2 system /dev/console /dev/console 5 1 system:console /dev/tty /dev/tty 5 0 system:/dev/tty unknown /dev/vc/%d 4 1-63 console |
请注意,虽然上述文件往往是易于阅读的文本文件,但它们的格式有时可能不易理解。有许多命令的作用仅仅是读取上述文件并对其进行格式化,以便于理解。例如,free 程序读取 /proc/meminfo 并将以字节为单位给出的数量转换为千字节(并添加更多信息)。
系统启动的时间。
内核版本。
视频资源的 BTTV 信息。