Linux 基础命令
核心概念:终端、Shell 与内核的关系
Linux 中用户通过终端(Terminal)与系统交互,终端是运行Shell(命令解释器)的窗口,而 Shell 是连接用户与内核(Kernel)的桥梁:
- 内核:系统核心,管理 CPU、内存、硬盘等硬件资源,无法直接被用户操作;
- Shell:命令解释器(如 bash,Ubuntu 默认 Shell),接收用户输入的命令,翻译成内核能理解的指令,再将结果反馈给用户;
- 终端:运行 Shell 的界面(如 GNOME Terminal),相当于 “Shell 的载体”,用户在终端中输入命令,Shell 在后台处理。
终端操作快捷键:
Ctrl+Alt+T
:打开新终端;Ctrl+Shift+N
:在当前路径下打开新终端;Ctrl+L
:清屏(与clear
命令效果一致);Ctrl+C
:终止当前正在运行的命令(如终止ping
)。
用户权限:普通用户与 root 用户
Linux 是多用户系统,不同用户权限不同,核心分为两类:
- root 用户(超级用户):拥有系统最高权限,可修改任何文件、执行任何命令(如删除系统文件),提示符为
#
; - 普通用户:仅能操作自己家目录(
/home/用户名
)下的文件,无法修改系统配置,提示符为$
。
权限切换命令
命令 | 作用 | 注意事项 |
---|---|---|
sudo su |
普通用户切换为 root 用户 | 需当前用户在sudoers 配置文件中(Ubuntu 默认初始用户在其中),输入当前用户密码(不回显) |
su 用户名 |
root 用户切换为普通用户 | 无需密码,直接切换 |
exit |
从 root 用户退回普通用户 | 或按Ctrl+D 快捷键 |
sudo 命令 |
普通用户临时以 root 权限执行单个命令 | 避免长期使用 root 导致误操作(如sudo apt install vim ) |
sudo 的关键说明
- sudo 的配置文件是
/etc/sudoers
,修改需用sudo visudo
(避免直接用 gedit 导致语法错误); - 普通用户执行 sudo 时,密码有效期为 5 分钟(5 分钟内再次用 sudo 无需输密码);
- 禁止随意给普通用户添加 sudo 权限,防止误操作删除系统文件。
命令格式:通用结构与选项规则
Linux 命令的基本格式:用户名@主机名:当前路径$ 命令 [选项] [参数]
- 命令:核心操作(如
ls
查看目录、cd
切换目录),全为小写(如LS
无效); - 选项:调整命令功能,分两种格式:
- 短格式:以 开头,单个字母(如
ls -l
,显示详细信息); - 长格式:以
-
开头,完整单词(如ls --list
,与ls -l
功能相同);
- 短格式:以 开头,单个字母(如
- 参数:命令的操作对象(如文件、目录,如
ls /home
,查看/home
目录内容)。
示例:ls -la /home
:ls
是命令,-la
是选项(-l
详细信息 +-a
显示隐藏文件),/home
是参数。
帮助手册:快速查询命令用法
无需死记命令,通过以下两种方式获取帮助:
简单帮助:命令 --help
显示命令的核心选项与用法,适合快速查询(如忘记选项含义)。示例:ls --help
:查看ls
命令的所有选项及说明;cp --help
:查看cp
命令的复制规则。
详细手册:man 命令
显示命令的完整手册(包括功能、选项、示例、相关文件),需先安装 man 工具:sudo apt install man-db manpages-de-dev manpages-posix
man 手册章节含义(数字代表章节,可指定章节查看):
章节号 | 内容类型分类 | 核心说明(含关键权限/场景) | 示例(命令/文件 + 作用说明) |
---|---|---|---|
1 | 普通用户命令 | 所有用户可直接执行(无需特殊权限),涵盖日常文件操作、文本处理、目录管理等基础功能 | - man 1 ls (查看 ls 命令用法)- man 1 grep (查看 grep 文本搜索命令用法) |
2 | 系统调用(内核接口) | 操作系统内核对外暴露的底层接口,需通过编程语言(如 C)调用,用于硬件操作、资源调度(如文件/进程) | - man 2 open (查看文件打开的内核接口参数)- man 2 fork (查看进程创建的内核接口逻辑) |
3 | 库函数(标准/第三方) | 由编程语言标准库(如 C 标准库)或第三方库提供,非内核接口,用于通用编程需求(如字符串/IO) | - man 3 printf (查看 C 标准库输出函数用法)- man 3 strlen (查看字符串长度计算函数用法) |
4 | 特殊文件(设备/格式) | 主要对应 /dev 目录下的设备文件(如磁盘、终端、空设备),及少数特殊文件格式定义 |
- man 4 tty (查看终端设备文件 /dev/tty 说明)- man 4 null (查看空设备 /dev/null 用法) |
5 | 配置文件/文件系统 | 系统核心配置文件的语法规则、格式说明,及文件系统目录结构解释(如 /etc 下配置) |
- man 5 passwd (查看 /etc/passwd 用户配置文件格式)- man 5 fstab (查看磁盘挂载配置 /etc/fstab 语法) |
6 | 游戏/屏保程序 | 系统自带的终端娱乐工具,无实际系统功能,仅用于终端消遣 | - man 6 fortune (查看“随机名言生成”游戏用法)- man 6 cowsay (查看“字符画牛说话”程序用法) |
7 | 杂项(协议/概念) | 不适合归入其他章节的通用内容,涵盖网络协议、数据格式、系统概念(如权限、正则) | - man 7 ascii (查看 ASCII 字符表)- man 7 regex (查看正则表达式语法规则)- man 7 http (查看 HTTP 协议基础规范) |
8 | 系统管理命令 | 需 root 权限或 sudo 临时权限,用于系统维护(用户管理、服务控制、磁盘分区等核心操作) | - man 8 sudo (查看权限切换命令用法)- man 8 useradd (查看创建系统用户命令用法)- man 8 fdisk (查看磁盘分区命令用法) |
9 | 内核例程(内核文档) | 内核内部函数、数据结构或模块说明,非对外公开的标准接口,仅用于内核开发/调试 | - man 9 printk (查看内核打印函数用法)- man 9 kmalloc (查看内核内存分配函数用法) |
示例:man ls
:查看ls
命令的详细手册;man 2 read
:查看 “读取文件” 系统调用的手册。
常用基础命令
用户切换:su
/sudo
- 普通用户→root:
sudo su
(输入当前用户密码); - root→普通用户:
su gec
(gec 是用户名)或exit
; - 临时执行 root 命令:
sudo apt install vim
(安装 vim 编辑器)。
查看目录:ls
(list)
功能:显示目录下的文件 / 目录,默认显示当前目录。常用选项与示例:
选项 | 功能 | 示例 |
---|---|---|
无选项 | 显示当前目录下非隐藏文件 / 目录 | ls |
-l (ll ) |
长格式显示(权限、大小、修改时间等) | ll /home (查看 /home 详细信息) |
-a |
显示隐藏文件(以. 开头的文件) |
ls -a (显示当前目录隐藏文件) |
-h |
人性化显示文件大小(KB/MB/GB) | ls -lh (显示大小单位) |
注意:Linux 中 “一切皆文件”,文件类型通过ll
结果的首字符区分:
首字符(ls -l 显示) |
文件类型 | 核心定义 | 关键特点 | 典型示例 |
---|---|---|---|---|
- | 普通文件 | 存储实际数据的基础文件类型,涵盖文本、二进制、多媒体等所有非特殊用途的数据载体 | - 无特殊标识,仅存数据; - 后缀名(如 .c /.txt )非强制,仅用于区分用途;- 可直接通过 cat /vim 等工具读写 |
demo.c (C语言源文件)、a.out (编译后的二进制程序)、test.txt (文本文件)、image.jpg (图片文件) |
b | 块设备文件 | 映射“按块读写”的硬件设备(如磁盘、U盘),是用户空间操作硬件的核心接口文件 | - 读写单位为“块”(如 512字节/4KB),带缓存; - 需 root 权限才能操作; - 直接关联硬件,删除会导致设备无法访问 |
/dev/sda (第一块物理硬盘)、/dev/sdb1 (第二块硬盘的第一个分区)、/dev/mmcblk0 (SD卡设备) |
c | 字符设备文件 | 映射“按字符读写”的硬件设备(如键盘、终端),实现硬件与用户空间的实时数据交互 | - 读写单位为“单个字符”,无缓存; - 实时响应输入输出(如键盘按键即时传递); - 包含虚拟设备(如 /dev/zero ) |
/dev/tty (当前终端)、/dev/console (系统控制台)、/dev/ttyUSB0 (USB转串口)、/dev/zero (生成空字符的虚拟设备) |
d | 目录文件 | 存放文件/子目录的“容器”,本质是记录子项路径、权限的索引表 | - 可通过 cd 命令进入;- 默认权限通常为 rwxr-xr-x (所有者可读写执行,其他仅读执行);- 新建目录默认含 . (当前)和 .. (父目录) |
~/Desktop (桌面目录)、/home (普通用户家目录)、/etc (系统配置目录)、/tmp (临时文件目录) |
l | 软链接文件 | 类似Windows快捷方式,仅存储“指向原文件的路径”,不占用实际数据空间 | - 原文件删除后,软链接失效(显示“断链”,颜色通常为红色); - 建议用绝对路径创建(避免移动后失效); - 链接文件大小为路径字符串长度 |
link -> ~/demo.c (指向 demo.c 的软链接)、/usr/bin/python3 -> /usr/bin/python3.8 (Python版本切换软链接) |
p | 管道文件 | 用于“同一主机内两个进程间通信”的临时文件,数据传递后自动清空 | - 半双工通信(数据单向流动,需两个进程分别读/写); - 数据不持久化,读完即删; - 需通过 mkfifo 命令创建 |
mkfifo mypipe (创建名为 mypipe 的管道)、/tmp/pipe1 (脚本间临时通信的管道文件) |
s | 套接字文件 | 支持“跨进程通信”的文件类型,可实现本地进程间(如容器间)或网络主机间通信 | - 全双工通信(数据双向同时传输); - 是网络编程核心(如 TCP/UDP 通信); - 服务进程退出后,套接字文件需手动删除 |
/var/run/docker.sock (Docker服务本地套接字)、/var/run/mysqld/mysqld.sock (MySQL本地套接字) |
切换目录:cd
(change directory)
功能:切换当前工作目录,路径分两种:
- 绝对路径:从根目录
/
开始(如/home/gec/Desktop
); - 相对路径:从当前目录开始(如
./code
,..
代表上级目录)。
常用用法示例:
命令 | 功能 | 示例场景 |
---|---|---|
cd 目录路径 |
切换到指定目录 | cd /home/gec (绝对路径) |
cd ~ |
切换到当前用户的家目录 | cd ~ (普通用户家目录是/home/gec ) |
cd .. |
切换到上级目录 | 当前在/home/gec ,执行后到/home |
cd - |
切换到上一次所在的目录 | 从/home 到/tmp ,执行后回/home |
cd . |
留在当前目录(无实际作用,仅语法存在) | cd . |
创建目录:mkdir
(make directories)
功能:创建空目录,支持递归创建。常用选项与示例:
选项 | 功能 | 示例 |
---|---|---|
无选项 | 创建单个目录 | mkdir test (当前目录创建 test) |
-p |
递归创建多级目录(父目录不存在则自动创建) | mkdir -p /home/gec/code/demo (创建 demo 及父目录 code) |
-m |
手动设置目录权限(默认权限由 umask 决定) | mkdir -m 755 test (test 权限为 rwxr-xr-x) |
注意:权限755
含义见chmod
命令部分。
创建文件:touch
功能:① 创建空文件;② 更新已有文件的修改时间(不改变内容)。
示例:
touch demo.c
:当前目录创建空文件demo.c
;touch a.txt b.py
:同时创建a.txt
和b.py
;touch demo.c
:若demo.c
已存在,更新其修改时间为当前时间。
删除文件 / 目录:rm
(remove)
功能:永久删除文件 / 目录(无回收站,谨慎使用!)。
常用选项与示例:
选项 | 功能 | 示例 |
---|---|---|
无选项 | 删除单个文件 | rm a.txt (删除 a.txt) |
-i |
删除前提示(避免误删) | rm -i demo.c (删除前询问 Y/N) |
-f |
强制删除(不提示,用于只读文件) | rm -f read-only.txt |
-r |
递归删除目录及所有内容(删除目录必须用) | rm -r test (删除 test 目录及内容) |
-rf |
强制递归删除(危险!避免用于系统目录) | rm -rf /tmp/old (删除 /tmp 下的 old 目录) |
危险提示:rm -rf /
会删除整个系统的所有文件,绝对禁止执行!
移动 / 重命名:mv
(move)
功能:① 移动文件 / 目录到指定路径;② 同一目录下重命名。
常用选项与示例:
选项 | 功能 | 示例 |
---|---|---|
无选项 | 移动文件到目录 | mv demo.c /home/gec/code (将 demo.c 移到 code 目录) |
无选项 | 重命名(同一目录) | mv demo.c hello.c (将 demo.c 重命名为 hello.c) |
-i |
目标文件存在时提示是否覆盖 | mv -i hello.c /home/gec (若 /home/gec 有 hello.c,询问覆盖) |
-n |
目标文件存在时不覆盖(不提示) | mv -n hello.c /home/gec (存在则不移动) |
复制文件 / 目录:cp
(copy)
功能:复制文件 / 目录到指定路径,复制目录需-r
选项。
常用选项与示例:
选项 | 功能 | 示例 |
---|---|---|
无选项 | 复制单个文件到目录 | cp hello.c /home/gec/code (复制 hello.c 到 code 目录) |
-r |
递归复制目录及内容 | cp -r code /home/gec/backup (复制 code 目录到 backup) |
-i |
目标文件存在时提示覆盖 | cp -i hello.c /home/gec (存在则询问) |
-u |
仅复制 “源文件比目标文件新” 的文件(更新备份) | cp -u code/* /home/gec/backup (仅更新较新文件) |
查看当前路径:pwd
(print working directory)
功能:显示当前所在目录的绝对路径(避免 “迷路”)。
示例: 当前在/home/gec/Desktop
,执行pwd
后输出:/home/gec/Desktop
。
查看文件内容:cat
/more
/less
命令 | 功能 | 适用场景 | 示例 |
---|---|---|---|
cat |
一次性显示所有内容 | 小文件(如代码、配置文件) | cat demo.c (查看 demo.c 内容) |
cat -n |
显示内容并带行号 | 查看代码行号 | cat -n demo.c |
cat -A |
显示不可见字符(如 Windows 换行符^M ) |
排查跨系统文件格式问题 | cat -A test.sh (查看脚本隐藏字符) |
more |
分页显示(空格翻页,q 退出) |
中文件(如日志) | more /var/log/syslog |
less |
分页显示(上下键滚动,q 退出) |
大文件(如系统日志) | less /var/log/dmesg |
系统时间:date
功能:查看或设置系统时间。
示例:
- 查看时间:
date
(输出格式:2024年 05月 20日 星期一 14:30:00 CST
); - 设置时间:
sudo date -s "2024-05-20 14:30:00"
(需 root 权限,仅临时生效,重启后恢复)。
文件权限:chmod
(change mode)
功能:修改文件 / 目录的权限,Linux 权限分三类用户:
u
(owner):文件所有者;g
(group):文件所属组;o
(others):其他用户;a
(all):所有用户(默认)。
权限类型:
r
(read,读):4;w
(write,写):2;x
(execute,执行):1;- (无权限):0。
示例:
chmod 755 demo.c
:所有者rwx
(7=4+2+1),所属组和其他用户r-x
(5=4+0+1);chmod u+x demo.sh
:给所有者添加执行权限(脚本需执行权限才能运行);chmod g-w test.txt
:给所属组移除写权限;chmod a=r demo.c
:所有用户仅保留读权限。
查看权限:ll demo.c
(结果首 10 字符为权限,如-rwxr-xr-x
,第 1 位是文件类型,后 9 位分 3 组对应 u/g/o)。
查看分区:df
(disk free)
功能:查看文件系统的磁盘占用情况(如剩余空间、挂载点)。
常用选项:
h
:人性化显示(KB/MB/GB);a
:显示所有文件系统(包括临时文件系统)。
示例:df -h
(输出各分区的大小、已用、可用空间,如/dev/sda5
是根分区,/boot/efi
是启动分区)。
创建链接:ln
(link)
功能:给文件创建链接,分两种类型:
类型 | 特点 | 适用场景 | 示例 |
---|---|---|---|
硬链接 | 与原文件共享同一个 inode(文件元信息),删除原文件不影响硬链接;不能跨文件系统 | 备份重要文件(如配置文件) | ln demo.c demo.hard (创建 demo.c 的硬链接) |
软链接 | 类似 Windows 快捷方式,仅存储原文件路径;删除原文件则软链接失效;需用绝对路径 | 快速访问深层目录 / 文件 | ln -s /home/gec/code demo.link (创建 code 目录的软链接) |
注意:软链接用相对路径时,若软链接文件移动,会因路径失效无法访问,因此建议用绝对路径。
查找文件:find
功能:在指定路径下按条件查找文件(如名称、类型、大小)。
常用选项与示例:
选项 | 功能 | 示例 |
---|---|---|
-name |
按文件名查找(支持通配符* ) |
sudo find / -name "*.h" (根目录下找所有.h 文件,需 root 权限) |
-type |
按文件类型查找(f = 普通文件,d = 目录) | find /home -type d -name "test" (/home 下找名为 test 的目录) |
-size |
按文件大小查找(+ 表示大于,- 表示小于) | find /tmp -size +10M (/tmp 下找大于 10MB 的文件) |
注意:查找根目录(/
)时需用sudo
,否则会因权限不足报错(如find: '/run/user/1000/doc': Permission denied
)。
压缩解压:tar
功能:归档(打包)+ 压缩 / 解压,常用压缩格式:
.tar
:仅归档,不压缩;.tar.gz
:gzip 压缩(压缩率中等,速度快);.tar.bz2
:bzip2 压缩(压缩率高,速度慢)。
核心选项(-f
必须在最后,指定归档文件名):
选项 | 功能 |
---|---|
-c |
创建归档文件(打包) |
-x |
提取归档文件(解包 / 解压) |
-z |
用 gzip 压缩 / 解压(.tar.gz) |
-j |
用 bzip2 压缩 / 解压(.tar.bz2) |
-v |
显示操作过程(可选,方便查看进度) |
-f |
指定归档文件名(必须在最后) |
示例:
- 压缩:
tar czf code.tar.gz /home/gec/code
(将 code 目录压缩为 code.tar.gz); - 解压:
tar xzf code.tar.gz
(解压 code.tar.gz 到当前目录); - 查看归档内容:
tar tf code.tar.gz
(不解压,查看压缩包内的文件); - bzip2 压缩:
tar cjf data.tar.bz2 /home/gec/data
; - bzip2 解压:
tar xjf data.tar.bz2
。
查找命令路径:which
功能:查找系统中可执行命令的绝对路径(如ls
、cd
的位置)。
示例:
which ls
(输出:/usr/bin/ls
,表示ls
命令在/usr/bin
目录下);which gcc
(查找编译器gcc
的路径,若未安装则提示 “Command not found”)。
查看文件类型:file
功能:判断文件类型(如文本、二进制、压缩文件),避免仅凭后缀名判断错误。
示例:
file demo.c
(输出:demo.c: C source, ASCII text
,表示是 C 语言源文件);file code.tar.gz
(输出:code.tar.gz: gzip compressed data
,表示是 gzip 压缩文件);file /dev/sda
(输出:/dev/sda: block special
,表示是块设备文件)。
网络配置:ip
/ifconfig
ifconfig
:旧版命令,需安装net-tools
:sudo apt install net-tools
,用于查看 / 设置 IP;- 示例:
ifconfig ens33 192.168.5.2
(临时将网卡 ens33 的 IP 设为 192.168.5.2,重启失效);
- 示例:
ip
:新版命令(系统自带),功能更全面:ip addr
(查看所有网卡的 IP 信息,替代ifconfig
);ip link set ens33 up
(启用网卡 ens33);ip route
(查看路由表,如默认网关)。
注意:ifconfig
设置的 IP 仅临时生效,重启虚拟机后恢复,永久生效需用 Netplan。
网络测试:ping
功能:向目标主机发送 ICMP 数据包,测试网络连通性。
示例:
- 测试外网:
ping www.baidu.com
(能收到回复表示外网通,按Ctrl+C
停止); - 测试内网:
ping 192.168.5.1
(测试与物理机的连通性); - 限制次数:
ping -c 4 www.baidu.com
(仅发送 4 个数据包,自动停止)。
结果判断:
- 成功:显示
64 bytes from 183.2.172.185: icmp_seq=1 ttl=128 time=10.6 ms
; - 失败:显示
ping: www.baidu.com: Temporary failure in name resolution
(DNS 解析失败,需检查 DNS 配置)。
查看进程:ps
(process state)
功能:查看系统中运行的进程(如 PID、命令、用户)。常用选项与示例:
选项 | 功能说明(含风格/核心信息+适用场景) | 示例 |
---|---|---|
无选项 | 仅显示当前终端关联的进程(极简视图),适合快速查看当前终端运行的进程 | ps (可查看:PID(进程ID)、TTY(关联终端)、TIME(进程占用CPU时间)、CMD(进程命令)) |
aux |
BSD风格,显示所有用户的所有进程,含资源占用信息,日常查系统整体进程最常用 | ps aux (可查看:USER(进程所有者)、%CPU(CPU占用率)、%MEM(内存占用率)、PID(进程ID)、COMMAND(进程命令)) |
-ef |
System V风格,显示所有进程及父进程关联,适合追溯进程启动源(如查找进程的父进程) | ps -ef grep vim (可查看:UID(用户ID)、PID(进程ID)、PPID(父进程ID)、CMD(进程命令),示例中7654 即为vim进程的PPID) |
示例:
ps aux | grep firefox
(查找火狐浏览器的进程,PID 用于终止进程);- 终止进程:
sudo kill 1234
(1234 是进程 PID,强制终止用kill -9 1234
)。
命令别名:alias
功能:给常用命令设置别名,简化输入(如将ls -la
设为ll
)。
示例:
- 临时别名(当前终端有效):
alias ll='ls -la'
(输入ll
等同于ls -la
); - 永久别名(所有终端有效):
- 编辑用户配置文件:
gedit ~/.bashrc
; - 在文件末尾添加:
alias ll='ls -la'
、alias cp='cp -i'
(复制时自动提示覆盖); - 使配置生效:
source ~/.bashrc
(无需重启终端)。
- 编辑用户配置文件:
注意:~/.bashrc
是用户级配置,仅当前用户生效;系统级配置在/etc/bashrc
,所有用户生效(需sudo
修改)。
清屏:clear
/Ctrl+L
功能:清除终端屏幕内容(仅隐藏历史输出,并非删除)。
示例:clear
(清屏);Ctrl+L
(快捷键,与clear
效果相同,更便捷)。
编辑文件:gedit
(图形化)/vim
(命令行)
gedit
:图形化编辑器,类似 Windows 记事本,适合新手:gedit demo.c
(打开 / 创建 demo.c,编辑后按Ctrl+S
保存);vim
:命令行编辑器,功能强大(详细说明如下)。
vi/vim 编辑器详解
vim 是 vi 的增强版,支持语法高亮、多窗口编辑、正则查找,是 Linux 开发的必备工具(如编写代码、修改配置文件)。
安装 vim
Ubuntu 默认安装 vi,vim 需手动安装:sudo apt install vim
验证安装:vim --version
(显示版本信息表示安装成功)。
vim 的三种工作模式
vim 有三种核心模式,切换关系如下:命令模式
←(Esc)→ 插入模式
(输入 i/a/o 等);命令模式
→(按:
)→ 编辑模式
(输入 w/q 等命令);
命令模式(默认模式)
打开文件后默认进入此模式,可执行以下操作:
- 移动光标:方向键或
h
(左)、j
(下)、k
(上)、l
(右); - 快速移动:
gg
(到文件首行)、G
(到文件尾行)、nG
(到第 n 行,如5G
到第 5 行); - 文本操作:复制(
yy
)、删除(dd
)、撤销(u
)。
插入模式(编辑文本)
从命令模式进入插入模式的快捷键(按Esc
返回命令模式):
快捷键 | 功能描述 |
---|---|
i |
在光标当前位置插入文本(光标后内容后移) |
I |
在光标所在行的行首插入文本 |
a |
在光标当前位置后插入文本 |
A |
在光标所在行的行尾插入文本 |
o |
在光标所在行的下方新建一行并插入文本 |
O |
在光标所在行的上方新建一行并插入文本 |
编辑模式(保存 / 退出 / 查找)
从命令模式按:
进入此模式(左下角显示:
),输入命令后按回车执行,自动返回命令模式:
命令 | 功能描述 |
---|---|
:w |
保存文件(不退出) |
:w! |
强制保存(当文件只读时,需 root 权限) |
:q |
退出 vim(未修改文件时) |
:q! |
强制退出(不保存修改,放弃编辑) |
:wq |
保存并退出 |
:wq! |
强制保存并退出 |
:x |
保存并退出(与:wq 相同,更简洁) |
:set nu |
显示行号(临时生效,关闭文件后失效) |
:set ic |
查找时忽略大小写(ic =ignore case) |
vim 常用操作(命令模式)
文本选择与删除
快捷键 | 功能描述 | 示例 |
---|---|---|
x |
删除光标所在位置的单个字符 | 光标在a 上,按x 删除a |
dd |
删除光标所在行(整行删除) | dd (删除当前行,放入剪贴板) |
ndd |
删除当前行及后续 n-1 行(共 n 行) | 3dd (删除当前行 + 下 2 行) |
dG |
删除光标所在行到文件尾的所有内容 | dG (清空文件后半部分) |
D |
删除光标位置到行尾的内容 | 光标在行首,按D 删除整行内容 |
:n1,n2d |
删除第 n1 行到第 n2 行的内容(编辑模式命令) | :5,10d (删除 5-10 行) |
注意:删除的内容会放入 vim 剪贴板,可通过p
粘贴。
复制与粘贴
快捷键 | 功能描述 | 示例 |
---|---|---|
yy |
复制光标所在行(整行复制) | yy (复制当前行到剪贴板) |
nyy |
复制当前行及后续 n-1 行(共 n 行) | 2yy (复制当前行 + 下 1 行) |
yw |
复制光标所在位置的单词(到单词结尾) | 光标在单词首字母,按yw 复制单词 |
p |
将剪贴板内容粘贴到光标后 | 复制后按p 粘贴到当前行下方 |
P (大写) |
将剪贴板内容粘贴到光标前 | 复制后按P 粘贴到当前行上方 |
查找与替换
查找文本
- 命令模式按
/
,输入要查找的内容,按回车开始查找(向前查找);示例:/printf
(查找所有printf
关键字); - 命令模式按
?
,输入要查找的内容,按回车开始查找(向后查找);示例:?include
(从光标位置向后查找include
); - 查找后按
n
(同一方向继续查找)、N
(相反方向查找); - 忽略大小写查找:编辑模式输入
:set ic
,恢复大小写敏感输入:set noic
。
替换文本
编辑模式输入替换命令(格式::范围s/原内容/新内容/选项
):
命令 | 功能描述 | 示例 |
---|---|---|
:s/a/b/g |
替换当前行所有a 为b (g =global,全局) |
:s/printf/puts/g (当前行替换) |
:n1,n2s/a/b/g |
替换第 n1-n2 行所有a 为b |
:5,10s/int/char/g (5-10 行替换) |
:%s/a/b/g |
替换整个文件所有a 为b (% = 所有行) |
:%s/old/new/g (全文件替换) |
:%s/a/b/gc |
替换全文件a 为b ,每次替换前询问(c =confirm) |
:%s/hello/hi/gc (询问后替换) |
撤销与反撤销
快捷键 | 功能描述 | 示例 |
---|---|---|
u |
撤销上一次操作(如误删后按u 恢复) |
删行后按u 恢复该行 |
Ctrl+r |
反撤销(恢复被撤销的操作) | 按u 后按Ctrl+r ,重新执行操作 |
vim 个性化配置(永久生效)
通过修改~/.vimrc
文件(用户级配置),实现语法高亮、显示行号等功能:
步骤 1:创建并编辑~/.vimrc
vim ~/.vimrc
步骤 2:添加配置内容
set nu " 显示行号
set ic " 查找时忽略大小写
set autoindent " 自动缩进(编写代码时,新行与上一行对齐)
set tabstop=4 " Tab键宽度为4个空格
set shiftwidth=4 " 自动缩进时的宽度为4个空格
set expandtab " 将Tab键转换为空格(避免不同编辑器Tab宽度不一致)
set cursorline " 高亮光标所在行(方便定位)
syntax on " 开启语法高亮(不同类型文件显示不同颜色,如C代码)
步骤 3:生效配置
保存退出~/.vimrc
后,重新打开 vim 即可生效;若已打开 vim,执行:source ~/.vimrc
立即生效。
实战:用 vim 编写并编译 C 程序
步骤 1:创建 C 文件
vim demo.c
(进入 vim,默认命令模式)。
步骤 2:编写代码
按i
进入插入模式,输入以下代码:
#include <stdio.h>int main() {printf("Hello, Linux!\n");return 0;
}
步骤 3:保存退出
按Esc
返回命令模式,按:
进入编辑模式,输入:wq
保存并退出。
步骤 4:编译运行
- 安装编译器
gcc
:sudo apt install gcc
; - 编译代码:
gcc demo.c -o demo
(生成可执行文件demo
); - 运行程序:
./demo
(输出:Hello, Linux!
)。