注目の書籍

好評発売中!

知識ゼロから始めるLinuxサーバーの作り方

Linux初心者でも
本格 サーバーが“即席”で 完成!自宅サーバー
クラウド化も!

必聴講座ご紹介

Cloud Days Tokyo 2012
クラウド時代を勝ち抜く企業戦略を考える

エムオーテックス


Cloud Days Tokyo 2012
クラウド時代の企業インフラとユーザー環境の姿

ヴイエムウェア


Cloud Days Osaka 2012
クラウドでIT維新を〜ビジネスを加速させるベストプラクティス

アマゾン データ サービス ジャパン

オープンソース/Linux

Linuxトラブル対策大全

日経Linux

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

2006/12/14
リナックスアカデミー 小池 稔,濱野 賢一朗
出典:日経Linux 2005年12月号  55ページより
(記事は執筆時の情報に基づいており、現在では異なる場合があります)

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

質問

「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のものになります。

この記事に対するfacebookコメント

nikkeibpITpro

読みましたか? 〜 未読記事をご紹介