引言
刚开始学习 Linux 的时候,很多人都会有一种感觉:命令太多了,记不住。
其实不需要一上来就把所有命令都背下来。日常开发、部署、调试中真正高频使用的命令,大概就集中在几个方面:目录操作、文件操作、文本查看、搜索过滤、权限管理、压缩解压、进程管理、端口查询和网络测试。
这篇文章就按照实际使用场景,把 Linux 中最常见的一批基础指令整理一下。不是单纯堆命令,而是尽量讲清楚这些命令平时到底用来干什么。
一、Linux 常用指令整体分类
可以先看一张简单的分类图:
#mermaid-svg-zyBRKMXuMIjiww2T{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-zyBRKMXuMIjiww2T .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-zyBRKMXuMIjiww2T .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-zyBRKMXuMIjiww2T .error-icon{fill:#552222;}#mermaid-svg-zyBRKMXuMIjiww2T .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-zyBRKMXuMIjiww2T .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-zyBRKMXuMIjiww2T .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-zyBRKMXuMIjiww2T .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-zyBRKMXuMIjiww2T .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-zyBRKMXuMIjiww2T .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-zyBRKMXuMIjiww2T .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-zyBRKMXuMIjiww2T .marker{fill:#333333;stroke:#333333;}#mermaid-svg-zyBRKMXuMIjiww2T .marker.cross{stroke:#333333;}#mermaid-svg-zyBRKMXuMIjiww2T svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-zyBRKMXuMIjiww2T p{margin:0;}#mermaid-svg-zyBRKMXuMIjiww2T .edge{stroke-width:3;}#mermaid-svg-zyBRKMXuMIjiww2T .section–1 rect,#mermaid-svg-zyBRKMXuMIjiww2T .section–1 path,#mermaid-svg-zyBRKMXuMIjiww2T .section–1 circle,#mermaid-svg-zyBRKMXuMIjiww2T .section–1 polygon,#mermaid-svg-zyBRKMXuMIjiww2T .section–1 path{fill:hsl(240, 100%, 76.2745098039%);}#mermaid-svg-zyBRKMXuMIjiww2T .section–1 text{fill:#ffffff;}#mermaid-svg-zyBRKMXuMIjiww2T .node-icon–1{font-size:40px;color:#ffffff;}#mermaid-svg-zyBRKMXuMIjiww2T .section-edge–1{stroke:hsl(240, 100%, 76.2745098039%);}#mermaid-svg-zyBRKMXuMIjiww2T .edge-depth–1{stroke-width:17;}#mermaid-svg-zyBRKMXuMIjiww2T .section–1 line{stroke:hsl(60, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-zyBRKMXuMIjiww2T .disabled,#mermaid-svg-zyBRKMXuMIjiww2T .disabled circle,#mermaid-svg-zyBRKMXuMIjiww2T .disabled text{fill:lightgray;}#mermaid-svg-zyBRKMXuMIjiww2T .disabled text{fill:#efefef;}#mermaid-svg-zyBRKMXuMIjiww2T .section-0 rect,#mermaid-svg-zyBRKMXuMIjiww2T .section-0 path,#mermaid-svg-zyBRKMXuMIjiww2T .section-0 circle,#mermaid-svg-zyBRKMXuMIjiww2T .section-0 polygon,#mermaid-svg-zyBRKMXuMIjiww2T .section-0 path{fill:hsl(60, 100%, 73.5294117647%);}#mermaid-svg-zyBRKMXuMIjiww2T .section-0 text{fill:black;}#mermaid-svg-zyBRKMXuMIjiww2T .node-icon-0{font-size:40px;color:black;}#mermaid-svg-zyBRKMXuMIjiww2T .section-edge-0{stroke:hsl(60, 100%, 73.5294117647%);}#mermaid-svg-zyBRKMXuMIjiww2T .edge-depth-0{stroke-width:14;}#mermaid-svg-zyBRKMXuMIjiww2T .section-0 line{stroke:hsl(240, 100%, 83.5294117647%);stroke-width:3;}#mermaid-svg-zyBRKMXuMIjiww2T .disabled,#mermaid-svg-zyBRKMXuMIjiww2T .disabled circle,#mermaid-svg-zyBRKMXuMIjiww2T .disabled text{fill:lightgray;}#mermaid-svg-zyBRKMXuMIjiww2T .disabled text{fill:#efefef;}#mermaid-svg-zyBRKMXuMIjiww2T .section-1 rect,#mermaid-svg-zyBRKMXuMIjiww2T .section-1 path,#mermaid-svg-zyBRKMXuMIjiww2T .section-1 circle,#mermaid-svg-zyBRKMXuMIjiww2T .section-1 polygon,#mermaid-svg-zyBRKMXuMIjiww2T .section-1 path{fill:hsl(80, 100%, 76.2745098039%);}#mermaid-svg-zyBRKMXuMIjiww2T .section-1 text{fill:black;}#mermaid-svg-zyBRKMXuMIjiww2T .node-icon-1{font-size:40px;color:black;}#mermaid-svg-zyBRKMXuMIjiww2T .section-edge-1{stroke:hsl(80, 100%, 76.2745098039%);}#mermaid-svg-zyBRKMXuMIjiww2T .edge-depth-1{stroke-width:11;}#mermaid-svg-zyBRKMXuMIjiww2T .section-1 line{stroke:hsl(260, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-zyBRKMXuMIjiww2T .disabled,#mermaid-svg-zyBRKMXuMIjiww2T .disabled circle,#mermaid-svg-zyBRKMXuMIjiww2T .disabled text{fill:lightgray;}#mermaid-svg-zyBRKMXuMIjiww2T .disabled text{fill:#efefef;}#mermaid-svg-zyBRKMXuMIjiww2T .section-2 rect,#mermaid-svg-zyBRKMXuMIjiww2T .section-2 path,#mermaid-svg-zyBRKMXuMIjiww2T .section-2 circle,#mermaid-svg-zyBRKMXuMIjiww2T .section-2 polygon,#mermaid-svg-zyBRKMXuMIjiww2T .section-2 path{fill:hsl(270, 100%, 76.2745098039%);}#mermaid-svg-zyBRKMXuMIjiww2T .section-2 text{fill:#ffffff;}#mermaid-svg-zyBRKMXuMIjiww2T .node-icon-2{font-size:40px;color:#ffffff;}#mermaid-svg-zyBRKMXuMIjiww2T .section-edge-2{stroke:hsl(270, 100%, 76.2745098039%);}#mermaid-svg-zyBRKMXuMIjiww2T .edge-depth-2{stroke-width:8;}#mermaid-svg-zyBRKMXuMIjiww2T .section-2 line{stroke:hsl(90, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-zyBRKMXuMIjiww2T .disabled,#mermaid-svg-zyBRKMXuMIjiww2T .disabled circle,#mermaid-svg-zyBRKMXuMIjiww2T .disabled text{fill:lightgray;}#mermaid-svg-zyBRKMXuMIjiww2T .disabled text{fill:#efefef;}#mermaid-svg-zyBRKMXuMIjiww2T .section-3 rect,#mermaid-svg-zyBRKMXuMIjiww2T .section-3 path,#mermaid-svg-zyBRKMXuMIjiww2T .section-3 circle,#mermaid-svg-zyBRKMXuMIjiww2T .section-3 polygon,#mermaid-svg-zyBRKMXuMIjiww2T .section-3 path{fill:hsl(300, 100%, 76.2745098039%);}#mermaid-svg-zyBRKMXuMIjiww2T .section-3 text{fill:black;}#mermaid-svg-zyBRKMXuMIjiww2T .node-icon-3{font-size:40px;color:black;}#mermaid-svg-zyBRKMXuMIjiww2T .section-edge-3{stroke:hsl(300, 100%, 76.2745098039%);}#mermaid-svg-zyBRKMXuMIjiww2T .edge-depth-3{stroke-width:5;}#mermaid-svg-zyBRKMXuMIjiww2T .section-3 line{stroke:hsl(120, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-zyBRKMXuMIjiww2T .disabled,#mermaid-svg-zyBRKMXuMIjiww2T .disabled circle,#mermaid-svg-zyBRKMXuMIjiww2T .disabled text{fill:lightgray;}#mermaid-svg-zyBRKMXuMIjiww2T .disabled text{fill:#efefef;}#mermaid-svg-zyBRKMXuMIjiww2T .section-4 rect,#mermaid-svg-zyBRKMXuMIjiww2T .section-4 path,#mermaid-svg-zyBRKMXuMIjiww2T .section-4 circle,#mermaid-svg-zyBRKMXuMIjiww2T .section-4 polygon,#mermaid-svg-zyBRKMXuMIjiww2T .section-4 path{fill:hsl(330, 100%, 76.2745098039%);}#mermaid-svg-zyBRKMXuMIjiww2T .section-4 text{fill:black;}#mermaid-svg-zyBRKMXuMIjiww2T .node-icon-4{font-size:40px;color:black;}#mermaid-svg-zyBRKMXuMIjiww2T .section-edge-4{stroke:hsl(330, 100%, 76.2745098039%);}#mermaid-svg-zyBRKMXuMIjiww2T .edge-depth-4{stroke-width:2;}#mermaid-svg-zyBRKMXuMIjiww2T .section-4 line{stroke:hsl(150, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-zyBRKMXuMIjiww2T .disabled,#mermaid-svg-zyBRKMXuMIjiww2T .disabled circle,#mermaid-svg-zyBRKMXuMIjiww2T .disabled text{fill:lightgray;}#mermaid-svg-zyBRKMXuMIjiww2T .disabled text{fill:#efefef;}#mermaid-svg-zyBRKMXuMIjiww2T .section-5 rect,#mermaid-svg-zyBRKMXuMIjiww2T .section-5 path,#mermaid-svg-zyBRKMXuMIjiww2T .section-5 circle,#mermaid-svg-zyBRKMXuMIjiww2T .section-5 polygon,#mermaid-svg-zyBRKMXuMIjiww2T .section-5 path{fill:hsl(0, 100%, 76.2745098039%);}#mermaid-svg-zyBRKMXuMIjiww2T .section-5 text{fill:black;}#mermaid-svg-zyBRKMXuMIjiww2T .node-icon-5{font-size:40px;color:black;}#mermaid-svg-zyBRKMXuMIjiww2T .section-edge-5{stroke:hsl(0, 100%, 76.2745098039%);}#mermaid-svg-zyBRKMXuMIjiww2T .edge-depth-5{stroke-width:-1;}#mermaid-svg-zyBRKMXuMIjiww2T .section-5 line{stroke:hsl(180, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-zyBRKMXuMIjiww2T .disabled,#mermaid-svg-zyBRKMXuMIjiww2T .disabled circle,#mermaid-svg-zyBRKMXuMIjiww2T .disabled text{fill:lightgray;}#mermaid-svg-zyBRKMXuMIjiww2T .disabled text{fill:#efefef;}#mermaid-svg-zyBRKMXuMIjiww2T .section-6 rect,#mermaid-svg-zyBRKMXuMIjiww2T .section-6 path,#mermaid-svg-zyBRKMXuMIjiww2T .section-6 circle,#mermaid-svg-zyBRKMXuMIjiww2T .section-6 polygon,#mermaid-svg-zyBRKMXuMIjiww2T .section-6 path{fill:hsl(30, 100%, 76.2745098039%);}#mermaid-svg-zyBRKMXuMIjiww2T .section-6 text{fill:black;}#mermaid-svg-zyBRKMXuMIjiww2T .node-icon-6{font-size:40px;color:black;}#mermaid-svg-zyBRKMXuMIjiww2T .section-edge-6{stroke:hsl(30, 100%, 76.2745098039%);}#mermaid-svg-zyBRKMXuMIjiww2T .edge-depth-6{stroke-width:-4;}#mermaid-svg-zyBRKMXuMIjiww2T .section-6 line{stroke:hsl(210, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-zyBRKMXuMIjiww2T .disabled,#mermaid-svg-zyBRKMXuMIjiww2T .disabled circle,#mermaid-svg-zyBRKMXuMIjiww2T .disabled text{fill:lightgray;}#mermaid-svg-zyBRKMXuMIjiww2T .disabled text{fill:#efefef;}#mermaid-svg-zyBRKMXuMIjiww2T .section-7 rect,#mermaid-svg-zyBRKMXuMIjiww2T .section-7 path,#mermaid-svg-zyBRKMXuMIjiww2T .section-7 circle,#mermaid-svg-zyBRKMXuMIjiww2T .section-7 polygon,#mermaid-svg-zyBRKMXuMIjiww2T .section-7 path{fill:hsl(90, 100%, 76.2745098039%);}#mermaid-svg-zyBRKMXuMIjiww2T .section-7 text{fill:black;}#mermaid-svg-zyBRKMXuMIjiww2T .node-icon-7{font-size:40px;color:black;}#mermaid-svg-zyBRKMXuMIjiww2T .section-edge-7{stroke:hsl(90, 100%, 76.2745098039%);}#mermaid-svg-zyBRKMXuMIjiww2T .edge-depth-7{stroke-width:-7;}#mermaid-svg-zyBRKMXuMIjiww2T .section-7 line{stroke:hsl(270, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-zyBRKMXuMIjiww2T .disabled,#mermaid-svg-zyBRKMXuMIjiww2T .disabled circle,#mermaid-svg-zyBRKMXuMIjiww2T .disabled text{fill:lightgray;}#mermaid-svg-zyBRKMXuMIjiww2T .disabled text{fill:#efefef;}#mermaid-svg-zyBRKMXuMIjiww2T .section-8 rect,#mermaid-svg-zyBRKMXuMIjiww2T .section-8 path,#mermaid-svg-zyBRKMXuMIjiww2T .section-8 circle,#mermaid-svg-zyBRKMXuMIjiww2T .section-8 polygon,#mermaid-svg-zyBRKMXuMIjiww2T .section-8 path{fill:hsl(150, 100%, 76.2745098039%);}#mermaid-svg-zyBRKMXuMIjiww2T .section-8 text{fill:black;}#mermaid-svg-zyBRKMXuMIjiww2T .node-icon-8{font-size:40px;color:black;}#mermaid-svg-zyBRKMXuMIjiww2T .section-edge-8{stroke:hsl(150, 100%, 76.2745098039%);}#mermaid-svg-zyBRKMXuMIjiww2T .edge-depth-8{stroke-width:-10;}#mermaid-svg-zyBRKMXuMIjiww2T .section-8 line{stroke:hsl(330, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-zyBRKMXuMIjiww2T .disabled,#mermaid-svg-zyBRKMXuMIjiww2T .disabled circle,#mermaid-svg-zyBRKMXuMIjiww2T .disabled text{fill:lightgray;}#mermaid-svg-zyBRKMXuMIjiww2T .disabled text{fill:#efefef;}#mermaid-svg-zyBRKMXuMIjiww2T .section-9 rect,#mermaid-svg-zyBRKMXuMIjiww2T .section-9 path,#mermaid-svg-zyBRKMXuMIjiww2T .section-9 circle,#mermaid-svg-zyBRKMXuMIjiww2T .section-9 polygon,#mermaid-svg-zyBRKMXuMIjiww2T .section-9 path{fill:hsl(180, 100%, 76.2745098039%);}#mermaid-svg-zyBRKMXuMIjiww2T .section-9 text{fill:black;}#mermaid-svg-zyBRKMXuMIjiww2T .node-icon-9{font-size:40px;color:black;}#mermaid-svg-zyBRKMXuMIjiww2T .section-edge-9{stroke:hsl(180, 100%, 76.2745098039%);}#mermaid-svg-zyBRKMXuMIjiww2T .edge-depth-9{stroke-width:-13;}#mermaid-svg-zyBRKMXuMIjiww2T .section-9 line{stroke:hsl(0, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-zyBRKMXuMIjiww2T .disabled,#mermaid-svg-zyBRKMXuMIjiww2T .disabled circle,#mermaid-svg-zyBRKMXuMIjiww2T .disabled text{fill:lightgray;}#mermaid-svg-zyBRKMXuMIjiww2T .disabled text{fill:#efefef;}#mermaid-svg-zyBRKMXuMIjiww2T .section-10 rect,#mermaid-svg-zyBRKMXuMIjiww2T .section-10 path,#mermaid-svg-zyBRKMXuMIjiww2T .section-10 circle,#mermaid-svg-zyBRKMXuMIjiww2T .section-10 polygon,#mermaid-svg-zyBRKMXuMIjiww2T .section-10 path{fill:hsl(210, 100%, 76.2745098039%);}#mermaid-svg-zyBRKMXuMIjiww2T .section-10 text{fill:black;}#mermaid-svg-zyBRKMXuMIjiww2T .node-icon-10{font-size:40px;color:black;}#mermaid-svg-zyBRKMXuMIjiww2T .section-edge-10{stroke:hsl(210, 100%, 76.2745098039%);}#mermaid-svg-zyBRKMXuMIjiww2T .edge-depth-10{stroke-width:-16;}#mermaid-svg-zyBRKMXuMIjiww2T .section-10 line{stroke:hsl(30, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-zyBRKMXuMIjiww2T .disabled,#mermaid-svg-zyBRKMXuMIjiww2T .disabled circle,#mermaid-svg-zyBRKMXuMIjiww2T .disabled text{fill:lightgray;}#mermaid-svg-zyBRKMXuMIjiww2T .disabled text{fill:#efefef;}#mermaid-svg-zyBRKMXuMIjiww2T .section-root rect,#mermaid-svg-zyBRKMXuMIjiww2T .section-root path,#mermaid-svg-zyBRKMXuMIjiww2T .section-root circle,#mermaid-svg-zyBRKMXuMIjiww2T .section-root polygon{fill:hsl(240, 100%, 46.2745098039%);}#mermaid-svg-zyBRKMXuMIjiww2T .section-root text{fill:#ffffff;}#mermaid-svg-zyBRKMXuMIjiww2T .section-root span{color:#ffffff;}#mermaid-svg-zyBRKMXuMIjiww2T .section-2 span{color:#ffffff;}#mermaid-svg-zyBRKMXuMIjiww2T .icon-container{height:100%;display:flex;justify-content:center;align-items:center;}#mermaid-svg-zyBRKMXuMIjiww2T .edge{fill:none;}#mermaid-svg-zyBRKMXuMIjiww2T .mindmap-node-label{dy:1em;alignment-baseline:middle;text-anchor:middle;dominant-baseline:middle;text-align:center;}#mermaid-svg-zyBRKMXuMIjiww2T :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}
Linux常用指令
目录操作
pwd
ls
cd
mkdir
rmdir
文件操作
touch
cp
mv
rm
ln
文件查看
cat
less
head
tail
文本搜索
grep
find
wc
权限管理
chmod
chown
sudo
压缩解压
tar
zip
unzip
进程管理
ps
top
kill
网络端口
ping
netstat
curl
wget
如果 CSDN 不支持 Mermaid 图,也没关系。简单理解就是:
Linux 指令不是乱的,它们基本都围绕“文件、进程、网络、权限”这几类问题展开。
二、目录相关指令
1. pwd:查看当前所在目录
pwd 用来查看当前终端所在路径。
pwd
示例:
/home/user/project
这个命令非常简单,但很重要。尤其是在执行删除、移动、复制命令之前,最好先 pwd 确认一下自己在哪个目录,避免误操作。
2. ls:查看目录内容
ls 用来查看当前目录下有哪些文件和目录。
ls
常用写法:
ls -l # 以详细信息显示
ls -a # 显示隐藏文件
ls -lh # 文件大小以 K、M、G 显示
ls -al # 显示所有文件的详细信息
比如:
ls -lh
可能看到类似结果:
-rw-r–r– 1 user user 1.2K Jun 8 10:20 main.c
drwxr-xr-x 2 user user 4.0K Jun 8 10:22 include
开头字符也很有用:
| – | 普通文件 |
| d | 目录 |
| l | 链接文件 |
所以看到 d 开头,一般就知道它是目录。
3. cd:切换目录
cd 用来进入某个目录。
cd /home/user
常用写法:
cd .. # 回到上一级目录
cd . # 当前目录
cd ~ # 回到当前用户家目录
cd – # 回到上一次所在目录
其中 cd – 挺实用,比如你在两个目录之间来回切换:
cd /etc/nginx
cd /home/user/project
cd –
这样就可以快速回到上一个目录。
4. mkdir:创建目录
创建一个目录:
mkdir test
创建多级目录:
mkdir -p a/b/c
-p 的作用是:如果中间目录不存在,就一起创建。
比如:
mkdir -p logs/nginx
即使 logs 目录原本不存在,也不会报错。
5. rmdir:删除空目录
rmdir test
注意,rmdir 只能删除空目录。如果目录里面有文件,就删不了。
实际使用中,删除目录更多时候会用:
rm -r 目录名
这个后面会讲。
三、文件操作指令
1. touch:创建文件
touch a.txt
如果文件不存在,就创建一个空文件。
如果文件已经存在,就更新它的修改时间。
平时创建测试文件时很常用:
touch test.log
2. cp:复制文件或目录
复制文件:
cp a.txt b.txt
把 a.txt 复制一份,命名为 b.txt。
复制目录:
cp -r dir1 dir2
常用参数:
| -r | 递归复制目录 |
| -i | 覆盖前询问 |
| -f | 强制覆盖 |
| -v | 显示复制过程 |
例如:
cp -rv src backup
表示把 src 目录复制成 backup,并显示复制过程。
3. mv:移动或重命名
重命名文件:
mv old.txt new.txt
移动文件:
mv test.txt /tmp/
移动目录:
mv project /home/user/
mv 既能移动,也能重命名。
如果目标是一个新名字,就是重命名;如果目标是一个目录,就是移动进去。
4. rm:删除文件或目录
删除文件:
rm a.txt
删除目录:
rm -r test
强制删除目录:
rm -rf test
这里一定要注意:rm -rf 很危险。
尤其是下面这种命令,千万不要随便执行:
rm -rf /
平时删除目录之前,建议先看一下:
ls test
确认没问题后再删除:
rm -rf test
一个比较稳的习惯是:
能不用 -f 就先不用 -f,能先 ls 确认就先确认。
5. ln:创建链接
Linux 中链接分为硬链接和软链接。平时更常用的是软链接。
ln -s 源文件 链接名
例如:
ln -s /usr/local/nginx/sbin/nginx /usr/bin/nginx
这样以后就可以直接使用:
nginx
软链接可以简单理解为 Windows 里的快捷方式。
四、文件内容查看指令
1. cat:查看文件内容
cat file.txt
适合查看内容比较少的文件。
如果文件很大,不建议直接 cat,因为终端会疯狂刷屏。
2. less:分页查看文件
less file.txt
常用操作:
| 空格 | 向下翻页 |
| b | 向上翻页 |
| /关键词 | 搜索 |
| n | 查找下一个 |
| q | 退出 |
查看日志或者配置文件时,less 比 cat 更好用。
3. head:查看文件开头
默认查看前 10 行:
head file.txt
查看前 20 行:
head -n 20 file.txt
4. tail:查看文件末尾
默认查看最后 10 行:
tail file.txt
查看最后 50 行:
tail -n 50 file.txt
实时查看日志:
tail -f app.log
这个命令非常常用。比如服务启动后想看日志有没有报错:
tail -f logs/server.log
如果只想先看最后 100 行,再继续实时跟踪:
tail -n 100 -f logs/server.log
五、搜索和过滤指令
1. grep:按关键字搜索文本
grep 用来从文件中筛选包含某个关键字的行。
grep "error" app.log
常用写法:
grep -i "error" app.log # 忽略大小写
grep -n "error" app.log # 显示行号
grep -r "main" ./src # 递归搜索目录
grep -rn "TODO" . # 递归搜索并显示行号
实际开发中,经常会这样查日志:
grep -in "exception" app.log
含义是:
忽略大小写搜索 exception,并显示所在行号。
2. find:查找文件
按文件名查找:
find . -name "test.txt"
查找所有 .c 文件:
find . -name "*.c"
查找普通文件:
find . -type f
查找目录:
find . -type d
查找大于 100MB 的文件:
find . -type f -size +100M
清理临时文件时也可能用到:
find . -name "*.tmp"
确认无误后再删除:
find . -name "*.tmp" -delete
注意:带 -delete 的命令一定要谨慎,最好先不加 -delete 查看结果。
3. wc:统计行数、单词数、字节数
统计文件行数:
wc -l file.txt
统计当前目录下文件数量:
ls | wc -l
统计某个日志里 error 出现的行数:
grep "error" app.log | wc -l
这里就用到了管道。
六、管道和重定向
Linux 命令好用,很大一部分原因是它们可以组合。
1. 管道符 |
管道符 | 的作用是:
把前一个命令的输出,交给后一个命令继续处理。
ps aux | grep nginx
含义是:
ps aux 的输出 —> grep nginx 进行过滤
再比如:
cat app.log | grep "error"
不过这个命令也可以简写成:
grep "error" app.log
管道更常见的用法是多命令组合:
netstat -tunlp | grep 8080
表示从所有端口信息里筛选出包含 8080 的那一行。
2. 输出重定向 >
> 会把命令输出写入文件,并覆盖原内容。
echo "hello linux" > a.txt
3. 追加重定向 >>
>> 会把内容追加到文件末尾,不覆盖原内容。
echo "new line" >> a.txt
七、权限相关指令
Linux 中每个文件都有权限,可以通过 ls -l 查看:
ls -l test.sh
示例:
-rwxr-xr– 1 user user 1024 Jun 8 10:20 test.sh
其中:
rwx r-x r–
可以分成三组:
| 第一组 | 文件所有者的权限 |
| 第二组 | 同组用户的权限 |
| 第三组 | 其他用户的权限 |
权限字符含义:
| r | 可读 |
| w | 可写 |
| x | 可执行 |
1. chmod:修改权限
给脚本添加执行权限:
chmod +x test.sh
然后就可以执行:
./test.sh
也可以用数字方式:
chmod 755 test.sh
数字含义:
| 4 | 读 |
| 2 | 写 |
| 1 | 执行 |
所以:
7 = 4 + 2 + 1 = rwx
5 = 4 + 1 = r-x
755 表示:
所有者:rwx
同组用户:r-x
其他用户:r-x
2. chown:修改文件所属用户
sudo chown user:user file.txt
递归修改目录所属用户:
sudo chown -R user:user project
这个命令在部署项目时经常见到,比如某个目录没有权限写入,就可能需要调整所属用户。
3. sudo:以管理员权限执行命令
普通用户执行某些命令时可能会遇到权限不足:
Permission denied
这时可以使用:
sudo 命令
例如:
sudo rm -rf /opt/test
不过 sudo 权限很大,尤其配合 rm -rf 时一定要小心。
八、压缩和解压指令
1. tar:打包和解包
打包成 .tar:
tar -cvf project.tar project/
解包 .tar:
tar -xvf project.tar
常用参数:
| -c | 创建包 |
| -x | 解包 |
| -v | 显示过程 |
| -f | 指定文件名 |
| -z | 使用 gzip |
| -J | 使用 xz |
2. tar.gz 格式
压缩成 .tar.gz:
tar -czvf project.tar.gz project/
解压 .tar.gz:
tar -xzvf project.tar.gz
实际下载源码包时,经常会遇到 .tar.gz。
3. zip 和 unzip
压缩:
zip -r project.zip project/
解压:
unzip project.zip
如果需要和 Windows 之间传文件,zip 格式会更常见。
九、进程管理指令
1. ps:查看进程
查看当前终端进程:
ps
查看系统所有进程:
ps aux
搜索指定进程:
ps aux | grep nginx
常见字段:
| USER | 进程所属用户 |
| PID | 进程 ID |
| %CPU | CPU 占用 |
| %MEM | 内存占用 |
| COMMAND | 启动命令 |
2. top:实时查看系统进程
top
常用操作:
| P | 按 CPU 占用排序 |
| M | 按内存占用排序 |
| q | 退出 |
服务器卡顿时,可以先用 top 看看是不是某个进程占用了大量 CPU 或内存。
3. kill:结束进程
根据 PID 结束进程:
kill PID
强制结束进程:
kill -9 PID
例如:
kill -9 12345
一般建议先使用普通 kill,如果进程没有响应,再考虑 kill -9。
十、端口和网络相关指令
这一部分是实际排查问题时非常常用的。
1. ping:测试网络是否连通
ping www.baidu.com
指定发送次数:
ping -c 4 www.baidu.com
如果能收到响应,说明基本网络是通的。
如果一直不通,可能是网络、DNS、防火墙或者目标服务器的问题。
2. netstat:查看端口和网络连接
netstat 是很多人最常用的端口查看命令。
查看当前监听端口:
netstat -tunlp
常用参数:
| -t | 查看 TCP |
| -u | 查看 UDP |
| -n | 以数字形式显示,不解析域名和服务名 |
| -l | 只显示监听状态 |
| -p | 显示对应进程 |
查看某个端口是否被占用,比如 8080:
netstat -tunlp | grep 8080
示例输出:
tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN 12345/java
这说明:
8080 端口正在被 PID 为 12345 的 java 进程监听
如果要结束这个进程,可以执行:
kill -9 12345
有些系统默认可能没有 netstat,需要安装 net-tools:
sudo apt install net-tools
或者在 CentOS 系列中:
sudo yum install net-tools
现在很多新系统也推荐使用 ss,但从学习和实际使用习惯来说,netstat 仍然非常常见。
3. curl:测试接口或网页请求
请求一个网页:
curl www.example.com
只看响应头:
curl -I www.example.com
测试本地接口:
curl http://127.0.0.1:8080/api/test
后端开发中,curl 非常常用。比如服务启动后,可以用它简单测试接口是否正常返回。
4. wget:下载文件
wget https://example.com/test.tar.gz
后台下载:
wget -b https://example.com/bigfile.zip
下载 Linux 安装包、源码包时经常会用到。
十一、磁盘相关指令
1. df:查看磁盘整体使用情况
df -h
示例:
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 50G 35G 15G 70% /
-h 表示用更容易阅读的方式显示,比如 G、M。
服务器提示磁盘满了,第一步通常就是:
df -h
2. du:查看目录占用空间
查看某个目录总大小:
du -sh project
查看当前目录下一级文件和目录的大小:
du -h –max-depth=1
排查磁盘占用时常用:
du -h –max-depth=1 /var
如果 /var 很大,就继续往里面查:
du -h –max-depth=1 /var/log
这样一层一层找,很容易定位哪个目录占空间。
十二、几个常见实战场景
场景一:查看服务是否启动
比如查看 nginx:
ps aux | grep nginx
或者查看端口:
netstat -tunlp | grep 80
如果能看到 80 端口处于 LISTEN 状态,说明服务大概率已经监听端口了。
场景二:查看 8080 端口被谁占用
netstat -tunlp | grep 8080
假设看到:
tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN 12345/java
说明 8080 被 PID 为 12345 的 Java 进程占用。
结束它:
kill -9 12345
场景三:实时查看程序日志
tail -f app.log
查看最后 100 行并持续跟踪:
tail -n 100 -f app.log
场景四:在日志中搜索错误信息
grep -in "error" app.log
如果日志很大,可以配合 tail 使用:
tail -n 1000 app.log | grep -in "error"
意思是:
只在最后 1000 行日志中搜索 error。
场景五:查找大文件
find . -type f -size +100M
查看当前目录下哪个文件或目录最占空间:
du -h –max-depth=1
十三、常用指令速查表
| pwd | 查看当前目录 | pwd |
| ls | 查看目录内容 | ls -al |
| cd | 切换目录 | cd /home/user |
| mkdir | 创建目录 | mkdir -p a/b/c |
| touch | 创建文件 | touch a.txt |
| cp | 复制文件或目录 | cp -r dir1 dir2 |
| mv | 移动或重命名 | mv old.txt new.txt |
| rm | 删除文件或目录 | rm -rf dir |
| ln | 创建链接 | ln -s src link |
| cat | 查看文件内容 | cat file.txt |
| less | 分页查看文件 | less file.txt |
| head | 查看文件开头 | head -n 20 file.txt |
| tail | 查看文件末尾 | tail -f app.log |
| grep | 搜索文本 | grep -rn "main" . |
| find | 查找文件 | find . -name "*.c" |
| wc | 统计行数等 | wc -l file.txt |
| chmod | 修改权限 | chmod +x test.sh |
| chown | 修改所属用户 | sudo chown user:user file |
| tar | 打包解包 | tar -xzvf a.tar.gz |
| zip | 压缩 zip | zip -r a.zip dir |
| unzip | 解压 zip | unzip a.zip |
| ps | 查看进程 | ps aux |
| top | 实时查看进程 | top |
| kill | 结束进程 | kill -9 PID |
| netstat | 查看端口 | netstat -tunlp |
| ping | 测试网络 | ping -c 4 baidu.com |
| curl | 测试请求 | curl -I example.com |
| wget | 下载文件 | wget 文件地址 |
| df | 查看磁盘整体空间 | df -h |
| du | 查看目录大小 | du -sh dir |
十四、学习 Linux 指令的小建议
Linux 命令不用一开始全背下来,刚学的时候可以先抓住高频命令。
我个人建议先掌握这几组:
目录操作:pwd、ls、cd、mkdir
文件操作:touch、cp、mv、rm
文件查看:cat、less、head、tail
文本搜索:grep、find
权限管理:chmod、chown、sudo
进程端口:ps、top、kill、netstat
磁盘网络:df、du、ping、curl、wget
这些命令掌握以后,日常使用 Linux 基本就不会太吃力了。
另外,Linux 命令真正强的地方在于组合,比如:
ps aux | grep nginx
netstat -tunlp | grep 8080
tail -n 1000 app.log | grep "error"
find . -name "*.log" | wc -l
单个命令可能很简单,但多个命令通过管道组合起来,就可以完成很多实际排查工作。
总结
这篇文章主要整理了 Linux 中最常见的一批基础指令,包括目录操作、文件操作、文件查看、搜索过滤、权限管理、压缩解压、进程管理、端口查询和网络测试。
对于初学者来说,最重要的不是一次性记住所有参数,而是知道:
- 想看当前路径,用 pwd
- 想看文件列表,用 ls
- 想进入目录,用 cd
- 想复制移动删除,用 cp、mv、rm
- 想看日志,用 tail -f
- 想搜索内容,用 grep
- 想查文件,用 find
- 想看进程,用 ps、top
- 想查端口,用 netstat
- 想看磁盘,用 df、du
Linux 指令看起来多,但常用的其实就这些。多敲几遍,多结合实际场景用,很快就能熟悉起来。


