痛点说明
当我们在使用 debian/ubuntu 的时候,如果需要安装一些应用,通常会执行 sudo apt install ...,如果源中有的话,这是最傻瓜式,也最方便的方式了。
但是笔者其实一直不是很喜欢这种方式,原因如下:
这种方式由于给到了 root 权限,无形中,背后做了很多事,对于笔者来说,总感觉缺乏一些掌控
这种方式安装的软件,相关的文件会分散到各种目录,很乱。
没法精确的去控制到底使用哪个版本,因为源中可能没有。
为什么乱呢? 这和 Linux 的设计有关。这块笔者不是很清晰,之前看过一片 文章,这篇文章很长,它后面简要介绍了 Linux 上安装软件的特点,强烈建议玩 Linux 的同学看下。这里,我简单描述下,希望我理解的没有问题。
我们先说下 Windows。 在 Windows 下,安装一个软件,通常会是一个安装包,点击安装,会指定一个安装目录,安装完成后,这个软件连同这个软件的相关依赖,都会同时放进我们指定的安装目录。
当然,如果是那种解压直接用的,直接找个目录放解压就好。这个时候,是不是很清晰,某个软件就是安装在某个目录。当然,除此外,然后也有可能在 比如 User 目录下,放一些配置文件,缓存什么的。但是笔者以为,相比较 Linux,可以说相当清爽。
反观 Linux 呢? 当我们执行 sudo apt install ... 时,最终文件会散落到 /usr、/var、/run 、/etc等等这些目录,如果你是个小白,可能对此完全蒙圈,即便对于一些开发人员,其实对这些也知之不多。只有对于有经验的运维人员,才能快速熟练的找到相关文件的位置。
我们从 Linux 上面软件的安装方式出发,其实就能窥见这其中的混乱了。 比如说 Ubuntu,当我们要安装一个软件时,通常会有几种安装方式:
sudo apt install ...
sudo dpkg -i ***.deb
snap install ...
如果是桌面版的话,可以直接从应用商店下载
下载二进制文件压缩包,解压直接使用
下载源码,自行编译,再 make install
所以,在使用 Linux 的时候,我们总会去搜索诸如 “Ubuntu18.04 如何安装 mongodb ” 这样的问题,而且经常是一个软件有几种不同的安装方式,对于初学者,当从其中一个点出发的时候,基本是蒙圈的。与此同时,我们在使用 Windows 完全不会有这样的困扰,管你是 QQ,PS 还是 mysql,基本上通过一个安装包解决问题。
下面我们来梳理下混乱之下到底是些什么?
以下描述基于 Ubuntu18.04 安装 redis 为例, 当我们执行 sudo apt install redis 的时候,系统做了如下事件:
创建了 redis user 和 redis group, 同时指定其 home 为 /var/lib/redis,我们 执行 cat /etc/passwd | grep redis, 看到以下结果,注意该用户无法登录系统
redis:x:124:129::/var/lib/redis:/usr/sbin/nologin
添加了 /etc/init.d/redis-server 的可执行脚本
添加了 /etc/rcx.d/S01redis-server 的软链
添加了 /lib/systemd/system//redis-server.service 文件,供 systemd 调度