新买了一台 Mac,正在了解这台机器。
我偶然发现了一个相当麻烦的问题 - 没有 sudo 我无法使用 rm。事实上,每当我写一个 rm 命令时,结果都是这样的:
rm: illegal option -- I
usage: rm [-f | -i] [-dPRrvW] file ...
unlink file
而如果我使用 sudo 来执行该命令,它就会成功执行。
额外的信息:
- macOS Sierra v.10.12.6
- 这些文件的访问权限都是 777,并且属于用户“staff”。
staff
不是用户创建的组/用户。预期是操作系统提供的基础用户/组。
所以问题是,我怎样才能做到在我想要修改这些文件时不需要 sudo ?(并且这个“员工”用户是什么?)
答案1
从错误消息来看,您似乎有一个别名或函数,它rm
通过添加额外的参数来重新定义,因为sudo
它在与调用它的 shell 不同的环境中运行,并且通常不会从 shell 的初始化脚本中导入别名和函数定义。
此命令显示该rm
命令的所有可能的解释:
type -a rm
此外,在 shell 中,您可以使用$(which rm) ...
而不是 ,rm ...
以确保使用正确的可执行文件,因为外部which
程序不知道内部type
命令检查的别名和函数定义。带有目录组件的命令始终会转到文件系统来查找它,从而绕过别名和函数。
请注意,您不需要对文件的写访问权限即可删除它:您需要的是对其父目录的写访问权限。
答案2
根据您问题的评论,除非您的用户拥有该文件,否则您很可能无法在没有超级用户权限的情况下删除该对象。
Staff
是 MacOS 的系统组。修改此组拥有的文件可能会很危险,尽管您很可能知道自己在用例中要做什么。
至于-I
指令,它不在 MacOS 的rm
命令中;您需要使用-i
,除非它有类似的替代品。
要跳过 sudo,您可以在 .bashrc () 中添加 rm 别名,rm='sudo rm -i'
并使用将自己添加到 MacOS 的 Sudoers 文件中sudo visudo
,然后附加YOUR_USERNAME_HERE ALL=NOPASSWD: ALL
以获得对所有命令的完全 sudo 访问权限,或YOUR_USERNAME_HERE ALL=(ALL:ALL) NOPASSWD: /bin/rm
仅限制对 rm 命令的完全访问权限。
笔记:MacOS 的 rm 命令可能不在 /bin/rm 中。我最近没有用过它,但根据我之前的知识,我假设它就在那里。