本日は、昨日のLinuxの話のつづき。
Linuxのファイルシステム
Linuxのファイルシステムには、iノードとディレクトリ構造の2つの管理方法がある。
iノード
iノードは、iノード番号でファイルの場所を特定する。
iノード番号には限りがあり、たとえ容量があってもiノード番号が枯渇するとデータを追加することができない。
iノードには、
- セクタ(ディスク上の場所)
- タイムスタンプ
- 所有者・所有グループ
- パーミッション(アクセス権)
などの情報が登録されている。
リンク
Linuxには、リンクと呼ばれるWindowsのショートカットのような機能がある。
リンクには、ハードリンクとシンボリックリンクがある。
ハードリンク
ハードリンクは、1つのiノード番号で、名前の違う複数のファイルを管理する。
このため、元ファイルが消えても、リンクからファイルを参照することができる。
シンボリックリンク
シンボリックリンクは、元ファイルとリンクが別々のiノード番号を持つ。このため、Windowsのショートカットと同じように、元ファイルを削除するとリンクも使用できなくなる。
リンクのコマンド
コマンド ln
オプション -s シンボリックリンク
ユーザー管理
Linuxでは、アカウントによってユーザーが管理される。
アカウントは、ユーザーアカウントとグループアカウントがあり、ユーザーは最低1つのグループに属さなくてはならない。
ユーザー情報は、さまざまなファイルで管理されている。
またユーザーの種類には、管理者権限を持つスーパーユーザーと、それ以外のログインユーザーにわけられる。
ユーザー管理ファイル
passwd(パスダブリュディー)
ユーザー情報が入っている。
スーパーユーザーは読込、書込ともに可能。
ログインユーザーは読込が可能。
shadow
ユーザーのシャドウパスワードと有効期限が入っている。
スーパーユーザーのみ、読込が可能。
group
グループ情報が入っている。
スーパーユーザーは読込、書込が可能。
ログインユーザーは読込が可能。
gshadow
グループのシャドウパスワードと有効期限が入っている。
スーパーユーザーのみ、読込が可能。
ユーザー管理コマンド
id
■機能
ユーザー情報の表示。
■構文
id ユーザー名
■オプション
-g プライマリグループの情報のみ表示。
-G 所属グループのみ表示。
who
■機能
ログインしているユーザーの情報を表示。
■構文
who オプション
■オプション
am i 自分の情報を表示。
-q ログインユーザーの人数、ログイン名のみ表示。
useradd
■機能
ユーザーアカウントの作成。
■構文
useradd オプション ユーザー名
■注意
スーパーユーザーのみ使用可能。
passwd
■機能
パスワードの設定
■構文
passwd オプション ユーザー名
■注意
passwdは、スーパーユーザーと一般ユーザーとではその扱いが違う。
一般ユーザーは、設定不可条件があり、毎回パスワードの入力が必要。
スーパーユーザーは、ログインユーザー以外のパスワードも変えることができる。
一般ユーザーがパスワードを忘れた際には、管理者がログインしてユーザー自身にパスワードを変更してもうら必要がある。
usermod
■機能
ユーザー情報の変更。
■構文
usermod オプション ユーザー名
userdel
■機能
ユーザー情報の削除。
■構文
userdel オプション ユーザー名
■オプション
-r ユーザーのホームディレクトリも削除
■注意
スーパーユーザーのみ使用可能。
groupadd
■機能
グループの作成
■構文
groupadd オプション グループ名
groupmod
■機能
グループのプロパティ変更
groupdel
■機能
グループの削除
■注意
そのグループをプライマリグループとするユーザーがいる場合は削除できない。
### デフォルト設定の変更
コマンドで、ユーザー作成時のデフォルト設定を変更することができる。
■構文
useradd -D オプション
■注意
スーパーユーザーのみ使用可能。
作業ユーザーの変更
Linuxでは、作業ユーザーを切り替えることができる。
別のユーザーでログインして作業すると、それまでのユーザーの作業状態が失われるため、大変便利な機能である。
■構文
su オプション ユーザー名
■オプション
- 環境変数等、新しいユーザーとしてログインした場合と同じ状態になる。
■注意
スーパーユーザーはユーザー名不要。
一般ユーザーはパスパード必須。

