在预建的虚拟机上用 ack-grep 替换 ack?

在预建的虚拟机上用 ack-grep 替换 ack?

我正在使用预先构建的 Ubuntu VM,并且似乎已经ack安装了一个命令,但我想安装ack-grep并重命名它ack

我该如何卸载该ack命令?该ack命令是某种汉字转换器。如果可能的话,我想彻底卸载它。

屏幕截图显示 ack 和 ack-grep 是 <code>/usr/bin</code> 中的单独可执行文件,大小不同,并且都不是符号链接

我是否只需重命名其中的文件/usr/bin它就可以工作?

答案1

您有多种选择,具体取决于您的特定需求和偏好。

在这种情况下,最好不要手动删除和重命名这些文件,因为:

  • 有些东西可能需要它们。

  • 当您更新系统时,您的更改可能会被部分或全部撤消。

    (您可以告诉包管理器不要这样做,但这可能不是实现目标的最简单方法。)

  • 并且,与前两个考虑一致,您表示希望完全卸载现有的ack,而仅删除一个文件通常是行不通的。

因此最好检查是否/usr/bin/ack需要,如果不需要,则使用包管理器将其删除。但你可能不需要将其完全删除,如下所述。

Ubuntu 软件包搜索/usr/bin/ackUbuntu 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

相关内容