コンテンツにスキップ

6. ファイルとプロセスの管理

6.1. 基本的なファイルの管理

6.1.1. ファイルの圧縮と解凍

ファイルの圧縮解凍

ファイルの圧縮解凍を行うコマンドはいくつかあり、gzip, bzip2, xzなどがある。

gzip bzip2 xz
圧縮コマンド gzip bzip2 xz
圧縮率 低い 高い
時間 短い 長い

gzipコマンド

ファイルを圧縮と解凍するコマンド。

gzip <ファイル>
オプション 説明
-d 圧縮ファイルを展開 (解凍)
-c 圧縮ファイルを標準出力へ出力
-r ディレクトリ内の全てのファイルを圧縮
-k 圧縮前ファイル残す

gunzipコマンド

ファイルを解凍するコマンド。 gunzipコマンドは gzip -d と同じ実行結果が得られる。

gunzip <ファイル名>
オプション 説明
-c 出力を標準出力に展開して、元ファイルは変更しない
-f すでにファイルがある場合は上書きを行い、強制的に解凍
-r ディレクトリ内の全てのファイルを再帰的に解凍

bzip2コマンド

gzipよりも処理時間はかかるが圧縮効率の高いコマンド。

bzip2 <オプション> <ファイル>
オプション 説明
-d 圧縮ファイルを展開 ( 解凍 )
-c 圧縮ファイルを標準出力へ出力
-k 圧縮前ファイル残す

xzコマンド

bzip2よりも処理時間はかかるが圧縮効率の高いコマンド。

xz <オプション> <ファイル>
オプション 説明
-d 圧縮ファイルを展開 ( 解凍 )
-c 圧縮ファイルを標準出力へ出力
-k 圧縮前ファイル残す

6.1.2. 圧縮ファイルの閲覧

zcat, bzcat, xzcatなどがある。

コマンド 対応拡張子
zcat .gz
bzcat .bz
xzcat .xz

6.1.3. アーカイブの作成と展開

アーカイブとは

アーカイブは複数ファイルをまとめたもの。 ディレクトリ単位で圧縮を行うにはまずディレクトリをアーカイブにする必要がある。

tarコマンド

tarコマンドはファイルやディレクトリを1つのアーカイブファイルにしたり、圧縮/展開するコマンド。 デフォルトで圧縮しないため、tarコマンドで圧縮を行うためには-zオプションや、-jオプションを指定する必要がある。

tar <オプション> <ファイル>
オプション 説明
-c アーカイブの作成
-x アーカイブからファイルの取り出し
-t アーカイブの内容の確認
-f ファイル名 アーカイブファイル名の指定
-z gzip による圧縮 ・ 展開
-j bzip2 による圧縮 ・ 展開
-J 7zip による圧縮 ・ 展開
-v 詳細な情報の表示
-u アーカイブ内にある同じ名前のファイルより新しいものだけを追加
-r アーカイブにファイルの追加
-N 指定した日付より新しいデータのみを対象とする
-M 複数デバイスへの分割
--delete アーカイブからファイルの削除

cpioコマンド

cpioはファイルをアーカイブファイルにコピーしたり、アーカイブからファイルをコピーできるコマンド。

ls | cpio -o > /tmp/backup
オプション 説明
-i オプション パターン アーカイブからファイルを抽出
-o オプション アーカイブの作成
-p オプション ディレクトリ ファイルを別のディレクトリにコピー
オプション 説明
-A 既存のアーカイブファイルに追加
-d 必要な場合にディレクトリの作成
-r ファイルを対話的に変更
-t コピーせず、入力内容の一覧表示
-v ファイル名の一覧表示

ddコマンド

入力側に指定したファイルからの入力をファイルまたは標準出力に送るコマンド。

dd if=/dev/zero of=/dev/sda bs=446 count=1
オプション 説明
if= 入力ファイル 入力側ファイルの指定
of= 出力ファイル 出力側ファイルの指定
bs= バイト数 入出力のブロックサイズの指定
count= 回数 回数分の入力ブロックをコピー

