一、Shell 环境分类(不同系统默认解释器)
Shell 本质是命令行解释器,接收用户输入指令并传递给操作系统内核执行,不同操作系统默认 Shell 不一样:

Linux 系统:绝大多数发行版默认使用 Bash(Bourne Again Shell),兼容性最强,学习主流选择
macOS 系统:新版 macOS 默认是 Zsh(Z Shell);旧版 macOS 预装 Bash,语法绝大部分和 Bash 通用
Windows 系统:原生终端为 PowerShell,语法、命令参数和 Bash 差异极大,不适合直接学习 Linux Shell
[!重要建议]
若你使用 Windows 系统学习 Shell,强烈推荐安装 WSL(适用于 Linux 的 Windows 子系统),可以在 Windows 内部运行完整 Linux 环境,命令、语法和原生 Linux 完全一致
微软官方安装文档(中文):https://learn.microsoft.com/zh-cn/windows/wsl/install

二、Shell 基础内置命令详解

  1. date — 查看系统日期时间
    作用
    输出当前系统的日期、小时、分钟、秒、星期等完整时间信息。

常用拓展用法
date # 直接输出默认格式完整时间
date +%Y-%m-%d # 自定义格式:年-月-日
date +%H:%M:%S # 自定义格式:时:分:秒
date -s “2026-07-02 20:00:00” # root权限修改系统时间
2. echo — 内容打印输出
基础规则
后跟多个参数,默认以空格分隔打印
单引号 ’ ‘:原样输出所有内容,不解析变量、转义符
双引号 " ":可以解析变量、部分转义字符
反斜杠 \ 转义符:取消紧跟字符的特殊含义,当作普通文本
错误案例解析
echo ‘jon’s world’
问题原因:第一个单引号从 jon 开始,jon 中间的 ’ 提前闭合字符串,后半段 s world’ 语法错乱,终端进入等待输入状态。
正确写法:

echo “jon’s world”
echo jon’s\ world
拓展常用用法
echo $PATH # 打印环境变量
echo -n “不换行输出” # -n 参数:输出末尾不自动换行
echo -e “第一行\n第二行” # -e 开启转义解析,\n 代表换行
3. man — 查看命令官方完整手册
作用
man 命令名 调出该命令最全面的官方英文帮助文档,包含参数、语法、示例、版权说明。

手册翻页操作
空格:向下翻一页
回车:向下一行
q:退出 man 手册界面
/关键词:向下搜索指定关键词
轻量化替代方案
命令名 --help:输出精简中文/英文帮助,适合快速查阅常用参数,阅读成本更低
示例:ls --help

  1. cd — 切换工作目录(核心路径概念)
    两个路径定义
    绝对路径:永远以根目录 / 开头,从系统最顶层目录完整定位,无论当前在哪都能精准跳转
    例:cd /usr/local/bin
    相对路径:不以 / 开头,基于当前所在目录进行跳转
    例:当前在 /usr,执行 cd local/bin 等价于 cd /usr/local/bin
    目录简写符号
    . 单个点:当前所在目录
    … 两个点:当前目录的上一级父目录
    ~ 波浪号:当前登录用户家目录(简写,最常用)
  • 横杠:回到上一次所在目录
    复杂路径示例拆解
    当前位置在系统根目录 /

cd bin/…/bin/././…/bin
拆解运算:
/bin → / → /bin → /bin → /bin → / → /bin
最终执行完毕,当前目录定位到 /bin

Tab 自动补全技巧
输入部分文件夹/命令,按一次 Tab 自动补全唯一匹配内容;连续按两次 Tab,列出所有匹配候选项,大幅减少手动输入拼写错误。

  1. PATH 环境变量 + which 命令查询
    PATH 是什么
    PATH 是系统内置全局环境变量,内部存储一组用冒号 : 分隔的目录列表。
    当你直接输入一个命令(如 date、ls)回车执行时,系统会按先后顺序遍历 PATH 内所有目录,查找对应可执行文件,找到第一个匹配文件就运行,后续同名文件不再检索。

查看 PATH 内容
echo $PATH
which 命令:查找命令真实路径
语法:which 命令名称
示例:

which date

输出示例:/run/current-system/sw/bin/date

也可以直接使用完整路径执行程序,效果等同直接输入 date

/run/current-system/sw/bin/date
补充:如果系统多个目录存在同名命令,PATH 靠前目录的程序优先级更高。

  1. ls — 列出目录内文件、文件夹
    无参数默认查看当前目录所有内容,搭配参数实现不同展示效果:

ls # 简略列出文件名
ls -l # 长格式:权限、所有者、大小、修改时间、文件名
ls -a # 显示所有文件,包含隐藏文件(以 . 开头的文件默认隐藏)
ls -lh # 人性化单位展示文件大小(KB/MB)
ls /etc # 查看指定目录 /etc 内容
三、文件处理专项命令(文本查看、过滤、排序、替换、检索)
7. cat — 读取并输出文件全部内容
基础用法
cat test.txt # 一次性打印整个文件所有内容到终端
cat file1 file2 # 连续打印多个文件内容
适用场景:小文件查看;超大文件不推荐,会刷屏。

拓展小用法
cat > new.txt # 新建文件,键盘录入内容,Ctrl+D 结束输入
8. sort — 按行文本排序
默认以ASCII 字母顺序逐行升序排序,不会修改原文件,仅输出排序结果。

