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

ファイルの圧縮/解凍、ファイルの権限、プロセス/ジョブ管理などに関して

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

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

ファイルの圧縮解凍

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

gzipbzip2xz
圧縮コマンドgzipbzip2xz
圧縮率低い高い
時間短い長い

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 ファイル名アーカイブファイル名の指定
-zgzip による圧縮 ・ 展開
-jbzip2 による圧縮 ・ 展開
-J7zip による圧縮 ・ 展開
-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で作成されるファイルやディレクトリにはアクセス権(パーミッション)が設定される。 これでユーザごとにファイルへのアクセスの許可または禁止を設定できる。

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

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実行権限
sSUID または 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シグナル名動作
1HUPハングアップ
2INT割り込み(Ctrl + C)
9KILL強制終了
15TERM終了(デフォルト)
18CONT停止しているプロセスを再開
19STOP一時停止

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で割って計算する
-lLowメモリとHighメモリの状況も表示する ※※
-t物理メモリとスワップメモリの合計を示す行も表示する
-s 間隔再出力の間隔を「ss.tt秒」で指定する(デフォルトは1回出力して終了する)
-c 回数再出力する回数を指定する(デフォルトは1回出力して終了する)

uptimeコマンド

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

uptime

以下情報が確認可能。

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

unameコマンド

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

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

watchコマンド

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

watch <コマンド>
短いオプション意味
-tヘッダを表示しない
-eエラー時(実行したコマンドエラーコード0以外で終了したとき)はwatchコマンドも終了する
-bエラー時にはビープ音を鳴らす
-d直前の実行結果から変化した箇所をハイライト表示する。「permanent」または「cumulative」オプションを付けると初回実行時から変化した箇所を表示する(「-d=permanent」のように指定)
-cANSIによるスタイル指定を行う
-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ウィンドウを終了
最終更新 2025.01.19: Added ss command (683d062)