我从这里读到以下命令为我提供了需要写入磁盘的数据量。
\n\ngrep ^Dirty /proc/meminfo\nRun Code Online (Sandbox Code Playgroud)\n\n它特别提到,曾经问自己“如果我按下重置按钮,会丢失多少数据?”
\n\n我想测试上面的命令,所以我做了以下操作。
\n\ndd if=/dev/urandom of=sample.txt bs=1G count=1\nRun Code Online (Sandbox Code Playgroud)\n\n现在,在另一个 shell 中我运行了上述命令。
\n\ngrep ^Dirty /proc/meminfo\nDirty: 44 kB\ngrep ^Dirty /proc/meminfo\nDirty: 36 kB\nRun Code Online (Sandbox Code Playgroud)\n\n但是,如果我使用它的报告进行文件复制cp,
grep Dirty /proc/meminfo\nDirty: 387680 kB\ngrep Dirty /proc/meminfo\nDirty: 609172 kB\nRun Code Online (Sandbox Code Playgroud)\n\n我从这个页面看到Dirty 做了什么。
\n\n\n\n\n脏 \xe2\x80\x94 等待写回磁盘的内存总量(以千字节为单位)。
\n
为什么Dirty不报告任何尺寸dd?
在linux上(4.4.59和4.9.8测试过)运行以下命令会失败:
mkdir -p /tmp/proc
mount -t overlay overlay -o lowerdir=/proc:/tmp/proc /tmp/proc
Run Code Online (Sandbox Code Playgroud)
并且有一条错误消息dmesg:
overlayfs: maximum fs stacking depth exceeded
Run Code Online (Sandbox Code Playgroud)
为什么不能/proc是覆盖文件系统的一层?
如果我替换/proc为/devor /sys,它安装时不会出现问题,所以看起来/proc.
PS 用例是创建一个更安全的chroot环境,我想/dev在. 有 2 个已知的解决方法:/sys/procchroot
mount -t proc -o ro none /tmp/proc. 限制是子安装不会自动映射。不管怎样,我仍然很好奇为什么/dev并且/sys可以很好地使用叠加,但/proc事实并非如此。
该问题是从 stackoverflow迁移的。
我有一个问题 /proc/[PID]/io 和 memmap 我需要分析使用 python 库astropy 的应用程序 IO 。
我遇到的问题之一是 /proc/[PID]/io.io 中的 IO 读/写总字节数不正确。
我有一个脚本copy.sh:
#!/bin/bash
cp huge.fits huge.2.fits
#python copyfits.py
#python copyfitsMemmapOFF.py
sleep 5
cat /proc/$$/io
Run Code Online (Sandbox Code Playgroud)
我注释了cp要为每个测试运行的行和行。
copyfits.py 包含:
from astropy.io import fits
hdulist = fits.open('huge.fits', mode='readonly')
hdulist.writeto('huge.2.fits')
hdulist.close()
Run Code Online (Sandbox Code Playgroud)
copyfitsMemmapOFF.py 包含:
from astropy.io import fits
hdulist = fits.open('huge.fits', mode='readonly', memmap=False)
hdulist.writeto('huge.2.fits')
hdulist.close()
Run Code Online (Sandbox Code Playgroud)
下面是每个解决方案的 IO 结果:
cp huge.fits huge.2.fits
rchar: 9749929202
wchar: 9749551680
Run Code Online (Sandbox Code Playgroud)
python copyfits.py
**rchar: 8399421**
wchar: 9749551685
Run Code Online (Sandbox Code Playgroud)
python copyfitsMemmapOFF.py
rchar: 9757502959 …Run Code Online (Sandbox Code Playgroud) 我正在浏览我的一台 Ubuntu 服务器,想知道proc/文件夹下的数字1-26758是什么。这些端口还是别的什么?
我有一个命令运行了很长时间,我不想打扰它。但是,我想继续检查这个过程(大部分时间是远程的)。我通过像命令不断地监测这过程top,iotop,stat等。该处理是基于终端的方法,该方法不是通过启动screen或tmux或类似。所以检查输出的唯一方法是使用物理访问。
我知道其中/proc包含有关该过程的大量信息。所以我想知道它是否也可以显示输出(甚至只是最后一批输出——字符/字/行)。我搜索了/proc/<pid>/fd,但找不到任何有用的东西。
下面是输出 ls -l /proc/26745/fd/*
lrwx------ 1 user user 64 Oct 28 13:19 /proc/26745/fd/0 -> /dev/pts/17
lrwx------ 1 user user 64 Oct 28 13:19 /proc/26745/fd/1 -> /dev/pts/17
lrwx------ 1 user user 64 Sep 27 22:27 /proc/26745/fd/2 -> /dev/pts/17
Run Code Online (Sandbox Code Playgroud)
任何指针?
我在 Ubuntu 17.04 上列出了进程,注意到以下进程:
root@user-virtual-machine:~# ps xao pid=,ppid=,pgid=,sid=
1603 1 1601 1601
Run Code Online (Sandbox Code Playgroud)
但是进程 1601 不存在。
root@user-virtual-machine:~# ls /proc/1601
ls: cannot access '/proc/1601': No such file or directory
Run Code Online (Sandbox Code Playgroud)
正如你所看到的 /proc/1603/status 仍然引用 1601。
root@user-virtual-machine:~# cat /proc/1603/status
Name: VGAuthService
Umask: 0000
State: S (sleeping)
Tgid: 1603
Ngid: 0
Pid: 1603
PPid: 1
TracerPid: 0
Uid: 0 0 0 0
Gid: 0 0 0 0
FDSize: 64
Groups:
NStgid: 1603
NSpid: 1603
NSpgid: 1601
NSsid: 1601
Run Code Online (Sandbox Code Playgroud)
重要的是,我在主机上(不在容器内)。
怎么可能?如何为不存在的进程设置 setid/setpgid?
这不是如何获取我自己的 IP 地址并将其保存到 shell 脚本中的变量?; 这是尝试恢复How can I list net work devices and ipv4 address on linux without ifconfig/ip command,该命令已被错误地标记为第一个命令的重复项。
那么,在 ip、netstat 或 ifconfig 都不可用的系统中,如何才能看到旧版 IPv4 地址呢?
该系统是一个运行最新 debian 的 docker 容器。
相关但不重复:
alias ll='ls -alF'在 Ubuntu 18.04 和 20.04(Ubuntu在 中定义)上,我看到“软盘驱动器”~/.bashrc设备的以下输出:/dev/fd
为了ls:
Run Code Online (Sandbox Code Playgroud)$ ls /dev/fd 0 1 2 3
为了ll:
Run Code Online (Sandbox Code Playgroud)$ ll /dev/fd lrwxrwxrwx 1 root root 13 Nov 5 11:46 /dev/fd -> /proc/self/fd/
我可以看到/dev/fd是 的符号链接/proc/self/fd/,所以我ll看到:
Run Code Online (Sandbox Code Playgroud)$ ll /proc/self/fd/ total 0 dr-x------ 2 username username 0 Nov 8 19:01 ./ dr-xr-xr-x 9 username username 0 Nov …
在一个终端中,我跑了
$ nc -l -6 ::1 5000
Run Code Online (Sandbox Code Playgroud)
在另一个终端,我跑了
$ cat /proc/net/tcp6
Run Code Online (Sandbox Code Playgroud)
并看到这一行:
0: 00000000000000000000000001000000:1388 00000000000000000000000000000000:0000 ...
Run Code Online (Sandbox Code Playgroud)
为什么说我在听::1:0:0:0而不是在听::1?
我在做某事时正在测试 linux api,但卡在了以下输出上。
[Abhii@localhost net]$ cat /proc/uptime
39135.53 149657.73
Run Code Online (Sandbox Code Playgroud)
根据规范,第一个数字应该是正常运行时间,第二个数字应该是系统保持空闲的时间。
那么为什么前者比后者少???
作为额外的信息,我的版本信息
Linux version 3.5.2-3.fc17.x86_64 (mockbuild@) (gcc version 4.7.0 20120507 (Red Hat 4.7.0-5) (GCC) ) #1 SMP Tue Aug 21 19:06:52 UTC 2012
Run Code Online (Sandbox Code Playgroud)