正規表現とパイプ
shell(シェル)
シェルは、コマンドを実行するためのプログラム。
Linuxでは、bash(バッシュ)が標準で使われる。
シェルには、コマンドを複数組み合わせて実行するシェルスクリプトの機能もある。
シェルの標準入出力
シェルは、キーボードから入力された情報を、標準出力と標準エラー出力にわけて、ディスプレイに表示することができる。
シェルのリダイレクト
標準入力、標準出力、標準エラー出力先は必要に応じて切り替えることができる。
これをリダイレクトと呼ぶ。
リダイレクトの記号
■標準入力のリダイレクト
コマンド < ファイル
■標準出力のリダイレクト
コマンド > ファイル
■標準入出力のリダイレクト
コマンド < ファイル1 > ファイル2
※ファイル1の内容をコマンドに渡し、結果をファイル2に出力する。
cat+リダイレクト
catとリダイレクトを組み合わせてファイルを作成することができる。
cat text
→textというファイルの内容を表示する。
⇓
cat > text →textというファイルを表示して入力する
Who am I? ←入力する内容。
※ctrl+dで入力終了
コマンド >> ファイルによるリダイレクト
>>を使うことで、前のデータを残したまま入力できる。
cat text
Who am I?
date >> text
Who am I?
2017年9月6日 水曜日 12:30:40
↑catでtextというファイルを表示すると、Who am I?というデータがあった。
dateコマンド(日付を入力する)を>>で使うと、textファイルのWho am I?は残したまま、日付が追記される。
※ >が1つの場合、データは上書きされる。
1と2を使うリダイレクト
1 標準
2 エラー
コマンド 2> ファイル
→標準エラー出力をリダイレクト。
コマンド > ファイル1 2> ファイル2
→標準出力をファイル1へ、標準エラー出力をファイル2へ出力。
コマンド > ファイル 2>&1
→標準出力と標準エラー出力を1つのファイルにまとめて出力。
パイプ
Linuxでは、パイプによってコマンドを組み合わせて使うことができる。
■構文
コマンド | コマンド
■例
ls -l /bin | less
→(lsだけでは情報が多く流れてしまう場合に)lessを組み合わせて1画面ずつ表示できる。
ワイルドカード
ワイルドカードは、簡単に文字列を探したり指定する表現方法。
■記号
? 任意の1字
* 0個以上の文字列
{…} …の中の任意の1字
[…] …の中の任意の文字列
¥ ワイルドカードの記号をエスケープする(記号の代わりに使える)
■例
file??? fileのあとに3文字つく文字列を探す
*.png 拡張子が.pngのすべての文字列を探す
grep
grepコマンドは、指定ファイルの中から、指定されたパターンを含む文字列を検索できる。
■構文
grep オプション パターン ファイル名
■オプション
-n 行番号を表示する
-v 一致しなかった行を出力する
■注意
パターンの指定には正規表現を使うことができる。
パターンは””で括る。
正規表現
正規表現は、高度な文字列指定を実現するための国際基準の記号で、ワイルドカードやgrepコマンドと組み合わせて使う。
■よく使う記号
^ 行頭を表す
$ 行末を表す
, 任意の1字を意味する
* 直前文字の0回以上の繰り返し
+ 直前文字の1回以上の繰り返し
[…] …の中の任意の1字を意味する
{^…} …の中の任意の1字が含まれていないことを意味する
¥ 正規表現の記号をエスケープする