sort test.txt
sort -n num.txt # -n 参数:按照数字大小排序(避免 10 排在 2 前面)
sort -r test.txt # -r 倒序排序
9. uniq — 去除连续重复行
⚠️ 关键前提:uniq 只能删除连续相邻重复行,非连续重复无法自动去重;通常搭配 sort 使用。

uniq test.txt
sort test.txt | uniq # 先排序,再全局去重(最常用组合)
uniq -c test.txt # -c 统计每行重复次数
10. head / tail 截取文件首尾内容
head:查看文件开头
语法:head -n 行数 文件名

head test.txt # 默认前10行
head -n 5 test.txt # 查看前5行
tail:查看文件末尾(日志排查高频命令)
tail test.txt # 默认末尾10行
tail -n 8 test.txt # 查看末尾8行
tail -f log.txt # -f 实时追踪文件新增内容,查看实时日志,Ctrl+C 退出
11. grep — 文本关键词搜索匹配
作用:在文件中检索匹配指定字符串/正则表达式,打印所有命中行
基础语法:grep “匹配关键词” 文件名

grep “error” app.log # 查找包含 error 的行
grep -i “error” app.log # -i 忽略大小写匹配
grep -v “comment” test.txt # -v 反向匹配:输出不包含关键词的行
12. sed — 流式行编辑器(批量替换主力工具)
核心用途:批量修改、替换文件内容,默认仅输出修改结果,不改动原文件
通用替换语法:
sed ‘s/原字符串/新字符串/修饰符’ 文件名

示例解析:

sed ‘s/Windows/Linux/g’ open.txt
s/xxx/xxx/:代表替换模式
g 全局修饰符:本行所有匹配内容全部替换;不加 g 只替换每行第一个匹配词
重要区分
sed 替换规则内部支持正则表达式
文件路径匹配不能用正则,只能使用 glob 通配符(*、?)
-i 参数直接修改原文件:sed -i ‘s/a/b/g’ test.txt
13. find — 递归查找文件
根据文件名、大小、时间等条件遍历查找文件,默认自动递归遍历所有子目录

基础语法
find 查找起始路径 筛选条件

find /home -name “.txt" # 在 /home 下查找所有后缀 .txt 文件
find . -maxdepth 1 -name "
.sh”# --maxdepth 限制递归层级=1,只查当前目录,不进子文件夹
-exec 进阶用法:找到文件后批量执行命令
格式:find 路径 条件 -exec 操作命令 {} ;
示例:查找到所有 .log 文件并删除

find ./ -name “*.log” -exec rm {} ;
输入 man find 查看完整复杂筛选参数。

  1. awk — 文本按列处理利器
    工作逻辑:逐行读取文件 → 默认空格/制表符切割字段 → 按列做判断、运算、输出
    基础通用语法:
    awk ‘判断条件{执行动作}’ 文件名
    内置变量:$1 第一列、2第二列、2 第二列、2第二列、NF 最后一列
    示例:打印文件每行第1、第3列

awk ‘{print $1,$3}’ test.txt
15. 管道符 |
数据流转接符号,核心逻辑:把管道左侧命令的输出结果,直接当作右侧命令的输入数据
经典组合示例:查看日志含 error 的后10行

grep “error” app.log | tail -n 10
可以无限链式拼接多个命令,实现复杂数据筛选处理。

  1. 重定向符号 > < >>

标准输出重定向:覆盖写入
将命令输出存入文件,清空文件原有全部内容
date > thedata.txt

追加重定向:末尾追加写入
内容写到文件末尾,不会覆盖原有数据
echo 新增一行 >> thedata.txt
< 输入重定向:把文件内容作为命令输入源
sort < test.txt

  1. if / then 条件判断语句(Shell 脚本分支)
    语句分隔习惯用分号 ; 简化单行写法,完整语法结构:

if 判断条件;then
满足条件执行代码
else
不满足条件执行代码
fi
条件两种写法:test 表达式 或 [ 表达式 ](中括号前后必须带空格)
示例判断文件是否存在:

if [ -f test.txt ];then
echo 文件存在
else
echo 文件不存在
fi
18. for / while 循环语句
while 循环(满足条件就持续循环)
while [ 条件判断 ];do
循环体内执行语句
done
for 循环(遍历列表迭代)
for 变量 in 遍历内容;do
循环体内执行语句
done
示例批量遍历打印文件名:

for file in *.txt;do echo $file;done
19. Shell 脚本程序(.sh 文件)
批量多条频繁执行的命令,统一写入后缀为 .sh 的文本文件,一次性批量运行,称为 Shell 脚本。
编写流程:

新建 test.sh,写入多条 shell 命令
赋予执行权限:chmod +x test.sh
运行脚本:./test.sh
20. Shebang 解释器声明 #!
必须写在脚本第一行开头,格式 #!解释器路径,作用:告诉操作系统使用哪一个解析器运行本脚本。
最常用写法:

#!/bin/bash
如果省略该行,系统默认使用当前终端 Shell 解析执行,跨环境容易出现语法兼容问题。

四、补充通用操作知识点
Ctrl + C 强制终止
终止当前前台正在运行的程序、卡死命令、死循环脚本,回到命令行输入提示符。

文件权限与 chmod 命令
Linux 文件默认存在读写执行权限,想要直接 ./文件名 运行脚本,必须拥有执行权限;
修改权限命令示例:

chmod +x test.sh # 给文件添加执行权限
chmod 755 test.sh # 数字方式精细化设置权限

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