为什么直接复制文件不可编辑?

为什么直接复制文件不可编辑?
mkdir ~/.config/dunst

sudo cp /etc/dunst/dunstrc ~/.config/dunst/dunstrc

这使得文件不可编辑

rm ~/.config/dunst/dunstrc
touch ~/.config/dunst/dunstrc
sudo cp /etc/dunst/dunstrc ~/.config/dunst/dunstrc

这使得该文件可编辑。为什么linux会有这样的行为呢?

答案1

大多数现代操作系统都适用文件权限和所有权。在 Linux 中,与在 Unix 上一样,默认行为是限制对文件的访问,除非被告知共享文件(其他操作系统采用不同的方法)。通过使用“sudo”,您将在没有任何安全控制的情况下执行操作。 Sudo 以 root 用户身份执行命令。当您以 root 身份复制文件时,新文件将归 root 所有。该文件仍然可以编辑 - 但除 root 之外的其他用户不能编辑。你可以...

  • 以 root 身份编辑文件(通常是错误的)
  • 将文件的用户(或组,如果组可写)所有权更改为您通常使用的用户(或他们所属的组)(好)
  • 更改文件的权限,以便任何人都可以编辑它(不好)
  • 更改文件权限的默认值(不好)

更改所有权是通过乔恩命令。更改文件的权限是通过以下方式完成的chmod。更改默认值是通过掩码命令,通常从您的 shell 配置文件调用。 chmod 和 chown 在第一个链接中进行了说明,并在后续链接中进行了更详细的说明。

答案2

sudo cp将使它属于文件的原始用户(最有可能root)。

sudoaftertouch将覆盖该文件,因此它将保留其原始 id/groupid。

“Clobber”是默认操作,尽管手册页中没有明确指出:

       -n, --no-clobber
              do not overwrite an existing file (overrides a previous -i option)

这应该可以解决这个问题:

sudo chown `id -u` ~/.config/dunst/dunstrc

相关内容