删除终端命令

是否可以删除终端命令? 例如,如果存在命令调用查找(不是别名),我将如何删除它?

更好的方法是将命令的输出重定向到/dev/null 。 这样,命令将“在那里”,但不会显示任何结果。

示例: ls命令。

  1. 别名
    alias ls = "ls > /dev/null"
  2. 现在运行ls将不会显示任何结果。

编辑:感谢@scai
在上面的答案中,该命令仍将显示错误,因为我们已重定向stdout但不是stderr加上更严重的问题, 它仍将运行命令

引用@scai :

如果有问题的命令做了你不喜欢的事情,例如创建或删除文件,更改设置,画鼻子,那么这个别名不会阻止它做这些事情。

对于变通方法,我们将命令别名为空字符串,然后将结果错误重定向到/dev/null

 alias ls = "" > /dev/null 2>&1 

那现在好多了。


编辑2:再次感谢@scai 🙂
这是一个临时解决方案。
要恢复到命令的原始function(在我们的例子中是ls ),只需运行unalias ls

你可以这样做,但你不应该这样做。

无论如何,命令有四个主要位置。

/ bin&/ usr / bin&/ sbin&/ usr / sbin

要知道你想要的命令在哪里

 whereis COMMAND 

然后作为根,您可以删除或只是重命名或移动到其他目录

 sudo rm /path/command 

要么

 sudo mv /path/commad /newPath 

确保newPath不在$ PATH环境中

我认为这种“正确”的方法是使用权限。 我们以ls命令为例。

 -rwxr-xr-x 1 root root 105840 /bin/ls* 

这是我将如何做到这一点:

为允许使用ls用户创建一个组,假设我们称之为lsusers

 sudo addgroup lsusers 

相应地将用户添加到该组

 sudo usermod -aG lsusers [username] 

删除/bin/ls上的世界权限

 sudo chmod o= /bin/ls 

更改/bin/ls的组所有权

 sudo chgrp lsusers /bin/ls 

确保组权限至少允许执行

 sudo chmod 0710 /bin/ls 

这应该带来类似的东西:

 -rwx--x--- 1 root lsusers 105840 /bin/ls* 

这允许root和lsusers成员执行/bin/ls 。 实际上,别名的一个大问题是它们可以在大多数时候被覆盖。 更改属于root的内容的权限,现在有点困难。

现在,关于真正的删除 ,这是一个包问题。 如果要从系统中删除程序(命令),只需要求删除其程序包:

 sudo apt-get --purge remove [package name] 

当然,这不是你可以用/bin/ls做的事情(我不确定你是否真的喜欢它:p)