GNU/Linux >> Linux の 問題 >  >> Linux

sudo の使用時にコマンドが見つからない

secure_path を確認してください sudo で

[[email protected] ~]# sudo -V | grep 'Value to override'
Value to override user's $PATH with: /sbin:/bin:/usr/sbin:/usr/bin

$PATH の場合 visudo を使用してオーバーライドされています /etc/sudoers を編集します

Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin

許可が拒否されました

スクリプトを実行するには、ファイルに実行許可ビットが設定されている必要があります .

Linux ファイルのパーミッションを完全に理解するには、chmod のドキュメントを参照してください。 指図。 chmod、モード変更の略語 、ファイルの許可設定を変更するために使用されるコマンドです。

ローカル システムの chmod ドキュメントを読むには、man chmod を実行します。 または info chmod コマンドラインから。読んで理解したら、実行の出力を理解できるはずです...

ls -l foo.sh

...ファイル所有者、グループ所有者、およびファイル所有者またはファイルが属するグループのメンバーではない他のすべての人の読み取り、書き込み、および実行権限をリストします(最後の権限グループは時々参照されます「世界」または「その他」として)

Permission Denied エラーのトラブルシューティング方法の概要は次のとおりです。

$ 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 

所有者には読み取りおよび書き込みアクセス権がありますが、- は実行権限がないことを示します

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
   ^  ^  ^

Linux に関する限り、foo.sh は実行可能になりました。

sudo を使用するとコマンドが見つかりません

sudo を使用してコマンドを実行すると スーパーユーザーまたはルートとして効果的に実行しています。

root ユーザーがコマンドを見つけられない理由は、おそらく PATH root の環境変数に、foo.sh があるディレクトリが含まれていません .したがって、コマンドが見つかりません。

PATH 環境変数には、コマンドを検索するディレクトリのリストが含まれています。各ユーザーは、必要に応じて独自の PATH 変数を設定します。実行するように設定されている内容を確認するには

env | grep ^PATH

上記の env を実行した場合の出力例を次に示します。 最初に通常のユーザーとしてコマンドを実行し、次に sudo を使用して root ユーザーとしてコマンドを実行します

[email protected]:~$ env | grep ^PATH
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games

[email protected]:~$ 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 があるディレクトリ root ユーザーの PATH 変数に存在しないため、コマンドが見つかりません エラーです。


ここまで見てきた他のソリューションは、いくつかのシステム定義に基づいていますが、実際には sudo を持つことができます 現在の PATH を使用 (env コマンド) および/または残りの環境 (-E を使用) オプション) 正しく呼び出すだけです:

sudo -E env "PATH=$PATH" <command> [arguments]

実際、それからエイリアスを作成できます:

alias mysudo='sudo -E env "PATH=$PATH"'

(エイリアス自体に sudo という名前を付けることもできます 、元の sudo を置き換えます .)


Linux
  1. [修正]bash:sudo:コマンドが見つかりません

  2. 須藤:不正解:コマンドが見つかりませんか?

  3. id:コマンドが見つかりません

  1. w:コマンドが見つかりません

  2. df:コマンドが見つかりません

  3. du:コマンドが見つかりません

  1. rm:コマンドが見つかりません

  2. mv:コマンドが見つかりません

  3. sudo:npm:コマンドが見つかりません