Linux下普通用户该怎么安装软件

Linux下普通用户该怎么安装软件

首先明确一点,不是 root 或者不在 sudo 组的用户只能把可执行文件或者相关的库安装到自己的用户目录下,一般建议安装在 /home/username/.local 目录下(当然也可以安装到你有写权限的路径下,记得把这个路径加到 PATH 中即可)。

由于不能使用包管理软件,所有的软件都只能通过编译安装——这真的是无奈之举,编译安装真的费神费力!你在编译的时候可能碰到各种奇怪的问题,如果耐心不好的同学,估计显示器和主机随时都被会扔到楼下去...

获取源码的方式

  1. 通过 apt 获取 普通用户虽然没有 apt install 的权限,但是可以使用 apt downloadapt source 等命令,我们可以通过 apt source 获取源码包,如:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
➜ apt source gettext
正在读取软件包列表... 完成
需要下载 7,243 kB 的源代码包。
获取:1 https://mirrors4.tuna.tsinghua.edu.cn/deepin panda/main gettext 0.19.8.1-6 (dsc) [1,995 B]
获取:2 https://mirrors4.tuna.tsinghua.edu.cn/deepin panda/main gettext 0.19.8.1-6 (tar) [7,210 kB]
获取:3 https://mirrors4.tuna.tsinghua.edu.cn/deepin panda/main gettext 0.19.8.1-6 (diff) [30.9 kB]
已下载 7,243 kB,耗时 1秒 (5,146 kB/s)
dpkg-source: info: extracting gettext in gettext-0.19.8.1
dpkg-source: info: unpacking gettext_0.19.8.1.orig.tar.xz
dpkg-source: info: unpacking gettext_0.19.8.1-6.debian.tar.xz
dpkg-source: info: applying 01-do-not-use-java-in-urlget.patch
dpkg-source: info: applying 02-msgfmt-remove-pot-creation-date.patch
dpkg-source: info: applying 03-avoid-extraneous-nul-bytes.patch
dpkg-source: info: applying 04-fix-msgunfmt-heap-corruption.patch
dpkg-source: info: applying 05-fix-crash-xgettext-with-its.patch
dpkg-source: info: applying 06-java9-support.patch
➜ ls
gettext-0.19.8.1 gettext_0.19.8.1-6.debian.tar.xz gettext_0.19.8.1-6.dsc gettext_0.19.8.1.orig.tar.xz

源码就存放在 gettext-0.19.8.1 这个目录下。

  1. 从官网或 GitHub 下载 上了年代的 GNU 软件都可以在 GNU 官网找到,比较出名的软件也可以通过谷歌搜索或者百度搜索搜到它的主页从而找到源码压缩档的下载链接,比较新的开源项目基本都可以在 GitHub 上获取源码。

源码包的解压与打包

这里顺便复习一下 tar 的使用,源码包一般是以 tar.xz 结尾的,碰到这种包,我们可以通过:

1
tar xf package-name.tar.xz # 解压源码包

解压源码包。同时还复习一下其它两个常用的 tar 命令,

1
2
3
4
5
# 将 package-name 文件或文件夹压缩成 package-name.tar.gz 文件
# tar 命令会默认遍历子文件夹下所有文件
tar -zcvf package-name.tar.gz package-name
# 解压 package-name.tar.gz 文件
tar -zxvf package-name.tar.gz

如果压缩档不是 gzip 压缩的话,则去掉那个 z 参数即可。

编译安装

规范的 Linux 软件(包括可执行文件和各种库)都可以通过下面3步来进行编译安装:

configure

一般的源码根目录下都会有一个 configure 文件,如果没有的话,看看有没有一个叫作 autogen.sh 的文件,如果有,则可以通过运行 autogen.sh 来生成 configure 文件。configure 顾名思义就是配置一系列编译参数和安装参数,我们可以通过 ./configure --help 来获取该 configure 文件支持的所有可选参数。我们这里最常用到的就是 --prefix 参数,它可以用来指定软件的安装路径。 这里我们可以通过下面这条命令设置安装前缀为当前用户目录的 .local 目录下:

1
./configure --prefix=$HOME/.local

配置完成后,在项目根目录下会生成一个 MAKEFILE 文件,其实就是一个安装脚本,我们可以通过 make 命令来调用运行这个 MAKEFILE 文件中的一些命令,最常用的有:

1
2
3
make # 默认命令,根据 configure 的配置,自动编译源码生成可执行文件或库文件
make install # 安装命令,将编译完成的文件安装到刚刚指定 prefix 的目录下,如果 configure 后面未指定 --prefix,则会安装到 /usr 或者 /usr/local 目录下
make clean # 清除编译中生成的中间文件

make

./configure 命令完成后且未出现报错,则可以通过 make 命令安装,当然一般也可以加 -j 参数来指定多个 job(多线程或者多进程,具体原理没深究)同时进行,大大提高编译速度,一个示例如下:

1
make -j 20 # 20个 jobs 并行编译以提高编译速度

make install

编译成功无任何报错后,就可以通过 make install 安装到用户环境中。