この章で説明する手順は次のとおりです。
以前は使用できていたプログラム、ファイル、またはディレクトリにアクセスできなくなるような問題が発生する (システム管理者に問い合わせる) 場合があります。このようなときは、次の 3 点を調べてください。
ユーザーの検索パスが変更されているか、または検索パス中のディレクトリが適切な順序であるか
ファイルまたはディレクトリに適切なアクセス権や所有権があるか
ネットワーク経由でアクセスするシステムの構成が変更されているか
この章では、これらの 3 点を確認する方法を簡単に説明して、可能な解決策を提案します。
「コマンドが見つかりません」というメッセージは、次のいずれかを示しています。
コマンドがそのシステムに存在しない。
コマンドのディレクトリが検索パスに存在しない。
検索パスの問題を解決するには、コマンドが格納されているディレクトリのパス名を知る必要があります。
間違ったバージョンのコマンドが見つかってしまうのは、同じ名前のコマンドを持つディレクトリが検索パスにある場合です。この場合、正しいディレクトリが、検索パスの後ろの方にあるか、まったく存在しない可能性があります。
現在の検索パスを表示するには、echo $PATH コマンドを使用します。
$ echo $PATH /home/kryten/bin:/sbin:/usr/sbin:/usr/openwin/bin:/usr/openwin/bin/xview: /usr/dist/local/exe:/usr/dist/exe
間違ったバージョンのコマンドを実行しているかどうかを調べるには、which コマンドを使用します。
$ which maker /usr/doctools/frame5.1/bin/maker
which コマンドは、.cshrc ファイルの中のパス情報を調べます。.cshrc ファイルに which コマンドの認識する別名を定義している場合に、Bourne シェルか Korn シェルから which コマンドを実行すると、間違った結果が返される場合があります。正しい結果を得るために、which コマンドは C シェルで使用してください。Korn シェルの場合は、whence コマンドを使用します。
現在の検索パスを表示して、コマンドが入っているディレクトリがユーザーのパス内に存在しない (あるいはスペルが間違っている) ことを確認します。
$ echo $PATH
次の項目をチェックします。
検索パスは正しいか
検索パスのいずれかにコマンドが存在するか
パスを修正する必要がある場合は、手順 3 に進みます。修正する必要がない場合は、手順 4 に進みます。
次の表に示すように、適切なファイルでパスを追加します。
次のように、新しいパスを有効にします。
シェル |
パスが指定されているファイル |
パスを有効にするコマンド |
---|---|---|
Bourne と Korn |
.profile |
$ . ./.profile |
C |
.cshrc |
hostname% source .cshrc |
|
.login |
hostname% source .login |
次のコマンドを使用して、パスを確認します。
$ which command
この例は、which コマンドを使用して、OpenWindows の実行可能ファイルが検索パス中のどのディレクトリにも存在しないことを示しています。
venus% openwin openwin: コマンドが見つかりません venus% echo $PATH no openwin in . /home/ignatz /sbin /usr/sbin /usr/bin /etc /home/ignatz/bin /bin /home/bin /usr/etc venus% vi ‾.cshrc(適切なコマンドディレクトリを検索パスに追加する) venus% source .cshrcvenus% openwin
コマンドを見つけることができなかった場合は、マニュアルページでそのディレクトリパスを調べます。たとえば、lpsched コマンド (lp プリンタデーモン) を見つけることができなかった場合、lpsched(1M) のマニュアルページを調べると、そのパスが /usr/lib/lp/lpsched であることが解かります。
以前はアクセスできていたファイルまたはディレクトリにアクセスできない場合、そのファイルまたはディレクトリのアクセス権または所有権が変更されていることがあります。
表 71-1 は、ファイルとディレクトリのアクセス権を設定する 8 進数値を示しています。これらの数を 3 つのセットで使用して、所有者、グループ、およびその他のユーザーのアクセス権を (この順番で) 設定します。たとえば、値 644 は、所有者に読み取り権と書き込み権を設定して、グループとその他のユーザーに読み取り権のみを設定します。
表 71-1 ファイルのアクセス権を示す 8 進数値
値 |
説明 |
---|---|
0 |
アクセス権なし |
1 |
実行権のみ |
2 |
書き込み権のみ |
3 |
書き込み権と実行権 |
4 |
読み取り権のみ |
5 |
読み取り権と実行権 |
6 |
読み取り権と書き込み権 |
7 |
読み取り権、書き込み権、および実行権 |
誰かがスーパーユーザーとしてファイルを編集したために、ファイルやディレクトリの所有権が変更されていることがあります。新しいユーザーのためにホームディレクトリを作成するときは、そのホームディレクトリのドット (.) ファイルの所有者をそのユーザーにすることを忘れないようにしてください。ユーザーが「.」を所有していない場合、そのユーザーは自分のホームディレクトリにファイルを作成できません。
アクセスに関する問題は、グループの所有権が変更されたとき、またはユーザーがメンバーであるグループが /etc/group データベースから削除されたときにも発生します。
ファイルの所有権を変更するには、chown コマンドを使用します。
# chown new-owner filename
new-owner |
ファイルの新しい所有者のユーザー名または UID を指定する。指定したユーザー名のエントリが passwd ファイルに存在しなければならない |
filename |
ファイルまたはディレクトリを指定する |
グループの所有権を変更するには、chgrp コマンドを使用します。
# chgrp new-owner filename
new-owner |
新しいグループの所有者のグループ名または GID を指定する。指定したグループ名のエントリが group ファイルに存在しなければならない |
filename |
ファイルまたはディレクトリを指定する |
ファイルのアクセス権を表示します。
# ls -l filename
-l |
ファイルの現在のアクセス権を含む、長いリストを表示する |
filename |
ファイルまたはディレクトリを指定する |
# chmod nnn filename
nnn |
ファイルの所有者、グループの所有者、およびその他のすべてのユーザーに (この順番で) 割り当てるアクセス権を表す数値 |
filename |
ファイルまたはディレクトリを指定する |
アクセス権は、指定した数値を使用して変更されます。
ファイル名にメタキャラクタ (* など) を指定したり、ファイル名とメタキャラクタを組み合わせたりすることによって、ディレクトリ内の複数のファイルまたはすべてのファイルのアクセス権を変更できます。
ls -l コマンドを使用して、アクセス権が変更されていることを確認します。
$ ls -l filename
長いリストによって、ファイルの現在のアクセス権が表示されます。
次の例は、公開ディレクトリのアクセス権を、744 (読み取り/書き込み/実行、読み取り専用、読み取り専用) から 755 (読み取り/書き込み/実行、読み取り/実行、読み取り/実行) に変更する方法を示しています。
$ ls -ld public_dir drwxr--r-- 1 ignatz staff 6023 Aug 5 12:06 public_dir $ chmod 755 public_dir $ ls -ld public_dir drwxr-xr-x 1 ignatz staff 6023 Aug 5 12:06 public_dir
次の例は、実行可能なシェルスクリプトのアクセス権を、読み取り/書き込みから読み取り/書き込み/実行に変更する方法を示しています。
$ ls -l my_script -rw------- 1 ignatz staff 6023 Aug 5 12:06 my_script $ chmod 700 my_script $ ls -l my_script -rwx------ 1 ignatz staff 6023 Aug 5 12:06 my_script
ファイルまたはディレクトリの所有者を変更するには、そのファイルまたはディレクトリを所有していなければなりません (または、ルートのアクセス権を持っていなければなりません)。
スーパーユーザーになります。
ファイルのアクセス権を表示します。
# ls -l filename
-l |
ファイルの所有権 (3 番目の列に表示される) を含む、長いリストを表示する |
filename |
ファイルまたはディレクトリを指定する |
# chown new-owner filename
所有権は、指定した新しい所有者に割り当てられます。
ファイルの所有権が変更されていることを確認します。
# ls -l filename
# ls -l quest -rw-r--r-- 1 fred staff 6023 Aug 5 12:06 quest # chown ignatz quest # ls -l quest -rw-r--r-- 1 ignatz staff 6023 Aug 5 12:06 quest
ファイルのアクセス権を表示します。
# ls -l filename
ファイルまたはディレクトリを所有するグループを変更します。
$ chgrp GID filename
指定したファイルまたはディレクトリのグループ ID が変更されます。
ファイルの所有権が変更されていることを確認します。
# ls -l filename
$ ls -l junk -rw-r--r-- 1 kryten other 3138 Oct 31 14:49 junk $ chgrp staff junk $ ls -l junk -rw-r--r-- 1 kryten staff 3138 Oct 31 14:49 junk
グループアカウントを編集する方法については、第 51 章「ファイルのセキュリティの適用手順」を参照してください。
リモートコピーコマンド rcp を使用してネットワーク上でファイルをコピーするときに問題が発生した場合、リモートシステム上のディレクトリやファイルは、アクセス権の設定によりアクセスが制限されている可能性があります。他に考えられる問題の原因は、リモートシステムとローカルシステムがアクセスを許可するように構成されていないことです。
ネットワークアクセスで発生する問題と AutoFS 経由でシステムにアクセスするときの問題については、『NFS の管理』を参照してください。