20200112のLinuxに関する記事は13件です。

Yoctoでrecipeの追加(ファイルのコピーのみをするレシピの追加)

はじめに

Yoctoを使っていて、「単純にファイルをroot fsにコピーするだけのレシピってどうやって書くの?」と思って調べ、作ったレシピを記載します。

やりたいこと

ファイル、ディレクトリをroot fsにコピーしたい。
ここで言うファイル、ディレクトリはレシピでビルドされるコードではない。
単純にコピーをしたいただのファイル。

環境準備

zeusを使用します。
https://git.yoctoproject.org/cgit/cgit.cgi/poky/log/?h=zeus

参考 Release Activity

conf/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.bb

hoge.tar.gz

hoge.tar.gz の中身は以下。適当なテキストファイルがあるのみ。

$ tree hoge
hoge
├── hoge01.txt
└── hoge02.txt

参考にしたレシピ

既存のレシピを探したら /etc にファイルをコピーするようなレシピがあったのでこちらを参考にした。
base-files_3.0.14.bb

myhellobin.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 を設定する、ということですかね。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

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. Install CentOS Linux 8.0.1905 を選択 (項1~3は失敗例です。項4から開始してください)
    インストール

  2. 言語選択 (項1~3は失敗例です。項4から開始してください)
    cent8inst_2.png

  3. インストール概要 (項1~3は失敗例です。項4から開始してください)
    普通にインストーラーを起動するとこういう風に画面が切れてしまいます。
    cent8inst_3.png

  4. インストール開始
    Install CentOS Linux 8.0.1905 を選択した状態で Tab を押してメニューを表示
    末尾に vga=773 を追記してインストーラを起動してください。
    cent8inst_4.png

  5. 言語選択
    利用する言語を選択します。私は日本語を選択しました。
    cent8inst_5.png

  6. インストール概要
    時刻と日付
    インストール先(ディスク および 必要であればパーティション設定)
    KDUMP無効化(自宅サーバならKDUMPが取れても解析しないよね?)
    ネットワークとホスト名(DHCPでもホスト名位設定しましょう)
    cent8inst_6.png

  7. 時刻と日付を選択し地域を選択
    アジア/東京 を選択しました
    cent8inst_7.png

  8. インストール先Diskを設定、必要であればパーティション設定
    私は標準のディスク選択を受け入れました。
    cent8inst_8.png

  9. KDUMP 無効化
    kdumpを有効にする のチェックを外す
    必要な方はチェックを外さず、標準設定を受け入れてもいいと思います。
    cent8inst_9.png
    cent8inst_10.png

  10. ネットワークとホスト名
    ホスト名の設定
    Ethernet を オン に変更
    cent8inst_12.png

  11. インストール概要の確認
    インストールの開始 をクリック
    cent8inst_13.png

  12. ユーザの設定
    root パスワードの設定と、一般ユーザアカウントの作成を行います。

    cent8inst_14.png

  13. root パスワードの設定
    cent8inst_15.png

  14. ユーザの作成
    作成するユーザの情報を指定
    私は "このユーザを管理者にする" をチェックしてここで作成したユーザで作業してます。
    cent8inst_16.png

  15. 再起動
    インストールが終わるのを待って 再起動 を行います。
    インストールメディアを外すのを忘れないでください。
    cent8inst_18.png

  16. ライセンスへの同意
    cent8inst_19.png

  17. ライセンスを確認し同意できる場合 ライセンスに同意する にチェックを付けてください。
    cent8inst_20.png

  18. 初期セットアップ完了
    cent8inst_21.png

  19. ログイン
    cent8inst_22.png

  20. 初回ログイン時の設定1:言語選択
    cent8inst_23.png

  21. 初回ログイン時の設定2:入力方法選択
    cent8inst_24.png

  22. 初回ログイン時の設定3:プライバシー設定
    cent8inst_25.png

  23. 初回ログイン時の設定4:オンラインアカウントへの接続(任意、私はスキップしてます)
    cent8inst_26.png

  24. 初回ログイン時の設定5:完了
    cent8inst_27.png

