Eu estou tentando:
sudo echo "$USER: my message" > /dev/kmsg
para gravar uma mensagem no log do dmesg. Isso causa um erro de 'permissão negada', porque está redirecionando a saída de 'sudo' (embora não seja mais privilegiada) para /dev/kmsg. Portanto, o comando 'echo' está sendo executado como root e a gravação em /dev/kmsg está sendo executada como eu. Citar o comando 'echo' e o redirecionamento ('>/dev/kmsg') não funciona porque o redirecionamento é um serviço de shell que o sudo não entende. (O userid em questão está em sudoers com NOPASSWD.)
Existe algum comando do Linux que usa o nome do arquivo como uma opção e escreve seus argumentos? Como: 'tee /dev/kmsg -- Minha mensagem a ser registrada' Eu sei sobre o comando 'logger', mas isso não grava em qualquer arquivo de log que o 'dmesg' veja. (Quero intercalar algumas das minhas mensagens com o processo de inicialização para saber quando certas coisas acontecem.)
Isso funciona, mas tem o problema de precisar ter algum lugar para gravar um arquivo:
echo "$USER: My msg" >/tmp/foo
sudo cp /tmp/foo /dev/kmsg
rm /tmp/foo
Solução do comentário de ctrl-alt-delor abaixo:
echo "my message" | sudo tee /dev/kmsg >/dev/null
Embora use tubulação e redirecionamento, ele ocorre no shell sem privilégios. Acesso privilegiado a '/dev/kmsg' ocorre no comando 'tee' em 'sudo'. E não precisa gravar em um arquivo de disco (o que pode ter problemas).
Também solução @stolenmoments:
echo something | sudo dd of=/dev/kmsg
Use o
logger
comando que é a interface de linha de comando do shell para osyslog
módulo de log do sistema. Você pode usar a-p
opção para alterar com qual prioridade a mensagem de log é gerada, que por sua vez é usada para determinar em qual arquivo de log a mensagem é gravada. Do manual:Deixando de lado o "porquê", qualquer comando que leia stdin e grave em um arquivo de saída nomeado servirá. Meu favorito é "dd", mas tenho idade suficiente para usar o que "dd" se refere.
deve funcionar muito bem.
Eu sei que você pediu algo sem redirecionamento de shell, mas você pode fazer seu
sudo
comando funcionar alterando-o para o seguinte:sudo su -c 'echo "$USER: my message" > /dev/kmsg'