sysctl comando retornando informações não perguntadas sobre

1

Eu quero grep uma configuração específica do kernel da seguinte forma

$ sudo sysctl -a --ignore | grep -i max_map_count 2>/dev/null
sysctl: reading key "net.ipv6.conf.all.stable_secret"
sysctl: reading key "net.ipv6.conf.default.stable_secret"
sysctl: reading key "net.ipv6.conf.docker0.stable_secret"
sysctl: reading key "net.ipv6.conf.enp2s0.stable_secret"
sysctl: reading key "net.ipv6.conf.lo.stable_secret"
sysctl: reading key "net.ipv6.conf.wlp3s0.stable_secret"
vm.max_map_count = 262144

Como eu estou ignorando informações sobre chaves desconhecidas (ou seja, a opção --ignore ) e redirecionando a saída de erro potencial para /dev/null , quais são essas reading jey linhas impressas?

    
por pkaramol 06.10.2018 / 18:59

2 respostas

10

Você está redirecionando o stderr do grep para / dev / null, mas as mensagens stderr são provenientes de sysctl . Experimente

sudo sysctl -a --ignore 2>/dev/null | grep -i max_map_count
    
por 06.10.2018 / 19:10
5

Uma explicação das mensagens stable_secrect pode ser encontrada aqui . Em suma, as chaves existem, mas não são inicializadas, causando a mensagem.

Com relação ao seu comando e objetivo reais, o canal | apenas redireciona stdout não stderr , que é impresso antes que o restante seja enviado ao pipe.
Para ter o comportamento esperado, você poderia usar um dos comandos da seguinte forma.

sudo sysctl -a --ignore 2> /dev/null | grep max_map_count
sudo sysctl -a --ignore 2>&1 | grep max_map_count
sudo sysctl -a --ignore |& grep max_map_count

Como alternativa, você também pode usar find .

find /proc/sys -name '*max_map_count*' -exec grep -H . "{}" \;

Melhor seria, como você já sabe o que está procurando.

sysctl vm.max_map_count
    
por 06.10.2018 / 19:16