在 Linux 中恢复 chmod 命令的可执行权限

我遇到了一个 有趣的讨论话题 在推特上。 这是一个面试题。 问题是 – chmod命令的可执行权限不小心被删除了怎么办? 您可能知道,chmod(代表 通道天使 模组e) 命令用于在类 Unix 系统中设置或更改文件或目录的访问权限。 所以如果去掉chmod的可执行权限,你就不能把权限分配给任何程序,包括chmod命令本身。 您正坐在面试小组中,面试官刚刚问了这个问题。 那么,如何在 Linux 中恢复 chmod 命令的可执行权限呢?

“我会从其他系统复制 chmod 二进制文件吗?”,你可能会回答。 好吧,你只有一个系统。 所以你不能从其他系统复制 chmod 二进制文件。 你可以再回复, “我将从 perl 设置执行位。”。 面试官说“你的机器上没有翻译。”。 也没有互联网/电话连接,因此您也无法联系任何人寻求帮助。 这么可怕的情况,如何恢复chmod命令的可执行权限呢? 如果您已经知道答案,请为您的聪明点赞。 如果您不是批判性思考者(像我一样!),请继续阅读。

内容

  1. 警告:
  2. 不小心去掉了chmod命令的可执行权限怎么办?
  3. 在 Linux 中恢复 chmod 命令的可执行权限
    1. 方法 1 – 将 chmod 二进制文件的内容复制到其他工作二进制文件
    2. 方法 2 – 使用 cp 命令
    3. 方法 3 – 使用 GNU 链接器/加载器 (ld)
    4. 方法 4 – 使用 setfacl
    5. 方法 5 – 使用 rsync
    6. 方法 6 – 使用 Busybox
    7. 方法 7 – 使用 Perl
    8. 帮助我们帮助您:

警告:

请不要尝试在生产系统中删除 chmod 命令的执行权限。 在 VM 或测试机器上试试这个。 它仅用于教育目的。

不小心去掉了chmod命令的可执行权限怎么办?

假设您不小心运行了以下命令:

# chmod -x $(which chmod)

在这里, -X flag 将删除给定程序的可执行权限。 在我们的例子中,它是 chmod。

你很好奇,你真的不知道这个命令会做什么。 现在你失去了 chmod 命令的可执行权限。 没有办法再次恢复 chmod 可执行权限。 如果您尝试设置权限,请执行以下命令:

# chmod +x $(which chmod)

您将收到以下错误消息:

bash: /usr/bin/chmod: Permission denied

即使您退出并尝试从其他 sudo 用户,您不能使用 chmod 命令分配权限:

$ sudo chmod +x $(which chmod) sudo: chmod: command not found

你如何将 chmod 权限恢复到原来的状态? 嗯,这比你想象的要容易。

在 Linux 中恢复 chmod 命令的可执行权限

有几种方法可以恢复 chmod 的执行权限。 在这里,我给出了7种方法。

方法 1 – 将 chmod 二进制文件的内容复制到其他工作二进制文件

请记住,我们只删除了 chmod 命令的可执行权限,而没有删除其他命令的权限。 对? 是的! 其他命令仍然具有可执行权限。 因此,我们可以通过将 chmod 命令的内容复制到任何其他可执行命令(例如“mkdir”)来解决此问题,并将 chmod 可执行权限恢复为其原始权限。

在复制之前,让我们使用以下命令备份 mkdir 命令:

# cp /usr/bin/mkdir /usr/bin/mkdir.bak

接下来使用“cat”命令将 /usr/bin/chmod 的内容复制到 /usr/chmod/mkdir:

# cat /usr/bin/chmod > /usr/bin/mkdir

现在,mkdir 命令变成了 chmod 命令(因为我们将 chmod 的内容复制到 mkdir 二进制文件)。

然后,使用命令恢复实际 chmod 二进制文件的可执行权限:

# mkdir +x /usr/bin/chmod

或者,您可以将 mkdir 的内容复制回 chmod 二进制文件:

# mv /usr/bin/mkdir /usr/bin/chmod

最后,从备份中恢复原来的 mkdir 命令:

# mv /usr/bin/mkdir.bak /usr/bin/mkdir