我遇到了一个 有趣的讨论话题 在推特上。 这是一个面试题。 问题是 – chmod命令的可执行权限不小心被删除了怎么办? 您可能知道,chmod(代表 通道天使 模组e) 命令用于在类 Unix 系统中设置或更改文件或目录的访问权限。 所以如果去掉chmod的可执行权限,你就不能把权限分配给任何程序,包括chmod命令本身。 您正坐在面试小组中,面试官刚刚问了这个问题。 那么,如何在 Linux 中恢复 chmod 命令的可执行权限呢?
“我会从其他系统复制 chmod 二进制文件吗?”,你可能会回答。 好吧,你只有一个系统。 所以你不能从其他系统复制 chmod 二进制文件。 你可以再回复, “我将从 perl 设置执行位。”。 面试官说“你的机器上没有翻译。”。 也没有互联网/电话连接,因此您也无法联系任何人寻求帮助。 这么可怕的情况,如何恢复chmod命令的可执行权限呢? 如果您已经知道答案,请为您的聪明点赞。 如果您不是批判性思考者(像我一样!),请继续阅读。
内容
警告:
请不要尝试在生产系统中删除 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