8.系统管理

分類 后端, linux

Linux 用户、群组与系统管理

1. 用户和群组管理

1.1 用户配置文件

/etc/passwd 文件格式

1
2
3
4
5
6
7
8
9
lpic:x:500:500:LPI linux:/home/lpic:/bin/bash
↑ ↑ ↑ ↑ ↑ ↑ ↑
│ │ │ │ │ │ └─ 默认shell
│ │ │ │ │ └─────────── 家目录
│ │ │ │ └───────────────────── 用户备注信息(GECOS)
│ │ │ └───────────────────────── 主组GID
│ │ └───────────────────────────── 用户UID
│ └─────────────────────────────── 密码占位符(实际在/etc/shadow)
└──────────────────────────────────── 用户名

/etc/shadow 文件

  • 存储用户密码哈希值
  • 只有root用户可访问
  • 包含密码过期时间等安全信息

/etc/group 文件格式

1
2
3
4
5
6
staff:x:500:linux,lpic
↑ ↑ ↑ ↑
│ │ │ └───────────── 附加组成员
│ │ └───────────────── 组GID
│ └─────────────────── 组密码占位符
└───────────────────────── 组名

1.2 用户管理命令

useradd - 添加用户

1
useradd -c "开发人员" -d /home/dev -g staff -G developers -s /bin/bash -m devuser

常用选项:

  • -c:用户备注信息
  • -d:指定家目录路径
  • -g:指定主组
  • -G:指定附加组
  • -s:指定登录shell
  • -m:自动创建家目录(从/etc/skel复制模板)

usermod - 修改用户

1
usermod -c "高级开发" -G managers -s /bin/zsh devuser

常用选项:

  • -c:备注:指定备注
  • -d:path:home目录
  • -g:组名/GID:所属主组
  • -G:组名/GID:其他所属组
  • -s:path: login shell
  • -L:锁定用户密码
  • -U:解锁用户密码

userdel - 删除用户

1
userdel -r devuser  # 删除用户并移除家目录

passwd - 密码管理

1
2
3
passwd devuser      # 设置密码
passwd -l devuser # 锁定账户
passwd -u devuser # 解锁账户

1.3 群组管理命令

groupadd - 添加组

1
groupadd developers

groupmod - 修改组

1
groupmod -g 1001 -n devgroup developers
  • -g:修改GID
  • -n:修改组名

groupdel - 删除组

1
groupdel devgroup

id - 查看用户信息

1
id devuser  # 显示用户UID、GID和所属组

2. 系统时间管理

2.1 date - 系统时间

1
2
date 093017002012.30    # 设置为2012年9月30日17:00:30
date "+%Y/%m/%d (%a)" # 格式化为"2023/05/15 (Mon)"

常用格式符号:

  • %Y:4位年份
  • %m:2位月份
  • %d:2位日期
  • %H:24小时制小时
  • %M:分钟
  • %a:星期缩写

2.2 hwclock - 硬件时钟

1
2
3
hwclock --show          # 显示硬件时钟
hwclock --systohc # 系统时间同步到硬件时钟
hwclock --hctosys # 硬件时钟同步到系统时间

2.3 NTP时间同步

1
2
ntpdate time.server.lpic.jp  # 手动同步时间
service ntpd start # 启动NTP服务

NTP配置文件(/etc/ntp.conf):

1
2
3
driftfile /etc/ntp.drift
logfile /var/log/ntp.log
server ntp.server.lpic.jp

3. 系统日志管理

3.1 syslog 配置

配置文件:/etc/syslog.conf

格式:

1
facility.priority    log_location

facility(设施)类型:

  • auth/authpriv:认证相关
  • cron:定时任务
  • daemon:守护进程
  • kern:内核消息
  • mail:邮件系统
  • syslog:syslog自身
  • local0-local7:自定义设施

priority(优先级):

  • emerg:紧急情况
  • alert:需要立即处理
  • crit:严重错误
  • err:一般错误
  • warning:警告
  • notice:重要通知
  • info:一般信息
  • debug:调试信息

输出目标:

  • 文件名:如/var/log/messages
  • @host:远程syslog服务器
  • 用户名:发送到用户终端
  • *:所有用户终端

3.2 logger 命令

1
logger -p syslog.info -t TEST "测试日志消息"

3.3 常用日志文件

  • /var/log/secure:认证日志
  • /var/log/messages:系统消息
  • /var/log/boot.log:启动日志

3.4 用户登录信息

1
2
3
4
who          # 显示当前登录用户
w # 显示详细登录信息
last # 显示登录历史
lastlog # 显示用户最近登录时间

3.5 日志轮转

配置文件:/etc/logrotate.conf

示例:

1
2
3
4
5
6
7
8
9
10
weekly
rotate 4
create
compress

/var/log/wtmp {
monthly
create 0664 root utmp
rotate 1
}

4. 邮件系统

4.1 邮件组件

  • MTA(邮件传输代理):sendmail/postfix/exim
  • MDA(邮件投递代理):procmail
  • MUA(邮件用户代理):mail/mutt/thunderbird

4.2 启动MTA

1
2
3
service sendmail start
service postfix start
service exim4 start

4.3 mail 命令

1
2
3
4
mail -s "测试邮件" user@example.com
邮件正文...
. # 单独一行输入点结束
Cc: # 抄送地址(可选)

4.4 邮件转发

/etc/aliases

1
root: admin,lpic

更新别名数据库:

1
newaliases

用户.forward文件

1
2
/home/user/.forward:
user2@example.com

5. 打印系统

5.1 CUPS打印系统

1
service cups start  # 启动CUPS服务

主要配置文件:

  • /etc/cups/cupsd.conf:服务配置
  • /etc/cups/printers.conf:打印机配置
  • /etc/cups/ppd/:PPD驱动文件

5.2 打印命令

lpr - 打印文件

1
lpr -P LaserJet -#2 document.pdf

lpq - 查看打印队列

1
lpq -P LaserJet

lprm - 删除打印任务

1
2
lprm -P LaserJet 123  # 删除指定任务
lprm -P LaserJet - # 删除用户所有任务

5.3 Web管理界面

访问:http://localhost:631

6. 定时任务管理

6.1 cron 定时任务系统

crontab 命令

1
2
3
4
crontab -e            # 编辑当前用户的crontab
crontab -l # 列出当前用户的crontab
crontab -r # 删除当前用户的crontab
crontab -u user -e # 编辑指定用户的crontab(root权限)

crontab 文件格式

1
2
3
4
5
6
7
* * * * * command_to_execute
│ │ │ │ │
│ │ │ │ └── 星期几 (0-6, 0=星期日)
│ │ │ └──── 月份 (1-12)
│ │ └────── 日 (1-31)
│ └──────── 小时 (0-23)
└────────── 分钟 (0-59)

特殊字符:

  • *:所有有效值
  • ,:值列表分隔符(如1,3,5)
  • -:范围(如1-5)
  • /:步长(如*/2表示每2个单位)

系统cron目录

1
2
3
4
5
6
/etc/crontab           # 系统级crontab文件
/etc/cron.d/ # 系统cron片段
/etc/cron.hourly/ # 每小时执行
/etc/cron.daily/ # 每天执行
/etc/cron.weekly/ # 每周执行
/etc/cron.monthly/ # 每月执行

anacron

  • 用于在系统停机后执行错过的定时任务
  • 配置文件:/etc/anacrontab

