一聚教程网:一个值得你收藏的教程网站

热门教程

Linux中最全常用命令速查表:建议收藏备用

时间:2026-06-03 13:00:01 编辑:袖梨 来源:一聚教程网

Linux中最全常用命令速查表(建议收藏备用)

一、Linux 系统目录结构

Linux系统从根目录/出发构建树状目录,所有文件与子目录均以此为基础进行组织。下面将系统梳理Linux目录结构及各类常用命令。

/

├── bin -> usr/bin # 存放二进制命令(ls、cp、mv等常用命令)

├── boot # 内核及引导系统程序所在目录

├── dev # 所有设备文件的目录(磁盘、光驱等)

├── etc # 配置文件默认路径、服务启动命令存放目录

├── home # 用户家目录(root用户的家目录为/root)

├── lib -> usr/lib # 32位库文件存放目录

├── lib64 -> usr/lib64 # 64位库文件存放目录

├── media # 媒体文件存放目录

├── mnt # 临时挂载设备目录

├── opt # 自定义软件安装存放目录

├── proc # 进程及内核信息存放目录(虚拟文件系统)

├── root # root用户家目录

├── run # 系统运行时产生临时文件的存放目录

├── sbin -> usr/sbin # 系统管理命令存放目录(仅管理员使用)

├── srv # 服务启动后需要访问的数据目录

├── sys # 系统使用目录

├── tmp # 临时文件目录

├── usr # 系统命令和帮助文件目录

└── var # 存放内容易变文件的目录(日志、邮件等)

重要目录说明:

目录说明
/bin二进制执行文件,主要用于具体应用
/sbin系统管理员专用的二进制代码,主要用于系统管理
/usr/bin用户命令,后期安装的软件
/usr/sbin超级用户管理程序

二、终端命令格式

2.1 基本语法

command [-options] [parameter]
组成部分说明
command命令名,对应功能的英文单词或缩写
[-options]选项,用于控制命令行为,可省略
[parameter]传给命令的参数,可以是零个、一个或多个

2.2 查阅命令帮助

command --help     # 显示命令的帮助信息(简洁版)man command        # 查阅命令的完整使用手册(manual)

man 手册操作键:

操作键功能
空格键向下翻页
b向上翻页
q退出
/关键词搜索关键词

2.3 实用快捷键

快捷键功能
Tab自动补全文件/目录/命令(非常常用!)
↑ / ↓ 方向键在历史命令间切换
Ctrl + C强制中断当前程序/命令
Ctrl + Z挂起当前任务(任务未结束,可用 fg/bg 恢复)
Ctrl + Shift + =放大终端窗口字体
Ctrl + -缩小终端窗口字体

三、目录操作命令

3.1 查看目录内容 — —ls

lslist 的简写,列出目录内容

ls                 # 列出当前目录内容ls -a              # 显示所有文件,包括隐藏文件(以.开头)ls -l              # 以列表方式显示文件详细信息(可简写为 ll)ls -lh             # 以列表方式显示,并以人性化方式显示文件大小ls -al             # 组合:显示所有文件+详细信息ll                 # 等同于 ls -l(很多发行版支持)

Linux 文件和目录特点:

  1. 文件或目录名最长可有 256 个字符
  2. . 开头的文件为隐藏文件,需用 -a 参数显示
  3. . 代表当前目录,.. 代表上一级目录
  4. 所有目录和文件名大小写敏感

ls 通配符:

通配符含义
*代表任意个数个字符
?代表任意一个字符(至少1个)
[abc]匹配 a、b、c 中的任意一个
[a-f]匹配 a 到 f 范围内的任意一个字符

3.2 切换目录 — —cd

cdchange directory 的简写

pwd                # 查看当前工作目录(print work directory)cd                 # 切换到当前用户主目录(/home/用户名)cd ~               # 切换到当前用户主目录cd /               # 切换到根目录cd ..              # 切换到上一级目录cd -               # 切换到上一次访问的目录(在两个目录间来回切换)cd /usr/local      # 切换到指定绝对路径cd ./aaa           # 切换到当前目录下的 aaa 目录(相对路径)

路径说明:

  1. 相对路径:最前面不是 /~,相对于当前目录
  2. 绝对路径:最前面是 /~,从根目录/家目录开始

3.3 创建目录 — —mkdir

mkdir aaa                    # 在当前目录下创建 aaa 目录mkdir ./bbb                  # 同上(相对路径写法)mkdir /ccc                   # 在根目录下创建 ccc 目录(绝对路径)mkdir -p temp/nginx          # 递归创建多级目录(-p 选项)mkdir {dirA,dirB}            # 批量创建多个目录

⚠️ 新建目录名称不能与当前目录中已有的目录或文件同名

3.4 查看目录树 — —tree

tree               # 以树状图显示当前目录结构tree -d            # 只显示目录,不显示文件tree /usr/local    # 查看指定目录的树状结构tree test01/       # 查看 test01 目录的树状结构

3.5 搜索文件/目录 — —find

