4. ファイルとプロセスの管理
4.1 基本的なファイル管理
4.1.1 ファイルの圧縮、解凍
gzipコマンド
ファイルを.gz
形式で圧縮する
オプション | 説明 |
---|---|
-d | 圧縮ファイルを展開する |
-c | 標準出力へ出力する |
-r | ディレクトリ内のファイルを全ての圧縮する |
gunzip
.gz
形式のファイルを解凍する。gzip -d
と同じ
bzip2コマンド
ファイルをbz2
形式で圧縮する。gzipよりも圧縮率が高く、処理に時間がかかる
オプション | 説明 |
---|---|
-d | 圧縮ファイルを展開する |
-c | 標準出力へ出力する |
bunzip
.bz2
形式のファイルを解凍する。bzip2 -d
と同じ
xzコマンド
.xz
形式で圧縮する。bzip2よりも更に高圧縮
オプション | 説明 |
---|---|
-d | 圧縮ファイルを展開する |
-k | 圧縮・解凍後に元のファイルを削除しない |
-l | 圧縮ファイル内のファイルを一覧表示する |
unxzコマンド
.xz
形式で圧縮されたファイルの解凍。xz -d
と同じ
4.1.2 アーカイブの作成、展開
複数のファイルをまとめたfファイルをアーカイブ(書庫)という。ディレクトリ単位で圧縮を行う場合は、まずディレクトリのアーカイブを作る必要がある
tarコマンド
ファイルやディレクトリを1つのアーカイブファイルにまとめたり、展開したり出来る。オプション指定で-
を省略できる
オプション | 説明 |
---|---|
-c | アーカイブを作成する |
-x | アーカイブからファイルを取り出す |
-t | アーカイブの内容を確認する |
-f ファイル名 | アーカイブファイル名を指定する |
-z | gzipによる圧縮/展開を行う |
-j | bzip2による圧縮/展開を行う |
-J | 7zipによる圧縮/展開を行う |
-v | 詳細な情報を表示する |
-u | アーカイブ内にある同名のファイルより新しいものだけを追加する |
-r | アーカイブにファイルを追加する |
-N | 指定した日付より新しいデータのみを対象とする |
-M | 複数デバイスへの分割を行う |
–delete | アーカイブからファイルを削除する |
cpioコマンド
ファイルをアーカイブファイルにコピーしたり、アーカイブファイルからファイルをコピーする
フラグ | 説明 |
---|---|
-i オプション パターン | アーカイブからファイルを抽出する |
-o オプション | アーカイブを作成する |
-p オプション ディレクトリ | ファイルを別のディレクトリにコピーする |
オプション | 説明 |
---|---|
-A | 既存のアーカイブにファイルを追加する |
-d | 必要ならディレクトリを作成する |
-r | ファイル名を対話的に変更する |
-t | コピーはせず、入力された内容を一覧表示する |
-v | ファイル名の一覧表示する |
ddコマンド
入力側に指定したファイルからの入力を、ファイルもしくは標準出力に送る。ハードディスクやCD-ROMなどのデバイスの内容をそのまま取り扱える。
オプション | 説明 |
---|---|
if=入力ファイル | 入力側のファイルを指定する(デフォルトは標準出力) |
of=出力ファイル | 出力側のファイルを指定する(デフォルトは標準出力) |
bs=バイト数 | 入出力のブロックサイズを指定する |
count=回数 | 回数分の入力ブロックをコピーする |
4.2 パーミッションの設定
4.2.1 所有者
所有者を確認するにはls -l
コマンドで確認する
4.2.2 アクセス権
権限 | 表記 |
---|---|
読み取り権限 | r |
書き込み権限 | w |
実行権限 | x |
2進数でも設定可能
chmodコマンド
アクセス権を変更する
オプション | 説明 |
---|---|
-R | 指定したディレクトリ以下に有る全ファイルのアクセス権を変更する |
対象 | 説明 |
---|---|
u | 所有者 |
g | グループ |
o | その他のユーザ |
a | 全てのユーザ |
操作 | 説明 |
---|---|
+ | 権限を追加する |
- | 権限を削除する |
= | 権限を指定する |
許可の種別 | 説明 |
---|---|
r | 読み取り許可 |
w | 書き込み許可 |
x | 実行許可 |
s | SUIDもしくはSGID |
t | スティッキービット |
4.2.3 SUID(Set User ID), SGID(Set Group ID)
ユーザや、グループのアクセス権がs
で設定されている。
- SUID : 実行権を持っているユーザによってプログラムが実行された場合は、ファイルの所有者の権限で実行される。数値で設定する場合は
4000
- SGID : SUIDと同様、グループのアクセス権が適用される設定。数値で設定する場合は
2000
4.2.4 スティッキービット
ユーザの実行権がt
になっているもの。スティッキービットが設定されたディレクトリでは、書き込み権限はあっても自分以外のユーザが所有するファイルを削除することが出来ない。数値で設定する場合は1000
4.2.5 デフォルトのアクセス権
ファイルやディレクトリを作成した時のデフォルトのアクセス権はumask
で設定可能。ファイルは666
-umask値、ディレクトリは777
-umask値
4.3 ファイルの所有者管理
4.3.1 所有者の変更
chownコマンド
ファイルやディレクトリの所有者を変更する。このコマンドはrootしか使用できない
オプション | 説明 |
---|---|
-R | 指定したディレクトリとその中にある全ファイルの所有者を変更する |
4.3.2 グループの変更
chgrpコマンド
ファイルやディレクトリの所属するグループを変更する。一般ユーザでも使用できるが、実行したユーザが所属しているグループに限られる
オプション | 説明 |
---|---|
-R | 指定したディレクトリとその中にある全ファイルの所有グループを変更する |
4.4 ハードリンクとシンボリックリンク
4.4.1 ハードリンク
Linuxではファイルをディスクに保存すると、重複しないiノード
番号が割り当てられる。iノードにはディスク上のファイルに関する属性情報が格納されている。
iノードに格納されている情報
- ファイル種別
- ファイルサイズ
- アクセス権
- 所有者
- リンク
- ディスク上の物理的な保存場所(ブロック番号)
ハードリンク
ファイルの実態が1つでも、その実態を参照するファイルが複数あれば、それぞれのファイル名で同一の実態を参照することが出来る。ハードリンクが複数作成されている場合、その全てを削除するまでは、ファイルの実態は削除されない。リンク元のファイルが存在するファイルシステムと異なるファイルシステム上に作成することはできない。また、ディレクトリのハードリンクを作成することはできない。
4.4.2 シンボリックリンク
実体ではなく、ファイル元へのリンク。シンボリックリンクが保有しているのは、リンク元へのポインタ
4.4.3 リンクの作成
lnコマンド
リンクを作成する。オプション無しだとハードリンクが作成される。
オプション | 説明 |
---|---|
-s | シンボリックリンクを作成する |
4.4.4 リンクのコピー
cp -d
コマンドでシンボリックリンクをコピーできる
4.5 プロセス管理
4.5.1 プロセスの監視
OSが管理する基本単位、それがプロセス!
psコマンド
現在実行中のプロセスを表示する
オプション | 説明 |
---|---|
a | 他のユーザーのプロセスも表示する |
f | 親子関係をツリー状に表示する |
u | ユーザー名も表示する |
x | 制御端末のないデーモンなどのプロセスも表示する |
-e | 全てのプロセスを表示する |
-l | 詳細な情報を表示する |
-p PID | 特定のPIDのプロセス情報のみ表示する |
-C プロセス名 | 指定した名前のプロセスのみ表示する |
-w | 長い行は折り返して表示する |
topコマンド
現在実行中のプロセスを継続的に監視する
- 1行目: システム稼働状況
- 2行目: 実行プロセス数
- 3行目: CPUの状態
- 4~5行目: メモリとスワップの状況
pstreeコマンド
親子関係の構造を表示する。ps -f
と同様
4.5.2 プロセスの終了
killコマンド
プロセスを終了させる
# kill -[シグナル名 or シグナルID] PID
# kill -s [シグナル名 or シグナルID] PID
# kill -SIGシグナル名 PID
シグナル名 | シグナルID | 動作 |
---|---|---|
HUP | 1 | ハングアップ(端末が制御不能もしくは切断による終了) |
INT | 2 | キーボードからの割り込み(Ctr + Cキー) |
KILL | 9 | 強制終了 |
TERM | 15 | 終了(デフォルト) |
CONT | 18 | 停止しているプロセスを再開 |
STOP | 19 | 一時停止 |
pgrepコマンド
指定した名前のプロセスに対応するPIDを表示する
オプション | 説明 |
---|---|
-u ユーザー名 | プロセスの実行ユーザーを指定する |
-g グループ名 | プロセスの実行グループを指定する |
killallコマンド
プロセス名を指定して終了する
# kill -[シグナル名 or シグナルID] プロセス名
# kill -s [シグナル名 or シグナルID] プロセス名
# kill -SIGシグナル名 プロセス名
pkillコマンド
killallと同じく、指定した名前のプロセスを終了する
4.5.3 ジョブ管理
バックグラウンドジョブの実行
コマンドラインの最後に&
を追加する
# updatedb &
実行中のジョブ確認
# jobs
ログアウト後もプログラムを実行する
$ nohup updatedb &
フォアグランドとバックグラウンド
フォアグラウンドで実行中のジョブをバックグラウンドで実行する
# 実行中のジョブをCtr+Zキーで一時停止する
$ bg 1
バックグラウンドで動いてるジョブをフォアグラウンドにする
$ fg 1
4.5.4 システムの状況把握
freeコマンド
メモリの利用状況、空き状況を確認する
オプション | 説明 |
---|---|
-m | MB単位で表示する |
-s 秒 | 指定した間隔で表示し続ける |
uptimeコマンド
システムの稼働時間や平均負荷を確認する
unameコマンド
システムのアーキテクチャやOSを確認する
4.5.5 端末の活用
screenコマンド
端末の中で仮想端末を作成し、複数の仮想端末を切り替えながら作業ができる。
4.6 プロセスの実行優先度
プロセスの優先度を確認するにはtop
コマンドか、ps -l
コマンドを使う
4.6.1 コマンド実行時の優先度指定
プロセスの実行優先度を高くしたり低くしたりするために指定する値をナイス値という。ナイス値は-20~19まで指定でき、小さいほど優先順位が高い。
# nice -n 10 updatedb
4.6.2 実行中プロセスの優先度変更
# renice