Linux系统下的软件应该安装在哪儿?
*知乎问题:Linux系统下的软件应该安装在哪儿?
我在windows系统下安装软件都会安装在别的地方不会装在c盘,因为怕拖慢系统的运行速度,那在linux系统下需不需要这样做呢?而且linux系统安装软件装完了都不知道装到哪儿了,感觉到处都有,让强迫症很难受,能不能把它们都装在同一个地方?
Linux下面的软件,按照安装方式,一般有这几种:
1.
使用各种包管理器安装的包:比较常见的例子有apt
,yum
,pip
,npm
等,也 包括dpkg
手动安装的.deb
文件。这些软件,其安装位置一般都不好设置,比如apt,安装位置在.deb
文件中都写死了,改起来很费尽。不过这种情况下一般不会出现
“装完了都不知道装到哪儿了”的问题,包管理器一般都提供查询已安装软件情况的功能,比如apt
:
$ apt list --installed
会显示已经安装的包,输出类似下面的格式:
hostname/eoan,now 3.22 amd64 [installed]
hplip-data/eoan,eoan,now 3.19.6+dfsg0-1ubuntu1 all [installed,automatic]
hplip/eoan,now 3.19.6+dfsg0-1ubuntu1 amd64 [installed,automatic]
htop/eoan,now 2.2.0-2 amd64 [installed]使用源代码变异
这里[installed]
指的是用户主动安装的包,[installed, automatic]
指的是用户安装别的包时候的依赖。如果我apt remove
某个包,那么所有他依赖的包也会被移除。所以查自己装的包,只看[installed]
状态的就可以了。
如果实在想知道安装到了那里,可以这样干。比如我想找htop
在什么地方:
$ dpkg -L htop
/usr
/usr/bin
/usr/bin/htop
/usr/share
/usr/share/applications
/usr/share/applications/htop.desktop
/usr/share/doc
/usr/share/doc/htop
/usr/share/doc/htop/AUTHORS
/usr/share/doc/htop/README
/usr/share/doc/htop/changelog.Debian.gz
/usr/share/doc/htop/copyright
/usr/share/man
/usr/share/man/man1
/usr/share/man/man1/htop.1.gz
/usr/share/pixmaps
/usr/share/pixmaps/htop.png
可以看出,软件在/usr/bin/htop
,文档在/usr/share/doc/htop
和/usr/share/man/man1/htop.1.gz
。
你要实在不想按照他写的位置安的话,可以把里面的文件导出来,不过可能有权限和其他的设置问题(apt还要运行.deb
里边的安装脚本,设置驱动什么的),如果愿意去解决这些问题的话可以试试。
不过向htop这种程序,只有一个二进制文件/usr/bin/htop
是必须的,真导出来放在自己想要的地方也无妨。
2.
使用源代码编译再安装的软件。许多开发库,或者包管理软件上没有的软件,只能使用源代码编译再安装,常见的步骤是./configure && make && sudo make install
,设置、编译、安装。一般情况下默认设置是可执行文件安装到/usr/bin
,库安装到/usr/lib
(这也是一般要加sudo
的原因)。如果想改位置的话,比较常见的方法是在
./configure
中加一个flag:
$ ./configure --prefix=安装这个软件的文件夹
不一定所有情况都支持(这里吐槽一下C和C++程序的混乱的build system……这就是一门语言没有爹的后果),最好查一下软件的说明。当然了,C和C++之外的语言一般就用自己的编译工具了,各自有各自的情况。
这种情况的问题是一般只能通过make uninstall
卸载,如果有着源代码和Makefile
的文件夹没了,那就不好办了。现在我的电脑里面就有不知道多少个这样的软件……
(还有向gcc
这样不提供make uninstall
的,只能手动去删了。)
3.
别人提供好的二进制可执行程序,让你下个tar.gz
压缩包的一般都是这种情况。这个就没有任何规律了,运行后在任何地方存东西都有可以,不过比较多的是存在$HOME/.config/软件名
里面。不过和Windows不一样,一般不会把可执行文件扔到别的地方,所以之后想要再用的话一般也是执行这个程序。或者说这种情况一般没有什么”安装”的概念,可以说是”portable”。我是在$HOME
目录建了个文件夹,所有的这种程序都放在这里。
最后再说一句,你的强迫症没什么错对之分,不过我觉得你担心的原因没什么道理:”怕拖慢系统的运行速度”。不知道你是不是担心和系统文件存在同一个盘上,读取程序的时候和系统抢硬盘读写带宽?我刚用iotop
看了一下,系统在正常运行的时候对硬盘的读写并不多,无论是随机读写还是顺序读写,都远远占不满,估计Windows也差不多。因此,存在哪个目录下面我觉得没有太大的实际区别。