勉強日記

チラ裏

LPIC あずき本v5.0 ch4ファイルとプロセスの管理

www.shoeisha.co.jp


基本的なファイル管理

ファイルの圧縮・解凍

  • 有名どころ
gzip bzip2 xz
圧縮コマンド gzip bzip2 xz
圧縮率 低い 高い
時間 短い 長い
ls -l $(which {gunzip,bunzip2,unxz})
-rwxr-xr-x 1 root root 34888  1月 30  2017 /bin/bunzip2
-rwxr-xr-x 1 root root  2301  4月 28  2017 /bin/gunzip
lrwxrwxrwx 1 root root     2  2月 24 02:09 /usr/bin/unxz -> xz

オプション

gzip

  • -d, --decompress
    • 解凍
    • gunzipと同じ
  • -c, --stdout
    • 標準出力に出力
  • -r, --recursive
  • -k, --keep
    • 圧縮前ファイル残す
ls hogedir
fuga  hoge  piyo
gzip hogedir
gzip: hogedir is a directory -- ignored
gzip -r hogedir
ls hogedir
  • 圧縮前のファイルは残らない
fuga.gz  hoge.gz  piyo.gz
  • 残したい場合は-cとリダイレクト
gzip -dr hogedir
gzip -c hogedir/hoge > hogedir/hoge.gz
ls hogedir
fuga  hoge  hoge.gz  piyo

bzip2

  • -d, --decompress
    • 解凍
    • bunzip2に同じ
  • -c, --stdout
    • 標準出力
  • -k, --keep
    • 圧縮前ファイル残す

--recursive的なものはない

bzip2 piyo
ls
bunzip2 piyo
fuga  hoge  hogedir  piyo.bz2

xz

  • -d, --decompress
    • 解凍
    • unxzと同じ
  • -c, --stdout
    • 標準出力
  • -k, --keep
    • 圧縮前ファイル残す

圧縮ファイルの閲覧

  • zcat, bzcat, xzcat
    • それぞれgzip, bzip2, xzで圧縮されたファイルを伸張・catするやつ

アーカイブの作成・展開

tar

  • デフォルトで圧縮しない
  • オプションで圧縮可能
  • -省略可能

主なオプション

-f, --file=ARCHIVE
  • アーカイブファイル名指定
  • 指定なき場合、標準入出力
-c, --create
tar c hogedir
tar: 端末にアーカイブの内容を書き出すのを拒否 (-f オプションの指定忘れ?)
tar: Error is not recoverable: exiting now
tar cf hogedir.tar hogedir
# tar c --file=hogedir.tar hogedir
# tar c hogedir > hogedir.tar
ls
fuga  hoge  hogedir  hogedir.tar  piyo
-t, --list
tar ft hogedir.tar 
# tar t < hogedir.tar 
fuga  hoge  hogedir  hogedir.tar  piyo
-x, --extract, --get
tar xf hogedir.tar 
# tar x < hogedir.tar 
-z
-j
-J
tar cz hogedir > hogedir.tar.gz
tar xz hogedir < hogedir.tar.gz

tar cjf hogedir.tar.bz2 hogedir
tar xjf hogedir.tar.bz2 hogedir

tar cJ --file=hogedir.tar.xz hogedir
tar xJ --file=hogedir.tar.xz hogedir
-v, --verbose
  • 詳細情報表示
tar cvf hogedir.tar hogedir
# tar xvf hogedir.tar hogedir
hogedir/
hogedir/hoge
hogedir/piyo
hogedir/fuga
--delete
tar --delete --file=hogedir.tar hogedir/piyo
tar t < hogedir.tar
hogedir/
hogedir/hoge
hogedir/fuga
-r, --append
touch puni
tar r puni --file hogedir.tar
tar tf hogedir.tar
hogedir/
hogedir/hoge
hogedir/piyo
hogedir/fuga
puni
-u, --update
  • アーカイブ内にある同名のファイルより新しいものだけ追加
