【Linux Shell】命令完全指南

文章目录

Linux Shell命令完全指南

若对您有帮助的话,请点赞收藏加关注哦,您的关注是我持续创作的动力!有问题请私信或联系邮箱:funian.gm@gmail.com

Shell 是 Linux/Unix 系统的核心交互工具,掌握 Shell 命令能极大提升开发、运维效率。本文从基础操作到高级技巧,覆盖文件管理、系统监控、批量处理等核心场景,结合详细示例、参数表格和实战脚本,适合初学者入门与开发者进阶参考。

一、Shell 基础入门

1. 什么是 Shell?

Shell 是操作系统的命令行解释器,用于接收用户指令并调用系统内核执行。常见的 Shell 版本包括:

  • Bash:Linux 系统默认 Shell(本文基于 Bash 讲解)
  • Zsh:兼容 Bash,支持更多插件和语法优化
  • Sh:Unix 系统原生 Shell,语法更简洁

2. 核心基础命令(必背)

命令 功能描述 常用参数 实操示例
ls 列出目录内容 -l(详细信息)、-a(显示隐藏文件)、-h(人性化大小) ls -lha(查看当前目录所有文件及权限、大小)
cd 切换目录 ..(上一级)、~(家目录)、-(上一次目录) cd ~/Documents(切换到文档目录)
pwd 显示当前工作目录 无核心参数 pwd(输出:/home/user/Documents)
mkdir 创建目录 -p(递归创建多级目录) mkdir -p project/{src,docs}(创建项目目录及子目录)
touch 创建空文件或修改文件时间 无核心参数 touch test.txt(创建空文件)
rm 删除文件/目录 -r(递归删除目录)、-f(强制删除,不提示) rm -rf old_dir(强制删除旧目录及内容)
cp 复制文件/目录 -r(复制目录)、-v(显示复制过程) cp -rv src/ dest/(复制 src 目录到 dest,显示进度)
mv 移动/重命名文件/目录 -v(显示移动过程) mv test.txt docs/(移动文件到 docs 目录)
cat 查看文件内容 -n(显示行号) cat -n config.yml(查看配置文件并显示行号)
echo 输出字符串或环境变量 -e(解析转义字符) echo "Hello Shell"(输出字符串)、echo $PATH(输出环境变量)

3. 常用快捷键(提升效率)

快捷键 功能描述
Tab 自动补全命令/文件名(双击显示所有选项)
Ctrl+C 终止当前运行的命令
Ctrl+Z 暂停当前命令(可通过 fg 恢复)
Ctrl+R 搜索历史命令(输入关键词匹配)
↑/↓ 切换历史命令
Ctrl+L 清空终端屏幕

二、文件操作进阶

1. 文件内容查看与编辑

命令 功能描述 适用场景 实操示例
cat 一次性显示文件全部内容 小文件快速查看 cat log.txt(查看日志文件)
more 分页显示文件内容(向下滚动) 中大型文件查看 more large_file.txt(按 Enter 翻行,Q 退出)
less 分页显示(支持上下滚动、搜索) 大型文件查看 less access.log(按 /关键词 搜索,Esc 退出)
head 查看文件前 N 行 查看文件开头(如配置文件头部) head -10 error.log(查看前 10 行错误日志)
tail 查看文件后 N 行 实时监控日志 tail -f app.log(实时刷新显示最新日志)
nano 简单文本编辑器(无需学习成本) 快速修改文件 nano test.sh(编辑脚本文件,Ctrl+O 保存,Ctrl+X 退出)
vim 高级文本编辑器(需学习基础操作) 代码编写、复杂文件编辑 vim main.go(编辑 Go 代码,i 进入编辑模式,:wq 保存退出)

2. 文件搜索与过滤