6.2 at 一次性任务

at 命令

1
2
3
4
at 17:00 tomorrow      # 创建定时任务
at -f job.sh 23:00 # 从文件读取任务
atq # 查看待执行任务(at -l)
atrm 3 # 删除任务3(at -d 3)

时间格式

1
2
3
4
HH:MM                  # 24小时制(如23:00)
noon/midnight # 中午12点/午夜12点
today/tomorrow # 今天/明天
now + count time-units # 如now + 3 days

6.3 batch 低负荷执行

1
2
batch                  # 进入交互式输入模式
batch -f job.sh # 从文件读取任务

6.4 访问控制

cron 访问控制

  1. 如存在/etc/cron.allow,仅允许文件内用户
  2. 如无allow文件,检查/etc/cron.deny,拒绝文件内用户
  3. 如两者都不存在,默认行为取决于系统配置

at 访问控制

  1. 如存在/etc/at.allow,仅允许文件内用户
  2. 如无allow文件,检查/etc/at.deny,拒绝文件内用户
  3. 如两者都不存在,默认只有root可用

7. 本地化与国际化

7.1 本地化变量

变量 作用域
LC_CTYPE 字符分类和大小写转换
LC_COLLATE 排序和比较规则
LC_MESSAGES 系统消息语言
LC_MONETARY 货币格式
LC_NUMERIC 数字格式
LC_TIME 日期时间格式
LC_ALL 覆盖所有LC_*设置
LANG 默认设置(未被LC_*覆盖时使用)

7.2 常用locale设置

1
2
3
4
5
C/POSIX               # 最小locale
en_US.utf8 # 英文(美国)
ja_JP.utf8 # 日文(UTF-8)
ja_JP.eucJP # 日文(EUC-JP)
zh_CN.utf8 # 中文(简体)

7.3 locale 命令

1
2
3
locale -a             # 列出可用locale
locale -m # 列出可用字符编码
locale # 显示当前locale设置

7.4 字符编码

编码 描述
ASCII 7位英文字符
ISO-8859 8位扩展ASCII
UTF-8 Unicode编码
EUC-JP Linux日文编码
Shift_JIS Windows/Mac日文编码
ISO-2022-JP 邮件用日文编码

7.5 iconv 编码转换

1
2
iconv -f eucjp -t utf8 input.txt > output.txt  # EUC-JP转UTF-8
iconv -l # 列出支持编码

8. 时区设置

8.1 时区文件

1
2
/usr/share/zoneinfo/   # 所有时区定义文件
/etc/localtime # 系统当前时区链接

8.2 设置时区方法

1
2
3
4
5
6
7
8
# 方法1: 复制时区文件
cp /usr/share/zoneinfo/Asia/Tokyo /etc/localtime

# 方法2: 创建符号链接
ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime

# 方法3: 临时设置(当前会话有效)
export TZ="Asia/Tokyo"

8.3 时区配置工具

1
2
3
4
tzselect   # 交互式时区选择
tzconfig # 时区配置工具(部分发行版)
dpkg-reconfigure tzdata # Debian系重新配置时区
timedatectl set-timezone Asia/Tokyo # systemd系统设置时区

9. 打印系统补充

9.1 CUPS Web管理界面

访问:http://localhost:631

9.2 打印命令补充

1
2
lpstat -p -d          # 显示打印机状态和默认打印机
lpoptions -d LaserJet # 设置默认打印机

9.3 打印系统日志

1
/var/log/cups/        # CUPS日志目录

留言與分享

7.XWindow

分類 后端, linux
1
2
3
# X Window 系统架构详解

## 基础架构

localhost(X server) --X protocol-- remotehost(X client)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28

### 核心组件说明
1. **X Server**:
- 负责硬件管理(显卡、显示器、输入设备等)
- 屏幕绘制与渲染
- 提供字体服务功能
- 典型实现:Xorg

2. **X Client**:
- 应用程序逻辑处理
- 响应X Server的事件请求
- 例如:xterm、Firefox等GUI程序

3. **X Window Manager**:
- 特殊的X Client
- 负责管理窗口布局、装饰和交互
- 常见WM:twm、KWin、Metacity等

4. **Display Manager**:
- 提供图形化登录界面
- 负责加载用户选择的WM和语言环境
- 常见实现:GDM、KDM、XDM

## startx 启动流程