-N, --newer=DATE-OR-FILE, --after-date=DATE-OR-FILE
  • 指定の日付より新しいデータのみ対象
-M, --multi-volume
  • マルチボリューム
  • 複数デバイスに分ける

cpio

ls | cpio -o > /tmp/backup

dd

dd --help
Copy a file, converting and formatting according to the operands.
  • ハードディスクやCD-ROMなどのデバイスの内容をそのまま取り扱える
  • MBRのブートストラップローダを初期化する例
dd if=/dev/zero of=/dev/sda bs=446 count=1
  if=FILE         read from FILE instead of stdin
  of=FILE         write to FILE instead of stdout
  bs=BYTES        read and write up to BYTES bytes at a time (default: 512);
                  overrides ibs and obs
  count=N         copy only N input blocks

パーミッションの設定

所有者

  • ファイルやディレクトリを生成すると、下記が所有者として設定される
    • 作成したユーザー
    • そのプライマリグループ
ls -ld .
  • wandユーザーはdockerグループに所属している
    • dockerを一般ユーザーで動かすため
    • 【追記】サブグループにすべきだった
drwxr-xr-x 3 wand docker 4096  2月 26 22:54 .

アクセス権

  • これ
drwxr-xr-x
  • アクセス権
    • r: 読み取り権,4
    • w: 書き込み権,2
    • x: 実行権,1
  • dはファイル種別(directory)
  • 数値表記だと755
    • 所有者が7(rwx)
    • グループが5(r-x)
    • その他ユーザーが5(r-x)

アクセス権の変更

  • chmodコマンド

主なオプション

オプション
  • -R, --recursive
対象
  • u
    • 所有者
  • g
    • グループ
  • o
    • その他
  • a
    • 全ユーザー
操作
  • +
    • 権限追加
  • -
    • 権限削除
  • =
    • 権限設定
許可の種別
  • r
    • 読み取り許可
  • w
    • 書き込み許可
  • x
    • 実行許可
  • s
    • SUIDもしくはSGID
  • t
    • スティッキービット

chmod go+w .
ls -ld .
  • 755が777になった
drwxrwxrwx 3 wand docker 4096  2月 26 22:54 .
chmod go=w .
ls -ld .
  • 書き込みのみ行えるように
drwx-w--w- 3 wand docker 4096  2月 26 22:54 .
  • もとに戻しておく
chmod 755 .
ls -ld .
drwxr-xr-x 3 wand docker 4096  2月 26 22:54 .

SUID, SGID

  • ファイルの所有者、もしくは所有グループの実行権がS, sのやつ
    • 数値表現4000
    • xもついているとsになる
  • 実行権を持っているユーザーによってプログラムが実行された場合、
    ファイルの所有者もしくは所有グループの権限で実行

例: passwd, /etc/passwd

  • passwd ... パスワードを変更できるコマンド
  • /etc/passwd ... パスワードの変更が保存されるファイル
  • 所有権: rootのみが書き込み可能
-rw-r--r-- 1 root root 2372  2月 24 20:04 /etc/passwd
  • 一般ユーザーはpasswdコマンドでパスワードを変更し、/etc/passwdを書き換えることができる。なぜか?
  • SUID
ls -l $(which passwd)
-rwsr-xr-x 1 root root 59640  1月 26  2018 /usr/bin/passwd
  • rwssがそう
  • 数値表現では4755

例2: ディレクトリに設定

ls -ld
drwxr-sr-x 2 wand docker 4096  2月 27 07:11 .
sudo touch hoge
ls -l
  • root:rootにならない
-rw-r--r-- 1 root docker 0  2月 27 07:13 hoge

スティッキービット

  • ディレクトリのその他ユーザーの実行権がT, tのやつ
    • 数値表現1000
    • xもついているとtになる
  • 書き込み権限があっても、自分以外のユーザー所有のファイルを削除できない
ls -ld /tmp
drwxrwxrwt 17 root root 4096  2月 27 07:09 /tmp
  • root:root所有なので、一般ユーザーは全員「その他ユーザー」
  • 「その他ユーザー」間で、他人のファイルを削除することはできない
  • 数値表現は4777

