我正在使用预先构建的 Ubuntu VM,并且似乎已经ack
安装了一个命令,但我想安装ack-grep
并重命名它ack
。
我该如何卸载该ack
命令?该ack
命令是某种汉字转换器。如果可能的话,我想彻底卸载它。
我是否只需重命名其中的文件/usr/bin
它就可以工作?
答案1
您有多种选择,具体取决于您的特定需求和偏好。
在这种情况下,最好不要手动删除和重命名这些文件,因为:
有些东西可能需要它们。
当您更新系统时,您的更改可能会被部分或全部撤消。
(您可以告诉包管理器不要这样做,但这可能不是实现目标的最简单方法。)
并且,与前两个考虑一致,您表示希望完全卸载现有的
ack
,而仅删除一个文件通常是行不通的。
因此最好检查是否/usr/bin/ack
需要,如果不需要,则使用包管理器将其删除。但你可能不需要将其完全删除,如下所述。
Ubuntu 软件包搜索/usr/bin/ack
Ubuntu 12.04中假如由ack
包裹。
ack
确保安全后,卸载。
您不必卸载ack
:如果您使用别名方式,或者在中放置符号链接/usr/local/bin
,或者在您的私有中~/bin
,即使仍然安装,它也会运行/usr/bin/ack
。因此这实际上是可选的。
运行apt-get -s remove ack
以模拟卸载ack
。这将揭示哪些其他软件包(如果有的话)依赖程度足够高,以至于ack
它们将与它一起被卸载。
apt-get -s
如果您需要帮助或确认确定删除是否ack
也会卸载任何可能重要的东西,请随意使用该命令的输出来扩展您的问题。
如果没有发现其他包裹被移除,或者你知道将被删除的其他软件包也是不需要的,然后您可以继续进行真正的删除操作:
sudo apt-get remove ack
也就是说,对于真实的东西,省略-s
(并运行它以 root 身份sudo
)。
别名方式
正如 Brian Z 所建议的,创建一个 shell 别名以便ack
运行ack-grep
可能足以满足您的需要。这会:
- 只影响您的用户帐户。
- 通常不适用于脚本(因此如果您需要它的原因
ack
是您有调用的脚本ack
,那么这是不够的)。 - 不适用于像这样的命令
sudo ack ...
。
但它快速、容易、简单,并且通常就足够了。
如果您想要创建可以以“已安装”命令的所有方式使用的东西ack
,您可以跳过以下部分(并继续阅读“符号链接很好……”)。
ack-grep
为called创建别名ack
如果您决定要使用 shell 别名,那么最好的方法可能是将其放在.bash_aliases
您的主文件夹中。
该文件可能尚不存在,但如果在您启动 shell 时(例如,当您打开新的终端窗口或选项卡时)该文件存在,则会使用它。这是因为该文件.bashrc
在 bash shell 启动时运行,并且该文件会检查是否.bash_aliases
存在,如果存在,则运行其中的内容。
运行gedit ~/.bash_aliases
。在文本编辑器中,编写alias ack='ack-grep'
并保存文件。此别名应该适用于此后启动的所有 shell。
符号链接适合以备用名称运行命令。
如果您不想创建别名(或者这样做不会给您带来需要),符号链接可能是您所需要的。
当你创建ack
命令时,最好是符号链接而不是ack-grep
复制,因为当ack-grep
发生更改时(例如,如果升级到较新的版本),ack
将自动运行新版本。
项目可以去的地方
您可以将 new 放入ack
中/usr/bin
,但我建议改为这样/usr/local/bin/ack
。/usr/local/bin
可能已经在 PATH 环境变量中,在 之前/usr/bin
。例如,在我的计算机上:
$ echo $PATH
/home/ek/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
在 Ubuntu 中,/usr/bin
是系统包管理器放置可执行文件的正常位置之一。/usr/local/bin
是您放置自己安装的软件的正常位置之一。 这与上述情况不同,因为您只是创建链接来运行已安装的软件。 但它是相似的,更重要的是,您放入的内容/usr/local/bin
与 Ubuntu 包管理器创建或管理的任何内容发生冲突的可能性比放入 中小得多/usr/bin
。
或者您可能更愿意在主文件夹中创建符号链接。如果这样做,它将适用于您的用户帐户,而不会影响任何其他用户。如果您更喜欢这样,请跳到“替代方案:在 中创建符号链接~/bin
”。
在/usr/local/bin
/usr/local/bin/ack
要创建指向的符号链接,/usr/bin/ack-grep
请运行:
cd /usr/local/bin
sudo ln -s /usr/bin/ack-grep ack
如果cd
命令失败bash: cd: /usr/local/bin: No such file or directory
,请使用创建目录sudo mkdir /usr/local/bin
并重试。(即使目录尚不存在,它也可能存在于您的PATH
环境变量中,在这种情况下ack
将运行您的命令。)
如果/usr/local/bin
不在$PATH
要检查 中的程序/usr/local/bin
(包括指向其他地方的程序的符号链接)是否会运行(或者如果未运行则进行故障排除),您可以查看 是否/usr/local/bin
在您的PATH
环境变量中。为此,请运行echo $PATH
。
它可能在那里,但如果没有,您可以编辑PATH=
行/etc/environment
并添加它。您可以使用 备份该文件sudo cp /etc/environment /etc/environment.old
并使用 编辑它gksudo gedit /etc/environment
。然后注销并重新登录。
我建议在系统范围内更改环境变量,因为放入符号链接/usr/local/bin
会应用于整个系统。我建议这样做是因为你似乎更倾向于更改这些命令适用于您的整个系统。如果您将符号链接放入,我不建议对环境变量进行系统范围的更改~/bin
。如果您对该选项感兴趣,请参见下文。
替代方案:在~/bin
.profile
在 Ubuntu 中,每个用户主文件夹中的默认文件包含:
# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
PATH="$HOME/bin:$PATH"
fi
您可以创建~/bin
(~
表示“您的主目录”,您可以在终端中输入命令时使用该简写)并注销并重新登录,它将被添加到$PATH
。然后,放置在中的可执行文件(及其符号链接)~/bin
将运行。
要将您的文件设为私有bin
并将ack
符号链接至/usr/bin/ack-grep
,请运行:
mkdir ~/bin
cd ~/bin
ln -s /usr/bin/ack-grep ack
在您的下一次登录会话中(以及之后的所有登录会话中),您可以ack
运行ack-grep
。
答案2
与重命名文件相比,更安全的选择是设置别名。这可能意味着您需要运行sudo gedit ~/.bashrc
来编辑 shell 配置文件。将该行添加到alias ack="ack-grep"
文件末尾并保存。您可以立即运行同一行命令来设置别名,也可以等到重新启动系统后再运行。请参阅如何创建永久的 Bash 别名?了解更多信息。
不确定ack
安装后是否可以正常工作。如果您确定不需要它,只需像删除其他软件包一样删除它:sudo apt-get remove ack
。