sysctl 命令返回未询问的信息

pka*_*mol 1 io-redirection sysctl

我想要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
Run Code Online (Sandbox Code Playgroud)

由于我既忽略了关于未知键的信息(即--ignore选项)又将潜在的错误输出重定向到/dev/null,这些reading jey行打印了什么?

don*_*l24 12

您正在将 的 stderr 重定向grep到 /dev/null 但 stderr 消息来自sysctl. 尝试

sudo sysctl -a --ignore 2>/dev/null | grep -i max_map_count
Run Code Online (Sandbox Code Playgroud)


Tho*_*mas 5

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
Run Code Online (Sandbox Code Playgroud)

或者,您也可以使用find.

find /proc/sys -name '*max_map_count*' -exec grep -H . "{}" \;
Run Code Online (Sandbox Code Playgroud)

更好的是,因为你已经知道你在寻找什么。

sysctl vm.max_map_count
Run Code Online (Sandbox Code Playgroud)