更改在Linux中搜索程序目录的顺序

时间:2015-01-22 10:19:04

标签: linux

我最近遇到的情况是我的Ubuntu安装上的软件中心没有启动。当我试图从控制台启动时,我发现python无法找到Gtk,虽然我没有删除它。

from gi.repository import Gtk,Gobject


ImportError: cannot import name Gtk

我在Stackoverflow遇到了一个密切相关的问题(我现在无法提供问题的链接)。接受的解决方案(也适用于我)是从/ usr / local删除gtk的重复安装因为Gobject存在于此目录中,但不存在于Gtk中。 所以,我删除它并再次启动软件中心并启动它。

虽然我很高兴问题得到解决,但我想知道从/ usr / local删除文件是否会导致严重问题。 另外,我的控制台上的echo $PATH给出了:

/home/rahul/.local/bin:/home/rahul/.local/bin:/home/rahul/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/home/rahul/.local/bin:/home/rahul/.local/bin

表示在/usr/local/bin之前搜索了/usr/bin。是否应修改$ PATH以使查找顺序颠倒?如果是,那怎么办?

1 个答案:

答案 0 :(得分:1)

你实际上并不想改变它。

/usr/local是一条路径,根据 Linux Filesystem Hierarchy Standard 专用于特定于此主机的数据。让我们稍微回过头来看:当计算机价格昂贵时,要使用一台,你必须去一些实验室,那里找到许多相同的UNIX(类似)工作站。由于磁盘空间也很昂贵,并且机器都是相同的并且具有或多或少相同的目的(想想大学),他们从远程文件服务器安装了/usr(最有可能通过{{1} } protocol),这是唯一拥有足够大磁盘的机器,它保存了可以从工作站使用的所有应用程序。这也便于管理,在文件服务器上只需要添加一个新应用程序或将另一个应用程序升级到更新的版本,所有机器都会看到"瞬息万变。这就是为什么即使更大的磁盘变得便宜,这种方案仍然可以实现。

现在想象一下,出于任何原因,单个工作站需要不同版本的应用程序,或者可能只使用少量许可证购买新应用程序,因此只能在选定的计算机上运行:如何处理这种情况?这就是为什么NFS诞生,以便单个机器可以某种方式用本地数据覆盖网络范围的数据。为了实现这一点,当然/usr/local必须指向本地分区,并且所有路径中的事物必须先于/usr/local中所有搜索路径中的内容

如今,类似UNIX的Linux机器通常是独立的机器,所以你可能会认为这种方案不再有意义,但你错了:现代Linux发行版有包管理系统 ,或多或少,扮演上述中央文件服务器的角色:如果您需要Ubuntu存储库中可用的不同版本的应用程序,该怎么办?您可以手动安装它,但如果将其放在/usr中,它可能会被包管理系统执行的更新覆盖。所以你可以把它放在/usr中,因为这个路径通常不被包管理系统以任何方式改变。同样,应该清楚的是,在这种情况下,您希望首先找到/usr/local中的任何内容,而不是/usr/local中的任何内容。

希望你明白这一点:)。