Linux系统上2个非常有意思也最特殊的目录/run和/proc的作用以及监测项

Linux系统上2个非常有意思也最特殊的目录/run和/proc的作用以及监测项。

这两个目录都不是普通的文件目录,都是内核文件映射出来与用户的交互,简单的说,每次系统重启或者开机都会产生变化或者重新生成。

掌握这些目录可以很方便的查看比如:主机的硬件配置、CPU的硬件参数、任务及进程信息、内存和磁盘使用情况等等。

一、/run目录

如果你使用 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

二、/proc目录

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

你可能感兴趣的:(服务器,linux,运维,proc,run,监测)