强曰为道

与天地相似,故不违。知周乎万物,而道济天下,故不过。旁行而不流,乐天知命,故不忧.
文档目录

第 03 章:基础操作

第 03 章:基础操作

掌握 Alpine Linux 的包管理系统、常用命令和用户权限管理。

3.1 apk 包管理器

apk(Alpine Package Keeper)是 Alpine Linux 的包管理工具,类似 Debian 的 apt 或 Red Hat 的 dnf。

基础操作

# 更新包索引(类似 apt update)
apk update

# 升级所有已安装的包(类似 apt upgrade)
apk upgrade

# 同时更新索引并升级
apk update && apk upgrade

# 搜索包
apk search nginx
apk search -v nginx      # 显示详细信息
apk search -d nginx      # 包含描述

# 查看包信息
apk info nginx
apk info -a nginx        # 显示全部信息
apk info -d nginx        # 仅显示描述
apk info -R nginx        # 显示依赖
apk info -r nginx        # 显示被哪些包依赖

# 安装包
apk add nginx
apk add nginx=1.26.2-r0  # 安装指定版本
apk add nginx --no-cache # 不缓存索引(Docker 推荐)

# 删除包
apk del nginx
apk del nginx --purge    # 同时删除配置文件

# 升级单个包
apk add -u nginx

