- 投稿日:2020-01-12T22:06:55+09:00
Yoctoでrecipeの追加(ファイルのコピーのみをするレシピの追加)
はじめに
Yoctoを使っていて、「単純にファイルをroot fsにコピーするだけのレシピってどうやって書くの?」と思って調べ、作ったレシピを記載します。
やりたいこと
ファイル、ディレクトリをroot fsにコピーしたい。
ここで言うファイル、ディレクトリはレシピでビルドされるコードではない。
単純にコピーをしたいただのファイル。環境準備
zeusを使用します。
https://git.yoctoproject.org/cgit/cgit.cgi/poky/log/?h=zeusconf/local.conf
MACHINEもなんでもいいのですが、qemu用の環境を選択。
ここではarm64環境としています。MACHINE ?= "qemuarm64"作成するレシピ
$ tree meta-mylayer/ meta-mylayer/ ├── COPYING.MIT ├── README ├── conf │ └── layer.conf └── recipes-myhellobin └── myhellobin ├── myhellobin │ ├── hello.bin <------- 適当なファイル(コピーするだけのファイル) │ └── hoge.tar.gz <------- 適当なファイル(コピーするだけのファイル) └── myhellobin.bbhoge.tar.gz
hoge.tar.gz の中身は以下。適当なテキストファイルがあるのみ。
$ tree hoge hoge ├── hoge01.txt └── hoge02.txt参考にしたレシピ
既存のレシピを探したら /etc にファイルをコピーするようなレシピがあったのでこちらを参考にした。
base-files_3.0.14.bbmyhellobin.bb
base-files_3.0.14.bb を参考にした myhellobin.bb がこちら。
hello.bin を /home/rootに、
hoge ディレクトリを /home/root, /etc, /usr/lib にコピーするのみ。SUMMARY = "copy files" SECTION = "BASE" LICENSE = "MIT" LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302" SRC_URI = "file://hello.bin \ file://hoge.tar.gz \ " S = "${WORKDIR}" INHIBIT_DEFAULT_DEPS = "1" do_install() { install -d ${D}/home/root install -d ${D}/etc install -d ${D}/usr/lib install -m 0755 ${WORKDIR}/hello.bin ${D}/home/root cp -r ${WORKDIR}/hoge ${D}/home/root cp -r ${WORKDIR}/hoge ${D}/etc cp -r ${WORKDIR}/hoge ${D}/usr/lib } FILES_${PN} = "/"最初、hogeディレクトリのコピーはtarコマンドで
tar vxf ${WORKDIR}/hoge.tar.gz -C ${D}/home/rootとか書けばのかなと思ったのですが、bitbakeのデフォルトの動作(?)で勝手にworkディレクトリ内に展開されてしまうのでcpコマンドを使用。
メモ
INHIBIT_DEFAULT_DEPS
https://www.yoctoproject.org/docs/latest/ref-manual/ref-manual.html#var-INHIBIT_DEFAULT_DEPS
Prevents the default dependencies, namely the C compiler and standard C library (libc), from being added to DEPENDS. > This variable is usually used within recipes that do not require any compilation using the C compiler.
Set the variable to "1" to prevent the default dependencies from being added.
コンパイラを使用しないレシピでは 1 を設定する、ということですかね。
- 投稿日:2020-01-12T17:36:25+09:00
CentOS8 VirtualBoxへのインストール
このメモに書いてあること
- CentOS8 インストールの流れ
- インストール画面が見切れる問題への対処方法
- VirtualBox Guest Additions のインストール方法
- IPv6 の無効化方法:sysctl の場合
- IPv6 の無効化方法:kernel boot option の場合
インストール条件
設定項目 このメモでの設定値 備考 ソフトウェアの選択 サーバ(GUI使用) 初期値 hostname cent8.example.co.jp rootパスワード 一般ユーザID user01 一般ユーザパスワード インストール先PC VirtualBox 仮想マシン VBoxGuestAdditions を導入 日本語入力環境 日本語入力環境を設定 IPv6 無効化 インストール
インストール概要 (項1~3は失敗例です。項4から開始してください)
普通にインストーラーを起動するとこういう風に画面が切れてしまいます。
インストール開始
Install CentOS Linux 8.0.1905 を選択した状態で Tab を押してメニューを表示
末尾に vga=773 を追記してインストーラを起動してください。
インストール概要
時刻と日付
インストール先(ディスク および 必要であればパーティション設定)
KDUMP無効化(自宅サーバならKDUMPが取れても解析しないよね?)
ネットワークとホスト名(DHCPでもホスト名位設定しましょう)
KDUMP 無効化
kdumpを有効にする のチェックを外す
必要な方はチェックを外さず、標準設定を受け入れてもいいと思います。
ユーザの作成
作成するユーザの情報を指定
私は "このユーザを管理者にする" をチェックしてここで作成したユーザで作業してます。
VirtualBox Guest Additons インストール
必要なパッケージ追加
VirtualBox Guest Additions インストールの為に開発環境のインストールを行う
最初、VBoxGuestAdditions のインストールに失敗したのでsetup.logを見ると以下のモジュールを要求していたので、
開発環境と一緒にインストールしてます。
libelf-dev lebelf-devel or elfutils-libelf-devel[user01@centos8 ~] sudo dnf group install -y "Development Tools" [user01@centos8 ~] sudo dnf install -y elfutils-libelf-develアップデートの実施
大抵の場合、追加インストールされた kernel-header と稼働中のkernelにずれが出来ます。
アップデートを実施してパッケージのバージョンを揃えましょう。[user01@centos8 ~] sudo dnf clean all [user01@centos8 ~] sudo dnf check-update [user01@centos8 ~] sudo dnf -y upgrade [user01@centos8 ~] sudo shutdown -r nowVirtualBox Guest Additions のインストール1
Guest Additions CDイメージの挿入を選択
VirtualBox Guest Additions のインストール2
VBox_GAs_XXX の画面が出たら 実行する をクリックしてください。
画面が表示されない場合以下のコマンドでインストールを実行してください。[user01@centos8 ~] sudo /run/media/user01/Vbox_GAs_6.0.14/VBoxLinuxAdditions.run [user01@centos8 ~] sudo shutdown -r nowVirtualBox Guest Additions のインストール3
認証が要求された場合、認証情報を入力してください。
VirtualBox Guest Additions のインストール4
インストールが完了したらOSを再起動して完了です。
IPv6無効化
方法1:sysctl での無効化
sysctl.conf での IPv6無効化設定
[user01@cent8 ~]$ sudo vi /etc/sysctl.d/ipv6.conf net.ipv6.conf.all.disable_ipv6 = 1 net.ipv6.conf.default.disable_ipv6 = 1 [user01@cent8 ~]$ sudo sysctl --load /etc/sysctl.d/ipv6.confNetworkManager でのIPv6無効化設定
NetworkManagerを利用している場合 OSを再起動したり コマンドでnicの再起動を行うと、
IPv6が有効化されてしまいます。
NetworkManagerがIPv6を有効化しないように設定します。
(enp0s3 の部分は自サーバのNIC名に置き換えてください)[user01@cent8 ~]$ nmcli connection show enp0s3 |grep ipv6.method ipv6.method: auto [user01@cent8 ~]$ sudo nmcli connection modify enp0s3 ipv6.method ignore [user01@cent8 ~]$ nmcli connection show enp0s3 |grep ipv6.method ipv6.method: ignore [user01@cent8 ~]$方法2:Kernel Boot Option での無効化
GRUB_CMDLINE_LINUX 行の末尾に "ipv6.disable=1" を追記してください。
[user01@cent8 ~]$ sudo vi /etc/default/grub GRUB_TIMEOUT=5 GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)" GRUB_DEFAULT=saved GRUB_DISABLE_SUBMENU=true GRUB_TERMINAL_OUTPUT="console" GRUB_CMDLINE_LINUX="resume=/dev/mapper/cl-swap rd.lvm.lv=cl/root rd.lvm.lv=cl/swap rhgb quiet ipv6.disable=1" GRUB_DISABLE_RECOVERY="true" GRUB_ENABLE_BLSCFG=true [user01@cent8 ~]$Grub設定を反映
ls で確認したリンク先を指定して grub2-mkconfig を実行してください。
リンク先が2カ所あった場合 grub2-mkconfig も二回実行してください。[user01@cent8 ~]$ ls -lh /etc/grub*.cfg lrwxrwxrwx. 1 root root 22 10月 3 02:01 /etc/grub2.cfg -> ../boot/grub2/grub.cfg [user01@cent8 ~]$ sudo grub2-mkconfig -o /boot/grub2/grub.cfg Generating grub configuration file ... done [user01@cent8 ~]$共通設定
sysctl/kernel boot option のどちらでIPv6を停止した場合でも共通で行う設定です。
/etc/hosts から IPv6 エントリを削除
IPv6 のエントリを削除するかコメントアウトしましょう。[user01@cent8 ~]$ cat /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ##::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 [user01@cent8 ~]$/etc/netconfig から IPv6 エントリを削除
エラーメッセージの抑止です。
udp6/tcp6 の行削除するかコメントアウトしましょう。[user01@cent8 ~]$ sudo vi /etc/netconfig # # The network configuration file. This file is currently only used in # conjunction with the TI-RPC code in the libtirpc library. # # Entries consist of: # # <network_id> <semantics> <flags> <protofamily> <protoname> \ # <device> <nametoaddr_libs> # # The <device> and <nametoaddr_libs> fields are always empty in this # implementation. # udp tpi_clts v inet udp - - tcp tpi_cots_ord v inet tcp - - ##udp6 tpi_clts v inet6 udp - - ##tcp6 tpi_cots_ord v inet6 tcp - - rawip tpi_raw - inet - - - local tpi_cots_ord - loopback - - - unix tpi_cots_ord - loopback - - - [user01@cent8 ~]$参考
- 投稿日:2020-01-12T17:30:08+09:00
CentOS 古い kernelを整理する & 増殖させない
この記事に書いてある事
- updateを繰り返しているうちに増えてしまう kernelを整理する
- 増えすぎないように設定する方法
増えすぎたkernelの整理
CentOS6 / 7
- package-cleanup コマンドを使って整理
kernelを新しい方から二つ残して後を消す場合[user01@centos7 ~]$ sudo package-cleanup --oldkernels --count=2CentOS8
- dnf で installonly_limit 以上に古いパッケージを削除する
コマンドラインに kernel に関する設定はされていませんが、大抵の場合 installonly に設定されているのはkernel関連だけです。
dnf repoquery --installonly で確認後にremove --oldinstallonly を実行してください。
ただ、手元のCentOS8はinstallonly_limit=3に設定されているのであまり整理が必要な状況にならない気がします。[user01@cent8 ~]$ dnf repoquery --installonly [user01@cent8 ~]$ sudo dnf -y remove --oldinstallonlykernelが増えすぎないように設定する
CentOS6 / 7
/etc/yum.conf の installonly_limit= で保持する世代数を指定
0に設定すると無制限になります。通常 5に設定されているようです。[user01@centos7 ~]$ sudo vi /etc/yum.conf [main] cachedir=/var/cache/yum/$basearch/$releasever keepcache=0 debuglevel=2 logfile=/var/log/yum.log exactarch=1 obsoletes=1 gpgcheck=1 plugins=1 installonly_limit=5 bugtracker_url=http://bugs.centos.org/set_project.php?project_id=23&ref=http://bugs.centos.org/bug_report_page.php?category=yum distroverpkg=centos-releaseCentOS8
/etc/dnf/dnf.conf の installonly_limit= で保持する世代数を指定
ただし 1,0 に設定すると無制限とみなされます。2が最低の設定値になります。[main] gpgcheck=1 installonly_limit=3 clean_requirements_on_remove=True best=True [user01@cent8 ~]$
- 投稿日:2020-01-12T17:07:47+09:00
proc/[pid]の中身を全部読んでみる ~ setgroupsからwchanまで ~
概要
こちらに経緯をまとめていますのでご覧いただければ幸いです。
proc/[pid]の中身を全部読んでみる
proc/[pid]の中身を全部読んでみる ~ attrからcpusetまで ~
proc/[pid]の中身を全部読んでみる ~ cwdからloginuidまで ~
proc/[pid]の中身を全部読んでみる ~ oom_adjからsessionidまで ~
間違っているよ、ここに詳しい情報が載っているよ、そのディレクトリもう使われていないよ、
など情報有ればコメントいただければ嬉しいです。# 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/3792setgroups
# cat setgroups allowallowになっているとsetgroupsシステムコールが利用できるようです。
setgroupsは補助グループのリストを返してくれるそうです。なんのことでしょう。
いつか役に立つと信じて覚えておきます。smaps
cat smaps 00400000-00406000 r-xp 00000000 08:01 16801948 /usr/bin/sleep Size: 24 kB Rss: 0 kB Pss: 0 kB Shared_Clean: 0 kB Shared_Dirty: 0 kB Private_Clean: 0 kB Private_Dirty: 0 kB Referenced: 0 kB Anonymous: 0 kB AnonHugePages: 0 kB Swap: 0 kB KernelPageSize: 4 kB MMUPageSize: 4 kB Locked: 0 kB VmFlags: rd ex mr mp me dw sd 00606000-00607000 r--p 00006000 08:01 16801948 /usr/bin/sleep Size: 4 kB ...これも利用しているメモリの情報のようですね。メモリ管理は大変そうです。どれを見ればいいのでしょうか。
stack
# cat stack [<ffffffffaa2cb09b>] hrtimer_nanosleep+0xbb/0x180 [<ffffffffaa2cb1f6>] SyS_nanosleep+0x96/0xb0 [<ffffffffaa98dede>] system_call_fastpath+0x25/0x2a [<ffffffffffffffff>] 0xffffffffffffffffメモリ上のスタックに積まれている情報のようです。
stat
# cat stat 3792 (sleep) S 1 3792 2132 0 -1 1077944320 284 0 0 0 0 0 0 0 20 0 1 0 31848330 110546944 65 18446744073709551615 4194304 4218500 140735872847584 140735872847112 140243604047856 0 0 0 0 18446744072269639835 0 0 17 0 0 0 0 0 0 6319400 6320704 8036352 140735872850184 140735872850195 140735872850195 140735872851949 0statm
# cat statm 26989 65 47 6 0 78 0ページ単位で測定したメモリ使用量についての情報だそうです。
status
# cat status Name: sleep Umask: 0022 State: S (sleeping) Tgid: 3792 Ngid: 0 Pid: 3792 PPid: 1 TracerPid: 0 Uid: 0 0 0 0 Gid: 0 0 0 0 FDSize: 256 Groups: 0 VmPeak: 107956 kB VmSize: 107956 kB ...プロセスの基本情報や稼働状況が見れるようです。たぶんこれだけ見たら大体の状況はつかめるようです。
syscall
# cat syscall 35 0x7fff9fb54d10 0x0 0x0 0x7fff9fb54760 0x0 0x0 0x7fff9fb54d08 0x7f8d023387f0実行しているシステムコール、スタックポインタ、プログラムカウンタなどのアドレスが記載されているようです。
task
# ll task/ total 0 dr-xr-xr-x. 7 root root 0 Jan 12 04:48 3792 # ls task/3792/ attr cpuset io net patch_state setgroups uid_map auxv cwd limits ns personality smaps wchan cgroup environ loginuid numa_maps projid_map stack children exe maps oom_adj root stat clear_refs fd mem oom_score sched statm cmdline fdinfo mountinfo oom_score_adj schedstat status comm gid_map mounts pagemap sessionid syscall
3792
プロセスの中に同じようなファイルがありました。プロセスとスレッドの関係のようです。timers
このプロセスが持つタイマーのリストを表示されるようです。
この環境ではcat timers
では何も表示されませんでした。uid_map
こちらは以前
gid_map
で紹介しましたので省略しますwchan
# cat wchan hrtimer_nanosleepwait channelの略っぽい。
これ以上の情報が分からなかった所感
途中からわからないしか書くことがなくなって地獄でしたが、
とりあえず書き上げることが目標だったので2日で書き抜きました。
後日に回すと二度と手を付けない自信があったので根気で乗り切りました。
わかる情報が増え次第、情報を追加していけたらなと思います。参考
https://linuxjm.osdn.jp/html/LDP_man-pages/man5/proc.5.html
http://man7.org/linux/man-pages/man7/user_namespaces.7.html
http://man7.org/linux/man-pages/man2/setgroups.2.html
- 投稿日:2020-01-12T15:59:09+09:00
proc/[pid]の中身を全部読んでみる ~ oom_adjからschedまで ~
概要
こちらに経緯をまとめていますのでご覧いただければ幸いです。
proc/[pid]の中身を全部読んでみる
proc/[pid]の中身を全部読んでみる ~ attrからcpusetまで ~
proc/[pid]の中身を全部読んでみる ~ cwdからloginuidまで ~
proc/[pid]の中身を全部読んでみる ~ map_filesからnuma_mapsまで ~
間違っているよ、ここに詳しい情報が載っているよ、そのディレクトリもう使われていないよ、
など情報有ればコメントいただければ嬉しいです。# 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/3792oom_adj,oom_score,oom_score_adj
# cat oom_adj 0 [root@test-sv 3792]# cat oom_score 0 [root@test-sv 3792]# cat oom_score_adj 0LinuxカーネルにはOOM(Out Of Memory) Killerという仕組みがあり、 メモリ(RAM)が枯渇しシステムが動作不能となる恐れがある場合、 メモリリソースを多く使用しているプロセスを強制的に停止させ、メモリを確保します。
運用上重要なプロセスである場合や負荷試験時など、 OOM Killerの対象として欲しくないプロセスがある場合には、 設定を行うことで、OOM Killerの対象から外すことができます。https://users.atmark-techno.com/blog/1913/2767oom_killer スコアを調整して、強制終了するプロセスの優先度を設定することもできます。/proc/PID/ には、oom_adj 及び oom_score という名前の付いた 2 つのツールがあります。oom_adj の有効なスコアは、-16 から +15 までの範囲内になります。現行の oom_killer スコアは、そのプロセスの oom_score で確認して下さい。oom_killer は、スコアが最も高いプロセスを最初に強制終了します。
以下の例では、PID が 12465 のプロセスの oom_score of a process を調整し、oom_killer によって強制終了される優先度を低くします。
https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/6/html/deployment_guide/s2-proc-pidらしいです。ためになりました。
pagemap
# cat pagemap 釞 ・pagemap ファイルは各仮想ページがどの物理ページに対応しているかを保持している特殊ファイルです.
http://mmi.hatenablog.com/entry/2017/05/01/215921だそうです。安易に
cat
した途端、・
が点滅し始めました。怖かったですpatch_state
# cat patch_state -1現在あてられているパッチの状態を示しているそうです。
-1はあてられていないことを示すそうです。
...いつからいつまでの状態のことを言っているんでしょうか。不明です。personality
# cat personality 00000000This read-only file exposes the process's execution domain, as set by personality(2). The value is displayed in hexadecimal notation.
実行ドメインというものがあって、それが8進数で記載してあるそうです。オール0なので使われていなさそうですね。
projid_map
# cat projid_map 0 0 4294967295The /etc/projid file provides a mapping between numeric project identifiers
and a simple human readable name (similar relationship to the one that exists between usernames and uids).
http://man7.org/linux/man-pages/man5/projid.5.htmlproject - id 間のmapのようですね。
useridとusernameを結びつけるのと同じようなマッピングをしているらしい。本当か?root
# ll (略) lrwxrwxrwx. 1 root root 0 Jan 12 05:09 root -> /言わずもがなrootのパスです。
chroot
されていると変わるようです。sched
cat sched sleep (3792, #threads: 1) ------------------------------------------------------------------- se.exec_start : 318459004.030016 se.vruntime : 15734302.289257 se.sum_exec_runtime : 1.437900 se.nr_migrations : 0 nr_switches : 1 nr_voluntary_switches : 1 nr_involuntary_switches : 0 se.load.weight : 1024 policy : 0 prio : 120 clock-delta : 51 mm->numa_scan_seq : 0 numa_migrations, 0 numa_faults_memory, 0, 0, 1, 0, -1 numa_faults_memory, 1, 0, 0, 0, -1スケジュール情報が載っているようです。
qiitaに/proc/<pid>/schedの詳細が書いてあるとてもいい記事があったのでそれを読んで勉強します。
リンクは貼っていいかわからないので貼りません。所感
英語が読めないことと、ソースコードが読めないことがつらいです。
参考
http://www.usupi.org/sysad/238.html
https://linuxjm.osdn.jp/html/LDP_man-pages/man5/proc.5.html
http://man7.org/linux/man-pages/man5/proc.5.html
https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/6/html/deployment_guide/s2-proc-pid
https://github.com/torvalds/linux/blob/master/Documentation/filesystems/proc.txt
- 投稿日:2020-01-12T15:59:09+09:00
proc/[pid]の中身を全部読んでみる ~ oom_adjからsessionidまで ~
概要
こちらに経緯をまとめていますのでご覧いただければ幸いです。
proc/[pid]の中身を全部読んでみる
proc/[pid]の中身を全部読んでみる ~ attrからcpusetまで ~
proc/[pid]の中身を全部読んでみる ~ cwdからloginuidまで ~
proc/[pid]の中身を全部読んでみる ~ map_filesからnuma_mapsまで ~
間違っているよ、ここに詳しい情報が載っているよ、そのディレクトリもう使われていないよ、
など情報有ればコメントいただければ嬉しいです。# 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/3792oom_adj,oom_score,oom_score_adj
# cat oom_adj 0 [root@test-sv 3792]# cat oom_score 0 [root@test-sv 3792]# cat oom_score_adj 0LinuxカーネルにはOOM(Out Of Memory) Killerという仕組みがあり、 メモリ(RAM)が枯渇しシステムが動作不能となる恐れがある場合、 メモリリソースを多く使用しているプロセスを強制的に停止させ、メモリを確保します。
運用上重要なプロセスである場合や負荷試験時など、 OOM Killerの対象として欲しくないプロセスがある場合には、 設定を行うことで、OOM Killerの対象から外すことができます。https://users.atmark-techno.com/blog/1913/2767oom_killer スコアを調整して、強制終了するプロセスの優先度を設定することもできます。/proc/PID/ には、oom_adj 及び oom_score という名前の付いた 2 つのツールがあります。oom_adj の有効なスコアは、-16 から +15 までの範囲内になります。現行の oom_killer スコアは、そのプロセスの oom_score で確認して下さい。oom_killer は、スコアが最も高いプロセスを最初に強制終了します。
以下の例では、PID が 12465 のプロセスの oom_score of a process を調整し、oom_killer によって強制終了される優先度を低くします。
https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/6/html/deployment_guide/s2-proc-pidらしいです。ためになりました。
pagemap
# cat pagemap 釞 ・pagemap ファイルは各仮想ページがどの物理ページに対応しているかを保持している特殊ファイルです.
http://mmi.hatenablog.com/entry/2017/05/01/215921だそうです。安易に
cat
した途端、・
が点滅し始めました。怖かったです# ll | grep pagemap -r--r--r--. 1 root root 0 Jan 12 05:09 pagemapこちらも読み取り専用のファイルでした。
patch_state
# cat patch_state -1現在あてられているパッチの状態を示しているそうです。
-1はあてられていないことを示すそうです。
...いつからいつまでの状態のことを言っているんでしょうか。不明です。personality
# cat personality 00000000This read-only file exposes the process's execution domain, as set by personality(2). The value is displayed in hexadecimal notation.
実行ドメインというものがあって、それが8進数で記載してあるそうです。オール0なので使われていなさそうですね。
projid_map
# cat projid_map 0 0 4294967295The /etc/projid file provides a mapping between numeric project identifiers
and a simple human readable name (similar relationship to the one that exists between usernames and uids).
http://man7.org/linux/man-pages/man5/projid.5.htmlproject - id 間のmapのようですね。
useridとusernameを結びつけるのと同じようなマッピングをしているらしい。本当か?root
# ll (略) lrwxrwxrwx. 1 root root 0 Jan 12 05:09 root -> /言わずもがなrootのパスです。
chroot
されていると変わるようです。sched
cat sched sleep (3792, #threads: 1) ------------------------------------------------------------------- se.exec_start : 318459004.030016 se.vruntime : 15734302.289257 se.sum_exec_runtime : 1.437900 se.nr_migrations : 0 nr_switches : 1 nr_voluntary_switches : 1 nr_involuntary_switches : 0 se.load.weight : 1024 policy : 0 prio : 120 clock-delta : 51 mm->numa_scan_seq : 0 numa_migrations, 0 numa_faults_memory, 0, 0, 1, 0, -1 numa_faults_memory, 1, 0, 0, 0, -1スケジュール情報が載っているようです。
qiitaに/proc/<pid>/schedの詳細が書いてあるとてもいい記事があったのでそれを読んで勉強します。
リンクは貼っていいかわからないので貼りません。schedstat
# cat schedstat 1437900 472415 1一番左は
sched
のse.sum_exec_runtime : 1.437900
っぽいですが、それ以外はわかりません。sessionid
# cat sessionid 89プロセスはプロセスID(PID)とセッションID(SID)を持つそうで、それが書いてあるようです。
所感
英語が読めないことと、ソースコードが読めないことがつらいです。
参考
http://www.usupi.org/sysad/238.html
https://linuxjm.osdn.jp/html/LDP_man-pages/man5/proc.5.html
http://man7.org/linux/man-pages/man5/proc.5.html
https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/6/html/deployment_guide/s2-proc-pid
https://github.com/torvalds/linux/blob/master/Documentation/filesystems/proc.txt
- 投稿日:2020-01-12T14:48:29+09:00
proc/[pid]の中身を全部読んでみる ~ map_filesからnuma_mapsまで ~
概要
こちらに経緯をまとめていますのでご覧いただければ幸いです。
proc/[pid]の中身を全部読んでみる
proc/[pid]の中身を全部読んでみる ~ attrからcpusetまで ~
proc/[pid]の中身を全部読んでみる ~ cwdからloginuidまで ~間違っているよ、ここに詳しい情報が載っているよ、そのディレクトリもう使われていないよ、
など情報有ればコメントいただければ嬉しいです。# 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/3792map_files
# ll map_files/ total 0 lr--------. 1 root root 64 Jan 12 04:15 400000-406000 -> /usr/bin/sleep lr--------. 1 root root 64 Jan 12 04:15 606000-607000 -> /usr/bin/sleep lr--------. 1 root root 64 Jan 12 04:15 607000-608000 -> /usr/bin/sleep lr--------. 1 root root 64 Jan 12 04:15 7f8cfbd49000-7f8d02273000 -> /usr/lib/locale/locale-archive lr--------. 1 root root 64 Jan 12 04:15 7f8d02273000-7f8d02436000 -> /usr/lib64/libc-2.17.so lr--------. 1 root root 64 Jan 12 04:15 7f8d02436000-7f8d02636000 -> /usr/lib64/libc-2.17.so lr--------. 1 root root 64 Jan 12 04:15 7f8d02636000-7f8d0263a000 -> /usr/lib64/libc-2.17.so lr--------. 1 root root 64 Jan 12 04:15 7f8d0263a000-7f8d0263c000 -> /usr/lib64/libc-2.17.so lr--------. 1 root root 64 Jan 12 04:15 7f8d02641000-7f8d02663000 -> /usr/lib64/ld-2.17.so lr--------. 1 root root 64 Jan 12 04:15 7f8d02862000-7f8d02863000 -> /usr/lib64/ld-2.17.so lr--------. 1 root root 64 Jan 12 04:15 7f8d02863000-7f8d02864000 -> /usr/lib64/ld-2.17.soメモリ領域の割り当てです。ここからここまでのメモリはこのファイルが対応しています。という情報だと思います。
maps
# cat maps 00400000-00406000 r-xp 00000000 08:01 16801948 /usr/bin/sleep 00606000-00607000 r--p 00006000 08:01 16801948 /usr/bin/sleep 00607000-00608000 rw-p 00007000 08:01 16801948 /usr/bin/sleep 007aa000-007cb000 rw-p 00000000 00:00 0 [heap] 7f8cfbd49000-7f8d02273000 r--p 00000000 08:01 25166854 /usr/lib/locale/locale-archive 7f8d02273000-7f8d02436000 r-xp 00000000 08:01 25166795 /usr/lib64/libc-2.17.so 7f8d02436000-7f8d02636000 ---p 001c3000 08:01 25166795 /usr/lib64/libc-2.17.so 7f8d02636000-7f8d0263a000 r--p 001c3000 08:01 25166795 /usr/lib64/libc-2.17.so 7f8d0263a000-7f8d0263c000 rw-p 001c7000 08:01 25166795 /usr/lib64/libc-2.17.so 7f8d0263c000-7f8d02641000 rw-p 00000000 00:00 0 7f8d02641000-7f8d02663000 r-xp 00000000 08:01 25166788 /usr/lib64/ld-2.17.so 7f8d02859000-7f8d0285c000 rw-p 00000000 00:00 0 7f8d02861000-7f8d02862000 rw-p 00000000 00:00 0 7f8d02862000-7f8d02863000 r--p 00021000 08:01 25166788 /usr/lib64/ld-2.17.so 7f8d02863000-7f8d02864000 rw-p 00022000 08:01 25166788 /usr/lib64/ld-2.17.so 7f8d02864000-7f8d02865000 rw-p 00000000 00:00 0 7fff9fb35000-7fff9fb56000 rw-p 00000000 00:00 0 [stack] 7fff9fbb0000-7fff9fbb2000 r-xp 00000000 00:00 0 [vdso] ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0 [vsyscall]map_filesの詳細ですね。rwxpはそれぞれ、read,write,excv,shared/privateを表すようです。
アセンブリ解析に使えそうです。mem
cat mem
するとcat: mem: Input/output error
となりました。
open(2),read(2)
などの関数を使ってメモリにアクセスする際に利用するようです。mountinfo
# cat mountinfo 18 39 0:18 / /sys rw,nosuid,nodev,noexec,relatime shared:6 - sysfs sysfs rw,seclabel 19 39 0:3 / /proc rw,nosuid,nodev,noexec,relatime shared:5 - proc proc rw 20 39 0:5 / /dev rw,nosuid shared:2 - devtmpfs devtmpfs rw,seclabel,size=292992k,nr_inodes=73248,mode=755 21 18 0:17 / /sys/kernel/security rw,nosuid,nodev,noexec,relatime shared:7 - securityfs securityfs rw 22 20 0:19 / /dev/shm rw,nosuid,nodev shared:3 - tmpfs tmpfs rw,seclabel 23 20 0:12 / /dev/pts rw,nosuid,noexec,relatime shared:4 - devpts devpts rw,seclabel,gid=5,mode=620,ptmxmode=000 24 39 0:20 / /run rw,nosuid,nodev shared:23 - tmpfs tmpfs rw,seclabel,mode=755 25 18 0:21 / /sys/fs/cgroup ro,nosuid,nodev,noexec shared:8 - tmpfs tmpfs ro,seclabel,mode=755 ...マウントされたファイルの詳細情報が記載されているようです。
sleepするだけのプロセスなのに30行のマウント情報がありました。
こういうのを読む記事も作りたいですね。mounts
# cat mounts rootfs / rootfs rw 0 0 sysfs /sys sysfs rw,seclabel,nosuid,nodev,noexec,relatime 0 0 proc /proc proc rw,nosuid,nodev,noexec,relatime 0 0 devtmpfs /dev devtmpfs rw,seclabel,nosuid,size=292992k,nr_inodes=73248,mode=755 0 0 securityfs /sys/kernel/security securityfs rw,nosuid,nodev,noexec,relatime 0 0 tmpfs /dev/shm tmpfs rw,seclabel,nosuid,nodev 0 0 devpts /dev/pts devpts rw,seclabel,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000 0 0 tmpfs /run tmpfs rw,seclabel,nosuid,nodev,mode=755 0 0 tmpfs /sys/fs/cgroup tmpfs ro,seclabel,nosuid,nodev,noexec,mode=755 0 0 cgroup /sys/fs/cgroup/systemd cgroup rw,seclabel,nosuid,nodev,noexec,relatime,xattr,release_agent=/usr/lib/systemd/systemd-cgroups-agent,name=systemd 0 0 ...
mountinfo
と同じような情報です。mountstats
# cat mountstats device rootfs mounted on / with fstype rootfs device sysfs mounted on /sys with fstype sysfs device proc mounted on /proc with fstype proc device devtmpfs mounted on /dev with fstype devtmpfs device securityfs mounted on /sys/kernel/security with fstype securityfs device tmpfs mounted on /dev/shm with fstype tmpfs device devpts mounted on /dev/pts with fstype devpts ...マウント情報です。3ファイルもいるのでしょうか。
net
# ls net/ anycast6 fib_triestat ip6_mr_vif ip_tables_names netstat raw snmp6 udp arp icmp ip6_tables_matches ip_tables_targets nf_conntrack raw6 sockstat udp6 connector if_inet6 ip6_tables_names ipv6_route nf_conntrack_expect route sockstat6 udplite dev igmp ip6_tables_targets mcfilter packet rt6_stats softnet_stat udplite6 dev_mcast igmp6 ip_mr_cache mcfilter6 protocols rt_acct stat unix dev_snmp6 ip6_flowlabel ip_mr_vif netfilter psched rt_cache tcp wireless fib_trie ip6_mr_cache ip_tables_matches netlink ptype snmp tcp6 xfrm_statネットワーキングに関する情報が記載されていました。PPIDが1だったので
systemd
からフォークされているため、
これらの情報はすべてsystemd
の情報がそのままコピーされていると思われる。最初から/proc/1
を読めばよかったんじゃないか説はある。ns
# ll ns total 0 lrwxrwxrwx. 1 root root 0 Jan 12 04:48 ipc -> ipc:[4026531839] lrwxrwxrwx. 1 root root 0 Jan 12 04:48 mnt -> mnt:[4026531840] lrwxrwxrwx. 1 root root 0 Jan 12 04:48 net -> net:[4026531956] lrwxrwxrwx. 1 root root 0 Jan 12 04:48 pid -> pid:[4026531836] lrwxrwxrwx. 1 root root 0 Jan 12 04:48 user -> user:[4026531837] lrwxrwxrwx. 1 root root 0 Jan 12 04:48 uts -> uts:[4026531838]このプロセスの名前空間をメモっておく場所のようです。
# readlink -f ns/ipc /proc/3792/ns/ipc:[4026531839]シンボリックリンクになっているようですが、リンク先にいけなかったので参照先を探しましたが、どうやらここにあるようです。
よくわかりませんが仮想化、コンテナ技術の際にカーネルの機能経由とかで利用するのでしょう。numa_maps
# cat numa_maps 00400000 default file=/usr/bin/sleep 00606000 default file=/usr/bin/sleep anon=1 dirty=1 N0=1 kernelpagesize_kB=4 00607000 default file=/usr/bin/sleep anon=1 dirty=1 N0=1 kernelpagesize_kB=4 007aa000 default heap anon=2 dirty=2 N0=2 kernelpagesize_kB=4 7f8cfbd49000 default file=/usr/lib/locale/locale-archive mapped=1 mapmax=11 N0=1 kernelpagesize_kB=4 7f8d02273000 default file=/usr/lib64/libc-2.17.so mapped=79 mapmax=35 N0=79 kernelpagesize_kB=4 7f8d02436000 default file=/usr/lib64/libc-2.17.so 7f8d02636000 default file=/usr/lib64/libc-2.17.so anon=4 dirty=4 N0=4 kernelpagesize_kB=4
maps
の情報と類似していますね。たぶんそういうやつです。所感
mount
に関する情報が多かったです。マウントやファイルシステムもわかってないのでそのうち勉強しようと思います。
シンボリックリンクでいいじゃんと思っています。参考
https://linuxjm.osdn.jp/html/LDP_man-pages/man5/proc.5.html
http://man7.org/linux/man-pages/man5/proc.5.html
https://linuxjm.osdn.jp/html/LDP_man-pages/man7/numa.7.html
- 投稿日:2020-01-12T14:19:08+09:00
とりあえずArchLinuxをインストールしてみる。
インストールしてみる。
ArchLinuxはインストーラーとか無さげなので、VirtualBoxで配布ISOを起動して、一般的に利用出来る所までインストールガイドを参考にインストールしてみる。
パーティションニング
配布CD直後、ArchLinuxはcdfsでrootで起動されている。
VirtualBox上では30GB程の仮想ディスクを割り振っているので、まずここにパーティションをふる事からする。
以下、まだXとか起動しておらず、クリップボードも起動していないので、大体の記述。# ls /dev/sda* /dev/sda # まだ、sdaしか無い事が確認出来る。 # fdisk /dev/sda Partition Typeが聞かれるので、primaryで。 サイズが聞かれるので、+10Gで。 これで一旦終了。 残りを/home用に割り当てる。 最後に w で書込みして終了。 ls /dev/sda* /dev/sda /dev/sda1 /dev/sda2 mkfs.ext4 /dev/sda1 mkfs.ext4 /dev/sda2mount
# mount /dev/sda1 /mnt # mkdir /mnt/home # mount /dev/sda2 /mnt/homeswap
# dd if=/dev/zero of=/mnt/swap bs=1073741824 count=8 # mkswap /mnt/swap # swapon /mnt/swapnetwork
# ping archlinux.jp で接続されているのを確認駄目な場合はネットワーク設定周りを確認
いよいよインストール
pacmanを利用して、各種ファイルを流し込むらしい。なので、pacmanの優先mirrorsiteを設定する。 /etc/pacman.d/mirrorlist の先頭(どうやら先頭一致が優先らしい)に日本のミラーを記述する。
ベースシステムのインストール
# pacstrap /mnt base linux linux-firmware base-devel vim dhcpcdでベースシステムを入れる。
fstabの生成
# genfstab -U /mnt >> /mnt/etc/fstab作成した環境(/mnt)にchrootして作業
# arch-chroot /mntタイムゾーン
# ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime # hwclock --systohc --utcロケール
# /etc/locale.genを編集し、必要なlocaleだけコメントを外す。 # その後、generate locale-genロケールをen_US.UTF-8へ。
ja_JP.UTF-8にすると、現時点でフォントが入ってないので豆腐になる。
# echo LANG=en_US.UTF-8 > /etc/locale.confネットワーク
ホスト名の設定
# echo arch > /etc/hostnameネットワーク設定
# systemctl start dhcpcd@enp0s3 # systemctl enable dhcpcd@enp0s3 ping www.google.comブートローダ
# pacman -S grub # grub-install --target=i386-pc /dev/sda # grub-mkconfig -o /boot/grub/grub.cfg
- 投稿日:2020-01-12T13:45:16+09:00
ArchmanLinux Install
Archman Linux をInstallしました。
Arch系のトルコ発のディストロです。
現状、日本語入力で不自由がありますが
軽快に動く優れたディストリだと思います。DVD再生に関しても一連のコーデックを入れれば
軽快に美しく再生されます。
packageのインストールも
pacmanのソフトウェアセンターが初めから入っています。
Archman の本家のサイトで見ると
数多くのデスクトップに対応済のようです。
今回インストールした Xfce の他
Mate Plasma Gnome
活発な開発が行われているようで楽しみです。
- 投稿日:2020-01-12T09:34:18+09:00
Ubuntu18.04でのpipやそれ関連のインストール時のエラーの対処
pip3で例えばxxxをインストールしようとして
ipywidgets 6.0.0 requires widgetsnbextension~=2.0.0, which is not installed.などのエラーが出たら
pip3 install --user --upgrade ipywidgetsで対処。
You are using pip version 10.0.0, however version 19.3.1 is available. You should consider upgrading via the 'pip install --upgrade pip' command.が実行結果の最終文などに出て邪魔してきたら
pip3 install --user --upgrade pipで解決。エラーは出なくなった。
- 投稿日:2020-01-12T00:01:39+09:00
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/3792cwd
# 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環境変数の値です。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実行ファイルのシンボリック
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]
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上記の情報があれば、プロセスがファイルディスクリプタを特定できるようです。
gid_map,uid_map
# cat gid_map 0 0 4294967295 # cat uid_map 0 0 4294967295ユーザー名前空間内外で異なるUID,GIDを利用するために必要なマッピング情報を記述するようです。こちらが参考になりそうなので後で読みます。
https://gihyo.jp/admin/serial/01/linux_containers/0016io
# 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プロセスのリソース制限についてまとめられています。
loginuid
# cat loginuid 1000uid 1000って誰だろう
# cat /etc/passwd | grep 1000 inahy:x:1000:1001::/home/inahy:/bin/bashsshログイン時の自分の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
- 投稿日:2020-01-12T00:01:39+09:00
proc/[PID]の中身を全部読んでみた ~ cwdからloginuidまで ~
概要
proc/[PID]の中身を全部読んでみたに経緯をまとめていますのでご覧いただければ幸いです。
前の記事 -> proc/[PID]の中身を全部読んでみた ~ attrからcpusetまで ~# 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/3792cwd
# ll cwd lrwxrwxrwx. 1 root root 0 Jan 11 13:12 cwd -> /rootプロセスが/bin/pwdを実行した結果へのシンボリックリンクです。
rootユーザーで実行したので/rootになっています。environ
# cat environ XDG_SESSION_ID=89SHELL=/bin/bashTERM=xtermHISTSIZE=1000USER=rootLS_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;01:or=40;31;...環境変数の値です。
ps ex | grep 3792
でも同様の内容が確認できました。exe
# 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]
これ便利ですね。入出力確認したいときに使えそう
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上記の情報があれば、プロセスがファイルディスクリプタを特定できるようです。
gid_map,uid_map
# cat gid_map 0 0 4294967295 # cat uid_map 0 0 4294967295ユーザー名前空間内外で異なるUID,GIDを利用するために必要なマッピング情報を記述するようです。こちらが参考になりそうなので後で読みます。
https://gihyo.jp/admin/serial/01/linux_containers/0016io
# 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プロセスのリソース制限についてまとめられています。
所感
体調悪くてコピペ作業になってしまいました。
のちに加筆修正したいと思います。参考
http://man7.org/linux/man-pages/man5/proc.5.html
https://gihyo.jp/admin/serial/01/linux_containers/0016
- 投稿日:2020-01-12T00:01:39+09:00
proc/[PID]の中身を全部読んでみる ~ cwdからloginuidまで ~
概要
proc/[PID]の中身を全部読んでみるに経緯をまとめていますのでご覧いただければ幸いです。
前の記事 -> proc/[PID]の中身を全部読んでみる ~ attrからcpusetまで ~間違っているよ、ここに詳しい情報が載っているよ、そのディレクトリもう使われていないよ、
など情報有ればコメントいただければ嬉しいです。# 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/3792cwd
# ll cwd lrwxrwxrwx. 1 root root 0 Jan 11 13:12 cwd -> /rootプロセスが/bin/pwdを実行した結果へのシンボリックリンクです。
rootユーザーで実行したので/rootになっています。environ
# cat environ XDG_SESSION_ID=89SHELL=/bin/bashTERM=xtermHISTSIZE=1000USER=rootLS_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;01:or=40;31;...環境変数の値です。
ps ex | grep 3792
でも同様の内容が確認できました。exe
# 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]
これ便利ですね。入出力確認したいときに使えそう
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上記の情報があれば、プロセスがファイルディスクリプタを特定できるようです。
gid_map,uid_map
# cat gid_map 0 0 4294967295 # cat uid_map 0 0 4294967295ユーザー名前空間内外で異なるUID,GIDを利用するために必要なマッピング情報を記述するようです。こちらが参考になりそうなので後で読みます。
https://gihyo.jp/admin/serial/01/linux_containers/0016io
# 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プロセスのリソース制限についてまとめられています。
loginuid
# cat loginuid 1000uid 1000って誰だろう
# cat /etc/passwd | grep 1000 inahy:x:1000:1001::/home/inahy:/bin/bashsshログイン時の自分のuidでした。現状は[inahy]->[root]にsuしている状態です。
何に使うんでしょうか。所感
体調悪くてコピペ作業になってしまいました。
のちに加筆修正したいと思います。参考
http://man7.org/linux/man-pages/man5/proc.5.html
https://gihyo.jp/admin/serial/01/linux_containers/0016