デフォルトのアクセス権

  • umaskコマンド
    • 「マスク」
    • ファイル: (umask & 666) ^ 666
      • デフォルトでexecutableにはできない
    • ディレクトリ: umask ^ 777
umask

touch hoge
ls -l
0022

-rw-r--r-- 1 wand docker 0  2月 27 07:22 hoge
umask 0000
umask

touch piyo
ls -l
0000

-rw-r--r-- 1 wand docker 0  2月 27 07:22 hoge
-rw-rw-rw- 1 wand docker 0  2月 27 07:22 piyo
  • 戻しておく
umask 0022
umask

ファイルの所有者管理

所有者の変更

  • chown
    • -R, --recursive: 再帰的に
    • root特権
sudo chown root piyo
sudo chown root:root hoge
ls -l
-rw-r--r-- 1 root root   0  2月 27 07:22 hoge
-rw-rw-rw- 1 root docker 0  2月 27 07:22 piyo

グループの変更

  • chgrp
    • -R, --recursive: 再帰的に
    • 一般ユーザーでも可能
      • 変更先が所属グループである場合に限られる
touch fuga
ls -l fuga
sudo chgrp wand fuga
ls -l fuga
-rw-r--r-- 1 wand docker 0  2月 27 07:29 fuga

-rw-r--r-- 1 wand wand 0  2月 27 07:29 fuga

ハードリンクとシンボリックリンク

ハードリンク

  • iノード
    • ファイルやディレクトリと1対1で紐づく情報
    • ファイル種別
    • ファイルサイズ
    • アクセス権
    • 所有者
    • リンク
    • ディスク上の物理的な保存場所(ブロック番号)
  • iノード番号
ls -i
12849099 fuga  12849092 hoge  12849098 piyo
  • ハードリンク
    • 同じファイルの実体を参照するリンク
    • ファイルの実体が同じなのでiノード番号も同じ
ln  fuga fuga2

ls -F
ls -l
ls -i
fuga  fuga2  hoge  piyo
  • -lでも->などは現れない
-rw-r--r-- 2 wand wand 0  2月 27 07:29 fuga
-rw-r--r-- 2 wand wand 0  2月 27 07:29 fuga2
-rw-r--r-- 1 root root 0  2月 27 07:22 hoge
-rw-rw-rw- 1 root root 0  2月 27 07:22 piyo
  • -iでiノード番号を表示して初めてハードリンクを認識できる
12849099 fuga  12849099 fuga2  12849092 hoge  12849098 piyo
  • 片方消しても残る
  • どちらが本物ということはない
rm fuga
ls
fuga2  hoge  piyo

制限

シンボリックリンク

ln -s fuga2 fuga3

ls -F
ls -l
ls -i
fuga2  fuga3@  hoge  piyo
-rw-r--r-- 1 wand wand   0  2月 27 07:29 fuga2
lrwxrwxrwx 1 wand docker 5  2月 27 07:56 fuga3 -> fuga2
-rw-r--r-- 1 root root   0  2月 27 07:22 hoge
-rw-rw-rw- 1 root root   0  2月 27 07:22 piyo
12849099 fuga2  12849103 fuga3  12849092 hoge  12849098 piyo

リンクの作成

  • lnコマンド
LN(1)                        User Commands                        LN(1)

NAME
       ln - make links between files

SYNOPSIS
       ln [OPTION]... [-T] TARGET LINK_NAME   (1st form)
       ln [OPTION]... TARGET                  (2nd form)
       ln [OPTION]... TARGET... DIRECTORY     (3rd form)
       ln [OPTION]... -t DIRECTORY TARGET...  (4th form)

リンクのコピー

  • cp -d
    • --no-dereference --preserve=linksと同