# 清理缓存
apk cache clean
rm -rf /var/cache/apk/*

仓库管理

# 查看当前仓库配置
cat /etc/apk/repositories
# 默认内容:
# https://dl-cdn.alpinelinux.org/alpine/v3.20/main
# #https://dl-cdn.alpinelinux.org/alpine/v3.20/community

# 启用社区仓库(很多常用软件在 community 中)
vi /etc/apk/repositories
# 取消 community 行的注释

# 添加 edge 仓库(获取最新软件版本)
cat >> /etc/apk/repositories << 'EOF'
https://dl-cdn.alpinelinux.org/alpine/edge/main
https://dl-cdn.alpinelinux.org/alpine/edge/community
https://dl-cdn.alpinelinux.org/alpine/edge/testing
EOF

# 从 edge 安装特定包(不影响其他包)
apk add --repository=https://dl-cdn.alpinelinux.org/alpine/edge/community package-name

# 添加本地仓库
apk add --allow-untrusted /path/to/package.apk

# 使用国内镜像源(加速)
sed -i 's/dl-cdn.alpinelinux.org/mirrors.tuna.tsinghua.edu.cn/g' /etc/apk/repositories
apk update

常用仓库镜像源

镜像源地址
官方 CDNhttps://dl-cdn.alpinelinux.org/alpine/v3.20/main
清华 TUNAhttps://mirrors.tuna.tsinghua.edu.cn/alpine/v3.20/main
阿里云https://mirrors.aliyun.com/alpine/v3.20/main
中科大https://mirrors.ustc.edu.cn/alpine/v3.20/main
华为云https://repo.huaweicloud.com/alpine/v3.20/main

apk 虚拟包与世界文件

# 世界文件(/etc/apk/world)记录了用户显式安装的包
cat /etc/apk/world
# linux-lts
# nginx
# openssh

# 已安装的包数据库
ls /lib/apk/db/
# installed    - 已安装包信息
# lock         - 锁文件
# scripts.tar  - 安装脚本
# triggers     - 触发器

# 使用虚拟包组合安装
apk add --virtual .build-deps gcc musl-dev make
# 用完后删除
apk del .build-deps

常用包速查表

用途包名说明
基础工具bash bash-completion vim htop tmux日常使用
网络工具curl wget bind-tools nmap tcpdump网络调试
编译工具gcc g++ make cmake musl-devC/C++ 编译
Pythonpython3 py3-pip py3-virtualenvPython 开发
Node.jsnodejs npm yarnNode.js 开发
数据库mariadb postgresql16 sqlite数据库
Web 服务器nginx apache2 lighttpdWeb 服务
容器docker podman lxc容器运行时
安全openssh openssl gnupg安全工具
文档mandoc man-pages linux-docs手册文档

3.2 基础命令

文件操作

# BusyBox 版文件操作
ls -lah /etc/          # 列出文件(长格式+隐藏+人类可读)
cp -r /src /dst        # 复制目录
mv old.txt new.txt     # 移动/重命名
rm -rf /tmp/data       # 递归删除
mkdir -p /a/b/c        # 创建多级目录
ln -s /real/path /link # 创建符号链接

# 文件查看
cat /etc/os-release    # 查看文件内容
head -n 20 /var/log/messages  # 查看前 20 行
tail -f /var/log/messages     # 实时跟踪
less /var/log/messages        # 分页查看
wc -l /etc/passwd             # 统计行数

# 文件搜索
find / -name "*.conf" -type f 2>/dev/null
find /var -size +10M -type f   # 查找大于 10M 的文件
find /tmp -mtime +7 -delete    # 删除 7 天前的临时文件

# 文件权限
chmod 755 /usr/local/bin/myscript
chmod u+x /usr/local/bin/myscript
chown user:group /path/to/file

文本处理

# grep 搜索
grep -r "error" /var/log/       # 递归搜索
grep -i "warning" /var/log/syslog  # 忽略大小写
grep -c "fail" /var/log/auth.log   # 统计匹配行数

# sed 替换
sed -i 's/old/new/g' file.txt   # 全局替换
sed -n '10,20p' file.txt        # 打印 10-20 行
sed '/^#/d' config.conf         # 删除注释行

# awk 处理
awk '{print $1, $3}' file.txt   # 打印第 1、3 列
awk -F: '{print $1}' /etc/passwd  # 指定分隔符

# 排序和去重
sort file.txt | uniq -c         # 排序后去重并计数
sort -t: -k3 -n /etc/passwd     # 按 UID 数字排序

# 管道组合
ps aux | grep nginx | awk '{print $2}' | xargs kill
cat /var/log/access.log | cut -d' ' -f1 | sort | uniq -c | sort -rn | head

进程管理

# 查看进程
ps aux                           # 所有进程
ps aux | grep nginx              # 过滤特定进程
top                              # 实时进程监控
htop                             # 更好的进程监控(需安装)

# 进程控制
kill PID                         # 发送 SIGTERM
kill -9 PID                      # 强制终止
killall nginx                    # 按名称终止
pkill -f "python.*server"        # 按模式匹配终止

# 后台运行
command &                        # 后台执行
nohup command &                  # 终端关闭后继续运行
jobs                             # 查看后台任务
fg %1                            # 切换到前台
disown %1                        # 从 shell 分离

# 系统信息
uname -a                         # 内核信息
cat /proc/cpuinfo                # CPU 信息
free -h                          # 内存使用
df -h                            # 磁盘使用
du -sh /var/*                    # 目录大小
uptime                           # 系统运行时间和负载

网络命令

# 网络配置
ip addr show                     # 查看 IP 地址
ip route show                    # 查看路由表
ip link show                     # 查看网络接口

# 网络测试
ping -c 4 8.8.8.8               # 测试连通性
traceroute google.com            # 路由追踪
nslookup example.com             # DNS 查询
dig example.com                  # DNS 查询(更详细)

# 端口检查
ss -tlnp                         # 查看监听端口
ss -s                            # 连接统计
netstat -tlnp                    # 传统方式(需安装 net-tools)

# 数据传输
curl -I https://example.com      # HTTP 头信息
wget https://example.com/file    # 下载文件
scp file user@host:/path         # 远程复制
rsync -avz /src/ user@host:/dst/ # 增量同步

3.3 用户管理

用户与组操作

# 创建用户
adduser myuser                    # 交互式创建
adduser -D -s /bin/bash myuser    # 非交互式创建(-D 无密码)
adduser -D -s /bin/bash -G wheel myuser  # 指定附加组

# 修改用户
passwd myuser                     # 设置密码
usermod -aG docker myuser         # 添加到附加组
usermod -s /bin/bash myuser       # 修改 shell

# 删除用户
deluser myuser                    # 删除用户
deluser --remove-home myuser      # 删除用户及主目录

# 组管理
addgroup mygroup                  # 创建组
addgroup myuser mygroup           # 将用户添加到组
delgroup mygroup                  # 删除组

# 查看用户信息
id myuser                         # 用户 UID、GID、所属组
whoami                            # 当前用户
who                               # 当前登录用户
last                              # 登录历史

用户配置文件

# /etc/passwd 格式
# 用户名:密码占位:UID:GID:描述:主目录:Shell
cat /etc/passwd
# root:x:0:0:root:/root:/bin/ash
# myuser:x:1000:1000:Linux User,,,:/home/myuser:/bin/bash

# /etc/group 格式
# 组名:密码占位:GID:成员列表
cat /etc/group
# wheel:x:10:myuser
# docker:x:998:myuser

# /etc/shadow(密码哈希存储)
cat /etc/shadow  # 仅 root 可读

# Shell 配置
cat /etc/profile        # 全局 profile
cat ~/.profile          # 用户 profile
cat ~/.bashrc           # bash 配置(需安装 bash)

sudo 配置

# 安装 sudo
apk add sudo

# 方法一:使用 wheel 组(推荐)
adduser myuser wheel
echo '%wheel ALL=(ALL:ALL) ALL' > /etc/sudoers.d/wheel
chmod 440 /etc/sudoers.d/wheel

# 方法二:直接编辑 sudoers(不推荐)
visudo
# 添加: myuser ALL=(ALL:ALL) ALL

# 测试 sudo
su - myuser
sudo whoami  # 应输出 root

# sudo 常用选项
sudo -i            # 切换到 root 的交互式 shell
sudo -u myuser cmd # 以指定用户执行命令
sudo -l            # 列出当前用户的权限

PAM 认证(可选)

# 安装 PAM
apk add linux-pam pam-client

# 密码策略配置
cat > /etc/pam.d/common-password << 'EOF'
password requisite pam_pwquality.so minlen=12 dcredit=-1 ucredit=-1 lcredit=-1 ocredit=-1
password required pam_unix.so use_authtok sha512 shadow
EOF

# 登录限制
cat > /etc/pam.d/common-auth << 'EOF'
auth required pam_tally2.so deny=5 onerr=fail unlock_time=900
auth required pam_unix.so nullok
EOF

3.4 Shell 环境配置

ash 配置

# Alpine 默认使用 BusyBox ash
# 配置文件路径: /etc/profile, ~/.profile

# 全局环境变量
cat > /etc/profile.d/custom.sh << 'EOF'
export PATH="/usr/local/bin:$PATH"
export EDITOR=vim
export HISTSIZE=1000
export HISTFILESIZE=2000
alias ll='ls -lah'
alias grep='grep --color=auto'
EOF

# 用户环境变量
cat > ~/.profile << 'EOF'
# 加载全局配置
[ -f /etc/profile ] && . /etc/profile

# 自定义配置
export PS1='\u@\h:\w\$ '
alias ..='cd ..'
alias ...='cd ../..'
EOF

切换到 bash

# 安装 bash
apk add bash bash-completion

# 设置为默认 shell
sed -i 's|/root:/bin/ash|/root:/bin/bash|' /etc/passwd
sed -i "s|/home/myuser:/bin/ash|/home/myuser:/bin/bash|" /etc/passwd

# bash 配置
cat > ~/.bashrc << 'EOF'
# 历史记录
export HISTSIZE=10000
export HISTFILESIZE=20000
export HISTCONTROL=ignoredups:erasedups
shopt -s histappend

# 别名
alias ll='ls -lah --color=auto'
alias la='ls -A --color=auto'
alias l='ls -CF --color=auto'
alias grep='grep --color=auto'
alias df='df -h'
alias du='du -h'

# 提示符
PS1='\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '

# bash-completion
[ -f /etc/profile.d/bash_completion.sh ] && . /etc/profile.d/bash_completion.sh
EOF

tmux 终端复用

# 安装 tmux
apk add tmux

# 基本配置
cat > ~/.tmux.conf << 'EOF'
# 前缀键改为 Ctrl+a
unbind C-b
set -g prefix C-a
bind C-a send-prefix

# 鼠标支持
set -g mouse on

# 状态栏
set -g status-style bg=colour235,fg=colour136
set -g status-left '[#S] '
set -g status-right '%Y-%m-%d %H:%M'

# 窗口编号从 1 开始
set -g base-index 1
setw -g pane-base-index 1

# 快捷键
bind | split-window -h
bind - split-window -v
bind r source-file ~/.tmux.conf
EOF

# 常用命令
tmux new -s dev            # 新建会话
tmux attach -t dev         # 连接会话
tmux ls                    # 列出会话
# 前缀 + d               # 分离会话
# 前缀 + c               # 新建窗口
# 前缀 + |               # 水平分割
# 前缀 + -               # 垂直分割

3.5 常用系统信息查看

# 系统信息汇总脚本
cat > /usr/local/bin/sysinfo << 'SCRIPT'
#!/bin/sh
echo "=== 系统信息 ==="
echo "主机名:   $(hostname)"
echo "系统版本: $(cat /etc/alpine-release)"
echo "内核版本: $(uname -r)"
echo "架构:     $(uname -m)"
echo "运行时间: $(uptime -p 2>/dev/null || uptime)"
echo ""
echo "=== CPU ==="
echo "型号: $(grep 'model name' /proc/cpuinfo | head -1 | cut -d: -f2)"
echo "核心: $(nproc)"
echo ""
echo "=== 内存 ==="
free -h
echo ""
echo "=== 磁盘 ==="
df -h | grep -E '^/dev'
echo ""
echo "=== 网络 ==="
ip -4 addr show | grep inet | grep -v 127.0.0.1
echo ""
echo "=== 已安装包数 ==="
echo "包数量: $(apk info 2>/dev/null | wc -l)"
SCRIPT
chmod +x /usr/local/bin/sysinfo

3.6 本章小结

主题关键命令
更新系统apk update && apk upgrade
安装包apk add package-name
搜索包apk search keyword
删除包apk del package-name
创建用户adduser -D -s /bin/bash username
设置 sudoadduser username wheel
查看进程ps aux, top, htop
网络信息ip addr show, ss -tlnp

下一章第 04 章:网络配置