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