0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

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

Last updated at Posted at 2023-08-10

ファイルとディレクトリの圧縮

gzipコマンド

書式:gzip [オプション][ファイル名]
LinuxではGNU Zip(gzip)形式がよく利用される。ファイル名の末尾が「.gz」で表示される。圧縮後は元のファイルは削除され、圧縮されたファイルが作成される。ディレクトリの圧縮には対応していない

オプション 説明
-d(--decompress) 圧縮ファイルを展開
-c 元のファイルを残して、標準入力へ出力する
-r(--recursive) ディレクトリ内のファイルを全て圧縮する。ディレクトリ自体は圧縮されない
#例 servicesファイルを圧縮
$ gzip services

#例 zipコマンドを使用したservicesファイルを圧縮
$ zip services.zip services

# dataディレクトリの圧縮
$ zip -r data.zip data

gzip形式でファイルを圧縮し、圧縮前の元ファイルも残したい場合はリダイレクトを使用し、標準出力の出力先を画面からファイルに切り替える必要がある。

#「configure」ファイルをgzip形式に圧縮し、圧縮前の元ファイルも残す
$ gzip -c configure > configure.gz

zcatコマンド

書式:zcat [ファイル名]
gzip形式で圧縮されたファイルを展開して直接標準出力へ送信するコマンド。

catコマンドでは圧縮ファイルの内容は正しく表示できない

bzip2コマンド

書式:bzip2 [オプション][ファイル名]
gzip以外でも使える圧縮コマンドで、使い方はgzipと一緒。gzipよりも圧縮効率は高いが、処理に時間がかかる

bzcatコマンド

書式:bzcat [ファイル名]
bzip2形式で圧縮されたファイルを展開して直接標準出力へ送信するコマンド。

catコマンドでは圧縮ファイルの内容は正しく表示できない

xzコマンド

書式:xz [オプション][ファイル名]
bzip2よりもさらに圧出効率が高いが、bzip2よりもさらに処理に時間がかかる

オプション 説明
-d(--decompress) 圧縮ファイルを展開
-k(--keep) 圧縮・解凍後に元ファイルを削除しない
-l(--list) 圧縮ファイル内のファイルを一覧表示する

unxzコマンドでも展開することが可能

圧縮ファイルの閲覧

以下のコマンドを使用することで、解凍しなくてもファイルを閲覧することが可能

コマンド 説明
zcat gzipコマンドで圧縮されたファイルの内容を出力する
bzcat bzip2コマンドで圧縮されたファイルの内容を出力する
xzcat xzコマンドで圧縮されたファイルの内容を出力する

アーカイブの作成と展開

複数のファイルをまとめたファイルのことをアーカイブ(書庫)という。ディレクトリ単位で圧縮を行う場合は、ディレクトリのアーカイブを作成する必要がある

tar(Tape Archieves)コマンド

書式:tar [オプション] ファイル名またはディレクトリ名

ディレクトリ内のファイルやサブディレクトリをディレクトリ毎圧縮するアーカイブを作成・展開する。ファイル名の末尾が「.tar」で表示される。

tarコマンドだけでgzipコマンドを使用せず圧縮されたアーカイブの作成が可能になる
圧縮版作成時の書式:tar czvf アーカイブファイル名 ディレクトリ名
圧縮版展開時の書式:tar xzvf アーカイブファイル名

オプションの並び順に決まりはない

オプション 説明
c(--create) アーカイブを作成する
x(--extract) アーカイブを展開する
v (--verbose) 詳細を表示する
t アーカイブの内容を一覧表示する
f (--file) アーカイブファイルを指定する
i bzip2圧縮を利用する
J xz圧縮を利用する
z gzip圧縮を利用する
# /homeアーカイブをSCSI接続されたテープドライブ(/dev/st0)に作成する場合
$ tar cvf /dev/st0 /home

#アーカイブファイルsoftware.tar.gzをカレントディレクトリ上に展開
$ tar xvzf software.tar.gz

