是否有可能禁用/proc伪文件系统,以防止w,ps,top,等等,从展示哪些其他用户在做什么?当然,我仍然希望“其他一切”都能正常工作。有没有可行的方法来做到这一点?
我有一个很短的过程,我想检查环境变量以进行调试。从人类的角度来看,这个过程是即时的。这个例子更好地说明了这一点。
例子
user:~$ ps aux | grep grep
user 2349 0.0 0.0 4384 840 pts/1 S+ 14:47 0:00 grep --color=auto grep
Run Code Online (Sandbox Code Playgroud)
进程的 pid 是 2349。如果我检查环境变量(或其他信息):
#Pretty print of environmental variables#
user:~$ xargs --null --max-args=1 echo < /proc/2349/environ
bash: /proc/2349/environ: No such file or directory
Run Code Online (Sandbox Code Playgroud)
信息随着这个过程消失了。
在运行进程之前要做什么才能在进程完成后列出变量?
在阅读内核文档时,我遇到了 VmPeak 和 VmHWM,这对我来说有点不清楚。VmPeak in/proc/<pid>/status被描述为峰值虚拟内存大小。什么时期的高峰?
对于 VmHWM,也就是峰值驻留集大小(“高水位线”),这段时间是否相同?
我正在尝试监视每个进程的磁盘活动。我发现如何执行此操作的一种方法是读取 /proc/pid/io 文件并将字段与先前读取的字段进行比较。除了我的监控过程似乎只能读取一些 io 文件(例如它没有读取 apache 的权限)之外,这很好用。怎么读别人的io?也许还有更好的方法来实现这个目标?
编辑显然我可以以 root 身份运行该进程,但我想避免这种情况
所以,我一直在研究我的 LPIC-1 的基础知识,我有一个关于 /proc/interrupts
当控制台进入服务器时,我可以看到正在发生的按键记录(每次击键都会增加cat /proc/interrupts | grep i8042计数1:)。
但是,当我ssh进入盒子时,无论我echo荒谬的文字数量多少次,i8042计数都不会增加。
/proc/interrupts通过ssh?访问服务器时是否记录了击键记录?
当我输入 时ps -ef,会显示许多特殊的内核线程进程。
我对内核线程不感兴趣;我只对用户进程/线程感兴趣。
有没有办法隐藏内核线程?
运行以下命令会在每次执行时生成不同的随机输出(这是预期的,考虑到random它在路径中):
cat /proc/sys/kernel/random/uuid
有没有办法修改路径,以便在每次调用时产生静态(非随机)UUID(在每个请求/执行中返回相同的内容而不是随机)?
该/proc/devices文件按主要修订号和名称列出设备。在我的系统上它显示(部分):
Block devices:
259 blkext
7 loop
8 sd
9 md
11 sr
65 sd
66 sd
67 sd
68 sd
69 sd
70 sd
71 sd
128 sd
129 sd
130 sd
131 sd
132 sd
133 sd
134 sd
135 sd
253 device-mapper
254 mdp
Run Code Online (Sandbox Code Playgroud)
那些“sd”设备是什么?第一个(修订号 8)可能是,/dev/sda但其余的没有出现/dev- 没有带有这些主要修订号的设备。
我确实看到了设备列表:
crw-rw---- 1 root tty 7, 128 Jul 29 14:15 vcsa
crw-rw---- 1 root tty 7, 129 Jul 29 14:15 vcsa1
crw-rw---- …Run Code Online (Sandbox Code Playgroud) 我发现在 Linux 中有“真实文件”和“虚拟文件”,真实文件是驻留在硬盘上的文件,而虚拟文件只是由内核表示为文件的数据。
例如,/proc目录中的文件是虚拟文件。
我想了解像这样的函数如何read()知道如何读取真实文件以及如何读取虚拟文件。我创建了下图来显示我对这个主题的理解,如果我的理解有误,请纠正我:
我正在解析/proc/pid/cmdline我的 Linux 系统 (Ubuntu 16.04) 上许多进程的值,并发现虽然大多数条目是空编码的,但正如预期的那样,至少有一个使用空格作为我发现意外的分隔符。
从proc(5) 的文档中,我没有看到任何迹象表明这应该发生。有没有我应该期望空格作为分隔符而不是空值的情况?如果是这样,我在哪里可以找到描述该行为的文档?
这是我尝试为铬浏览器进程之一捕获 cmdline 时看到的内容(请注意,空格字符用于分隔值):
user@host:~$ cat /proc/2721/cmdline
/usr/lib/chromium-browser/chromium-browser --type=gpu-process --field-trial-handle=2073283832741738928,4790986738309707242,131072 --gpu-preferences=GAAAAAAAAAAAAQAAAQAAAAAAAAAAAGAA --gpu-vendor-id=0x15ad --gpu-device-id=0x0405 --gpu-driver-vendor=Mesa --gpu-driver-version=17.2.8 --gpu-driver-date --service-request-channel-token=3778166CAD6E96F44A7268DF1AB1DD53
Run Code Online (Sandbox Code Playgroud)
我希望看到这样的事情(空值作为分隔符),这是我不从系统上的其他进程看:
~$ cat /proc/354/cmdline
vmware-vmblock-fuse/run/vmblock-fuse-orw,subtype=vmware-vmblock,default_permissions,allow_other,dev,suid
Run Code Online (Sandbox Code Playgroud)