find / -name 'b'             # 从根目录搜索名为 b 的目录和文件find / -name 'b*'            # 从根目录搜索名以 b 开头的目录和文件find . -name 'b'             # 从当前目录搜索名为 b 的目录和文件find -name "*.py"            # 搜索当前目录下所有 .py 文件(含子目录)find -name "*1*"             # 搜索文件名包含 1 的文件find . -name '*.pyc' -exec rm -rf {} ;   # 递归删除所有 .pyc 文件find . -name "*" -size 145800c -print      # 打印当前目录下指定大小的文件find . -type f -name "*.log"               # 只搜索文件类型(不包括目录)

3.6 移动与重命名 — —mv

mv 原名称 新名称             # 重命名(当前目录内)mv tomcat001 tomcat          # 将 tomcat001 重命名为 tomcatmv /aaa /bbb                 # 将根目录下的 aaa 移动到 bbb 目录下mv bbbb usr/bbb              # 移动并修改名称为 bbbmv bbb usr/aaa               # 移动并修改名称为 aaa

-i 选项:覆盖文件前提示确认

3.7 复制目录 — —cp

cp -r /aaa /bbb              # 将 /aaa 目录复制到 /bbb 下(保持名称 aaa)cp -r /aa /bbb/aaa           # 将 /aa 复制到 /bbb 下,名称改为 aaacp -i 源文件 目标文件         # 覆盖前提示

复制目录必须加 -r 选项(递归复制)

3.8 删除目录 — —rm/rmdir

rm -r /bbb                   # 删除 /bbb 目录(会逐一询问)rm -rf /bbb                  # 强制删除 /bbb 目录(包含子目录,不提示)rmdir test01                 # 删除空目录

rm -rf 操作不可恢复,使用时务必谨慎!

3.9 软链接 — —ln

ln -s /usr/local/app /data   # 创建软链接(类似 Windows 快捷方式)rm -rf /data                 # 删除软链接(路径末尾不加 /)

注意事项:

  1. 没有 -s 建立的是硬链接,工作中几乎不用
  2. 源文件路径建议使用绝对路径,避免移动链接后失效
  3. Linux 中,只有文件硬链接数 == 0 时文件才会被删除

四、文件操作命令

4.1 创建文件 — —touch

touch testFile               # 创建新文件(文件不存在则创建)touch dirA/{A1,A2,A3}        # 在 dirA 目录中批量创建 A1、A2、A3 三个文件

若文件已存在,则修改文件的末次修改时间(不改变内容)

4.2 删除文件 — —rm

rm -r a.java                 # 删除 a.java(每次询问)rm -rf a.java                # 强制删除 a.java(不询问)rm -rf ./a*                  # 强制删除当前目录下所有以 a 开头的文件rm -rf ./*                   # 强制删除当前目录下所有文件(极度危险!)

4.3 文件拆分 — —split

split -b 10k date.file                     # 按大小分割(每份10KB,字母后缀)split -b 10k date.file -d -a 3             # 使用数字后缀,长度为3位split -b 10k date.file -d -a 3 split_file  # 指定输出文件名前缀split -l 10 date.file                      # 按行数分割(每份10行)

split 参数说明:

参数说明
-b每个输出文件的大小(单位:byte,可用 k/m)
-l每个输出文件的行数
-d使用数字作为文件后缀
-a指定后缀长度(默认为2)

4.4 跨服务器文件复制 — —scp

# 将本机文件复制到目标服务器scp /home/user/file.txt [email protected]:/home/user/# 将远程服务器文件复制到本机scp [email protected]:/home/user/file.txt /home/user/# 复制目录(-r 选项)scp -r demo [email protected]:Desktop# 指定端口(-P 大写)scp -P 2222 01.py user@remote:Desktop/01.py

scp 选项说明:

选项含义
-r递归复制目录
-P指定端口号(注意是大写 P)

五、文件内容查看与编辑

5.1 查看文件内容

cat a.java           # 查看文件全部内容(适合内容较少的文件)cat -n a.java        # 查看文件内容,并对所有行编号cat -b a.java        # 查看文件内容,只对非空行编号more a.java          # 分屏显示(空格翻页,Enter翻行,q退出)less a.java          # 分屏显示,支持上下翻页(PageUp/PageDown),q退出head a.java          # 查看文件前10行head -n 7 a.java     # 查看文件前7行tail a.java          # 查看文件后10行tail -n 7 a.java     # 查看文件后7行tail -f a.java       # 实时查看文件末尾新增内容(常用于查看日志)

more 操作键详解:

操作键功能
空格键显示下一屏
Enter一次滚动一行
b回滚一屏
f前滚一屏
q退出
/word搜索 word 字符串

more 和 less 的区别:

对比项moreless
翻页方向只能向后可前后翻页
加载速度需读整个文件按需加载,更快
退出后显示内容残留在终端退出后清屏
上下键不支持支持

5.2 文件内搜索 — —grep

grepGlobal Regular Expression Print 的缩写,强大的文本搜索工具

