Linux 操作系统使用说明

Linux 操作系统使用说明

1. Linux 简介

什么是 Linux

Linux 是一种自由、开放源代码的类 Unix 操作系统内核,由 Linus Torvalds 于 1991 年创建。现在通常所说的 Linux 指的是基于 Linux 内核的完整操作系统,包括各种系统工具和应用程序。

Linux 的特点

  • 开放性:遵循 GNU 通用公共许可证,源代码开放
  • 多用户多任务:支持多个用户同时使用系统,每个用户可以同时运行多个程序
  • 稳定性和可靠性:适合长时间运行的服务器环境
  • 安全性:内置强大的安全机制,包括用户权限、防火墙等
  • 可定制性:可以根据需求裁剪和定制系统
  • 广泛的硬件支持:支持各种硬件平台

常见 Linux 发行版

  • Debian/Ubuntu:以稳定性和易用性著称,适合桌面和服务器
  • Red Hat/CentOS/RHEL:企业级发行版,提供商业支持
  • Fedora:社区驱动的发行版,包含最新的软件
  • SUSE/openSUSE:德国开发的发行版,适合企业应用
  • Arch Linux:滚动更新的发行版,适合高级用户
  • Gentoo:高度可定制的发行版,需要从源代码编译安装

2. Linux 系统结构

目录结构

Linux 采用树形目录结构,所有文件和目录都从根目录 (/) 开始:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
/
├── bin/ # 基本命令二进制文件
├── boot/ # 启动加载程序和内核文件
├── dev/ # 设备文件
├── etc/ # 系统配置文件
├── home/ # 用户主目录
├── lib/ # 共享库文件
├── media/ # 可移动媒体挂载点
├── mnt/ # 临时挂载点
├── opt/ # 可选应用程序
├── proc/ # 进程和系统信息虚拟文件系统
├── root/ # 超级用户主目录
├── run/ # 运行时数据
├── sbin/ # 系统管理命令二进制文件
├── srv/ # 服务数据
├── sys/ # 内核设备树
├── tmp/ # 临时文件
├── usr/ # 用户程序和数据
└── var/ # 可变数据文件

系统启动过程

  1. BIOS/UEFI:基本输入输出系统或统一可扩展固件接口,负责初始化硬件
  2. 引导加载程序:如 GRUB,负责加载 Linux 内核
  3. 内核初始化:加载内核模块,初始化硬件设备
  4. 系统初始化进程:如 systemd,负责启动系统服务
  5. 用户登录:显示登录界面,等待用户登录

3. 文件系统

文件类型

  • **普通文件 (-)**:文本文件、二进制文件等
  • **目录文件 (d)**:包含其他文件和目录的文件
  • **符号链接 (l)**:指向其他文件的链接
  • **字符设备 (c)**:按字符读取的设备文件,如键盘、串口
  • **块设备 (b)**:按块读取的设备文件,如硬盘、USB 设备
  • **管道 (p)**:用于进程间通信的文件
  • **套接字 (s)**:用于网络通信的文件

文件权限

Linux 使用 9 位权限位来控制文件访问:

1
-rwxr-xr--  1 user group  1234 Jan 21 15:43 filename

权限位分为三组:

  • 所有者权限 (rwx):文件所有者的权限
  • 组权限 (r-x):文件所属组的权限
  • 其他用户权限 (r–):其他用户的权限

权限符号含义:

  • r:读权限 (4)
  • w:写权限 (2)
  • x:执行权限 (1)
  • **-**:无权限 (0)

文件系统命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
# 列出文件和目录
ls
ls -la # 列出所有文件,包括隐藏文件和详细信息

# 切换目录
cd /path/to/directory
cd ~ # 切换到用户主目录
cd .. # 切换到上级目录

# 创建目录
mkdir directory
mkdir -p parent/child # 创建嵌套目录

# 创建文件
touch filename

# 复制文件和目录
cp source destination
cp -r source_directory destination_directory

# 移动和重命名
mv source destination

# 删除文件
rm filename
rm -f filename # 强制删除

# 删除目录
rmdir directory # 只能删除空目录
rm -r directory # 递归删除目录和内容
rm -rf directory # 强制递归删除

# 查看文件内容
cat filename
less filename # 分页查看
head filename # 查看前几行
head -n 10 filename # 查看前 10 行
tail filename # 查看后几行
tail -f filename # 实时查看文件变化

