在Linux中安装软件和在Windows安装软件是大大不一样的。追其原因是哲学上造诣的差别:-) GNU/Linux是免费的操作系统,同时其下的软件大部分也是免费的。并且这些免费软件之间很多都相互依赖,相互配合地完成用户的工作。
从安装包中安装
这里的安装包可以理解为Windows下的EXE文件,但是在Linux有着不同格式的安装包,分析这些安装包之间的不同不是本文的重点,但是了解一下还是很有用的。最流行的有三种:
RPM:最初出现在RedHat系统中,现在已经被很多系统所支持,比如: Suse, Mandriva, Fedora Core, Yoper 以及 PLD Linux
DEB: Debian格式的安装包,现在在Debian的衍生系统中经常见到,Ubuntu, MEPIS, Xandros 和 Knoppix
TGZ: 被 Slackware Frugalware, KateOSArch Linux以及大部分Linux系统所支持的传统安装包,
DEB和RPM双击就可以自动安装,但是你也可以使用命令的方式来安装。
RPM:
rpm -Uvh package_name.rpm
DEB:
dpkg -i package_name.deb
假如你要安装的软件包有依赖性的话,那么这种办法就很愚笨,心烦了。使用包管理器可以解决这个问题。
从包管理器中安装
为了使得软件的安装更加简便,各Linux发行版本都有一个叫做包管理器(software repositories)的应用程序来同意管理已安装和未安装的应用程序,函数库,驱动以及文档。常见的包管理器有:APT (Debian系统), Yast (Suse系统) and Smart (Mandriva, Yoper, 等)。包管理器这一概念是革命性的,通常安装软件的步骤是在网络上寻找,下载,双击安装,然后一路”Next”。而在Linux中,一个简单的命令可以代替所有上诉的一切,包括环境配置,听起来不错吧。
大多数的Linux发行版本都提供这样的包管理器来安装,配置,卸载软件,并且都提供命令行以及用户界面的方式。当你知道你要安装什么软件的时候,命令行会是非常快的一种方式。比如下面的命令会在Ubuntu或者Debian中安装Mozilla Firefox:
apt-get install firefox
而下面的命令会搜寻所有的编码器:
apt-cache search codecs
相应地,Mandriva有urpmi和smart, Fedora有yum, Arch有pacman,但是功能都是相似的。最著名的提供用户界面方式的软件是Synaptic。
对于大多数Linux发行版本来说,我们推荐您从保管理器中安装软件,主要的原因是这样可以解决软件的依赖性。除非在默认的包管理器中没有找到你要安装的软件的时候,才使用其他的方式。但是这些包往往会被添加到保管理器中,并且很容易找到的。
以二进制的方式安装
这种方式来自于Windows的系统。由于一些程序的许可并不希望你看到其源代码,比如NVIDIA 和ATI的驱动(尽管有很多人开发出了仿制的驱动),为了保护起见,你得到的仅仅是一个黑盒子,你不知道里面有什么,并且祈祷你所安装的软件可以运行。
需要注意的是如果你以root的方式安装二进制安装包的话,很有可能对系统有一定的危害,因为你不是这个安装包的作者,你不知道里面有什么。还是小心为妙。
其实安装二进制安装包也非常容易,为了能够运行,待安装的包需要有运行权限,所以在运行之前需要授予其执行的权限:
chmod u+x the_file
之后就可以运行该安装包了
./the_file
前面的./表示在当前目录下找文件the_file。
编译安装
手工编译是安装软件最传统的方式,GPL协议的程序都提供相应的源代码,意味着你可以手工编译安装它们。在Gentoo系统以及大多数的BSD系统中,使用这种方法安装软件比较好。如果合理的对安装选项进行配置的话,安装后的软件会运行的很快。但是另一方面,手工安装并不好使,因为你需要手工解决软件依赖性问题。并且很浪费时间(编译KDE或OpenOffice会花费你几天的时间)。
为了编译软件,我们需要一个编译器,通过执行下面的命令可以查看我们的系统中是否有编译器
gcc --version
如果没有的话,就需要安装上(推荐使用包管理器安装)。在一些Linux发行版当中,编译软件所需要的所有程序都被放在一个包中,比如Ubuntu上这样的包叫做build-essenctial
下面是安装二进制安装包的一般步骤,注意,这些命令需要在安装包所在的当前文件夹中运行。
./configure
make
make install
运行完后,程序应该安装到了我们的系统当中。如果过程中出现错误的话,我们需要仔细地阅读错误信息,或者安装其他的软件来解决软件的依赖性。一般所依赖的软件都在随包的INSTALL文件或者README文件中列出来了。
如前所述,在像Gentoo的系统中,以二进制包安装软件是系统默认的方式,但是Portage却可以使得这一过程变得简单一些。看起来跟使用APT或者urpmi很类似,在Gentoo中相应的命令是emerge,比如
emerge mozilla-firefox
这个命令会从网路上自动下载firefox的源代码,并且自动编译,然后将其安装到我们的系统当中。如果出现软件依赖性的话,那么相应的所依赖的软件包也会被自动下载,编译,安装,这种方式不错,唯一的缺点是编译软件很费时。
但是自己编译软件确有自己的好处,我们可以根据自己的需要自己定制要安装的软件。你可以删除不需要的功能,并且将默认不会安装的功能激活。所以,当你需要一些特殊的功能,或者一些处于测试期的功能的时候,从源代码编译软件是唯一的选择。
软件依赖性
我们一直提到软件依赖性,那么什么叫软件依赖性呢?简短的描述就是一个软件如果要正常地工作的话,需要系统中预先安装有另外一个软件。为什么会这样呢?这就要上述到Linux以及免费软件的历史时期了,GNU/Linux是由不同的模块组件起来的,每个模块各司其职,并且很好的完成了各自的任务。每个模块之间通过一些API可以相互之间进行通信,并且使用彼此的功能。所以当不同软件有着不同的功能的时候,那么我们就不需要重新写代码了,而是共享这一代码。这样程序员和用户都节省时间。
解决软件依赖性的方法有两种,一个是安装static packages,里面包含有所有依赖性的软件,可以解决软件依赖性问题,但是却需要太多的磁盘空间。另外就是dynamic packaging,也就是平时保管理器会自动处理的,但是却会出现dependency hell问题。唯一使用static packages的是PC-BSD系统
如何运行我刚才安装的软件
一般情况下,所安装的程序不会自动创建快捷方式,如果需要的话,可以自己创建,一般情况下,软件会安装在两个系统目录中,如果你使用包管理器安装的话,会出现在
/usr/bin
而手动编译安装的会出现在
/usr/local/bin
在上面的两个目录中找到你安装的程序,运行就对了:-)