6.2. ファイルを管理する設定値

6.2.1. ファイルの情報を表すパラメータ

ファイルの情報は以下のようにls -l fugafugaを行うと表示される。

drwxr-xr-x 3 wand docker 4096  2月 26 22:54 .

これは以下の情報を含む * d ... ファイルのタイプ * wxr-xr-x ... アクセス権(所有者, 所有グループ, その他のユーザ) * 3 ... リンク数 * wand docker ... 所有者,所有グループ * 4096 ... ファイルサイズ

アクセス権

Linuxで作成されるファイルやディレクトリにはアクセス権(パーミッション)が設定される。 これでユーザごとにファイルへのアクセスの許可または禁止を設定できる。

アクセス権 表記 説明
読み取り r read。ファイルの読み取りが可能 ( 内容表示など )
書き込み w write。ファイルへの書き込みが可能 ( 編集や上書きコピーなど )
実行 x execute。ファイルの実行が可能 ( プログラムやシェルスクリプトの実行 )

SUID

ユーザはUIDと呼ばれるID番号で管理されている。 SUID(Set User ID)は一時的に別のUIDのユーザに変更できる機能のこと

chmodコマンドでSUIDを設定する場合は4000をパーミッション設定時に加算、またはu+sを追加する。

chmod 4755 testdata.txt
chmod u+s testdata.txt

SGID

SGIDはSUIDは所有者の権限で動作するのに対して、グループの権限で動作する。

chmodコマンドでSGIDを設定する場合は2000をパーミッション設定時に加算、またはg+sを追加する。

chmod 2755 testdata.txt
chmod g+s testdata.txt

スティッキービット

スティッキービットは所有者とrootユーザのみが名前の変更と削除を行えるようにする仕組み。 全ユーザーがファイルを作成できるが作成したファイルを他人がファイル名の変更や削除をできないようにしたい場合に使用する。

chmodコマンドでスティッキービットを設定する場合は1000をパーミッション設定時に加算、またはo+tを追加する。

6.2.2. パーミッションの設定変更

chmodコマンド

アクセス権を変更するコマンド。 -Rオプションで指定したディレクトリ以下の全てのファイルのアクセス権の変更が可能。

chmod 644 text.txt
chmod go+w testdata.txt
カテゴリー 説明
u 所有者
g グループ
o その他のユーザ
a 全てのユーザ
定義 説明
+ アクセス権の追加
- アクセス権の削除
- アクセス権の指定
権限 説明
r 読み取り権限
w 書き込み権限
x 実行権限
s SUID または SGID
t スティッキービット

umaskコマンド

umask値の確認とumask値の設定を行うコマンドでデフォルトのアクセス権を変更できる。

umask <マスク値>

passwdコマンド

パスワードを変更できるコマンド。 /etc/passwdに変更情報が保存される。

6.2.3. ファイルの所有者の管理

chownコマンド

所有者の変更を行うコマンド。実行にはroot権限が必要。 -Rで再帰的実行が可能。

chown root piyo

chgrpコマンド

グループの変更の変更を行うコマンド。一般ユーザーでも使用が可能。 -Rで再帰的実行が可能。

chgrp wand fuga

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

ファイルの実体とファイル名をつなぐ事をリンクと呼ばれ、リンクにはシンボリックリンクとハードリンクの以下の2種類がある。

ハードリンク

ハードリンクは1つのファイルの実体を複数のファイル名で表せるリンク。同じファイルの実体を共有する方式。 特徴は以下の通り。

  • iノード番号(ファイルやディレクトリと1対1で紐づく情報の番号)が同じ
  • リンク元のファイルが移動、削除されても、ファイルの実体にはアクセスできる
  • 異なるファイルシステム上のファイルやディレクトリにリンクできない

シンボリックリンク

シンボリックリンクはリンク元ファイルが配置されている場所にリンクする方式。 プログラミング言語におけるポインタの概念に近い。