#test.tarというアーカイブ内容を展開せずに内容を表示する
$ tar ft test.tar
$ tar ftv test.tar

tar形式で圧縮され、gzipまたは別の圧縮形式のファイルなども存在する

#sample.tgzを解凍した場合
$ gunzip sample.tgz
samples.tar

cpio(copy in and out)コマンド

書式:cpio [オプション]
cpio形式のファイルをアーカイブファイルにコピーしたり、アーカイブからファイルをコピーする

オプション 説明
-o コピーアウトモード(copy-out mode)。新しいアーカイブを作成
-i コピーインモード(copy-in mode)。アーカイブからファイルを展開

このコマンドは標準入力や標準出力を使用するので、入力ファイルや出力ファイルをコマンドの引数として指定することができない。
findやlsコマンドなどでアーカイブにまとめるファイル(入力ファイル)の一覧を取り出し、パイプを使用して標準出力に渡す。作成するアーカイブ(出力ファイル)はリダイレクトを使用して指定する

#カレントディレクトリ以下にある全てのファイルを1つにまとめて、ユーザのホームディレクトリに「backup.cpio」というアーカイブを作成
$ find . | cpio -o > ~/backup.cpio

#「backup.cpio」というアーカイブを展開
$ cpio -i < ~/backup.cpio
フラグ 説明
-i オプション パターン アーカイブから抽出する
-o オプション アーカイブを作成する
-p オプション ディレクトリ ファイルを別のディレクトリにコピーする
コマンド 説明
-A(--append) 既存のアーカイブにファイルを追加する
-d(--make-directories) 必要ならディレクトリを作成する
-r ファイル名を対話的に変更する
-t(--list) コピーはせず、入力された内容を一覧表示する
-v(--verbose) ファイル名の一覧を表示する

dd(Dataset Definition)コマンド

書式:dd [オプション]
入力側に指定したファイルからの入力を、ファイルもしくは標準出力に送る。cpコマンドと違い、デバイスの内容をファイルにコピーしたり、デバイスからデバイスへコピーしたりすることが可能

オプション 説明
if=入力ファイル 入力側ファイルを指定する(デフォルトは標準入力)
of=出力ファイル 出力側ファイルを指定する(デフォルトは標準入力)
bs=バイト数 入出力のブロックサイズを指定する
count=回数 回数分の入力ブロックをコピーする
#ブートローダのみがゼロクリアされる
# dd if=/dev/zero of=/dev/sda bs=446 count=1

#10Kバイトのサイズを指定してファイルを作成
# dd if=/dev/zero of=file1 bs=10K count=1

/dev/zeroとは??
データの上書きや、ddコマンドで内容のない特定サイズのファイルを生成したい場合などに使用する

ファイルとディレクトリの解凍

書式:gunzip [オプション] ファイル名
書式:bunzip2 [オプション] ファイル名
書式:bunxz [オプション] ファイル名

解凍した場合、自動的に圧縮ファイルは削除され解凍されたファイルだけが残る。圧縮された「~.gz」ファイルはgunzipコマンド、「~.bz2」ファイルはbunzip2コマンド、「~.xz」ファイルはbunxzコマンドで解凍する
#例 services.gzファイルを解凍
$ gunzip services

#例 servicesファイルを解凍
$ unzip services.zip

ファイル管理

グループ

ユーザ-は必ず1つ以上のグループに所属しなければならない。以下のグループ種類が存在する。1次グループは1つ割り当てる必要があり、2次グループは任意になる。

グループ 説明
1次グループ ログイン直後の作業グループ。ファイルやディレクトを新規作成した際に、それを所有するグループとして使用される。
2次グループ 必要に応じて、1次グループ以外のグループを割り当てることが出来る、複数割り当て可能

groupsコマンド

書式;groups [ユーザ名]
自分の所属グループを表示するコマンド。

パーミッションの設定

