Io-Redirection

sysctl 命令返回未詢問的資訊

  • October 6, 2018

我想要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行列印了什麼?

您正在將 stderr 重定向grep到 /dev/null 但 stderr 消息來自sysctl. 嘗試

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

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

引用自:https://unix.stackexchange.com/questions/473660