特徴は以下の通り。

  • 新しいiノード番号が付与される
  • リンク元のファイルが移動、削除されると、リンク元のファイルの実体にアクセスできない
  • 異なるファイルシステム上のファイルやディレクトリにリンクできる

6.3. プロセスの管理

6.3.1. プロセスの監視

プロセスとは

プロセスはOSが動作中のプログラムを管理する基本単位OSが動作中のプログラムを管理する基本単位のこと。 ハードディスクからメモリ上に読み出され、実行されているプログラムがそれぞれ表される。

psコマンド

プロセス情報を確認するコマンド。 オプションは-つきとそうでないもの混在する。

ps aux #全部の実行中プロセス確認
| オプション | 説明 | | --- | --- | | a | 他のユーザーの全てのプロセスを表示 | | f | プロセスの親子関係を表示 | | u | プロセスのユーザー情報を表示 | | x | 端末を利用していない全てのプロセスを表示 | | -e | 全てのプロセスを表示 | | -l | プロセスの詳細情報の表示 | | -p PID | 指定したプロセスID(PID)の情報のみ表示 | | -C プロセス名 | 指定した名前のプロセスのみ表示 | | -w | 長い行を折り返して表示 |

画面表示例は以下の通り。

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

topコマンド

現在実行中のプロセスをリアルタイムに表示するためのコマンド。 デフォルトCPU使用量降順で表示される「q」で終了可能。

top

pstreeコマンド

プロセスの親子関係(親プロセス、子プロセス)を確認するコマンド。

pstree

6.3.2. プロセスの終了

killコマンド

killコマンドはプロセスにシグナルを送るコマンド。

kill <シグナルID> <プロセスID>
シグナルID シグナル名 動作
1 HUP ハングアップ
2 INT 割り込み(Ctrl + C)
9 KILL 強制終了
15 TERM 終了(デフォルト)
18 CONT 停止しているプロセスを再開
19 STOP 一時停止

pgrepコマンド

PID調べるコマンド。

pgrep <プロセス名>

killallコマンド

プロセス名指定してkillするコマンド。

killall <プロセス名>

pkillコマンド

プロセス名指定して-u, -gでプロセスの実行ユーザー・実行グループ指定しながらkillするコマンド。

pkill -u $(whoami) -SIGKILL bash

6.3.3. ジョブ管理

ジョブとは

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

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

ジョブにはフォアグラウンドジョブとバックグラウンドジョブの2種類がある。 通常はフォワグラウンドジョブで実行される。

ジョブ 説明
フォアグラウンドジョブ ジョブの実行中は、シェルは停止する。
バックグラウンドジョブ ジョブとシェルが同時に動作して、シェルは停止しない。

コマンドラインの最後に & を追加することで、コマンドはバックグラウンドジョブで実行できる

ls -la &

jobsコマンド

実行中のジョブを確認できるコマンド。

jobs

nohupコマンド

ログアウト後も処理続行させるためのコマンド。

sudo nohup updatedb &

bgコマンド

停止中のジョブをバックグラウンドで動かすコマンド。

bg <ジョブ番号>

fgコマンド

バックグラウンドで動いているジョブをフォアグラウンドで動かすコマンド。

fg <ジョブ番号>

6.3.4. システム状況の確認

freeコマンド

システムの物理メモリとスワップメモリの使用量、空き容量を表示するコマンド。

free <オプション>
短いオプション 意味
-b メモリの量をバイト単位で表示する
-k メモリの量をKB単位で表示する(デフォルト) ※
-m メモリの量をMB単位で表示する
-g メモリの量をGB単位で表示する
メモリの量をTB単位で表示する
-h 読みやすい単位で表示する
単位を換算する際に1024ではなく1000で割って計算する
-l LowメモリとHighメモリの状況も表示する ※※
-t 物理メモリとスワップメモリの合計を示す行も表示する
-s 間隔 再出力の間隔を「ss.tt秒」で指定する(デフォルトは1回出力して終了する)
-c 回数 再出力する回数を指定する(デフォルトは1回出力して終了する)

