我试图找到一种标准的 POSIX 方式来将一个文件的权限复制到另一个文件。在 GNU 系统上,这很容易:
[alexmchale@bullfrog ~]$ ls -l hardcopy.*
-rw-r--r-- 1 alexmchale users 2972 Jul 8 20:40 hardcopy.1
---------- 1 alexmchale users 2824 May 14 13:45 hardcopy.4
[alexmchale@bullfrog ~]$ chmod --reference=hardcopy.1 hardcopy.4
[alexmchale@bullfrog ~]$ ls -l hardcopy.*
-rw-r--r-- 1 alexmchale users 2972 Jul 8 20:40 hardcopy.1
-rw-r--r-- 1 alexmchale users 2824 May 14 13:45 hardcopy.4
Run Code Online (Sandbox Code Playgroud)
不幸的是,chmod 的 --reference 标志是一个非标准选项。所以这是出于我的目的。我更喜欢它是单线的,但这不是必需的。最终,它确实需要采用 POSIX sh 语法。
在 Ubuntu 和 Debian 下,当我之后尝试结帐时,最后提交的文件正在设置执行位。这很奇怪,让我发疯:
$ ls -l file
-rw-r--r-- ... file
# on branch master:
$ git commit -m 'mode is 644' file
[master 0123456] mode is 644
1 files changed, 1 insertions(+), 1 deletions(-)
# All ok
$ git checkout dev-branch
Switched to branch 'dev-branch'
# Seemingly all ok, but file now has the exec bit set
$ git merge master
Updating 6543210..0123456
error: Your local changes to 'file' would be overwritten by merge. Aborting.
Please, commit your …Run Code Online (Sandbox Code Playgroud) sudo chmod -R 777 /
Run Code Online (Sandbox Code Playgroud)
我这样做了。那是一个错误。有什么办法可以撤销吗?
基本上它搞砸的事情比我能列出的要多。我的 Mac 上没有启用时间机器。
chmod 777 和 chmod 007 有什么区别?如果“其他人”是指所有人,那么这不是强烈暗示chmod 777 = chmod 007 的事实吗?
我有一个包含文件和目录的目录结构,我喜欢分配权限,因此所有文件和目录都具有用户的读写权限和组的读取权限,此外还有目录的执行权限。
我想实现这样的目标:
$ ls -l
total 16
-rw-r----- 1 daniel daniel 0 5? 23 16:20 1
-rw-r----- 1 daniel daniel 0 5? 23 16:20 2
-rw-r----- 1 daniel daniel 0 5? 23 16:20 3
-rw-r----- 1 daniel daniel 0 5? 23 16:20 4
-rw-r----- 1 daniel daniel 0 5? 23 16:20 5
drwxr-x--- 2 daniel daniel 4096 5? 23 16:00 a
drwxr-x--- 2 daniel daniel 4096 5? 23 16:00 b
drwxr-x--- 2 daniel daniel 4096 5? 23 15:59 c
drwxr-x--- …Run Code Online (Sandbox Code Playgroud) 可能重复:
ls -la 符号……最后一个符号是什么意思?
考虑 OS X 10.5.8 上 ls -l 的以下输出
drwxr-xr-x 3 user staff 102 Aug 26 20:21 downloads
drwxrwxrwx@ 10 user staff 340 Aug 26 20:12 images
Run Code Online (Sandbox Code Playgroud)
谁能告诉我权限部分末尾的@ 代表什么,以及如何禁用/启用它。我想这与目录列表权限有关,因为当我在 Apache 中运行 PHP 脚本需要访问没有设置 @ 位的文件夹时,它不会列出目录内容。
谢谢!
我的问题类似于如何在 linux 中为所有新创建的文件设置默认文件权限- 但在重要方面有所不同:
我希望在(或复制到或移动到)某个目录中创建的所有文件继承一组不同于系统默认值的默认权限。
基本原理:有问题的目录是应用程序的“进料斗”。组中的用户将文件放在目录中,应用程序(在同一组中的另一个用户 ID 下运行)获取并处理它们。问题是放置在目录中的每个文件的所有者都是放置它的用户,权限默认为“rw-r--r--”;我想把它改成“rw-rw----”。执行摄入的应用程序无法明确执行此操作,因为运行该应用程序的用户 ID 不拥有相关文件,并且默认权限不允许应用程序对文件进行 chmod!显然,用户可以在将文件放在那里后执行 chmod - 但我希望用户的“放置”尽可能简单。(这些人不了解 linux,
umask 似乎太强大了:我不想为这些用户在任何地方创建的每个文件设置默认权限 - 只是那些在(或放置在)这个目录中的文件。
请指教……谢谢!
我在尝试更改 Rails 应用程序公共文件夹的权限时不小心执行了命令 chown -R root /。我相信这改变了我在 / 目录上的所有文件夹的权限。所以我的问题是,这有多危险,事实上更好的问题是,有没有办法撤销这个?
我有一位教授坚持总是打字chmod 7777,但我被告知这chmod 777是正确的约定。
我在命令行和chmod 777 something.txtyeilds上尝试了它们
-rwxrwxrwx 1 home staff 0 May 6 16:47 something.txt
Run Code Online (Sandbox Code Playgroud)
和chmod 7777 something.txt产量
-rwsrwsrwt 1 home staff 0 May 6 16:47 something.txt
Run Code Online (Sandbox Code Playgroud)
这将可执行字段更改为 s、s 和 t。我理解 777 是因为它是二进制的 111 111 111,所以它只是打开所有字段,但为什么我要使用 7777,它有什么不同?
$ mkdir test
$ chmod 0000 test
$ ls -la | grep test | awk '{print $1}'
d---------.
$ chmod 6000 test
$ ls -la | grep test | awk '{print $1}'
d--S--S---.
$ chmod 0000 test
$ ls -la | grep test | awk '{print $1}'
d--S--S---.
Run Code Online (Sandbox Code Playgroud)
我不确定为什么chmod 0000 test不清除所有权限位。我没有得到什么?我试过与计算器进行比较,但它们不匹配。在我通过 ssh 连接到的服务器 RHEL 和我自己的机器 Ubuntu 上可以看到相同的行为。我已经阅读了一段时间并花了太多时间试图理解。
我在尝试第一个八进制的所有符号时遇到了这个问题,之前从未使用过 chmod 和 4 个八进制。然而,它似乎确实清除了粘性位。
chmod ×10
linux ×5
unix ×4
permissions ×3
macos ×2
bash ×1
command-line ×1
filesystems ×1
git ×1
ls ×1
mac ×1
posix ×1
security ×1
sudo ×1
umask ×1