アクセス権限のこと。一般ユーザーは自分が所有者であるファイルであれば変更可能。他の人が所有するファイルのパーミッションは変更できない。
ファイルやディレクトリの詳細情報の左側にある文字列から権限の状態を確認することができる
全10桁あり、一番最初の桁以降3桁ずつで権限範囲が変わる

$ ls -l
total 12
-rwxrw-r-- 1 test test  50 12月 30 11:21 TestFileA
-rwxr–---- 1 test test  25 12月 30 11:21 TestFileB
-rwx-–---- 1 test test 100 12月 30 11:22 TestFileC
1桁目 2~4桁目 5~7桁目 8~10桁目
ファイルの種類 ファイル所有者の権限 ファイル所有者が属するグループ権限 それ以外の権限

それぞれの桁に表示されているアルファベットはそれぞれ意味がある

表示 権限 内容
r(read) 読み取り ファイルやディレクトリの読み取りができる
w(write) 書き込み ファイルやディレクトリの作成、書き込み、削除ができる
x(execute) 実行 ファイルの実行ができるディレクトリ内のファイルにアクセスできる

rootユーザーはファイルに設定されているパーミッションに関わらず全権限を有している

ディレクトリに書き込み権限がある場合、ファイルに対して権限がなくても削除が出来てしまうので注意が必要!

chmod(change Mods)コマンド

書式:chmod [オプション] アクセス権 ファイル名
権限を付与する際、パラメーターに3桁の数字を入力することで以下の状態にすることができる(オクタルモード)

  • 1桁目(100の位):ファイル所有者の権限設定
  • 2桁目(10の位):ファイル所有者が属するグループの権限設定
  • 3桁目(1の位):それ以外の権限

与える権限の数字は決まっており、それぞれの数字を足した数で権限付与の内容が変わってくる。

読み取り権限 書き込み権限 実行権限 全権限
4 2 1 7

オプションを付けることでディレクトリ以下全てのファイルのアクセス権を変更することが出来る。

パラメーターに以下の記号を組み合わせることで、現在のパーミッションを基準にアクセス権を変更することが出来る。(シンボリックモード)

記号 説明
u 所有者
g 所有グループ
o その他のグループ
a 全てのユーザー
+ 権限を追加
- 権限を削除
= 権限を指定
r 読み取り許可
w 書き込み許可
x 実行許可
s SUID,SGIDの許可
# diary.txtファイルに所有グループの書き込み権限を追加
$ chmod g+w diary.txt

# dataディレクトリから所有者以外の実行権を削除
$ chmod go-x data

SUID(Set User ID)

実行権を持っているユーザーによってプログラムが実行された場合、ファイルの所有者権限で実行されること。

所有者の実行権限欄:s
3桁のアクセス権表記:千の位に4を追加する

SGID(Set Group ID)

設定されたディレクトリ以下でファイルやディレクトリを作成すると、設定されたディレクトリのグループが引き継がれる。グループのアクセス権が適用されるように設定できる。

所有者の実行権限欄:s
3桁のアクセス権表記:千の位に2を追加する

スティッキービット

書き込み権限は存在するが削除できるのはrootユーザーを除くファイルの所有者のみという特殊なアクセス権。パーミッションの末尾に「t」の表示がある。

一般的に/tmpディレクトリが設定される

その他のユーザー実行権限欄:t
3桁のアクセス権表記:千の位に1を追加する

umaskコマンド

書式:umask[マスク値]
ユーザー毎にumask値によってデフォルトのアクセス権が決まる。ファイルは「666」から、ディレクトリは「777」からumask値を引いた値で適用される。
マスク値を指定することで変更することが可能。

下記の場合、ファイルとディレクトリの権限は以下の通りになる

#現在のumask値の確認
$ umask
0002
  • ファイルを作成したときのアクセス権
    666-002=664

  • ディレクトリを作成したときのアクセス権
    777-002=775

所有者と所有者グループの管理

