一、Linux基础入门
什么是Linux命令行?
Linux命令行(Command Line Interface,CLI)是与Linux系统交互的主要方式之一。与图形界面不同,命令行通过文本指令来控制系统,虽然学习曲线较陡,但具有以下优势:
- 高效快捷:熟练后可实现秒级操作
- 远程连接:通过SSH轻松管理远程服务器
- 可自动化:配合脚本实现批量处理
- 资源节省:不消耗图形界面资源
- 精确控制:可实现复杂精细的操作

打开终端
bash
# Ubuntu/Debian:Ctrl + Alt + T
# macOS:Command + Space 搜索"Terminal"
# Windows:WSL或安装Git Bash
# 远程连接Linux服务器
ssh username@server_ip
ssh -p 2222 username@server_ip # 指定端口
ssh -i ~/.ssh/private_key username@server_ip # 密钥登录
基础命令
bash
# 查看当前用户
whoami
# 查看主机名
hostname
# 查看当前目录
pwd
# 查看当前日期时间
date
# 查看日历
cal
cal 2026 # 查看全年日历
# 显示帮助信息
man ls # 查看命令手册
ls --help # 快速帮助
help cd # Shell内置命令帮助
二、文件和目录管理
目录操作
bash
# 切换目录
cd /home # 切换到绝对路径
cd ./folder # 切换到相对路径
cd .. # 返回上级目录
cd ~ # 返回用户主目录
cd - # 返回上一次目录
# 查看目录内容
ls # 简单列表
ls -l # 详细列表
ls -a # 显示隐藏文件
ls -lh # 人类可读大小
ls -lt # 按修改时间排序
ls -lS # 按文件大小排序
ls -R # 递归显示子目录
# 创建目录
mkdir folder # 创建单个目录
mkdir -p folder/sub # 递归创建
mkdir -p folder1 folder2 # 同时创建多个
# 删除目录
rmdir folder # 删除空目录
rm -rf folder # 删除非空目录(慎用)
文件操作
bash
# 创建文件
touch file.txt # 创建空文件
touch file1.txt file2.txt # 创建多个
touch -t 202604160830 file.txt # 设置时间戳
# 复制文件
cp source.txt dest.txt # 复制
cp -r folder/ backup/ # 递归复制目录
cp -i source.txt dest.txt # 询问确认
cp -v source.txt dest.txt # 显示过程
cp -p source.txt dest.txt # 保留属性
# 移动/重命名
mv old.txt new.txt # 重命名
mv file.txt /path/to/ # 移动文件
mv -i file.txt /path/ # 询问确认
mv folder1 folder2 # 重命名目录
# 删除文件
rm file.txt # 删除单个
rm -i file.txt # 询问确认
rm -f file.txt # 强制删除
rm -rf folder # 删除目录
# 查看文件类型
file image.jpg
file document.pdf
文件查找
bash
# find命令
find /home -name "*.txt" # 按名称查找
find /home -type f -name "*.log" # 查找所有日志文件
find /home -type d -name "backup" # 查找目录
find /home -mtime -7 # 7天内修改的文件
find /home -size +100M # 大于100MB的文件
find /home -user username # 按用户查找
find /home -perm 755 # 按权限查找
find /home -name "*.tmp" -delete # 找到并删除
# locate命令(更快,需先建立数据库)
locate filename
updatedb # 更新文件数据库
# which和whereis
which python3 # 查找命令位置
whereis python3 # 查找命令和手册位置
三、文本查看与处理
查看文件内容
bash
# cat命令
cat file.txt # 显示全部内容
cat -n file.txt # 显示行号
cat -b file.txt # 非空行编号
cat file1.txt file2.txt # 合并显示
cat > newfile.txt # 创建并输入内容
cat file1.txt >> file2.txt # 追加内容
# more和less(分页查看)
more file.txt # 空格下一页,q退出
less file.txt # 可上下翻页,/搜索
# head和tail
head file.txt # 默认前10行
head -n 20 file.txt # 前20行
tail file.txt # 默认后10行
tail -n 20 file.txt # 后20行
tail -f log.txt # 实时跟踪日志
tail -f -s 2 log.txt # 每2秒刷新
# wc命令
wc file.txt # 行数、词数、字符数
wc -l file.txt # 只看行数
wc -w file.txt # 只看词数
wc -c file.txt # 只看字符数
文本处理三剑客
grep – 文本搜索
bash
# 基本用法
grep "pattern" file.txt # 搜索匹配行
grep -i "pattern" file.txt # 忽略大小写
grep -n "pattern" file.txt # 显示行号
grep -v "pattern" file.txt # 反向选择
grep -c "pattern" file.txt # 统计匹配行数
grep -r "pattern" /path/ # 递归搜索
# 正则表达式
grep "^root" /etc/passwd # 以root开头
grep "bash$" /etc/passwd # 以bash结尾
grep "[0-9]\{3\}" file.txt # 匹配三位数字
grep -E "error|warning" log.txt # 多个匹配
# 输出控制
grep -l "pattern" *.txt # 只显示文件名
grep -o "pattern" file.txt # 只输出匹配部分
grep -A 2 "pattern" file.txt # 显示匹配后2行
grep -B 2 "pattern" file.txt # 显示匹配前2行
grep -C 2 "pattern" file.txt # 显示前后各2行
sed – 流编辑器
bash
# 基本替换
sed 's/old/new/' file.txt # 替换每行第一个
sed 's/old/new/g' file.txt # 替换所有
sed 's/old/new/2' file.txt # 替换第二个
# 替换并保存
sed -i 's/old/new/g' file.txt # 直接修改文件
sed -i.bak 's/old/new/g' file.txt # 备份后修改
# 限定范围
sed '1,10s/old/new/g' file.txt # 1-10行
sed '/start/,/end/s/old/new/g' file.txt # start到end之间
# 删除行
sed '3d' file.txt # 删除第3行
sed '1,5d' file.txt # 删除1-5行
sed '/pattern/d' file.txt # 删除匹配行
# 显示特定行
sed -n '5,10p' file.txt # 显示5-10行
sed -n '/pattern/p' file.txt # 显示匹配行
awk – 文本分析
bash
# 基本用法
awk '{print $1}' file.txt # 打印第一列
awk '{print $1, $3}' file.txt # 打印第1、3列
awk '{print NF}' file.txt # 打印列数
# 字段分隔符
awk -F: '{print $1}' /etc/passwd # 以:分隔
awk -F'[,;]' '{print $2}' file.txt # 多个分隔符
# 条件判断
awk '{if ($3 > 18) print $1}' file.txt
awk '$3 > 18 {print $1}' file.txt
# 内置变量
awk '{print NR, $0}' file.txt # NR当前行号
awk '{print NF, $NF}' file.txt # NF列数, $NF最后一列
awk 'BEGIN {FS=":"} {print $1}' file.txt # FS字段分隔符
awk 'BEGIN {OFS="-"} {print $1, $2}' file.txt # OFS输出分隔符
# 统计计算
awk '{sum+=$3} END {print sum}' file.txt
awk '{count++} END {print count}' file.txt
四、权限管理
理解权限
Linux的文件权限分为三组:所有者(owner)、用户组(group)、其他人(others)。每组有三种权限:读(r)、写(w)、执行(x)。
bash
# 查看文件权限
ls -l file.txt
# -rw-r--r-- 1 user group 1024 Apr 16 08:30 file.txt
# -文件 d目录 l链接
# rw-所有者权限
# r--用户组权限
# r--其他人权限
# 权限数值
# r=4, w=2, x=1
# rwx = 7
# rw- = 6
# r-x = 5
# r-- = 4
修改权限
bash
# 文字设定法
chmod u+x file.txt # 给所有者添加执行权限
chmod g-w file.txt # 给用户组移除写权限
chmod o+r file.txt # 给其他人添加读权限
chmod a+x file.txt # 给所有人添加执行权限
chmod +x file.txt # 同上
# 数字设定法
chmod 755 file.txt # rwxr-xr-x
chmod 644 file.txt # rw-r--r--
chmod 700 file.txt # rwx------
chmod 600 file.txt # rw-------
chmod 777 file.txt # rwxrwxrwx(慎用)
# 递归设置
chmod -R 755 folder/ # 递归设置目录权限
chmod -R +x folder/*.sh # 只设置shell文件
修改所有者
bash
# 修改文件所有者
chown user file.txt
# 修改所有者和用户组
chown user:group file.txt
# 递归修改
chown -R user:group folder/
# 只修改用户组
chgrp group file.txt
chgrp -R group folder/
特殊权限
bash
# SUID(4) - 执行时以所有者身份运行
chmod 4755 /usr/bin/passwd # passwd命令
chmod u+s /usr/bin/script
# SGID(2) - 执行时以用户组身份运行
chmod 2755 /usr/local/bin/script
# Sticky Bit(1) - 只允许所有者删除
chmod 1777 /tmp # 共享目录
五、进程管理
查看进程
bash
# 查看所有进程
ps aux # BSD风格
ps -ef # System V风格
ps -efH # 树状显示
# 查找特定进程
ps aux | grep nginx
ps -ef | grep python
# 实时监控进程
top # 动态显示
top -u username # 只看指定用户
top -p 1234 # 监控指定PID
htop # 增强版top(需安装)
# 按资源排序
top # 然后按 M(内存)P(CPU)T(时间)
进程操作
bash
# 以后台方式运行
command &
nohup command & # 忽略挂断信号
nohup command > output.log 2>&1 &
# 切换到后台/前台
Ctrl+Z # 挂起当前进程
jobs # 查看后台任务
fg %1 # 切换到前台
bg %1 # 后台继续运行
# 终止进程
kill PID # 正常终止
kill -9 PID # 强制终止
kill -15 PID # 礼貌终止(默认)
killall process_name # 按名称终止
pkill -f pattern # 按模式终止
# 查看进程树
pstree
pstree -p username # 指定用户
系统资源
bash
# 查看内存
free
free -h # 人类可读
free -m # 以MB为单位
# 查看磁盘
df -h # 磁盘使用
df -i # inode使用
# 查看CPU
lscpu # CPU详细信息
nproc # CPU核心数
# 资源监控
vmstat 1 5 # 每秒1次,共5次
iostat # I/O统计
netstat -tuln # 网络连接
ss -tuln # 同上,更快
六、用户和组管理
用户操作
bash
# 创建用户
useradd -m username # 创建用户并创建家目录
useradd -m -s /bin/bash username # 指定shell
useradd -m -G sudo username # 添加到sudo组
# 设置密码
passwd username
# 修改用户
usermod -l newname oldname # 重命名
usermod -L username # 锁定账户
usermod -U username # 解锁账户
usermod -aG group username # 添加到组
# 删除用户
userdel username # 删除用户
userdel -r username # 删除用户及家目录
组操作
bash
# 创建组
groupadd developers
# 添加用户到组
usermod -aG developers username
gpasswd -a username developers
# 查看用户组
groups username
id username
# 删除组
groupdel developers
sudo权限
bash
# 添加sudo权限
usermod -aG sudo username # Ubuntu/Debian
usermod -aG wheel username # CentOS/RHEL
# 编辑sudoers(危险)
visudo # 安全编辑
# 添加:username ALL=(ALL) ALL
# 无密码:username ALL=(ALL) NOPASSWD: ALL
七、网络配置
网络查看
bash
# 查看IP和网卡
ip addr
ip addr show eth0
ifconfig # 需要net-tools
# 查看网络连接
netstat -tuln # 监听端口
netstat -anp # 所有连接
ss -tuln # 更快
# 网络诊断
ping -c 4 example.com # 测试连通性
traceroute example.com # 路由追踪(需要安装)
tracepath example.com
nslookup example.com # DNS查询
dig example.com
host example.com
# 查看路由
ip route
route -n
网络配置
bash
# 临时设置IP(重启后失效)
ip addr add 192.168.1.100/24 dev eth0
ip addr del 192.168.1.100/24 dev eth0
# 启用/禁用网卡
ip link set eth0 up
ip link set eth0 down
# 设置网关
ip route add default via 192.168.1.1
# 永久配置(Ubuntu Netplan)
# /etc/netplan/*.yaml
远程传输
bash
# scp(安全复制)
scp file.txt user@host:/path/ # 上传
scp user@host:/path/file.txt ./ # 下载
scp -r folder/ user@host:/path/ # 递归复制
scp -P 2222 file.txt user@host:/path/ # 指定端口
# rsync(同步)
rsync -avz source/ user@host:/dest/ # 同步目录
rsync -avz --delete source/ user@host:/dest/ # 删除目标多余文件
rsync -avz -e "ssh -p 2222" source/ user@host:/dest/ # 指定端口
八、压缩和解压
tar命令
bash
# 打包
tar -cvf archive.tar folder/ # 打包
tar -cvzf archive.tar.gz folder/ # 打包并压缩gzip
tar -cvjf archive.tar.bz2 folder/ # 打包并压缩bzip2
tar -cvJf archive.tar.xz folder/ # 打包并压缩xz
# 解压
tar -xvf archive.tar # 解包
tar -xzvf archive.tar.gz # 解压gzip
tar -xjvf archive.tar.bz2 # 解压bzip2
tar -xJvf archive.tar.xz # 解压xz
tar -xzvf archive.tar.gz -C /dest/ # 解压到指定目录
# 查看内容
tar -tvf archive.tar # 不解压查看
zip命令
bash
# 压缩
zip -r archive.zip folder/
zip -q archive.zip *.txt
# 解压
unzip archive.zip
unzip archive.zip -d /dest/
unzip -l archive.zip # 只查看内容
其他格式
bash
# tar.gz/.tgz
tar -czvf archive.tgz folder/
# tar.xz(高压缩比)
tar -cJvf archive.tar.xz folder/
# 7z(需要安装p7zip)
7z a archive.7z folder/
7z x archive.7z
九、系统服务管理
systemctl
bash
# 启动/停止/重启服务
sudo systemctl start nginx
sudo systemctl stop nginx
sudo systemctl restart nginx
sudo systemctl reload nginx # 重载配置
# 查看状态
sudo systemctl status nginx
sudo systemctl is-active nginx
sudo systemctl is-enabled nginx
# 设置开机启动
sudo systemctl enable nginx
sudo systemctl disable nginx
# 查看所有服务
systemctl list-units --type=service
systemctl list-unit-files --type=service
# 查看失败的服务
systemctl --failed
service(旧版)
bash
# 对于使用SysV init的系统
sudo service nginx start
sudo service nginx stop
sudo service nginx restart
sudo service --status-all
定时任务
bash
# 编辑crontab
crontab -e # 编辑当前用户
crontab -l # 查看任务
crontab -r # 删除所有任务
# 定时任务格式
# * * * * * command
# 分 时 日 月 周
# 每分钟
* * * * * /path/to/script.sh
# 具体时间
30 8 * * * /path/to/script.sh # 每天8:30
0 */2 * * * /path/to/script.sh # 每2小时
# 指定时间
0 9 * * 1-5 /path/to/script.sh # 工作日9点
0 9 * * 1,3,5 /path/to/script.sh # 周一三五9点
# 输出重定向
0 9 * * * /path/to/script.sh >> /var/log/script.log 2>&1
# 查看日志
tail -f /var/log/syslog | grep CRON
十、磁盘管理
分区和挂载
bash
# 查看磁盘分区
lsblk
fdisk -l
parted -l
# 格式化
mkfs.ext4 /dev/sdb1
mkfs.xfs /dev/sdb1
mkfs.ntfs /dev/sdb1
# 挂载
mount /dev/sdb1 /mnt/data
mount -o ro /dev/sdb1 /mnt/readonly # 只读挂载
# 卸载
umount /mnt/data
umount /dev/sdb1
# 开机自动挂载
# 编辑 /etc/fstab
# /dev/sdb1 /mnt/data ext4 defaults 0 0
磁盘使用分析
bash
# 查看磁盘使用
df -h # 人类可读格式
df -i # inode使用
du -sh folder/ # 查看目录总大小
du -h --max-depth=1 # 只看一级目录
du -sh * # 查看当前目录各文件大小
# 找出大文件
find / -size +100M
find / -type f -size +100M -exec ls -lh {} \;
十一、日志管理
系统日志
bash
# 主要日志文件
/var/log/syslog # 系统日志(Debian/Ubuntu)
/var/log/messages # 系统日志(CentOS/RHEL)
/var/log/dmesg # 启动日志
/var/log/auth.log # 认证日志
/var/log/kern.log # 内核日志
/var/log/nginx/ # Nginx日志
/var/log/mysql/ # MySQL日志
# journalctl(systemd系统)
journalctl # 查看所有日志
journalctl -u nginx # 特定服务日志
journalctl -f # 实时跟踪
journalctl --since today # 今天日志
journalctl -p err # 错误级别
日志分析
bash
# 实时查看日志
tail -f /var/log/syslog
tail -f /var/log/nginx/access.log
# 搜索日志
grep "error" /var/log/syslog
grep -E "error|warning|critical" /var/log/syslog
# 统计访问量
awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head
# 找出访问最多的IP
awk '{print $1}' access.log | sort | uniq -c | sort -rn | head -10
十二、实战脚本
自动化备份脚本
bash
#!/bin/bash
# backup.sh - 自动备份脚本
# 配置
BACKUP_DIR="/backup"
SOURCE_DIR="/var/www"
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_FILE="backup_${DATE}.tar.gz"
# 创建备份目录
mkdir -p "$BACKUP_DIR"
# 执行备份
tar -czf "${BACKUP_DIR}/${BACKUP_FILE}" "$SOURCE_DIR" 2>/dev/null
if [ $? -eq 0 ]; then
echo "[$(date)] 备份成功: ${BACKUP_FILE}"
echo "[$(date)] 备份大小: $(du -h ${BACKUP_DIR}/${BACKUP_FILE} | cut -f1)"
# 清理7天前的备份
find "$BACKUP_DIR" -name "backup_*.tar.gz" -mtime +7 -delete
echo "[$(date)] 清理旧备份完成"
else
echo "[$(date)] 备份失败" >&2
exit 1
fi
系统监控脚本
bash
#!/bin/bash
# monitor.sh - 系统监控脚本
echo "========== $(date) =========="
echo ""
echo "【CPU负载】"
uptime
echo ""
echo "【内存使用】"
free -h
echo ""
echo "【磁盘使用】"
df -h | grep -E "^/dev"
echo ""
echo "【网络连接】"
echo "连接数: $(netstat -an 2>/dev/null | grep ESTABLISHED | wc -l)"
echo ""
echo "【Top5 CPU进程】"
ps aux --sort=-%cpu | head -6
echo ""
echo "【Top5 内存进程】"
ps aux --sort=-%mem | head -6
日志清理脚本
bash
#!/bin/bash
# clean_logs.sh - 日志清理脚本
LOG_DIR="/var/log"
MAX_DAYS=30
# 统计清理前大小
BEFORE=$(du -sh "$LOG_DIR" | cut -f1)
# 清理日志文件
find "$LOG_DIR" -name "*.log" -mtime +$MAX_DAYS -delete
find "$LOG_DIR" -name "*.gz" -mtime +$MAX_DAYS -delete
find "$LOG_DIR" -name "*.[0-9]" -mtime +$MAX_DAYS -delete
# 清理空目录
find "$LOG_DIR" -type d -empty -delete 2>/dev/null
# 统计清理后大小
AFTER=$(du -sh "$LOG_DIR" | cut -f1)
echo "清理完成: $BEFORE -> $AFTER"
十三、总结与进阶
学习路径建议
- 入门:熟悉基本命令、文件操作、文本处理
- 进阶:权限管理、进程管理、网络配置
- 高级:Shell脚本编程、系统调优、安全加固
- 运维:服务管理、自动化运维、监控告警
推荐学习资源
bash
# Linux命令手册
man bash
info coreutils
# 在线文档
https://explainshell.com/ # 命令解释
https://cheat.sh/ # 速查表
提升效率的技巧
bash
# 别名配置(~/.bashrc 或 ~/.zshrc)
alias ll='ls -la'
alias ..='cd ..'
alias gs='git status'
alias vi='nvim'
# 历史命令
history # 查看历史
Ctrl+R # 搜索历史
!n # 执行第n条
# 命令补全
Tab # 补全
Tab+Tab # 显示所有可能
# 命令行快捷键
Ctrl+A # 行首
Ctrl+E # 行尾
Ctrl+U # 清空行
Ctrl+L # 清屏
Ctrl+C # 取消
Ctrl+Z # 挂起
相关资源:
阅读更多:

发表回复