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)

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

相关推荐
网安老伯3 小时前
护网行动防守实战:Web应用XSS漏洞应急处置与防护体系搭建_护网行动web应用
linux·运维·服务器·前端·web安全·网络安全·xss
不愿透露姓名的大鹏3 小时前
MySQL慢查询日志实战优化指南
linux·服务器·数据库·mysql·adb
峥无3 小时前
Linux Makefile
linux·运维·服务器
笨笨饿3 小时前
28_关于交叉学科的学习方法
linux·服务器·c语言·算法·学习方法·机械
aningx4 小时前
一些linux配置文件备份
linux
一个人旅程~4 小时前
如何解决跨平台(macos/win)与跨app软件工具(Pages、Keynote/office等)的字体错乱与排版混乱问题?(完整版)
linux·windows·经验分享·macos·电脑
2401_892070981 天前
【Linux C++ 日志系统实战】LogFile 日志文件管理核心:滚动策略、线程安全与方法全解析
linux·c++·日志系统·日志滚动
lwx9148521 天前
Linux-Shell算术运算
linux·运维·服务器
somi71 天前
ARM-驱动-02-Linux 内核开发环境搭建与编译
linux·运维·arm开发