ファイルやディレクトリを作成したユーザーが所有者となり、所有者のプライマリグループが所有者グループに適用される。これらは後から変更することが可能。

chown(change owner)コマンド

書式:chown [-R] 変更後の所有者名 ファイル名またはディレクトリ名
所有者の変更をすることが出来るコマンド。rootユーザーのみ変更することが可能。オプションを付けることでディレクトリ以下全てのファイルやサブディレクトリの所有者をまとめて変更することが出来る

グループも合わせて変更することが可能で「変更後の所有者名.変更後のグループ名」と指定する
また、「chown:グループ名 ファイル名」と指定することで所有グループのみを変更することも出来る

chgrp(change group)コマンド

書式:chgrp [-R] 変更後のグループ名 ファイル名またはディレクトリ名
所有者グループを変更することが出来るコマンド。これはrootだけではなく一般ユーザーでも変更可能。オプションを付けることでディレクトリ以下全てのグループを変更可能

一般ユーザーは「一般ユーザーの所属しているグループのみ」指定可能

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

iノード(index node)

ファイルサイズや最終更新日、アクセス権情報やディスク上のどの場所にファイル内容が書き込まれているかといった情報が記録されている。パーティション(1つの物理的なディスクを論理的に複数に分けた領域)ごとに管理されている。
iノードには連番がつけられており、「ls -i」でiノード番号を確認することが出来る

ハードリンク

書式:In 元のファイル 作成するファイル
iノード番号とファイル名の対応付けをリンクと言い、1つのiノードに複数のファイル名をリンクさせること。実データが複数作成されるわけではない。

  • 複数作成してもディスク容量を消費しない
  • コピーとは異なり、メタデータを変更するだけなのでバックアップを速く行える
  • ハードリンク先のファイルを編集すると、元ファイルも変更される
  • リンク数のみ変更される

hardrink

#例 cat.jpgにneko1.jpgのハードリンクの作成
$ ln data/images/cat.jpg neko1.jpg

inode番号はファイルシステムごとに別々に管理されるため、ファイルシステムが異なると作成不可

シンボリックリンク

書式:In -s 元のファイル 作成するリンクファイル
ファイルに別名を付ける仕組み。ファイルへのポインタ(ファイルの参照先)を格納しているにすぎないので、元のファイルを削除するとファイルの実体は削除されるがリンクは残る。その場合、シンボリックリンクにアクセスすると、リンクしている元ファイルがないためエラーになる。

  • iノード番号は別に割り当てられる
  • パーミッションの先頭に「l」を表示される
  • ディレクトリを基に作成可能

synbolicrink

#例 cat.jpgにneko2.jpgのシンボリックリンクの作成
$ ln -s data/images/cat.jpg neko2.jpg

異なるファイルシステムでも作成可能

プロセス管理

プロセスとは実行中のプログラムのことで、常に複数のプロセスが稼働している。プログラムを実行すると新しいプロセスが生成され、終了とともに消滅する。

キャプチャ6.PNG

ps(Process Status)コマンド

書式:ps [オプション]
現在実行されているプロセスの情報を表示する。オプションなしで実行した場合、実行したユーザーがその端末上で起動したプロセスの一覧が表示される

オプション 説明
a 他のユーザープロセスも表示する
f プロセスの親子関係をツリー状で表示
u ユーザー名を表示する
x 端末から実行されたものでないプロセス(サーバプロセスなど)も表示する
-e 全てのプロセスを表示する
-f 完全なフォーマットでプロセスを表示
-l 長いフォーマットで詳細情報を表示。プロセスの優先度を確認できる
-o ユーザー定義のフォーマットで表示
  • psコマンドの主な表示項目
項目 説明
PID プロセスID。起動すると固有のID番号が割り当てられる。
TTY プロセスを実行した端末名
TIME プロセスの実行時間
CMD 実行コマンド
NI 優先度をnice値で表示される

uptimeコマンド

