linux - 复制文件而不删除目标功能
问题描述
我有一个foo
从 C++ 代码生成的二进制文件,它具有以下特殊功能:
sudo setcap cap_sys_rawio=ep ./foo
现在我想构建这个二进制文件的另一个版本,构建的输出(新的二进制文件)进入一个名为bar
. 显然,bar
不会具有与foo
. 我想复制bar
over的内容foo
,以便foo
代表新的二进制文件,但不删除功能。
这个答案表明修改文件不会影响功能,但是当我尝试使用cp
(open(..., O_TRUNC)
在幕后使用)时,功能被删除。
解决方案
我不认为这是可能的。您链接到的答案的评论不正确;替换 的 内容foo
将导致从 中删除功能foo
,如this answer所述。
您可以使用以下简单的 C 程序对此进行测试(另存为editfoo.c
):
#include <fcntl.h>
#include <unistd.h>
int main(int argc, char** argv) {
int fd = open("foo", O_WRONLY);
write(fd, "bar", 3);
return 0;
}
然后:
$ gcc editfoo.c -o editfoo
$ echo "foo" > foo
$ sudo setcap cap_sys_rawio=ep foo
$ cat foo
foo
$ getcap foo
foo = cap_sys_rawio+ep
$ ./editfoo
$ cat foo
bar
$ getcap foo
推荐阅读
- macos - 在容器内 chowning 主机绑定的 `docker.sock` 会破坏主机 docker
- react-native - react-navigation undefined 不是对象(评估 this_onLayout.bind)
- google-bigquery - 如何 UNNEST 并将所有重复的行写入单行
- html - Bootstrap flex容器的儿童高度相等
- html - 右键单击在新选项卡中打开在 div 标签内的 routerlink 上不可用
- php - 现有图像未以编辑形式显示以在 larvel(5.8) 中更新
- javascript - 我不能用 src="" 在我的 html 中引用 javascript
- join - 如果有两个以上的表,分桶如何帮助。(Hive 排序合并桶连接)
- javascript - console.log 在 react 和 graphql 中不起作用
- python - 嵌套for循环不断重复