使用 chmod 后 PS1 设置为 -bash-3.2$

使用 chmod 后 PS1 设置为 -bash-3.2$

我按照说明安装 WSJT-X(一款无线电软件),它让我将一个名为的文件移动sysctl.conf到我的桌面并运行以下终端命令:

  sudo cp $HOME/Desktop/sysctl.conf /etc/
  sudo chmod 664 /etc/sysctl.conf
  sudo chown  root:wheel  /etc/sysctl.conf

运行这些命令后,我的终端显示变为如下形式:

终端图片

而以前我的名字在美元符号之前。此外,我的日期和时间现在显示不正确(设置为 8 小时后)。有人能帮我找出我做错了什么以及如何修复它吗?

如果有帮助的话,我想我不小心在第二个命令中插入了一个空格,所以它变成了

sudo chmod 664 /etc/ sysctl.conf

答案1

(注意:我是 Linux 用户,没有使用过 macOS。因此我的回答请谨慎对待)。

sudo chmod 664 /etc/目录中删除执行位后,您实际上无法访问(读取、写入)其中的项目。这包括(但不限于):

  • /etc/profile,其中 commonPS1定义为,
  • /etc/localtime/etc/timezone或者 macOS 使用的任何版本。

您需要sudo chmod 755 /etc恢复此操作。不幸的是,没有访问权限/etc/sudoers可能会阻止您直接执行此操作。如果您非常幸运,您仍然有一个以 root 身份运行的 shell(在出现问题之前出于某种原因启动的),您可以在其中调用而chmod 755 /etc无需sudo。但您可能没有那么幸运。

如果同样的问题出现在我的 Kubuntu 上(没有加密或类似的东西),我会启动实时 USB Linux,挂载文件系统并修复权限。我不知道你是否能像这样轻松地“从外部”修复 macOS。

这个(有点老套的)问题处理类似的问题,sudo由于权限错误而无法工作/etc/sudoers。答案中可能的解决方案:

这可能是少数需要从磁盘工具运行“修复磁盘权限”的情况之一。

如果这不起作用,请按照 […] 建议启动到单用户模式来修复它

这个看起来很有希望:

另一种方法是使用Automator.app

创建一个包含以下内容的新工作流:

do shell script "chmod 0440 /etc/sudoers" with administrator privileges

当您运行它时,它会要求您输入密码并且(假设您是管理员)它会修复它。

如果您搞乱了父目录的权限(例如,将其设置/为 755 以外的值),这也会起作用。

请记住,您需要chmod 755 /etc,所以不要盲目粘贴上述代码。您的案例属于“父目录权限混乱”。

答案2

您需要拥有+x目录的权限(“执行/遍历”)才能访问里面的任何对象,无论是否直接拥有对这些对象的读取权限。

您的chmod 664 /etc命令通过将权限设置为u=rw,g=rw,o=r(八进制数解码为)来删除它,所以现在 1)shell 无法访问 /etc/profile 和 /etc/bashrc,其中保存了系统范围的 PS1 设置;2)系统无法访问 /etc/localtime 或其 macOS 等效项,其中保存了系统范围的时区参数。

在目录上使用chmod 775或来恢复它。(7 和 5 解码为 =rwx 和 =rx。)chmod a+x

(实际上,即使在 macOS 上,我不确定 /etc 是否应该是可组写入的,因此您可能还想要chmod 755- 或者额外的chmod g-w。)

相关内容