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!)。