ls -la
-rw-r--r-- 1 wand wand      0  2月 27 07:29 fuga2
lrwxrwxrwx 1 wand docker    5  2月 27 07:56 fuga3 -> fuga2
cp fuga3 fuga4
cp -d fuga3 fuga5

ls -la
-rw-r--r-- 1 wand wand      0  2月 27 07:29 fuga2
lrwxrwxrwx 1 wand docker    5  2月 27 07:56 fuga3 -> fuga2
-rw-r--r-- 1 wand docker    0  2月 27 08:00 fuga4
lrwxrwxrwx 1 wand docker    5  2月 27 08:00 fuga5 -> fuga2

プロセス管理

プロセスの監視

  • プロセス
    • OSが動作中のプログラムを管理する基本単位
    • ハードディスクからメモリ上に読み出され、実行されているプログラム
  • ps : 現在実行されているプロセスを表示
ps
  • psコマンドを実行したユーザ自身が起動しているプロセスを表示
  PID TTY          TIME CMD
 3631 pts/1    00:00:00 bash
 8024 pts/1    00:00:00 ps

ps

  • オプションは-つきとそうでないもの混在。注意

a

  • 全ユーザーの表示
ps a | head -6
  PID TTY      STAT   TIME COMMAND
 1358 tty1     Ssl+   0:00 /usr/lib/gdm3/gdm-wayland-session gnome-session -
 1362 tty1     Sl+    0:00 /usr/lib/gnome-session/gnome-session-binary --aut
 1380 tty1     Sl+    0:26 /usr/bin/gnome-shell
 1477 tty1     Sl+    0:00 /usr/bin/Xwayland :1024 -rootless -terminate -acc
 1530 tty1     Sl     0:00 ibus-daemon --xim --panel disable

f

  • プロセスの親子関係を表示
ps f | head -10
  PID TTY      STAT   TIME COMMAND
 3126 pts/0    Ss+    0:00 bash
 1963 tty2     Ssl+   0:00 /usr/lib/gdm3/gdm-x-session --run-script env GNOM
 1967 tty2     Sl+    3:47  \_ /usr/lib/xorg/Xorg vt2 -displayfd 3 -auth /ru
 2013 tty2     Sl+    0:00  \_ /usr/lib/gnome-session/gnome-session-binary -
 2230 tty2     Sl+    5:54      \_ /usr/bin/gnome-shell
 2646 tty2     Sl     1:39      |   \_ ibus-daemon --xim --panel disable
 2656 tty2     Sl     0:00      |   |   \_ /usr/lib/ibus/ibus-dconf
 2987 tty2     Sl     0:31      |   |   \_ /usr/lib/ibus-mozc/ibus-engine-mo
 2994 tty2     SLl    0:11      |   |       \_ /usr/lib/mozc/mozc_server

u

  • ユーザー名も表示
ps u
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
...
gdm       1358  0.0  0.0 191808  5612 tty1     Ssl+  2月25   0:00 /usr/lib/
gdm       1362  0.0  0.1 626988 14128 tty1     Sl+   2月25   0:00 /usr/lib/
gdm       1651  0.0  0.0 199032  6496 tty1     Sl    2月25   0:00 /usr/lib/
wand      1963  0.0  0.0 206140  6060 tty2     Ssl+  2月25   0:00 /usr/lib/
wand      1967  0.1  0.9 539368 77836 tty2     Rl+   2月25   3:47 /usr/lib/
wand      2013  0.0  0.1 554344 15380 tty2     Sl+   2月25   0:00 /usr/lib/
...
x
  • 制御端末のないプロセスも表示
    • つまり、デーモン