(1)find:按条件搜索文件/目录
bash 复制代码
# 语法:find [搜索路径] [搜索条件] [操作]
find ~/ -name "*.go"  # 搜索家目录下所有 .go 文件
find /var/log -type f -mtime -7  # 搜索 /var/log 下 7 天内修改的文件(-type f 表示文件)
find ./project -size +10M  # 搜索项目目录下大于 10MB 的文件
find ./src -name "*.txt" -exec rm -f {} \;  # 搜索并删除 src 目录下所有 .txt 文件({} 表示搜索结果)
(2)grep:过滤文件内容或命令输出
bash 复制代码
# 语法:grep [参数] 关键词 文件名/命令输出
grep "error" app.log  # 从日志文件中搜索包含 "error" 的行
grep -i "warning" app.log  # 忽略大小写搜索 "warning"
grep -n "timeout" config.yml  # 搜索并显示行号
ps aux | grep "nginx"  # 过滤 nginx 进程(结合管道命令)
(3)awk:文本处理工具(按列分割、格式化输出)
bash 复制代码
# 示例1:查看系统用户(/etc/passwd 格式:用户名:密码:UID:GID:描述:家目录:Shell)
awk -F ":" '{print "用户名:"$1, "UID:"$3}' /etc/passwd

# 示例2:统计日志中各状态码出现次数(日志格式:... 200 OK ...)
grep -E "[0-9]{3}" access.log | awk '{print $9}' | sort | uniq -c | sort -nr

3. 文件权限管理

(1)权限表示规则
  • 权限字符串:rwxr-xr--(共 10 位)
    • 第 1 位:文件类型(- 普通文件、d 目录、l 软链接)
    • 第 2-4 位:所有者权限(r 读、w 写、x 执行)
    • 第 5-7 位:所属组权限
    • 第 8-10 位:其他用户权限
  • 数字权限(常用):r=4w=2x=1,总和表示权限等级
    • 755:所有者 rwx(7)、组 r-x(5)、其他 r-x(5)(默认目录权限)
    • 644:所有者 rw-(6)、组 r--(4)、其他 r--(4)(默认文件权限)
(2)权限修改命令
bash 复制代码
# chmod:修改权限(字母/数字方式)
chmod 755 script.sh  # 数字方式:所有者可执行,其他只读
chmod u+x script.sh  # 字母方式:给所有者添加执行权限(u=所有者,g=组,o=其他,a=所有)

# chown:修改文件所有者和组
sudo chown user:group test.txt  # 将文件所有者改为 user,所属组改为 group
sudo chown -R user:group project/  # 递归修改目录及内容的所有者和组

三、系统管理与监控

1. 进程管理