# 查找文件
find /path/to/search -name "filename"
find /path/to/search -type f -name "*.txt" # 查找所有 .txt 文件
find /path/to/search -size +10M # 查找大于 10MB 的文件

# 查找内容
grep "pattern" filename
grep -r "pattern" /path/to/search # 递归查找
grep -i "pattern" filename # 忽略大小写
grep -n "pattern" filename # 显示行号

# 查看文件大小
du -h filename # 查看文件大小
du -sh directory # 查看目录总大小
df -h # 查看磁盘使用情况

# 压缩和解压缩
# tar 压缩
tar -czvf archive.tar.gz directory
# tar 解压缩
tar -xzvf archive.tar.gz
# zip 压缩
zip -r archive.zip directory
# zip 解压缩
unzip archive.zip

4. 用户和权限管理

用户管理命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# 创建用户
useradd username
useradd -m username # 创建用户并创建主目录
useradd -m -s /bin/bash username # 创建用户并设置默认 shell

# 设置用户密码
passwd username

# 修改用户信息
usermod -d /new/home/directory username # 修改用户主目录
usermod -s /bin/zsh username # 修改用户默认 shell
usermod -aG groupname username # 将用户添加到附加组

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

# 切换用户
su username # 切换到指定用户
su - username # 切换到指定用户并加载其环境变量
sudo command # 以超级用户身份执行命令

# 查看当前用户
whoami
id # 查看用户 ID 和所属组

组管理命令

1
2
3
4
5
6
7
8
9
10
11
# 创建组
groupadd groupname

# 修改组
groupmod -n newgroupname oldgroupname # 修改组名

# 删除组
groupdel groupname

# 查看用户所属组
groups username

权限管理命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 修改文件权限
chmod 755 filename # 设置权限为 rwxr-xr-x
chmod u+x filename # 给所有者添加执行权限
chmod g-w filename # 给组删除写权限
chmod o=r filename # 给其他用户设置读权限

# 修改文件所有者和组
chown user:group filename
chown user filename # 只修改所有者
chown :group filename # 只修改组
chown -R user:group directory # 递归修改目录及其内容

# 修改特殊权限
chmod +t directory # 设置粘性位
chmod +s filename # 设置 SUID/SGID

5. 软件管理

Debian/Ubuntu 系统

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# 更新软件包列表
apt update

# 升级所有软件包
apt upgrade
apt full-upgrade # 升级软件包并处理依赖关系变化

# 安装软件包
apt install packagename
apt install packagename1 packagename2 # 安装多个软件包

# 卸载软件包
apt remove packagename
apt purge packagename # 卸载软件包并删除配置文件

# 搜索软件包
apt search keyword

# 查看软件包信息
apt show packagename

# 清理缓存
apt clean
apt autoclean

Red Hat/CentOS/RHEL 系统

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# 更新软件包列表
yum check-update
dnf check-update # RHEL 8+ 使用 dnf

# 升级所有软件包
yum update
dnf update

# 安装软件包
yum install packagename
dnf install packagename

# 卸载软件包
yum remove packagename
dnf remove packagename

# 搜索软件包
yum search keyword
dnf search keyword

# 查看软件包信息
yum info packagename
dnf info packagename

# 清理缓存
yum clean all
dnf clean all

编译安装

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 下载源代码
wget https://example.com/package.tar.gz

# 解压缩
tar -xzvf package.tar.gz
cd package

# 配置
./configure
./configure --prefix=/usr/local # 自定义安装目录

# 编译
make

# 安装
sudo make install

# 卸载
sudo make uninstall

6. 进程管理

进程查看命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 查看所有进程
ps aux
ps -ef

# 查看进程树
pstree

# 实时查看进程
htop # 交互式进程查看器
top # 命令行进程查看器

# 根据条件查找进程
ps aux | grep processname
pgrep processname

# 查看进程详细信息
ps -p PID -o pid,ppid,cmd,%cpu,%mem

进程控制命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# 终止进程
kill PID
kill -9 PID # 强制终止进程

# 终止所有匹配的进程
pkill processname

# 向进程发送信号
kill -SIGTERM PID # 发送终止信号(默认)
kill -SIGHUP PID # 发送挂起信号
kill -SIGKILL PID # 发送杀死信号

