linux操作系统学习笔记
linux操作系统学习笔记
第一章 Linux操作系统介绍
1.1 什么是Linux
Linux是一种自由和开放源代码的类UNIX操作系统,该操作系统的内核由林纳斯·托瓦兹在1991年首次发布。
Linux的特点:
- 开源免费:源代码公开,可自由使用和修改
- 稳定性强:可连续运行数年无需重启
- 安全性高:权限管理严格,病毒较少
- 多用户多任务:支持多个用户同时使用,多个程序同时运行
- 可移植性好:可在不同硬件平台上运行
1.2 Linux与Windows的区别
| 对比项 | Linux | Windows |
|---|---|---|
| 内核 | 单内核 | 混合内核 |
| 文件系统 | EXT4、XFS等 | NTFS、FAT32 |
| 用户界面 | 命令行为主 | 图形界面为主 |
| 软件安装 | 包管理器 | 安装包(.exe/.msi) |
| 安全性 | 较高 | 相对较低 |
| 开源性 | 开源 | 闭源 |
1.3 Linux发行版
主流发行版分类:
Linux发行版
├── Debian系列
│ ├── Debian
│ ├── Ubuntu
│ └── Kali Linux
├── RedHat系列
│ ├── Red Hat Enterprise Linux (RHEL)
│ ├── CentOS
│ └── Fedora
└── 其他
├── Arch Linux
├── openSUSE
└── Gentoo
课程中使用的是CentOS系统,属于RedHat系列,适合服务器环境使用。
第二章 Linux系统安装与配置
2.1 虚拟机概念
真机 vs 虚拟机:
- 真机:直接在物理计算机上安装操作系统
- 虚拟机:通过虚拟化技术,在物理机上模拟出虚拟计算机
虚拟化技术要求:
- CPU支持虚拟化(Intel VT-x / AMD-V)
- 主板BIOS中开启虚拟化选项
2.2 VMware虚拟机创建
安装步骤:
- 下载并安装VMware Workstation
- 创建新虚拟机
- 选择系统镜像文件(ISO)
- 配置虚拟机硬件参数
- 开始安装系统
虚拟机硬件配置建议:
| 配置项 | 建议值 |
|---|---|
| 内存 | 2GB以上 |
| 处理器 | 2核 |
| 硬盘 | 20GB以上 |
| 网络适配器 | NAT模式 |
2.3 CentOS系统安装
分区方案:
| 挂载点 | 大小 | 说明 |
|---|---|---|
| /boot | 1GB | 启动分区 |
| swap | 内存大小 | 交换分区 |
| / | 剩余空间 | 根分区 |
2.4 Xshell远程连接工具
连接步骤:
- 查看Linux系统IP地址:
ip addr或ifconfig - 打开Xshell,新建会话
- 输入IP地址、用户名、密码
- 建立SSH连接
快照功能:
- 快照可以保存虚拟机当前状态
- 出现问题可以快速恢复到快照状态
- 建议在重要操作前创建快照
第三章 Linux文件与目录操作
3.1 文件基础操作
3.1.1 新建文件
touch 文件名 # 创建空文件
touch file1 file2 # 同时创建多个文件
3.1.2 复制文件
cp 源文件 目标路径 # 复制文件到指定目录
cp -r 源目录 目标路径 # 递归复制目录
cp -p 源文件 目标路径 # 保留文件属性复制
3.1.3 移动/剪切文件
mv 源文件 目标路径 # 移动文件
mv 旧文件名 新文件名 # 重命名文件
3.1.4 删除文件
rm 文件名 # 删除文件(需确认)
rm -f 文件名 # 强制删除,不提示确认
rm -r 目录名 # 递归删除目录
rm -rf 目录名 # 强制递归删除(危险操作)
删除原理:
- 删除操作只是删除文件的索引信息
- 实际数据仍存在于磁盘上
- 数据恢复工具可以找回已删除文件
3.2 目录基础操作
3.2.1 查看当前目录
pwd # 显示当前工作目录
pwd -P # 显示真实物理路径
3.2.2 切换目录
cd 目录路径 # 切换到指定目录
cd ~ # 切换到用户家目录
cd - # 切换到上一次所在目录
cd .. # 切换到上一级目录
cd / # 切换到根目录
3.2.3 创建目录
mkdir 目录名 # 创建目录
mkdir -p a/b/c # 递归创建多级目录
mkdir -v 目录名 # 显示创建过程
3.2.4 删除目录
rmdir 目录名 # 删除空目录
rm -r 目录名 # 删除非空目录
3.3 查看文件内容
3.3.1 cat命令
cat 文件名 # 查看文件全部内容
cat -n 文件名 # 显示行号
cat -A 文件名 # 显示所有字符(包括隐藏字符)
3.3.2 more和less命令
more 文件名 # 分页查看(只能向下翻页)
less 文件名 # 分页查看(可上下翻页)
less常用快捷键:
| 快捷键 | 功能 |
|---|---|
| 空格 | 向下翻页 |
| b | 向上翻页 |
| /关键字 | 搜索 |
| q | 退出 |
3.3.3 head和tail命令
head 文件名 # 显示文件前10行
head -n 20 文件名 # 显示文件前20行
tail 文件名 # 显示文件后10行
tail -n 20 文件名 # 显示文件后20行
tail -f 文件名 # 实时追踪文件变化(查看日志常用)
3.4 Linux管道
管道符 | 将前一个命令的输出作为后一个命令的输入。
cat file.txt | grep "error" # 查找文件中包含error的行
ps aux | grep nginx # 查找nginx进程
ls -l | wc -l # 统计文件数量
3.5 文件内容过滤
3.5.1 wc命令(统计)
wc 文件名 # 统计行数、单词数、字节数
wc -l 文件名 # 只统计行数
wc -w 文件名 # 只统计单词数
wc -c 文件名 # 只统计字节数
3.5.2 seq命令(生成序列)
seq 10 # 生成1到10的序列
seq 5 10 # 生成5到10的序列
seq 1 2 10 # 生成1到10,步长为2
seq -s "," 1 5 # 以逗号分隔输出
3.5.3 grep命令(过滤)
grep "关键字" 文件名 # 搜索包含关键字的行
grep -i "关键字" 文件名 # 忽略大小写
grep -v "关键字" 文件名 # 排除包含关键字的行
grep -n "关键字" 文件名 # 显示行号
grep -c "关键字" 文件名 # 统计匹配行数
grep -r "关键字" 目录 # 递归搜索目录
3.5.4 awk命令(文本处理)
awk '{print $1}' 文件名 # 打印第一列
awk -F: '{print $1}' 文件名 # 以冒号为分隔符
awk '{print $1,$3}' 文件名 # 打印第一和第三列
awk 'NR==1' 文件名 # 打印第一行
awk 'NR>=2 && NR<=5' 文件名 # 打印第2到5行
3.5.5 sort命令(排序)
sort 文件名 # 按ASCII码排序
sort -n 文件名 # 按数字排序
sort -r 文件名 # 反向排序
sort -k2 文件名 # 按第二列排序
sort -u 文件名 # 去重排序
3.5.6 uniq命令(去重)
uniq 文件名 # 去除连续重复行
uniq -c 文件名 # 统计每行出现次数
uniq -d 文件名 # 只显示重复行
sort file.txt | uniq # 先排序再去重(常用组合)
第四章 Linux目录结构
4.1 目录结构概述
Linux采用树形目录结构,所有文件和目录都从根目录 / 开始。
/
├── bin # 基本命令目录(所有用户可用)
├── sbin # 系统管理命令目录(管理员使用)
├── boot # 启动相关文件
├── dev # 设备文件目录
├── etc # 系统配置文件目录
├── home # 普通用户家目录
├── root # 管理员家目录
├── lib # 系统库文件目录
├── lib64 # 64位库文件目录
├── media # 可移动设备挂载点
├── mnt # 临时挂载点
├── opt # 可选软件包目录
├── proc # 虚拟文件系统(进程信息)
├── sys # 虚拟文件系统(系统信息)
├── tmp # 临时文件目录
├── usr # 用户程序目录
└── var # 可变数据目录(日志等)
4.2 重要目录详解
4.2.1 /etc 目录
存放系统配置文件:
| 文件 | 说明 |
|---|---|
| /etc/passwd | 用户信息文件 |
| /etc/shadow | 用户密码文件 |
| /etc/group | 用户组信息文件 |
| /etc/hosts | 主机名解析文件 |
| /etc/fstab | 开机自动挂载配置 |
| /etc/profile | 全局环境变量 |
4.2.2 /var 目录
存放经常变化的数据:
| 目录 | 说明 |
|---|---|
| /var/log | 日志文件目录 |
| /var/spool | 队列数据目录 |
| /var/www | Web服务目录 |
| /var/lib | 应用程序数据 |
4.2.3 /proc 目录
虚拟文件系统,存储系统运行时信息:
| 文件 | 说明 |
|---|---|
| /proc/cpuinfo | CPU信息 |
| /proc/meminfo | 内存信息 |
| /proc/version | 内核版本 |
| /proc/loadavg | 系统负载 |
4.3 相对路径与绝对路径
绝对路径: 从根目录开始的完整路径
/home/user/documents/file.txt
/etc/passwd
相对路径: 从当前目录开始的路径
./file.txt # 当前目录下的文件
../file.txt # 上级目录下的文件
documents/file.txt # 当前目录下documents目录中的文件
第五章 用户与用户组管理
5.1 用户与用户组概念
用户分类:
- 超级用户(root):UID为0,拥有最高权限
- 系统用户:UID 1-999,用于运行系统服务
- 普通用户:UID 1000+,日常使用
用户组:
- 每个用户必须属于一个主组
- 可以属于多个附加组
- 组信息存储在
/etc/group
5.2 用户管理命令
5.2.1 添加用户
useradd 用户名 # 创建用户
useradd -u 1001 用户名 # 指定UID
useradd -g 组名 用户名 # 指定主组
useradd -G 组名 用户名 # 指定附加组
useradd -d /home/dir 用户名 # 指定家目录
useradd -s /bin/bash 用户名 # 指定登录shell
useradd -M 用户名 # 不创建家目录
useradd与adduser的区别:
useradd:底层命令,需要手动设置密码adduser:交互式命令,自动创建家目录并设置密码
5.2.2 设置密码
passwd 用户名 # 设置用户密码
passwd -l 用户名 # 锁定用户
passwd -u 用户名 # 解锁用户
passwd -d 用户名 # 删除密码
5.2.3 删除用户
userdel 用户名 # 删除用户(保留家目录)
userdel -r 用户名 # 删除用户及家目录
5.2.4 修改用户
usermod -l 新用户名 旧用户名 # 修改用户名
usermod -u 新UID 用户名 # 修改UID
usermod -g 新组名 用户名 # 修改主组
usermod -G 组名 用户名 # 修改附加组
usermod -aG 组名 用户名 # 追加附加组
usermod -s /bin/sh 用户名 # 修改shell
usermod -L 用户名 # 锁定用户
usermod -U 用户名 # 解锁用户
5.2.5 查看用户信息
id 用户名 # 查看用户UID、GID信息
whoami # 查看当前用户名
who # 查看已登录用户
w # 查看已登录用户详细信息
5.3 用户组管理命令
5.3.1 添加用户组
groupadd 组名 # 创建用户组
groupadd -g 1001 组名 # 指定GID
5.3.2 删除用户组
groupdel 组名 # 删除用户组
5.3.3 修改用户组
groupmod -n 新组名 旧组名 # 修改组名
groupmod -g 新GID 组名 # 修改GID
5.3.4 管理组成员
gpasswd -a 用户 组名 # 添加用户到组
gpasswd -d 用户 组名 # 从组中移除用户
gpasswd -M 用户1,用户2 组名 # 设置组成员列表
5.4 用户相关配置文件
5.4.1 /etc/passwd 文件格式
用户名:密码占位符:UID:GID:描述信息:家目录:登录shell
示例:
root:x:0:0:root:/root:/bin/bash
user1:x:1000:1000::/home/user1:/bin/bash
5.4.2 /etc/shadow 文件格式
用户名:加密密码:最后修改天数:最小间隔:最大间隔:警告期:不活动期:过期日期:保留
示例:
root:$6$xxx...:18000:0:99999:7:::
第六章 文件权限管理
6.1 权限概念
Linux文件权限分为三类:
| 权限 | 对文件的含义 | 对目录的含义 |
|---|---|---|
| r(读) | 查看文件内容 | 列出目录内容 |
| w(写) | 修改文件内容 | 在目录中创建/删除文件 |
| x(执行) | 执行文件(程序) | 进入目录 |
权限对象:
- u(user):文件所有者
- g(group):文件所属组
- o(other):其他用户
- a(all):所有用户
6.2 查看权限
ls -l 文件名 # 查看文件权限
ls -ld 目录名 # 查看目录权限
权限显示格式:
-rw-r--r-- 1 root root 0 Jan 1 00:00 file.txt
解析:
- rw- r-- r--
文件类型 所有者权限 组权限 其他用户权限
文件类型标识:
| 符号 | 类型 |
|---|---|
| - | 普通文件 |
| d | 目录 |
| l | 软链接 |
| b | 块设备 |
| c | 字符设备 |
| s | 套接字 |
| p | 管道 |
6.3 权限值表示
数字表示法:
| 权限 | 二进制 | 十进制 |
|---|---|---|
| --- | 000 | 0 |
| --x | 001 | 1 |
| -w- | 010 | 2 |
| -wx | 011 | 3 |
| r-- | 100 | 4 |
| r-x | 101 | 5 |
| rw- | 110 | 6 |
| rwx | 111 | 7 |
常用权限组合:
| 数值 | 权限 | 说明 |
|---|---|---|
| 644 | rw-r--r-- | 普通文件默认权限 |
| 755 | rwxr-xr-x | 可执行文件/目录权限 |
| 600 | rw------- | 私密文件权限 |
| 777 | rwxrwxrwx | 完全开放权限(危险) |
6.4 修改权限
6.4.1 chmod命令(符号法)
chmod u+x 文件名 # 所有者添加执行权限
chmod g-w 文件名 # 组移除写权限
chmod o=r 文件名 # 其他用户只读
chmod a+x 文件名 # 所有用户添加执行权限
chmod u+x,g+w 文件名 # 同时修改多个权限
6.4.2 chmod命令(数字法)
chmod 755 文件名 # 设置权限为rwxr-xr-x
chmod 644 文件名 # 设置权限为rw-r--r--
chmod -R 755 目录名 # 递归修改目录权限
6.5 修改文件所属
6.5.1 chown命令
chown 用户名 文件名 # 修改所有者
chown :组名 文件名 # 修改所属组
chown 用户名:组名 文件名 # 同时修改所有者和组
chown -R 用户名 目录名 # 递归修改目录
6.5.2 chgrp命令
chgrp 组名 文件名 # 修改所属组
chgrp -R 组名 目录名 # 递归修改目录
6.6 目录权限详解
目录权限的特殊性:
| 权限 | 目录操作 |
|---|---|
| r | 可以ls列出目录内容 |
| w | 可以在目录中创建/删除文件 |
| x | 可以cd进入目录 |
注意: 要删除目录中的文件,需要对目录有w权限,而不是对文件有w权限。
6.7 文件属性详解
ls -l 文件名
-rw-r--r--. 1 root root 0 Jan 1 00:00 file.txt
各字段含义:
| 字段 | 说明 |
|---|---|
| -rw-r--r-- | 文件类型和权限 |
| . | SELinux安全上下文 |
| 1 | 硬链接数 |
| root | 所有者 |
| root | 所属组 |
| 0 | 文件大小(字节) |
| Jan 1 00:00 | 最后修改时间 |
| file.txt | 文件名 |
第七章 Shell基础
7.1 Shell定义
Shell是用户与Linux内核之间的桥梁,是一个命令解释器,负责接收用户输入的命令并传递给内核执行。
常见Shell类型:
| Shell | 路径 | 说明 |
|---|---|---|
| sh | /bin/sh | 最早的Shell |
| bash | /bin/bash | Linux默认Shell |
| csh | /bin/csh | C语言风格Shell |
| zsh | /bin/zsh | 功能强大的Shell |
7.2 Shell提示符
[root@localhost ~]#
解析:
| 字段 | 含义 |
|---|---|
| root | 当前用户名 |
| localhost | 主机名 |
| ~ | 当前目录(~表示家目录) |
| # | 超级用户提示符 |
| $ | 普通用户提示符 |
7.3 命令基础语法
命令 [选项] [参数]
示例:
ls -l /home
命令:ls
选项:-l
参数:/home
选项格式:
- 短选项:
-l、-a、-h - 长选项:
--all、--help - 组合短选项:
-la等同于-l -a
7.4 Tab补全
- 按Tab键自动补全命令或文件名
- 按两次Tab显示所有匹配项
- 可补全命令、文件名、目录名、用户名等
7.5 常用快捷键
| 快捷键 | 功能 |
|---|---|
| Ctrl + c | 终止当前命令 |
| Ctrl + d | 退出当前终端 |
| Ctrl + l | 清屏 |
| Ctrl + a | 光标移到行首 |
| Ctrl + e | 光标移到行尾 |
| Ctrl + u | 删除光标前所有内容 |
| Ctrl + k | 删除光标后所有内容 |
| Ctrl + r | 搜索历史命令 |
| Ctrl + z | 暂停当前命令 |
7.6 历史命令
history # 查看历史命令
history 10 # 查看最近10条命令
!n # 执行第n条历史命令
!! # 执行上一条命令
!字符串 # 执行最近以该字符串开头的命令
历史命令配置:
- 历史命令保存在
~/.bash_history - 默认保存1000条命令
- 可通过
HISTSIZE变量修改
7.7 命令别名
alias # 查看所有别名
alias 别名='命令' # 设置别名
unalias 别名 # 删除别名
示例:
alias ll='ls -l'
alias la='ls -a'
alias rm='rm -i'
永久生效: 将别名设置写入 ~/.bashrc 文件
第八章 vi/vim编辑器
8.1 vi/vim简介
vi是Linux系统中最基本的文本编辑器,vim是vi的增强版本(Vi IMproved),支持语法高亮、多级撤销等功能。
8.2 vi/vim三种模式
┌─────────────┐
│ 命令模式 │ ←── 启动时默认模式
└──────┬──────┘
│ i/a/o
↓
┌─────────────┐
│ 编辑模式 │
└──────┬──────┘
│ Esc
↓
┌─────────────┐
│ 底行模式 │
└─────────────┘
模式切换:
- 命令模式 → 编辑模式:按
i、a、o等键 - 编辑模式 → 命令模式:按
Esc键 - 命令模式 → 底行模式:按
:键
8.3 打开文件
vi 文件名 # 打开或新建文件
vi +n 文件名 # 打开文件并定位到第n行
vi + 文件名 # 打开文件并定位到最后一行
vi +/关键字 文件名 # 打开文件并定位到关键字处
8.4 命令模式操作
8.4.1 光标移动
| 按键 | 功能 |
|---|---|
| h | 左移 |
| j | 下移 |
| k | 上移 |
| l | 右移 |
| gg | 移到文件首行 |
| G | 移到文件末行 |
| nG | 移到第n行 |
| $ | 移到行尾 |
| ^ | 移到行首 |
| w | 移到下一个单词 |
| b | 移到上一个单词 |
8.4.2 删除操作
| 按键 | 功能 |
|---|---|
| x | 删除光标所在字符 |
| dd | 删除整行 |
| ndd | 删除n行 |
| d$ | 删除到行尾 |
| d^ | 删除到行首 |
| dw | 删除一个单词 |
8.4.3 复制粘贴
| 按键 | 功能 |
|---|---|
| yy | 复制整行 |
| nyy | 复制n行 |
| p | 粘贴到光标后 |
| P | 粘贴到光标前 |
8.4.4 撤销重做
| 按键 | 功能 |
|---|---|
| u | 撤销 |
| Ctrl + r | 重做 |
| . | 重复上一步操作 |
8.4.5 进入编辑模式
| 按键 | 功能 |
|---|---|
| i | 在光标前插入 |
| I | 在行首插入 |
| a | 在光标后插入 |
| A | 在行尾插入 |
| o | 在下一行插入新行 |
| O | 在上一行插入新行 |
8.5 底行模式操作
8.5.1 保存退出
| 命令 | 功能 |
|---|---|
| :w | 保存 |
| :q | 退出 |
| :wq | 保存并退出 |
| :q! | 强制退出不保存 |
| :w 文件名 | 另存为 |
| :x | 保存并退出 |
8.5.2 查找替换
/关键字 # 向下查找
?关键字 # 向上查找
n # 下一个匹配
N # 上一个匹配
:s/old/new/ # 替换当前行第一个
:s/old/new/g # 替换当前行所有
:%s/old/new/g # 替换全文所有
:%s/old/new/gc # 替换全文并确认
:n1,n2s/old/new/g # 替换n1到n2行
8.5.3 其他操作
:set nu # 显示行号
:set nonu # 隐藏行号
:set paste # 粘贴模式(防止格式错乱)
:noh # 取消高亮
8.6 vi原理
vi编辑文件的过程:
- 将文件内容读入内存缓冲区
- 在内存中编辑
- 保存时将缓冲区内容写入文件
- 生成
.swp交换文件用于恢复
注意:
- 异常退出会产生
.swp文件 - 恢复命令:
vi -r 文件名 - 删除
.swp文件后才能正常编辑
第九章 输入输出重定向
9.1 标准输入输出
| 文件描述符 | 名称 | 默认设备 |
|---|---|---|
| 0 | 标准输入(stdin) | 键盘 |
| 1 | 标准输出(stdout) | 屏幕 |
| 2 | 标准错误(stderr) | 屏幕 |
9.2 输出重定向
命令 > 文件 # 覆盖写入(清空原内容)
命令 >> 文件 # 追加写入
命令 2> 文件 # 错误输出覆盖写入
命令 2>> 文件 # 错误输出追加写入
命令 &> 文件 # 正确和错误都写入
命令 &>> 文件 # 正确和错误都追加
命令 >> 文件 2>&1 # 正确和错误都追加(经典写法)
示例:
ls > list.txt # 将ls结果写入文件
ls >> list.txt # 将ls结果追加到文件
ls /notexist 2> error.txt # 将错误信息写入文件
ls /home /notexist &> all.txt # 正确和错误都写入
9.3 输入重定向
命令 < 文件 # 从文件读取输入
命令 << 结束符 # 从键盘读取,直到结束符
示例:
wc -l < /etc/passwd # 统计文件行数
cat << EOF
> 第一行
> 第二行
> EOF
9.4 管道符
命令1 | 命令2 # 命令1的输出作为命令2的输入
命令1 | 命令2 | 命令3 # 多级管道
示例:
ps aux | grep nginx # 查找nginx进程
cat /etc/passwd | sort # 排序文件内容
ls -l | wc -l # 统计文件数量
第十章 压缩与解压缩
10.1 常见压缩格式
| 格式 | 说明 |
|---|---|
| .gz | gzip压缩 |
| .bz2 | bzip2压缩 |
| .tar | tar打包(未压缩) |
| .tar.gz | tar打包后gzip压缩 |
| .tar.bz2 | tar打包后bzip2压缩 |
| .zip | zip压缩 |
10.2 gzip压缩
gzip 文件名 # 压缩文件(源文件消失)
gzip -d 文件.gz # 解压文件
gzip -k 文件名 # 压缩并保留源文件
gzip -r 目录 # 递归压缩目录中文件
gunzip 文件.gz # 解压文件
zcat 文件.gz # 查看压缩文件内容
10.3 bzip2压缩
bzip2 文件名 # 压缩文件
bzip2 -d 文件.bz2 # 解压文件
bzip2 -k 文件名 # 压缩并保留源文件
bunzip2 文件.bz2 # 解压文件
bzcat 文件.bz2 # 查看压缩文件内容
10.4 tar打包压缩
常用选项:
| 选项 | 说明 |
|---|---|
| -c | 创建打包文件 |
| -x | 解包 |
| -v | 显示过程 |
| -f | 指定文件名 |
| -z | 使用gzip压缩/解压 |
| -j | 使用bzip2压缩/解压 |
| -C | 指定解压目录 |
| -t | 查看包内容 |
打包压缩:
tar -cvf file.tar 文件... # 打包
tar -zcvf file.tar.gz 文件... # 打包并gzip压缩
tar -jcvf file.tar.bz2 文件... # 打包并bzip2压缩
解包解压:
tar -xvf file.tar # 解包
tar -zxvf file.tar.gz # 解包并解压gzip
tar -jxvf file.tar.bz2 # 解包并解压bzip2
tar -zxvf file.tar.gz -C /path # 解压到指定目录
查看包内容:
tar -tvf file.tar.gz # 查看包内容
10.5 zip压缩
zip 压缩包名 文件... # 压缩文件
zip -r 压缩包名 目录 # 递归压缩目录
unzip 压缩包名 # 解压
unzip 压缩包名 -d 目录 # 解压到指定目录
unzip -l 压缩包名 # 查看压缩包内容
第十一章 文件传输
11.1 网络文件下载
11.1.1 wget命令
wget URL # 下载文件
wget -O 文件名 URL # 指定保存文件名
wget -c URL # 断点续传
wget -b URL # 后台下载
wget -r URL # 递归下载
11.1.2 curl命令
curl URL # 显示网页内容
curl -o 文件名 URL # 下载文件
curl -O URL # 下载文件(使用原文件名)
curl -I URL # 只显示响应头
curl -u user:pass URL # 带认证下载
11.2 scp远程复制
scp 本地文件 用户@主机:路径 # 上传文件
scp 用户@主机:文件 本地路径 # 下载文件
scp -r 目录 用户@主机:路径 # 上传目录
scp -P 端口 文件 用户@主机:路径 # 指定端口
示例:
scp file.txt root@192.168.1.100:/tmp/
scp root@192.168.1.100:/etc/passwd ./
scp -r /home/user root@192.168.1.100:/backup/
11.3 rz/sz命令
需要安装lrzsz软件包:
yum install -y lrzsz
使用方法:
rz # 上传文件(Windows → Linux)
sz 文件名 # 下载文件(Linux → Windows)
11.4 xftp工具
xftp是Windows平台的图形化SFTP/FTP客户端,支持:
- 拖拽上传下载
- 断点续传
- 文件夹同步
- 多会话管理
第十二章 软件安装管理
12.1 Linux软件安装方式
| 方式 | 说明 | 优点 | 缺点 |
|---|---|---|---|
| 编译安装 | 源码编译 | 可定制功能 | 复杂、耗时长 |
| rpm安装 | RPM包安装 | 简单快速 | 依赖问题 |
| yum安装 | 包管理器 | 自动解决依赖 | 需要网络 |
12.2 编译安装
安装步骤:
./configure --prefix=/usr/local/软件名 # 配置
make # 编译
make install # 安装
完整示例(nginx):
yum install -y gcc pcre-devel zlib-devel # 安装依赖
tar -zxvf nginx-1.20.0.tar.gz # 解压
cd nginx-1.20.0
./configure --prefix=/usr/local/nginx # 配置
make # 编译
make install # 安装
/usr/local/nginx/sbin/nginx # 启动
12.3 rpm安装
常用选项:
| 选项 | 说明 |
|---|---|
| -i | 安装 |
| -U | 升级 |
| -e | 卸载 |
| -q | 查询 |
| -v | 显示详细信息 |
| -h | 显示进度条 |
常用命令:
rpm -ivh 软件包.rpm # 安装软件
rpm -Uvh 软件包.rpm # 升级软件
rpm -e 软件名 # 卸载软件
rpm -q 软件名 # 查询是否安装
rpm -qa # 查询所有已安装软件
rpm -qi 软件名 # 查询软件详细信息
rpm -ql 软件名 # 查询软件安装文件列表
rpm -qf 文件路径 # 查询文件属于哪个软件包
12.4 yum安装
常用命令:
yum install 软件名 # 安装软件
yum install -y 软件名 # 安装软件(自动确认)
yum update 软件名 # 更新软件
yum update # 更新所有软件
yum remove 软件名 # 卸载软件
yum list # 列出所有软件包
yum list installed # 列出已安装软件包
yum search 关键字 # 搜索软件包
yum info 软件名 # 查看软件信息
yum clean all # 清理缓存
yum makecache # 生成缓存
yum repolist # 查看仓库列表
12.5 yum仓库配置
配置文件位置: /etc/yum.repos.d/
配置文件格式:
[仓库ID]
name=仓库名称
baseurl=仓库地址
enabled=1 # 是否启用
gpgcheck=0 # 是否校验
配置国内镜像源(阿里云):
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
yum makecache
第十三章 文件查找
13.1 find命令
find是Linux中最强大的文件查找命令,可以根据多种条件查找文件。
基本语法:
find [路径] [条件] [动作]
13.2 按名称查找
find / -name "文件名" # 精确查找
find / -name "*.txt" # 模糊查找
find / -iname "文件名" # 忽略大小写
find / -name "file*" # 通配符查找
13.3 按文件类型查找
find / -type f # 查找普通文件
find / -type d # 查找目录
find / -type l # 查找软链接
find / -type b # 查找块设备
find / -type c # 查找字符设备
find / -type s # 查找套接字
13.4 按文件大小查找
find / -size +100M # 大于100MB的文件
find / -size -100M # 小于100MB的文件
find / -size 100M # 等于100MB的文件
find / -size +1G -size -10G # 大于1GB小于10GB的文件
大小单位:
| 单位 | 说明 |
|---|---|
| c | 字节 |
| k | KB |
| M | MB |
| G | GB |
13.5 按时间查找
find / -mtime -7 # 7天内修改过
find / -mtime +7 # 7天前修改过
find / -atime -7 # 7天内访问过
find / -ctime -7 # 7天内状态改变
find / -mmin -60 # 60分钟内修改过
13.6 按用户/组查找
find / -user root # 属于root用户的文件
find / -group root # 属于root组的文件
find / -nouser # 没有属主的文件
find / -nogroup # 没有属组的文件
13.7 按权限查找
find / -perm 755 # 权限为755的文件
find / -perm -755 # 权限包含755的文件
find / -perm /755 # 权限包含任意一位
13.8 组合条件
find / -name "*.txt" -a -size +1M # AND(同时满足)
find / -name "*.txt" -o -name "*.log" # OR(满足任一)
find / ! -name "*.txt" # NOT(取反)
13.9 对查找结果执行动作
find / -name "*.log" -exec rm {} \; # 删除查找到的文件
find / -name "*.txt" -exec mv {} /tmp \; # 移动查找到的文件
find / -name "*.log" -ok rm {} \; # 删除前确认
find / -name "*.txt" -ls # 显示详细信息
find / -name "*.txt" -print # 打印路径(默认)
第十四章 进程管理
14.1 进程概念
进程是程序在计算机上的一次执行过程,是系统进行资源分配和调度的基本单位。
进程与程序的区别:
- 程序:静态的,存储在磁盘上的可执行文件
- 进程:动态的,正在运行的程序实例
14.2 查看进程
14.2.1 ps命令
ps # 查看当前终端进程
ps aux # 查看所有进程(BSD风格)
ps -ef # 查看所有进程(标准风格)
ps -u 用户名 # 查看指定用户进程
ps -p PID # 查看指定PID进程
ps aux输出说明:
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.1 125424 3848 ? Ss 10:00 0:01 /sbin/init
| 字段 | 说明 |
|---|---|
| USER | 进程所有者 |
| PID | 进程ID |
| %CPU | CPU占用率 |
| %MEM | 内存占用率 |
| VSZ | 虚拟内存大小 |
| RSS | 物理内存大小 |
| TTY | 终端 |
| STAT | 进程状态 |
| START | 启动时间 |
| TIME | 占用CPU时间 |
| COMMAND | 命令 |
进程状态(STAT):
| 状态 | 说明 |
|---|---|
| S | 睡眠 |
| R | 运行 |
| Z | 僵尸进程 |
| T | 停止 |
| D | 不可中断睡眠 |
| s | 会话领导者 |
| < | 高优先级 |
| N | 低优先级 |
| + | 前台进程组 |
| l | 多线程 |
14.2.2 top命令
top # 动态显示进程信息
top -d 5 # 5秒刷新一次
top -p PID # 监控指定进程
top -u 用户名 # 监控指定用户进程
top交互命令:
| 按键 | 功能 |
|---|---|
| P | 按CPU排序 |
| M | 按内存排序 |
| N | 按PID排序 |
| T | 按时间排序 |
| k | 终止进程 |
| q | 退出 |
| h | 帮助 |
14.2.3 pstree命令
pstree # 树形显示进程
pstree -p # 显示PID
pstree -u # 显示用户
14.3 终止进程
14.3.1 kill命令
kill PID # 发送TERM信号(正常终止)
kill -9 PID # 发送KILL信号(强制终止)
kill -15 PID # 发送TERM信号
kill -l # 列出所有信号
常用信号:
| 信号 | 编号 | 说明 |
|---|---|---|
| SIGTERM | 15 | 正常终止(默认) |
| SIGKILL | 9 | 强制终止 |
| SIGSTOP | 19 | 暂停进程 |
| SIGCONT | 18 | 继续进程 |
| SIGHUP | 1 | 挂起/重载配置 |
14.3.2 killall命令
killall 进程名 # 按名称终止进程
killall -9 进程名 # 强制终止
killall -u 用户 进程名 # 终止指定用户的进程
14.3.3 pkill命令
pkill 进程名 # 按名称终止进程
pkill -u 用户名 # 终止指定用户所有进程
pkill -t 终端 # 终止指定终端进程
14.4 后台进程管理
命令 & # 后台运行
nohup 命令 & # 后台运行(忽略挂起信号)
Ctrl + z # 暂停当前进程
jobs # 查看后台任务
bg %任务号 # 后台继续运行
fg %任务号 # 前台继续运行
14.5 查看系统资源
free -h # 查看内存使用
df -h # 查看磁盘使用
du -sh 目录 # 查看目录大小
uptime # 查看系统负载
vmstat # 查看系统状态
iostat # 查看IO状态
第十五章 定时任务
15.1 crontab简介
crontab是Linux系统中用于设置周期性执行任务的工具,可以定时执行脚本或命令。
15.2 crontab配置
时间格式:
* * * * * 命令
分 时 日 月 周
| 字段 | 取值范围 |
|---|---|
| 分 | 0-59 |
| 时 | 0-23 |
| 日 | 1-31 |
| 月 | 1-12 |
| 周 | 0-7(0和7都表示周日) |
特殊符号:
| 符号 | 说明 |
|---|---|
| * | 任意时间 |
| , | 分隔多个时间 |
| - | 时间范围 |
| /n | 每隔n单位 |
15.3 crontab命令
crontab -l # 查看定时任务
crontab -e # 编辑定时任务
crontab -r # 删除定时任务
crontab -u 用户 -l # 查看指定用户定时任务
15.4 定时任务示例
* * * * * /script.sh # 每分钟执行
*/5 * * * * /script.sh # 每5分钟执行
0 * * * * /script.sh # 每小时执行
0 2 * * * /script.sh # 每天凌晨2点执行
0 2 * * 1 /script.sh # 每周一凌晨2点执行
0 2 1 * * /script.sh # 每月1号凌晨2点执行
0 2 1 1 * /script.sh # 每年1月1号凌晨2点执行
0 9-18 * * * /script.sh # 每天9点到18点每小时执行
0 9,12,15 * * * /script.sh # 每天9点、12点、15点执行
*/10 9-18 * * 1-5 /script.sh # 工作日9-18点每10分钟执行
15.5 定时任务注意事项
- 命令使用绝对路径
- 脚本要有执行权限
- 确保环境变量正确
- 输出重定向到日志文件
- 确保crond服务运行
systemctl status crond # 查看crond服务状态
systemctl start crond # 启动crond服务
systemctl enable crond # 开机自启
第十六章 系统优化
16.1 查看系统信息
uname -a # 查看内核信息
cat /etc/redhat-release # 查看系统版本
hostname # 查看主机名
hostnamectl # 查看主机信息
16.2 系统性能优化
16.2.1 关闭不必要服务
systemctl list-unit-files # 查看所有服务
systemctl disable 服务名 # 禁用服务
systemctl stop 服务名 # 停止服务
16.2.2 优化系统参数
编辑 /etc/sysctl.conf:
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_fin_timeout = 30
net.core.somaxconn = 65535
应用配置:
sysctl -p
16.2.3 文件描述符限制
查看限制:
ulimit -n
修改限制(编辑 /etc/security/limits.conf):
* soft nofile 65535
* hard nofile 65535
16.3 系统监控工具
vmstat 1 # 每秒显示系统状态
iostat 1 # 每秒显示IO状态
sar -u 1 5 # 每1秒采样CPU,共5次
sar -r 1 5 # 每1秒采样内存,共5次
dstat # 综合监控工具
第十七章 Linux特殊符号
17.1 通配符
| 符号 | 说明 | 示例 |
|---|---|---|
| * | 匹配任意字符 | ls *.txt |
| ? | 匹配单个字符 | ls file?.txt |
| [] | 匹配指定范围 | ls file[1-3].txt |
| [!] | 匹配不在范围 | ls file[!1-3].txt |
17.2 引号
| 符号 | 说明 |
|---|---|
| '' | 单引号,完全引用,不解析变量 |
| "" | 双引号,部分引用,解析变量和命令 |
| `` | 反引号,命令替换,等同于$() |
示例:
name="world"
echo 'Hello $name' # 输出:Hello $name
echo "Hello $name" # 输出:Hello world
echo "Today is `date`" # 输出:Today is Fri Jan 1 00:00:00 CST 2026
echo "Today is $(date)" # 同上
17.3 转义符
\ # 转义符,取消特殊含义
echo "Hello \"World\"" # 输出:Hello "World"
echo \$PATH # 输出:$PATH
17.4 其他特殊符号
| 符号 | 说明 |
|---|---|
| ; | 命令分隔符 |
| # | 注释符 |
| $ | 变量引用 |
| & | 后台运行 |
| && | 逻辑与 |
| || | 逻辑或 |
| () | 子Shell |
| {} | 命令组合 |
示例:
cmd1 ; cmd2 # 顺序执行两个命令
cmd1 && cmd2 # cmd1成功才执行cmd2
cmd1 || cmd2 # cmd1失败才执行cmd2
(cd /tmp; ls) # 子Shell中执行
{ cd /tmp; ls; } # 当前Shell中执行
第十八章 三剑客与正则表达式
18.1 正则表达式基础
18.1.1 基本正则表达式(BRE)
| 元字符 | 说明 |
|---|---|
| . | 匹配任意单个字符 |
| * | 匹配前一个字符0次或多次 |
| ^ | 匹配行首 |
| $ | 匹配行尾 |
| [] | 匹配字符集合 |
| [^] | 匹配不在集合中的字符 |
| \ | 转义符 |
| < | 匹配单词开头 |
| > | 匹配单词结尾 |
18.1.2 扩展正则表达式(ERE)
| 元字符 | 说明 |
|---|---|
| + | 匹配前一个字符1次或多次 |
| ? | 匹配前一个字符0次或1次 |
| 匹配前一个字符n次 | |
| 匹配前一个字符至少n次 | |
| 匹配前一个字符n到m次 | |
| () | 分组 |
| | | 或 |
18.2 grep命令详解
grep(Global Regular Expression Print)是文本搜索工具,根据模式匹配文本行。
基本语法:
grep [选项] '模式' 文件
常用选项:
| 选项 | 说明 |
|---|---|
| -i | 忽略大小写 |
| -v | 反向匹配 |
| -n | 显示行号 |
| -c | 只显示匹配行数 |
| -l | 只显示文件名 |
| -r | 递归搜索 |
| -E | 使用扩展正则表达式 |
| -o | 只显示匹配内容 |
| -A n | 显示匹配行后n行 |
| -B n | 显示匹配行前n行 |
| -C n | 显示匹配行前后各n行 |
| --color | 高亮显示匹配内容 |
示例:
grep "error" /var/log/messages # 搜索包含error的行
grep -i "error" file.txt # 忽略大小写
grep -v "^#" file.txt # 排除以#开头的行
grep -n "root" /etc/passwd # 显示行号
grep -c "error" file.txt # 统计匹配行数
grep -r "error" /var/log/ # 递归搜索
grep -E "error|warning" file.txt # 使用扩展正则
grep "^root" /etc/passwd # 以root开头
grep "bash$" /etc/passwd # 以bash结尾
grep "[0-9]\{3\}" file.txt # 匹配3个数字
grep -E "[0-9]{3}" file.txt # 同上(扩展正则)
18.3 sed命令详解
sed(Stream Editor)是流编辑器,用于文本处理和替换。
基本语法:
sed [选项] '命令' 文件
常用选项:
| 选项 | 说明 |
|---|---|
| -n | 只显示处理的行 |
| -i | 直接修改文件 |
| -e | 多点编辑 |
| -r | 使用扩展正则表达式 |
常用命令:
| 命令 | 说明 |
|---|---|
| a | 在行后追加 |
| i | 在行前插入 |
| d | 删除行 |
| c | 替换整行 |
| s | 替换字符串 |
| p | 打印行 |
| = | 打印行号 |
示例:
sed -n '5p' file.txt # 打印第5行
sed -n '2,5p' file.txt # 打印第2-5行
sed '5d' file.txt # 删除第5行
sed '/error/d' file.txt # 删除包含error的行
sed 's/old/new/' file.txt # 替换每行第一个old
sed 's/old/new/g' file.txt # 替换所有old
sed -i 's/old/new/g' file.txt # 直接修改文件
sed -n '/error/p' file.txt # 打印包含error的行
sed '5a\new line' file.txt # 第5行后追加
sed '5i\new line' file.txt # 第5行前插入
sed '1,5d' file.txt # 删除第1-5行
sed -e 's/a/A/g' -e 's/b/B/g' file.txt # 多点编辑
18.4 awk命令详解
awk是一种强大的文本处理工具,也是一种编程语言。
基本语法:
awk '模式 {动作}' 文件
内置变量:
| 变量 | 说明 |
|---|---|
| $0 | 整行内容 |
| $1-$n | 第n列 |
| NF | 当前行字段数 |
| NR | 当前行号 |
| FS | 输入字段分隔符 |
| OFS | 输出字段分隔符 |
| RS | 输入记录分隔符 |
| ORS | 输出记录分隔符 |
| FILENAME | 当前文件名 |
示例:
awk '{print $1}' file.txt # 打印第一列
awk '{print $1,$3}' file.txt # 打印第一和第三列
awk -F: '{print $1}' /etc/passwd # 以冒号分隔
awk 'NR==1' file.txt # 打印第一行
awk 'NR>=2 && NR<=5' file.txt # 打印第2-5行
awk '/error/' file.txt # 打印包含error的行
awk '{print NR,$0}' file.txt # 显示行号
awk '{print NF}' file.txt # 显示每行字段数
awk '{sum+=$1} END{print sum}' file.txt # 计算第一列总和
awk '{print $1, $2*$3}' file.txt # 计算并打印
awk 'BEGIN{FS=":"} {print $1}' /etc/passwd # 指定分隔符
awk '{if($3>100) print $0}' file.txt # 条件判断
awk '{print $1 | "sort"}' file.txt # 管道输出
第十九章 Linux运行级别
19.1 运行级别概念
运行级别是Linux系统在不同状态下运行的模式。
传统运行级别(CentOS 6):
| 级别 | 说明 |
|---|---|
| 0 | 关机 |
| 1 | 单用户模式(维护模式) |
| 2 | 多用户模式(无NFS) |
| 3 | 完全多用户模式(命令行) |
| 4 | 未使用 |
| 5 | 图形界面模式 |
| 6 | 重启 |
systemd目标(CentOS 7+):
| 运行级别 | systemd目标 |
|---|---|
| 0 | poweroff.target |
| 1 | rescue.target |
| 2 | multi-user.target |
| 3 | multi-user.target |
| 4 | multi-user.target |
| 5 | graphical.target |
| 6 | reboot.target |
19.2 查看和切换运行级别
CentOS 6:
runlevel # 查看当前运行级别
init 5 # 切换到运行级别5
CentOS 7+:
systemctl get-default # 查看默认运行级别
systemctl set-default multi-user.target # 设置默认运行级别
systemctl isolate graphical.target # 切换运行级别
第二十章 权限进阶与提权
20.1 权限掩码(umask)
umask决定了新建文件和目录的默认权限。
查看umask:
umask # 查看当前umask值
计算默认权限:
- 目录默认权限 = 777 - umask
- 文件默认权限 = 666 - umask
示例:
umask 022 # 设置umask值
目录默认权限:777 - 022 = 755
文件默认权限:666 - 022 = 644
20.2 inode和block
inode(索引节点):
- 存储文件元数据(权限、所有者、时间戳等)
- 每个文件对应一个inode
- 不存储文件名和实际数据
block(数据块):
- 存储文件实际数据
- 文件数据分散在多个block中
查看inode信息:
ls -i 文件名 # 查看inode号
df -i # 查看inode使用情况
stat 文件名 # 查看详细inode信息
20.3 SUID特殊权限
SUID(Set User ID)让普通用户以文件所有者的身份执行程序。
设置SUID:
chmod u+s 文件名 # 设置SUID
chmod 4755 文件名 # 数字方式设置
查看SUID文件:
find / -perm -4000 # 查找SUID文件
示例:
ls -l /usr/bin/passwd
-rwsr-xr-x. 1 root root ... /usr/bin/passwd
# s表示设置了SUID,普通用户执行时获得root权限
20.4 sudo授权
sudo允许普通用户以超级用户身份执行命令。
配置sudo:
visudo # 编辑sudo配置文件
配置格式:
用户 主机=(执行身份) 命令
示例:
user1 ALL=(ALL) ALL # user1可以执行所有命令
user2 ALL=(ALL) /usr/bin/ls # user2只能执行ls
%wheel ALL=(ALL) ALL # wheel组可以执行所有命令
user3 ALL=(root) NOPASSWD: /usr/bin/cat # 免密码执行cat
使用sudo:
sudo 命令 # 以root身份执行命令
sudo -l # 查看可执行的命令
sudo -u 用户 命令 # 以指定用户执行命令
20.5 提权方式
20.5.1 SUID提权
查找具有SUID权限的程序:
find / -perm -u=s -type f 2>/dev/null
常见可利用程序:nmap、vim、find、bash、more、less、nano、cp等
20.5.2 sudo提权
查看可执行的sudo命令:
sudo -l
利用可执行的命令提权,如:
sudo find / -exec /bin/bash \;
sudo vim -c '!bash'
20.5.3 内核漏洞提权
脏牛(Dirty Cow)漏洞是著名的内核提权漏洞:
# 检查内核版本
uname -a
# 使用对应exp进行提权
20.6 服务管理
systemctl命令:
systemctl start 服务名 # 启动服务
systemctl stop 服务名 # 停止服务
systemctl restart 服务名 # 重启服务
systemctl status 服务名 # 查看服务状态
systemctl enable 服务名 # 开机自启
systemctl disable 服务名 # 禁用开机自启
systemctl list-units # 查看所有服务
systemctl list-unit-files # 查看所有服务状态
附录:常用命令速查表
文件操作
| 命令 | 说明 |
|---|---|
| ls | 列出目录内容 |
| cd | 切换目录 |
| pwd | 显示当前目录 |
| touch | 创建文件 |
| mkdir | 创建目录 |
| rm | 删除文件/目录 |
| cp | 复制文件/目录 |
| mv | 移动/重命名文件 |
| cat | 查看文件内容 |
| more/less | 分页查看文件 |
| head/tail | 查看文件头/尾 |
| find | 查找文件 |
| ln | 创建链接 |
用户管理
| 命令 | 说明 |
|---|---|
| useradd | 添加用户 |
| userdel | 删除用户 |
| usermod | 修改用户 |
| passwd | 设置密码 |
| groupadd | 添加组 |
| groupdel | 删除组 |
| id | 查看用户信息 |
| whoami | 显示当前用户 |
权限管理
| 命令 | 说明 |
|---|---|
| chmod | 修改权限 |
| chown | 修改所有者 |
| chgrp | 修改所属组 |
| umask | 查看设置权限掩码 |
进程管理
| 命令 | 说明 |
|---|---|
| ps | 查看进程 |
| top | 动态查看进程 |
| kill | 终止进程 |
| killall | 按名称终止进程 |
| bg/fg | 后台/前台运行 |
| jobs | 查看后台任务 |
网络相关
| 命令 | 说明 |
|---|---|
| ifconfig/ip | 查看网络配置 |
| ping | 测试网络连通性 |
| netstat | 查看网络状态 |
| ss | 查看socket状态 |
| curl/wget | 下载文件 |
| scp | 远程复制 |
| ssh | 远程连接 |
系统管理
| 命令 | 说明 |
|---|---|
| uname | 查看系统信息 |
| hostname | 查看主机名 |
| date | 查看日期时间 |
| uptime | 查看系统运行时间 |
| free | 查看内存使用 |
| df | 查看磁盘使用 |
| du | 查看目录大小 |
| reboot | 重启系统 |
| poweroff | 关机 |

浙公网安备 33010602011771号