ps x | head -10
  PID TTY      STAT   TIME COMMAND
 1879 ?        Ss     0:00 /lib/systemd/systemd --user
 1880 ?        S      0:00 (sd-pam)
 1893 ?        Sl     0:00 /usr/bin/gnome-keyring-daemon --daemonize --login
 1963 tty2     Ssl+   0:00 /usr/lib/gdm3/gdm-x-session --run-script env GNOM
 1967 tty2     Sl+    3:49 /usr/lib/xorg/Xorg vt2 -displayfd 3 -auth /run/us
 2007 ?        Ss     0:01 /usr/bin/dbus-daemon --session --address=systemd:
 2013 tty2     Sl+    0:00 /usr/lib/gnome-session/gnome-session-binary --ses
 2146 ?        Ss     0:00 /usr/bin/ssh-agent /usr/bin/im-launch env GNOME_S
 2172 ?        Ssl    0:00 /usr/lib/at-spi2-core/at-spi-bus-launcher
-e
  • 全プロセス表示
-l
  • 詳細表示
ps -l
F S   UID   PID  PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
0 S  1000  3631  3181  0  80   0 -  5945 wait   pts/1    00:00:00 bash
4 R  1000  8129  3631  0  80   0 -  7483 -      pts/1    00:00:00 ps
-p PID
  • 特定のPIDのプロセスのみ
ps -p 1 3631
  PID TTY      STAT   TIME COMMAND
    1 ?        Ss     0:07 /sbin/init splash
 3631 pts/1    Ss     0:00 /bin/bash --noediting -i
-C NAME
  • 指定した名前のプロセスのみ表示
ps -C bash
  PID TTY          TIME CMD
 3126 pts/0    00:00:00 bash
 3631 pts/1    00:00:00 bash
-w
  • 長い行折り返し表示
    • 指定しないと切れちゃう

top

top
top - 08:23:44 up 1 day,  8:57,  1 user,  load average: 0.19, 0.23, 0.23
Tasks: 246 total,   1 running, 198 sleeping,   0 stopped,   0 zombie
%Cpu(s):  4.3 us,  1.0 sy,  0.0 ni, 94.7 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  8061240 total,  4321064 free,  1807604 used,  1932572 buff/cache
KiB Swap:  2097148 total,  2097148 free,        0 used.  5651284 avail Mem 

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND               
 8188 wand      20   0   42952   3772   3180 R  12.5  0.0   0:00.02 top                   
 2230 wand      20   0 3577708 179260  78132 S   6.2  2.2   6:15.26 gnome-shell           
 3181 wand      20   0  524208 139936  63096 S   6.2  1.7   9:08.87 emacs25               
    1 root      20   0  225460   9280   6788 S   0.0  0.1   0:07.85 systemd               
    2 root      20   0       0      0      0 S   0.0  0.0   0:00.01 kthreadd              
    4 root       0 -20       0      0      0 I   0.0  0.0   0:00.00 kworker/0:0H          
  • デフォルトCPU使用量降順
    • topコマンド自身がCPUをたくさん使ってる

pstree

  • プロセスの親子関係表示
pstree
systemd─┬─ModemManager───2*[{ModemManager}]
        ├─NetworkManager─┬─dhclient
        │                └─2*[{NetworkManager}]
        ├─accounts-daemon───2*[{accounts-daemon}]
        ├─acpid
        ├─avahi-daemon───avahi-daemon
        ├─bluetoothd
        ├─boltd───2*[{boltd}]

プロセスの終了

kill

KILL(1)                      User Commands                      KILL(1)

NAME
       kill - send a signal to a process

SYNOPSIS
       kill [options] <pid> [...]

DESCRIPTION
       The  default  signal  for  kill  is  TERM.  Use -l or -L to list
       available signals.  Particularly  useful  signals  include  HUP,
       INT,  KILL,  STOP, CONT, and 0.  Alternate signals may be speci‐
       fied in three ways: -9, -SIGKILL or -KILL.  Negative PID  values
       may  be used to choose whole process groups; see the PGID column
       in ps command output.  A PID of -1 is special; it indicates  all
       processes except the kill process itself and init.

OPTIONS
       <pid> [...]
              Send signal to every <pid> listed.

       -<signal>
       -s <signal>
       --signal <signal>
              Specify  the signal to be sent.  The signal can be speci‐
              fied by using name or number.  The behavior of signals is
              explained in signal(7) manual page.
  • プロセスにシグナルを送る
    • KILLするとは限らない
 1) SIGHUP    2) SIGINT   3) SIGQUIT  4) SIGILL   5) SIGTRAP
 6) SIGABRT  7) SIGBUS   8) SIGFPE   9) SIGKILL 10) SIGUSR1