### 命令语法
```bash
startx [X client 参数] -- [X server 参数]

X server 参数查找顺序

  1. startx 命令行参数
  2. 用户主目录 ~/.xserverrc
  3. 系统默认 /etc/X11/xinit/xserverrc
  4. 最终回退 /usr/bin/X (X server可执行文件)

X client 参数查找顺序

  1. startx 命令行参数
  2. 用户主目录 ~/.xinitrc
  3. 系统默认 /etc/X11/xinit/xinitrc
  4. 最终回退 xterm (基础终端模拟器)

底层调用

startx 最终调用 xinit 启动X系统:

1
xinit [client option] -- [server or display option]

默认等效命令:

1
xinit /etc/X11/xinit/xinitrc -- /usr/bin/X

最小化启动示例:

1
xinit xterm -geometry +1+1 -n login -display :0 -- X :0

配置文件体系

核心配置文件

  • 主配置文件:/etc/X11/xorg.conf
  • 模块目录:/usr/lib64/xorg/modules/
  • 字体目录:/usr/share/X11/fonts/
  • 显卡驱动:/usr/lib64/xorg/modules/drivers/

配置段落(Section)

Section名称 功能描述
Module X Server加载的功能模块
InputDevice 输入设备配置(键盘/鼠标)
Files 字体和颜色资源路径
Monitor 显示器参数(刷新率等)
Device 显卡芯片组配置
Screen 显示分辨率和色深设置
ServerLayout 各模块的组合配置

配置生成工具

1
2
3
Xorg -configure
# 生成测试配置文件:/root/xorg.conf.new
# 测试命令:X -config /root/xorg.conf.new

实用命令工具

显示调节

  • xvidtune:GUI显示器频率调节工具
  • xhost:X server访问控制
    1
    2
    3
    4
    xhost +hostname  # 添加访问权限
    xhost -hostname # 移除访问权限
    xhost + # 允许所有主机
    xhost - # 禁用所有远程访问

环境变量

1
2
DISPLAY=localhost:0  # 指定显示目标
export DISPLAY

信息查询

命令 功能描述
showrgb 显示可用RGB颜色值
xlsclients 列出运行中的X客户端
xwininfo 查询窗口几何属性
xdpyinfo 显示X Server详细信息

显示管理器(XDM)

类型对比

类型 描述
XDM 基础X Display Manager
GDM GNOME显示管理器
KDM KDE显示管理器

XDM启动流程

  1. 启动XDM服务
  2. 加载 /etc/X11/Xsession
  3. 执行 /etc/X11/xinit/xinitrc.d/ 下脚本
  4. 读取用户配置 ~/.xsession
  5. 加载 ~/.Xclients/etc/X11/xinit/Xclients

关键配置文件

文件名 用途描述
xdm-config 基础配置和访问控制
Xaccess 主机访问权限设置
Xresources 登录界面样式和X资源定义
Xservers X Server与Display映射
Xsetup_0 登录前环境设置(如壁纸)
Xsession 会话启动流程控制

窗口管理器列表

名称 特点描述
twm 最基本的窗口管理器
fvwm 轻量级窗口管理器
sawfish GNOME集成WM
enlightenment 高定制化WM
metacity GNOME默认WM
fluxbox 轻量级高自由度WM
WindowMaker NeXTSTEP风格WM
KWin KDE标准窗口管理器

辅助功能技术

AccessX 功能

功能 描述
粘滞键 分离组合键输入
慢速键 调整按键响应时间
防反弹键 防止重复输入
切换键 切换状态声音反馈
鼠标键 键盘模拟鼠标操作

其他辅助工具

  • 高对比度显示:增强视觉可读性
  • 屏幕阅读器:Orca等文本转语音工具
  • 盲文显示器:触觉输出设备
  • 屏幕放大镜:视觉辅助工具
  • 屏幕键盘:GOK等虚拟输入工具

专用软件

  • Orca:GNOME屏幕阅读器和放大镜
  • GOK:GNOME屏幕键盘
  • emacspeak:为Emacs添加语音功能

留言與分享

6.Shell变量与Shell脚本

分類 后端, linux

Shell变量与Shell脚本

Bash设定文档

  • /etc/profile: 登录时执行,适用于所有用户
  • ~/.bash_profile: 登录时执行
  • ~/.bash_login: 当 ~/.bash_profile 不存在时,登录时执行
  • ~/.profile: 当 ~/.bash_profile~/.bash_login 都不存在时,登录时执行
  • ~/.bashrc: 每次启动 Bash 时执行
  • ~/.bash_logout: 登出时执行

Shell环境定制化

export命令

用于将shell变量转化为环境变量,使得该变量能够被其他程序或子进程访问。

set命令

  • set: 显示打印当前的环境变量和Shell变量

  • set [-o] [+o] option

    • -o:启用该选项
    • +o:禁用该选项
    • 常用选项:
      • allexport: 自动将变量导出为环境变量
      • emacs: 设置Emacs风格的键绑定
      • ignoreeof: 禁止通过 Ctrl+D 退出Shell
      • noclobber: 禁止文件重定向覆盖文件
      • noglob: 禁用元字符解析
      • vi: 设置vi风格的键绑定
  • set -o: 显示或更改选项的状态

printenv命令

用于打印当前的环境变量。

alias/unalias

  • alias: 设置命令别名
  • unalias: 取消命令别名
  • 临时解除别名:可以使用反斜杠 \,例如:alias ls='ls -l' 后,'\ls' 会执行原始的 ls 命令。

定义Shell函数

  • 定义函数语法:

    1
    2
    3
    function [函数名] () {
    运行内容;
    }

    注意:{} 前后需要有空格。

  • 定义变量:$变量名

  • 函数名不能与变量名重名。

  • 查看已定义的函数:declare -f

  • 删除函数:unset

Shell脚本

执行Shell脚本

  • 脚本命令可以分行书写,并逐行执行。
  • 运行脚本时,如果没有执行权限,只需要文件的读取权限和文件夹的运行权限即可。
    • 使用 source [脚本名] 或简化版 .[脚本名] 执行脚本。
    • 如果脚本有执行权限,可以省略 source,例如:./[脚本名]
    • 如果脚本不在 PATH 环境变量指定的文件夹中,需要显式指定脚本路径,或者在当前目录使用 ./

传入Shell脚本的变量

  • $0:脚本文件名(全路径)
  • $1:第一个传入的变量值
  • $2:第二个传入的变量值
  • #$:传入的变量数量
  • $@:所有传入的变量值(空格分隔)
  • $*:所有变量值(以系统默认的分隔符分隔)
  • 脚本执行结束后的返回状态:echo $?。正常执行返回0,错误返回1。

文件检查

使用 test 命令或者 [ ] 语法进行文件检查:

1
2
test 条件文
[ 条件文 ]

常见条件文:

  • -f 文件名:检查文件是否存在且为普通文件
  • -d 文件夹名:检查文件夹是否存在
  • -r 文件名:检查文件是否有读取权限
  • -w 文件名:检查文件是否有写入权限
  • -x 文件名:检查文件是否有执行权限
  • -s 文件名:检查文件是否为空
  • -L 文件名:检查是否为软链接
  • -e 文件名:检查文件是否存在
  • 文件名1 -nt 文件名2:文件1是否比文件2新
  • 文件名1 -ot 文件名2:文件1是否比文件2旧
  • 数值比较:-eq, -ge, -gt, -le, -lt, -ne(等于、大于等于、大于、小于等于、小于、不等于)
  • 字符串比较:-n(字符串长度大于0),-z(字符串长度为0)
  • 字符串相等:字符串1 = 字符串2
  • 字符串不等:字符串1 != 字符串2
  • 逻辑操作:
    • !:条件非
    • -a:与(and)
    • -o:或(or)

条件分歧

if语句

1
2
3
4
5
6
if 条件式
then
执行文1
else
执行文2
fi

或者:

1
2
3
4
5
if 条件式; then
执行文1
else
执行文2
fi

case语句

1
2
3
4
5
6
7
8
casein
值1)
执行文1 ;;
值2)
执行文2 ;;
*)
执行其他文 ;;
esac

注意:每个 执行文 后面要有 ;;,并且最后使用 esac 结束。

for循环

1
2
3
4
for 变量名 in 变量值列表
do
执行文
done

例如:

1
2
3
4
for var in Vine SUSE Gentoo
do
echo $var Linux
done

变量值列表可以通过空格分隔,也可以使用 seq

1
2
3
4
for i in `seq 10 15`
do
echo $i
done

while循环

1
2
3
4
while 条件文
do
执行文
done

read命令

1
2
3
echo -n 'Who are you?:'
read username
echo "Hello, $username!"
  • 如果 echo 后面跟 -n,则输入的提示信息和用户输入将在同一行显示。

指定执行Shell类型

1
#!/bin/bash

此行用于指定脚本执行时使用的Shell解释器。

留言與分享

5.文件系统与存储管理

分類 后端, linux

1. 磁盘配额管理

1.1 配额概念与类型

配额类型说明

  • 硬限制(Hard Limit):用户绝对不能超过的磁盘空间限制
  • 软限制(Soft Limit):允许用户暂时超过的限制,系统会发出警告
  • 宽限期(Grace Period):超过软限制后允许保留的时间(默认7天)

1.2 配额实施完整步骤

  1. 修改fstab文件

    1
    2
    # 在/etc/fstab中添加usrquota和/或grpquota选项
    /dev/sda1 /home ext4 defaults,usrquota,grpquota 0 2
  2. 重新挂载文件系统

    1
    2
    umount /home
    mount -o remount /home
  3. 创建配额文件

    1
    2
    touch /home/aquota.user /home/aquota.group
    chmod 600 /home/aquota.*
  4. 初始化配额数据库

    1
    quotacheck -cugm /home
  5. 启用配额系统

    1
    quotaon -avug
  6. 为用户设置配额

    1
    edquota username

1.3 配额管理命令详解

quota - 显示配额信息

1
2
3
quota -u username  # 显示用户配额
quota -g groupname # 显示组配额
quota -v # 显示详细信息

quotacheck - 检查配额

1
2
quotacheck -avug  # 检查所有文件系统配额
quotacheck -cug /home # 检查指定文件系统

quotaon/quotaoff - 启用/禁用配额

1
2
quotaon -avug     # 启用所有配额
quotaoff /home # 禁用指定文件系统配额

edquota - 编辑配额

1
2
3
edquota -u username  # 编辑用户配额
edquota -p template_user new_user # 复制配额设置
edquota -t # 修改宽限期

repquota - 报告配额状态

1
2
repquota -a       # 报告所有文件系统配额状态
repquota -u /home # 报告/home的用户配额

2. 文件系统层次标准(FHS)

2.1 核心目录结构

目录 完整描述 典型内容
/bin 基础命令二进制文件 ls, cp, mv等基本命令
/sbin 系统管理二进制文件 fdisk, fsck, ifconfig等
/etc 系统配置文件 passwd, fstab, network等配置文件
/dev 设备文件 sda, tty, null等设备节点
/lib 系统库文件 系统运行所需共享库
/mnt 临时挂载点 临时挂载文件系统的目录
/opt 可选应用软件包 第三方应用程序
/proc 进程和内核信息 虚拟文件系统,提供系统信息
/root root用户主目录 root用户的个人文件和配置
/boot 启动加载文件 vmlinuz, initramfs, grub等
/home 用户主目录 普通用户的个人目录
/tmp 临时文件 系统重启后通常清空
/var 可变数据文件 日志、邮件、数据库等
/usr 用户程序资源 应用程序、文档、库文件等

3. 分区与文件系统管理

3.1 分区管理

fdisk 完整操作流程

1
fdisk /dev/sdb

交互命令列表:

  • n:创建新分区
  • d:删除分区
  • p:显示分区表
  • t:更改分区类型
  • a:切换启动标志
  • w:写入并退出
  • q:不保存退出
  • m:显示帮助菜单

3.2 文件系统创建与管理

mkfs 命令集

1
2
3
4
mkfs -t ext4 /dev/sdb1      # 创建ext4文件系统
mkfs.ext4 /dev/sdb1 # 同上
mkfs.xfs /dev/sdb2 # 创建XFS文件系统
mkfs.btrfs /dev/sdb3 # 创建Btrfs文件系统

交换空间管理

1
2
3
4
mkswap /dev/sdb4            # 创建交换分区
swapon /dev/sdb4 # 启用交换分区
swapon -s # 显示交换空间状态
swapoff /dev/sdb4 # 禁用交换分区

3.3 文件系统检查与维护

fsck 系列命令

1
2
3
4
fsck /dev/sdb1              # 基本文件系统检查
fsck -y /dev/sdb1 # 自动修复错误
e2fsck -p /dev/sdb1 # ext文件系统自动修复
xfs_repair /dev/sdb2 # XFS文件系统修复

tune2fs 调整参数

1
2
3
tune2fs -c 30 /dev/sdb1     # 设置每30次挂载后检查
tune2fs -i 15d /dev/sdb1 # 设置15天间隔检查
tune2fs -L DATA /dev/sdb1 # 设置卷标为DATA

3.4 空间监控命令

df 详细用法

1
2
3
4
df -h                       # 人类可读格式
df -i # 显示inode使用情况
df -T # 显示文件系统类型
df --total # 显示总计信息

du 详细用法

1
2
3
4
du -sh /var/log             # 显示目录总大小
du -ah /home # 显示所有文件和目录大小
du -csh * # 显示当前目录各项目大小和总计
du --max-depth=1 /usr # 只显示一级子目录大小

4. 文件搜索命令

4.1 find 命令完整用法

基本语法

1
find [路径] [选项] [操作]

常用示例

1
2
3
4
5
6
find / -name "*.conf"               # 按名称查找
find /home -user alice # 按属主查找
find /var/log -mtime -7 # 查找7天内修改的文件
find /tmp -size +10M # 查找大于10MB的文件
find . -perm 644 # 查找权限为644的文件
find /etc -type f -exec grep -l "error" {} \; # 结合grep

4.2 locate/updatedb 系统

1
2
3
locate passwd              # 快速查找文件
updatedb # 更新数据库
updatedb -e /mnt # 排除/mnt目录

4.3 which/whereis/type

1
2
3
which ls                   # 查找命令路径
whereis python # 查找命令相关文件
type -a cd # 显示命令类型

5. 挂载管理

5.1 挂载选项详解

选项 完整描述
async/sync 异步/同步写入
auto/noauto 是否允许mount -a自动挂载
exec/noexec 是否允许执行二进制文件
ro/rw 只读/读写模式
suid/nosuid 是否允许SUID/SGID
user/nouser 是否允许普通用户挂载
defaults 默认选项(rw,suid,dev,exec,auto,nouser,async)

5.2 mount/umount 完整用法

1
2
3
4
5
mount /dev/sdb1 /mnt/data           # 基本挂载
mount -o remount,ro /mnt/data # 重新挂载为只读
mount -t nfs server:/share /mnt/nfs # 挂载NFS
umount /mnt/data # 卸载
umount -l /mnt/data # 延迟卸载

5.3 /etc/fstab 文件格式

1
2
3
# 设备文件/挂载点/文件系统类型/选项/备份标记/检查顺序
/dev/sdb1 /data ext4 defaults 0 2
UUID=xxxx /home xfs defaults 0 1

6. 逻辑卷管理(LVM)

6.1 LVM 基本概念

  1. PV(Physical Volume):物理卷,实际存储设备
  2. VG(Volume Group):卷组,由PV组成的存储池
  3. LV(Logical Volume):逻辑卷,从VG划分的可挂载空间
  4. PE(Physical Extent):物理块,LVM最小分配单元(默认4MB)
  5. LE(Logical Extent):逻辑块,与PE一一对应

6.2 LVM 完整操作流程

物理卷(PV)管理

1
2
3
4
pvcreate /dev/sdb /dev/sdc          # 创建PV
pvdisplay # 显示PV信息
pvmove /dev/sdb # 迁移PV数据
pvremove /dev/sdb # 删除PV

卷组(VG)管理

1
2
3
4
5
vgcreate vg_data /dev/sdb /dev/sdc  # 创建VG
vgextend vg_data /dev/sdd # 扩展VG
vgreduce vg_data /dev/sdb # 缩减VG
vgdisplay # 显示VG信息
vgremove vg_data # 删除VG

逻辑卷(LV)管理

1
2
3
4
5
6
lvcreate -L 50G -n lv_home vg_data  # 创建50G逻辑卷
lvextend -L +10G /dev/vg_data/lv_home # 扩展10G
lvreduce -L -5G /dev/vg_data/lv_home # 缩减5G
lvresize -L 60G /dev/vg_data/lv_home # 调整到60G
lvdisplay # 显示LV信息
lvremove /dev/vg_data/lv_home # 删除LV

文件系统扩展

1
2
3
4
5
# 对于ext2/3/4文件系统
resize2fs /dev/vg_data/lv_home

# 对于XFS文件系统
xfs_growfs /dev/vg_data/lv_home

6.3 LVM 快照功能

1
2
3
4
lvcreate -L 10G -s -n snap_home /dev/vg_data/lv_home  # 创建快照
mount /dev/vg_data/snap_home /mnt/snapshot # 挂载快照
umount /mnt/snapshot # 卸载快照
lvremove /dev/vg_data/snap_home # 删除快照

6.4 LVM 信息查看命令

1
2
3
4
5
6
7
pvs        # 简要PV信息
vgs # 简要VG信息
lvs # 简要LV信息
pvdisplay # 详细PV信息
vgdisplay # 详细VG信息
lvdisplay # 详细LV信息
lsblk # 块设备层次结构

留言與分享

4.文件和程序管理

分類 后端, linux

1. 用户权限管理

1.1 文件权限基础

权限表示法

1
2
3
4
5
6
d rwx r-x r--
↑ ↑ ↑ ↑
│ │ │ └─ 其他用户权限(r--)
│ │ └─── 所属组权限(r-x)
│ └────── 所有者权限(rwx)
└──────── 文件类型(d=目录)

权限数值

  • r(读): 4
  • w(写): 2
  • x(执行): 1

1.2 chmod 命令

1
chmod [选项] 权限 文件

常用选项

  • -R: 递归修改目录下所有文件

权限设置方法

  1. 符号法:

    1
    2
    3
    4
    chmod u+x file      # 给所有者添加执行权限
    chmod g-w file # 移除组的写权限
    chmod o=rx file # 设置其他用户为读执行
    chmod a+r file # 给所有用户添加读权限
  2. 数字法:

    1
    2
    chmod 755 file      # rwxr-xr-x
    chmod 644 file # rw-r--r--

1.3 特殊权限

权限 数值 设置方法 说明
SUID 4000 u+s 执行时以文件所有者权限运行
SGID 2000 g+s 执行时以文件所属组权限运行
Sticky 1000 o+t 目录中文件只有所有者能删除

1.4 umask 命令

1
2
umask           # 查看当前umask值
umask 022 # 设置新的umask值
  • 文件默认权限: 666 - umask
  • 目录默认权限: 777 - umask

1.5 ACL 高级权限控制

1
2
3
setfacl -m u:user:rwx file   # 添加用户ACL
setfacl -x u:user file # 删除用户ACL
getfacl file # 查看ACL权限

1.6 所有权管理

1
2
3
chown user:group file        # 修改所有者和组
chown -R user:group dir # 递归修改
chgrp group file # 修改文件所属组

2. 链接管理

2.1 链接类型对比

特性 硬链接 软链接
inode 相同 不同
跨文件系统 不支持 支持
链接目录 不允许 允许
原文件删除 仍可访问 失效

2.2 ln 命令

1
2
ln source link        # 创建硬链接
ln -s source link # 创建软链接

3. 进程管理

3.1 ps 命令

1
2
3
ps aux       # 查看所有进程
ps -ef # 完整格式显示
ps -u user # 查看指定用户进程

3.2 top 命令

1
top          # 动态查看进程
  • r: 调整进程优先级
  • k: 终止进程
  • q: 退出

3.3 进程控制

1
2
3
kill -9 PID          # 强制终止进程
killall process # 终止同名所有进程
pkill pattern # 按模式终止进程

常用信号

信号 说明
HUP 1 重新加载配置
INT 2 中断(Ctrl+C)
KILL 9 强制终止
TERM 15 正常终止

3.4 作业控制

1
2
3
4
command &       # 后台运行
fg %1 # 前台恢复作业1
bg %2 # 后台继续作业2
jobs # 查看后台作业

3.5 优先级管理

1
2
nice -n 10 command   # 启动低优先级进程
renice 15 -p PID # 调整运行中进程优先级

3.6 终端复用器

1
tmux                # 启动新会话

常用快捷键:

  • Ctrl+b c: 新建窗口
  • Ctrl+b %: 垂直分割
  • Ctrl+b ": 水平分割
  • Ctrl+b d: 分离会话

4. 压缩与归档

4.1 单文件压缩

gzip

1
2
3
gzip file            # 压缩为file.gz
gunzip file.gz # 解压
gzip -d file.gz # 解压(同上)

bzip2

1
2
bzip2 file           # 压缩为file.bz2
bunzip2 file.bz2 # 解压

xz

1
2
xz file              # 压缩为file.xz
unxz file.xz # 解压

4.2 归档工具

tar 命令

1
2
3
4
5
6
7
8
9
# 打包压缩
tar czvf archive.tar.gz dir/ # gzip压缩
tar cjvf archive.tar.bz2 dir/ # bzip2压缩
tar cJvf archive.tar.xz dir/ # xz压缩

# 解压
tar xzvf archive.tar.gz # 解压gzip
tar xjvf archive.tar.bz2 # 解压bzip2
tar xJvf archive.tar.xz # 解压xz

cpio 命令

1
2
find . | cpio -ov > backup.cpio      # 创建归档
cpio -idv < backup.cpio # 解压归档

dd 命令

1
2
dd if=/dev/sda of=disk.img bs=1M     # 创建磁盘映像
dd if=disk.img of=/dev/sdb # 恢复磁盘映像

5. 实用技巧

5.1 nohup 命令

1
nohup command &      # 退出终端后继续运行

5.2 watch 命令

1
watch -n 5 'ls -l'   # 每5秒执行一次命令

5.3 文件传输

1
dd if=file.iso | ssh user@host "dd of=file.iso"  # 通过SSH传输文件

留言與分享

3.bash

分類 后端, linux

Bash 命令与 Shell 使用指南

1. 命令组合与控制

1.1 命令组合方式

1
2
3
命令1 ; 命令2    # 无论命令1成功与否,都会执行命令2
命令1 && 命令2 # 只有命令1成功执行(返回0)才会执行命令2
命令1 || 命令2 # 只有命令1执行失败(非0)才会执行命令2

1.2 引用符号

符号 名称 功能说明
' 单引号 内部所有内容视为纯文本,不解释变量和特殊字符
" 双引号 会解释$、`和\等特殊字符,变量会被展开
` 反引号 执行内部命令并将结果替换到当前位置(等同于$(命令)语法)

2. 命令历史

2.1 history 命令

1
2
3
4
history        # 显示命令历史记录
!5 # 执行历史记录中第5条命令
!ls # 执行最近以ls开头的命令
!?config # 执行最近包含config的命令

2.2 历史记录管理

1
2
history -c    # 清除当前shell的历史记录
history -d 10 # 删除第10条历史记录

2.3 相关环境变量

1
2
3
HISTSIZE=1000       # 内存中保存的历史记录数量
HISTFILESIZE=2000 # 历史记录文件保存的最大数量
HISTFILE=~/.bash_history # 历史记录文件路径

3. Shell 类型与快捷键

3.1 常见Shell类型

  • Bourne Shell(sh): 经典Unix shell → 衍生出bash
  • Bash(Bourne-Again Shell): Linux默认shell
  • C Shell(csh): 类C语法 → 衍生出tcsh
  • Korn Shell(ksh): 结合sh和csh优点
  • Z Shell(zsh): 功能强大的现代shell

3.2 常用快捷键

快捷键 功能描述
Tab 命令/文件名自动补全
Ctrl+A 移动到行首
Ctrl+E 移动到行尾
Ctrl+D 删除当前字符(相当于Delete)
Ctrl+H 删除前一个字符(相当于Backspace)
Ctrl+L 清屏(等同于clear命令)
Ctrl+C 终止当前命令
Ctrl+Z 暂停当前命令(可用fg恢复)
Ctrl+S 暂停屏幕输出
Ctrl+Q 恢复屏幕输出

4. 变量与环境设置

4.1 变量操作

1
2
3
export VAR=value    # 设置环境变量(对新shell有效)
unset VAR # 删除变量
PATH=$PATH:/new/path # 追加PATH路径

4.2 set 命令选项

1
2
set -o option      # 启用选项
set +o option # 禁用选项

常用选项:

  • noclobber/-C: 防止重定向覆盖已有文件
  • histexpand/-H: 启用!历史命令扩展

4.3 提示符定制(PS1)

1
PS1='[\u@\h \W]\$ '  # 常见默认提示符格式

可用转义符:

  • \s: shell名称
  • \v: bash版本
  • \u: 用户名
  • \h: 主机名
  • \w: 当前工作目录

4.4 用户切换

1
2
su user       # 切换用户(不改变环境变量)
su - user # 完全切换用户(包括环境)

5.帮助命令 man 详解

基本用法

1
man command      # 查看命令的手册页(返回第一个匹配的帮助文件)

常用选项

选项 功能说明 等价命令
-a 显示所有匹配的手册页(按顺序显示) -
-f 查找完全匹配的命令文档 whatis
-k 查找包含关键词的文档 apropos
-w 显示手册页的存储路径 -

指定手册章节

1
2
man 5 passwd     # 查看/etc/passwd文件的格式说明(第5节)
man 3 printf # 查看C库函数printf的文档(第3节)

手册章节分类

Section 内容类型
1 用户命令
2 系统调用
3 C库函数
4 设备文件
5 配置文件格式
6 游戏
7 杂项
8 系统管理命令
9 Linux内核相关

手册页存储位置

1
2
/usr/share/man         # 系统手册页主目录
/usr/local/share/man # 本地安装软件的手册页

维护whatis数据库

1
2
makewhatis            # 生成/更新whatis数据库(供-f/-k使用)
mandb # 现代系统中更新手册数据库(替代makewhatis)

使用示例

1
2
3
4
man -a printf        # 查看所有章节的printf文档
man -k "copy" # 查找所有包含"copy"关键词的命令
man -f ls # 精确查找ls命令的文档
man -w 5 passwd # 显示passwd配置文件的文档路径

6. 管道与重定向

6.1 标准文件描述符

文件描述符 名称 默认设备
0 标准输入(stdin) 键盘
1 标准输出(stdout) 屏幕
2 标准错误(stderr) 屏幕

6.2 管道(|)

1
命令1 | 命令2    # 将命令1的输出作为命令2的输入

6.3 tee命令

1
2
命令 | tee 文件    # 同时输出到屏幕和文件
命令 | tee -a 文件 # 追加模式(不覆盖原文件)

6.4 重定向操作

语法 功能描述
命令 > 文件 标准输出覆盖写入文件
命令 >> 文件 标准输出追加写入文件
命令 < 文件 从文件读取标准输入
命令 2> 文件 标准错误覆盖写入文件
命令 2>> 文件 标准错误追加写入文件
命令 > 文件 2>&1 标准输出和错误都覆盖写入同一文件
命令 >> 文件 2>&1 标准输出和错误都追加写入同一文件
命令 << 结束标记 从标准输入读取直到遇到"结束标记"(here文档)
命令 &> 文件 标准输出和错误都覆盖写入文件(bash简写)

7. 文件操作命令

7.1 ls命令

1
2
3
4
5
6
7
8
ls -a    # 显示所有文件(包括.开头的隐藏文件)
ls -A # 类似-a但不显示.和..
ls -d # 显示目录本身而非内容
ls -F # 显示文件类型标识(/:目录, *:可执行, @:链接)
ls -i # 显示inode编号
ls -l # 长格式显示详细信息
ls -t # 按修改时间排序
ls -h # 人类可读的文件大小(如1K, 2M)

7.2 cp命令

1
2
3
4
5
6
cp -f    # 强制覆盖不提示
cp -i # 覆盖前提示确认
cp -p # 保留原文件属性
cp -r/R # 递归复制目录
cp -d # 保留链接文件
cp -a # 归档模式(相当于-dpR)

7.3 mv命令

1
2
mv -f    # 强制覆盖不提示
mv -i # 覆盖前提示确认

7.4 mkdir命令

1
2
mkdir -m 755 dir   # 创建指定权限的目录
mkdir -p dir1/dir2 # 创建多级目录

7.5 rm命令

1
2
3
rm -f    # 强制删除不提示
rm -i # 删除前提示确认
rm -r/R # 递归删除目录

7.6 rmdir命令

1
rmdir -p dir1/dir2 # 删除多级空目录

7.7 touch命令

1
2
3
touch -t 202405071530.00 file  # 设置特定时间戳(YYMMDDhhmm.ss)
touch -a file # 仅更新访问时间
touch -m file # 仅更新修改时间

7.8 file命令

1
file document.txt   # 检测文件类型和编码

8. 元字符(通配符)

元字符 功能描述 示例
* 匹配任意长度字符(包括空字符) ls *.txt
? 匹配任意单个字符 ls file?.txt
[] 匹配括号内任意一个字符 ls file[123].txt
[!] 匹配不在括号内的任意一个字符 ls file[!a-z].txt
{} 展开括号内逗号分隔的多个模式 touch file{1,2,3}

示例扩展:

  • [a-z]: 任意小写字母
  • [0-9]: 任意数字
  • [a-zA-Z]: 任意字母
  • file{1..3}: 展开为file1, file2, file3

9. 文档处理命令

9.1 文件内容查看

cat 命令

1
cat -n file.txt  # 显示文件内容并添加行号

nl 命令(行号显示)

1
2
3
nl -b a file.txt    # 所有行添加行号
nl -b t file.txt # 非空行添加行号
nl -h a -f a file.txt # 为页眉和页脚也添加行号

od 命令(二进制查看)

1
2
3
od -t c file.bin    # 以ASCII字符显示
od -t o file.bin # 以八进制显示
od -t x file.bin # 以十六进制显示

9.2 文件头部/尾部查看

head 命令

1
2
3
head -n 10 file.txt    # 显示前10行
head -10 file.txt # 同上
head -c 100 file.txt # 显示前100字节

tail 命令

1
2
3
4
tail -n 10 file.txt    # 显示最后10行
tail -10 file.txt # 同上
tail -c 100 file.txt # 显示最后100字节
tail -f log.txt # 实时监控日志文件

9.3 文本提取与转换

cut 命令

1
2
cut -c 1-5 file.txt      # 提取每行第1-5个字符
cut -d: -f1 /etc/passwd # 以冒号分隔,提取第一个字段

join 命令(合并文件)

1
join -j 1 file1.txt file2.txt  # 按第一个字段合并两个文件

paste 命令

1
paste -d";" file1.txt file2.txt  # 用分号分隔合并文件

tr 命令(字符转换)

1
2
3
4
tr 'a-z' 'A-Z' < file.txt    # 小写转大写
tr -d '\r' < file.txt # 删除回车符
tr -s ' ' < file.txt # 压缩连续空格
tr -d '[:digit:]' < file.txt # 删除所有数字

9.4 文本排序与统计

sort 命令

1
2
3
4
sort file.txt          # 按字母顺序排序
sort -n file.txt # 按数值排序
sort -r file.txt # 反向排序
sort -t: -k3n /etc/passwd # 按冒号分隔的第3列数值排序

uniq 命令(去重)

1
2
3
sort file.txt | uniq    # 去重(需先排序)
uniq -d file.txt # 只显示重复行
uniq -u file.txt # 只显示唯一行

wc 命令(统计)

1
2
3
wc -l file.txt    # 统计行数
wc -w file.txt # 统计单词数
wc -c file.txt # 统计字节数

9.5 文本分割与格式化

split 命令

1
split -l 1000 bigfile.txt part_  # 每1000行分割文件

pr 命令(分页)

1
pr -l 40 file.txt    # 按每页40行分页显示

fmt 命令(格式化)

1
fmt -w 80 file.txt   # 设置每行80个字符

expand/unexpand 命令

1
2
expand -t 4 file.txt    # 将tab转为4个空格
unexpand -t 4 file.txt # 将4个空格转为tab

8.6 高级文本处理

xargs 命令

1
2
find . -name "*.log" | xargs rm    # 删除所有log文件
find . -type f | xargs grep "text" # 在所有文件中搜索文本

10. vi/vim 编辑器

10.1 基本操作

启动与退出

1
2
3
4
5
vi file.txt        # 编辑文件
vi -R file.txt # 只读模式
:q # 退出
:q! # 强制退出
:wq 或 ZZ # 保存退出

模式切换

命令 说明
i 在光标前插入
a 在光标后插入
I 在行首插入
A 在行尾插入
o 在下一行插入
O 在上一行插入
ESC 返回命令模式

10.2 光标移动

命令 说明
h/j/k/l 左/下/上/右
0 行首
$ 行尾
gg 文件开头
G 文件末尾
50G 跳转到第50行
Ctrl+b 上一页
Ctrl+f 下一页

10.3 编辑命令

命令 说明
x 删除当前字符
X 删除前一个字符
dd 删除当前行
dw 删除下一个单词
yy 复制当前行
p 粘贴到光标后
P 粘贴到光标前
u 撤销
Ctrl+r 重做

10.4 搜索与替换

命令 说明
/pattern 向前搜索
?pattern 向后搜索
n 下一个匹配项
N 上一个匹配项
:%s/old/new/g 全局替换
:1,10s/old/new/g 替换1-10行的内容

10.5 设置选项

1
2
3
4
:set nu        # 显示行号
:set nonu # 隐藏行号
:set ts=4 # 设置tab4个空格
:set list # 显示不可见字符

11. 正则表达式与文本搜索

11.1 基本元字符

元字符 说明
. 匹配任意单个字符
* 前一个字符0次或多次
[] 匹配括号内任意一个字符
[^] 不匹配括号内的字符
^ 行首
$ 行尾
\ 转义特殊字符

11.2 grep 命令

1
2
3
4
5
6
grep "pattern" file.txt      # 基本搜索
grep -i "pattern" file.txt # 忽略大小写
grep -v "pattern" file.txt # 反向匹配
grep -n "pattern" file.txt # 显示行号
grep -E "regex" file.txt # 使用扩展正则
grep -r "pattern" /dir # 递归搜索目录

特殊变体

1
2
3
egrep = grep -E       # 扩展正则表达式
fgrep = grep -F # 不解析正则,快速搜索
pgrep -u root # 搜索root用户的进程

11.3 sed 流编辑器

基本用法

1
2
3
4
sed 's/old/new/' file.txt       # 替换第一个匹配
sed 's/old/new/g' file.txt # 替换所有匹配
sed '1,5d' file.txt # 删除1-5行
sed '/pattern/d' file.txt # 删除匹配行

高级用法

1
2
3
4
sed -n '10,20p' file.txt       # 只打印10-20行
sed 'y/abc/ABC/' file.txt # 字符转换
sed -i.bak 's/old/new/' file # 直接修改文件并备份
sed -e 'cmd1' -e 'cmd2' file # 执行多个命令

脚本示例

1
2
3
4
5
# 将1-5行行首添加>字符
sed '1,5s/^/>/' file.txt

# 将每行的第一个数字替换为#
sed 's/[0-9]/#/' file.txt

11.4 正则表达式示例

  1. 匹配IP地址:
1
grep -E '([0-9]{1,3}\.){3}[0-9]{1,3}' file.txt
  1. 匹配邮箱地址:
1
grep -E '[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}' file.txt
  1. 提取HTML标签内容:
1
sed -n 's/<title>\(.*\)<\/title>/\1/p' file.html

留言與分享

2.linux安装与包管理

分類 后端, linux

Linux 安装与软件包管理

1. 硬盘分区布局

1.1 标准目录结构

1
2
3
4
5
/home     # 普通用户文件存储目录
/var # 存放日志文件、邮件队列等可变数据
/usr # 存放程序、库文件、文档等(通常占用空间最大)
/boot # 引导分区,通常100MB左右足够
/swap # 交换分区(建议大小为物理内存的1-2倍)

2. 引导加载程序(GRUB)

2.1 传统GRUB (GRUB Legacy)

1
2
grub-install /dev/sda   # 安装GRUB到指定设备
grub-install -v # 显示详细安装信息

配置文件关键参数(/boot/grub/menu.lst):

1
2
3
4
5
6
7
8
timeout      # 等待用户选择的时间(秒)
default # 默认启动项序号
title # 启动项标题
root # 指定根分区
kernel # 指定内核文件
makeactive # 激活分区
chainloader # 链式加载其他引导程序
hiddenmenu # 是否隐藏菜单

2.2 GRUB2 (现代Linux默认使用)

1
update-grub2   # 更新GRUB2配置

配置文件(/etc/default/grub):

1
2
3
4
5
6
GRUB_DEFAULT                  # 默认启动项
GRUB_HIDDEN_TIMEOUT # 隐藏菜单超时
GRUB_HIDDEN_TIMEOUT_QUIET # 是否静默隐藏
GRUB_TIMEOUT # 菜单显示时间
GRUB_CMDLINE_LINUX_DEFAULT # 默认内核参数
GRUB_CMDLINE_LINUX # 附加内核参数

3. 共享库管理

3.1 基本概念

  • 共享库(Shared Library): 通过动态链接方式被多个程序共同使用的库文件
  • 命名规则: lib*.so* (如 libc.so.6)

3.2 常用命令

1
2
3
ldd /bin/ls      # 查看二进制文件依赖的共享库
ldconfig # 重建共享库缓存
ldconfig -p # 打印当前缓存内容

3.3 共享库搜索顺序

  1. 可执行文件中的DT_RPATH或DT_RUNPATH段
  2. 环境变量LD_LIBRARY_PATH指定的路径
  3. /etc/ld.so.cache缓存中的路径(除非使用-z nodeflib选项)
  4. 默认路径/lib/usr/lib(除非使用-z nodeflib选项)

3.4 添加自定义库路径

1
2
3
4
5
6
# 临时添加(当前会话有效)
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/path/to/library

# 永久添加(需修改配置文件)
echo "/path/to/library" >> /etc/ld.so.conf
ldconfig

4. Debian系包管理(Debian/Ubuntu等)

4.1 包命名格式

1
2
3
4
5
6
tree_1.5.3-1_i386.deb
├── 包名(tree)
├── 版本号(1.5.3)
├── 发布号(1)
├── 架构(i386)
└── 扩展名(.deb)

4.2 dpkg命令(底层工具)

1
2
3
4
5
6
7
8
9
dpkg -i package.deb       # 安装包
dpkg -r package # 移除包(保留配置)
dpkg -P package # 完全清除包(包括配置)
dpkg -l # 列出已安装包
dpkg -L package # 列出包安装的文件
dpkg -s package # 显示包状态信息
dpkg -S /path/to/file # 查找文件属于哪个包
dpkg --configure package # 配置已解压的包
dpkg --unpack package.deb # 仅解压不配置

4.3 apt-get命令(高级工具)

1
2
3
4
5
6
7
8
apt-get update            # 更新包数据库
apt-get upgrade # 升级所有可升级包
apt-get dist-upgrade # 智能升级(处理依赖变化)
apt-get install package # 安装包
apt-get remove package # 移除包
apt-get clean # 清理下载的包文件
apt-get -d install package # 仅下载不安装
apt-get -s install package # 模拟安装(不实际执行)

4.4 软件源配置(/etc/apt/sources.list)

1
2
3
deb http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
↑ ↑ ↑ ↑
类型 镜像地址 发行版 组件
  • 类型: deb(二进制包)或deb-src(源代码包)
  • 组件:
    • main: 官方支持的免费软件
    • contrib: 非自由软件但有自由依赖
    • non-free: 有分发限制的软件

4.5 apt-cache命令(查询工具)

1
2
3
apt-cache search keyword    # 搜索包
apt-cache show package # 显示包详细信息
apt-cache depends package # 显示包依赖

4.6 aptitude命令(交互式工具)

1
2
3
4
5
6
aptitude update          # 更新包列表
aptitude install package # 安装包
aptitude remove package # 移除包
aptitude purge package # 完全清除包
aptitude upgrade # 升级包
aptitude dist-upgrade # 智能升级

5. RedHat系包管理(RHEL/CentOS/Fedora)

5.1 rpm命令(底层工具)

1
2
3
4
5
6
7
8
9
10
11
12
rpm -ivh package.rpm     # 安装包(-v:详细,-h:进度条)
rpm -Uvh package.rpm # 升级包
rpm -Fvh *.rpm # 仅升级已安装的包
rpm -e package # 卸载包
rpm -qa # 查询所有已安装包
rpm -qf /path/to/file # 查询文件属于哪个包
rpm -qi package # 查询包信息
rpm -ql package # 列出包安装的文件
rpm -qc package # 列出包配置文件
rpm -qd package # 列出包文档文件
rpm --nodeps # 忽略依赖关系(不推荐)
rpm --test # 测试模式(不实际执行)

5.2 rpm文件提取

1
2
rpm2cpio package.rpm | cpio -idv  # 提取rpm包内容
rpm2cpio package.rpm | cpio -t # 列出rpm包内容

5.3 yum命令(高级工具)

1
2
3
4
5
6
7
8
9
10
yum install package      # 安装包
yum remove package # 移除包
yum update # 更新所有包
yum update package # 更新指定包
yum check-update # 检查可用更新
yum info package # 显示包信息
yum list # 列出包
yum search keyword # 搜索包
yum groupinstall "Development Tools" # 安装软件组
yum repolist # 列出已配置的仓库

5.4 下载rpm包

1
yumdownloader package    # 下载rpm包不安装

5.5 zypper命令(SUSE系统)

1
2
3
zypper install package   # 安装包
zypper remove package # 移除包
zypper update # 更新系统

6. 软件包管理对比

功能 Debian系(apt) RedHat系(yum) SUSE系(zypper)
安装包 apt-get install yum install zypper install
移除包 apt-get remove yum remove zypper remove
更新系统 apt-get upgrade yum update zypper update
搜索包 apt-cache search yum search zypper search
显示包信息 apt-cache show yum info zypper info
清理缓存 apt-get clean yum clean zypper clean

留言與分享

1.系统架构

分類 后端, linux

1. 系统架构

1.1 PCI架构

  • PCI(外围组件互连): Intel Core系统的主要总线架构
  • 组件:
    • CPU:
      • 显示: eDP(支持i7 CPU和DDR4内存)
      • 显示: HDMI(支持i7 CPU和DDR4内存)
    • PCH(平台控制器中枢):
      • USB 3.0接口
      • PCI总线
      • 音频输出

1.2 lspci命令

  • 显示PCI总线和连接设备的信息
  • 可以查看:
    • 中断请求(IRQ)信息
    • 设备路径和速度
    • 制造商ID

1.3 ACPI(高级配置与电源接口)

  • 电源管理规范标准
  • 管理功能包括:
    • 电源按钮操作
    • 笔记本开合盖检测
    • 电池充电状态
    • CPU速度调节
  • 重要说明:
    • 不直接管理硬件,而是处理电源事件
    • 配置文件位置:
      • /etc/acpi/目录
      • /proc/acpi/目录
  • 守护进程:
    • acpid:
      • 配置目录: /etc/acpi/
      • 示例: 查看电源配置cat /etc/acpi/events/power.conf
    • systemd-logind:
      • 配置文件: /etc/systemd/logind.conf

2. 启动流程

2.1 传统SysV Init启动

  1. 电源启动
  2. BIOS初始化
  3. 引导加载程序(GRUB)
  4. 加载内核(vmlinuz, initramfs)
  5. 执行内核
  6. 执行initramfs
  7. init进程启动并挂载根文件系统
  8. init启动各种服务

2.2 现代systemd启动

  1. 电源启动
  2. UEFI初始化
  3. 引导加载程序(GRUB2)
  4. 加载内核(vmlinuz, initramfs)
  5. 执行内核
  6. 执行initramfs
  7. systemd启动并挂载根文件系统
  8. systemd启动各种服务

2.3 Init进程详情

  • 第一个用户空间进程路径: /sbin/init
  • 传统init流程:
    1. init读取/etc/inittab
    2. init执行/etc/rc.sysinit脚本
    3. init执行/etc/rc脚本
    4. /etc/rc执行/etc/rc<运行级别>.d/目录下的脚本

3. 分区表

3.1 GPT(GUID分区表)

  • EFI规范的一部分
  • 支持最大9.4TB分区
  • 使用GUID标识:
    • 设备标识
    • 分区标识

3.2 MBR(主引导记录)

  • 使用CHS(柱面/磁头/扇区)寻址
  • 最大只支持2TB分区

4. 系统信息命令

4.1 uname命令

显示系统信息:

1
2
3
4
5
6
uname -m  # 显示硬件架构类型
uname -n # 显示网络节点主机名
uname -r # 显示内核发行版本
uname -s # 显示操作系统名称
uname -v # 显示内核版本
uname -a # 显示所有信息

4.2 wall命令

向所有用户广播消息:

1
wall "消息内容"

4.3 dmesg命令

显示内核环形缓冲区消息(启动日志):

1
dmesg

4.4 lsmod命令

列出已加载的内核模块:

1
lsmod

4.5 modprobe命令

手动加载设备驱动:

1
modprobe <设备名称>

5. /proc文件系统

/proc目录下的重要文件:

  • /proc/bus/usb/* - USB设备信息
  • /proc/cpuinfo - CPU信息
  • /proc/interrupts - 中断请求信息
  • /proc/pci - PCI设备信息
  • /proc/scsi/scsi - SCSI设备信息
  • /proc/version - 内核版本信息
  • /proc/meminfo - 内存信息

6. 运行级别

运行级别配置文件:

1
/etc/inittab

7. 模拟器

通过软件模拟硬件环境来运行不同操作系统的工具

8. 启动顺序图示

1
2
3
4
5
graph TD
A[BIOS/UEFI固件] --> B[引导加载程序]
B --> C[Linux内核]
C --> D[Init/Systemd]
D --> E[系统服务]

留言與分享

作者的圖片

Kein Chan

這是獨立全棧工程師Kein Chan的技術博客
分享一些技術教程,命令備忘(cheat-sheet)等


全棧工程師
資深技術顧問
數據科學家
Hit廣島觀光大使


Tokyo/Macau