grep "start" test*               # 在 test 开头的文件中查找含 start 的行grep under 123.txt               # 搜索 under 字符串(大小写敏感)grep -n under 123.txt            # 搜索并显示行号grep -v under 123.txt            # 显示不包含 under 的行(取反)grep -i under 123.txt            # 搜索(忽略大小写)grep -ni under 123.txt           # 忽略大小写,并显示行号grep -A 1 -B 1 "https" wget-log  # 显示匹配行及其前1行(-B)、后1行(-A)grep "^root" /etc/passwd         # 搜索以 root 开头的行grep "bash$" /etc/passwd         # 搜索以 bash 结尾的行

grep 常用选项:

选项含义
-n显示匹配行及行号
-v显示不包含匹配文本的所有行(取反)
-i忽略大小写
-A N显示匹配行及其后 N 行
-B N显示匹配行及其前 N 行

5.3 重定向

echo 'Hello World' > /root/test.txt    # 覆盖写入(文件不存在则创建)echo 'Hello World' >> /root/test.txt   # 追加写入
符号含义
>输出重定向,覆盖文件原有内容
>>输出重定向,追加到文件末尾

六、文本处理三剑客

6.1 awk — — 数据统计与处理

awk 功能强大,一次读取一行文本,按分隔符切片后处理

语法: awk [options] 'cmd' file

  1. 切片保存在内建变量中:$1, $2, …$0 表示整行)
  2. 默认分隔符为空格,-F 选项可指定分隔符
# 打印第1列和第3列awk '{print $1,$3}' email.out# 当第1列为tcp且第2列为1时,打印整行awk '$1=="tcp" && $2==1 {print $0}' email.out# 打印表头(NR==1表示第一行)awk '($1=="tcp" && $2==1) || NR==1 {print $0}' email.out# 以逗号为分隔符,打印第2列awk -F "," '{print $2}' test.txt# 统计各IP出现次数awk '{count[$1]++} END {for(i in count) print i "t" count[i]}' access.log# 按逗号切分,将第一列追加到文件awk -F "," '{print $1 >> "test01.txt"}' data.txt

6.2 sed — — 流编辑器(替换文件内容)

sed 全名 Stream Editor,适合对文本行内容进行批量处理,支持正则表达式

语法: sed [option] 'sed command' filename

sed 常用操作标记:

标记说明
g行内全部替换(不加则只替换首个)
p打印匹配行
d删除匹配行
w将匹配行写入文件
s替换操作
# 将以 Str 开头的替换为 String(^ 表示行首)sed -i 's/^Str/String/' replace.java# 将行末的 . 替换为 ;(需转义 .)sed -i 's/.$/;/' replace.java# 全文将 Jack 替换为 me(g 表示全部替换)sed -i 's/Jack/me/g' replace.java# 删除空行(^ *$ 匹配只有空格的行)sed -i '/^ *$/d' replace.java# 删除包含 Integer 的行sed -i '/Integer/d' replace.java# 多命令同时执行(用 ; 分隔)grep 'input' 123.txt | sed 's/"//g; s/,/n/g'# 替换后保存到新文件sed -n 's/"//gw test01.txt' 123.txt

6.3 cut — — 数据裁剪

从文件每一行中剪切字段并输出

语法: cut [选项] 文件名