# 后台运行进程
command &

# 将前台进程移到后台
Ctrl + Z # 暂停进程
fg # 恢复到前台
bg # 放到后台继续运行

# 查看后台进程
jobs

# 控制后台进程
fg %jobnumber # 将指定作业移到前台
bg %jobnumber # 将指定作业放到后台继续运行
kill %jobnumber # 终止指定作业

7. 服务管理

systemd 服务管理

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# 查看服务状态
systemctl status servicename

# 启动服务
systemctl start servicename

# 停止服务
systemctl stop servicename

# 重启服务
systemctl restart servicename

# 重新加载服务配置
systemctl reload servicename

# 设置服务开机自启
systemctl enable servicename

# 禁用服务开机自启
systemctl disable servicename

# 查看服务是否开机自启
systemctl is-enabled servicename

# 查看所有服务状态
systemctl list-units --type=service
systemctl list-units --type=service --state=running # 只查看运行中的服务

# 查看服务依赖
systemctl list-dependencies servicename

旧系统服务管理(SysVinit)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 查看服务状态
service servicename status

# 启动服务
service servicename start

# 停止服务
service servicename stop

# 重启服务
service servicename restart

# 重新加载服务配置
service servicename reload

# 设置服务开机自启
chkconfig servicename on

# 禁用服务开机自启
chkconfig servicename off

# 查看服务开机自启状态
chkconfig --list servicename

8. 网络管理

网络配置命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# 查看网络接口信息
ip addr
ifconfig # 旧命令

# 查看路由表
ip route
route -n # 旧命令

# 查看网络连接
ss -tuln
netstat -tuln # 旧命令

# 测试网络连接
ping example.com
ping -c 4 example.com # 发送 4 个 ICMP 包

# 测试域名解析
nslookup example.com
dig example.com

# 查看本地 DNS 配置
cat /etc/resolv.conf

# 查看网络接口统计信息
ip -s link

# 配置网络接口(临时)
ip addr add 192.168.1.100/24 dev eth0
ip link set eth0 up
ip link set eth0 down

防火墙配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# 查看防火墙状态
# iptables(旧系统)
iptables -L -n

# firewalld(新系统)
systemctl status firewalld
firewall-cmd --state

# 查看防火墙规则
firewall-cmd --list-all

# 开放端口
firewall-cmd --add-port=80/tcp --permanent # 永久开放 80 端口
firewall-cmd --reload # 重新加载配置

# 关闭端口
firewall-cmd --remove-port=80/tcp --permanent
firewall-cmd --reload

# 开放服务
firewall-cmd --add-service=http --permanent
firewall-cmd --reload

# 关闭服务
firewall-cmd --remove-service=http --permanent
firewall-cmd --reload

# 查看已开放的端口和服务
firewall-cmd --list-ports
firewall-cmd --list-services

9. 系统监控

系统信息命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# 查看系统信息
uname -a
uname -r # 查看内核版本

# 查看系统架构
arch

# 查看发行版信息
cat /etc/os-release
lsb_release -a

# 查看系统启动时间
uptime
who -b

# 查看 CPU 信息
cat /proc/cpuinfo
lscpu

# 查看内存信息
cat /proc/meminfo
free -h

# 查看磁盘信息
lsblk
fdisk -l

# 查看系统负载
uptime
w

系统性能监控

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# CPU 和内存监控
top
htop

# 磁盘 I/O 监控
iotop
iostat

# 网络监控
iftop
tcpdump # 网络数据包捕获
tcpdump -i eth0 port 80 # 监控 eth0 接口上的 80 端口

# 系统资源使用情况
sar # 系统活动报告
sar -u # CPU 使用情况
sar -r # 内存使用情况
sar -d # 磁盘 I/O 情况
sar -n DEV # 网络接口情况

10. 资源管理

CPU 资源管理

进程优先级管理

1
2
3
4
5
6
7
8
# 启动程序时设置优先级(nice 值范围:-20 到 19,值越小优先级越高)
nice -n 5 command

# 调整已运行进程的优先级(PID 为进程 ID)
renice -n 10 PID

# 以高优先级运行命令
sudo nice -n -5 command

CPU 亲和性设置

1
2
3
4
5
6
7
8
# 查看进程的 CPU 亲和性
taskset -p PID

