proc/[pid]の中身を全部読んでみる ~ cwdからloginuidまで ~
概要
こちらに経緯をまとめていますのでご覧いただければ幸いです。
proc/[pid]の中身を全部読んでみる
間違っているよ、ここに詳しい情報が載っているよ、そのディレクトリもう使われていないよ、
など情報有ればコメントいただければ嬉しいです。
# sleep 365d > /dev/null &
[1] 3792
# ls /proc/3792
attr cwd map_files oom_adj schedstat task
autogroup environ maps oom_score sessionid timers
auxv exe mem oom_score_adj setgroups uid_map
cgroup fd mountinfo pagemap smaps wchan
clear_refs fdinfo mounts patch_state stack
cmdline gid_map mountstats personality stat
comm io net projid_map statm
coredump_filter limits ns root status
cpuset loginuid numa_maps sched syscall
# cd /proc/3792
cwd
# ll cwd
lrwxrwxrwx. 1 root root 0 Jan 11 13:12 cwd -> /root
# ll cwd
lrwxrwxrwx. 1 root root 0 Jan 11 13:12 cwd -> /root
プロセスのカレントディレクトリのシンボリックリンクです。
rootユーザーで実行したので/rootになっています。
3792
プロセスは/rootで作業を行うそうです。危なそうですね。
environ
# cat environ
XDG_SESSION_ID=89SHELL=/bin/bashTERM=xtermHISTSIZE=1000USER=rootLS_COLORS=rs=0:di=01;34:ln=01;(省略)
# tr \\0 \\n < environ
XDG_SESSION_ID=89
SHELL=/bin/bash
TERM=xterm
HISTSIZE=1000
USER=root
LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;(省略)
MAIL=/var/spool/mail/root
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
PWD=/root
LANG=en_US.UTF-8
HISTCONTROL=ignoredups
SHLVL=1
HOME=/root
LOGNAME=root
LESSOPEN=||/usr/bin/lesspipe.sh %s
_=/bin/sleep
# cat environ
XDG_SESSION_ID=89SHELL=/bin/bashTERM=xtermHISTSIZE=1000USER=rootLS_COLORS=rs=0:di=01;34:ln=01;(省略)
# tr \\0 \\n < environ
XDG_SESSION_ID=89
SHELL=/bin/bash
TERM=xterm
HISTSIZE=1000
USER=root
LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;(省略)
MAIL=/var/spool/mail/root
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
PWD=/root
LANG=en_US.UTF-8
HISTCONTROL=ignoredups
SHLVL=1
HOME=/root
LOGNAME=root
LESSOPEN=||/usr/bin/lesspipe.sh %s
_=/bin/sleep
環境変数の値です。null文字で区切られているようです。cat
だとわかりません。
ps ex | grep 3792
でも同様の内容が確認できました。
追記
tr \\0 \\n < environ
として\0(NULL)を\n(改行)に変換すると読みやすくなりました。
exe
# ll exe
lrwxrwxrwx. 1 root root 0 Jan 11 13:12 exe -> /usr/bin/sleep
# ll exe
lrwxrwxrwx. 1 root root 0 Jan 11 13:12 exe -> /usr/bin/sleep
実行ファイルのシンボリック
fd
# ll fd
total 0
lrwx------. 1 root root 64 Jan 11 12:49 0 -> /dev/pts/0 (deleted)
l-wx------. 1 root root 64 Jan 11 12:49 1 -> /dev/null
lrwx------. 1 root root 64 Jan 11 14:26 2 -> /dev/pts/0 (deleted)
プロセスがオープンしたファイル各々に対するエントリーを含むサブディレクトリ。 ファイルディスクリプターがファイル名で、 実際のファイルへのシンボリックリンクになっている。 したがって 0 は標準入力、1 は標準出力、2 は標準エラー出力、などとなる。 引用[https://linuxjm.osdn.jp/html/LDP_man-pages/man5/proc.5.html]
# ll fd
total 0
lrwx------. 1 root root 64 Jan 11 12:49 0 -> /dev/pts/0 (deleted)
l-wx------. 1 root root 64 Jan 11 12:49 1 -> /dev/null
lrwx------. 1 root root 64 Jan 11 14:26 2 -> /dev/pts/0 (deleted)
プロセスがオープンしたファイル各々に対するエントリーを含むサブディレクトリ。 ファイルディスクリプターがファイル名で、 実際のファイルへのシンボリックリンクになっている。 したがって 0 は標準入力、1 は標準出力、2 は標準エラー出力、などとなる。 引用[https://linuxjm.osdn.jp/html/LDP_man-pages/man5/proc.5.html]
fd := File Descriptorの略だそうです。
これ便利ですね。入出力確認したいときに使えそう
fdinfo
# ll fdinfo/
total 0
-r--------. 1 root root 0 Jan 11 12:49 0
-r--------. 1 root root 0 Jan 11 12:49 1
-r--------. 1 root root 0 Jan 11 12:49 2
# cat fdinfo/0 fdinfo/1 fdinfo/2
pos: 0
flags: 0100002
mnt_id: 23
pos: 0
flags: 0100001
mnt_id: 20
pos: 0
flags: 0100002
mnt_id: 23
# ll fdinfo/
total 0
-r--------. 1 root root 0 Jan 11 12:49 0
-r--------. 1 root root 0 Jan 11 12:49 1
-r--------. 1 root root 0 Jan 11 12:49 2
# cat fdinfo/0 fdinfo/1 fdinfo/2
pos: 0
flags: 0100002
mnt_id: 23
pos: 0
flags: 0100001
mnt_id: 20
pos: 0
flags: 0100002
mnt_id: 23
上記の情報があれば、プロセスがファイルディスクリプタを特定できるようです。
gid_map,uid_map
# cat gid_map
0 0 4294967295
# cat uid_map
0 0 4294967295
# cat gid_map
0 0 4294967295
# cat uid_map
0 0 4294967295
ユーザー名前空間内外で異なるUID,GIDを利用するために必要なマッピング情報を記述するようです。こちらが参考になりそうなので後で読みます。
https://gihyo.jp/admin/serial/01/linux_containers/0016
io
# cat io
rchar: 2012
wchar: 0
syscr: 7
syscw: 0
read_bytes: 0
write_bytes: 0
cancelled_write_bytes: 0
このファイルは、 プロセスの I/O 統計情報を表示する。
...
rchar: 読み出し文字数
wchar: 書き込み文字数
syscr: 読み出しシステムコール数
syscw: 書き込みシステムコール数
read_bytes: 読み出しバイト数
write_bytes: 書き込みバイト数
cancelled_write_bytes:
...(一部略)
https://linuxjm.osdn.jp/html/LDP_man-pages/man5/proc.5.html
# cat io
rchar: 2012
wchar: 0
syscr: 7
syscw: 0
read_bytes: 0
write_bytes: 0
cancelled_write_bytes: 0
このファイルは、 プロセスの I/O 統計情報を表示する。
...
rchar: 読み出し文字数
wchar: 書き込み文字数
syscr: 読み出しシステムコール数
syscw: 書き込みシステムコール数
read_bytes: 読み出しバイト数
write_bytes: 書き込みバイト数
cancelled_write_bytes:
...(一部略)
https://linuxjm.osdn.jp/html/LDP_man-pages/man5/proc.5.html
最後のは「書き込みに失敗したbyte数」なはず。
limits
# cat limits
Limit Soft Limit Hard Limit Units
Max cpu time unlimited unlimited seconds
Max file size unlimited unlimited bytes
Max data size unlimited unlimited bytes
Max stack size 8388608 unlimited bytes
Max core file size 0 unlimited bytes
Max resident set unlimited unlimited bytes
Max processes 2288 2288 processes
Max open files 1024 4096 files
Max locked memory 65536 65536 bytes
Max address space unlimited unlimited bytes
Max file locks unlimited unlimited locks
Max pending signals 2288 2288 signals
Max msgqueue size 819200 819200 bytes
Max nice priority 0 0
Max realtime priority 0 0
Max realtime timeout unlimited unlimited us
# cat limits
Limit Soft Limit Hard Limit Units
Max cpu time unlimited unlimited seconds
Max file size unlimited unlimited bytes
Max data size unlimited unlimited bytes
Max stack size 8388608 unlimited bytes
Max core file size 0 unlimited bytes
Max resident set unlimited unlimited bytes
Max processes 2288 2288 processes
Max open files 1024 4096 files
Max locked memory 65536 65536 bytes
Max address space unlimited unlimited bytes
Max file locks unlimited unlimited locks
Max pending signals 2288 2288 signals
Max msgqueue size 819200 819200 bytes
Max nice priority 0 0
Max realtime priority 0 0
Max realtime timeout unlimited unlimited us
プロセスのリソース制限についてまとめられています。
loginuid
# cat loginuid
1000
# cat loginuid
1000
uid 1000って誰だろう
# cat /etc/passwd | grep 1000
inahy:x:1000:1001::/home/inahy:/bin/bash
sshログイン時の自分のuidでした。現状は[inahy]->[root]にsuしている状態です。
何に使うんでしょうか。
所感
体調悪くてコピペ作業になってしまいました。
のちに加筆修正したいと思います。
参考
http://man7.org/linux/man-pages/man5/proc.5.html
https://gihyo.jp/admin/serial/01/linux_containers/0016
http://manpages.ubuntu.com/manpages/bionic/ja/man5/proc.5.html
Author And Source
この問題について(proc/[pid]の中身を全部読んでみる ~ cwdからloginuidまで ~), 我々は、より多くの情報をここで見つけました https://qiita.com/ihym/items/7c92c92d3ae1e896a11b著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .