我想排除用户没有权限的错误输出。
目前还不清楚为什么 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'
其实很简单;)。只要注意重定向到哪里即可。
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 并执行您需要的操作即可。多种可能性:
sysctl -a |
替换为 sysctl -a 2>&1 |
或快捷方式 sysctl -a |&
,|&
重定向两者。-e
来执行 systclt
命令