1 ls 命令
语法 :ls [选项] [目录或文件]功能:对于目录,列出该目录下的所有子目录与文件;对于文件,列出文件名以及其他信息。
常用选项
-a:列出目录下的所有文件,包括以.开头的隐含文件。-d:将目录像文件一样显示,而不是显示其下的文件。如:ls -d 指定目录-k:以 k 字节的形式表示文件的大小。ls -alk 指定文件-l:列出文件的详细信息。-r:对目录反向排序。-t:以时间排序。-R:列出所有子目录下的文件(递归)。
举例
ls -l
2 pwd 命令
语法 :pwd功能:显示用户当前所在的目录
举例
bash
运行
pwd
3 cd 命令
Linux 系统中,磁盘上的文件和目录被组成一棵目录树,每个节点都是目录或文件。语法 :cd 目录名功能:改变工作目录,将当前工作目录改变到指定的目录下。
举例
# 返回上级目录
cd ..
# 进入用户家目录
cd ~
# 返回最近访问目录
cd -
4 Linux 目录结构与路径

几个特殊的目录
/:称为根目录.:称为当前目录..:称为当前目录的上级目录
绝对路径 vs 相对路径
- 绝对路径 :形如
/usr/share/tomcat/logs/,以根目录开头的路径。 - 相对路径 :形如
./logs,以.或者..开头的路径。
实用技巧
- 使用 tab 键补全:所有 Linux 命令都可以用 tab 键尝试补全,加快效率。
- 使用 ctrl + c 重新输入 :如果命令或目录敲错了,可以按
ctrl + c取消当前命令。

5 touch 命令
语法 :touch [选项]... 文件...功能:更改文档或目录的日期时间(存取时间、更改时间),或者新建一个不存在的文件。
举例
touch test.txt
6 cat 命令
语法 :cat [选项] [文件]功能:查看目标文件的内容
常用选项
-n:对输出的所有行编号
举例
cat test.txt
扩展:
1. cat
一次性把整个文件全部打印 到屏幕→ 文件小用它,文件大刷屏刷到死
2. more
一页一页显示,只能往下翻,不能往上翻→ 老命令,现在基本不用了
3. less
最强大!可以上下翻、搜索、高亮、跳转

1. 翻页 / 滚动
空格/PageDown:向下翻一页b/PageUp:向上翻一页回车/向下箭头:向下滚动一行向上箭头:向上滚动一行d:向下翻半页u:向上翻半页
2. 跳转
G(大写):跳转到文件最后一行g(小写):跳转到文件第一行数字 + G:跳转到指定行(例:100G→ 第 100 行)
3. 搜索(最常用)
/关键词:向下搜索 (例:/error)?关键词:向上搜索n:查找下一个匹配结果N:查找上一个匹配结果
4. 其他实用功能
-N:临时开启 / 关闭行号F:实时追踪文件更新 (类似tail -f,看实时日志)q:退出 lessh:查看帮助手册
7 mkdir 命令
语法 :mkdir [选项] dirname...功能 :在当前目录下创建一个名为 dirname 的目录
常用选项
-p, --parents:可以是一个路径名称。若路径中的某些目录尚不存在,加上此选项后,系统将自动建立好那些尚不存在的目录,即一次可以建立多级目录。
举例
# 递归建立多个目录
mkdir -p test/test1
8 rm 命令
语法 :rm [-f-i-r-v] [dirName/dir]功能:删除文件或目录
常用选项
-f:即使文件属性为只读(写保护),亦直接删除-i:删除前逐一询问确认-r:删除目录及其下所有文件
举例
rm test.txt

