Linux系统软件安装与用户管理全解析
立即解锁
发布时间: 2025-09-10 02:01:19 阅读量: 4 订阅数: 21 AIGC 


Linux DevOps实战指南
### Linux 系统软件安装与用户管理全解析
#### 1. 系统定时任务:Systemd timer 与 cron 对比
在 Linux 系统中,自动化定时任务是提高工作效率的重要手段,其中 cron 任务和 Systemd timer 是两种常见的方式。
- **Systemd timer 优势**:Systemd timer 是 cron 守护进程作业的新版本,它不仅具备 cron 的所有功能,还拥有一些额外能力。例如,可以指定任务在系统启动后的某个时间运行;也能设定任务在另一个任务运行后的特定间隔执行;其依赖项甚至可以是一个服务单元;而且计时粒度更精细,cron 任务的最小时间单位是分钟,而 Systemd timer 可以精确到秒。
#### 2. Linux 软件安装概述
不同的 Linux 发行版和安装类型可能导致系统缺少日常工作所需的软件,或者在特定时刻需要安装非默认的软件。Linux 发行版开创了一种软件安装方式,即通过运行适当的命令来获取二进制文件、正确放置在系统中、添加必要配置并让用户能够使用。这种方式在 DevOps 自动化环境中具有重要意义:
- **软件存储与获取**:可安装的软件以包的形式存储在发行版团队维护的仓库中,用户只需知道软件包名称并确保其在仓库内,无需了解软件在互联网上的具体位置。
- **依赖自动处理**:常见的包标准(如 rpm 和 deb)能够识别依赖关系,若安装的软件依赖其他未安装的软件,系统会自动下载并安装。
- **安全保障**:发行版有安全团队与包维护者合作,为软件包修复已知漏洞,但不会主动研究这些软件包的漏洞。
- **仓库镜像**:仓库在互联网上有镜像,即使某个仓库出现故障,也能从全球的镜像副本获取软件。不过,商业仓库不一定具备此特性。
- **本地镜像**:用户可以在局域网内创建本地仓库镜像,虽然会占用大量硬盘空间,但能获得最快的下载速度。
#### 3. 影响软件数量和版本的因素
软件的数量和版本受发行版多方面因素影响:
- **软件许可政策**:不同发行版对软件许可类型有不同政策。有些发行版只允许严格符合开源定义的软件;而有些则允许用户选择添加可能包含许可限制软件的仓库。
- **维护人员与模式**:发行版的工作量受维护人员数量和维护模式影响。团队规模越小,能打包和维护的软件就越少。例如,Debian 是非商业发行版,依赖志愿者工作;Ubuntu 和 Fedora 有商业支持,部分团队成员受雇于 Canonical 和 Red Hat;Red Hat Enterprise Linux(RHEL)则完全由 Red Hat 员工构建和维护。
- **仓库类型**:部分软件制造商将软件包发布在独立仓库,用户可添加到系统配置中使用。但需注意,第三方仓库的软件质量和更新情况与发行版核心仓库可能不同,可能导致软件版本冲突,且添加的第三方仓库越多,冲突概率越高。
#### 4. Debian 和 Ubuntu 软件安装
Debian 及其衍生版 Ubuntu 使用 DEB 包格式,与之直接交互的命令是 dpkg,它可用于安装、移除、配置和构建 .deb 包,但只能处理文件系统中的本地包,无法理解远程仓库。以下是 dpkg 的常见操作:
|操作|命令|说明|
| ---- | ---- | ---- |
|安装|`dpkg -i package_file.deb`|安装指定的包文件,经过多个阶段完成软件安装|
|解包|`dpkg –unpack package_file.deb`|将重要文件放置到相应位置,但不进行配置|
|配置|`dpkg –configure package`|对指定包进行配置,若有未配置的包,可使用 `-a` 或 `–pending` 标志处理|
|移除|`dpkg -r package`|移除软件,但保留配置文件和数据|
|彻底清除|`dpkg -p package`|彻底清除软件、数据、配置文件和缓存|
示例:安装 nano 编辑器
```bash
root@myhome:~# dpkg -i nano_5.4-2+deb11u1_amd64.deb
(Reading database ... 35904 files and directories currently
installed.)
Preparing to unpack nano_5.4-2+deb11u1_amd64.deb ...
Unpacking nano (5.4-2+deb11u1) over (5.4-2+deb11u1) ...
Setting up nano (5.4-2+deb11u1) ...
Processing triggers for man-db (2.9.4-2) ...
```
不过,更多时候会使用 apt 工具套件来安装和移除软件:
- **搜索软件包**:`apt-cache search NAME` 用于搜索包含指定字符串的软件包。
```bash
root@myhome:~# apt-cache search vim
acr - autoconf like tool
alot - Text mode MUA using notmuch mail
[...]
vim - Vi IMproved - enhanced vi editor
[...]
```
- **安装软件包**:`apt-get install NAME` 可安装指定名称的软件包,还能在一行中安装多个软件包。
```bash
root@myhome:~# apt-get install gcc g++ golang
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
gcc is already the newest version (4:10.2.1-1).
The following additional packages will be installed:
bzip2 g++-10 golang-1.15 golang-1.15-doc golang-1.15-go golang-1.15-
src golang-doc golang-go golang-src libdpkg-perl libfile-fcntllock-
perl libgdbm-compat4 liblocale-gettext-perl libperl5.32 libstdc++-10-
dev perl perl-modules-5.32
pkg-config
Suggested packages:
bzip2-doc g++-multilib g++-10-multilib gcc-10-doc bzr | brz git
mercurial subversion debian-keyring gnupg patch bzr libstdc++-10-
doc perl-doc libterm-readline-gnu-perl | libterm-readline-perl-perl
libtap-harness-archive-perl dpkg-dev
The following NEW packages will be installed:
bzip2 g++ g++-10 golang golang-1.15 golang-1.15-doc golang-1.15-go
golang-1.15-src golang-doc golang-go golang-src libdpkg-perl libfile-
fcntllock-perl libgdbm-compat4 liblocale-gettext-perl libperl5.32
libstdc++-10-dev perl
perl-modules-5.32 pkg-config
0 upgraded, 20 newly installed, 0 to remove and 13 not upgraded.
Need to get 83.9 MB of archives.
After this operation, 460 MB of additional disk space will be used.
Do you want to continue? [Y/n]
```
- **更新软件包数据库**:`apt-get update` 用于刷新软件包数据库,获取新的可用软件包和版本。
- **升级软件包**:`apt-get upgrade` 会将所有已安装的软件包升级到数据库中列出的最新版本。
- **移除软件包**:`apt-get remove NAME` 可移除指定名称的软件包。
```bash
root@myhome:~# apt-get remove g++
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following packages were automatically installed and are no longer
required:
g++-10 libstdc++-10-dev
Use 'apt autoremove' to remove them.
The following packages will be REMOVED:
g++
0 upgraded, 0 newly installed, 1 to remove and 13 not upgraded.
After this operation, 15.4 kB disk space will be freed.
Do you want to continue? [Y/n]
(Reading database ... 50861 files and directories currently
installed.)
Removing g++ (4:10.2.1-1) ...
```
#### 5. CentOS、RHEL 和 Fedora 软件安装
CentOS、RHEL 和 Fedora 等发行版使用 RPM 包格式,基本交互工具是 rpm,而管理软件包的命令是 dnf(yum 已被移除,dnf 是 yum 的下一代重写版本,更强大和现代):
- **安装软件包**:`dnf install package_name` 安装指定名称的软件包及其依赖项。
- **移除软件包**:`dnf remove package_name` 移除指定软件包。
- **更新软件包**:`dnf update` 可将所有软件包更新到数据库中的最新版本,也可指定软件包名称进行单独更新。
- **搜索软件包**:`dnf search NAME` 搜索包含指定字符串的软件包名称。
- **刷新软件包数据库**:`dnf check-update` 刷新软件包数据库。
#### 6. Alpine Linux 软件安装
Alpine Linux 以小巧、简单、安全著称,深受主要使用 Docker 和 Kubernetes 的工程师喜爱。但它使用 musl 库而非广泛使用的 libc 库进行编译,在安装 Python 应用时可能需要额外步骤确保编译时依赖项已安装。
- **软件包管理命令**:使用 Alpine Package Keeper(apk)与软件包进行交互。Alpine 有稳定版(如 3.16)和滚动发布的 edge 版,还有 main、community 和 testing 三个仓库可用于安装软件包。
- **搜索软件包**:
- **更新软件包缓存**:在搜索或安装软件包前,建议使用 `apk update` 下载最新的软件包缓存。
```bash
root@myhome:~# apk update
fetch https://dl-cdn.alpinelinux.org/alpine/v3.16/main/x86_64/
APKINDEX.tar.gz
fetch https://dl-cdn.alpinelinux.org/alpine/v3.16/community/x86_64/
APKINDEX.tar.gz
v3.16.2-376-g3ff8974e73 [https://dl-cdn.alpinelinux.org/alpine/v3.16/
main]
v3.16.2-379-g3c25b38306 [https://dl-cdn.alpinelinux.org/alpine/v3.16/
community]
OK: 17037 distinct packages available
```
- **使用 Web 界面搜索**:若不确定软件包的准确名称,可使用 Web 界面 [https://pkgs.alpinelinux.org/packages](https://pkgs.alpinelinux.org/packages) 进行搜索。
- **使用 CLI 搜索**:可使用 `apk search` 命令搜索部分库名和二进制名,还可使用 `so:` 前缀指定搜索库,`cmd:` 前缀搜索命令,`pc:` 前缀搜索 pkg-config 文件。
```bash
root@myhome:~# apk search libproc
libproc-3.3.17-r1
libksysguard-5.24.5-r0
process-cpp-3.0.1-r3
samba-dc-libs-4.15.7-r0
procps-dev-3.3.17-r1
root@myhome:~# apk search vim
neovim-doc-0.7.0-r0
gvim-8.2.5000-r0
vim-tutor-8.2.5000-r0
faenza-icon-theme-vim-1.3.1-r6
notmuch-vim-0.36-r0
kmymoney-5.1.2-r3
faenza-icon-theme-gvim-1.3.1-r6
meson-vim-0.62.1-r0
runvimtests-1.30-r1
graphviz-3.0.0-r0
neovim-0.7.0-r0
py3-pynvim-0.4.3-r3
nftables-vim-0_git20200629-r1
vim-doc-8.2.5000-r0
vim-editorconfig-0.8.0-r0
apparmor-vim-3.0.4-r0
geany-plugins-vimode-1.38-r1
vimdiff-8.2.5000-r0
vimb-3.6.0-r0
neovim-lang-0.7.0-r0
u-boot-tools-2022.04-r1
fzf-neovim-0.30.0-r7
nginx-vim-1.22.1-r0
msmtp-vim-1.8.20-r0
protobuf-vim-3.18.1-r3
vimb-doc-3.6.0-r0
icinga2-vim-2.13.3-r1
fzf-vim-0.30.0-r7
vim-sleuth-1.2-r0
gst-plugins-base-1.20.3-r0
mercurial-vim-6.1.1-r0
skim-vim-plugin-0.9.4-r5
```
- **安装、升级和卸载软件包**:
- **安装软件包**:使用 `apk add` 命令安装软件包,默认安装最新版本,也可指定版本,但同一仓库中无法安装旧版本,可从其他仓库安装。
```bash
root@myhome:~# apk search -e postgresql14
postgr
```
0
0
复制全文
相关推荐