VirtualBox Guest Additons インストール

  1. 必要なパッケージ追加
    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
    
  2. アップデートの実施
    大抵の場合、追加インストールされた 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 now
    
  3. VirtualBox Guest Additions のインストール1
    Guest Additions CDイメージの挿入を選択
    cent8inst_29.png

  4. VirtualBox Guest Additions のインストール2
    VBox_GAs_XXX の画面が出たら 実行する をクリックしてください。
    cent8inst_28.png
    画面が表示されない場合以下のコマンドでインストールを実行してください。

    [user01@centos8 ~] sudo /run/media/user01/Vbox_GAs_6.0.14/VBoxLinuxAdditions.run
    [user01@centos8 ~] sudo shutdown -r now
    
  5. VirtualBox Guest Additions のインストール3
    認証が要求された場合、認証情報を入力してください。
    cent8inst_30.png

  6. VirtualBox Guest Additions のインストール4

インストールが完了したらOSを再起動して完了です。

IPv6無効化

方法1:sysctl での無効化

  1. 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.conf
    
  2. NetworkManager での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 での無効化

  1. 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 ~]$ 
    
  2. 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を停止した場合でも共通で行う設定です。

  1. /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 ~]$ 
    
  2. /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 ~]$ 
    

参考

CentOS 8.0.1905 documentation

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

CentOS 古い kernelを整理する & 増殖させない

この記事に書いてある事

  • updateを繰り返しているうちに増えてしまう kernelを整理する
  • 増えすぎないように設定する方法

増えすぎたkernelの整理

  • CentOS6 / 7

    • package-cleanup コマンドを使って整理
      kernelを新しい方から二つ残して後を消す場合
    [user01@centos7 ~]$ sudo package-cleanup --oldkernels --count=2
    
  • CentOS8

    • 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 --oldinstallonly
    

    kernelが増えすぎないように設定する

  • 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-release
    
    
  • CentOS8
    /etc/dnf/dnf.conf の installonly_limit= で保持する世代数を指定
    ただし 1,0 に設定すると無制限とみなされます。2が最低の設定値になります。

    [main]
    gpgcheck=1
    installonly_limit=3
    clean_requirements_on_remove=True
    best=True
    [user01@cent8 ~]$ 
    
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

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/3792

setgroups

# cat setgroups
allow

allowになっていると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 0

statm

# 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_nanosleep

wait 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

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

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/3792

oom_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
0

LinuxカーネルにはOOM(Out Of Memory) Killerという仕組みがあり、 メモリ(RAM)が枯渇しシステムが動作不能となる恐れがある場合、 メモリリソースを多く使用しているプロセスを強制的に停止させ、メモリを確保します。
運用上重要なプロセスである場合や負荷試験時など、 OOM Killerの対象として欲しくないプロセスがある場合には、 設定を行うことで、OOM Killerの対象から外すことができます。https://users.atmark-techno.com/blog/1913/2767

oom_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
00000000

This 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 4294967295

The /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.html

project - 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

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

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/3792

oom_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
0

LinuxカーネルにはOOM(Out Of Memory) Killerという仕組みがあり、 メモリ(RAM)が枯渇しシステムが動作不能となる恐れがある場合、 メモリリソースを多く使用しているプロセスを強制的に停止させ、メモリを確保します。
運用上重要なプロセスである場合や負荷試験時など、 OOM Killerの対象として欲しくないプロセスがある場合には、 設定を行うことで、OOM Killerの対象から外すことができます。https://users.atmark-techno.com/blog/1913/2767

oom_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
00000000

This 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 4294967295

The /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.html

project - 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

一番左はschedse.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

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

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/3792

map_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

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

とりあえず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/sda2

mount

# mount /dev/sda1 /mnt
# mkdir /mnt/home
# mount /dev/sda2 /mnt/home

swap

# dd if=/dev/zero of=/mnt/swap bs=1073741824 count=8
# mkswap /mnt/swap
# swapon /mnt/swap

network

# 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
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

ArchmanLinux Install

Archman Linux をInstallしました。
Arch系のトルコ発のディストロです。
現状、日本語入力で不自由がありますが
軽快に動く優れたディストリだと思います。

DVD再生に関しても一連のコーデックを入れれば
軽快に美しく再生されます。
packageのインストールも
pacmanのソフトウェアセンターが初めから入っています。
Archman の本家のサイトで見ると
数多くのデスクトップに対応済のようです。
今回インストールした Xfce の他
Mate Plasma Gnome
活発な開発が行われているようで楽しみです。
スクリーンショット_2020-01-12_01-33-51-.jpg

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

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

で解決。エラーは出なくなった。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

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

プロセスのカレントディレクトリのシンボリックリンクです。
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/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

最後のは「書き込みに失敗した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
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

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

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/3792

cwd

# 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/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

最後のは「書き込みに失敗した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

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

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/3792

cwd

# 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/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

最後のは「書き込みに失敗した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
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

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む