选项功能
-f列号,提取第几列
-d分隔符(默认是制表符 t
# 以中文冒号分隔,提取第1列cut -d ":" -f 1 cut.txt# 以 : 分隔,提取 $PATH 的第3列echo $PATH | cut -d ":" -f 3# 以 : 分隔,提取第3列及之后所有列echo $PATH | cut -d ":" -f 3-

七、管道与重定向

7.1 管道操作符|

将前一个命令的标准输出作为后一个命令的输入

注意事项:

  1. 只处理前一个命令的正确输出,不处理错误输出
  2. 右边命令必须能够接收标准输入流
ls -l | more                         # 分屏显示 ls 结果ls -l | grep ".py"                   # 在 ls 结果中查找 .py 文件# 从日志中查询包含 error 的行grep 'error' email.log# 过滤 error 行中包含数字的部分grep 'error' email.log | grep -o '[0-9]'# 过滤包含 tomcat 的进程,排除当前 grep 进程ps -ef | grep tomcat | grep -v grep# 综合管道:提取、切分、替换、保存grep 'input' 123.txt | awk -F ',' '{print $2}' | sed 's/"//g' | awk -F ":" '{print $1 >> "test01.txt"}'

7.2 xargs — — 参数传递过滤器

将标准输入数据转换成命令行参数

# -n:每行输出指定数量cat test.txt | xargs -n3# -d:按指定字符分隔文本echo "nameXnameXnameXname" | xargs -dX# -I:命令替换(每个参数执行一次命令)ls *.jpg | xargs -n1 -I {} cp {} /data/images/# -t:将执行的命令也打印出来ls * | xargs -t -n1 -I {} cp -r {} /root/backup/# 组合使用:X分隔,每行2个echo "nameXnameXnameXname" | xargs -dX -n2

八、压缩与解压缩

8.1 tar 打包命令

压缩打包(-c):

tar -cvf start.tar a.java b.java       # 将 a.java、b.java 打包tar -cvf start.tar ./*                 # 将当前目录下所有文件打包tar -zcvf start.tar.gz a.java b.java   # 打包并使用 gzip 压缩tar -zcvf start.tar.gz ./*             # 将当前目录打包压缩为 .tar.gztar -jcvf start.tar.bz2 ./*           # 打包并使用 bzip2 压缩(.tar.bz2)

解压缩(-x):

tar -xvf start.tar                     # 解包到当前目录tar -xvf start.tar -C /usr/local       # 解包到 /usr/local 目录tar -zxvf start.tar.gz                 # 解压 .tar.gz 到当前目录tar -zxvf start.tar.gz -C /usr/local   # 解压 .tar.gz 到指定目录tar -jxvf start.tar.bz2               # 解压 .tar.bz2 到当前目录tar xf node-v12.18.1-linux-x64.tar.xz # 解压 .tar.xz 文件

tar 选项说明:

选项含义
c创建打包文件
x解开打包文件
v显示详细进度
f指定档案文件名(必须放在选项最后
-z调用 gzip 进行压缩/解压缩
-j调用 bzip2 进行压缩/解压缩
-C解压到指定目录(目录必须事先存在)

f 选项必须放在选项列表的最后!

8.2 zip/unzip 命令

压缩(zip):

zip lib.zip tomcat.jar                         # 压缩单个文件zip -r lib.zip lib/                            # 压缩整个目录zip -r lib.zip file1.jar file2.jar             # 压缩多个文件

解压缩(unzip):

unzip file1.zip                                # 解压到当前目录unzip -d /usr/app/ com.example.zip             # 解压到指定目录

九、系统信息与进程管理

9.1 时间与日期

date               # 查看系统当前时间cal                # 查看本月日历cal -y             # 查看本年日历

9.2 磁盘信息

df -h                       # 查看系统各分区磁盘使用情况(human-readable)du -lh                      # 查看当前目录下各文件夹占用空间du -sh                      # 查看当前文件夹总占用空间du -h /usr/local            # 查看指定目录大小du --max-depth=1            # 只查看当前目录下一级的占用情况

9.3 进程管理

ps aux                      # 查看所有进程详细状态ps -ef | grep java          # 查看名称含 java 的进程ps -ef | grep mysql         # 查看 MySQL 相关进程ps -aux | grep 28990        # 根据 PID 查看进程信息top                         # 动态实时查看进程资源占用(q 退出)kill -9 2630                # 强制终止 PID 为 2630 的进程

ps 选项说明:

选项含义
a显示终端上的所有进程(包含其他用户)
u显示进程的详细状态
x显示没有控制终端的进程

9.4 top 命令详解

top    # 实时查看系统资源占用(按 q 退出)

统计信息区说明:

top - 15:33:39 up 5:40, 2 users, load average: 1.09, 1.04, 0.98Tasks: 123 total,   3 running, 120 sleeping,   0 stopped,   0 zombie%Cpu(s): 42.1 us,  2.0 sy,  0.0 ni, 49.2 id,  0.0 wa,  6.0 hi,  0.7 siKiB Mem:  3780.9 total,  727.4 free,  668.8 used,  2384.7 buff/cacheKiB Swap: 2048.0 total,  2046.0 free,    2.0 used,   859.6 avail
字段说明
us用户空间占用 CPU 百分比
sy内核空间占用 CPU 百分比
id空闲 CPU 百分比
wa等待 I/O 的 CPU 时间百分比

进程信息区字段说明:

字段说明
PID进程 ID
USER进程所有者
PR优先级
NInice 值(负值=高优先级)
%CPUCPU 占用百分比
%MEM内存占用百分比
S进程状态(R=运行,S=睡眠,Z=僵尸)
COMMAND命令名

9.5 后台运行程序

nohup sh test.sh &                    # 后台运行,日志输出到 nohup.outnohup sh test.sh >> test.out &        # 后台运行,日志输出到 test.out

9.6 关机与重启

shutdown -h now                        # 立即关机shutdown -h 10:53                      # 在 10:53 关机shutdown -h +10                        # 10分钟后自动关机shutdown -r now                        # 立即重启shutdown -r +30 '30 minutes to reboot' # 30分钟后重启并通知用户shutdown -c                            # 取消之前的关机/重启计划reboot                                 # 强制重启

十、用户与权限管理

10.1 文件权限说明

-rw-r--r-- 1 root root 34942 Jan 19 2018 bootstrap.jar

权限位说明:

- r: read(读取) w: write(写入) x: execute(执行)

- : 文件类型(-=普通文件,d=目录,l=软链接)

  1. 前3位:文件所有者的权限(user)
  2. 中3位:所属组其他用户的权限(group)
  3. 后3位:其他用户的权限(others)

示例:rw-r--r-- 表示

  1. 所有者:可读、可写、不可执行
  2. 同组用户:可读、不可写、不可执行
  3. 其他用户:可读、不可写、不可执行

10.2 修改文件权限 — —chmod

# 符号方式chmod u+x web.xml     # 给所有者(user)添加执行权限chmod g+x web.xml     # 给所属组(group)添加执行权限chmod o+x web.xml     # 给其他用户(others)添加执行权限chmod a+x web.xml     # 给所有人添加执行权限# 数字方式(r=4, w=2, x=1)chmod 755 web.xml     # rwxr-xr-x(所有者全权限,其他只读执行)chmod 644 web.xml     # rw-r--r--(所有者读写,其他只读)chmod 777 web.xml     # rwxrwxrwx(所有人全权限,生产中慎用)chmod 111 web.xml     # --x--x--x(所有人只有执行权限)chmod -R 755 dir/     # 递归修改目录下所有文件权限

10.3 修改文件所有者 — —chown

chown sum file.txt                    # 将文件所有者改为 sumchown sum:sum file.txt                # 同时改所有者和所属组为 sumchown -R sum /usr/sum/               # 递归修改目录下所有文件的所有者chown -R sum:sum /usr/sum/           # 递归修改所有者和所属组

10.4 用户管理

# 添加用户useradd -d /usr/sum -m sum           # 创建用户 sum,家目录为 /usr/sum# 设置用户密码passwd sum# 切换用户su - sum                             # 切换到 sum 用户(并切换到其家目录)su sum                               # 切换到 sum 用户(保持当前目录)exit                                 # 退出当前登录,回到上一个用户# 查看用户信息id sum                               # 查看用户 UID 和 GIDwho                                  # 查看当前所有登录用户whoami                               # 查看当前登录用户账户名cat /etc/passwd                      # 查看所有用户列表# 修改用户信息usermod 选项 用户名# 删除用户userdel sum                          # 删除用户rm -rf /usr/sum                      # 删除用户家目录(需分开执行)# 赋予 root 权限(sudo 权限)visudo                               # 编辑 sudoers 文件# 在文件中添加:sum ALL=(ALL) ALLsudo -s                              # 使用 root 权限执行命令

10.5 组管理

groupadd groupname                   # 创建用户组groupdel groupname                   # 删除用户组groupmod -n newname oldname          # 将用户组改名chgrp -R groupname dir/              # 递归修改目录所属组cat /etc/group                       # 查看所有组的信息

十一、网络与远程管理

11.1 查看/配置网卡 — —ifconfig

ifconfig                             # 查看所有网卡配置信息ifconfig | grep inet                 # 只显示 IP 地址
  1. Linux 物理网卡名通常以 ensXX 表示
  2. 127.0.0.1 是本地回环地址,用于测试本机网卡

11.2 网络连通性检测 — —ping

ping 192.168.1.100                   # 持续 ping 目标 IPping -c 4 www.example.com            # 发送4个 ping 包后停止ping 127.0.0.1                       # 检测本机网卡是否正常

11.3 端口与连接检测

telnet 49.32.587.164 8093            # 检查目标服务器指定端口是否可用lsof -i:8080                         # 查看占用 8080 端口的进程netstat -tunlp | grep 8080           # 查看指定端口的进程信息netstat -tunlp                       # 显示所有 tcp/udp 端口和进程情况netstat -lt                          # 列出所有处于状态的 tcp 端口netstat -an                          # 查看当前系统的 IP 连接(全平台通用)

查看连接状态数量:

netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'

11.4 远程登录 — —ssh

ssh [email protected]               # 使用默认 22 端口登录ssh -p 2222 [email protected]       # 指定端口号登录exit                                 # 退出 SSH 会话
参数说明
user远程机器上的用户名
remote远程机器的 IP 或域名
-p port指定端口号(默认22)

11.5 curl 命令

# GET 请求curl "http://www.example.com"# POST 请求(表单格式)curl -d 'login=admin&password=123' -X POST https://example.com/login# POST 请求(JSON 格式)curl -l -H "Content-type: application/json"      -X POST      -d '{"phone":"13800138000","password":"test"}'      http://example.com/api/users

11.6 添加 Hosts

vim /etc/hosts                       # 编辑 hosts 文件# 添加一行:49.235.32.164 www.example.com/etc/init.d/network restart          # 保存后重启网络生效

11.7 防火墙管理

service iptables status              # 查看防火墙状态service iptables stop                # 临时关闭防火墙chkconfig iptables off               # 设置防火墙开机不启动

十二、软件包管理

12.1 yum(CentOS/RedHat)

yum install iptables-services        # 安装软件包yum list                             # 列出当前已安装的所有包yum search package_name              # 在仓库中搜索软件包yum update package_name              # 更新指定软件包yum remove package_name              # 删除软件包yum clean all                        # 清除所有缓存# 安装文件传输工具(上传下载)yum install -y lrzszrz                                   # 上传文件到服务器sz filename                          # 从服务器下载文件

12.2 apt(Ubuntu/Debian)

sudo apt install 软件包名             # 安装软件sudo apt remove 软件名               # 卸载软件sudo apt upgrade                     # 更新所有已安装的包sudo apt update                      # 更新软件包列表

十三、其他实用命令

13.1 历史命令

history                              # 查看历史使用过的命令history | grep es                    # 过滤与 es 相关的历史命令

13.2 查看系统信息

cat /etc/redhat-release              # 查看操作系统版本(RedHat/CentOS)cat /etc/shells                      # 查看系统支持的 shell 列表echo $USER                           # 输出当前用户名echo $PATH                           # 输出系统路径变量set                                  # 输出所有环境变量which ls                             # 查看命令所在的位置(如 /bin/ls)which useradd                        # 查看命令路径(如 /usr/sbin/useradd)

13.3 定时任务

crontab -e                           # 打开/编辑定时任务文件# 示例:每天 0 点执行脚本0 0 * * * /data/shell/bin/del-30-days-ago-log.sh

crontab 时间格式:

分 时 日 月 周   命令*  *  *  *  *   /path/to/script.sh

13.4 Linux 内核参数优化

vim /etc/sysctl.conf                 # 编辑内核参数配置文件sysctl -p                            # 重新加载配置(不重启生效)

十四、系统日志

常用系统日志文件位置(以 RedHat/CentOS 为例):

/var/log/messages      # 系统启动后的信息和错误日志(最常用)/var/log/secure        # 安全相关的日志信息/var/log/maillog       # 邮件相关的日志信息/var/log/cron          # 定时任务相关的日志/var/log/spooler       # UUCP 和 news 设备相关的日志/var/log/boot.log      # 守护进程启动和停止的日志# 查看操作历史cat .bash_history      # 查看当前用户的命令历史记录

十五、Docker 容器常用命令

# 搜索镜像docker search mysql# 查看已下载的镜像docker images# 下载并运行容器docker run -di --name=mycontainer -p 3306:3306            -e MYSQL_ROOT_PASSWORD=root <镜像ID># 查看运行中的容器docker ps# 查看所有容器(包括未运行的)docker ps -a# 停止/启动/重启容器docker stop mycontainerdocker start mycontainerdocker restart mycontainer# 删除容器docker rm mycontainer

十六、Vim 编辑器详细使用指南

16.1 Vim 简介

vim 是 Linux 系统上最常用的文本编辑器,功能强大。它有三种主要工作模式:

┌─────────────────────────────────────────────────┐

│ Vim 三种模式 │

│ │

│ 普通模式 ──i/a/o──→ 插入模式 │

│ ↑ │ │

│ └─────── ESC ────────┘ │

│ │ │

│ └──── : ────→ 命令行模式 ──→ 执行后回普通 │

└─────────────────────────────────────────────────┘

16.2 打开文件

vim filename.txt         # 打开文件(不存在则创建新文件)vim +3 filename.txt      # 打开文件并跳转到第3行vim +/keyword file.txt   # 打开文件并定位到第一个关键词处vi filename.txt          # vi 是 vim 的精简版

16.3 三种模式详解

模式一:普通模式(Normal Mode)

打开文件后默认进入普通模式,不能直接输入文字,主要用于移动光标、复制、删除、搜索等操作。

光标移动:

按键功能
h向左移动一个字符
l向右移动一个字符
j向下移动一行
k向上移动一行
w跳到下一个单词开头
b跳到上一个单词开头
0跳到行首
$跳到行尾
gg跳到文件开头(第一行)
G跳到文件末尾(最后一行)
nG:n跳到第 n 行
Ctrl+f向下翻页
Ctrl+b向上翻页

复制、粘贴、删除:

按键功能
yy复制当前行
nyy复制当前行起的 n 行(如 3yy
p在当前行下方粘贴
P在当前行上方粘贴
dd删除(剪切)当前行
ndd删除(剪切)当前行起的 n 行
x删除光标所在字符
dw删除一个单词
D删除从光标到行尾
u撤销上一步操作(undo)
Ctrl+r重做(redo)

搜索:

按键功能
/keyword向下搜索 keyword
?keyword向上搜索 keyword
n跳到下一个匹配项
N跳到上一个匹配项

模式二:插入模式(Insert Mode)

在普通模式下按以下键进入插入模式(开始输入文字):

按键进入位置
i在光标插入
a在光标插入
I行首插入
A行尾插入
o在当前行下方新建一行并插入
O在当前行上方新建一行并插入

ESC 键退出插入模式,返回普通模式

模式三:命令行模式(Command-Line Mode)

在普通模式下按 : 进入命令行模式(屏幕底部出现 : 提示符):

文件保存与退出:

命令功能
:w保存文件(不退出)
:q退出(文件无修改时有效)
:wq保存并退出
:wq!强制保存并退出
:q!强制退出(放弃所有修改)
:x保存并退出(等同于 :wq
:w filename另存为指定文件名

文本替换:

命令功能
:s/old/new替换当前行第一个匹配
:s/old/new/g替换当前行所有匹配
:%s/old/new/g替换整个文件所有匹配
:1,5s/old/new/g替换第1到第5行所有匹配

行号与跳转:

命令功能
:set nu显示行号
:set nonu隐藏行号
:n跳转到第 n 行(如 :10 跳到第10行)

其他命令:

命令功能
:!command在不退出 vim 的情况下执行 shell 命令
:r filename将指定文件内容插入当前光标位置
:e filename在 vim 中打开另一个文件

16.4 Vim 快速参考总结

打开文件:vim file.txt

普通模式(默认)

↓ i / a / o

插入模式(输入文字)

↓ ESC

返回普通模式

↓ :

命令行模式(保存/退出)

:wq 保存退出 | :q! 不保存退出

16.5 Vim 常用操作速记

# 快速编辑文件并保存退出vim file.txt    # 打开i               # 进入插入模式# ... 输入内容 ...ESC             # 退出插入模式:wq             # 保存退出# 只读查看文件vim -R file.txt # 只读模式打开:q              # 查看后退出# 快速替换文本vim file.txt:%s/Jack/Tom/g  # 全文替换 Jack 为 Tom:wq             # 保存退出

十七、C 语言代码编译

17.1 GCC 编译器基础

GCC(GNU Compiler Collection)是 Linux 下最常用的 C/C++ 编译器。

# 安装 GCC(CentOS/RedHat)yum install -y gcc# 安装 GCC(Ubuntu/Debian)sudo apt install gcc# 查看 GCC 版本gcc --version

17.2 C 语言编译基本流程

源代码(.c)→ 预处理(.i)→ 编译(.s)→ 汇编(.o)→ 链接 → 可执行文件

17.3 GCC 常用编译命令

最简单的编译(一步到位)

gcc hello.c -o hello       # 编译 hello.c,生成可执行文件 hello./hello                    # 运行程序

分步编译(了解各阶段)

# 第一步:预处理(展开宏定义和头文件,生成 .i 文件)gcc -E hello.c -o hello.i# 第二步:编译(生成汇编代码 .s 文件)gcc -S hello.i -o hello.s# 第三步:汇编(生成目标文件 .o 文件)gcc -c hello.s -o hello.o# 第四步:链接(生成最终可执行文件)gcc hello.o -o hello

常用编译选项

# 开启所有警告(推荐初学者使用,帮助发现潜在问题)gcc -Wall hello.c -o hello# 开启调试信息(用于 GDB 调试)gcc -g hello.c -o hello# 指定 C 语言标准gcc -std=c99 hello.c -o hello      # 使用 C99 标准gcc -std=c11 hello.c -o hello      # 使用 C11 标准# 开启优化gcc -O1 hello.c -o hello           # 1级优化gcc -O2 hello.c -o hello           # 2级优化(常用)gcc -O3 hello.c -o hello           # 3级优化# 链接数学库(使用 math.h 时需要)gcc hello.c -o hello -lm# 同时指定多个源文件gcc main.c utils.c -o program# 指定头文件搜索路径gcc -I /usr/local/include hello.c -o hello# 指定库文件搜索路径gcc hello.c -L /usr/local/lib -lmylib -o hello

17.4 完整示例

1. 编写第一个 C 程序:

vim hello.c     # 创建并编辑源文件

在 vim 中输入以下内容:

#include int main() {    printf("Hello, Linux!n");    return 0;}

2. 编译并运行:

gcc hello.c -o hello      # 编译./hello                   # 运行# 输出:Hello, Linux!

17.5 多文件项目编译

目录结构示例:

project/

├── main.c

├── add.c

├── add.h

└── Makefile

手动编译多文件:

# 分别编译各源文件为目标文件gcc -c main.c -o main.ogcc -c add.c -o add.o# 链接所有目标文件gcc main.o add.o -o project# 运行./project

一步编译多文件:

gcc main.c add.c -o project

17.6 使用 Makefile 管理编译

Makefile 可以自动化编译过程,避免每次手动输入编译命令

基本 Makefile 示例(Makefile 文件):

# 目标文件名TARGET = project# C 编译器CC = gcc# 编译选项CFLAGS = -Wall -g# 源文件列表SRCS = main.c add.c# 目标文件列表(.c 替换为 .o)OBJS = $(SRCS:.c=.o)# 默认目标:生成可执行文件$(TARGET): $(OBJS)$(CC) $(OBJS) -o $(TARGET)# 编译每个 .c 文件为 .o 文件%.o: %.c$(CC) $(CFLAGS) -c $< -o $@# 清理编译产生的文件clean:rm -f $(OBJS) $(TARGET)

Makefile 使用命令:

make              # 编译项目make clean        # 清理编译产生的中间文件和可执行文件make -j4          # 使用4个并行任务加速编译

17.7 GDB 调试基础

GDB(GNU Debugger)是 Linux 下的 C/C++ 调试工具

# 编译时必须加 -g 选项才能调试gcc -g hello.c -o hello# 启动 GDB 调试gdb ./hello

GDB 常用命令:

命令简写说明
runr运行程序
break 行号b在指定行设置断点
break 函数名b在函数入口设置断点
nextn执行下一行(不进入函数)
steps执行下一行(进入函数内部)
print 变量名p打印变量的值
continuec继续运行到下一个断点
listl显示源代码
quitq退出 GDB
backtracebt显示调用栈
info locals显示局部变量

GDB 调试示例:

gdb ./hello(gdb) break main          # 在 main 函数设置断点(gdb) run                 # 开始运行(gdb) next                # 执行下一行(gdb) print i             # 打印变量 i 的值(gdb) continue            # 继续运行(gdb) quit                # 退出

17.8 常见编译错误解决

错误信息可能原因解决方法
No such file or directory头文件路径不对检查 #include 路径或加 -I 参数
undefined reference to 'xxx'链接时找不到函数检查是否缺少库,加 -l 参数
implicit declaration of function未声明函数就使用添加对应头文件或前向声明
expected ';' before '}'语法错误(缺分号)检查报错行及其上一行
segmentation fault访问非法内存(段错误)使用 GDB 调试,检查指针
warning: unused variable声明了变量但未使用删除未使用的变量

十八、快速参考速查表

目录与文件操作

分类命令说明
目录导航pwd查看当前目录
cd ~ / cd .. / cd -切换到家目录/上级/上次目录
ll / ls -alh查看目录内容(含隐藏文件/详细信息)
tree以树状图显示目录结构
目录操作mkdir -p dir/sub递归创建目录
rmdir dir删除空目录
rm -rf dir强制删除目录(含所有内容)
文件操作touch file创建文件
cp -r src dst递归复制
mv src dst移动或重命名
find -name "*.c"按名称查找文件
ln -s src link创建软链接

文件内容处理

分类命令说明
查看内容cat -n file带行号查看
more / less分屏查看
head -n 10 / tail -n 10查看前/后N行
tail -f logfile实时查看日志
文本搜索grep -n pattern file显示匹配行及行号
grep -v pattern file显示不匹配的行
grep -i pattern file忽略大小写搜索
文本处理awk '{print $1}' file打印第1列
sed 's/old/new/g' file全文替换
cut -d "," -f 1 file按分隔符提取列
重定向cmd > file覆盖输出到文件
cmd >> file追加输出到文件
管道cmd1 | cmd2将cmd1输出作为cmd2输入

压缩解压

命令说明
tar -zcvf out.tar.gz dir/gzip 压缩目录
tar -zxvf file.tar.gz解压 .tar.gz
tar -zxvf file.tar.gz -C /dest解压到指定目录
zip -r out.zip dir/zip 压缩目录
unzip file.zip -d /dest解压 zip 到指定目录

系统与进程

命令说明
ps aux查看所有进程
top动态查看进程(q退出)
kill -9 PID强制终止进程
df -h查看磁盘空间
du -sh dir/查看目录大小
shutdown -r now立即重启
shutdown now立即关机
date查看系统时间

用户与权限

命令说明
chmod 755 file修改文件权限
chown user:group file修改文件所有者和组
su - username切换用户
sudo command以管理员权限执行
useradd username创建用户
passwd username设置密码
groupadd groupname创建用户组

网络与远程

命令说明
ifconfig查看网卡信息
ping ip检测网络连通性
ssh user@host远程登录
scp file user@host:path远程复制文件
netstat -tunlp查看端口占用
lsof -i:8080查看指定端口
curl url发送 HTTP 请求

Vim 常用操作

操作命令
打开文件vim file.txt
进入插入模式i(光标前)/ a(光标后)/ o(下行新增)
退出插入模式ESC
保存退出:wq
不保存退出:q!
全文替换:%s/old/new/g
搜索/keyword(向下)/ ?keyword(向上)
复制行yy / nyy(复制n行)
删除行dd / ndd(删除n行)
撤销u

C 语言编译常用命令

命令说明
gcc hello.c -o hello编译C程序
gcc -Wall hello.c -o hello编译并显示所有警告
gcc -g hello.c -o hello编译并加入调试信息
gcc -std=c99 hello.c -o hello使用C99标准编译
./hello运行可执行文件
make使用Makefile编译项目
make clean清理编译产物
gdb ./hello启动GDB调试

学习建议:

  1. 多练习常用命令,熟能生巧
  2. 遇到不熟悉的命令,先用 man 命令名命令 --help 查阅文档
  3. Vim 的使用需要刻意练习,建议每天使用 vim 编辑文件
  4. C 语言编译建议从单文件开始,逐步过渡到 Makefile 管理多文件项目
  5. 在实验环境中大胆尝试各种命令,积累经验

# 将命令输出插入当前文件

附录:常用快捷键总结

快捷键说明
Tab命令/路径自动补全
Ctrl+C终止当前运行的程序
Ctrl+Z挂起当前程序
Ctrl+D退出当前终端 / EOF
Ctrl+L清屏(相当于 clear)
Ctrl+A光标移到行首
Ctrl+E光标移到行尾
Ctrl+U删除光标前所有内容
Ctrl+K删除光标后所有内容
Ctrl+R搜索历史命令
上/下方向键浏览历史命令

本文全面整理了Linux目录结构、文件操作、文本处理、系统管理及编译调试等核心命令,为日常使用提供系统化参考。

热门栏目