电脑技术学习

对话 UNIX,第 11 部分: 漫谈 UNIX 文件系统

dn001

  另一种方法(这是我更喜欢的范例)是为每一个本地添加的包创建一个根目录,特别是在这个包很大的情况下。例如,我将 MySQL V5 安装到 /usr/local/mysql5.0,将 Apache V2.2 安装到 /usr/local/apache2.2。每个包的安装程序都会在包的根目录中创建它自己的 bin、lib 和 man 目录。

  这种方法有一个缺点,每个最终用户必须向他或她的 PATH 环境变量中添加许多 bin 目录。并且当这一需求并不是特别复杂时,通过在系统范围的 Shell 启动文件中扩展缺省的 PATH 设置,就可以解决这个问题。例如,Bash 系统范围启动脚本 /etc/profile,可能包含:

PATH="/bin:/usr/bin:/usr/local/bin"
PATH="$PATH:/usr/local/mysql5.0/bin"
PATH="$PATH:/usr/local/perl6/bin"
PATH="$PATH:/usr/local/Zend/bin"
export PATH

  然而,将一个包存储在它自己的“容器中,这是很有好处的:

  哪个包提供了特定的应用程序,这是显而易见的。遵循这一分类系统,您可以使用 which 命令找到包的名字:$ which mysql
/usr/local/mysql5.0/bin/mysql

  您可以同时保留同一个包的不同版本。

  例如,如果您希望提供 Perl V5.6 和 Perl V5.8,可以将前者安装到 /usr/local/perl5.6,将后者安装到 /usr/local/perl5.8。每个用户都可以通过改变 PATH 变量,来选择一个 Perl 版本。

  您可以同时保留不同的版本,但是可以通过使用符号链接,使得缺省情况下对应于某一个特定的版本。只需创建一个到您希望提供的包的版本的符号链接即可。

  例如,假定您提供了前面介绍的两个 Perl 版本。如果您希望将 Perl V5.8 作为缺省值,可以创建一个到 /usr/local/perl5.8 的符号链接,并将它命名为 perl:

$ ls -1 /usr/local/perl*
perl5.6
perl5.8
$ sudo ln -s /usr/local/perl5.8
 /usr/local/perl
$ ls -1 -F /usr/local/perl*
perl5.6/
perl5.8/
perl@

  最终用户现在可以添加 /usr/local/perl/bin 到他或她的 PATH 变量以运行 perl 命令。如果您最后需要或者希望切换到一个更新的或者更旧的 Perl 版本,那么您只需删除该符号链接,并重新创建一个指向不同目录的符号链接即可。

  对于这样的维护任务,符号链接是非常重要的。您可以维护变量、变更路径,并为方便访问构建集合。例如,您可以在传统的 /usr/local/bin 目录中填入链接到其他包中的命令的符号链接,如 ln -s /usr/local/perl/bin/perl /usr/local/bin/perl。(是的,您可以创建指向另一个符号链接的符号链接。)

标签: