如何在Linux系统中给文件赋予写权限?

20

如何在Linux中以编程方式向特定用户授予文件写入权限?例如,文件的所有者?每个人都可以读取此文件。


7
这并非离题。这是一个具体的编程问题。虽然问题不算特别好,但并不离题。 - R. Martinho Fernandes
投票重新开放。这个问题可能需要改进,但不是离题的。 - DarkDust
6个回答

31

在shell或shell脚本中,只需使用以下命令:

chmod u+w <filename>

这将仅修改用户的写入位,所有其他标志保持不变。

如果您想在C程序中执行此操作,则需要使用:

int chmod(const char *path, mode_t mode);

首先通过以下方式查询现有模式:

int stat(const char *path, struct stat *buf);

...只需执行newMode = oldMode | S_IWUSR来设置写入位。请参阅man 2 chmodman 2 stat了解详细信息。


如果您正在设置它,可以跳过查询当前模式并进行OR运算,直接使用 chmod(path, 0666); - Delan Azabani
3
海报上说:“将文件的写权限授予特定用户”。您的代码会给所有人写入权限,这可能不是海报想要的。如果您想保留组和其他模式的访问权限,则必须查询当前模式并与所需标志OR。 - DarkDust
啊,我犯了一个错误,抱歉。对不起,我的意思是 chmod(path, 0644);,这应该会产生预期的效果。我将“但是,可以被任何其他用户访问和读取”部分解释为重置组和其他模式的绿灯。 - Delan Azabani

13

八进制模式644将为所有者提供读取和写入权限,以及仅为组中其余成员和其他用户提供读取权限。

read     = 4
write    = 2
execute  = 1
owner    = read | write = 6
group    = read         = 4
other    = read         = 4

设置模式的基本命令语法为:

chmod 644 [file name]

在C语言中,那将是

#include <sys/stat.h>

chmod("[file name]", 0644);

问题在于您还修改了组和其他用户的标志。这可能是发帖者想要的,也可能不是,从他的问题中并不完全清楚。但在您的C示例中,您使用的是0666模式,而不是之前提出的0644。这将给所有人写入权限,这很可能不是发帖者想要的。 - DarkDust
抱歉,我在那里犯了一个错误;已经修复。我将“但是,可以被任何其他用户访问和阅读。”这部分解释为重置组和其他模式的绿灯。 - Delan Azabani
@Delan Azabani:是的,你说得对,我没注意到那个部分。这个问题确实应该更具体一些... - DarkDust

2
chmod 644 FILENAME

6是可读写的,4是只读的。假设文件的所有者就是您想要授予写访问权限的用户。


-1

你可以使用chmod命令来实现,如果你在Ubuntu系统上,可以尝试以下命令: $sudo chmod 666 这将赋予所有用户读写权限...更多细节请参考: http://catcode.com/teachmod/


7
但是这不是提问者想要的。 - Delan Azabani

-1
在shell脚本中,如果你想给用户"john"授权,并且他们属于"group"组,你可以运行以下命令:
sudo chown john:users example.txt

你的回答可以通过增加进一步的支持信息来改进。请编辑以添加更多细节,例如引用或文档,以便他人可以确认你的回答是否正确。你可以在帮助中心找到关于如何撰写良好回答的更多信息。 - Shawn
但是这个问题被标记为c,所以一个shell答案并不特别有帮助。 - Toby Speight

-2
你可以使用 chmod 777 <filename>

1
那看起来像是shell,而不是C语言,它不仅给了一个特定用户写的权限,所以这并不是一个很好的建议。 - Toby Speight

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接