[解決済み] sudo使用時にコマンドが見つからない
質問
というスクリプトがあります。
foo.sh
をホームフォルダに保存しています。
このフォルダに移動して、次のように入力します。
./foo.sh
となります。
-bash: ./foo.sh: Permission denied
.
を使用する場合
sudo ./foo.sh
となります。
sudo: foo.sh: command not found
.
なぜこのような現象が起こるのか、どうすれば直るのか。
解決方法は?
パーミッションが拒否されました
スクリプトを実行するには、そのファイルに 実行可能なパーミッションビットの設定 .
Linuxを完全に理解するために
ファイルパーミッション
のドキュメントを勉強することができます。
chmod
コマンドを使用します。
chmod
の省略形である
変更モード
は、ファイルの権限設定を変更するためのコマンドです。
ローカルシステムの chmod ドキュメントを読むには、次のコマンドを実行します。
man chmod
または
info chmod
をコマンドラインから実行します。一度読んで理解すれば、...を実行したときの出力を理解できるようになるはずです。
ls -l foo.sh
... これは、ファイル所有者、グループ所有者、およびファイル所有者またはファイルが属するグループのメンバー以外のすべての人の READ、WRITE、EXECUTE パーミッションをリストします(この最後のパーミッション グループは "world" または "other" と呼ばれることがあります)。
のトラブルシューティングの方法をまとめます。 パーミッション拒否のエラー をご覧ください。
$ ls -l foo.sh # Check file permissions of foo
-rw-r--r-- 1 rkielty users 0 2012-10-21 14:47 foo.sh
^^^
^^^ | ^^^ ^^^^^^^ ^^^^^
| | | | |
Owner| World | |
| | Name of
Group | Group
Name of
Owner
所有者は読み取りと書き込みのアクセス権 rw を持っていますが、- は実行可能なアクセス権がないことを示しています。
を使用します。
chmod
コマンドで修正されます。(グループとその他はファイルに対して読み取り権限しか設定されておらず、書き込みや実行はできません)
$ chmod +x foo.sh # The owner can set the executable permission on foo.sh
$ ls -l foo.sh # Now we see an x after the rw
-rwxr-xr-x 1 rkielty users 0 2012-10-21 14:47 foo.sh
^ ^ ^
foo.shは、Linuxに関する限り、実行可能になりました。
sudoを使用するとCommand not foundが表示される
を使用してコマンドを実行した場合 sudo は、事実上スーパーユーザーまたはルートとして実行することになります。
ルートユーザーがあなたのコマンドを見つけられない理由は、おそらく
PATH
環境変数に
ディレクトリに
foo.sh
があります。
. したがって、コマンドは見つかりません。
環境変数PATHには、コマンドを検索するディレクトリのリストが含まれています。各ユーザーは、必要に応じて自分のPATH変数を設定します。 何を実行するように設定されているかを確認するには
env | grep ^PATH
以下は、上記を実行したときの出力例です。
env
コマンドを、最初は一般ユーザーとして、次に sudo を使って root ユーザーとして実行します。
rkielty@rkielty-laptop:~$ env | grep ^PATH
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
rkielty@rkielty-laptop:~$ sudo env | grep ^PATH
[sudo] password for rkielty:
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin
似ていますが、この場合、非特権ユーザー(rkielty)とスーパーユーザーのPATHに含まれるディレクトリは次のとおりです。 同じではない .
があるディレクトリ
foo.sh
はルートユーザーのPATH変数に存在しないので、そのため
コマンドが見つかりません
というエラーが発生します。
関連
-
[解決済み] エラーです。"gzip: stdout: Linuxカーネルアップグレード中に「No space left on device」(デバイスに空き容量がない)が発生する(空き容量がある間)[closed]。
-
[解決済み] sudo: must be setuid root" というメッセージが出るが、sudo は既に root が所有している [closed] 。
-
[解決済み] Bashで通常のファイルが存在しないかどうかを判断する方法を教えてください。
-
[解決済み] Bashでコマンドの出力に変数を設定するにはどうすればよいですか?
-
[解決済み] sudoを使わずにnpmがエラーを投げるのを修正する方法
-
[解決済み] 検索」からすべての「permission denied」メッセージを除外するにはどうすればよいですか?
-
[解決済み] bashで "cat << EOF "はどのように動作するのですか?
-
[解決済み] cURLでプログレスバーを表示しないようにするにはどうしたらいいですか?
-
[解決済み] Bashの変数代入でCommand not foundエラーが発生する
-
[解決済み】vimの「sudoで書く」トリックはどうやるの?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Bashのexportコマンド
-
[解決済み] linuxでpsから特定のプロセスをgrepする方法は?
-
[解決済み] bash: cd: そのようなファイルやディレクトリはありません
-
[解決済み] ls -l の "total" が表示されるファイルサイズの合計にならないのはなぜですか?[クローズド]
-
[解決済み] エラー: gdal がインストールされているのに、R 依存パッケージのインストール中に gdal-config が見つからない
-
[解決済み] SIGRTMAXとSIGRTMINの使い方は?
-
[解決済み] アセンブリの制約
-
[解決済み] grepコマンドで特定の列にマッチングさせる
-
[解決済み] Certbot が見つかりません。
-
[解決済み】sudo: npm: コマンドが見つかりません。