Como posso permitir que comandos privilegiados falhem, mas respondam?

2

Estou lendo vários comandos, alguns dos quais são privilegiados e alguns que podem ou não ser instalados. Meu sistema (gentoo) responderá com o comando não encontrado às vezes quando o programa no sistema. Como faço para combinar o comportamento de algo como emergir?

Exemplo de comportamento que gostaria:

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

O que eu tenho atualmente:

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

Eu até preferiria uma mensagem de "permissão negada", então sei que deveria tentar usar o sudo. Claro que não quero experimentar rodar como root.

    
por DarkSheep 04.02.2015 / 15:12

2 respostas

2

O diretório contendo lspci provavelmente não está em seu PATH.

Você pode encontrar sua localização usando sudo -i which lspci e adicionar o diretório ao seu caminho.

As localizações prováveis são /sbin ou /usr/sbin

Para adicioná-los ao seu PATH atual, você pode executar (em um shell baseado em Bourne) export PATH="$PATH:/usr/sbin:/sbin"

Para tornar a mudança permanente, adicione o comando de exportação ao seu .bashrc ou .bash_profile (supondo que você esteja usando bash como um shell)

    
por 04.02.2015 / 15:30
1

lspci não foi encontrado porque não está no caminho de pesquisa de um usuário comum. Comandos que raramente ou nunca podem ser usados efetivamente por usuários não-root são colocados em um dos diretórios /sbin , /usr/sbin ou /usr/local/sbin , que estão no caminho de busca do comando root, mas não no de outros usuários.

Você pode configurar o que o bash faz quando um comando não é encontrado definindo uma função chamada command_not_found_handle . Então você pode colocar algo assim em seu .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
}
    
por 05.02.2015 / 00:49