- 进入
test/a/a1目录- 删除
test/a/a1/1.txt- 删除
test/a/a1/2.txt- 删除空目录
test/a/a1/- 删除
test/a/a2/1.txt- 删除
test/a/a2/2.txt- 删除空目录
test/a/a2/- 删除空目录
test/a/- 进入
test/b/b1目录- 删除
test/b/b1/1.txt- 删除
test/b/b1/2.txt- 删除空目录
test/b/b1/- 删除
test/b/b2/1.txt- 删除
test/b/b2/2.txt- 删除空目录
test/b/b2/- 删除空目录
test/b/- 删除目录
test/c/下的所有内容(若有)- 删除空目录
test/c/- 最终删除根目录
test/
重要注意事项
千万不要运行 rm -rf /,尤其是在公司的生产服务器上!
9 cp
语法:cp [选项] 源文件或目录 目标文件或目录功能:复制文件或目录说明: cp指令用于复制文件或目录,如同时指定两个以上的文件或目录,且最后的目的地是一个已经存在的目录,则它会把前面指定的所有文件或目录复制到此目录中。若同时指定多个文件或目录,而最后的目的地并非一个已存在的目录,则会出现错误信息常用选项:
-f或--force强行复制文件或目录,不论目的文件或目录是否已经存在-i或--interactive覆盖文件之前先询问用户-r递归处理,将指定目录下的文件与子目录一并处理。若源文件或目录的形态,不属于目录或符号链接,则一律视为普通文件处理-R或--recursive递归处理,将指定目录下的文件及子目录一并处理举例:
plaintext
cp test1.txt test2.txt
10 mv
语法: mv [选项] 源文件或目录 目标文件或目录功能:
- 视
mv命令中第二个参数类型的不同(是目标文件还是目标目录),mv命令将文件重命名或将其移至一个新的目录中。 - 当第二个参数类型是文件时,
mv命令完成文件重命名,此时,源文件只能有一个(也可以是源目录名),它将所给的源文件或目录重命名为给定的目标文件名。 - 当第二个参数是已存在的目录名称时,源文件或目录参数可以有多个,
mv命令将各参数指定的源文件均移至目标目录中。常用选项
-
-f:force 强制的意思,如果目标文件已经存在,不会询问而直接覆盖 -
-i:若目标文件 (destination) 已经存在时,就会询问是否覆盖!举例mv test1.txt test2.txt
11 tail
语法:tail [必要参数] [选择参数] [文件]功能:用于显示指定文件末尾内容,不指定文件时,作为输入信息进行处理。常用查看日志文件。选项:
-
-f循环读取 -
-n<行数>显示行数举例:tail -10 test1.txt
-
默认显示文件最后 10 行
-
可以指定显示多少行
-
可以实时追踪文件新增内容(看滚动日志必备)
3. 常用选项
-n 数字
显示文件最后 N 行
# 显示最后 20 行
tail -n 20 app.log
# 简写(省略 n)
tail -20 app.log
-f
follow,实时跟踪文件,文件有新内容就自动打印出来
tail -f app.log
- 常用于看运行中的服务日志
- 按
Ctrl + C退出
-F
大写 F,比 -f 更强:
-
文件被删除 / 重建后依然能继续追踪
-
日志切割场景更稳定
tail -F app.log
4. 最常用示例
看最后 10 行(默认)
tail app.log
看最后 50 行
tail -n 50 app.log
实时看日志(最常用)
tail -f app.log
实时看 + 只看最后几行
tail -n 20 -f app.log
5. 和其他命令搭配
只看最近报错
tail -n 50 app.log | grep ERROR
实时过滤错误日志
tail -f app.log | grep ERROR
6. 和 less 的区别
tail -f:只看新增内容,实时滚动less +F:既能实时追,又能翻页、搜索- 小文件、快速看尾部 →
tail - 大文件、要翻页搜索 →
less
12 vim
vim 是一个知名的文本编辑器。使用 vim 可以进行文本编辑了.vim 就相当于 Windows 的记事本。只不过功能比记事本强大一些.
-
创建文件 / 打开文件
vim [文件名]
1) 创建文件 / 打开文件
vim [文件名]
2) 进入插入模式
vim 打开文件后默认是普通模式 . 普通模式下键盘的按键表示一些特殊功能的快捷键. (例如按下 j 并不是输入字母 "j", 而是表示光标往下移动一行). 需要进入插入模式才能进行文本编辑.
使用 i 键可以进入到插入模式. (左下角提示 --INSERT--) 然后就可以像记事本一样正常编辑了.
3) 保存
在插入模式下不能保存文件,需要先回到普通模式 . 按下 Esc 回到普通模式.在普通模式下输入 :w , 再按下回车,即可保存文件.
4) 退出
在插入模式下不能退出,需要先回到普通模式.退出时,分以下情况:
① 文件未修改:输入 :q , 再按下回车,即可退出
② 文件修改并保存:使用 :wq****同时执行保存和退出.
③ 文件修改,但不希望保存:使用 :wq! 进行强制退出
关于 Vim 的用法还有很多。此处不做过多介绍了。有兴趣的同学可以参考 vimtutor (直接在终端输入 vimtutor 即可进入官方教程) 或者相应书籍来进行深入学习.
13 ps
语法:ps [参数]...功能:用于查看当前系统上运行的进程选项:
-
a显示一个终端的所有进程 -
u以用户为主的格式来显示程序状况 -
x显示所有程序,不止是会话中的进程 -
e显示所有进程,包括系统守护进程 -
f显示完整格式输出举例:ps aux # 显示系统上所有的进程
ps aux | grep "进程名"
ps aux | grep "进程id"
语法:netstat [参数]...功能:查看系统上的网络状态.选项:
-
-a显示所有正在或不在侦听的套接字 -
-n显示数字形式地址而不是去解析主机、端口或用户名 -
-p显示套接字所属进程的 PID 和名称举例:netstat -anp
netstat -anp | grep "进程名"
netstat -anp | grep "端口号"
1.最经典万能命令
ps aux
- 显示系统所有进程
- 格式最清晰,几乎所有人都用这个
2.常用过滤(查某个程序)
ps aux | grep java
ps aux | grep nginx
ps aux | grep tomcat
作用:只看和 Java / Nginx 相关的进程
3.只看当前用户的进程
ps ux
4.显示进程树(看父子关系)
ps auxf
f= forest,树形展示,方便看谁启动了谁
5.按 CPU / 内存 排序
# 按 CPU 占用从高到低
ps aux --sort=-pcpu
# 按内存占用从高到低
ps aux --sort=-rss
6.只显示 PID、进程名、命令(精简版)
ps -eo pid,ppid,cmd
7.配合 kill 杀进程(常用组合)
# 先查 PID
ps aux | grep java
# 再杀
kill -9 12345
8.最常用参数解释
a:所有终端的进程u:显示用户、CPU、内存等详细信息x:显示没有控制终端的进程(后台服务)f:树形结构e:所有进程(同 aux 类似)
14.grep
grep 是 Linux/Unix 系统中最核心的文本搜索工具 ,全称是 Global Regular Expression Print (全局正则表达式打印),核心功能是在文件 / 命令输出中查找匹配指定字符串 / 正则的行,并打印出来,是开发、运维、排查问题的必备神器。
2. 核心功能
- 在单个 / 多个文件中,查找包含指定字符串的行
- 支持正则表达式进行复杂匹配
- 可配合管道
|,对其他命令的输出进行过滤 - 递归搜索目录下的所有文件
grep [选项] 搜索内容 [文件/目录...]


