Linux 常用命令速查与实战精讲

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退出 less
  • h:查看帮助手册

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 [选项] 源文件或目录 目标文件或目录功能:

  1. mv命令中第二个参数类型的不同(是目标文件还是目标目录),mv命令将文件重命名或将其移至一个新的目录中。
  2. 当第二个参数类型是文件时,mv命令完成文件重命名,此时,源文件只能有一个(也可以是源目录名),它将所给的源文件或目录重命名为给定的目标文件名。
  3. 当第二个参数是已存在的目录名称时,源文件或目录参数可以有多个,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 的记事本。只不过功能比记事本强大一些.

  1. 创建文件 / 打开文件

    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 过滤掉,或使用 pgrep

    复制代码
    ps 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)

**把前一个命令的输出结果,直接传给后一个命令当输入。**不存文件、不复制粘贴,直接 "流" 过去。

相关推荐
A小辣椒21 小时前
TShark:Wireshark CLI 功能
linux
A小辣椒1 天前
TShark:基础知识
linux
AlfredZhao1 天前
OCI 明明分配了 200G 系统盘,为什么 df 只看到 30G?
linux·oci
AlfredZhao2 天前
vi 删除指定范围的行,不用再反复按 dd
linux·vi
用户9718356334662 天前
银河麒麟 KY10 申威(SW64) 安装 nginx-1.16.1-2.p01.ky10.sw_64.rpm 详细步骤
linux
猪脚踏浪2 天前
linux 拷贝文件或目录到指定的位置
linux
摇滚侠3 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
bush43 天前
嵌入式linux学习记录十四、术语
linux·嵌入式
载数而行5203 天前
Linux 11 动态监控指令top
linux
不会C语言的男孩3 天前
Linux 系统编程 · 第 8 章:进程基础
linux·c语言