カテゴリー:システム管理

質問

「su」でスーパーユーザーになったのに,コマンドを実行すると「command not found」と表示されてしまう

回答

「su -」のように「-」を付けて実行します。そうすれば,環境変数もスーパーユーザーに設定されているものに切り替わり,/sbinや/usr/sbinディレクトリ内のコマンドもコマンド名だけで実行できます。


難易度:★★ 対象ディストリビューション:すべて

 実行ファイルやスクリプトを実行する時には,パスを指定する必要があります。絶対パス(/を起点とした位置)あるいは,カレント・ディレクトリからの相対パスで指定できます。例えば,ifconfigというコマンドは,/sbinディレクトリにあるため,「/sbin/ifconfig」と指定します。

 ただ,/binや/usr/binディレクトリなどに配置されているファイルは,このようにパスを指定しなくても実行できます。これはパスが指定されていないコマンドを自動的に検索する機能によって実現されています。検索対象となるディレクトリは,環境変数PATHで指定されています。複数のディレクトリを指定する場合は「:」で区切ります。

$ echo $PATH 

/usr/local/bin:/usr/bin:/bin:/usr/bin/X11

 従って,環境変数PATHに設定されていないディレクトリ内のファイルを実行したい場合はパスを指定するか,PATHの値を変更します。

$ PATH=$PATH:/sbin

のようにして,既存の値($PATH)に新しい設定(ここでは/sbin)を加えたものを,PATHに代入します。

 一般ユーザーのPATHに指定されるディレクトリの数は,root(スーパーユーザー)に比べて少なくなっています。rootのPATHには/sbinや/usr/sbinも設定されているため,コマンド名だけですべてのコマンドを実行できます。suコマンドでroot権限に変わるときに,「-」オプションを付けると環境変数はrootのものになります。