1. 基础搜索(单个文件)
# 查找 test.txt 中包含 "error" 的行
grep "error" test.txt
# 显示行号,高亮结果
grep -n --color "error" test.txt
2. 全字匹配(避免误匹配)
# 只匹配完整的 "cat" 单词,不匹配 "category"、"catty"
grep -w "cat" test.txt
3. 递归搜索目录(项目中常用)
# 递归搜索当前目录下所有文件,包含 "TODO" 的行,显示行号
grep -rn "TODO" ./
# 仅搜索 .java 文件中的 "TODO"
grep -rn --include="*.java" "TODO" ./
# 排除 .log 文件,搜索 "error"
grep -rn --exclude="*.log" "error" ./
4. 忽略大小写搜索
# 不区分大小写,匹配 "Error"、"ERROR"、"error"
grep -i "error" app.log
5. 反向匹配(过滤不需要的行)
# 显示所有不包含 "DEBUG" 的行(过滤掉调试日志)
grep -v "DEBUG" app.log
6. 统计匹配行数
# 统计 app.log 中 "ERROR" 出现的次数
grep -c "ERROR" app.log
7. 查看匹配行的上下文(排查日志必备)
# 显示匹配 "Exception" 的行,以及前后各5行
grep -C 5 "Exception" app.log
# 显示匹配行后10行(看错误堆栈)
grep -A 10 "Exception" app.log
8. 配合管道使用(命令输出过滤)
# 查看 Java 进程,过滤出包含 "tomcat" 的进程
ps aux | grep "tomcat"
# 实时查看日志,只过滤出 "ERROR" 相关
tail -f app.log | grep "ERROR"
# 查看网络连接,过滤出 8080 端口
netstat -anp | grep "8080"
9. 只显示匹配的文件名
# 查找当前目录下哪些文件包含 "password" 敏感信息
grep -rl "password" ./
四、核心原理与避坑指南
1. 基础匹配 vs 正则匹配
-
默认匹配 :
grep默认是基础正则表达式(BRE) ,部分元字符(如+、?、|)需要转义\ -
扩展正则 :使用
-E选项(等价egrep),支持+、?、|等元字符,无需转义# 匹配 "error" 或 "warn",用扩展正则 grep -E "error|warn" app.log
2. 常见坑与解决方案
坑 1:搜索特殊字符(如 .、*、$)
-
原因:这些是正则元字符,直接搜索会被解析为正则
-
解决方案:用
-F选项(固定字符串搜索,不解析正则)# 搜索包含 "a.b*c$d" 的行,不解析正则 grep -F "a.b*c$d" test.txt
坑 2:递归搜索时的权限问题
-
原因:
-r会遍历所有目录,遇到无权限的目录会报错Permission denied -
解决方案:用
2>/dev/null丢弃错误输出grep -rn "TODO" ./ 2>/dev/null
坑 3:grep 自身进程被匹配到
-
原因:
ps aux | grep xxx会把grep xxx进程也匹配出来 -
解决方案:用
grep -v grep过滤掉,或使用pgrepps aux | grep "tomcat" | grep -v grep
坑 4:中文乱码
- 原因:终端编码与文件编码不一致
- 解决方案:设置
export LANG=en_US.UTF-8,或用iconv转换编码
五、grep 家族扩展命令
Linux 中还有 grep 的增强版本,日常使用更高效:
| 命令 | 特点 | 适用场景 |
|---|---|---|
egrep |
等价 grep -E,支持扩展正则 |
复杂正则匹配 |
fgrep |
等价 grep -F,固定字符串搜索,速度更快 |
搜索包含特殊字符的字符串 |
rg (ripgrep) |
第三方工具,比 grep 快 10-100 倍,默认递归、忽略大小写 |
大项目代码搜索 |
ag (the_silver_searcher) |
类似 rg,速度快,自动忽略 .gitignore 文件 |
代码仓库搜索 |
17.netstat
netstat(Network Statistics)是用于查看网络连接、端口监听、路由表、接口统计的经典命令行工具,常用于排查端口占用、异常连接、网络不通等问题。
1.核心功能
- 查看TCP/UDP 连接状态(ESTABLISHED、LISTENING、TIME_WAIT 等)
- 查看端口占用及对应进程(PID / 程序名)
- 查看系统路由表
- 查看网卡流量统计 与协议统计(TCP/UDP/ICMP)
2.常用参数(跨平台通用)
| 参数 | 作用 | 典型用法 |
|---|---|---|
-a |
显示所有连接(含监听端口) | netstat -a |
-n |
数字形式显示 IP / 端口(不解析域名,更快) | netstat -an |
-t |
仅显示 TCP 连接 | netstat -t |
-u |
仅显示 UDP 连接 | netstat -u |
-l |
仅显示监听中的端口(Linux/macOS) | netstat -lnt |
-p |
显示进程 PID / 程序名(Linux 需 sudo) | sudo netstat -tulnp |
-o |
显示进程 PID(Windows) | netstat -ano |
-r |
显示路由表 | netstat -rn |
-s |
按协议显示统计数据 | netstat -s |
-c |
持续刷新(每秒 1 次,Linux/macOS) | netstat -c |
3.高频命令组合(最实用)
1. 查看所有连接(数字格式,最常用)
# Linux/macOS/Windows
netstat -an
2. 查看 TCP 监听端口(含进程)
# Linux/macOS(需管理员)
sudo netstat -lntp
# Windows
netstat -ano | findstr LISTENING
3. 查看 UDP 监听端口
# Linux/macOS
sudo netstat -lnup
4. 查找占用指定端口(如 8080)的进程
# Linux/macOS
sudo netstat -tulnp | grep :8080
# Windows
netstat -ano | findstr :8080
5. 查看路由表
netstat -rn
3.输出字段说明(连接行)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTENING 1234/java
- Proto:协议(TCP/UDP)
- Local Address:本地 IP: 端口
- Foreign Address:远程 IP: 端口
- State:连接状态(LISTENING/ESTABLISHED/TIME_WAIT 等)
- PID/Program name:进程 ID 与程序名
5.跨平台差异
- Linux/macOS :参数更丰富,
-p显示进程,新版推荐用ss替代(性能更好) - Windows :用
-o显示 PID,-b显示可执行文件路径(需管理员)
18 管道
管道是一种古老的 "进程间通信" 方式。在 Linux 指令中可以使用 | 作为管道标记.意思是将前一个指令标准输出的内容,作为第二个指令的标准输入内容.举例:
ps -ef|grep "java"
ps -ef|head -10
tail -f log.txt|grep "Exception"
|
就是键盘上 回车上面、反斜杠旁边 的那个竖线。
叫 管道(pipe)。
**把前一个命令的输出结果,直接传给后一个命令当输入。**不存文件、不复制粘贴,直接 "流" 过去。