システムの稼働時間や負荷平均などを表示するコマンド
「コマンド実行時刻」「システムの稼働時間(up)」「ログインしているユーザー数(user)」「CPUの負荷平均値(load average) 最後の1分、5分、15分の順で、負荷100%を1とする」が表示される。

topコマンド

プロセスの実行状況をモニタリングするコマンド。デフォルトで3秒間隔で更新され続ける。終了するにはQキーを押す。
実行中のプロセスの優先度を変更することも可能。

システムが起動すると最初にinitプロセスが生成され、PIDは1となる。

オプション 説明
-d 秒数 更新の感覚を秒単位で指定
-n 数値 表示の回数を数値で指定

pstreeコマンド

書式:pstree [オプション]
プロセスの親子関係を表示するコマンド

  • フォーク:実行中のほかのプロセスから起動
  • 親プロセス:起動元のプロセス
  • 子プロセス:親プロセスが起動したプロセス

シグナル

割り込みによってプロセスに特定の動作をするように通知するための仕組み。通常、プロセスは処理を終えると自動的に消滅するが、プロセスに対してシグナルを送信することで外部からプロセスを終了させることが出来る。

シグナルID シグナル名 動作
1 HUP(SIGHUP) ハングアップ(端末が制御不能もしくは切断による終了)。デーモンプログラムを変更した際、設定ファイルを再読み込みしたい場合などに利用
1 HUP(SIGHUP) 端末の切断によるプロセスの終了
2 INT(SIGINT) interruptの意味。キーボードからの割り込みによる終了(Ctrl+Cキー)
9 KILL(SIGKILL) 強制終了
15 TERM(SIGTERM) Terminateの意味。終了(デフォルト)。終了する前に、アプリケーションごとに必要なクリーンアップの処理を行う
18 CONT(SIGCONT) continueの意味。停止しているプロセスの再開
19 STOP(SIGSTOP) 一時停止
20 TSTP(SIGTSTP) Terminal Stopの意味。端末から入力された一時停止(Ctrl+Zキー)

killコマンド

書式:kill [オプション] [シグナルID/シグナル名] プロセスID
書式:kill [オプション] [シグナルID/シグナル名] %ジョブID
プロセスの実行が終了するとプロセスは消滅する。各種サーバプロセスやシステムプロセスなど明確に終了を指示しなければ動作し続けるものも存在する。その場合はこちらからプロセスに停止信号を送らなければならない
特定のシグナルを指定していない場合は、SIGTERMがデフォルトで送信される

一般ユーザーはユーザー自身が実行したプロセスを終了させることが出来る。rootユーザーは全て終了させることが可能。

#プロセスID28000の終了
$ kill 28000
$ kill -15 28000
$ kill -s TERM 28000

#プロセスの強制終了
$ kill -s KILL 28000

KILLシグナルを使うのはTERMシグナルが有効にならなかった場合のみ。強制終了した場合、プロセスが使っていたファイルが開いたままになるなど不具合が残る可能性がある。

killallコマンド

書式:killall [オプション] [シグナルID/シグナル名] プロセスID
PIDではなくプロセス名で指定してシグナルを送信する。同じ名前のプロセスが複数存在した場合、まとめて終了することが出来る。

pkillコマンド

書式:pkill [オプション][シグナル]プロセス名
killallコマンドと同様にプロセス名を指定してシグナルを送ることが出来る

pgrep(Process GREP)コマンド

書式:pgrep [オプション] プロセス名
指定した名前のプロセスに対応するPIDを表示するコマンド。

オプション 説明
-u ユーザー名 実行ユーザー(実際の権限)名や実行ユーザー識別子(EUID)を指定すると、その権限で動作しているプロセスを検索できる
-U euid ユーザー名やユーザー識別子(UID)を指定すると、ユーザーが実行したプロセスを検索できる
-g uid プロセスの実行グループを指定する

rootユーザーのEUIDは0

プロセスの実行優先度

