在Unix/Linux中将文件移动到不同目录所需的权限

And*_*ndy 14 unix linux file-permissions mv

我想澄清所需的权限,以便将文件A从目录B移动到目录C(我认为该命令将是"mv B/AC/A"),名称不变.

我是否认为需要以下内容?

  1. 执行移动的用户/组必须具有目录B的写入权限(或者B必须设置权限标志以允许所有用户/组写入它)
  2. 执行移动的用户/组必须具有目录C的写权限(或者C必须设置权限标志以允许所有用户/组写入它)
  3. 执行移动的用户/组必须具有文件A的写入权限(或者A必须设置权限标志以允许所有用户/组写入它)

谢谢.

Alf*_*lfe 28

实际上,移动文件要么是对单个文件系统上的文件进行重命名,要么是创建副本并删除原始文件(通常只有在移动是从一个文件系统迁移到另一个文件系统时才会执行).

在这两种情况下,你需要执行 当然的写权限到目标目录和源目录.然而,对于一个单纯的重命名(从一个目录移动到另一个可能只是)你做一个单一的文件系统上并不需要任何文件本身的权限.它可以清除所有权限,但您仍然可以移动(重命名)它(只要您具有目录的写入执行权限).

对于真实副本(当您将文件移动到其他文件系统时需要),您需要对文件本身具有读取权限. 不需要对原始文件的写入权限,因为删除文件不是写入文件(而是写入它所在的目录).

  • 谢谢你。只是为了确保我正确理解您:在同一文件系统中移动文件(带/不带重命名),无需对该文件的许可;将文件(有/没有重命名)移动到不同的文件系统,文件需要 r 权限;在这两种情况下,都需要目录的 w 和 x 权限。 (3认同)
  • 啊,还有一个我忘了提到的隐含性:你还需要对源和目标目录的_all_ parent目录执行**执行权限.也许你想看看系统调用`access(2)`,它可以用来检查这些东西. (3认同)
  • 目标目录上需要执行和写入权限,以便在那里创建新的目录条目.在源目录中需要它们来删除那里的目录条目(这里的主题是移动文件,在目录级别这是移动意味着什么).要单独创建副本,只需要读取源文件的权限并对其所有(父)目录执行权限.但仔细阅读我的回答:在一个文件系统上移动文件并不一定需要读取它,因为没有复制. (2认同)