重新学习前端之Linux

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

常见误区:

  • 不适合查看大文件(会一次性加载到终端)
  • 查看大文件应使用 lessmore

12. more - 分页查看文件

定义: more 命令用于分页查看文件内容。

bash 复制代码
more file.txt                   # 分页查看
more -10 file.txt               # 每页显示10行

操作按键:

  • 空格键:向下翻页
  • Enter:向下滚动一行
  • q:退出

常见误区:

  • more 只能向下翻页,不能回退(less 可以双向翻页)

13. less - 分页查看文件(增强版)

定义: lessmore 的增强版,支持双向翻页和搜索。

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的手册

手册章节:

  1. 用户命令
  2. 系统调用
  3. 库函数
  4. 特殊文件
  5. 文件格式
  6. 游戏
  7. 杂项
  8. 系统管理命令

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 = 4
  • w = 2
  • x = 1
  • 755 = 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. 进程管理

定义: 进程管理包括查看、控制、终止进程等操作。

管理方式:

  • 查看进程:pstophtop
  • 发送信号:killkillallpkill
  • 调整优先级:nicerenice
  • 前后台切换:jobsfgbg
  • 守护进程:systemdservice

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 - 增强版进程监控

定义: htoptop 的增强版,提供更友好的交互界面。

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:需要 PID
  • killall:精确匹配进程名
  • 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 结尾命名(如 sshdnginx
  • 系统启动时自动启动

常见守护进程:

  • 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 命令替代 ifconfig
  • ss 命令替代 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 - 网络管理命令

定义: ipifconfig 的现代替代工具,功能更强大。

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:支持更多协议,默认输出到 stdout
  • wget:支持递归下载,默认保存到文件

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. 服务器部署

定义: 服务器部署是将应用程序安装、配置到服务器上并使其可访问的过程。

部署流程:

  1. 安装运行环境(Node.js、Python、Java 等)
  2. 安装 Web 服务器(Nginx、Apache)
  3. 安装数据库(MySQL、PostgreSQL)
  4. 配置反向代理
  5. 配置 SSL 证书
  6. 配置防火墙
  7. 启动服务
  8. 监控和维护

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. 持续集成

定义: 持续集成是开发人员频繁地将代码合并到共享仓库,并通过自动化构建和测试验证。

流程:

  1. 开发人员提交代码到版本控制
  2. CI 系统检测到代码变更
  3. 自动拉取最新代码
  4. 自动构建项目
  5. 运行自动化测试
  6. 生成测试报告
  7. 通知构建结果

工具: Jenkins、GitLab CI、GitHub Actions、Travis CI、CircleCI


152. 持续部署

定义: 持续部署是通过自动化流程将通过测试的代码部署到生产环境。

流程:

  1. 代码通过 CI 测试
  2. 自动部署到测试环境
  3. 运行集成测试
  4. 自动部署到生产环境
  5. 监控和回滚机制

最佳实践:

  • 自动化所有测试
  • 使用基础设施即代码
  • 蓝绿部署或金丝雀发布
  • 监控和告警
  • 快速回滚机制

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 启动流程是从开机到系统就绪的过程。

启动流程:

  1. BIOS/UEFI 初始化硬件
  2. 引导加载程序(GRUB)
  3. 加载内核
  4. 初始化 initramfs
  5. 启动 init 系统(systemd)
  6. 运行系统服务
  7. 显示登录界面

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 提取列

相关推荐
walking9571 小时前
重新学习前端之CSS
前端·vue.js·面试
walking9571 小时前
重新学习前端之Git
前端·vue.js·面试
walking9571 小时前
重新学习前端之小程序
前端
魔术师Grace1 小时前
AI让我退化成原始人了
前端·程序员
铁皮饭盒1 小时前
今天你会学到这些关键词
前端·后端
李剑一1 小时前
耗时 2 小时!我复刻了全网超火的通透 3D 水晶球动效,Vue3+Three.js 做出高级视觉特效
前端·three.js
oil欧哟2 小时前
🤔 很长时间没写文章了,分享一下最近的一些思考
前端·后端
Hello--_--World2 小时前
Vue指令:v-if vs v-show、v-if 与 v-for 的优先级冲突、自定义指令
前端·javascript·vue.js
神の愛2 小时前
ReactHooks
前端·javascript·react.js