特権コマンドが失敗しましたが、応答を許可する方法は?

特権コマンドが失敗しましたが、応答を許可する方法は?

いくつかのコマンドを読んでいますが、その中には権限があり、一部はインストールまたはインストールされていない可能性があります。私のシステム(Gentoo)は、プログラムがシステムにあるときに時々コマンドが見つからないと答えます。 Emergencyのような動作をどのように一致させますか?

私が望む行動の例:

$ emerge -av mypackage
This action requires superuser access...

私が現在持っているもの:

$ lspci
bash: lspci: command not found
$ sudo lspci
00:00.0 Host bridge: ...

私は「許可されていない」というメッセージも好むので、sudoを試す必要があることを知っています。もちろん、rootとして実行したくありません。

答え1

含まれているディレクトリがlspciPATHにない可能性があります。

場所を使用してsudo -i which lspciパスにディレクトリを追加できます。

可能な場所は、/sbinまたは/usr/sbin

現在のPATHに追加するには、次のことを実行できます(Bourneベースのシェルから)。export PATH="$PATH:/usr/sbin:/sbin"

.bashrc変更を永久に適用するには、またはにエクスポートコマンドを追加します(シェルとして.bash_profile使用すると仮定)。bash

答え2

lspci一般ユーザーのコマンド検索パスにないため、見つかりません。ルート以外のユーザーがほとんどまたはまったく効果的に使用できないコマンドは、ルートのコマンド/sbin検索パスにあるが他のユーザーのコマンド検索パスにはないディレクトリに配置されます。/usr/sbin/usr/local/sbin

次の関数を定義して、コマンドが見つからないときにbashが実行するアクションを設定できます。command_not_found_handle。したがって、次の内容を入れることができます.bashrc

command_not_found_handle () {
  if [[ -x "/sbin/$1" || -x "/usr/sbin/$1" || -x "/usr/local/sbin/$1" ]]; then
    echo 1>&2 "bash: $1: command not found, but can be executed as root"
  fi
  return 127
}

関連情報