百科问答小站 logo
百科问答小站 font logo



为何linux安装程序会很麻烦? 第1页

  

user avatar   s.invalid 网友的相关建议: 
      

同意老司机 @徐辰


我来解释一下为什么。

Linux下安装软件其实可以和Windows一样简便(其实是远比Windows简便);但安装软件的方式不止一种:和Windows下一样,你可以用正规的msi包自动安装;也可以从别人的机器把PS/CS/SC之类软件拷贝过来、甚至是直接拷源码自己编译。


不同之处在于,Windows下,msi/*install.exe这种标准方式,有程序员专门写了全套的安装配置程序,所以你一点就能装、装完能在开始菜单/桌面/系统控制面板的软件列表中看到它;但直接拷贝过来的,你得自己建立快捷方式、自己处理它在注册表和/或其他地方的注册/配置信息(否则可能压根无法运行)、稍有不匹配就无法运行——总之极为繁琐,而且往往“集成”不到控制面板。


Linux下也一样。

不过,Linux下,软件的维护较为简单,不像Windows那样“曲折隐晦”;因此如果你懂的话,也可以做到“手工安装”。

因此,网上就有了很多很多一知半解的劣质教程,热衷于教人从源码安装、从非正规来源强行安装——然后还可能和系统原有的软件产生冲突,产生种种棘手问题。


这种垃圾信息,中文互联网上尤其多——或者说,中文互联网反而极少正规的安装教程,越发凸显了这类不走正规路线的教程之多。


Linux下的软件安装,实质上有如下四种,“正规”程度依次递减:

1、使用标准的yum/apt/yast包管理程序安装

2、使用标准rpm/deb或厂商自己的安装包(比如nVidia的显卡驱动用的bin包)安装

3、直接解压软件开发者的tar.gz包

4、自源码编译


其中:

1、使用标准的yum/apt/yast包管理程序安装

这种安装方式相当于苹果/安卓平台上的“应用商店”安装,是最安全可靠的安装模式

通过这种方式安装的软件,不仅完全契合你的操作系统本身,而且可以保证和系统其他软件包的相容性,一般来说是不可能遇到冲突的。


Linux有很多发行版;其中一些面对服务器的版本会非常保守,里面的每一个软件都会经过连续多年的测试,稳定度极高。但相应的,这里面的软件就会老旧一些。典型如Redhat/CentOS/Debian(stable版)等。用这类版本就很容易遇到“急需的软件找不到”问题——因此,不建议你在桌面使用它们。

fedora、Ubuntu、Debian(testing)等版本内容相对较新,稳定度也还不错,建议用它们当桌面使用。这可以尽量减少你“找不到较新软件”的困扰。


2、使用标准rpm/deb或厂商自己的安装包(比如nVidia的显卡驱动用的bin包)安装

这种方式相当于Windows下的安装包安装,安全性/稳定度都还不错;但可能会因为你用了过新/过旧的安装包而和系统其他部分产生相容性问题——比如系统用python2.4你到网上拖了个python3或python1.5、又强行把它装上去还附加到路径最前,那么很可能就会造成其他依赖python的软件出现混乱。

另一个典型案例就是你装了nVidia的bin包之后,经常在系统更新(尤其是更新内核之后)无法进入图形界面。这就是因为nVidia的显卡驱动并没有被Linux软件仓库自动管理,因此出现了内核-驱动之间的不匹配问题。

所以,重复一遍:建议优先使用yum/apt/yast等命令,通过系统软件仓库安装应用。不建议自己下软件包安装


哪怕是在Redhat系上安装其他地方下载的标准rpm包,都是不建议的


3、直接解压软件开发者的tar.gz包

这种类似于Windows的“免安装绿色版”软件。

你可以把它解压到你自己的用户目录,然后在自己的bash.rc之类配置文件中,用export把它加入path——这样你才可以直接在shell中敲它提供的新命令。


这种方式适用于试用新软件、或者仅为自己使用而下载软件;不建议把它加入系统路径——也就是不建议用su取得超级用户权限、把它安装到系统目录。


因为这种东西和系统的相容性未经测试,后果完全不可预料。


4、自源码编译

这个方式和3类似,也不建议安装到系统目录。

因为它比3更不可靠:编译后的库文件、应用可能散落在诸多目录,一不小心就弄得到处都是垃圾、甚至可能覆盖掉系统本身自带的关键库,引起系统崩溃。

这种东西和3一样,未经系统包管理器“把关”,无法保证它不和系统组件相互覆盖。


除非你完全明白Linux里里外外都是怎么回事,否则不建议使用3/4安装方式。

当然,编译,然后放自己用户目录使用,这样还是安全的——换句话说,只要不动用root权限,随你怎么折腾。


5、其他特殊情况

python有个pip包管理器,可以自动安装各种python软件包,比如Django之类东西。

pip可以把软件安装到用户目录,也可以通过root权限安装到系统目录;但强烈不建议你动用root权限。


事实上,大多数Linux发行版的包管理器本身就可以通过系统软件仓库安装Django;你应该优先使用它而不是pip。因为前者可以保证不出现相容性问题。


当然,很多时候,Linux本身的软件仓库可能稍微“老旧”一些,让你得不到最新版的Django或者其他软件包;甚至有时候,它压根就没有某个流行python包。

这时候你可能不得不使用pip;那么,记住不要用su提升权限,让pip把软件包装给你自己用就行——如果的确需要多个账户一起用,那么可以把它安装到opt/var之类目录,但尽量不要让它直接进系统目录,以免造成混乱。


总结起来其实就一句话:如果你有丝毫含糊,请用系统软件仓库(yum/apt/yast),不要碰你不懂的东西

——换句话说:对初学者来说,一个能解决你几乎所有需求的软件仓库才是最实惠的;因此请寻找软件仓库最新最全的Linux发行版(fedora/Ubuntu等),千万不要听所谓的“老鸟”瞎忽悠。

——同样的,如果你要寻找某个软件的安装/配置教程,请寻找和你使用的系统相同的、直接通过标准软件仓库(yum/apt/yast)安装的那种。除非是极不常见的小众软件、或者为了尝鲜某个软件最新版的某个新特性,凡让你绕开系统软件仓库的教程都是垃圾。


user avatar   xi-men-zi-ai-di-sheng 网友的相关建议: 
      

这是我看到的最准确的总结。

总的来说,就是中国的高考相对公平,所以性价比极高,所以其他活动都可以适当让步。




  

相关话题

  服务器之间文件自动拷贝用什么技术好? 
  一般人用 Linux 算是找虐吗? 
  鸿蒙之于AOSP,是否Linux之于wine,Windows之于WSL?这么多人质疑鸿蒙说明了什么? 
  Cygwin 和MinGW 的区别与联系是怎样的? 
  为什么 Linux 如此安全,却不把 Linux 设计成像 Windows 一样的图形界面来使用? 
  Unix网络编程里的阻塞是在操作系统的内核态创建一个线程来死循环吗? 
  为什么Linux用户用sudo命令而不直接使用root用户? 
  Windows 内核和 Linux 内核谁更复杂? 
  C语言编写时,将参数传递跨越多个函数的方式是否是妥当的? 
  有哪些在线 Linux 环境可以 ssh 登录来玩? 

前一个讨论
为什么有些学物理的人极度痴爱费曼,而不是爱因斯坦?
下一个讨论
有人可以科普一下李商隐嘛?





© 2025-03-15 - tinynew.org. All Rights Reserved.
© 2025-03-15 - tinynew.org. 保留所有权利