命令 功能描述 常用参数 实操示例
ps 查看进程状态 aux(显示所有进程详细信息)、ef(显示进程树) `ps aux
top 实时监控系统资源与进程 -p PID(监控指定进程)、H(显示线程) top -p 1234(实时监控 PID 为 1234 的进程)
htop 增强版 top(更友好的界面) 无核心参数 htop(实时监控,支持鼠标操作)
kill 终止进程 -9(强制终止,无响应时使用)、-15(正常终止,默认) kill -9 1234(强制终止 PID 为 1234 的进程)
pkill 按进程名终止进程 -f(匹配完整命令行) pkill -f "python app.py"(终止所有运行 app.py 的 Python 进程)

2. 系统资源监控

bash 复制代码
# 1. 查看 CPU 信息
lscpu  # 显示 CPU 架构、核心数、频率等
top  # 实时查看 CPU 使用率(%us 表示用户进程占用)

# 2. 查看内存信息
free -h  # 人性化显示内存使用情况(total/used/free/available)
vmstat  # 显示内存、进程、IO 等系统状态

# 3. 查看磁盘信息
df -h  # 查看磁盘分区使用情况
du -sh ~/  # 查看家目录总大小(-s 汇总,-h 人性化)
du -h --max-depth=1 ~/  # 查看家目录下一级目录大小

# 4. 查看网络状态
ifconfig  # 查看网卡信息(CentOS 需安装 net-tools)
ip addr  # 查看 IP 地址(通用命令)
netstat -tuln  # 查看监听的端口(t=TCP,u=UDP,l=监听,n=数字格式)
ss -tuln  # 增强版 netstat(更快)
ping -c 4 baidu.com  # 测试网络连通性(-c 4 发送 4 个包)
curl -I https://www.baidu.com  # 查看 HTTP 响应头(测试网站可用性)

3. 系统服务管理(Systemd)

bash 复制代码
# 语法:systemctl [命令] 服务名
sudo systemctl start nginx  # 启动 Nginx 服务
sudo systemctl stop nginx   # 停止 Nginx 服务
sudo systemctl restart nginx  # 重启 Nginx 服务
sudo systemctl status nginx  # 查看 Nginx 运行状态
sudo systemctl enable nginx  # 设置 Nginx 开机自启
sudo systemctl disable nginx  # 取消开机自启

四、高级技巧:管道、重定向与脚本

1. 管道命令(|):连接多个命令,前一个输出作为后一个输入

bash 复制代码
# 示例1:查看当前目录下最大的 5 个文件
ls -lha | sort -k5 -nr | head -n 5  # sort -k5 按第 5 列(大小)排序,-nr 逆序数字排序

# 示例2:统计日志中 ERROR 出现的次数
grep -i "error" app.log | wc -l  # wc -l 统计行数

# 示例3:查找占用 CPU 最高的 3 个进程
ps aux | sort -k3 -nr | head -n 3  # sort -k3 按第 3 列(CPU 使用率)排序

2. 重定向(>/>>/<):控制命令输入输出

符号 功能描述 示例
> 覆盖输出到文件(文件不存在则创建,存在则清空) ls -l > file_list.txt(将目录列表写入文件)
>> 追加输出到文件(不覆盖原有内容) echo "新内容" >> file.txt(追加字符串到文件末尾)
< 从文件读取输入 cat < input.txt(等价于 cat input.txt)
2> 重定向错误输出 ls /root 2> error.log(将权限不足的错误写入日志)
&> 同时重定向标准输出和错误输出 command &> output.log(所有输出写入文件)

3. Shell 脚本入门(自动化批量操作)

(1)脚本基础结构

创建 hello.sh 文件,内容如下:

bash 复制代码
#!/bin/bash
# 这是注释:Shell 脚本入门示例
# 作者:XXX
# 日期:2024-XX-XX

# 定义变量
NAME="Shell"
echo "Hello, $NAME!"  # 输出变量(注意 $ 符号)

# 接收命令行参数($1 第一个参数,$2 第二个参数,$* 所有参数)
echo "你输入的参数:$*"

# 条件判断(if-else)
if [ $# -ge 1 ]; then
    echo "第一个参数:$1"
else
    echo "未输入参数"
fi

# 循环(for 循环)
echo "当前目录下的 .txt 文件:"
for file in $(ls *.txt); do
    echo "- $file"
done

# 函数定义
sum() {
    echo $(( $1 + $2 ))  # 计算两个数的和
}
echo "10 + 20 = $(sum 10 20)"
(2)脚本运行步骤
bash 复制代码
# 1. 给脚本添加执行权限
chmod +x hello.sh

# 2. 运行脚本(两种方式)
./hello.sh  # 直接运行(需在脚本所在目录)
bash hello.sh 参数1 参数2  # 指定 Shell 运行(无需执行权限)

# 3. 输出结果示例
Hello, Shell!
你输入的参数:参数1 参数2
第一个参数:参数1
当前目录下的 .txt 文件:
- test.txt
- docs.txt
10 + 20 = 30
(3)实战脚本:批量备份文件

创建 backup.sh,自动备份指定目录到压缩包:

bash 复制代码
#!/bin/bash
# 批量备份文件脚本
# 使用:./backup.sh 源目录 备份目录

# 检查参数数量
if [ $# -ne 2 ]; then
    echo "用法错误!正确用法:./backup.sh 源目录 备份目录"
    exit 1  # 退出并返回错误码 1
fi

SRC_DIR=$1
DEST_DIR=$2
BACKUP_NAME="backup_$(date +%Y%m%d_%H%M%S).tar.gz"  # 备份文件名(含时间戳)

# 检查源目录是否存在
if [ ! -d $SRC_DIR ]; then
    echo "错误:源目录 $SRC_DIR 不存在!"
    exit 1
fi

# 创建备份目录(不存在则创建)
mkdir -p $DEST_DIR

# 执行备份(tar 压缩)
echo "开始备份 $SRC_DIR 到 $DEST_DIR/$BACKUP_NAME..."
tar -czf $DEST_DIR/$BACKUP_NAME $SRC_DIR  # c=创建,z=gzip压缩,f=指定文件名

# 检查备份是否成功
if [ $? -eq 0 ]; then
    echo "备份成功!备份文件:$DEST_DIR/$BACKUP_NAME"
else
    echo "备份失败!"
    exit 1
fi

运行脚本:

bash 复制代码
./backup.sh ~/project ~/backup  # 备份 project 目录到 backup 目录

五、常见问题排查与避坑指南

问题现象 可能原因 解决方案
命令未找到(command not found) 命令未安装,或环境变量 PATH 未包含命令路径 1. 安装命令(如 sudo apt install nginx);2. 检查 PATH(echo P A T H ),添加路径( e x p o r t P A T H = PATH),添加路径(export PATH= PATH),添加路径(exportPATH=PATH:/命令目录)
权限不足(Permission denied) 当前用户无执行/读写权限 1. 使用 sudo 提升权限(sudo 命令);2. 用 chmod 修改文件权限(chmod +x 脚本.sh
无法删除文件(Operation not permitted) 文件被锁定,或为系统只读文件 1. 检查文件是否被进程占用(lsof 文件名);2. 强制删除(sudo rm -rf 文件名)
脚本运行报错(syntax error near unexpected token) 脚本换行符为 Windows 格式(\r\n) 用 dos2unix 转换(dos2unix 脚本.sh),或在 vim 中执行 :set fileformat=unix 保存
管道命令无输出 前一个命令无输出,或过滤条件错误 1. 单独运行前一个命令检查输出;2. 调整过滤参数(如 grep 关键词大小写)

六、总结与进阶学习

1. 核心要点回顾

  • 基础命令是 Shell 操作的基石,重点掌握文件管理、权限控制、系统监控;
  • 管道(|)和重定向(>/>>)是 Shell 高效处理数据的核心;
  • Shell 脚本可自动化重复任务,提升工作效率,核心是变量、条件、循环、函数;
  • 遇到问题先查看命令输出的错误信息,结合 man 命令(查看官方文档)排查。

2. 进阶学习方向

  • Shell 语法深化:学习数组、正则表达式、case 语句、循环嵌套等;
  • 工具扩展 :掌握 sed(文本替换)、awk(复杂文本处理)、rsync(文件同步)等工具;
  • 自动化运维 :结合 Cron 定时任务(crontab -e)实现脚本自动执行(如定时备份、日志清理);
  • Shell 脚本调试 :使用 bash -x 脚本.sh 调试脚本,查看执行过程。

3. 常用参考资源

相关推荐
爱潜水的小L1 小时前
自学嵌入式day25,树
linux
乾元1 小时前
SDN 与 AI 协同:控制面策略自动化与策略一致性校验
运维·网络·人工智能·网络协议·华为·系统架构·ansible
锡兰_CC1 小时前
无缝触达,卓越体验:开启openEuler世界的任意门
服务器·网络·数据库·c++·图像处理·qt·nginx
qq_479875431 小时前
protobuf[2]
linux
sky北城1 小时前
Linux的回收站机制实现方式总结
linux·运维·服务器
代码游侠1 小时前
复习——栈、队列、树、哈希表
linux·数据结构·学习·算法
橘子真甜~1 小时前
C/C++ Linux网络编程10 - http协议
linux·服务器·网络·c++·网络协议·http
水滴与鱼2 小时前
DOCKER制作ROS运行的镜像文件
运维·docker·容器
zimoyin2 小时前
WSL音频转发配置流程:WSL2/WSL1全适配
linux·音视频·wsl·虚拟机·ekho