基本的なファイル管理
-
ファイルシステム
- ファイルやシステムの配置のこと
- ディスクデバイスなどのデータをファイルやディレクトリとして扱う機能のこと
-
ルートファイルシステム
/
を含むファイルシステム
ファイルの圧縮・解凍
- 有名どころ
gzip | bzip2 | xz | |
---|---|---|---|
圧縮コマンド | gzip | bzip2 | xz |
圧縮率 | 低い | 中 | 高い |
時間 | 短い | 中 | 長い |
ls -l $(which {gunzip,bunzip2,unxz})
unxz
だけはxz
のシンボリックリンク
-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.gz
とか
tar
- デフォルトで圧縮しない
-
オプションで圧縮可能
- gzip
- bzip2
- xz
-
省略可能
主なオプション
-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
- ファイルをアーカイブからコピー
- アーカイブからファイルをコピー
- カレントディレクトリ以下のファイルを
/tmp/backup
にバックアップする例
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
: 読み取り権,4w
: 書き込み権,2x
: 実行権,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
rws
のs
がそう- 数値表現では
4755
例2: ディレクトリに設定
- ディレクトリに対してSGIDを設定すると、ファイルやディレクトリの所有グループにはディレクトリ自体の所有グループが適用される
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ノード番号
- ファイルやディレクトリに紐づくiノードの番号
- 1対1
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
制限
-
ファイルシステムをまたぐハードリンクは作れない
- iノードはファイルシステムごとに管理されている
-
ディレクトリのハードリンクは作れない
-
昔はできたが、禁止したらしい
-
ディレクトリの無限ループ
- シンボリックリンクと異なり区別がつかないため、検出アルゴリズムはiノード番号を記憶する必要があり、大変
- unlinkが禁止されたためリンクを削除するすべがなくなった
-
-
シンボリックリンク
- ポインタみたいな感じ
-
ポインタ変数を新しくスタックに積むのと同じように、
シンボリックリンクそれ自体も新しいファイル扱い- 新しくiノード番号が振られる
- Windowsのショートカット、OS Xのエイリアスが同等の機能
- ディレクトリのシンボリックリンクは作成可能
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
- cpはデフォルトでシンボリックリンクをderefする
- シンボリックリンク自体をコピーしたい場合は
-d
プロセス管理
プロセスの監視
-
プロセス
- 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
-
OS: Linux
uname
に同じ
-
ホスト名: wand-ThinkPad-X240s
hostname
コマンドに同じ
- カーネルバージョン: 4.15.0
- アーキテクチャ: x86_64
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
とか書かない