Linux:详细学习笔记
目录
- Linux简介
- Linux发行版
- Linux安装
- Linux目录结构
- 基础命令
- 文件和目录操作
- 文本处理
- 进程管理
- 用户和权限管理
- 网络管理
- 系统监控
- 软件包管理
- 系统服务管理
- Shell编程基础
- 系统安全
- 日志管理
- 备份和恢复
- 性能优化
- 故障排除
- 进阶技巧
Linux简介
什么是Linux
Linux是一个开源的类Unix操作系统内核,由芬兰计算机科学家林纳斯·托瓦兹(Linus Torvalds)于1991年创建。Linux不仅仅是一个内核,通常指的是基于Linux内核的完整操作系统。
Linux的特点
开源免费:源代码完全开放,任何人都可以查看、修改和分发
多用户多任务:支持多个用户同时使用,可以同时运行多个程序
稳定性强:系统运行稳定,很少出现崩溃
安全性高:具有完善的权限管理机制
可移植性好:可以运行在各种硬件平台上
网络功能强大:内置丰富的网络功能
Linux的应用领域
服务器操作系统
嵌入式系统
超级计算机
移动设备(Android)
云计算平台
容器技术
Linux发行版
主要发行版分类
Red Hat系列
Red Hat Enterprise Linux (RHEL):企业级发行版
CentOS:基于RHEL的免费版本
Fedora:Red Hat的社区版本
Debian系列
Debian:稳定性著称的发行版
Ubuntu:基于Debian的用户友好版本
Linux Mint:基于Ubuntu的桌面发行版
SUSE系列
SUSE Linux Enterprise:企业级发行版
openSUSE:社区版本
Arch系列
Arch Linux:滚动更新的发行版
Manjaro:基于Arch的用户友好版本
如何选择发行版
初学者:Ubuntu、Linux Mint
服务器:CentOS、Ubuntu Server、Debian
开发者:Fedora、Ubuntu
高级用户:Arch Linux、Gentoo
Linux安装
安装前准备
硬件要求检查
CPU:x86_64架构
内存:至少2GB(推荐4GB以上)
硬盘:至少20GB空间
制作安装介质
下载ISO镜像文件
制作USB启动盘或刻录DVD
安装过程(以Ubuntu为例)
1、启动安装程序
2、选择语言和键盘布局
3、连接网络
4、选择安装类型
全新安装
双系统安装
其他选项(自定义分区)
5、磁盘分区
根分区(/):15GB以上
交换分区(swap):内存大小的1-2倍
家目录分区(/home):剩余空间
6、创建用户账户
7、完成安装
虚拟机安装
推荐使用VirtualBox或VMware进行虚拟机安装:
# VirtualBox安装命令(Ubuntu)
sudo apt update
sudo apt install virtualbox
Linux目录结构
根目录结构
/
├── bin/ # 基本命令二进制文件
├── boot/ # 启动文件
├── dev/ # 设备文件
├── etc/ # 系统配置文件
├── home/ # 用户主目录
├── lib/ # 库文件
├── media/ # 可移动媒体挂载点
├── mnt/ # 临时挂载点
├── opt/ # 可选软件包
├── proc/ # 进程和系统信息
├── root/ # root用户主目录
├── sbin/ # 系统管理命令
├── tmp/ # 临时文件
├── usr/ # 用户程序
└── var/ # 可变数据
重要目录详解
/bin:存放常用命令,如ls、cp、mv等
/etc:系统配置文件目录
/home:普通用户的主目录
/usr:用户安装的程序和文件
/var:存放经常变化的文件,如日志文件
/tmp:临时文件目录
/proc:虚拟文件系统,显示内核信息
基础命令
文件和目录操作
# 查看当前目录
pwd
# 列出文件和目录
ls # 基本列表
ls -l # 详细信息
ls -la # 包含隐藏文件
ls -lh # 人性化显示文件大小
# 切换目录
cd /path/to/directory # 切换到指定目录
cd ~ # 切换到主目录
cd .. # 返回上级目录
cd - # 返回上次访问的目录
# 创建目录
mkdir dirname # 创建单个目录
mkdir -p path/to/dir # 递归创建目录
# 删除目录
rmdir dirname # 删除空目录
rm -rf dirname # 递归删除目录及内容
文件操作
# 创建文件
touch filename # 创建空文件
echo"content" > file # 创建文件并写入内容
# 复制文件
cp source destination # 复制文件
cp -r source dest # 递归复制目录
# 移动/重命名文件
mv oldname newname # 重命名
mv file /path/to/dest # 移动文件
# 删除文件
rm filename # 删除文件
rm -f filename # 强制删除
rm -i filename # 交互式删除
查看文件内容
# 查看文件内容
cat filename # 显示全部内容
less filename # 分页显示
more filename # 分页显示(简化版)
head filename # 显示前10行
head -n 20 filename # 显示前20行
tail filename # 显示后10行
tail -f filename # 实时显示文件更新
文件和目录操作
文件权限
Linux文件权限分为三类用户:
所有者(u):文件的创建者
所属组(g):文件所属的用户组
其他用户(o):除所有者和所属组外的其他用户
权限类型:
读取(r):4
写入(w):2
执行(x):1
# 查看文件权限
ls -l filename
# 修改文件权限
chmod 755 filename # 数字方式
chmod u+x filename # 符号方式
chmod g-w filename # 移除组写权限
chmod o=r filename # 设置其他用户只读
# 修改文件所有者
chown user:group filename
chown user filename
chgrp group filename
文件查找
# find命令
find /path -name "filename" # 按名称查找
find /path -type f # 查找文件
find /path -type d # 查找目录
find /path -size +100M # 查找大于100M的文件
find /path -mtime -7 # 查找7天内修改的文件
# locate命令(需要先更新数据库)
updatedb # 更新数据库
locate filename # 快速查找文件
# which命令
which command # 查找命令的位置
文件链接
# 硬链接
ln source_file hard_link
# 软链接(符号链接)
ln -s source_file soft_link
# 查看链接信息
ls -l link_file
文本处理
grep命令
# 基本搜索
grep "pattern" filename # 搜索模式
grep -i "pattern" filename # 忽略大小写
grep -n "pattern" filename # 显示行号
grep -v "pattern" filename # 反向搜索
grep -r "pattern" directory # 递归搜索
# 正则表达式
grep "^start" filename # 搜索以start开头的行
grep "end$" filename # 搜索以end结尾的行
grep "[0-9]" filename # 搜索包含数字的行
sed命令
# 替换文本
sed 's/old/new/' filename # 替换每行第一个匹配
sed 's/old/new/g' filename # 替换所有匹配
sed 's/old/new/gi' filename # 替换所有匹配(忽略大小写)
# 删除行
sed '2d' filename # 删除第2行
sed '/pattern/d' filename # 删除包含模式的行
# 插入和追加
sed '2i
ew line' filename # 在第2行前插入
sed '2a
ew line' filename # 在第2行后追加
awk命令
# 基本用法
awk '{print $1}' filename # 打印第一列
awk '{print $1, $3}' filename # 打印第一和第三列
awk '{print NF}' filename # 打印每行的字段数
awk '{print NR, $0}' filename # 打印行号和内容
# 条件处理
awk '$1 > 100' filename # 打印第一列大于100的行
awk '/pattern/ {print $2}' file # 匹配模式并打印第二列
# 计算
awk '{sum += $1} END {print sum}' file # 计算第一列的总和
其他文本处理工具
# sort排序
sort filename # 按字典序排序
sort -n filename # 按数字排序
sort -r filename # 反向排序
sort -k2 filename # 按第二列排序
# uniq去重
uniq filename # 去除相邻重复行
sort filename | uniq # 去除所有重复行
uniq -c filename # 统计重复次数
# cut切割
cut -d':' -f1 /etc/passwd # 以:为分隔符,取第一字段
cut -c1-10 filename # 取每行的1-10个字符
# tr替换
tr 'a-z''A-Z' < filename # 转换大小写
tr -d '0-9' < filename # 删除数字
进程管理
查看进程
# ps命令
ps # 显示当前终端的进程
ps aux # 显示所有进程详细信息
ps -ef # 显示所有进程完整信息
ps -u username # 显示指定用户的进程
# top命令
top # 实时显示进程信息
htop # 增强版top(需要安装)
# pgrep命令
pgrep process_name # 查找进程ID
pgrep -u username # 查找指定用户的进程
进程控制
# 后台运行
command & # 在后台运行命令
nohup command & # 不挂断后台运行
# 进程信号
kill PID # 终止进程(SIGTERM)
kill -9 PID # 强制终止进程(SIGKILL)
kill -STOP PID # 暂停进程
kill -CONT PID # 继续进程
# killall命令
killall process_name # 终止所有同名进程
pkill process_name # 根据名称终止进程
作业控制
# 作业管理
jobs # 显示作业列表
bg %1 # 将作业1放到后台
fg %1 # 将作业1放到前台
disown %1 # 分离作业
# 会话管理
screen # 创建新会话
screen -S session_name # 创建命名会话
screen -r session_name # 恢复会话
screen -ls # 列出所有会话
# tmux(推荐)
tmux new -s session_name # 创建新会话
tmux attach -t session_name # 连接会话
tmux list-sessions # 列出会话
用户和权限管理
用户管理
# 添加用户
useradd username # 添加用户
useradd -m username # 添加用户并创建主目录
useradd -s /bin/bash username # 指定shell
# 设置密码
passwd username # 设置用户密码
passwd # 修改当前用户密码
# 修改用户
usermod -s /bin/zsh username # 修改用户shell
usermod -G group username # 添加用户到组
usermod -aG group username # 追加用户到组
# 删除用户
userdel username # 删除用户
userdel -r username # 删除用户和主目录
组管理
# 添加组
groupadd groupname # 添加组
# 修改组
groupmod -n newname oldname # 重命名组
# 删除组
groupdel groupname # 删除组
# 查看组信息
groups username # 查看用户所属组
id username # 查看用户ID和组ID
sudo权限
# 编辑sudo配置
visudo # 安全编辑sudo配置文件
# 添加sudo权限
# 在/etc/sudoers中添加:
username ALL=(ALL:ALL) ALL # 给用户完全sudo权限
%groupname ALL=(ALL:ALL) ALL # 给组完全sudo权限
# 使用sudo
sudo command # 以root权限执行命令
sudo -u username command # 以指定用户权限执行
sudo su - # 切换到root用户
文件权限高级操作
# 特殊权限
chmod +s filename # 设置SUID/SGID
chmod +t directory # 设置粘滞位
# ACL权限
setfacl -m u:username:rwx file # 设置用户ACL权限
setfacl -m g:groupname:rx file # 设置组ACL权限
getfacl filename # 查看ACL权限
网络管理
网络配置
# 查看网络接口
ip addr show # 显示网络接口信息
ip a # 简化命令
ifconfig # 传统命令(需要安装net-tools)
# 配置网络接口
ip addr add 192.168.1.100/24 dev eth0 # 添加IP地址
ip link set eth0 up # 启用网络接口
ip link set eth0 down # 禁用网络接口
# 路由管理
ip route show # 显示路由表
ip route add default via 192.168.1.1 # 添加默认路由
ip route del 192.168.2.0/24 # 删除路由
网络测试
# ping测试
ping hostname # 测试连通性
ping -c 4 hostname # 发送4个包
# 域名解析
nslookup hostname # 查询DNS记录
dig hostname # 详细DNS查询
host hostname # 简单DNS查询
# 端口测试
telnet hostname port # 测试端口连通性
nc -zv hostname port # 使用netcat测试
# 网络连接
netstat -tuln # 显示监听端口
netstat -an # 显示所有连接
ss -tuln # 现代化的netstat替代品
防火墙管理
# ufw(Ubuntu)
ufw enable # 启用防火墙
ufw disable # 禁用防火墙
ufw allow 22 # 允许SSH端口
ufw deny 80 # 拒绝HTTP端口
ufw status # 查看防火墙状态
# firewalld(CentOS/RHEL)
systemctl start firewalld # 启动防火墙
firewall-cmd --list-all # 查看所有规则
firewall-cmd --add-port=80/tcp --permanent # 添加端口规则
firewall-cmd --reload # 重新加载配置
# iptables(底层防火墙)
iptables -L # 查看规则
iptables -A INPUT -p tcp --dport 22 -j ACCEPT # 添加规则
系统监控
系统资源监控
# CPU监控
top # 实时进程监控
htop # 增强版top
sar -u 1 5 # CPU使用率统计
# 内存监控
free -h # 内存使用情况
vmstat 1 5 # 虚拟内存统计
sar -r 1 5 # 内存使用率统计
# 磁盘监控
df -h # 磁盘空间使用
du -sh directory # 目录大小
iotop # 磁盘I/O监控
sar -d 1 5 # 磁盘活动统计
系统信息
# 系统信息
uname -a # 系统信息
lsb_release -a # 发行版信息
cat /proc/version # 内核版本
uptime # 系统运行时间
whoami # 当前用户
who # 当前登录用户
w # 详细登录信息
# 硬件信息
lscpu # CPU信息
lsmem # 内存信息
lsblk # 块设备信息
lsusb # USB设备信息
lspci # PCI设备信息
日志监控
# 系统日志
dmesg # 内核消息
journalctl # systemd日志
journalctl -f # 实时查看日志
journalctl -u service_name # 查看服务日志
# 日志文件
tail -f /var/log/syslog # 实时查看系统日志
tail -f /var/log/auth.log # 认证日志
tail -f /var/log/apache2/access.log # Web服务器日志
软件包管理
Debian/Ubuntu系列(APT)
# 更新软件包列表
apt update # 更新包列表
apt upgrade # 升级所有包
apt full-upgrade # 完整升级
# 安装软件包
apt install package_name # 安装软件包
apt install -y package_name # 自动确认安装
apt install ./package.deb # 安装本地deb包
# 搜索和查询
apt search keyword # 搜索软件包
apt show package_name # 显示包信息
apt list --installed # 列出已安装包
# 删除软件包
apt remove package_name # 删除软件包
apt purge package_name # 完全删除(包括配置)
apt autoremove # 删除不需要的依赖
# 软件源管理
add-apt-repository ppa:user/repo # 添加PPA源
Red Hat系列(YUM/DNF)
# CentOS/RHEL(YUM)
yum update # 更新所有包
yum install package_name # 安装软件包
yum search keyword # 搜索软件包
yum info package_name # 显示包信息
yum remove package_name # 删除软件包
yum list installed # 列出已安装包
# Fedora(DNF)
dnf update # 更新所有包
dnf install package_name # 安装软件包
dnf search keyword # 搜索软件包
dnf info package_name # 显示包信息
dnf remove package_name # 删除软件包
源码编译安装
# 典型编译安装流程
tar -xzf package.tar.gz # 解压源码包
cd package/ # 进入源码目录
./configure # 配置编译选项
make # 编译
sudo make install # 安装
# 配置选项示例
./configure --prefix=/usr/local --enable-feature
系统服务管理
Systemd服务管理
# 服务控制
systemctl start service_name # 启动服务
systemctl stop service_name # 停止服务
systemctl restart service_name # 重启服务
systemctl reload service_name # 重新加载配置
# 服务状态
systemctl status service_name # 查看服务状态
systemctl is-active service_name # 检查服务是否运行
systemctl is-enabled service_name # 检查服务是否开机启动
# 开机启动管理
systemctl enable service_name # 设置开机启动
systemctl disable service_name # 禁用开机启动
# 列出服务
systemctl list-units --type=service # 列出所有服务
systemctl list-unit-files --type=service # 列出服务文件
创建自定义服务
# 创建服务文件
sudo nano /etc/systemd/system/myapp.service
# 服务文件内容示例
[Unit]
Description=My Application
After=network.target
[Service]
Type=simple
User=myuser
WorkingDirectory=/path/to/app
ExecStart=/path/to/app/start.sh
Restart=always
[Install]
WantedBy=multi-user.target
# 重新加载systemd
systemctl daemon-reload
systemctl enable myapp.service
systemctl start myapp.service
Shell编程基础
变量和环境
# 变量定义
name="John" # 定义变量
echo$name # 使用变量
echo${name} # 使用变量(推荐)
# 环境变量
export PATH=$PATH:/new/path # 添加到PATH
export MY_VAR="value" # 导出环境变量
env # 查看所有环境变量
echo$HOME # 主目录
echo$USER # 当前用户
echo$PWD # 当前目录
条件判断
# if语句
if [ condition ]; then
echo"True"
elif [ other_condition ]; then
echo"Other"
else
echo"False"
fi
# 文件测试
if [ -f filename ]; then # 文件存在
echo"File exists"
fi
if [ -d dirname ]; then # 目录存在
echo"Directory exists"
fi
# 字符串比较
if [ "$str1" = "$str2" ]; then
echo"Strings are equal"
fi
# 数值比较
if [ $num1 -gt $num2 ]; then # 大于
echo"num1 is greater"
fi
循环结构
# for循环
for i in 1 2 3 4 5; do
echo$i
done
for file in *.txt; do
echo"Processing $file"
done
# while循环
counter=1
while [ $counter -le 5 ]; do
echo$counter
counter=$((counter + 1))
done
# until循环
until [ $counter -gt 5 ]; do
echo$counter
counter=$((counter + 1))
done
函数定义
# 函数定义
functiongreet() {
echo"Hello $1"
}
# 或者
greet() {
echo"Hello $1"
}
# 调用函数
greet "World"
# 带返回值的函数
calculate() {
local result=$(($1 + $2))
echo$result
}
sum=$(calculate 5 3)
echo"Sum is: $sum"
脚本参数处理
#!/bin/bash
# 脚本参数
echo"Script name: $0"
echo"First argument: $1"
echo"Second argument: $2"
echo"All arguments: $@"
echo"Number of arguments: $#"
# 参数检查
if [ $# -lt 2 ]; then
echo"Usage: $0 "
exit 1
fi
# getopts处理选项
whilegetopts"hf:o:" opt; do
case$optin
h)
echo"Help message"
exit 0
;;
f)
input_file="$OPTARG"
;;
o)
output_file="$OPTARG"
;;
?)
echo"Invalid option: -$OPTARG" >&2
exit 1
;;
esac
done
系统安全
用户认证安全
# 密码策略
# 编辑 /etc/login.defs
PASS_MAX_DAYS 90 # 密码最大有效期
PASS_MIN_DAYS 7 # 密码最小更换间隔
PASS_MIN_LEN 8 # 密码最小长度
PASS_WARN_AGE 7 # 密码过期警告天数
# 账户锁定策略
# 编辑 /etc/pam.d/common-auth
auth required pam_tally2.so deny=5 unlock_time=300
# 查看和解锁账户
pam_tally2 --user username # 查看失败登录次数
pam_tally2 --user username --reset # 重置计数器
SSH安全配置
# SSH服务配置(/etc/ssh/sshd_config)
Port 2222 # 更改默认端口
PermitRootLogin no # 禁止root直接登录
PasswordAuthentication no # 禁用密码认证
PubkeyAuthentication yes # 启用公钥认证
AllowUsers user1 user2 # 限制允许登录的用户
# 生成SSH密钥对
ssh-keygen -t rsa -b 4096 # 生成RSA密钥
ssh-keygen -t ed25519 # 生成Ed25519密钥(推荐)
# 复制公钥到服务器
ssh-copy-id user@hostname # 复制公钥
文件完整性检查
# 计算文件哈希
md5sum filename # MD5哈希
sha256sum filename # SHA256哈希
sha512sum filename # SHA512哈希
# 批量检查
find /path -type f -exec sha256sum {} ; > checksums.txt
sha256sum -c checksums.txt # 验证文件完整性
# 使用AIDE监控文件变化
aide --init # 初始化数据库
aide --check # 检查文件变化
系统审计
# auditd服务
systemctl enable auditd # 启用审计服务
systemctl start auditd # 启动审计服务
# 添加审计规则
auditctl -w /etc/passwd -p wa -k passwd_changes
auditctl -w /etc/shadow -p wa -k shadow_changes
# 查看审计日志
ausearch -k passwd_changes # 按关键字搜索
aureport --summary # 审计报告
日志管理
系统日志
# 重要日志文件
/var/log/syslog # 系统日志(Debian/Ubuntu)
/var/log/messages # 系统日志(Red Hat系列)
/var/log/auth.log # 认证日志
/var/log/kern.log # 内核日志
/var/log/boot.log # 启动日志
# 使用journalctl查看日志
journalctl # 查看所有日志
journalctl -n 50 # 查看最近50条
journalctl -f # 实时跟踪日志
journalctl -u ssh.service # 查看特定服务日志
journalctl --since "1 hour ago"# 查看1小时内的日志
journalctl --until "2023-01-01"# 查看指定时间前的日志
日志分析工具
# logrotate配置
# 编辑 /etc/logrotate.conf 或 /etc/logrotate.d/
/var/log/myapp.log {
daily # 每日轮转
missingok # 文件不存在不报错
rotate 52 # 保留52个备份
compress # 压缩旧日志
delaycompress # 延迟压缩
notifempty # 空文件不轮转
create 644 user group # 创建新文件的权限
postrotate
systemctl reload myapp
endscript
}
# 手动执行logrotate
logrotate -f /etc/logrotate.conf # 强制执行轮转
远程日志
# rsyslog远程日志配置
# 在 /etc/rsyslog.conf 中添加:
*.* @@remote-log-server:514 # UDP传输
*.* @@remote-log-server:514 # TCP传输
# 重启rsyslog服务
systemctl restart rsyslog
备份和恢复
tar命令备份
# 创建备份
tar -czf backup.tar.gz /path/to/backup # 创建压缩备份
tar -cjf backup.tar.bz2 /path/to/backup # 使用bzip2压缩
tar -cJf backup.tar.xz /path/to/backup # 使用xz压缩
# 恢复备份
tar -xzf backup.tar.gz # 解压到当前目录
tar -xzf backup.tar.gz -C /restore/path # 解压到指定目录
# 增量备份
tar -czf backup-full.tar.gz /data # 完整备份
tar -czf backup-inc.tar.gz --newer-mtime="2023-01-01" /data # 增量备份
# 查看备份内容
tar -tzf backup.tar.gz # 查看压缩包内容
rsync同步备份
# 本地同步
rsync -av source/ destination/ # 同步目录
rsync -av --delete source/ destination/ # 同步并删除目标多余文件
# 远程同步
rsync -av source/ user@remote:/path/ # 推送到远程
rsync -av user@remote:/path/ destination/ # 从远程拉取
# 排除文件
rsync -av --exclude='*.log' source/ dest/ # 排除日志文件
rsync -av --exclude-from=exclude.txt source/ dest/ # 从文件读取排除列表
# 断点续传
rsync -av --partial --progress source/ dest/ # 显示进度和断点续传
系统级备份
# 完整系统备份
tar --exclude=/proc --exclude=/sys --exclude=/dev
--exclude=/run --exclude=/mnt --exclude=/media
--exclude=/tmp --exclude=/lost+found
-czf system-backup.tar.gz /
# 使用dd备份分区
dd if=/dev/sda1 of=partition-backup.img bs=4M # 备份分区
dd if=partition-backup.img of=/dev/sda1 bs=4M # 恢复分区
# LVM快照备份
lvcreate -L 1G -s -n snap-data /dev/vg0/data # 创建快照
mount /dev/vg0/snap-data /mnt/snapshot # 挂载快照
# 备份快照数据
umount /mnt/snapshot # 卸载快照
lvremove /dev/vg0/snap-data # 删除快照
性能优化
系统性能分析
# CPU性能分析
top # 实时进程监控
htop # 增强版top
sar -u 1 5 # CPU使用率统计
iostat -x 1 5 # I/O统计
vmstat 1 5 # 虚拟内存统计
# 内存分析
free -h # 内存使用情况
pmap PID # 进程内存映射
smem -t # 内存使用详情(需要安装)
# 磁盘I/O分析
iotop # 实时I/O监控
iftop # 网络流量监控
nethogs # 按进程显示网络使用
内核参数优化
# 查看内核参数
sysctl -a # 查看所有参数
sysctl vm.swappiness # 查看特定参数
# 临时修改参数
sysctl vm.swappiness=10 # 减少交换使用
sysctl net.core.rmem_max=134217728 # 增加接收缓冲区
# 永久修改参数
# 编辑 /etc/sysctl.conf
vm.swappiness = 10
net.core.rmem_max = 134217728
net.core.wmem_max = 134217728
# 应用配置
sysctl -p # 重新加载配置
服务优化
# 禁用不需要的服务
systemctl list-units --type=service --state=running # 查看运行的服务
systemctl disable bluetooth # 禁用蓝牙服务
systemctl mask cups # 完全禁用打印服务
# 调整服务启动顺序
systemctl edit myservice # 编辑服务配置
# 添加依赖关系:
[Unit]
After=network.target
Requires=database.service
故障排除
系统启动问题
# 查看启动日志
journalctl -b # 查看本次启动日志
journalctl -b -1 # 查看上次启动日志
dmesg # 内核消息
# GRUB救援
# 在GRUB菜单按'e'编辑启动参数
# 在linux行末添加:
init=/bin/bash # 进入单用户模式
systemd.unit=rescue.target # 进入救援模式
# 修复文件系统
fsck /dev/sda1 # 检查并修复文件系统
fsck -y /dev/sda1 # 自动修复
网络问题诊断
# 连通性测试
ping -c 4 8.8.8.8 # 测试外网连通性
ping -c 4 gateway_ip # 测试网关连通性
traceroute hostname # 跟踪路由路径
# DNS问题
nslookup hostname # DNS查询
dig hostname # 详细DNS查询
cat /etc/resolv.conf # 查看DNS配置
# 端口和连接问题
netstat -tuln # 查看监听端口
ss -tuln # 现代替代命令
lsof -i :80 # 查看使用端口80的进程
磁盘空间问题
# 查找大文件
find / -size +100M 2>/dev/null # 查找大于100M的文件
du -sh /* 2>/dev/null | sort -hr # 按目录大小排序
# 清理空间
apt autoremove # 删除不需要的包
apt autoclean # 清理包缓存
journalctl --vacuum-time=7d # 清理7天前的日志
find /tmp -mtime +7 -delete # 删除7天前的临时文件
# 查找删除的文件但仍被占用的空间
lsof | grep deleted # 查找已删除但未释放的文件
性能问题诊断
# 查找高CPU使用进程
top -o %CPU # 按CPU使用率排序
ps aux --sort=-%cpu | head # 显示CPU使用最高的进程
# 查找高内存使用进程
top -o %MEM # 按内存使用率排序
ps aux --sort=-%mem | head # 显示内存使用最高的进程
# I/O性能测试
dd if=/dev/zero of=testfile bs=1M count=1000 # 写入测试
dd if=testfile of=/dev/null bs=1M # 读取测试
hdparm -t /dev/sda # 硬盘读取速度测试
进阶技巧
文本处理进阶
# 复杂的awk脚本
awk '
BEGIN { total = 0 }
$1 > 100 { total += $1; count++ }
END { print "Average:", total/count }
' datafile
# sed高级用法
sed -n '1,5p' file # 打印1-5行
sed '/start/,/end/d' file # 删除start到end之间的行
sed 's/(.*):(.*)/:/' file # 交换冒号分隔的两部分
# 正则表达式进阶
grep -P '(?<=d{3})d{4}' file # 使用Perl正则表达式
grep -E '^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+.[a-zA-Z]{2,}$' file # 匹配邮箱
进程间通信
# 管道和重定向
command1 | command2 # 管道
command > file 2>&1 # 重定向标准输出和错误输出
command < inputfile > outputfile # 输入输出重定向
# 命名管道
mkfifo mypipe # 创建命名管道
echo "data" > mypipe & # 写入数据
cat < mypipe # 读取数据
# 消息队列、信号量等
ipcs # 查看IPC资源
ipcrm -q msgid # 删除消息队列
系统调优技巧
# 文件描述符限制
ulimit -n # 查看文件描述符限制
ulimit -n 65536 # 设置文件描述符限制
# 在 /etc/security/limits.conf 中永久设置:
* soft nofile 65536
* hard nofile 65536
# TCP调优
echo'net.core.somaxconn = 65535' >> /etc/sysctl.conf
echo'net.ipv4.tcp_max_syn_backlog = 65535' >> /etc/sysctl.conf
sysctl -p
# 内存调优
echo'vm.dirty_ratio = 15' >> /etc/sysctl.conf
echo'vm.dirty_background_ratio = 5' >> /etc/sysctl.conf
自动化脚本
# Cron任务
crontab -e # 编辑定时任务
crontab -l # 查看定时任务
# Cron格式:分 时 日 月 周 命令
0 2 * * * /path/to/backup.sh # 每天2点执行备份
*/5 * * * * /path/to/check.sh # 每5分钟执行检查
# 系统启动脚本
# 创建 /etc/rc.local
#!/bin/bash
# 在此添加启动时执行的命令
exit 0
chmod +x /etc/rc.local
容器化技术基础
# Docker基础命令
docker run -it ubuntu:20.04 bash # 运行容器
docker ps # 查看运行的容器
docker images # 查看镜像
docker exec -it container_id bash # 进入容器
# 构建镜像
# 创建Dockerfile
FROM ubuntu:20.04
RUN apt update && apt install -y nginx
COPY index.html /var/www/html/
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
docker build -t myapp . # 构建镜像
docker run -p 80:80 myapp # 运行容器
总结
Linux是一个功能强大的操作系统,掌握它需要:
基础扎实:熟练掌握文件系统、基本命令和权限管理
实践为主:通过实际项目和问题解决来提高技能
持续学习:关注新技术和最佳实践
文档阅读:善用man页面和官方文档
社区参与:积极参与Linux社区,学习他人经验
学习建议
从基础命令开始,逐步深入
建立自己的Linux实验环境
多练习Shell脚本编写
学习系统管理和运维技能
关注安全和性能优化











