Linux系统上2个非常有意思也最特殊的目录/run和/proc的作用以及监测项。
这两个目录都不是普通的文件目录,都是内核文件映射出来与用户的交互,简单的说,每次系统重启或者开机都会产生变化或者重新生成。
掌握这些目录可以很方便的查看比如:主机的硬件配置、CPU的硬件参数、任务及进程信息、内存和磁盘使用情况等等。
如果你使用 df 来检查它,你会看到这样的输出:
$ df -k .
Filesystem 1K-blocks Used Available Use% Mounted on
tmpfs 609984 2604 607380 1% /run
它被识别为 “tmpfs”(临时文件系统),因此我们知道 /run 中的文件和目录没有存储在磁盘上,而只存储在内存中。它们表示保存在内存(或基于磁盘的交换空间)中的数据,它看起来像是一个已挂载的文件系统,这个可以使其更易于访问和管理。
/run 是各种各样数据的家园。例如,如果你查看 /run/user,你会注意到一组带有数字名称的目录。
$ ls /run/user
1000 1002 121
使用长文件列表可以发现这些数字的重要性。
$ ls -l
total 0
drwx------ 5 shs shs 120 Jun 16 12:44 1000
drwx------ 5 dory dory 120 Jun 16 16:14 1002
drwx------ 8 gdm gdm 220 Jun 14 12:18 121
我们看到每个目录与当前登录的用户或显示管理器 gdm 相关。数字代表他们的 UID。每个目录的内容都是运行中的进程所使用的文件。
/run/user 文件只是你在 /run 中找到的一小部分。还有很多其他文件。有一些文件包含了各种系统进程的进程 ID。
$ ls *.pid
acpid.pid atopacctd.pid crond.pid rsyslogd.pid
atd.pid atop.pid gdm3.pid sshd.pid
如下所示,上面列出的 sshd.pid 文件包含 ssh 守护程序(sshd)的进程 ID。
$ cat sshd.pid
1148
$ ps -ef | grep sshd
root 1148 1 0 Jun14 ? 00:00:00 /usr/sbin/sshd -D <==
root 10784 1148 0 12:44 ? 00:00:00 sshd: shs [priv]
shs 10922 10784 0 12:44 ? 00:00:00 sshd: shs@pts/0
root 18109 1148 0 16:13 ? 00:00:00 sshd: dory [priv]
dory 18232 18109 0 16:14 ? 00:00:00 sshd: dory@pts/1
shs 19276 10923 0 16:50 pts/0 00:00:00 grep --color=auto sshd
/run 中的某些子目录只能使用 root 权限访问,例如 /run/sudo。例如,以 root 身份运行我们可以看到一些与真实或尝试使用 sudo 相关的文件:
/run/sudo/ts# ls -l
total 8
-rw------- 1 root dory 112 Jun 16 16:37 dory
-rw------- 1 root shs 168 Jun 17 08:33 shs
为了与 /run 的变化保持一致,一些运行时数据的旧位置现在是符号链接。/var/run 现在是指向 /run 的指针,/var/lock 指向 /run/lock 的指针,可以保证旧的引用按预期工作。
$ ls -l /var
total 52
drwxr-xr-x 2 root root 4096 Jun 17 07:36 backups
drwxr-xr-x 19 root root 4096 Apr 18 13:46 cache
drwxrwsrwt 2 root whoopsie 4096 Jun 13 07:39 crash
drwxr-xr-x 75 root root 4096 Jun 9 15:14 lib
drwxrwsr-x 2 root staff 4096 Oct 16 2017 local
lrwxrwxrwx 1 root root 9 May 14 2018 lock -> /run/lock
drwxrwxr-x 17 root syslog 4096 Jun 17 00:00 log
drwxrwsrwt 2 root mail 4096 Jun 13 12:10 mail
drwxrwsrwt 2 root whoopsie 4096 Jan 5 2018 metrics
drwxr-xr-x 2 root root 4096 Jan 5 2018 opt
lrwxrwxrwx 1 root root 4 May 14 2018 run -> /run
drwxr-xr-x 9 root root 4096 Jun 16 2018 snap
drwxr-xr-x 9 root root 4096 Jun 9 15:14 spool
drwxrwxrwt 8 root root 4096 Jun 17 00:00 tmp
drwxr-xr-x 3 root root 4096 Jan 19 12:14 www
Linux 内核提供了一种通过 /proc 文件系统,在运行时访问内核内部数据结构、改变内核设置的机制。proc文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间。它以文件系统的方式为访问系统内核数据的操作提供接口。
用户和应用程序可以通过proc得到系统的信息,并可以改变内核的某些参数。由于系统的信息,如进程,是动态改变的,所以用户或应用程序读取proc文件时,proc文件系统是动态从系统内核读出所需信息并提交的。下面列出的这些文件或子文件夹,并不是都是在你的系统中存在,这取决于你的内核配置和装载的模块。另外,在/proc下还有三个很重要的目录:net,scsi和sys。 Sys目录是可写的,可以通过它来访问或修改内核的参数,而net和scsi则依赖于内核配置。例如,如果系统不支持scsi,则scsi 目录不存在。
除了以上介绍的这些,还有的是一些以数字命名的目录,它们是进程目录。系统中当前运行的每一个进程都有对应的一个目录在/proc下,以进程的 PID号为目录名,它们是读取进程信息的接口。而self目录则是读取进程本身的信息接口,是一个link。
子文件或子文件夹
/proc/cmdline 载入 kernel 时所下达的相关指令与参数!查阅此文件,可了解指令
是如何启动的!
/proc/cpuinfo 本机的 CPU 的相关信息,包含频率、类型与运算功能等
/proc/devices 这个文件记录了系统各个主要设备的主要设备代号,与 mknod 有关
/proc/filesystems 目前系统已经载入的文件系统
/proc/interrupts 目前系统上面的 IRQ 分配状态。
/proc/ioports 目前系统上面各个设备所配置的 I/O 位址。
/proc/kcore 这个就是内存的大小,建议不要进行读取,很大
/proc/loadavg 根据过去一段时间内CPU和IO的状态得出的负载状态,与uptime命令有关
/proc/meminfo 使用 free 列出的内存信息!
/proc/modules 目前我们的 Linux 已经载入的模块列表,也可以想成是驱动程序!
/proc/mounts 系统已经挂载的数据,就是用 mount 这个指令调用出来的数据!
/proc/swaps 到底系统挂载入的内存,使用掉的 partition 就记录在这里!
/proc/partitions 使用 fdisk -l 会出现目前所有的 partition ,这个文件当中也有记录!
/proc/uptime 就是用 uptime 的时候,会出现的信息!
/proc/version 核心的版本,就是用 uname -a 显示的内容!
/proc/bus/* 一些总线的设备,还有 USB 的设备也记录在此!
/proc/buddyinfo 每个内存区中的每个order有多少块可用,和内存碎片问题有关
/proc/crypto 内核使用的所有已安装的加密密码及细节
/proc/dma 已注册使用的ISA DMA频道列表
/proc/execdomains linux内核当前支持的execution domains
/proc/fb 帧缓冲设备列表,包括数量和控制它的驱动
/proc/filesystems 内核当前支持的文件系统类型
/proc/interrupts x86架构中的每个IRQ中断数
/proc/iomem 每个物理设备当前在系统内存中的映射
/proc/ioports 一个设备的输入输出所使用的注册端口范围
/proc/kmsg 记录内核生成的信息,可以通过/sbin/klogd或/bin/dmesg来处理
/proc/locks 内核锁住的文件列表
/proc/mdstat 多硬盘,RAID配置信息(md=multiple disks)
/proc/meminfo RAM使用的相关信息
/proc/misc 其他的主要设备(设备号为10)上注册的驱动
/proc/modules 所有加载到内核的模块列表,即当前加载了哪些核心模块。
/proc/mounts 系统中使用的所有挂载
/proc/mtrr 系统使用的Memory Type Range Registers (MTRRs)
/proc/partitions 分区中的块分配信息,系统当前挂载硬盘的分区信息
/proc/pci 系统中的PCI设备列表,系统的pci总线信息
/proc/stat 系统的一些状态信息
/proc/slabinfo 系统中所有活动的 slab 缓存信息
/proc/stat 所有的CPU活动信息
/proc/sysrq-trigger 使用echo命令来写这个文件的时候,远程root用户可以执行大多数的系统请求关键命令,就好像在本地终端执行一样。要写入这个文件,需要把/proc/sys/kernel/sysrq不能设置为0。这个文件对root也是不可读的
/proc/uptime 系统已经运行了多久
/proc/version Linux内核版本和gcc版本
/proc/bus 系统总线(Bus)信息,例如pci/usb等
/proc/driver 驱动信息
/proc/fs 文件系统信息
/proc/ide ide设备信息
/proc/irq 中断请求设备信息
/proc/net 网卡设备信息
/proc/scsi scsi设备信息
/proc/tty tty设备信息
/proc/net/dev 显示网络适配器及统计信息
/proc/vmstat 虚拟内存统计信息
/proc/vmcore 内核panic时的内存映像
/proc/diskstats 取得磁盘信息
/proc/schedstat kernel调度器的统计信息
/proc/zoneinfo 显示内存空间的统计信息,对分析虚拟内存行为很有用
以下是/proc目录中进程N的信息
/proc/N pid为N的进程信息
/proc/N/cmdline 进程启动命令
/proc/N/cwd 链接到进程当前工作目录
/proc/N/environ 进程环境变量列表
/proc/N/exe 链接到进程的执行命令文件
/proc/N/fd 包含进程相关的所有的文件描述符
/proc/N/maps 与进程相关的内存映射信息
/proc/N/mem 指代进程持有的内存,不可读
/proc/N/root 链接到进程的根目录
/proc/N/stat 进程的状态
/proc/N/statm 进程使用的内存的状态
/proc/N/status 进程状态信息,比stat/statm更具可读性
/proc/self 链接到当前正在运行的进程
简单总结下一些常用的语句:
1、高亮显示变化的区域
watch -d cat /proc/interrupts
2、/proc/stat提供系统CPU和任务统计信息,如只需要保留各个CPU的信息,则可输入以下命令:
cat /proc/stat |grep ^cpu
3、如果信息太多看不完的话,我们可以使用less或者more命令:
cat /proc/interrupts |more
cat /proc/interrupts |less #按q退出模式
4、top命令的一些使用
1)在输入top命令进入到该模式下可以按大写的M,可以使进程按照内存的使用情况进行排序:
当然还有其他的方法也可以达到同样的效果:
如使用sort进行排序:【用ps可以精确到具体的路径地址】
根据CPU的使用,升序排序
ps aux --sort -pcpu | less
根据MEM的使用,升序排序
ps aux --sort -pmem | less
2)在输入top命令进入到该模式下可以按字母k,可以将对应pid号的进程终止:
3)截取top命令的一些输出信息,请使用以下命令:
top -b -n 1
显示系统的信息并以格式化打印出来,且结果只刷新一次。
参数说明:
-n参数
设置当前屏幕刷新的次数.
-b参数
将top的输出信息编排以适合输出文件的格式输出到屏幕上,可将其写入文本。
5、CPU的一些信息查询
1)查看物理CPU的个数:
cat /proc/cpuinfo | grep "physical id" | sort |uniq | wc -l
2)查看每个物理CPU的中Core的个数(核数):
cat /proc/cpuinfo | grep "cpu cores" |uniq | wc -l
3)查看逻辑CPU的个数:
cat /proc/cpuinfo | grep "processor" | wc -l
4)查看CPU型号:
cat /proc/cpuinfo | grep "name" | cut -d: -f2 | uniq -c