Assumindo que os comandos foram bem-sucedidos, /var/log/messages e /var/log/wtmp ainda existem, mas estão em branco .
Redirecionamento da Shell
> é um operador de redirecionamento, implementado pelo shell. Sua sintaxe é:
command > file
Isso redireciona a saída padrão do command para file .
-
file também pode ser um nó de dispositivo .
- Se
file não existir, ele será criado como um arquivo regular .
- Se
file já existir como um arquivo normal e não estiver vazio, ele será sobrescrito. Esse é geralmente o caso dos comandos que você executou, nos quais você redirecionou a saída de cat /dev/null para messages e wtmp .
- Se
file já existir como um link simbólico , o destino do link é usado .
- Se
file já existir como um diretório, você receberá um erro como bash: file: Is a directory .
(É claro que essas operações podem falhar por outros motivos, como a falta de permissões ou um erro no sistema de arquivos.)
O operador de redirecionamento >> é semelhante, mas ele é anexado ao final de arquivos regulares não vazios, em vez de sobrescrever seu conteúdo. (Outro operador de redirecionamento é < .% Co_de% usa command < file como file 's introdução padrão .)
O dispositivo command
null é um dispositivo simples (implementado no software e não corresponde a nenhum dispositivo de hardware no sistema).
-
/dev/null parece vazio quando você lê a partir dele.
- Escrever para
/dev/null não faz nada: os dados gravados neste dispositivo simplesmente "desaparecem".
Geralmente, a saída padrão de um comando é silenciada redirecionando-o para /dev/null , e talvez esse seja o uso mais comum do dispositivo /dev/null no script de shell:
command > /dev/null
Você está usando null de maneira diferente. /dev/null gera o "conteúdo" de cat /dev/null , o que significa que sua saída está em branco. /dev/null (ou > messages ) faz com que essa saída em branco seja redirecionada para o arquivo no lado direito do operador > wtmp .
Como > e messages são arquivos regulares (em vez de, por exemplo, nós de dispositivo), eles são transformados em arquivos em branco (ou seja, esvaziados).
Você pode usar qualquer comando que não faça nada e não produza saída, à esquerda de wtmp .
Uma maneira alternativa de limpar esses arquivos seria executar:
echo -n > messages
echo -n > wtmp
O sinal > é obrigatório ou -n escreve um caractere nova linha .
(isso sempre funciona em echo . E eu acredito que o padrão bash em cada distribuição GNU / Linux e outro sistema similar ao Unix usado popularmente hoje em dia suporta o sh sinalizador no seu -n incorporado.Mas o jlliagre está certo que echo deve ser evitado para um script de shell verdadeiramente portátil, pois não é necessário que ele funcione . Talvez seja por isso que o guia que você está usando ensina o echo -n em seu lugar.
A cat /dev/null way é equivalente em seus efeitos, mas, sem dúvida, é uma solução melhor, pois é mais simples.
echo -n abre três "arquivos":
- O executável
cat /dev/null > file (geralmente cat ), um arquivo regular.
- O
/bin/cat device.
-
/dev/null
Por outro lado, file abre apenas echo -n > file ( file é um shell embutido).
Embora seja esperado que isso melhore o desempenho, esse não é o benefício - não apenas executando alguns desses comandos manualmente, de qualquer forma. Em vez disso, o benefício é que é mais fácil entender o que está acontecendo.
Redirecionamento e o comando trivial (em branco / vazio).
Como jlliagre apontou (veja também resposta do jlliagre ), isso pode ser reduzido ainda mais simplesmente omitindo o comando à esquerda de echo no total. Embora você não possa omitir o lado direito de uma expressão > ou > , o comando em branco é válido (é o comando que você está executando quando você pressiona Enter em um prompt vazio) e omitindo o lado esquerdo, você está apenas redirecionando a saída desse comando.
- Observe que essa saída não contém uma nova linha.Quando você pressiona Enter em um prompt de comando - se você digitou alguma coisa ou não - o shell (executando de forma interativa) imprime uma nova linha antes de executar o comando emitido. Esta nova linha não faz parte da saída do comando.
O redirecionamento do comando em branco (em vez de >> ou cat /dev/null ) se parece com:
> messages
> wtmp