我想要grep
一个特定的内核设置如下
$ 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
因为我都忽略了有关未知密钥的信息(即选项--ignore
)和将潜在的错误输出重定向到,这些行打印了/dev/null
什么?reading jey
答案1
您正在将 的 stderr 重定向grep
到 /dev/null 但 stderr 消息来自sysctl
.尝试
sudo sysctl -a --ignore 2>/dev/null | grep -i max_map_count
答案2
stable_secrect
可以找到消息的解释这里。简而言之,密钥存在但未初始化,导致出现该消息。
关于您的实际命令和目标,管道|
仅重定向stdout
而不是stderr
在其余部分发送到管道之前打印。
要获得预期的行为,您可以使用以下命令之一。
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
或者,您也可以使用find
.
find /proc/sys -name '*max_map_count*' -exec grep -H . "{}" \;
更好的是,因为您已经知道自己在寻找什么。
sysctl vm.max_map_count