uptimeコマンド

システムの稼働時間、システムの平均負荷状況はuptimeコマンドにより確認できるコマンド。

uptime

以下情報が確認可能。

  • システム稼働時間
  • 現在ログイン中のユーザ数
  • システムの平均負荷状況

unameコマンド

システムやカーネルの情報を表示するコマンド。

uname <オプション>
オプション 説明
-a, –all 全ての情報を表示
-n ネットワークノードとしてのホスト名を表示
-r カーネルのリリース番号を表示
-s カーネル名を表示(標準)
-v カーネルのバージョンを表示
-m マシンのハードウェア名を表示
-p プロセッサの種類を表示
-i ハードウェアプラットフォームを表示
-o OS名を表示

watchコマンド

コマンドをn秒ごと(デフォルトでは2秒間隔ごと)に繰り返し実行させるコマンド。

watch <コマンド>
短いオプション 意味
-t ヘッダを表示しない
-e エラー時(実行したコマンドエラーコード0以外で終了したとき)はwatchコマンドも終了する
-b エラー時にはビープ音を鳴らす
-d 直前の実行結果から変化した箇所をハイライト表示する。「permanent」または「cumulative」オプションを付けると初回実行時から変化した箇所を表示する(「-d=permanent」のように指定)
-c ANSIによるスタイル指定を行う
-g 実行結果が変化したらwatchコマンドを終了する
-n 秒数 実行間隔を秒数で指定する(設定できる最小値と最小間隔は0.1秒)
-p 実行のタイミングを厳密にする
-x 指定したコマンドを「sh -c」ではなく「exec」コマンドで実行する

6.4. プロセスの実行優先度設定

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

プロセスの実行優先度を変更することにより、CPU時間を多く割り当てる事が可能。 設定はnice値(値域[-20,+20])という小さいほど優先順位高いの値で設定ができる。

6.4.2. プロセスの実行優先度に関するコマンド

niceコマンド

コマンド実行時の優先度指定を指定できるコマンド。

nice -n -10 <プロセス名>

reniceコマンド

実行中プロセスの優先度変更ができるコマンド。

renice -10 -p 1200

6.5. 複数端末の使用

6.5.1. ターミナルマルチプレクサ

ターミナルマルチプレクサは一つの端末画面の中に複数の仮想端末を作成/切り替えができる仕組み。 デタッチ/アタッチ機能、つまり各ウィンドウの作業状況を保ったまま終了/再開が可能。

有名なターミナルマルチプレクサとしてはtmuxscreenがある。

6.5.2. Tmuxの使い方

起動/操作コマンド

コマンド 説明
tmux セッションを起動
tmux new -s 名前 名前付きセッションを起動
exit セッションを終了
Ctrl-b d セッションを一時的に中断してメインに戻る (Detach)
tmux a 中断していたセッションに戻る (Attach)
tmux a -t 名前 中断していた名前付きセッションに戻る
Ctrl-b s セッションの一覧を表示
tmux list-sessions セッションの一覧を表示
tmux kill-session -t 名前 指定したセッションを終了

ウィンドウ操作

コマンド 説明
Ctrl-b c 新規ウィンドウを作成 (Create)
Ctrl-b 数字 数字で指定したウィンドウに移動
Ctrl-b n 次のウィンドウに移動 (Next)
Ctrl-b p 前のウィンドウに移動 (Prev)
Ctrl-b l 以前のウィンドウに移動 (Last)
Ctrl-b w ウィンドウの一覧を表示 (Window)
Ctrl-b , ウィンドウ名を変更
Ctrl-b ' ウィンドウ番号を指定して移動
Ctrl-b . ウィンドウ番号を変更
Ctrl-b & ウィンドウ名を終了 (確認付き)
exit ウィンドウを終了