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虚拟机创建

安装步骤:

  1. 下载并安装VMware Workstation
  2. 创建新虚拟机
  3. 选择系统镜像文件(ISO)
  4. 配置虚拟机硬件参数
  5. 开始安装系统

虚拟机硬件配置建议:

配置项 建议值
内存 2GB以上
处理器 2核
硬盘 20GB以上
网络适配器 NAT模式

2.3 CentOS系统安装

分区方案:

挂载点 大小 说明
/boot 1GB 启动分区
swap 内存大小 交换分区
/ 剩余空间 根分区

2.4 Xshell远程连接工具

连接步骤:

  1. 查看Linux系统IP地址:ip addrifconfig
  2. 打开Xshell,新建会话
  3. 输入IP地址、用户名、密码
  4. 建立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
       ↓
┌─────────────┐
│   底行模式   │
└─────────────┘

模式切换:

  • 命令模式 → 编辑模式:按 iao 等键
  • 编辑模式 → 命令模式:按 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编辑文件的过程:

  1. 将文件内容读入内存缓冲区
  2. 在内存中编辑
  3. 保存时将缓冲区内容写入文件
  4. 生成 .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 定时任务注意事项

  1. 命令使用绝对路径
  2. 脚本要有执行权限
  3. 确保环境变量正确
  4. 输出重定向到日志文件
  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 关机
posted @ 2026-02-28 16:48  丝云戏千鹤  阅读(37)  评论(0)    收藏  举报