Linux講座にようこそ。このページは「Linuxの使い方 - 第4章 ファイル操作のコマンド2」です。
ここでは「ファイル操作のコマンド1」に引続き、ファイルやディレクトリを取り扱うコマンドをご紹介しますが、コマンドを使うにあたり知っておいたほうがよいことがいくつかありますので、それらに付いても説明します。内容は次の通りです。
コマンド引数にファイルやディレクトリを複数指定する場合、キータッチが増えますので操作性が悪くなります。指定するパス名に規則性がある場合は、ワイルドカード或は、メタキャラクタと呼ばれている特殊記号を使うと複数のパス名をまとめて指定することができます。ワイルドカードには次の3種類があります。
文字列とは複数文字の並びで、代表的な文字列としては人名や地名などがあります。なお、上記ワイルドカードを単なる文字として扱いたい場合は、\(バックスラッシュ)を付加します。(\?、\*、\[、\]のように指定します)
ワイルドカードはシェルが処理しますので全てのコマンドに使用できます。例えば、次のlsコマンドの場合、シェルがDATAディレクトリの下の先頭から4桁が「data」で、5桁目が任意の1文字で、次からの4文字が「.txt」に該当するファイルやディレクトリを探し出して、lsコマンドの引数にセットして実行します。つまり、キーボードから入力したパス名がシェルによって変更された後に、lsコマンドを実行するということです。
図4-1のファイルシステム例で説明します。カレントディレクトリに注目して下さい。
カレントディレクトリはmerryとします。meiboディレクトリの下の先頭から5文字が「meibo」で、最後の1文字が任意のファイルやディレクトリをlsコマンドで表示します。
$ ls meibo/meibo? meibo1 meibo2 meiboA $
カレントディレクトリはmeiboとします。カレントディレクトリの下の先頭から5文字が「meibo」で、最後の1文字が「1」から「5」までのどれか1文字のファイルやディレクトリをlsコマンドで表示します。
$ ls meibo[12345] ← meibo[1-5]でも同じです meibo1 meibo2 $
カレントディレクトリはmeiboとします。dataディレクトリの下の全てのファイルの内容をcatコマンドで表示します。
$ cat data/* (data1の内容) (data2の内容) $
カレントディレクトリはmeiboとします。merryディレクトリの下の先頭1文字が「m」で、2文字目以降が任意のファイルやディレクトリをlsコマンドで表示します。
$ ls ../m* meibo mybin $
UNIX系OSはマルチユーザのシステムですので、1つのファイルシステムを複数の人が共有することになります。自分の所有しているファイルの中には他の人に見られたら困るものもありますし、逆に、他の人にファイルの内容を公開したいものもあります。このようなときにはファイルやディレクトリに保護モード(アクセス権或は、パーミッションとも言っています)を設定します。保護モードを設定するときには、次の2点に付いて考慮する必要があります。
ユーザの種類とアクセスの種類に付いては、それぞれ次の3種類があります。
ユーザの種類 | 指定方法/表示 |
---|---|
ファイルやディレクトリの所有者(user) | u |
所有者と同じグループに属する人(group) | g |
上記以外の他人(other) | o |
ファイルアクセスの種類 | 指定方法/表示 |
---|---|
読み込み(read)の可否 | rが許可で-が禁止 |
書き出し(write)の可否(更新や削除の可否) | wが許可で-が禁止 |
実行(execute)の可否(実行可能ファイルやシェルスクリプトの実行可否) | xが許可で-が禁止 |
実行可能なプログラムが入っているファイルでも、実行許可の保護モードになっていないと実行できません。また、後ほど説明するシェルスクリプトも実行許可の保護モードが必要です。
ディレクトリアクセスの種類 | 指定方法/表示 |
---|---|
読み込み(read)の可否(lsコマンドやfindコマンドでの表示の可否) | rが許可で-が禁止 |
書き出し(write)の可否(新規作成/更新/削除の可否) | wが許可で-が禁止 |
実行(execute)の可否(カレントディレクトリの設定の可否) | xが許可で-が禁止 |
ディレクトリにはディレクトリが管理しているファイルやディレクトリの情報が入っていますので、それが読み込めるということは管理対象のファイルやディレクトリ情報を取得できることになります。従って、lsコマンドやfindコマンドで管理対象のファイルやディレクトリ情報を表示できます。また、書き出せるということは管理対象のファイルやディレクトリ情報を追加/変更/削除できるということになります。従って、管理対象のファイルやディレクトリも追加/変更/削除できるということになります。
保護モードはlsコマンドの-l(詳細情報表示)オプションの指定で表示ができます。例えば、data1ファイルの詳細情報を表示すると、次のような内容になります。
$ ls -l data/data1 ← dataディレクトリの下のdata1ファイルの詳細情報の表示です -rw-r--r-- 1 merry users 7 7月 24 15:17 data/data1 $ $ ls -l data ← dataディレクトリの下の全てのファイルやディレクトリの詳細情報の表示です 合計 8 -rw-r--r-- 1 merry users 7 7月 24 15:17 data1 -rw-r--r-- 1 merry users 20 7月 24 15:20 data2 $ $ ls -ld data ← ディレクトリの情報表示は-dオプションです drwxr-xr-x 2 merry users 4096 7月 24 15:20 data ← dataディレクトリの詳細情報です $
この例のdata1ファイルの保護モードは「rw-r--r--」で、所有者はmerryで、merryの所属するグループはusersです。
保護モードの最初の「rw-」は所有者に対して「読み込み(read)」と「書き出し(write)」を許可して、「実行(execute)」を禁止することを表し、2番目と3番目の「r--」 は同一グループに属する人と、他人に対して「読み込み(read)」だけを許可することを表しています。
次の例の/rootディレクトリはシステム管理者(root)が所有していますが、システム管理者以外(他人)については読み/書き/実行が禁止されています。従って、このディレクトリを一般ユーザが使用しようとしても出来ません。
$ ls -ld /root ← /rootの詳細情報を表示します dr-xr-x---. 17 root root 4096 10月 28 11:12 /root ← 他人に対する保護モードは---です $ $ ls -l /root ls: ディレクトリ '/root' を開くことが出来ません: Permission denied ← エラーメッセージ $ $ cd /root bash: cd: /root: Permission denied ← エラーメッセージ $
保護モードの変更はchmodコマンドで行いますが、変更出来るのは自分が所有しているもののみです。(システム管理者rootは全てのファイルやディレクトリの変更が出来ます)
ファイルやディレクトリを作成すると標準の保護モードが設定されますので、標準の保護モードでは都合が悪いときのみchmodコマンドで保護モードの変更を行います。ちなみに、ファイルの標準の保護モードは「rw-r--r--」ですが、ディストリビューションやバージョンにより異なる場合がありますので注意して下さい。
chmodコマンドでの保護モードの指定の方法にはシンボリック形式と八進数形式があります。シンボリック形式の場合は変更する部分だけを指定し、八進数形式の場合は変更後の値を指定します。
オプション | 意味 |
---|---|
-R, --recursive | ディレクトリパス名以下の全てを変更対象とします。 |
u、g、o | uは所有者、gは同一グループに属する人、oは他人を表します。 |
+、- | +は許可、-は禁止を表します。 |
r、w、x | rは読み込み(read)、wは書き出し(write)、xは実行(execute)を表します。 |
八進数3桁 | 3桁目は所有者、2桁目は同一グループに属する人、1桁目は他人を表し、更に、それぞれの桁の3ビットは左から順にrwxを表します。 |
カレントディレクトリの下のfile1の保護モードを「rw-r--r--」から「rw-------」に変更します。八進数形式の場合、許可するところを「1」、禁止するところを「0」としますと、(110000000)となります。これを3桁ずつ区切れば八進数になります。
$ chmod go-r file1 ← シンボリック形式です $ chmod 600 file1 ← 八進数形式です。2進数で表すと(110000000)です
カレントディレクトリの下のprog1の保護モードを「rw-r--r--」から「rwxr-xr-x」に変更します。
$ chmod ugo+x prog1 ← シンボリック形式です $ chmod 755 prog1 ← 八進数形式です。2進数で表すと(111101101)です
カレントディレクトリの下のmybinディレクトリのファイルで、拡張子が.shのものに実行許可を与えます。
$ chmod ugo+x mybin/*.sh ← シンボリック形式です $ chmod 755 mybin/*.sh ← 八進数形式です。2進数で表すと(111101101)です