11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
16) SIGSTKFLT   17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG  24) SIGXCPU 25) SIGXFSZ
26) SIGVTALRM   27) SIGPROF 28) SIGWINCH    29) SIGIO   30) SIGPWR
31) SIGSYS  34) SIGRTMIN    35) SIGRTMIN+1  36) SIGRTMIN+2  37) SIGRTMIN+3
38) SIGRTMIN+4  39) SIGRTMIN+5  40) SIGRTMIN+6  41) SIGRTMIN+7  42) SIGRTMIN+8
43) SIGRTMIN+9  44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9  56) SIGRTMAX-8  57) SIGRTMAX-7
58) SIGRTMAX-6  59) SIGRTMAX-5  60) SIGRTMAX-4  61) SIGRTMAX-3  62) SIGRTMAX-2
63) SIGRTMAX-1  64) SIGRTMAX    
  • 主要なやつ
シグナルID シグナル名 動作
1 HUP ハングアップ
2 INT 割り込み(Ctrl + C)
9 KILL 強制終了
15 TERM 終了(デフォルト)
18 CONT 停止しているプロセスを再開
19 STOP 一時停止
  • プロセス終了
    • 下記すべておなじ動作
kill 893
kill -15 893
kill -s 15 893
kill -TERM 893
kill -SIGTERM 893
  • SIGKILLはいきなり使わない
    • プログラムが異常動作を起こした場合などに
    • システムに何らかの障害が発生する可能性がある
      • ファイル破損
      • ファイル開きっぱなし
      • etc.
  • 親プロセスにSIGKILLを送ると、子孫も強制終了

pgrepコマンド

  • PID調べる
bash &
[1] 4599
pgrep bash -u $(whoami)
  • プロセス名は重複するのでPIDは複数出てくる
4599
13968

killall

  • プロセス名指定してkill
killall bash
  • 同じ動作のやつ
pgrep bash | xargs kill

pkill

  • -u, -gでプロセスの実行ユーザー・実行グループ指定できる
  • killallでも指定できるっぽい
    • どう違うんだ?
pkill -u $(whoami) -SIGKILL bash

ジョブ管理

  • ジョブ
    • ユーザーがコマンドやプログラムをシェル上で実行するひとまとまりの処理単位
    • パイプでつないだものは全体で1ジョブ

バックグラウンドジョブの実行

  • いままでさんざんやってきたのはフォアグラウンド
  • 時間がかかるジョブをフォアグラウンドで実行すると、終了するまでシェルに制御が返ってこない
  • そこでバックグラウンド
sudo updatedb &
[2] 14512
[1]   終了 1   
jobs
[2]+  停止                  sudo updatedb

nohupコマンド

NOHUP(1)                     User Commands                     NOHUP(1)

NAME
       nohup  -  run a command immune to hangups, with output to a non-
       tty
  • no hungupの意味か
  • ログアウト後も処理続行
sudo nohup updatedb &

フォアグラウンドとバックグラウンド