# 设置进程只在特定 CPU 上运行(例如 CPU 0 和 1)
taskset -cp 0,1 PID

# 启动程序时设置 CPU 亲和性
taskset -c 0,1 command

CPU 限制工具

1
2
3
4
5
6
7
8
9
# 限制进程使用的 CPU 百分比(需要先安装 cpulimit)
sudo apt install cpulimit # Debian/Ubuntu
sudo yum install cpulimit # CentOS/RHEL

# 限制进程使用不超过 50% 的 CPU
cpulimit -p PID -l 50

# 启动程序时限制 CPU 使用
cpulimit -l 50 -- command

内存资源管理

内存使用监控

1
2
3
4
5
6
7
# 查看内存使用情况
free -h
cat /proc/meminfo

# 查看进程的内存使用情况
top # 按 Shift+M 排序
ps aux --sort=-%mem | head -10

交换空间管理

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 查看交换空间使用情况
swapon -s
free -h

# 添加交换文件
sudo dd if=/dev/zero of=/swapfile bs=1G count=4 # 创建 4GB 交换文件
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile

# 永久启用交换文件
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

# 禁用交换空间
sudo swapoff /swapfile

内存限制

1
2
3
4
5
6
# 使用 ulimit 限制进程可使用的虚拟内存大小
ulimit -v 1048576 # 限制为 1GB

# 永久设置限制(编辑 /etc/security/limits.conf)
echo '* soft as 1048576' | sudo tee -a /etc/security/limits.conf
echo '* hard as 1048576' | sudo tee -a /etc/security/limits.conf

磁盘资源管理

磁盘配额

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# 安装磁盘配额工具
sudo apt install quota # Debian/Ubuntu
sudo yum install quota # CentOS/RHEL

# 启用磁盘配额(编辑 /etc/fstab,添加 usrquota,grpquota 选项)
# 例如:/dev/sda1 / ext4 defaults,usrquota,grpquota 0 1

# 重新挂载文件系统
sudo mount -o remount /

# 初始化配额数据库
sudo quotacheck -ugm /

# 启用配额
sudo quotaon /

# 设置用户配额
sudo edquota -u username

# 设置组配额
sudo edquota -g groupname

# 查看配额信息
sudo quota -u username
sudo repquota /

磁盘空间监控

1
2
3
4
5
6
7
8
9
# 查看磁盘使用情况
df -h

# 查看目录使用情况
du -h /path/to/directory
du -sh /path/to/directory # 只显示总和

# 查找大文件
sudo find / -type f -size +100M 2>/dev/null | sort -nr | head -10

磁盘 I/O 调度

1
2
3
4
5
6
7
8
# 查看当前磁盘 I/O 调度器
cat /sys/block/sda/queue/scheduler

# 临时更改 I/O 调度器(例如改为 noop)
sudo echo noop > /sys/block/sda/queue/scheduler

# 永久更改 I/O 调度器(编辑 /etc/default/grub,添加 elevator=noop)
# 然后运行 sudo update-grub 并重启

网络资源管理

带宽限制

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 使用 tc 命令限制带宽(需要 root 权限)
# 限制 eth0 接口的出站带宽为 1Mbps
sudo tc qdisc add dev eth0 root tbf rate 1mbit burst 32kbit latency 400ms

# 移除带宽限制
sudo tc qdisc del dev eth0 root

# 使用 wondershaper 工具(更简单的方法,需要安装)
sudo apt install wondershaper # Debian/Ubuntu
sudo yum install wondershaper # CentOS/RHEL

# 限制 eth0 接口的入站和出站带宽
sudo wondershaper eth0 1024 512 # 入站 1Mbps,出站 512Kbps

# 移除限制
sudo wondershaper clear eth0

网络连接限制

1
2
3
4
5
# 使用 iptables 限制并发连接数
sudo iptables -A INPUT -p tcp --syn --dport 80 -m connlimit --connlimit-above 10 -j REJECT

# 限制特定 IP 的连接速率
sudo iptables -A INPUT -p tcp --dport 80 -s 192.168.1.0/24 -m limit --limit 10/minute --limit-burst 20 -j ACCEPT

综合资源管理工具

cgroups(Control Groups)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 安装 cgroup 工具
sudo apt install cgroup-tools # Debian/Ubuntu
sudo yum install libcgroup-tools # CentOS/RHEL