プロセスには実行優先度(プライオリティ)があり、必要に応じて優先度の指定を行うことができる。優先度の低いプロセスよりも多くのCPU時間を割り当てる

niceコマンド

書式:nice [-n ナイス値]コマンド
プロセスの実行優先度をデフォルトから変更して実行するコマンド。
ナイス値と呼ばれるプロセスの実行優先度を高くしたり低くしたりするために指定する値のことで、-20~19まである。小さいほど優先順位が高くなる。
負数を設定することが出来るのはrootユーザーのみ。

reniceコマンド

書式:renice [-n] ナイス値 [[-p]PID] [[-u]ユーザー名]
すでに実行中のプロセスのナイス値を変更するコマンド。PIDを指定して特定のプロセス優先度を変更したり、ユーザーを指定してそのユーザーの実行しているプロセスに対して優先度の変更をすることも出来る。
優先度を高くすることが出来るのはrootユーザーのみ

オプション 説明
-n ナイス値 ナイス値を指定する(-nは省略可能)
-p PID PIDを指定する(-pは省略可能)
-U ユーザー名 ユーザー名で指定する(-uは省略可能)
#PIDが500のプロセスのnice値を-20に変更する場合
$ renice -20 500
$ renice -20 -p 500

ジョブ管理

ユーザーがコマンドやプログラムをシェル上で実行するひとまとまりの単位をジョブと言う。1つのコマンドを実行したときそのコマンドから複数のプロセスが起動することがある。以下2種類のジョブがある。

  • フォアグラウンドジョブ
    通常、コマンドライン上でジョブを実行すると、それが終了するまで次のコマンドを入力することが出来ない状態のこと

Ctrl+Zでフォアグラウンドのコマンド実行を一時停止することができる

  • バックグランドジョブ
    コマンドラインの末尾に「」を付けることで、裏でジョブを実行させることが出来る。処理に時間のかかるコマンドを実行させるのに有効。

jobsコマンド

書式:jobs
実行中のジョブを確認することが出来る。
[]内の数値はジョブ番号を表し、ジョブが開始された順につけられる。「+」は現在実行中、「ー」は直前に実行されたジョブを表す。

nohup(No Hungup)コマンド

書式:nohup コマンド [引数]
ログアウトした後もプログラムを実行し続ける場合に使用する

fg(fore ground)コマンド

書式:fg [%ジョブID]
フォアグランドでジョブを実行させるコマンド。実行されている最中にCtrl+Zキーを押すとジョブは一時停止状態になる

bg(back ground)コマンド

書式:bg [%ジョブID]
一時停止中のジョブの実行をバックグラウンドで再開させるコマンド。

キャプチャ7.PNG

システムの状況把握

freeコマンド

書式:free [オプション]
メモリの利用状況、空き状況を確認するためのコマンド

オプション 説明
-m MB単位で表示する
-s 秒 指定した間隔で表示し続ける

uptimeコマンド

書式:uptime
システムの稼働時間や平均負荷(load average)を確認するコマンド。表示される3つの数字は直近1分間、5分間、15分間の平均数。

unameコマンド

書式:uname
システムのアーキテクチャやOSを確認するコマンド。コマンドのみの実行だと、OSの種類が表示される。

watchコマンド

書式:watch [オプション] コマンド
指定されたコマンドを繰り返し実行し結果を表示するコマンド。プログラムの出力の経時変化を監視することができる。デフォルトでは2秒ごとにコマンドを実行し、中断されるまで実行を続ける。

オプション 説明
-n(--interval) 秒 指定した秒数ごとに更新する
-d(--differences) 変化した部分をわかりやすく表示する
-t(--no-title) ヘッダ情報を表示しない(コマンド実行結果のみ表示する)

tmuxコマンド

1つの物理的な端末画面から多数の端末を作成、アクセス、制御をすることが出来る文字型端末の画面制御プログラムのこと。tmuxパッケージをインストールする必要がある。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?