Linux 操作系统

开源、稳定的服务器操作系统


第一章 Linux入门

1.1 Linux简介

Linux是一套免费使用和自由传播的类Unix操作系统,由Linus Torvalds于1991年首次发布。目前是最流行的服务器操作系统,也是超级计算机和嵌入式系统的主要操作系统。

特点
- 开源免费:任何人都可以自由使用和修改
- 多用户多任务:支持多个用户同时使用,支持多个任务并发执行
- 稳定安全:几乎不需要重启,安全性高
- 强大的网络功能:天生支持网络
- 硬件支持广泛:支持从超级计算机到嵌入式设备

1.2 主要发行版

发行版 特点 适合人群
Ubuntu 易用、社区活跃、更新频繁 桌面/服务器初学者
Debian 稳定、包管理完善 服务器、系统管理员
CentOS/RHEL 企业级、稳定 企业服务器
Fedora 前沿、创新 开发者
Arch 高度自定义 高级用户
openSUSE 稳定、易用 桌面/服务器

1.3 Linux应用场景

  • Web服务器:Apache、Nginx
  • 数据库服务器:MySQL、PostgreSQL、MongoDB
  • 容器平台:Docker、Kubernetes
  • 云计算:AWS、阿里云等云服务
  • 超级计算机:全球TOP500超算中大部分使用Linux
  • 嵌入式系统:Android手机、智能设备

第二章 Linux文件系统

2.1 文件系统结构

/               根目录,所有目录的起点
├── bin/        系统命令(二进制文件)
├── boot/      启动文件、内核
├── dev/       设备文件
├── etc/       系统配置文件
├── home/      用户主目录
├── lib/       共享库文件
├── media/     可移动媒体挂载点
├── mnt/       临时挂载点
├── opt/       可选软件(大型第三方应用)
├── proc/      进程信息(虚拟文件系统)
├── root/      管理员(root)主目录
├── run/       运行时数据
├── sbin/      系统管理命令
├── srv/       服务数据
├── sys/       系统信息(虚拟文件系统)
├── tmp/       临时文件
├── usr/       用户程序(Unix System Resources)
└── var/       可变数据(日志、数据库等)

2.2 常见目录用途

