抑制输出中的 sysctl -p 错误

问题描述 投票:0回答:1

我想排除用户没有权限的错误输出。

目前还不清楚为什么 grep -v 没有过滤输出。

$ sysctl -a | grep 'kernel.shm...|vm.dirty' | tr = ' ' | tr -s ' '|grep -v 拒绝

sysctl: permission denied on key 'fs.protected_hardlinks'
sysctl: permission denied on key 'fs.protected_regular'
sysctl: permission denied on key 'fs.protected_symlinks'
sysctl: permission denied on key 'kernel.cad_pid'
sysctl: permission denied on key 'kernel.usermodehelper.bset'
sysctl: permission denied on key 'kernel.usermodehelper.inheritable'
sysctl: permission denied on key 'net.core.bpf_jit_harden'
sysctl: permission denied on key 'net.core.bpf_jit_kallsyms'
sysctl: permission denied on key 'net.core.bpf_jit_limit'
sysctl: permission denied on key 'net.ipv4.tcp_fastopen_key'
sysctl: permission denied on key 'net.ipv6.conf.all.stable_secret'
sysctl: permission denied on key 'net.ipv6.conf.default.stable_secret'
sysctl: permission denied on key 'net.ipv6.conf.ens192.stable_secret'
sysctl: permission denied on key 'net.ipv6.conf.ens224.stable_secret'
sysctl: permission denied on key 'net.ipv6.conf.lo.stable_secret'
sysctl: permission denied on key 'vm.mmap_rnd_bits'
sysctl: permission denied on key 'vm.mmap_rnd_compat_bits'
sysctl: permission denied on key 'vm.stat_refresh'
kernel.shm_next_id -1
kernel.shm_rmid_forced 0
kernel.shmall 1073741824
kernel.shmmax 4398046511104
kernel.shmmni 4096
vm.dirty_background_bytes 0
vm.dirty_background_ratio 3
vm.dirty_bytes 0
vm.dirty_expire_centisecs 500
vm.dirty_ratio 40
vm.dirty_writeback_centisecs 100
vm.dirtytime_expire_seconds 43200

还尝试过 2> /dev/null ,但没有任何爱。

sysctl: permission denied on key 'fs.protected_fifos'
sysctl: permission denied on key 'fs.protected_hardlinks'
sysctl: permission denied on key 'fs.protected_regular'
sysctl: permission denied on key 'fs.protected_symlinks'
grep sysctl
1个回答
0
投票

其实很简单;)。只要注意重定向到哪里即可。

Pipe

|
仅重定向本应位于 STD_OUT 上的内容。 您正在做的事情是这样的:第一部分 (
sysctl -a
) 将内容打印到 STD_OUT 和 STD_ERR。默认情况下,这两个都转到您的终端设备(假设是 /dev/pts/1)。然后你决定将第一个命令的 STD_OUT 重定向到第二个命令,即
grep 'kernel.shm...|vm.dirty'
。但您错过的是来自
sysctl
的 STD_ERR 已经消失 - 到 /dev/pts/1。此时,大多数左侧
grep
不知道带有“sysctl:权限被键拒绝”的行,因为这些行已经以不同的方式走了。然后你又做了一些管道,最后你试图切割一些不存在的东西。 最后,您在终端行中看到重定向到 /dev/pts/1 的所有内容的联合,即:
grep -v denied
的 STD_OUT 和
sysctl -a
的 STD_ERR。

长话短说:只需捕获您的 STD_ERR 并执行您需要的操作即可。多种可能性:

  1. sysctl -a |
    替换为
    sysctl -a  2>&1 |
    或快捷方式
    sysctl -a |&
    |&
    重定向两者。
  2. 您可以使用
    -e
    来执行
    systclt
    命令
© www.soinside.com 2019 - 2024. All rights reserved.