Linux命令行实战指南:从入门到精通

Linux命令行封面 - 终端界面与命令行操作图

一、Linux基础入门

什么是Linux命令行?

Linux命令行(Command Line Interface,CLI)是与Linux系统交互的主要方式之一。与图形界面不同,命令行通过文本指令来控制系统,虽然学习曲线较陡,但具有以下优势:

  • 高效快捷:熟练后可实现秒级操作
  • 远程连接:通过SSH轻松管理远程服务器
  • 可自动化:配合脚本实现批量处理
  • 资源节省:不消耗图形界面资源
  • 精确控制:可实现复杂精细的操作
Linux命令示例配图 - 常用命令操作展示

打开终端

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"

十三、总结与进阶

学习路径建议

  1. 入门:熟悉基本命令、文件操作、文本处理
  2. 进阶:权限管理、进程管理、网络配置
  3. 高级:Shell脚本编程、系统调优、安全加固
  4. 运维:服务管理、自动化运维、监控告警

推荐学习资源

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                         # 挂起

相关资源

阅读更多

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注