journalctl -f
-- Logs begin at Tue 2019-01-01 00:00:00 JST. --
 4月 19 17:58:23 wand-ThinkPad-X240s systemd[1949]: This usually indicates unclean termination of a previous run, or service implementation deficiencies.
 4月 19 17:58:23 wand-ThinkPad-X240s systemd[1949]: Starting GNOME Terminal Server...
 4月 19 17:58:23 wand-ThinkPad-X240s dbus-daemon[1993]: [session uid=1000 pid=1993] Successfully activated service 'org.gnome.Terminal'
 4月 19 17:58:23 wand-ThinkPad-X240s systemd[1949]: Started GNOME Terminal Server.
 4月 19 17:58:38 wand-ThinkPad-X240s sudo[19211]:     wand : TTY=pts/0 ; PWD=/home/wand ; USER=root ; COMMAND=/usr/bin/tail -f /var/log/messages
 4月 19 17:58:38 wand-ThinkPad-X240s sudo[19211]: pam_unix(sudo:session): session opened for user root by (uid=0)
 4月 19 17:58:38 wand-ThinkPad-X240s sudo[19211]: pam_unix(sudo:session): session closed for user root
 4月 19 18:01:40 wand-ThinkPad-X240s wand[19252]: Test logger test message
 4月 19 18:02:11 wand-ThinkPad-X240s org.gnome.Shell.desktop[2139]: [Child 18822, MediaPlayback #1] WARNING: Decoder=7feb2fff3000 Decode error: NS_ERROR_DOM_MEDIA_FATAL_ERR (0x806e0005) - RefPtr<mozilla::MozPromise<RefPtr<mozilla::MediaTrackDemuxer::SamplesHolder>, mozilla::MediaResult, true> > mozilla::MediaSourceTrackDemuxer::DoGetSamples(int32_t): manager is detached.: file /build/firefox-QFhmDU/firefox-66.0.2+build1/dom/media/MediaDecoderStateMachine.cpp, line 3331
 4月 19 18:02:11 wand-ThinkPad-X240s org.gnome.Shell.desktop[2139]: [Child 18822, MediaPlayback #2] WARNING: Decoder=7feb2fff3000 Decode error: NS_ERROR_DOM_MEDIA_FATAL_ERR (0x806e0005) - RefPtr<mozilla::MozPromise<RefPtr<mozilla::MediaTrackDemuxer::SamplesHolder>, mozilla::MediaResult, true> > mozilla::MediaSourceTrackDemuxer::DoGetSamples(int32_t): manager is detached.: file /build/firefox-QFhmDU/firefox-66.0.2+build1/dom/media/MediaDecoderStateMachine.cpp, line 3331
 4月 19 18:02:55 wand-ThinkPad-X240s sudo[19296]:     wand : TTY=pts/1 ; PWD=/home/wand ; USER=root ; COMMAND=/bin/bash
(Ctrl + Zでサスペンド)
^Z
[1]+  停止                  journalctl -f
jobs
  • 止まっちゃう
[1]+  停止                  journalctl -f
  • bgコマンド
    • 停止中のジョブをバックグラウンドで動かす
bg 1
[1]+  実行中               journalctl -f &
  • 他の端末でsudoとかすると、元の端末でログが書き出される
  wand : TTY=pts/1 ; PWD=/home/wand ; USER=root ; COMMAND=/bin/bash
 4月 19 18:04:56 wand-ThinkPad-X240s sudo[19334]: pam_unix(sudo:session): session opened for user root by (uid=0)
 4月 19 18:04:57 wand-ThinkPad-X240s sudo[19334]: pam_unix(sudo:session): session closed for user root
  • が、バックグラウンド実行なので、シェルに制御は戻ってくる
echo hoge
hoge
  • fgコマンド
    • バックグラウンドで動いているジョブをフォアグラウンドで動かす
fg 1
  • シェルに制御戻ってこなくなる

システムの状況把握

freeコマンド

FREE(1)                     User Commands                     FREE(1)

NAME
       free - Display amount of free and used memory in the system
  • /proc/meminfo由来の情報を表示
  • 主要なオプション
    • -m, --mebi
      • MiB単位で表示
        • cf. デフォルトではKiB単位
    • -s delay, --seconds delay
      • delay秒間隔で表示しつづける
free -m
              total        used        free      shared  buff/cache   available
Mem:           7872        1666        1292         210        4913        5685
Swap:          2047         507        1540

uptimeコマンド

UPTIME(1)                   User Commands                   UPTIME(1)

NAME
       uptime - Tell how long the system has been running.
  • システムの稼働時間やロードアベレージ情報等を表示
    • /proc/loadavg由来
  • ロードアベレージ
    • CPUに処理してもらうのを待っているプロセスの数
    • CPU数 x CPUあたりのコア数を恒常的に超えているかどうかが一種の目安らしい
      • 超えていると、処理待ちが発生している

uname

UNAME(1)                    User Commands                    UNAME(1)

NAME
       uname - print system information
uname
Linux
  • ぜんぶ
uname -a
Linux wand-ThinkPad-X240s 4.15.0-47-generic #50-Ubuntu SMP Wed Mar 13 10:44:52 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux

watch

WATCH(1)                    User Commands                    WATCH(1)

NAME
       watch   -  execute  a  program  periodically,  showing  output
       fullscreen

SYNOPSIS
       watch [options] command
  • コマンドを一定時間ごとに実行
    • デフォルト2秒
    • 端末をスクロールさせずに固定で表示
  • 主なオプション
    • -n seconds, --interval seconds
      • 指定の間隔で更新
      • 0.1秒以上
    • -d, --deferences
      • 差分をハイライト
    • -t, --no-title
      • タイトル非表示、コマンドの出力結果のみ表示
  • カレントディレクトリのファイルを毎秒監視する例
watch -n 1 -d ls
Every 1.0s: ls                     wand-ThinkPad-X240s: Fri Apr 19 18:28:15 2019

hoge
piyo

端末の活用 -- tmux

  • ターミナルマルチプレクサ
    • 一つの端末画面の中に複数の仮想端末を作成し、切り替えるやつ
    • デタッチ/アタッチ機能
      • 各ウィンドウの作業状況を保ったまま終了
      • 次回接続時に再開
  • 有名所
    • tmux
    • screen

ウィンドウ操作

  • プレフィックスキー
    • Ctrl + b
    • あらゆる操作の起点
  • 主要な操作
    • プレフィックスキー c
      • ウィンドウ作る
    • プレフィックスキー &
      • 今いるウィンドウ消す
      • ぜんぶ消すとtmux終了
    • プレフィックスキー <数字>
      • <数字>番のウィンドウに移動
    • プレフィックスキー n|p
      • next/prev ウィンドウ移動
    • プレフィックスキー w
      • ウィンドウ一覧表示
        • 数字入力でウィンドウ切り替えとかできる

セッション操作

  • プレフィックスキー d
    • デタッチ
[detached (from session 0)]
  • デタッチしたセッションに一覧
tmux ls
0: 1 windows (created Fri Apr 19 10:55:54 2019) [70x23]
  • いっぱい作ったりもできる
0: 3 windows (created Fri Apr 19 10:55:54 2019) [70x23]
1: 1 windows (created Fri Apr 19 10:59:13 2019) [70x23]
  • アタッチ
tmux attach # 最後にアタッチしたやつ(たぶん)
tmux attach -t 1
  • 新しいセッションつくる
tmux new-session
  • セッションけす
tmux kill-session # 最後の
tmux kill-session -t 1
  • 全消し
tmux kill-server

プロセスの実行優先度(priority)

  • CPU時間を多く割り当てる
  • ナイス値(niceness)
    • 小さいほど優先順位高い
    • 値域[-20,+20)の整数

コマンド実行時の優先度指定

  • niceコマンド
       -n, --adjustment=N
              add integer N to the niceness (default 10)
  • 実行優先度を10上げてupdatedb実行
nice -n -10 updatedb
  • マイナス値設定=優先度を上げる場合、root権限必要
nice: 優先度を設定できません: 許可がありません
updatedb: `/var/lib/mlocate/mlocate.db' 用の一時ファイルを開けません

実行中プロセスの優先度変更

  • reniceコマンド
RENICE(1)                    User Commands                    RENICE(1)

NAME
       renice - alter priority of running processes

SYNOPSIS
       renice [-n] priority [-g|-p|-u] identifier...
  • PID1200を実行優先度10(niceness-10)に再設定する例
renice -10 -p 1200
  • headコマンド等のように数値の前に-を付けたりはしないので注意
    • renice --10とか書かない