我只是忘了使用sudo
:
usr@arch ~[0] $ iptables -L
iptables v1.4.21: can't initialize iptables table `filter': Permission
denied (you must be root)
Perhaps iptables or your kernel needs to be upgraded.
usr@arch ~[3] $ <---
Run Code Online (Sandbox Code Playgroud)
我的bash
PS1提示符回显了最后一个命令退出状态 ($?)。该iptables
手册页并不是指3返回代码:
各种错误消息被打印为标准错误。退出代码为 0 以确保正常运行。似乎是由无效或滥用命令行参数引起的错误导致退出代码为 2,其他错误导致退出代码为 1。
该SUSv3 / POSIX讨论的命令退出状态。1诸如mount
- 对于错误条件有 7 种不同的退出状态 - 在没有特权的情况下执行的命令返回 1;其联机帮助页中记录的内容:不正确的调用或权限。
问:
那么,为什么iptables
和mount
在这方面有所不同-它是纯粹的专用?为什么strace
在前一个输出上执行以下操作:socket(PF_INET, SOCK_RAW, IPPROTO_RAW) = -1 EPERM(不允许操作) - 不应该是 EACCES 吗?为什么跟踪非特权mount
调用没有发现类似的错误,这些对退出状态有影响吗?或者 -1 是什么原因导致的失败?那3从哪里来?
1. 还有:GNU Bash
; 更一般地;随机怪异;最近的问题是关于特定于应用程序的代码+ 历史/usr/include/sysexits.h等。
文档不完整。该代码包含以下内部使用的错误代码列表:
enum xtables_exittype {
OTHER_PROBLEM = 1,
PARAMETER_PROBLEM,
VERSION_PROBLEM,
RESOURCE_PROBLEM,
XTF_ONLY_ONCE,
XTF_NO_INVERT,
XTF_BAD_VALUE,
XTF_ONE_ACTION,
};
Run Code Online (Sandbox Code Playgroud)
当它尝试初始化时,它会:
if (!*handle)
xtables_error(VERSION_PROBLEM,
"can't initialize iptables table `%s': %s",
*table, iptc_strerror(errno));
Run Code Online (Sandbox Code Playgroud)
xtables_error
打印错误消息并使用给定的退出代码退出。
代码似乎有缺陷,恕我直言,假设这里的失败是由于版本问题,而没有检查errno
它实际上是EPERM
.
归档时间: |
|
查看次数: |
4230 次 |
最近记录: |