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
ls 是 list 的简写,列出目录内容
ls # 列出当前目录内容 ls -a # 显示所有文件,包括隐藏文件(以.开头) ls -l # 以列表方式显示文件详细信息(可简写为 ll) ls -lh # 以列表方式显示,并以人性化方式显示文件大小 ls -al # 组合:显示所有文件+详细信息 ll # 等同于 ls -l(很多发行版支持)
Linux 文件和目录特点:
- 文件或目录名最长可有 256 个字符
- 以
.开头的文件为隐藏文件,需用-a参数显示 .代表当前目录,..代表上一级目录- 所有目录和文件名大小写敏感
ls 通配符:
| 通配符 | 含义 |
|---|---|
* | 代表任意个数个字符 |
? | 代表任意一个字符(至少1个) |
[abc] | 匹配 a、b、c 中的任意一个 |
[a-f] | 匹配 a 到 f 范围内的任意一个字符 |
3.2 切换目录 ——cd
cd 是 change directory 的简写
pwd # 查看当前工作目录(print work directory) cd # 切换到当前用户主目录(/home/用户名) cd ~ # 切换到当前用户主目录 cd / # 切换到根目录 cd .. # 切换到上一级目录 cd - # 切换到上一次访问的目录(在两个目录间来回切换) cd /usr/local # 切换到指定绝对路径 cd ./aaa # 切换到当前目录下的 aaa 目录(相对路径)
路径说明:
- 相对路径:最前面不是
/或~,相对于当前目录 - 绝对路径:最前面是
/或~,从根目录/家目录开始
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 重命名为 tomcat mv /aaa /bbb # 将根目录下的 aaa 移动到 bbb 目录下 mv bbbb usr/bbb # 移动并修改名称为 bbb mv bbb usr/aaa # 移动并修改名称为 aaa
-i 选项:覆盖文件前提示确认
3.7 复制目录 ——cp
cp -r /aaa /bbb # 将 /aaa 目录复制到 /bbb 下(保持名称 aaa) cp -r /aa /bbb/aaa # 将 /aa 复制到 /bbb 下,名称改为 aaa cp -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 # 删除软链接(路径末尾不加 /)
注意事项:
- 没有
-s建立的是硬链接,工作中几乎不用 - 源文件路径建议使用绝对路径,避免移动链接后失效
- 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 user@192.168.1.100:/home/user/ # 将远程服务器文件复制到本机 scp user@192.168.1.100:/home/user/file.txt /home/user/ # 复制目录(-r 选项) scp -r demo user@192.168.1.100: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 的区别:
| 对比项 | more | less |
|---|---|---|
| 翻页方向 | 只能向后 | 可前后翻页 |
| 加载速度 | 需读整个文件 | 按需加载,更快 |
| 退出后显示 | 内容残留在终端 | 退出后清屏 |
| 上下键 | 不支持 | 支持 |
5.2 文件内搜索 ——grep
grep 是 Global 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, $2, …($0表示整行) - 默认分隔符为空格,
-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 管道操作符|
将前一个命令的标准输出作为后一个命令的输入
注意事项:
- 只处理前一个命令的正确输出,不处理错误输出
- 右边命令必须能够接收标准输入流
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.gz tar -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.98 Tasks: 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 si KiB Mem: 3780.9 total, 727.4 free, 668.8 used, 2384.7 buff/cache KiB 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 | 优先级 |
| NI | nice 值(负值=高优先级) |
| %CPU | CPU 占用百分比 |
| %MEM | 内存占用百分比 |
| S | 进程状态(R=运行,S=睡眠,Z=僵尸) |
| COMMAND | 命令名 |
9.5 后台运行程序
nohup sh test.sh & # 后台运行,日志输出到 nohup.out nohup 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=软链接)
- 前3位:文件所有者的权限(user)
- 中3位:所属组其他用户的权限(group)
- 后3位:其他用户的权限(others)
示例:rw-r--r-- 表示
- 所有者:可读、可写、不可执行
- 同组用户:可读、不可写、不可执行
- 其他用户:可读、不可写、不可执行
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 # 将文件所有者改为 sum chown sum:sum file.txt # 同时改所有者和所属组为 sum chown -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 和 GID who # 查看当前所有登录用户 whoami # 查看当前登录用户账户名 cat /etc/passwd # 查看所有用户列表 # 修改用户信息 usermod 选项 用户名 # 删除用户 userdel sum # 删除用户 rm -rf /usr/sum # 删除用户家目录(需分开执行) # 赋予 root 权限(sudo 权限) visudo # 编辑 sudoers 文件 # 在文件中添加:sum ALL=(ALL) ALL sudo -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 地址
- Linux 物理网卡名通常以
ensXX表示 127.0.0.1是本地回环地址,用于测试本机网卡
11.2 网络连通性检测 ——ping
ping 192.168.1.100 # 持续 ping 目标 IP ping -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 user@192.168.1.100 # 使用默认 22 端口登录 ssh -p 2222 user@192.168.1.100 # 指定端口号登录 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 lrzsz rz # 上传文件到服务器 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 mycontainer
docker start mycontainer
docker 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 <stdio.h>
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.o gcc -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 常用命令:
| 命令 | 简写 | 说明 |
|---|---|---|
run | r | 运行程序 |
break 行号 | b | 在指定行设置断点 |
break 函数名 | b | 在函数入口设置断点 |
next | n | 执行下一行(不进入函数) |
step | s | 执行下一行(进入函数内部) |
print 变量名 | p | 打印变量的值 |
continue | c | 继续运行到下一个断点 |
list | l | 显示源代码 |
quit | q | 退出 GDB |
backtrace | bt | 显示调用栈 |
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调试 |
学习建议:
- 多练习常用命令,熟能生巧
- 遇到不熟悉的命令,先用
man 命令名或命令 --help查阅文档 - Vim 的使用需要刻意练习,建议每天使用 vim 编辑文件
- C 语言编译建议从单文件开始,逐步过渡到 Makefile 管理多文件项目
- 在实验环境中大胆尝试各种命令,积累经验
# 将命令输出插入当前文件
附录:常用快捷键总结
| 快捷键 | 说明 |
|---|---|
| Tab | 命令/路径自动补全 |
| Ctrl+C | 终止当前运行的程序 |
| Ctrl+Z | 挂起当前程序 |
| Ctrl+D | 退出当前终端 / EOF |
| Ctrl+L | 清屏(相当于 clear) |
| Ctrl+A | 光标移到行首 |
| Ctrl+E | 光标移到行尾 |
| Ctrl+U | 删除光标前所有内容 |
| Ctrl+K | 删除光标后所有内容 |
| Ctrl+R | 搜索历史命令 |
| 上/下方向键 | 浏览历史命令 |
以上就是Linux中最全常用命令速查表(建议收藏备用)的详细内容,更多关于Linux常用命令的资料请关注脚本之家其它相关文章!
