![创建新文件描述符的用户权限](https://linux22.com/image/760073/%E5%88%9B%E5%BB%BA%E6%96%B0%E6%96%87%E4%BB%B6%E6%8F%8F%E8%BF%B0%E7%AC%A6%E7%9A%84%E7%94%A8%E6%88%B7%E6%9D%83%E9%99%90.png)
在CentOS 8我有一个猛击使用非标准文件描述符(/dev/fd/5
)并且需要由标准用户(不是root
)执行。
当用户执行脚本时,它会收到
tee: /dev/fd/5: Permission denied
引发此错误的代码片段如下:
# Print message both to stdout and FD5
msg() {
msg="$1"
echo "$msg" | tee /dev/fd/5
}
我应该给予用户什么样的权限以允许其创建和使用新的文件描述符?
答案1
您无法授予程序写入/proc
文件系统的只读部分的权限。
看一下你使用的路径/dev/fd/5
。请注意,/dev/fd
实际上是一个符号链接/proc/self/fd
。这意味着这些描述符引用每个程序自己的打开文件。
当你要求tee
写入时/dev/fd/5
,无法写入,因为/proc/self/fd/5
不存在。它不存在,因为tee
没有打开它。而且内核不允许将其创建为常规文件。
如果文件描述符是由脚本打开的,那么您应该直接将输出发送到那里。
echo "$msg" >&5
如果文件描述符是不是根据剧本的开头,你需要重新思考你所做的事情的方法。