Linux
一、Linux 基础命令
1. Linux 基础命令概述
定义: Linux 基础命令是在 Linux 终端中执行的基本操作指令,用于文件系统管理、进程控制、网络配置等日常系统管理任务。
原理: Linux 命令本质上是可执行程序,通常位于 /bin、/usr/bin、/sbin 等目录中。当用户在终端输入命令时,Shell 会按照 $PATH 环境变量中定义的目录顺序查找对应的可执行文件并执行。
示例:
bash
# 查看当前路径
pwd
# 输出: /home/user
# 列出当前目录内容
ls -la
常见误区:
- 误以为命令是 Shell 内置的,实际上大多数命令是外部程序
- 混淆
man命令和help命令的使用场景 - 不熟悉命令的参数缩写规则(如
-l和--long)
2. ls - 列出目录内容
定义: ls (list) 命令用于列出目录中的文件和子目录信息。
常用参数:
bash
ls # 基本列表
ls -l # 详细信息(权限、所有者、大小、时间)
ls -a # 显示隐藏文件(以.开头的文件)
ls -h # 人类可读的文件大小
ls -t # 按修改时间排序
ls -R # 递归显示子目录
ls -la # 组合使用:详细显示所有文件
输出解析:
sql
drwxr-xr-x 2 user group 4096 Mar 15 10:30 Documents
-rw-r--r-- 1 user group 256 Mar 15 10:31 file.txt
- 第一列:文件类型和权限(
d表示目录,-表示普通文件) - 第二列:硬链接数
- 第三列:文件所有者
- 第四列:所属组
- 第五列:文件大小(字节)
- 第六至八列:最后修改时间
- 第九列:文件名
常见误区:
- 忘记
-a参数会遗漏隐藏文件(如.bashrc) - 误认为文件大小包含目录内容(目录显示的4096是目录本身大小)
3. cd - 切换目录
定义: cd (change directory) 命令用于切换当前工作目录。
使用方式:
bash
cd /home/user # 切换到绝对路径
cd ../parent # 切换到父目录
cd ~ # 切换到用户主目录
cd - # 切换到上一次所在目录
cd # 无参数时切换到主目录
原理: cd 是 Shell 内置命令,通过修改当前 Shell 进程的 $PWD 环境变量实现。
常见误区:
cd -会打印切换后的路径,方便确认- 使用相对路径时,基准目录是当前工作目录而非主目录
4. pwd - 显示当前目录
定义: pwd (print working directory) 命令用于显示当前工作目录的完整路径。
bash
pwd # /home/user/projects
pwd -P # 显示物理路径(解析符号链接)
pwd -L # 显示逻辑路径(包含符号链接)
5. mkdir - 创建目录
定义: mkdir (make directory) 命令用于创建新目录。
bash
mkdir newdir # 创建单个目录
mkdir -p a/b/c # 递归创建多级目录
mkdir -m 755 newdir # 指定权限创建
mkdir dir1 dir2 dir3 # 同时创建多个目录
常见误区:
- 不使用
-p参数时,父目录不存在会报错 -m参数使用八进制数字指定权限
6. rmdir - 删除空目录
定义: rmdir (remove directory) 命令用于删除空目录。
bash
rmdir emptydir # 删除空目录
rmdir -p a/b/c # 递归删除空目录(连同父目录)
注意: 如果目录非空,会报错。删除非空目录使用 rm -r。
7. rm - 删除文件或目录
定义: rm (remove) 命令用于删除文件或目录。
bash
rm file.txt # 删除文件
rm -r directory # 递归删除目录
rm -f file.txt # 强制删除(不提示)
rm -rf directory # 强制递归删除
rm -i file.txt # 删除前逐个确认
常见误区:
rm -rf /*是极其危险的命令,会删除系统所有文件- 使用
-i参数可以防止误删重要文件 - 删除的文件无法直接恢复(需要通过专业工具或备份)
8. cp - 复制文件或目录
定义: cp (copy) 命令用于复制文件或目录。
bash
cp source.txt dest.txt # 复制文件
cp -r sourcedir destdir # 递归复制目录
cp -i source.txt dest.txt # 覆盖前提示确认
cp -a source dest # 保留所有属性(归档模式)
cp -v source dest # 显示复制过程
常见误区:
- 复制目录必须使用
-r或-R参数 - 目标位置存在同名文件会被覆盖(除非使用
-i)
9. mv - 移动或重命名
定义: mv (move) 命令用于移动文件或重命名文件。
bash
mv old.txt new.txt # 重命名
mv file.txt /path/to/dir/ # 移动到目录
mv -i source dest # 覆盖前提示
mv -n source dest # 不覆盖已存在的文件
原理: 在同一文件系统内移动文件实际只修改目录项(速度快),跨文件系统移动等同于复制+删除。
10. touch - 创建或更新文件时间戳
定义: touch 命令用于创建空文件或更新文件的时间戳。
bash
touch newfile.txt # 创建空文件
touch -t 202403011200 file.txt # 修改时间为指定值
touch -a file.txt # 只更新访问时间
touch -m file.txt # 只修改修改时间
常见误区:
touch不会覆盖已存在的文件内容- 文件已存在时只更新时间戳
11. cat - 查看文件内容
定义: cat (concatenate) 命令用于查看、合并文件内容。
bash
cat file.txt # 查看文件
cat -n file.txt # 显示行号
cat -b file.txt # 非空行显示行号
cat file1.txt file2.txt # 合并多个文件
cat file1.txt file2.txt > combined.txt # 合并输出到新文件
cat > newfile.txt << EOF # 创建文件(多行输入)
EOF
常见误区:
- 不适合查看大文件(会一次性加载到终端)
- 查看大文件应使用
less或more
12. more - 分页查看文件
定义: more 命令用于分页查看文件内容。
bash
more file.txt # 分页查看
more -10 file.txt # 每页显示10行
操作按键:
- 空格键:向下翻页
- Enter:向下滚动一行
- q:退出
常见误区:
more只能向下翻页,不能回退(less可以双向翻页)
13. less - 分页查看文件(增强版)
定义: less 是 more 的增强版,支持双向翻页和搜索。
bash
less file.txt # 分页查看
less -N file.txt # 显示行号
less +/pattern file.txt # 打开时搜索模式
操作按键:
- 空格键:向下翻页
- b:向上翻页
- /pattern:向下搜索
- ?pattern:向上搜索
- n:下一个匹配
- N:上一个匹配
- q:退出
- G:跳转到末尾
- g:跳转到开头
最佳实践: 查看日志文件优先使用 less
14. head - 查看文件开头
定义: head 命令用于查看文件开头部分内容。
bash
head file.txt # 默认显示前10行
head -n 20 file.txt # 显示前20行
head -c 100 file.txt # 显示前100个字节
15. tail - 查看文件末尾
定义: tail 命令用于查看文件末尾部分内容。
bash
tail file.txt # 默认显示最后10行
tail -n 20 file.txt # 显示最后20行
tail -f logfile.log # 实时跟踪文件变化
tail -F logfile.log # 实时跟踪(支持日志轮转)
tail -n +100 file.txt # 从第100行开始显示
最佳实践: 查看日志使用 tail -f 实时监控
16. find - 搜索文件
定义: find 命令用于在目录树中搜索文件。
bash
find /path -name "file.txt" # 按名称搜索
find /path -type f -name "*.log" # 搜索所有.log文件
find /path -size +100M # 搜索大于100MB的文件
find /path -mtime -7 # 搜索7天内修改的文件
find /path -perm 644 # 搜索权限为644的文件
find /path -user username # 搜索特定用户的文件
find /path -exec rm {} \; # 对搜索结果执行命令
find /path -name "*.tmp" -delete # 搜索并删除
find /path -type f -empty # 查找空文件
常用选项:
-name:按文件名搜索(区分大小写)-iname:按文件名搜索(不区分大小写)-type:按类型搜索(f:文件, d:目录, l:链接)-size:按大小搜索(+大于, -小于)-mtime:按修改时间搜索(天数)-atime:按访问时间搜索-ctime:按状态改变时间搜索-exec:对每个搜索结果执行命令
常见误区:
-exec命令末尾必须有\;或+-mtime +7表示7天前,-mtime -7表示7天内
17. locate - 快速查找文件
定义: locate 命令通过数据库快速查找文件路径。
bash
locate file.txt # 查找包含file.txt的路径
locate -i FILE.TXT # 不区分大小写
sudo updatedb # 更新数据库
原理: locate 使用 updatedb 创建的数据库进行搜索,速度极快但结果可能不是最新的。
对比 find:
locate:速度快,但依赖数据库,结果可能不是最新的find:实时搜索,速度慢但结果准确
18. whereis - 查找命令位置
定义: whereis 命令用于查找命令的二进制文件、源代码和手册页位置。
bash
whereis ls # ls: /bin/ls /usr/share/man/man1/ls.1.gz
whereis -b ls # 只显示二进制文件
whereis -m ls # 只显示手册页
19. which - 查找命令路径
定义: which 命令用于查找命令的完整路径(按 $PATH 顺序)。
bash
which ls # /bin/ls
which python # /usr/bin/python
对比 whereis:
which:只查找可执行文件,按$PATH顺序whereis:查找二进制、源码和手册页
20. echo - 输出文本
定义: echo 命令用于输出文本到终端或文件。
bash
echo "Hello World" # 输出文本
echo $PATH # 输出变量值
echo -e "Hello\nWorld" # 启用转义字符
echo "text" > file.txt # 输出到文件(覆盖)
echo "text" >> file.txt # 追加到文件
常见误区:
- 双引号内变量会被展开,单引号内变量不会被展开
>覆盖文件,>>追加文件
21. printf - 格式化输出
定义: printf 命令用于格式化输出文本(类似 C 语言的 printf)。
bash
printf "Name: %s, Age: %d\n" "John" 25
printf "%-10s %5d\n" "John" 25 # 左对齐
printf "0x%04x\n" 255 # 十六进制输出
22. clear - 清屏
定义: clear 命令用于清空终端屏幕。
bash
clear # 清屏
Ctrl + L # 快捷键(部分终端)
23. history - 查看命令历史
定义: history 命令用于查看之前执行过的命令历史。
bash
history # 显示所有历史命令
history 10 # 显示最近10条命令
!n # 执行第n条历史命令
!! # 执行上一条命令
!ls # 执行最近一次ls命令
Ctrl + R # 搜索历史命令
history -c # 清除历史记录
24. man - 查看手册页
定义: man (manual) 命令用于查看命令的手册页。
bash
man ls # 查看ls的手册
man -k keyword # 搜索手册(同apropos)
man 2 open # 查看系统调用open的手册
手册章节:
- 用户命令
- 系统调用
- 库函数
- 特殊文件
- 文件格式
- 游戏
- 杂项
- 系统管理命令
25. help - 查看内置命令帮助
定义: help 命令用于查看 Shell 内置命令的帮助信息。
bash
help cd # 查看cd命令帮助
help echo # 查看echo命令帮助
对比 man:
help:查看 Shell 内置命令的帮助man:查看外部命令的手册页
二、文件系统与权限
26. Linux 文件系统
定义: Linux 文件系统是用于组织和管理磁盘上数据的结构和规则。
常见文件系统类型:
- ext4:第四代扩展文件系统,Linux 默认文件系统
- XFS:高性能日志文件系统,适合大文件
- Btrfs:支持快照、压缩的现代文件系统
- NTFS:Windows 文件系统(Linux 可读写)
- FAT32:通用文件系统,兼容性最好
原理: 文件系统通过 inode 存储文件元数据(权限、大小、时间等),通过数据块存储实际内容。
查看文件系统:
bash
df -T # 查看文件系统类型
lsblk -f # 查看块设备文件系统
blkid # 查看块设备属性
27. 文件权限
定义: Linux 文件权限控制着不同用户对文件的访问能力。
权限类型:
r(read):读权限(文件:可查看内容;目录:可列出内容)w(write):写权限(文件:可修改内容;目录:可创建/删除文件)x(execute):执行权限(文件:可作为程序执行;目录:可进入目录)
权限分组:
csharp
-rwxr-xr-- 1 user group 4096 Mar 15 10:30 file.txt
- 所有者(user/owner):前3位
rwx - 所属组(group):中3位
r-x - 其他用户(others):后3位
r--
权限数字表示:
r= 4w= 2x= 1755=rwxr-xr-x(所有者全权限,组和其他用户读执行)644=rw-r--r--(所有者读写,组和其他只读)
特殊权限:
- SUID (4):执行时以文件所有者身份运行
- SGID (2):执行时以文件所属组身份运行;目录中新文件继承目录组
- Sticky Bit (1):目录中只有文件所有者能删除文件(如
/tmp)
bash
chmod 4755 file # 设置SUID
chmod 2755 dir # 设置SGID
chmod 1777 /tmp # 设置Sticky Bit
28. chmod - 修改权限
定义: chmod (change mode) 命令用于修改文件或目录的权限。
bash
chmod 755 file.txt # 数字方式设置权限
chmod u+x file.txt # 给所有者添加执行权限
chmod go-w file.txt # 移除组和其他用户的写权限
chmod a+r file.txt # 给所有用户添加读权限
chmod -R 755 directory # 递归修改目录权限
符号模式:
u:所有者(user)g:所属组(group)o:其他用户(others)a:所有用户(all)+:添加权限-:移除权限=:设置权限
29. chown - 修改所有者
定义: chown (change owner) 命令用于修改文件或目录的所有者。
bash
chown user file.txt # 修改所有者
chown user:group file.txt # 同时修改所有者和组
chown :group file.txt # 只修改组
chown -R user directory # 递归修改目录所有者
30. chgrp - 修改所属组
定义: chgrp (change group) 命令用于修改文件或目录的所属组。
bash
chgrp group file.txt # 修改所属组
chgrp -R group directory # 递归修改目录所属组
31. 文件类型
定义: Linux 中文件类型用于区分不同性质的文件。
常见类型:
-:普通文件(文本、二进制、压缩包等)d:目录(文件夹)l:符号链接(软链接)c:字符设备文件(如/dev/null)b:块设备文件(如/dev/sda)p:命名管道(FIFO)s:套接字文件
查看文件类型:
bash
ls -l # 通过第一列第一个字符识别
file filename # 详细显示文件类型
32. 目录结构
定义: Linux 采用树状目录结构组织文件系统,根目录为 /。
重要目录:
bash
/ # 根目录
/bin # 基本用户命令(二进制)
/sbin # 系统管理员命令
/etc # 系统配置文件
/home # 用户主目录
/root # root用户主目录
/var # 可变数据(日志、缓存等)
/tmp # 临时文件
/usr # 用户程序和数据
/opt # 可选软件包
/dev # 设备文件
/proc # 进程信息(虚拟文件系统)
/sys # 系统信息(虚拟文件系统)
/boot # 启动文件
/lib # 系统库文件
/media # 可移动媒体挂载点
/mnt # 临时挂载点
FHS(文件系统层次结构标准): 规范了 Linux 目录的用途和内容。
33-34. 文件路径与绝对路径
定义: 路径是文件或目录在文件系统中的位置标识。
绝对路径: 从根目录 / 开始的完整路径。
bash
/home/user/documents/file.txt # 绝对路径(始终以/开头)
特点:
- 始终以
/开头 - 在任何位置都有效
- 完整描述文件位置
35. 相对路径
定义: 相对于当前工作目录的路径。
bash
./file.txt # 当前目录下的文件
../parent/file.txt # 父目录下的文件
../../grandparent/file.txt # 祖父目录下的文件
特殊符号:
.:当前目录..:父目录~:用户主目录-:上一次所在目录
36-38. 软链接、硬链接与 ln 命令
定义: 链接是指向另一个文件的引用。
软链接(符号链接):
bash
ln -s /path/to/original /path/to/link # 创建软链接
- 类似 Windows 的快捷方式
- 有自己的 inode
- 指向另一个文件路径
- 可以跨越文件系统
- 源文件删除后链接失效
硬链接:
bash
ln /path/to/original /path/to/link # 创建硬链接
- 与原文件共享同一个 inode
- 不能跨文件系统
- 不能链接目录
- 源文件删除后仍可访问(通过硬链接)
- 删除最后一个链接才会真正删除文件
对比:
| 特性 | 软链接 | 硬链接 |
|---|---|---|
| inode | 不同 | 相同 |
| 跨文件系统 | 支持 | 不支持 |
| 链接目录 | 支持 | 不支持 |
| 源文件删除 | 失效 | 仍可访问 |
| 文件大小 | 路径长度 | 与原文件相同 |
| 命令 | ln -s |
ln |
查看链接:
bash
ls -l # 软链接显示 -> 指向
stat file # 查看inode信息
39. 文件属性
定义: 文件属性包括权限、所有者、时间戳、大小等元数据。
查看属性:
bash
ls -l file # 基本属性
stat file # 详细属性
属性信息:
- 文件名
- 文件大小
- 文件类型
- 权限模式
- 所有者和组
- 硬链接数
- inode 号
- 访问时间(atime)
- 修改时间(mtime)
- 状态改变时间(ctime)
40. inode
定义: inode(索引节点)是 Linux 文件系统中存储文件元数据的数据结构。
存储内容:
- 文件大小
- 文件权限
- 所有者和组
- 时间戳(atime, mtime, ctime)
- 文件类型
- 指向数据块的指针
不包含: 文件名(文件名存储在目录项中)
查看 inode:
bash
ls -i file # 显示inode号
df -i # 查看inode使用情况
stat file # 详细inode信息
常见误区:
- 删除文件实际是删除目录项,减少inode引用计数
- inode 耗尽即使磁盘有空间也无法创建新文件
- 硬链接共享同一个 inode
三、进程管理
41. 进程
定义: 进程是正在执行的程序实例,是操作系统资源分配的基本单位。
进程状态:
- 运行态(Running):正在执行或准备执行
- 睡眠态(Sleeping) :等待某个事件或资源
S:可中断睡眠D:不可中断睡眠(通常等待I/O)
- 停止态(Stopped):被信号暂停
- 僵尸态(Zombie):已终止但父进程尚未回收
- 死亡态(Dead):即将被销毁
进程属性:
- PID(进程ID)
- PPID(父进程ID)
- 状态
- 优先级
- 内存占用
- CPU 占用
- 运行时间
42. 进程管理
定义: 进程管理包括查看、控制、终止进程等操作。
管理方式:
- 查看进程:
ps、top、htop - 发送信号:
kill、killall、pkill - 调整优先级:
nice、renice - 前后台切换:
jobs、fg、bg - 守护进程:
systemd、service
43. ps - 查看进程
定义: ps (process status) 命令用于查看当前进程的快照。
bash
ps # 查看当前终端进程
ps aux # 查看所有进程(BSD格式)
ps -ef # 查看所有进程(标准格式)
ps -ef | grep nginx # 查找特定进程
ps -p 1234 # 查看指定PID
ps -u username # 查看特定用户的进程
ps --sort=-%mem # 按内存使用排序
输出字段(ps aux):
USER:所有者PID:进程ID%CPU:CPU使用率%MEM:内存使用率VSZ:虚拟内存大小RSS:物理内存大小TTY:关联终端STAT:进程状态START:启动时间TIME:CPU时间COMMAND:命令
44. top - 实时进程监控
定义: top 命令用于实时显示系统进程状态和资源使用情况。
bash
top # 启动top
top -u username # 查看特定用户进程
top -p 1234 # 监控指定PID
top -d 2 # 每2秒刷新
交互按键:
P:按CPU使用率排序M:按内存使用率排序q:退出k:终止进程c:显示完整命令路径h:帮助
输出信息:
- 系统运行时间、负载
- 进程总数
- CPU使用率
- 内存使用情况
- 进程列表
45. htop - 增强版进程监控
定义: htop 是 top 的增强版,提供更友好的交互界面。
bash
htop # 启动htop
htop -u username # 查看特定用户进程
优势:
- 彩色显示
- 支持鼠标操作
- 树状视图(F5)
- 更直观的资源使用条
- 支持搜索(F3)
46. kill - 发送信号
定义: kill 命令用于向进程发送信号(常用于终止进程)。
bash
kill PID # 默认发送SIGTERM(15)
kill -9 PID # 发送SIGKILL(强制终止)
kill -15 PID # 发送SIGTERM(优雅终止)
kill -1 PID # 发送SIGHUP(重新加载配置)
kill -l # 列出所有信号
常用信号:
| 信号 | 编号 | 说明 |
|---|---|---|
| SIGHUP | 1 | 挂起信号,常用于重新加载配置 |
| SIGINT | 2 | 中断信号(Ctrl+C) |
| SIGKILL | 9 | 强制终止(不可捕获) |
| SIGTERM | 15 | 优雅终止(默认) |
| SIGSTOP | 19 | 停止进程 |
| SIGCONT | 18 | 继续进程 |
47. killall - 按名称终止进程
定义: killall 命令用于通过进程名终止所有匹配的进程。
bash
killall nginx # 终止所有nginx进程
killall -9 nginx # 强制终止
killall -u username # 终止特定用户的所有进程
48. pkill - 按模式终止进程
定义: pkill 命令用于通过进程名模式匹配终止进程。
bash
pkill nginx # 终止名称包含nginx的进程
pkill -f "python app.py" # 按完整命令行匹配
pkill -u username # 按用户匹配
对比:
kill:需要 PIDkillall:精确匹配进程名pkill:模式匹配进程名
49. nice - 以指定优先级启动进程
定义: nice 命令用于以指定的优先级启动进程。
bash
nice -n 10 command # 以优先级10启动
nice -n -5 command # 以高优先级启动(需要root)
优先级范围: -20(最高)到 19(最低),默认值为 0。
50. renice - 修改运行中进程的优先级
定义: renice 命令用于修改正在运行的进程的优先级。
bash
renice -n 10 -p PID # 修改进程优先级
renice -n 5 -u username # 修改特定用户所有进程
51. nohup - 忽略挂起信号
定义: nohup (no hang up) 命令使命令在终端关闭后继续运行。
bash
nohup command & # 后台运行,忽略挂起信号
nohup command > output.log 2>&1 & # 重定向输出
原理: 忽略 SIGHUP 信号,输出默认重定向到 nohup.out。
52. & - 后台运行
定义: 在命令末尾添加 & 使进程在后台运行。
bash
command & # 后台运行
nohup command & # 后台运行且忽略挂起信号
53. jobs - 查看后台任务
定义: jobs 命令用于查看当前终端的后台任务列表。
bash
jobs # 列出后台任务
jobs -l # 显示详细信息(含PID)
54. fg - 切换到前台
定义: fg (foreground) 命令将后台任务切换到前台运行。
bash
fg # 恢复最近一个后台任务到前台
fg %1 # 恢复任务1到前台
55. bg - 后台运行
定义: bg (background) 命令使停止的任务在后台继续运行。
bash
bg # 继续最近一个停止的任务在后台
bg %1 # 继续任务1在后台
56. 守护进程
定义: 守护进程(Daemon)是在后台运行、不与终端关联的长期运行的进程。
特点:
- 在后台运行
- 不与终端关联
- 通常以
d结尾命名(如sshd、nginx) - 系统启动时自动启动
常见守护进程:
sshd:SSH 服务crond:定时任务systemd:系统初始化httpd/nginx:Web 服务
57. systemd - 系统和服务管理器
定义: systemd 是现代 Linux 发行版的系统和服务管理器。
常用命令:
bash
systemctl status service # 查看服务状态
systemctl start service # 启动服务
systemctl stop service # 停止服务
systemctl restart service # 重启服务
systemctl reload service # 重载配置
systemctl enable service # 开机自启
systemctl disable service # 取消开机自启
systemctl is-enabled service # 检查是否开机自启
systemctl list-units # 列出所有单元
systemctl list-unit-files # 列出所有单元文件
journalctl -u service # 查看服务日志
58. service - 管理系统服务
定义: service 命令用于管理系统服务(旧式 SysV init)。
bash
service nginx start # 启动服务
service nginx stop # 停止服务
service nginx restart # 重启服务
service nginx status # 查看状态
注意: 现代系统推荐使用 systemctl 替代 service。
四、网络配置
59. 网络配置
定义: Linux 网络配置涉及网络接口的设置、IP 地址分配、路由配置等。
配置文件:
/etc/network/interfaces(Debian/Ubuntu)/etc/sysconfig/network-scripts/(CentOS/RHEL)/etc/resolv.conf(DNS 配置)/etc/hosts(主机名映射)
现代工具:
ip命令替代ifconfigss命令替代netstat
60. ifconfig - 网络接口配置
定义: ifconfig (interface configuration) 命令用于配置和查看网络接口。
bash
ifconfig # 显示所有活动接口
ifconfig eth0 # 显示eth0接口
ifconfig eth0 up # 启用接口
ifconfig eth0 down # 禁用接口
ifconfig eth0 192.168.1.100 # 设置IP地址
注意: ifconfig 已废弃,推荐使用 ip 命令。
61. ip - 网络管理命令
定义: ip 是 ifconfig 的现代替代工具,功能更强大。
bash
ip addr # 显示IP地址
ip link # 显示网络接口
ip route # 显示路由表
ip addr add 192.168.1.100/24 dev eth0 # 添加IP地址
ip link set eth0 up # 启用接口
ip route add default via 192.168.1.1 # 添加默认路由
常用子命令:
ip addr:管理 IP 地址ip link:管理网络接口ip route:管理路由表
62. ping - 测试网络连通性
定义: ping 命令用于测试与目标主机的网络连通性。
bash
ping google.com # 持续ping
ping -c 5 google.com # ping 5次后停止
ping -i 2 google.com # 每2秒ping一次
ping -s 64 google.com # 指定数据包大小
原理: 使用 ICMP Echo Request/Echo Reply 报文。
63. netstat - 网络统计
定义: netstat (network statistics) 命令用于显示网络连接、路由表、接口统计等。
bash
netstat -tlnp # 查看监听的TCP端口
netstat -ulnp # 查看监听的UDP端口
netstat -anp # 查看所有连接
netstat -s # 查看统计信息
netstat -rn # 查看路由表
常用参数:
-t:TCP 连接-u:UDP 连接-l:仅监听-n:数字显示(不解析主机名)-p:显示进程-a:所有连接-r:路由表
64. ss - 查看套接字统计
定义: ss (socket statistics) 是 netstat 的现代替代工具。
bash
ss -tlnp # 查看监听的TCP端口
ss -ulnp # 查看监听的UDP端口
ss -anp # 查看所有连接
ss -s # 查看统计信息
优势: 比 netstat 更快,支持更多功能。
65. telnet - 远程登录
定义: telnet 命令用于远程登录和测试端口连通性。
bash
telnet host port # 连接远程主机
telnet localhost 80 # 测试80端口
注意: telnet 传输不加密,推荐使用 ssh 替代。常用于测试端口连通性。
66. curl - 命令行 HTTP 客户端
定义: curl 命令用于通过 URL 语法传输数据。
bash
curl https://example.com # 获取网页
curl -O https://example.com/file # 下载文件(保持原名)
curl -o file https://example.com # 下载文件(指定文件名)
curl -I https://example.com # 只获取响应头
curl -X POST https://example.com # POST请求
curl -d "data=value" https://example.com # POST数据
curl -H "Authorization: Bearer token" https://example.com # 添加请求头
67. wget - 命令行下载工具
定义: wget 命令用于从网络下载文件。
bash
wget https://example.com/file # 下载文件
wget -O output https://example.com # 指定输出文件名
wget -c https://example.com/file # 断点续传
wget -r https://example.com # 递归下载
wget -i urls.txt # 从文件读取URL下载
对比 curl:
curl:支持更多协议,默认输出到 stdoutwget:支持递归下载,默认保存到文件
68. ssh - 安全远程登录
定义: ssh (Secure Shell) 命令用于安全地远程登录到服务器。
bash
ssh user@host # 登录远程主机
ssh -p 2222 user@host # 指定端口
ssh -i key.pem user@host # 使用密钥登录
ssh user@host "command" # 执行远程命令
ssh -L 8080:localhost:80 user@host # 本地端口转发
ssh -R 8080:localhost:80 user@host # 远程端口转发
配置免密登录:
bash
ssh-keygen # 生成密钥对
ssh-copy-id user@host # 复制公钥到远程主机
69. scp - 安全复制
定义: scp (secure copy) 命令用于通过 SSH 安全地复制文件。
bash
scp file.txt user@host:/path/ # 上传文件
scp user@host:/path/file.txt ./ # 下载文件
scp -r dir user@host:/path/ # 递归复制目录
scp -P 2222 file.txt user@host:/path/ # 指定端口
70. rsync - 远程同步
定义: rsync 命令用于高效地同步文件和目录。
bash
rsync -av source/ dest/ # 本地同步
rsync -av source/ user@host:/dest/ # 同步到远程
rsync -avz user@host:/src/ dest/ # 压缩传输
rsync -av --delete source/ dest/ # 删除目标多余文件
rsync -av --exclude "*.log" source/ dest/ # 排除文件
常用参数:
-a:归档模式(保留权限、时间等)-v:详细输出-z:压缩传输-P:显示进度并支持断点续传
优势: 只传输变化的部分,效率高。
71-74. 防火墙管理
定义: Linux 防火墙用于控制网络流量进出系统。
iptables:
bash
iptables -L # 查看规则
iptables -A INPUT -p tcp --dport 80 -j ACCEPT # 允许80端口
iptables -A INPUT -p tcp --dport 443 -j ACCEPT # 允许443端口
iptables -A INPUT -j DROP # 拒绝所有入站
firewalld(CentOS/RHEL):
bash
firewall-cmd --list-all # 查看配置
firewall-cmd --add-port=80/tcp # 添加端口
firewall-cmd --reload # 重载配置
firewall-cmd --permanent --add-port=80/tcp # 永久添加
ufw(Ubuntu):
bash
ufw status # 查看状态
ufw enable # 启用防火墙
ufw allow 80/tcp # 允许80端口
ufw deny 22/tcp # 拒绝22端口
ufw delete allow 80/tcp # 删除规则
对比:
| 工具 | 发行版 | 特点 |
|---|---|---|
| iptables | 通用 | 底层、功能强大、配置复杂 |
| firewalld | CentOS/RHEL | 动态管理、支持区域 |
| ufw | Ubuntu/Debian | 简单易用、基于iptables |
75. 端口管理
定义: 端口是网络通信的端点,用于区分不同服务。
常用端口:
- 22:SSH
- 80:HTTP
- 443:HTTPS
- 3306:MySQL
- 5432:PostgreSQL
- 6379:Redis
- 8080:HTTP 代理
查看端口:
bash
ss -tlnp # 查看监听端口
netstat -tlnp # 查看监听端口
lsof -i :80 # 查看80端口占用
五、Shell 脚本
76. Shell
定义: Shell 是 Linux 的命令行解释器,用于接收用户输入的命令并执行。
常见 Shell:
- Bash(Bourne Again Shell):最常用,大多数发行版默认 Shell
- Zsh(Z Shell):功能强大,支持插件
- sh(Bourne Shell):早期标准 Shell
- Fish:友好交互的 Shell
查看当前 Shell:
bash
echo $SHELL # 查看当前Shell
cat /etc/shells # 查看系统可用的Shell
77. Shell 脚本
定义: Shell 脚本是将一系列命令保存到文件中,按顺序执行的程序。
基本结构:
bash
#!/bin/bash # Shebang(指定解释器)
# 注释
echo "Hello World" # 输出
# 变量
NAME="John"
echo "Hello $NAME"
# 条件判断
if [ -f "file.txt" ]; then
echo "File exists"
elif [ -d "file.txt" ]; then
echo "Is directory"
else
echo "Not found"
fi
# 循环
for i in 1 2 3; do
echo $i
done
# 函数
my_function() {
echo "Function called"
}
my_function
执行方式:
bash
./script.sh # 需要执行权限
bash script.sh # 不需要执行权限
source script.sh # 在当前Shell执行
. script.sh # 同source
78. Bash
定义: Bash 是 GNU 项目的 Shell,是 sh 的增强版。
特性:
- 命令补全(Tab)
- 命令历史
- 别名
- 变量
- 条件判断
- 循环
- 函数
- 管道
- 重定向
79. Shell 变量
定义: Shell 变量是存储数据的容器。
变量类型:
- 环境变量:全局变量,对所有进程可见
- 局部变量:仅在当前 Shell 可见
bash
# 定义变量
NAME="John"
AGE=25
# 使用变量
echo $NAME
echo ${NAME}
# 环境变量
export PATH="/usr/local/bin:$PATH"
# 特殊变量
$0 # 脚本名
$1, $2... # 参数
$# # 参数个数
$@ # 所有参数
$? # 上一个命令的退出状态
$$ # 当前进程PID
$! # 最后一个后台进程PID
80. Shell 条件判断
定义: 条件判断用于根据条件执行不同的代码块。
文件测试:
bash
[ -f file ] # 文件存在
[ -d dir ] # 目录存在
[ -e path ] # 路径存在
[ -r file ] # 可读
[ -w file ] # 可写
[ -x file ] # 可执行
[ -s file ] # 非空文件
字符串比较:
bash
[ "$a" = "$b" ] # 相等
[ "$a" != "$b" ] # 不等
[ -z "$a" ] # 空字符串
[ -n "$a" ] # 非空字符串
数值比较:
bash
[ $a -eq $b ] # 等于
[ $a -ne $b ] # 不等于
[ $a -gt $b ] # 大于
[ $a -lt $b ] # 小于
[ $a -ge $b ] # 大于等于
[ $a -le $b ] # 小于等于
逻辑运算:
bash
[ $a -gt 0 ] && [ $a -lt 10 ] # 与
[ $a -eq 0 ] || [ $a -eq 1 ] # 或
[ ! $a -eq 0 ] # 非
81. Shell 循环
定义: 循环用于重复执行代码块。
for 循环:
bash
# 基本for
for i in 1 2 3; do
echo $i
done
# 范围
for i in {1..10}; do
echo $i
done
# C风格
for ((i=0; i<10; i++)); do
echo $i
done
# 遍历文件
for file in *.txt; do
echo $file
done
while 循环:
bash
count=0
while [ $count -lt 10 ]; do
echo $count
((count++))
done
# 读取文件
while read line; do
echo $line
done < file.txt
until 循环:
bash
count=0
until [ $count -ge 10 ]; do
echo $count
((count++))
done
82. Shell 函数
定义: 函数是可重复使用的代码块。
bash
# 定义函数
function_name() {
echo "Hello $1"
return 0
}
# 调用函数
function_name "World"
# 带返回值
add() {
echo $(($1 + $2))
}
result=$(add 3 5)
echo $result
83. Shell 参数
定义: Shell 参数是传递给脚本或函数的值。
bash
#!/bin/bash
echo "脚本名: $0"
echo "第一个参数: $1"
echo "第二个参数: $2"
echo "所有参数: $@"
echo "参数个数: $#"
shift 命令: 将参数向左移动
bash
while [ $# -gt 0 ]; do
echo $1
shift
done
84. Shell 运算符
定义: Shell 支持多种运算符用于数值计算。
算术运算:
bash
expr 5 + 3 # 使用expr
echo $((5 + 3)) # 使用$(( ))
echo $[5 + 3] # 使用$[ ]
let "a=5+3" # 使用let
常用运算符:
+加法-减法*乘法/除法%取模**幂运算
85. Shell 字符串处理
定义: Shell 提供多种方式处理字符串。
bash
str="Hello World"
# 长度
echo ${#str}
# 截取
echo ${str:0:5} # Hello
echo ${str:6} # World
# 替换
echo ${str/World/Bash} # Hello Bash
echo ${str//l/L} # HeLLo Bash(全部替换)
# 删除
echo ${str#Hello} # World(删除前缀)
echo ${str%World} # Hello (删除后缀)
# 大小写转换
echo ${str^^} # HELLO WORLD(大写)
echo ${str,,} # hello world(小写)
86. Shell 数组
定义: Shell 数组是存储多个值的变量。
bash
# 定义数组
arr=(apple banana cherry)
# 访问元素
echo ${arr[0]} # apple
echo ${arr[@]} # 所有元素
echo ${#arr[@]} # 数组长度
# 添加元素
arr+=(date)
# 删除元素
unset arr[1]
# 遍历
for item in ${arr[@]}; do
echo $item
done
87. Shell 重定向
定义: 重定向用于改变命令的输入输出流向。
bash
# 标准输出重定向
command > file.txt # 覆盖输出
command >> file.txt # 追加输出
# 标准错误重定向
command 2> error.txt # 错误输出到文件
# 重定向标准输出和错误
command > file.txt 2>&1 # 全部输出到文件
command &> file.txt # 简写(Bash)
# 标准输入重定向
command < file.txt # 从文件读取输入
command << EOF # here document
line 1
line 2
EOF
# /dev/null(黑洞)
command > /dev/null 2>&1 # 丢弃所有输出
文件描述符:
- 0:标准输入(stdin)
- 1:标准输出(stdout)
- 2:标准错误(stderr)
88. Shell 管道
定义: 管道 | 将前一个命令的输出作为后一个命令的输入。
bash
ls -l | grep ".txt" # 查找txt文件
cat file.txt | wc -l # 统计行数
ps aux | grep nginx | wc -l # 统计nginx进程数
cat file.txt | sort | uniq # 排序并去重
最佳实践: 管道可以连接多个命令,形成数据处理流水线。
89. Shell 通配符
定义: 通配符用于模式匹配文件名。
bash
* # 匹配任意字符(0或多个)
? # 匹配单个字符
[abc] # 匹配a、b或c
[a-z] # 匹配a到z
[0-9] # 匹配0到9
!pattern # 不匹配
示例:
bash
ls *.txt # 所有txt文件
ls file?.txt # file1.txt, file2.txt等
ls [abc]*.txt # 以a、b或c开头的txt文件
90. Shell 正则表达式
定义: 正则表达式是用于模式匹配的字符串模式。
基本正则:
ini
. # 任意字符
* # 前一个字符0次或多次
^ # 行首
$ # 行尾
[] # 字符集
[^] # 否定字符集
\ # 转义
扩展正则(需使用 -E 或 \):
bash
+ # 前一个字符1次或多次
? # 前一个字符0次或1次
| # 或
() # 分组
{} # 重复次数
91-92. crontab 与定时任务
定义: crontab 用于设置周期性执行的任务。
使用:
bash
crontab -l # 查看定时任务
crontab -e # 编辑定时任务
crontab -r # 删除所有定时任务
格式:
分 时 日 月 周 命令
示例:
bash
# 每天凌晨2点执行
0 2 * * * /path/to/script.sh
# 每5分钟执行
*/5 * * * * /path/to/script.sh
# 每周一9点执行
0 9 * * 1 /path/to/script.sh
# 每月1号执行
0 0 1 * * /path/to/script.sh
特殊字符串:
bash
@reboot # 启动时
@yearly # 每年
@monthly # 每月
@weekly # 每周
@daily # 每天
@hourly # 每小时
六、常用工具(grep、awk、sed)
93. grep - 文本搜索
定义: grep (Global Regular Expression Print) 用于在文件中搜索匹配的行。
bash
grep "pattern" file.txt # 搜索
grep -i "pattern" file.txt # 不区分大小写
grep -n "pattern" file.txt # 显示行号
grep -v "pattern" file.txt # 反向匹配(不包含)
grep -r "pattern" /path/ # 递归搜索
grep -c "pattern" file.txt # 统计匹配行数
grep -l "pattern" *.txt # 显示匹配的文件名
grep -E "pattern" file.txt # 使用扩展正则
94. grep 正则表达式
定义: grep 支持基本正则和扩展正则表达式。
基本正则:
bash
grep "^start" file.txt # 以start开头
grep "end$" file.txt # 以end结尾
grep "[0-9]" file.txt # 匹配数字
grep "[A-Z]" file.txt # 匹配大写字母
扩展正则(-E 或 egrep):
bash
grep -E "pattern1|pattern2" file.txt # 或
grep -E "colou?r" file.txt # 0次或1次
grep -E "ab+c" file.txt # 1次或多次
grep -E "(ab)+" file.txt # 分组
95. awk - 文本处理工具
定义: awk 是强大的文本处理工具,按行处理结构化数据。
基本用法:
bash
awk '{print $1}' file.txt # 打印第一列
awk '{print $1, $3}' file.txt # 打印第1、3列
awk -F: '{print $1}' /etc/passwd # 指定分隔符
awk '/pattern/ {print $0}' file.txt # 匹配模式
awk 'NR==1 {print}' file.txt # 打印第一行
awk 'END {print NR}' file.txt # 打印总行数
awk '{sum+=$1} END {print sum}' file.txt # 求和
内置变量:
$0:整行$1, $2...:各列NR:行号NF:列数FS:输入分隔符OFS:输出分隔符
96. awk 文本处理
定义: awk 支持复杂的文本处理逻辑。
bash
# 条件处理
awk '$3 > 100 {print $1, $3}' file.txt
# 格式化输出
awk '{printf "%-10s %5d\n", $1, $2}' file.txt
# 数组统计
awk '{count[$1]++} END {for (k in count) print k, count[k]}' file.txt
# 多文件处理
awk '{print FILENAME, $0}' file1.txt file2.txt
97. sed - 流编辑器
定义: sed (Stream EDitor) 用于对文本进行流式编辑。
基本用法:
bash
sed 's/old/new/g' file.txt # 替换所有
sed 's/old/new/' file.txt # 只替换每行第一个
sed '2s/old/new/' file.txt # 只替换第2行
sed '/pattern/s/old/new/' file.txt # 匹配模式的行替换
sed -i 's/old/new/g' file.txt # 直接修改文件
98. sed 文本替换
定义: sed 最常用于文本替换。
bash
# 删除行
sed '3d' file.txt # 删除第3行
sed '/pattern/d' file.txt # 删除匹配的行
sed '1,5d' file.txt # 删除1-5行
# 插入行
sed '3i\new line' file.txt # 在第3行前插入
sed '3a\new line' file.txt # 在第3行后追加
# 多行操作
sed -n '2,5p' file.txt # 打印2-5行
99. cut - 提取列
定义: cut 命令用于提取文本的指定列。
bash
cut -d: -f1 /etc/passwd # 以:分隔,取第1列
cut -d: -f1,3 /etc/passwd # 取第1、3列
cut -c1-5 file.txt # 取第1-5个字符
cut -f2-4 file.txt # 取第2-4列(默认Tab分隔)
100. sort - 排序
定义: sort 命令用于对文本行排序。
bash
sort file.txt # 默认按字母排序
sort -n file.txt # 按数值排序
sort -r file.txt # 逆序
sort -u file.txt # 去重
sort -k2 file.txt # 按第2列排序
sort -t: -k3 -n /etc/passwd # 以:分隔,按第3列数值排序
101. uniq - 去重
定义: uniq 命令用于去除相邻的重复行。
bash
uniq file.txt # 去重(需先排序)
sort file.txt | uniq # 排序后去重
sort file.txt | uniq -c # 统计重复次数
sort file.txt | uniq -d # 只显示重复行
sort file.txt | uniq -u # 只显示不重复的行
102. wc - 统计
定义: wc (word count) 命令用于统计行数、词数、字节数。
bash
wc file.txt # 行数、词数、字节数
wc -l file.txt # 只统计行数
wc -w file.txt # 只统计词数
wc -c file.txt # 只统计字节数
wc -m file.txt # 只统计字符数
103. diff - 比较文件
定义: diff 命令用于比较两个文件的差异。
bash
diff file1.txt file2.txt # 比较文件
diff -u file1.txt file2.txt # 统一格式输出
diff -r dir1/ dir2/ # 递归比较目录
diff -y file1.txt file2.txt # 并排显示差异
104. patch - 应用补丁
定义: patch 命令用于将 diff 生成的补丁应用到文件。
bash
diff -u file1.txt file2.txt > patch.diff # 生成补丁
patch file1.txt < patch.diff # 应用补丁
patch -p1 < patch.diff # 应用补丁(去除路径前缀)
105. tr - 转换字符
定义: tr (translate) 命令用于转换或删除字符。
bash
echo "hello" | tr 'a-z' 'A-Z' # 转大写
echo "HELLO" | tr 'A-Z' 'a-z' # 转小写
echo "hello" | tr -d 'l' # 删除字符l
echo "hello" | tr -s 'l' # 压缩重复字符
tr '\n' ',' < file.txt # 换行符替换为逗号
106. xargs - 构建命令行
定义: xargs 命令从标准输入构建并执行命令行。
bash
find . -name "*.txt" | xargs rm # 查找并删除
find . -name "*.txt" | xargs -I {} mv {} /dest/ # 逐个处理
cat files.txt | xargs -n 2 # 每行2个参数
cat files.txt | xargs -I {} echo "File: {}" # 替换参数
常用参数:
-n:每行参数个数-I:替换字符串-d:分隔符-p:执行前提示
七、日志查看与分析
107. 日志
定义: Linux 日志是系统和服务运行过程中记录的事件信息。
日志级别:
DEBUG:调试信息INFO:一般信息WARNING:警告ERROR:错误CRITICAL:严重错误
108. 日志查看
定义: 日志查看是使用工具查看和分析日志文件。
bash
tail -f /var/log/syslog # 实时查看
less /var/log/syslog # 分页查看
grep "error" /var/log/syslog # 搜索错误
journalctl -f # 实时查看系统日志
109. /var/log
定义: /var/log 是 Linux 系统日志的标准存储目录。
常见日志文件:
bash
/var/log/syslog # 系统日志(Debian/Ubuntu)
/var/log/messages # 系统日志(CentOS/RHEL)
/var/log/auth.log # 认证日志
/var/log/kern.log # 内核日志
/var/log/dpkg.log # 包管理日志
/var/log/nginx/ # Nginx日志
/var/log/mysql/ # MySQL日志
/var/log/boot.log # 启动日志
/var/log/cron # 定时任务日志
110. journalctl - 系统日志管理
定义: journalctl 是 systemd 系统的日志查看工具。
bash
journalctl # 查看所有日志
journalctl -u nginx # 查看特定服务日志
journalctl -f # 实时查看
journalctl --since "2024-03-01" # 查看指定时间后
journalctl --until "2024-03-15" # 查看指定时间前
journalctl -p err # 查看错误级别
journalctl -xe # 详细输出
journalctl --disk-usage # 查看日志占用
journalctl --vacuum-time=2d # 清理2天前的日志
111. syslog - 系统日志服务
定义: syslog 是 Linux 的系统日志服务。
配置文件: /etc/syslog.conf 或 /etc/rsyslog.conf
日志设施:
auth:认证相关authpriv:特权认证cron:定时任务daemon:守护进程kern:内核mail:邮件user:用户程序
112. dmesg - 内核日志
定义: dmesg 命令用于查看内核环形缓冲区消息。
bash
dmesg # 查看所有内核日志
dmesg | tail # 查看最新内核日志
dmesg -T # 显示人类可读时间
dmesg | grep -i error # 搜索错误
dmesg | grep -i usb # 查看USB设备信息
113. last - 登录历史
定义: last 命令用于查看用户登录历史记录。
bash
last # 查看所有登录记录
last username # 查看特定用户
last -10 # 查看最近10条
last reboot # 查看重启记录
114. lastb - 失败登录记录
定义: lastb 命令用于查看登录失败的记录。
bash
lastb # 查看所有失败登录
lastb username # 查看特定用户失败记录
注意: 需要 root 权限才能查看。
115. who - 查看当前登录用户
定义: who 命令用于查看当前登录的用户信息。
bash
who # 查看当前登录用户
who -u # 显示详细信息
who am i # 查看当前终端用户
116. w - 用户活动信息
定义: w 命令用于查看当前登录用户及其活动。
bash
w # 查看用户活动
w username # 查看特定用户
输出: 显示用户名、终端、登录时间、空闲时间、当前命令。
117. 日志分析
定义: 日志分析是从日志中提取有用信息的过程。
常用工具:
bash
# 统计访问量
awk '{print $1}' access.log | sort | uniq -c | sort -rn
# 查看错误
grep "ERROR" app.log | tail -20
# 查看特定时间段
sed -n '/2024-03-01 10:00/,/2024-03-01 11:00/p' app.log
# 统计状态码
awk '{print $9}' access.log | sort | uniq -c | sort -rn
# 查找慢请求
awk '$NF > 1 {print}' access.log
118-119. 日志轮转与 logrotate
定义: 日志轮转是定期归档、压缩和删除旧日志的机制。
logrotate 配置:
bash
# 配置文件
/etc/logrotate.conf # 主配置
/etc/logrotate.d/ # 服务配置目录
示例配置:
bash
/var/log/nginx/*.log {
daily # 每天轮转
missingok # 日志不存在不报错
rotate 7 # 保留7个备份
compress # 压缩旧日志
delaycompress # 延迟压缩(上一次不压缩)
notifempty # 空文件不轮转
create 0644 www-data www-data # 创建新文件的权限
sharedscripts # 只执行一次postrotate
postrotate
systemctl reload nginx
endscript
}
手动执行:
bash
logrotate /etc/logrotate.conf # 执行轮转
logrotate -d /etc/logrotate.conf # 调试模式
logrotate -f /etc/logrotate.conf # 强制执行
八、服务器部署
120. 服务器部署
定义: 服务器部署是将应用程序安装、配置到服务器上并使其可访问的过程。
部署流程:
- 安装运行环境(Node.js、Python、Java 等)
- 安装 Web 服务器(Nginx、Apache)
- 安装数据库(MySQL、PostgreSQL)
- 配置反向代理
- 配置 SSL 证书
- 配置防火墙
- 启动服务
- 监控和维护
121. Nginx 安装
Ubuntu/Debian:
bash
sudo apt update
sudo apt install nginx
sudo systemctl start nginx
sudo systemctl enable nginx
CentOS/RHEL:
bash
sudo yum install epel-release
sudo yum install nginx
sudo systemctl start nginx
sudo systemctl enable nginx
122. Nginx 配置
配置文件:
bash
/etc/nginx/nginx.conf # 主配置
/etc/nginx/sites-available/ # 站点配置
/etc/nginx/sites-enabled/ # 启用的站点
基本配置:
nginx
server {
listen 80;
server_name example.com;
root /var/www/html;
index index.html;
location / {
try_files $uri $uri/ =404;
}
location /api {
proxy_pass http://localhost:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
常用命令:
bash
nginx -t # 测试配置
systemctl reload nginx # 重载配置
systemctl restart nginx # 重启服务
123. Apache 安装
Ubuntu/Debian:
bash
sudo apt update
sudo apt install apache2
sudo systemctl start apache2
sudo systemctl enable apache2
CentOS/RHEL:
bash
sudo yum install httpd
sudo systemctl start httpd
sudo systemctl enable httpd
124. Apache 配置
配置文件:
bash
/etc/apache2/apache2.conf # 主配置(Ubuntu)
/etc/httpd/conf/httpd.conf # 主配置(CentOS)
/etc/apache2/sites-available/ # 站点配置(Ubuntu)
基本配置:
apache
<VirtualHost *:80>
ServerName example.com
DocumentRoot /var/www/html
<Directory /var/www/html>
AllowOverride All
Require all granted
</Directory>
ProxyPass /api http://localhost:3000
ProxyPassReverse /api http://localhost:3000
</VirtualHost>
常用命令:
bash
apachectl configtest # 测试配置
systemctl reload apache2 # 重载配置
a2ensite site.conf # 启用站点(Ubuntu)
a2dissite site.conf # 禁用站点(Ubuntu)
a2enmod proxy # 启用模块(Ubuntu)
125. MySQL 安装
Ubuntu/Debian:
bash
sudo apt update
sudo apt install mysql-server
sudo systemctl start mysql
sudo systemctl enable mysql
sudo mysql_secure_installation # 安全配置
CentOS/RHEL:
bash
sudo yum install mysql-server
sudo systemctl start mysqld
sudo systemctl enable mysqld
126. MySQL 配置
配置文件:
bash
/etc/mysql/mysql.conf.d/mysqld.cnf # Ubuntu
/etc/my.cnf # CentOS
常用命令:
bash
mysql -u root -p # 登录MySQL
SHOW DATABASES; # 显示数据库
CREATE DATABASE mydb; # 创建数据库
CREATE USER 'user'@'localhost' IDENTIFIED BY 'password'; # 创建用户
GRANT ALL PRIVILEGES ON mydb.* TO 'user'@'localhost'; # 授权
FLUSH PRIVILEGES; # 刷新权限
127. Node.js 安装
使用 NVM(推荐):
bash
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
nvm install --lts
nvm use --lts
使用包管理器:
bash
# Ubuntu
curl -fsSL https://deb.nodesource.com/setup_lts.x | sudo -E bash -
sudo apt install nodejs
# CentOS
curl -fsSL https://rpm.nodesource.com/setup_lts.x | sudo bash -
sudo yum install nodejs
验证安装:
bash
node -v # 查看版本
npm -v # 查看npm版本
128. PM2 部署
定义: PM2 是 Node.js 进程管理器。
bash
npm install -g pm2 # 安装
pm2 start app.js # 启动应用
pm2 start app.js -i max # 集群模式(最大进程数)
pm2 list # 列出进程
pm2 stop app # 停止
pm2 restart app # 重启
pm2 delete app # 删除
pm2 logs # 查看日志
pm2 monit # 监控
pm2 startup # 设置开机自启
pm2 save # 保存当前进程列表
** ecosystem 配置:**
javascript
module.exports = {
apps: [{
name: 'myapp',
script: 'app.js',
instances: 'max',
exec_mode: 'cluster',
env: {
NODE_ENV: 'production',
PORT: 3000
}
}]
};
bash
pm2 start ecosystem.config.js # 使用配置启动
129. 反向代理
定义: 反向代理是位于客户端和服务器之间的代理服务器,转发客户端请求到后端服务器。
Nginx 配置:
nginx
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://localhost:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
优势:
- 负载均衡
- SSL 终止
- 缓存
- 安全防护
- 隐藏后端服务器
130. 负载均衡
定义: 负载均衡是将流量分配到多个后端服务器。
Nginx 配置:
nginx
upstream backend {
server 192.168.1.10:3000;
server 192.168.1.11:3000;
server 192.168.1.12:3000;
}
server {
listen 80;
location / {
proxy_pass http://backend;
}
}
负载均衡策略:
round-robin:轮询(默认)least_conn:最少连接ip_hash:按 IP 哈希weight:权重
nginx
upstream backend {
server 192.168.1.10:3000 weight=3;
server 192.168.1.11:3000 weight=1;
least_conn;
}
131. SSL 证书
定义: SSL 证书用于加密网络通信。
获取证书(Let's Encrypt):
bash
sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d example.com -d www.example.com
证书文件:
.crt或.pem:证书文件.key:私钥文件
132. HTTPS 配置
Nginx HTTPS 配置:
nginx
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/key.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
location / {
proxy_pass http://localhost:3000;
}
}
# HTTP重定向到HTTPS
server {
listen 80;
server_name example.com;
return 301 https://$server_name$request_uri;
}
九、Docker 基础
133-134. Docker 是什么?
定义: Docker 是一个开源的容器化平台,用于开发、交付和运行应用程序。
原理: Docker 使用 Linux 内核特性(cgroups、namespaces)实现资源隔离和限制,使应用及其依赖打包成独立的容器。
核心概念:
- 镜像(Image):只读模板,包含应用和依赖
- 容器(Container):镜像的运行实例
- Dockerfile:构建镜像的脚本
- 仓库(Registry):存储和分发镜像
- 数据卷(Volume):持久化数据
优势:
- 环境一致性
- 快速部署
- 资源隔离
- 轻量级(共享主机内核)
- 易于扩展
135. Docker 安装
Ubuntu/Debian:
bash
sudo apt update
sudo apt install docker.io
sudo systemctl start docker
sudo systemctl enable docker
sudo usermod -aG docker $USER # 添加用户到docker组
CentOS/RHEL:
bash
sudo yum install docker
sudo systemctl start docker
sudo systemctl enable docker
验证安装:
bash
docker --version
docker run hello-world
136. Docker 镜像
定义: Docker 镜像是只读模板,包含运行应用所需的所有内容。
bash
docker images # 列出镜像
docker pull nginx # 下载镜像
docker pull nginx:latest # 指定标签
docker rmi nginx # 删除镜像
docker rmi -f nginx # 强制删除
docker tag nginx mynginx:1.0 # 标记镜像
docker save nginx -o nginx.tar # 导出镜像
docker load -i nginx.tar # 导入镜像
docker history nginx # 查看镜像历史
137. Docker 容器
定义: 容器是镜像的运行实例,包含运行中的应用。
bash
docker ps # 查看运行中的容器
docker ps -a # 查看所有容器
docker run -d --name mynginx nginx # 启动容器
docker stop mynginx # 停止容器
docker start mynginx # 启动已停止的容器
docker restart mynginx # 重启容器
docker rm mynginx # 删除容器
docker rm -f mynginx # 强制删除运行中的容器
docker logs mynginx # 查看日志
docker logs -f mynginx # 实时查看日志
docker exec -it mynginx bash # 进入容器
docker inspect mynginx # 查看容器详情
docker top mynginx # 查看容器进程
docker stats # 查看资源使用
138. docker pull
定义: docker pull 用于从仓库下载镜像。
bash
docker pull nginx # 下载latest标签
docker pull nginx:1.21 # 下载指定标签
docker pull ubuntu:20.04 # 下载Ubuntu 20.04
139. docker run
定义: docker run 用于从镜像启动容器。
bash
docker run nginx # 基本运行
docker run -d nginx # 后台运行
docker run -d --name web nginx # 指定名称
docker run -d -p 8080:80 nginx # 端口映射
docker run -d -v /data:/var/www nginx # 挂载数据卷
docker run -d -e MYSQL_ROOT_PASSWORD=123 mysql # 设置环境变量
docker run -it ubuntu bash # 交互式运行
docker run --restart=always nginx # 自动重启
常用参数:
-d:后台运行-p:端口映射(主机:容器)-v:挂载卷-e:环境变量--name:容器名称-it:交互式终端--restart:重启策略
140. docker ps
定义: docker ps 用于列出容器。
bash
docker ps # 运行中的容器
docker ps -a # 所有容器
docker ps -l # 最近一个容器
docker ps -q # 只显示ID
docker ps --filter "status=exited" # 过滤已退出容器
141. docker stop
定义: docker stop 用于优雅停止容器。
bash
docker stop container_id # 停止容器(默认10秒超时)
docker stop -t 30 container_id # 30秒后停止
docker stop $(docker ps -q) # 停止所有容器
142. docker rm
定义: docker rm 用于删除容器。
bash
docker rm container_id # 删除已停止的容器
docker rm -f container_id # 强制删除运行中的容器
docker rm $(docker ps -aq) # 删除所有容器
docker rm $(docker ps -f "status=exited" -q) # 删除已退出容器
143. docker rmi
定义: docker rmi 用于删除镜像。
bash
docker rmi image_id # 删除镜像
docker rmi -f image_id # 强制删除
docker rmi $(docker images -q) # 删除所有镜像
docker image prune # 清理无用镜像
docker image prune -a # 清理所有未使用镜像
144. docker build
定义: docker build 用于从 Dockerfile 构建镜像。
bash
docker build -t myapp:1.0 . # 构建镜像
docker build -t myapp:1.0 -f Dockerfile.prod . # 指定Dockerfile
docker build --no-cache -t myapp:1.0 . # 不使用缓存
145. Dockerfile
定义: Dockerfile 是构建 Docker 镜像的脚本文件。
示例:
dockerfile
FROM node:18-alpine # 基础镜像
WORKDIR /app # 工作目录
COPY package*.json ./ # 复制依赖文件
RUN npm install # 安装依赖
COPY . . # 复制应用代码
EXPOSE 3000 # 暴露端口
CMD ["node", "app.js"] # 启动命令
常用指令:
FROM:基础镜像WORKDIR:工作目录COPY:复制文件ADD:复制文件(支持URL和自动解压)RUN:执行命令EXPOSE:暴露端口ENV:环境变量CMD:默认命令ENTRYPOINT:入口点VOLUME:数据卷USER:用户
146. docker-compose
定义: docker-compose 用于定义和运行多容器 Docker 应用。
docker-compose.yml:
yaml
version: '3.8'
services:
web:
build: .
ports:
- "3000:3000"
environment:
- NODE_ENV=production
depends_on:
- db
db:
image: mysql:8
environment:
- MYSQL_ROOT_PASSWORD=123456
volumes:
- db_data:/var/lib/mysql
volumes:
db_data:
常用命令:
bash
docker-compose up # 启动服务
docker-compose up -d # 后台启动
docker-compose down # 停止并删除
docker-compose logs # 查看日志
docker-compose ps # 查看状态
docker-compose build # 构建服务
docker-compose restart # 重启服务
147. Docker 网络
定义: Docker 网络用于容器之间的通信。
网络模式:
bridge:默认网络,容器通过虚拟网桥通信host:使用主机网络none:无网络overlay:跨主机网络
bash
docker network ls # 列出网络
docker network create mynet # 创建网络
docker run -d --network mynet nginx # 使用自定义网络
docker network inspect mynet # 查看网络详情
容器通信:
bash
docker run -d --name web --network mynet nginx
docker run -d --name api --network mynet myapi
# 容器可以通过名称互相访问
148. Docker 数据卷
定义: Docker 数据卷用于持久化容器数据。
bash
docker volume ls # 列出卷
docker volume create mydata # 创建卷
docker run -d -v mydata:/data nginx # 挂载卷
docker run -d -v /host/path:/container/path nginx # 绑定挂载
docker volume inspect mydata # 查看卷详情
docker volume rm mydata # 删除卷
数据持久化方式:
- 数据卷(Volume) :Docker 管理,存储在
/var/lib/docker/volumes/ - 绑定挂载(Bind Mount):指定主机路径
- tmpfs 挂载:存储在内存中
149. Docker 常用命令
bash
# 镜像
docker images # 列出镜像
docker pull nginx # 下载镜像
docker push myimage # 推送镜像
docker rmi myimage # 删除镜像
docker build -t myimage . # 构建镜像
# 容器
docker ps # 列出容器
docker run -d nginx # 运行容器
docker stop/start/restart container # 停止/启动/重启
docker rm container # 删除容器
docker logs container # 查看日志
docker exec -it container bash # 进入容器
# 清理
docker system df # 查看磁盘使用
docker system prune # 清理无用资源
docker image prune # 清理无用镜像
docker container prune # 清理已停止容器
十、CI/CD 流程
150. CI/CD
定义: CI/CD 是持续集成(Continuous Integration)和持续交付/部署(Continuous Delivery/Deployment)的缩写。
核心概念:
- 持续集成(CI):频繁地将代码集成到主干,每次集成都通过自动化构建和测试验证
- 持续交付(CD):确保代码可以随时安全地发布到生产环境
- 持续部署(CD):自动化将通过测试的代码部署到生产环境
优势:
- 快速发现和修复问题
- 减少集成问题
- 提高交付速度
- 降低发布风险
- 自动化重复任务
151. 持续集成
定义: 持续集成是开发人员频繁地将代码合并到共享仓库,并通过自动化构建和测试验证。
流程:
- 开发人员提交代码到版本控制
- CI 系统检测到代码变更
- 自动拉取最新代码
- 自动构建项目
- 运行自动化测试
- 生成测试报告
- 通知构建结果
工具: Jenkins、GitLab CI、GitHub Actions、Travis CI、CircleCI
152. 持续部署
定义: 持续部署是通过自动化流程将通过测试的代码部署到生产环境。
流程:
- 代码通过 CI 测试
- 自动部署到测试环境
- 运行集成测试
- 自动部署到生产环境
- 监控和回滚机制
最佳实践:
- 自动化所有测试
- 使用基础设施即代码
- 蓝绿部署或金丝雀发布
- 监控和告警
- 快速回滚机制
153. Jenkins
定义: Jenkins 是开源的自动化服务器,支持 CI/CD。
特点:
- 开源免费
- 丰富的插件生态
- 支持多种语言
- 分布式构建
- Pipeline as Code
Pipeline 示例:
groovy
pipeline {
agent any
stages {
stage('Build') {
steps {
sh 'npm install'
sh 'npm run build'
}
}
stage('Test') {
steps {
sh 'npm test'
}
}
stage('Deploy') {
steps {
sh 'scp -r dist/ user@server:/var/www/'
}
}
}
}
154. GitLab CI
定义: GitLab CI 是 GitLab 内置的 CI/CD 工具。
配置文件:.gitlab-ci.yml
yaml
stages:
- build
- test
- deploy
build:
stage: build
script:
- npm install
- npm run build
test:
stage: test
script:
- npm test
deploy:
stage: deploy
script:
- scp -r dist/ user@server:/var/www/
only:
- main
155. GitHub Actions
定义: GitHub Actions 是 GitHub 提供的 CI/CD 服务。
配置文件:.github/workflows/ci.yml
yaml
name: CI
on: [push, pull_request]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: '18'
- run: npm install
- run: npm run build
- run: npm test
156. Travis CI
定义: Travis CI 是基于云的 CI 服务。
配置文件:.travis.yml
yaml
language: node_js
node_js:
- "18"
install:
- npm install
script:
- npm run build
- npm test
157. CircleCI
定义: CircleCI 是基于云的 CI/CD 平台。
配置文件:.circleci/config.yml
yaml
version: 2.1
jobs:
build:
docker:
- image: node:18
steps:
- checkout
- run: npm install
- run: npm run build
- run: npm test
158. 自动化部署
定义: 自动化部署是通过脚本和工具自动将应用部署到服务器。
部署策略:
- 蓝绿部署:同时运行两个环境,切换流量
- 金丝雀发布:逐步将流量引导到新版本
- 滚动更新:逐台服务器更新
- 原地更新:直接在现有环境更新
Shell 脚本示例:
bash
#!/bin/bash
APP_DIR="/var/www/myapp"
BACKUP_DIR="/var/www/backup"
# 备份当前版本
cp -r $APP_DIR $BACKUP_DIR/backup-$(date +%Y%m%d)
# 拉取最新代码
cd $APP_DIR
git pull origin main
# 安装依赖
npm install --production
# 构建
npm run build
# 重启服务
pm2 restart myapp
# 验证
curl -s http://localhost:3000/health | grep "ok"
if [ $? -ne 0 ]; then
echo "Deployment failed, rolling back..."
rm -rf $APP_DIR
cp -r $BACKUP_DIR/backup-* $APP_DIR
pm2 restart myapp
fi
159. 自动化测试
定义: 自动化测试是通过脚本自动运行测试用例。
测试类型:
- 单元测试:测试单个函数/模块
- 集成测试:测试模块间的交互
- 端到端测试:测试完整用户流程
- 性能测试:测试系统性能
CI/CD 中的测试:
yaml
# GitHub Actions 示例
- name: Run tests
run: |
npm run test:unit
npm run test:integration
npm run test:e2e
160. 构建流水线
定义: 构建流水线是 CI/CD 中的一系列自动化步骤。
典型流水线:
rust
代码提交 -> 代码检查 -> 单元测试 -> 构建 -> 集成测试 -> 部署到测试环境 -> 验收测试 -> 部署到生产环境
最佳实践:
- 快速反馈(失败快速)
- 可重复的构建
- 版本化构建产物
- 自动化所有步骤
- 监控和告警
十一、用户管理
161. Linux 用户管理
定义: Linux 是多用户系统,用户管理涉及创建、删除、修改用户和组。
用户类型:
- root 用户:超级管理员(UID 0)
- 系统用户:系统服务使用(UID 1-999)
- 普通用户:日常使用(UID 1000+)
用户相关文件:
/etc/passwd:用户信息/etc/shadow:密码信息(加密)/etc/group:组信息/etc/gshadow:组密码信息
162. useradd - 创建用户
定义: useradd 命令用于创建新用户。
bash
useradd username # 创建用户
useradd -m username # 创建用户并创建主目录
useradd -s /bin/bash username # 指定Shell
useradd -g group username # 指定主组
useradd -G group1,group2 username # 指定附加组
useradd -d /home/custom username # 指定主目录
163. usermod - 修改用户
定义: usermod 命令用于修改用户属性。
bash
usermod -l newname oldname # 修改用户名
usermod -d /new/home -m username # 修改主目录
usermod -s /bin/zsh username # 修改Shell
usermod -aG sudo username # 添加到组
usermod -L username # 锁定用户
usermod -U username # 解锁用户
164. userdel - 删除用户
定义: userdel 命令用于删除用户。
bash
userdel username # 删除用户(保留主目录)
userdel -r username # 删除用户及其主目录
165. passwd - 修改密码
定义: passwd 命令用于修改用户密码。
bash
passwd # 修改当前用户密码
passwd username # 修改指定用户密码(需要root)
passwd -d username # 删除密码
passwd -l username # 锁定用户
passwd -u username # 解锁用户
166. groupadd - 创建组
定义: groupadd 命令用于创建新组。
bash
groupadd groupname # 创建组
groupadd -g 1001 groupname # 指定GID
167. groupmod - 修改组
定义: groupmod 命令用于修改组属性。
bash
groupmod -n newname oldname # 修改组名
groupmod -g 1002 groupname # 修改GID
168. groupdel - 删除组
定义: groupdel 命令用于删除组。
bash
groupdel groupname # 删除组
169. su - 切换用户
定义: su (switch user) 命令用于切换用户。
bash
su # 切换到root
su username # 切换到指定用户
su - username # 切换并加载用户环境
su -c "command" username # 以指定用户执行命令
170. sudo - 以管理员权限执行
定义: sudo (superuser do) 命令用于以 root 或其他用户权限执行命令。
bash
sudo command # 以root执行命令
sudo -u username command # 以指定用户执行
sudo -l # 查看权限
sudo -i # 切换到root Shell
sudo visudo # 编辑sudoers文件
配置: /etc/sudoers
ini
username ALL=(ALL) ALL # 允许用户执行所有命令
username ALL=(ALL) NOPASSWD: ALL # 无需密码
%groupname ALL=(ALL) ALL # 允许组内用户
十二、文本编辑命令
171. vim - 文本编辑器
定义: vim 是 Linux 下强大的文本编辑器。
三种模式:
- 普通模式:默认模式,用于导航
- 插入模式:编辑文本
- 命令模式:执行命令
常用命令:
ruby
i # 进入插入模式
ESC # 返回普通模式
:w # 保存
:q # 退出
:q! # 强制退出
:wq # 保存并退出
导航:
ruby
h/j/k/l # 左/下/上/右
0/$ # 行首/行尾
gg/G # 文件开头/末尾
:n # 跳转到第n行
编辑:
bash
dd # 删除行
yy # 复制行
p # 粘贴
u # 撤销
Ctrl+r # 重做
搜索:
ruby
/pattern # 向下搜索
?pattern # 向上搜索
n/N # 下一个/上一个
:%s/old/new/g # 全部替换
172. nano - 简单文本编辑器
定义: nano 是简单易用的终端文本编辑器。
常用快捷键:
bash
Ctrl+O # 保存
Ctrl+X # 退出
Ctrl+W # 搜索
Ctrl+K # 剪切行
Ctrl+U # 粘贴
Ctrl+6 # 复制
173. head/tail - 查看文件部分
定义: head 和 tail 用于查看文件的开头和结尾部分。
bash
head -n 20 file.txt # 查看前20行
tail -n 20 file.txt # 查看后20行
tail -f file.log # 实时跟踪
十三、输入输出重定向和管道
174. 输入输出重定向
定义: 重定向用于改变命令的标准输入、标准输出和标准错误的流向。
标准流:
stdin(0):标准输入stdout(1):标准输出stderr(2):标准错误
输出重定向:
bash
command > file.txt # 覆盖输出到文件
command >> file.txt # 追加输出到文件
command 2> error.txt # 错误输出到文件
command > file.txt 2>&1 # 所有输出到文件
command &> file.txt # 简写(Bash)
command > /dev/null 2>&1 # 丢弃所有输出
输入重定向:
bash
command < file.txt # 从文件读取输入
command << EOF # here document
line 1
line 2
EOF
175. 管道
定义: 管道 | 将前一个命令的标准输出连接到后一个命令的标准输入。
bash
command1 | command2 # 连接两个命令
command1 | command2 | command3 # 连接多个命令
示例:
bash
ps aux | grep nginx | wc -l # 统计nginx进程数
cat file.txt | sort | uniq -c # 排序并统计
ls -l | awk '{print $5}' | paste -sd+ | bc # 计算总大小
管道特性:
- 数据流式传输(不需要临时文件)
- 支持多个命令串联
- 适合文本处理
最佳实践:
- 结合 grep、awk、sed 处理文本
- 使用 tee 同时输出到文件和终端
- 避免过长的管道(复杂逻辑应使用脚本)
十四、系统理解
176. Linux 系统理解
定义: Linux 系统理解涉及操作系统架构、内核、发行版等核心概念。
系统架构:
应用程序
↓
Shell / 系统工具
↓
系统调用接口
↓
Linux 内核
↓
硬件
内核功能:
- 进程管理
- 内存管理
- 文件系统
- 设备驱动
- 网络协议栈
发行版:
- Debian/Ubuntu:apt 包管理
- CentOS/RHEL:yum/dnf 包管理
- Arch Linux:pacman 包管理
- openSUSE:zypper 包管理
177. 系统性能监控
定义: 系统性能监控是跟踪和分析系统资源使用情况。
CPU 监控:
bash
top # 实时查看
vmstat 1 # 每秒统计
mpstat # CPU详细统计
内存监控:
bash
free -h # 查看内存使用
vmstat # 虚拟内存统计
cat /proc/meminfo # 详细信息
磁盘监控:
bash
df -h # 磁盘使用
du -sh /path # 目录大小
iostat # I/O统计
网络监控:
bash
netstat -s # 网络统计
iftop # 带宽监控
nethogs # 进程带宽
178. 系统启动流程
定义: Linux 启动流程是从开机到系统就绪的过程。
启动流程:
- BIOS/UEFI 初始化硬件
- 引导加载程序(GRUB)
- 加载内核
- 初始化 initramfs
- 启动 init 系统(systemd)
- 运行系统服务
- 显示登录界面
systemd 目标:
bash
systemctl list-units --type=target # 查看目标
systemctl get-default # 查看默认目标
systemctl set-default multi-user.target # 设置默认目标
常用目标:
multi-user.target:多用户命令行graphical.target:图形界面rescue.target:救援模式
179. 包管理
定义: 包管理是安装、更新、删除软件包的系统。
apt(Debian/Ubuntu):
bash
apt update # 更新包列表
apt upgrade # 升级包
apt install package # 安装包
apt remove package # 卸载包
apt search package # 搜索包
apt list --installed # 列出已安装包
yum/dnf(CentOS/RHEL):
bash
yum update # 更新包
yum install package # 安装包
yum remove package # 卸载包
yum search package # 搜索包
yum list installed # 列出已安装包
180. 系统安全
定义: 系统安全是保护系统免受未授权访问和攻击。
安全措施:
- 定期更新系统和软件
- 配置防火墙
- 使用 SSH 密钥认证
- 禁用 root 远程登录
- 最小权限原则
- 定期备份
- 监控日志
- 使用 SELinux/AppArmor
SSH 安全配置:
yaml
/etc/ssh/sshd_config:
PermitRootLogin no # 禁止root登录
PasswordAuthentication no # 禁用密码认证
Port 2222 # 修改端口
附录:常用命令速查表
文件操作
| 命令 | 说明 |
|---|---|
| ls | 列出目录 |
| cd | 切换目录 |
| pwd | 显示当前目录 |
| mkdir | 创建目录 |
| rm | 删除文件/目录 |
| cp | 复制 |
| mv | 移动/重命名 |
| touch | 创建文件 |
| cat | 查看文件 |
| less | 分页查看 |
权限管理
| 命令 | 说明 |
|---|---|
| chmod | 修改权限 |
| chown | 修改所有者 |
| chgrp | 修改所属组 |
进程管理
| 命令 | 说明 |
|---|---|
| ps | 查看进程 |
| top | 实时监控 |
| kill | 终止进程 |
| nohup | 忽略挂起信号 |
网络命令
| 命令 | 说明 |
|---|---|
| ping | 测试连通性 |
| ifconfig/ip | 网络接口 |
| netstat/ss | 网络连接 |
| curl | HTTP客户端 |
| wget | 下载工具 |
| ssh | 远程登录 |
| scp | 安全复制 |
文本处理
| 命令 | 说明 |
|---|---|
| grep | 文本搜索 |
| awk | 文本处理 |
| sed | 流编辑 |
| sort | 排序 |
| uniq | 去重 |
| wc | 统计 |
| cut | 提取列 |