# 创建 cgroup
sudo cgcreate -g cpu,memory:mygroup

# 设置 CPU 限制(最大 50%)
sudo cgset -r cpu.cfs_quota_us=50000 mygroup

# 设置内存限制(最大 1GB)
sudo cgset -r memory.limit_in_bytes=1073741824 mygroup

# 在 cgroup 中运行命令
sudo cgexec -g cpu,memory:mygroup command

# 删除 cgroup
sudo cgdelete -g cpu,memory:mygroup

systemd 资源控制

1
2
3
4
5
6
7
8
9
10
11
12
13
# 查看当前服务的资源限制
systemctl show --property=MemoryLimit,CPUQuota servicename

# 编辑服务文件添加资源限制
sudo systemctl edit --full servicename

# 在 [Service] 部分添加:
# MemoryLimit=1G
# CPUQuota=50%

# 重新加载并重启服务
sudo systemctl daemon-reload
sudo systemctl restart servicename

11. 常用工具

文本编辑器

1
2
3
4
5
6
7
8
# Vim
vim filename

# Nano
nano filename

# Emacs
emacs filename

系统工具

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# 网络工具
curl example.com # 发送 HTTP 请求
wget example.com # 下载文件

# 文件传输
scp localfile user@remote:/path/to/destination # 复制文件到远程
scp user@remote:/path/to/file localdestination # 从远程复制文件
rsync -avz localdirectory user@remote:/path/to/destination # 同步目录

# 终端多路复用
tmux # 启动 tmux
tmux new -s sessionname # 创建新会话
tmux attach -t sessionname # 连接到会话
tmux list-sessions # 列出所有会话

screen # 启动 screen
screen -S sessionname # 创建新会话
screen -r sessionname # 连接到会话
screen -ls # 列出所有会话

# 系统日志
journalctl # 查看系统日志
journalctl -u servicename # 查看特定服务日志
journalctl -f # 实时查看日志
cat /var/log/syslog # 查看系统日志(旧系统)
cat /var/log/messages # 查看系统日志(RHEL/CentOS)
cat /var/log/auth.log # 查看认证日志(Debian/Ubuntu)
cat /var/log/secure # 查看认证日志(RHEL/CentOS)

12. 故障排除

常见问题解决

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# 网络不通
# 检查网络接口状态
ip link
# 检查 IP 配置
ip addr
# 检查路由
ip route
# 检查 DNS 配置
cat /etc/resolv.conf
# 测试网络连接
ping -c 4 8.8.8.8
ping -c 4 example.com

# 服务无法启动
# 查看服务状态
systemctl status servicename
# 查看服务日志
journalctl -u servicename
# 检查配置文件
sudo nvim /etc/servicename/servicename.conf

# 磁盘空间不足
# 查看磁盘使用情况
df -h
# 查找大文件
find / -type f -size +100M 2>/dev/null | sort -rh
# 清理临时文件
sudo rm -rf /tmp/*
sudo journalctl --vacuum-time=7d # 清理 7 天前的日志

# 内存不足
# 查看内存使用情况
free -h
# 查看进程内存使用
top
htop
# 查找内存使用高的进程
ps aux --sort=-%mem | head -10

13. 常用快捷键

终端快捷键

  • Ctrl + C:终止当前命令
  • Ctrl + D:退出当前会话
  • Ctrl + Z:暂停当前进程
  • Ctrl + L:清屏
  • Ctrl + A:光标移到行首
  • Ctrl + E:光标移到行尾
  • Ctrl + U:删除光标前的内容
  • Ctrl + K:删除光标后的内容
  • Ctrl + W:删除光标前的一个单词
  • Ctrl + R:搜索历史命令
  • Tab:自动补全命令和文件名
  • ↑/↓:浏览历史命令

Vim 快捷键

  • i:进入插入模式
  • Esc:退出插入模式,进入命令模式
  • :w:保存文件
  • :q:退出 Vim
  • :wq:保存并退出
  • **:q!**:强制退出,不保存
  • yy:复制当前行
  • p:粘贴
  • dd:删除当前行
  • u:撤销
  • Ctrl + r:重做
  • /pattern:搜索模式
  • n:下一个匹配项
  • N:上一个匹配项

希望这份 Linux 操作系统使用说明对你有所帮助!如果有任何问题,请随时查阅 Linux 官方文档Linux 手册页.