/etc/:存放系统配置文件
- /etc/passwd:用户账户信息
- /etc/shadow:用户密码(加密)
- /etc/group:用户组信息
- /etc/fstab:文件系统挂载表
- /etc/hosts:主机名解析
- /etc/network/*:网络配置

/var/:存放经常变化的数据
- /var/log/:系统日志
- /var/spool/:打印队列、邮件队列
- /var/lib/:软件数据
- /var/www/:Web服务器文档

/home/:普通用户主目录
- /home/username/:每个用户的主目录

2.3 文件类型

类型 符号 说明
普通文件 - 文本、二进制、图片等
目录 d 文件夹
符号链接 l 快捷方式
字符设备 c 字符设备文件
块设备 b 块设备文件
管道 p 命名管道
套接字 s 网络套接字

第三章 基础命令

3.1 文件操作

3.1.1 查看文件

# 列出文件
ls                  # 简单列表
ls -l               # 详细信息
ls -a               # 包括隐藏文件(以.开头)
ls -lh              # 人性化显示大小
ls -R               # 递归列出子目录
ls -t               # 按修改时间排序
ls -S               # 按文件大小排序

# 查看文件内容
cat file.txt        # 全部显示
head -n 10 file.txt # 显示前10行
tail -n 10 file.txt # 显示后10行
tail -f file.txt    # 实时查看文件更新
less file.txt       # 分页查看(可上下滚动)
more file.txt       # 分页查看(只能向下)

# 统计
wc -l file.txt     # 行数
wc -w file.txt     # 单词数
wc -c file.txt     # 字符数

3.1.2 创建文件/目录

# 创建文件
touch file.txt          # 创建空文件
touch file1.txt file2.txt  # 批量创建

# 创建目录
mkdir dir/               # 创建单层目录
mkdir -p a/b/c/          # 递归创建多层目录

# 同时创建多个目录
mkdir -p dir1 dir2 dir3

3.1.3 复制文件

# 基本复制
cp source.txt dest.txt

# 复制目录
cp -r source_dir/ dest_dir/

# 复制并保留属性
cp -p source.txt dest.txt

# 复制时显示进度
cp -v source.txt dest.txt

# 常用选项
# -i: 目标存在时询问
# -v: 显示复制过程
# -r/R: 递归复制目录

3.1.4 移动/重命名

# 移动文件
mv source.txt dest/

# 重命名
mv oldname.txt newname.txt

# 移动并重命名
mv /path/source.txt /path/dest/newname.txt

# 批量移动
mv *.txt documents/

3.1.5 删除文件

# 删除文件
rm file.txt

# 删除目录
rm -r directory/

# 强制删除(不询问)
rm -rf directory/

# 删除前确认
rm -i file.txt

# 安全删除(慎用)
# trash命令(如果安装)比rm安全

3.2 文件权限

3.2.1 权限表示

# ls -l 输出示例
-rwxr-xr-- 1 user group 4096 Jan 15 10:30 file.txt

权限分为三组:
- 所有者权限 (rwx):文件所有者
- 所属组权限 (r-x):文件所属组的成员
- 其他用户权限 (r--):其他所有用户

每组权限包含:
- r (read): 读取权限,数值为4
- w (write): 写入权限,数值为2
- x (execute): 执行权限,数值为1

3.2.2 修改权限

# 数字方式
chmod 755 file.txt      # rwxr-xr-x
chmod 644 file.txt      # rw-r--r--
chmod 600 file.txt      # rw-------
chmod 700 directory/    # rwx------

# 符号方式
chmod +x script.sh     # 添加执行权限
chmod -x script.sh     # 移除执行权限
chmod u+x file.txt     # 所有者添加执行
chmod g+w file.txt     # 所属组添加写入
chmod o-r file.txt     # 其他用户移除读取

# 递归修改
chmod -R 755 directory/

3.2.3 修改所有者

# 修改文件所有者
chown username file.txt

# 修改所有者和所属组
chown username:group file.txt

# 递归修改
chown -R username:group directory/

3.3 文本处理

3.3.1 搜索

# 文本搜索
grep "pattern" file.txt           # 在文件中搜索
grep -r "pattern" directory/      # 递归搜索
grep -i "pattern" file.txt       # 忽略大小写
grep -n "pattern" file.txt       # 显示行号
grep -v "pattern" file.txt       # 显示不匹配的行
grep -c "pattern" file.txt       # 统计匹配行数

# 查找文件
find / -name "*.log"              # 按文件名查找
find / -size +100M               # 按大小查找
find / -mtime -7                  # 按修改时间查找
find / -type d -name "tmp"       # 查找目录

# 高级查找
find / -name "*.txt" -exec rm {} \;  # 查找并删除

3.3.2 排序

sort file.txt              # 排序
sort -u file.txt           # 去重排序
sort -r file.txt          # 降序排序
sort -n file.txt          # 数字排序
sort -t',' -k2 file.txt   # 指定分隔符和列

3.3.3 统计和转换

# 统计
wc file.txt               # 行数、单词数、字符数
cut -d':' -f1 file.txt    # 提取第一列
awk '{print $1}' file.txt # 提取第一列

# 替换
tr 'a-z' 'A-Z' < file.txt  # 大小写转换
sed 's/old/new/g' file.txt # 替换

3.4 归档和压缩

3.4.1 tar

# 创建归档
tar -cvf archive.tar dir/          # 创建tar包
tar -czvf archive.tar.gz dir/       # 创建gzip压缩包
tar -cjvf archive.tar.bz2 dir/      # 创建bzip2压缩包
tar -cJvf archive.tar.xz dir/      # 创建xz压缩包

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

# 查看内容
tar -tvf archive.tar

# 解压到指定目录
tar -xzvf archive.tar.gz -C /path/to/dir/

3.4.2 zip/unzip

# 压缩
zip -r archive.zip dir/           # 压缩目录
zip archive.zip file1 file2        # 压缩多个文件

# 解压
unzip archive.zip                  # 解压到当前目录
unzip archive.zip -d /path/to/dir/ # 解压到指定目录

# 查看内容
unzip -l archive.zip

第四章 用户和权限

4.1 用户管理

4.1.1 用户账户

# 查看用户
whoami               # 当前用户名
id                   # 当前用户ID和组信息
who                  # 所有登录用户
w                     # 详细登录信息

# 创建用户
useradd -m username     # 创建用户并创建主目录
useradd -m -s /bin/bash username  # 指定shell

# 设置密码
passwd username

# 删除用户
userdel -r username     # 删除用户和主目录

# 修改用户
usermod -aG group username  # 添加到组
usermod -s /bin/bash username  # 修改shell

4.1.2 用户组

# 创建组
groupadd groupname

# 查看组
groups username       # 用户所属的组
cat /etc/group        # 所有组信息

# 添加用户到组
gpasswd -a user group     # 添加
gpasswd -d user group     # 移除

4.2 sudo权限

# 编辑sudoers(必须使用visudo)
sudo visudo

# 添加sudo权限
username ALL=(ALL:ALL) ALL
# 格式:用户 主机=(用户:组) 命令

# 无需密码的sudo
username ALL=(ALL) NOPASSWD: ALL

# 允许组
%groupname ALL=(ALL) ALL

4.3 ACL权限

# 设置ACL
setfacl -m u:username:rw file.txt     # 用户ACL
setfacl -m g:groupname:r file.txt     # 组ACL
setfacl -m o::r file.txt             # 其他用户ACL

# 查看ACL
getfacl file.txt

# 删除ACL
setfacl -x u:username file.txt
setfacl -b file.txt                   # 删除所有ACL

第五章 进程管理

5.1 查看进程

# 基本命令
ps                  # 当前终端的进程
ps -ef              # 所有进程(详细)
ps aux              # 所有进程(BSD风格)
ps -ef | grep nginx # 查找特定进程

# 实时监控
top                  # 交互式进程监控
htop                 # 更友好的top(需要安装)

# top常用快捷键
# M: 按内存排序
# P: 按CPU排序
# q: 退出
# k: 杀死进程

5.2 进程控制

# 终止进程
kill PID              # 正常终止
kill -9 PID           # 强制终止
killall processname   # 按名称终止

# 发送信号
kill -l              # 列出所有信号
kill -SIGTERM PID    # 发送SIGTERM信号

# 后台运行
command &             # 后台运行
nohup command &      # 忽略挂起信号

# 进程控制
Ctrl+Z               # 暂停当前进程
bg                    # 后台继续
fg                    # 前台继续
jobs                  # 列出后台任务

# nice和renice
nice -n 10 command    # 以低优先级启动
renice -n 5 PID       # 修改运行中进程优先级

5.3 系统资源

# 内存
free -h               # 人性化显示
free -m               # 以MB为单位

# CPU
uptime                 # 系统运行时间、负载
top                     # CPU使用率

# 磁盘
df -h                  # 磁盘使用情况
du -sh dir/            # 目录大小
du -h --max-depth=1    # 各子目录大小

# 实时I/O
iotop                  # 需要root权限

第六章 网络管理

6.1 网络配置

# 查看IP
ip addr                 # 现代命令
ifconfig               # 传统命令(需安装net-tools)

# 临时配置IP
ip addr add 192.168.1.100/24 dev eth0
ip link set eth0 up/down

# 永久配置(Ubuntu)
# 编辑 /etc/netplan/*.yaml

# 路由
ip route               # 查看路由表
route -n               # 数字格式显示

6.2 网络测试

# 连通性测试
ping -c 4 google.com   # Ping测试
ping -i 0.5 host       # 快速ping

# 路由追踪
traceroute google.com   # 路由追踪
tracert google.com      # Windows风格

# 端口扫描
netstat -tuln           # 监听端口
ss -tuln                 # 现代替代

# 查看特定端口
lsof -i :8080           # 端口占用
fuser 8080/tcp          # 同上

6.3 网络连接

# 下载
curl -O http://example.com/file        # 下载文件
wget http://example.com/file           # 下载文件
curl -I http://example.com            # 查看头信息

# SSH
ssh user@hostname                     # 连接
ssh -p 2222 user@hostname            # 指定端口
ssh -i ~/.ssh/key user@host          # 使用密钥

# 文件传输
scp file.txt user@host:/path/        # 复制到远程
scp -r dir/ user@host:/path/         # 复制目录
rsync -av dir/ user@host:/path/      # 高效同步

# SSH密钥
ssh-keygen -t rsa                     # 生成密钥
ssh-copy-id user@host                 # 复制公钥

第七章 软件安装

7.1 APT(Debian/Ubuntu)

# 更新
apt update                # 更新软件源
apt upgrade              # 升级所有软件
apt full-upgrade         # 完整升级(包括删除包)

# 安装/卸载
apt install nginx        # 安装
apt remove nginx         # 卸载(保留配置)
apt purge nginx          # 完全卸载
apt autoremove           # 自动删除不需要的包

# 搜索
apt search nginx
apt show nginx

# 清理
apt clean                # 清理缓存
apt autoclean            # 清理旧缓存

7.2 YUM/DNF(CentOS/Fedora/RHEL)

# 安装
yum install nginx        # 安装
yum remove nginx        # 卸载
yum update nginx        # 更新

# 搜索
yum search nginx
yum info nginx

# DNF(现代Fedora)
dnf install nginx
dnf upgrade

7.3 Pacman(Arch Linux)

pacman -S nginx          # 安装
pacman -R nginx          # 卸载
pacman -Syu              # 全面更新
pacman -Ss nginx         # 搜索

7.4 编译安装

# 下载源码
wget http://example.com/software.tar.gz

# 解压
tar -xzf software.tar.gz
cd software/

# 编译安装
./configure
make
make install

# 清理
make clean

第八章 服务管理

8.1 Systemd

Systemd是现代Linux发行版的标准服务管理系统。

# 服务控制
systemctl start nginx        # 启动
systemctl stop nginx         # 停止
systemctl restart nginx       # 重启
systemctl reload nginx        # 重载配置
systemctl status nginx        # 状态

# 开机启动
systemctl enable nginx       # 启用
systemctl disable nginx      # 禁用
systemctl is-enabled nginx   # 检查状态

# 查看服务
systemctl list-units --type=service
systemctl list-dependencies nginx

# 查看日志
journalctl -u nginx          # 服务日志
journalctl -e                 # 最新日志
journalctl -f                 # 实时日志

8.2 日志管理

# 系统日志文件
/var/log/syslog           # 系统日志
/var/log/auth.log         # 认证日志
/var/log/nginx/           # Nginx日志
/var/log/httpd/           # Apache日志

# 日志轮转
/etc/logrotate.conf       # 主配置
/etc/logrotate.d/        # 各服务配置

# 手动轮转
logrotate -f /etc/logrotate.conf

第九章 Shell脚本

9.1 基础语法

#!/bin/bash

# 变量
name="Alice"
age=25
echo "Hello, $name!"

# 字符串
greeting="Hello, ${name}!"
greeting='Hello, ${name}!'  # 单引号不解析变量

# 数组
arr=(1 2 3 4 5)
echo ${arr[0]}               # 第一个元素
echo ${arr[@]}               # 所有元素
echo ${<a class="inline-tag" href="/blog/tag/arr.html">#arr</a>[@]}              # 数组长度

9.2 条件判断

# 数值比较
if [ $a -eq $b ]; then
    echo "相等"
fi

# 字符串
if [ "$str" = "hello" ]; then
    echo "匹配"
fi

# 文件测试
if [ -f file.txt ]; then
    echo "是文件"
fi
if [ -d dir/ ]; then
    echo "是目录"
fi
if [ -z "$var" ]; then
    echo "变量为空"
fi

# 常用文件测试
# -e: 存在
# -f: 普通文件
# -d: 目录
# -r/w/x: 读写执行权限
# -z: 长度为0
# -n: 长度非0

9.3 循环

# for循环
for i in {1..5}; do
    echo $i
done

for fruit in apple banana cherry; do
    echo $fruit
done

# while循环
count=0
while [ $count -lt 5 ]; do
    echo $count
    ((count++))
done

# 读取文件
while read line; do
    echo $line
done < file.txt

# 循环控制
break    # 跳出循环
continue # 跳过本次迭代

9.4 函数

function greet() {
    echo "Hello, $1!"  # $1是第一个参数
    return 42           # 返回值
}

greet "Alice"
echo $?                   # 获取返回值

# 局部变量
function example() {
    local x=10
    echo $x
}

第十章 安全加固

10.1 防火墙

# UFW(Ubuntu)
ufw enable
ufw disable
ufw status

ufw allow 22/tcp       # 允许SSH
ufw allow 80/tcp       # 允许HTTP
ufw allow 443/tcp      # 允许HTTPS
ufw deny from 1.2.3.4   # 禁止IP

# firewalld(CentOS)
firewall-cmd --state
firewall-cmd --permanent --add-service=http
firewall-cmd --reload

10.2 SSH安全

# /etc/ssh/sshd_config 配置

# 禁止密码登录
PasswordAuthentication no

# 禁止root登录
PermitRootLogin no

# 更改默认端口
Port 22222

# 允许特定用户
AllowUsers alice bob

# 限制失败登录次数
MaxAuthTries 3

# 重启服务
systemctl restart sshd

10.3 定期维护

# 更新系统
apt update && apt upgrade -y    # Debian/Ubuntu
yum update -y                    # CentOS

# 检查磁盘
df -h

# 检查内存
free -m

# 检查日志异常
grep "Failed" /var/log/auth.log
grep "Invalid" /var/log/auth.log

# fail2ban(防暴力破解)
apt install fail2ban
systemctl enable fail2ban

附录:常用命令速查

命令 功能
ls 列出目录内容
cd 切换目录
pwd 显示当前目录
mkdir 创建目录
rm 删除文件/目录
cp 复制文件/目录
mv 移动/重命名
cat 显示文件内容
grep 搜索文本
find 查找文件
chmod 修改权限
chown 修改所有者
ps 查看进程
kill 终止进程
top/htop 进程监控
df 磁盘使用
du 目录大小
free 内存使用
ping 网络测试
ssh 远程连接
scp 文件传输
tar 归档压缩
systemctl 服务管理
journalctl 日志查看

笔记整理:AI助手
更新时间:2026-03-19