ファイルのセキュリティ
ファイルのアクセス権
UNIXのファイル(ディレクトリ)は、所有者・グループ・その他に対して、読み取り、書き込み、実行のアクセス権を設定できる。
ファイルのアクセス権は、パーミッション、モード、アクセスモード、保護モードなどと呼ばれる。
drwxrwxrwx
ファイルのアクセス権は、上記のように記述する。
頭のd ⇒ directoryを意味する。ファイルは -(ハイフン)、リンクは | で表す。
前半のrwx ⇒ 所有者に対する権限。
真ん中のrwx ⇒ グループに対する権限。
後半のrwx ⇒ その他に対する権限。
r ⇒ read(読み込み)
w ⇒ write(書き込み)
x ⇒ excute(実行)
– ⇒ NG(その権利はありません)
■例
-rwxr-xr–
- 通常ファイル
- 所有者は、読み込み、書き込み、実行が可能。
- グループは、読み込み、実行が可能。
- その他は、読み込みのみ可能。
アクセス権とbit情報
ファイルのアクセス権は、bit情報として保護されている。
bit情報は、3bitごとに8進数に変換され、3桁の数字で表現される。
■例
-rwxr-xr–
=111 101 100
= 7 5 4
chomod
アクセス権のbit情報は、chomodコマンドで変更することができる。
■構文
chomod モード ファイル
・例
chomod 754 test.txt
⇒ test.txtのファイルのアクセス権を、所有者は読み込み、書き込み、実行可能、グループは読み込み、実行可能、その他は読み込みのみ可能に変更する。
■文字による指定
chomodは、特定の文字で指定することもできる。
u:自分
g:グループ
o:その他
a:すべて
+:許可する
-:許可しない
r:読み込み
w:書き込み
x:実行
・例
chomod g+w test.txt
⇒ test.txtファイルの、グループに対しての書き込みを許可する。
■モード
モードの指定には次の3つの特殊な属性がある。
setuid ⇒ 実行すると所有者が実行した場合と同じになる。
setgid ⇒ 実行するとグループが実行した場合と同じになる。
sticky ⇒ ディレクトリに設定すると、所有者以外は削除できなくなる。
umask
umaskコマンドを使って、デフォルトのアクセス権(初期値)を変更することができる。
umask値は必ず頭に0をつける。
・例 754 ⇒ 0754 037 ⇒ 037
※デフォルト
・ファイル rw-rw-rw-
・デフォルト rwxrwxrwx
■構文
umask ⇒ umask値を確認。
umask 0 ⇒ umask値をクリア。
umask 007 ⇒ グループのアクセス権をすべて禁止する。(例)
基本のコマンド
touch
■機能
アクセス時刻と修正時刻を変更
■構文
touch オプション ファイル名
■オプション
-a アクセス時刻のみ変更
-m 修正時刻を変更
-t 指定した時刻に変更
※ -t timeの形式で使用
3種類の時刻
UNIXの時刻は3種類の時刻で管理されている。
atime 最終アクセス
mtime ファイルを変更した時間
ctime 状態(ユーザーなど)を変更した時間
head / tail
■機能
ファイルの先頭 / 末尾 を表示。
sort
■機能
ファイルの並び替え
uniq
■機能
行の重複の消去
tr
■機能
文字の置き換え
diff
■機能
ファイルの比較
■構文
diff オプション ファイル1 ファイル2
■注意
昨日書いたプログラムと今日のもの比べたり、正誤を比較するのによく使うコマンド。
プロセスのコマンド
プロセスとは、実行中のプログラムのこと。コマンドでプロセスを確認したり操作することで、容量の無駄な消費を抑えることができる。
ps
psコマンドで、プロセスの一覧を表示することができる。
構文
ps オプション
オプション
-l ロングフォーマット
-ef 詳細な情報を表示する
top
topコマンドで、CPUの使用状況を調べることができる。
構文
top -u ユーザー名
注意
topコマンドはプログラムなのでviエディタと同じようにqで終了する。
スワップ領域:急激な負荷を逃がすための領域。
kill
killコマンドで、プロセスにシグナルを送ってプログラムを制御する(ゾンビプロセスを防ぐ)ことができる。
構文
kill -シグナル プロセスID
注意
Linux自体もkillコマンドで終了するので、使用する際には十分に注意する。
date
dateコマンドで、表示フォーマットを指定することができる。
構文
date +”フォーマット”
アーカイバ
書棚のように関連したファイルをまとめたり、まとめたものから元のファイルを取り出したりする昨日をアーカイバと言う。
圧縮は、アーカイバについている機能のひとつ。
構文
tar cvf 作成するファイル名 アーカイブするファイル ⇒アーカイブする。
※拡ファイル名には拡張子を使う。習慣として.tarを使うことが多い。
tar xvf アーカイブファイル ⇒アーカイブファイルを展開する。
tar tvf アーカイブファイル ⇒アーカイブファイルの一覧表示。
nkf(network kanji filter)
nkfコマンドで、感じコードの変換を行うことができる。
別々のOS間でファイルを移動する際などに変換する必要がある。
構文
nkf オプション ファイル
scripit
scriptコマンドで、画面のハードコピーを行うことができる。
du
duコマンドで、ディスクの容量を表示することができる。
last
lastコマンドで、ログイン履歴を表示することができる。