発行した場合
Sudo my-command
linuxはそのmy-command
をどのように探しますか?
my-command
は私のPATHにあります。問題なく起動できます。しかし、Sudo
を付けて呼び出すと、command not found
が返されます。興味深いことに、これまでに体験したことはありません。克服する方法?
EDIT:「「重複する可能性がある」の選択した答えは間違っています。ポイント。 terdonからのこの答えは正しいものです。
これは通常secure_path
の/etc/sudoers
オプションによって設定されます。 man sudoers
から:
secure_path Path used for every command run from Sudo. If you don't
trust the people running Sudo to have a sane PATH environ‐
ment variable you may want to use this. Another use is if
you want to have the “root path” be separate from the “user
path”. Users in the group specified by the exempt_group
option are not affected by secure_path. This option is not
set by default.
デフォルトの$PATH
にないコマンドを実行するには、
フルパスを使用します。Sudo ~/bin/my-command
;または
コマンドを含むディレクトリをsecure_path
に追加します。 Sudo visudo
を実行してセキュアパスの行を編集します。
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/home/youruser/bin/"
ファイルを保存し、次回Sudo
を実行すると、ディレクトリ~/bin
がその$PATH
に入ります。
これは私が回避策に使用したものです:
Sudo cp $(which my-command) /usr/bin
...
which
コマンドはroot以外のサブシェルで実行されるため、my-command
を見つけることができます。その後、Sudoは実行可能ファイルをroot
ユーザーがアクセスできるパスにコピーします。セキュリティには向いていませんが、コマンドを実行した直後に破壊されていたdockerイメージを実行しても問題ありませんでした。