Linux

关注公众号 jb51net

关闭
首页 > 网站技巧 > 服务器 > Linux > Linux常用命令

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

作者:小范好好学习

本文整理了Linux中的常用命令,涵盖Linux日常操作、C语言编译与Vim编辑器使用,内容包括系统目录结构、终端命令格式、目录操作、文件操作等内容,适合系统初学者和进阶者

一、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 文件和目录特点:

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 目录(相对路径)

路径说明:

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                 # 删除软链接(路径末尾不加 /)

注意事项:

四、文件操作命令

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 的区别:

对比项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列和第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优先级
NInice 值(负值=高优先级)
%CPUCPU 占用百分比
%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=软链接)

示例: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 地址

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 常用命令:

命令简写说明
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中最全常用命令速查表(建议收藏备用)的详细内容,更多关于Linux常用命令的资料请关注脚本之家其它相关文章!

您可能感兴趣的文章:
阅读全文