项目二 管理Linux文件和目录
2.1项目知识准备
文件
是存储在计算机上的数据集合
。在Windows系统中,我们理解的文件可以是文本文档、图片、程序、音乐、视频等。在Linux中,一切皆文件
,也就是除了Windows中所理解的文件,目录、字符设备、光驱、硬盘、打印机、进程、线程、管道等都是文件。
2.1.1 目录
Linux系统中的文件都有存放路径,就是指该文件存放的位置。
Linux中的目录
如同Windows中的文件夹
,是用来协助管理计算机文件、具有路径标识的一块存储空间。
根目录是目录的最高层,其他所有目录和文件都在根目录下面,生成一个树状结构,使用这种树状、具有层次的文件结构,主要目的是方便文件系统的管理和维护,如文字图:
在Linux系统中,文件和目录的组织形式是一个倒置的树状结构,根目录用正斜杠(/
)表示。下面是Linux文件系统的一个基本的树状结构图:
/
|-- bin/ # 存放二进制可执行文件
|-- boot/ # 包含Linux内核和引导程序文件
|-- dev/ # 包含设备文件
|-- etc/ # 系统和应用程序的配置文件
| |-- apt/ # Debian系的包管理配置
| |-- init.d/ # 系统服务脚本
| |-- network/ # 网络配置文件
| |-- passwd # 用户账户信息
| `-- sudoers # sudo权限配置文件
|-- home/ # 用户的主目录
|-- lib/ # 系统库文件
|-- media/ # 挂载的媒体设备
|-- mnt/ # 临时挂载点
|-- opt/ # 第三方应用程序
|-- proc/ # 系统进程信息
|-- root/ # root用户的主目录
|-- run/ # 系统运行时数据
|-- sbin/ # 系统二进制可执行文件
|-- srv/ # 服务数据文件
|-- sys/ # 系统硬件设备接口
|-- tmp/ # 临时文件
|-- usr/ # 用户相关的应用程序和文件
| |-- bin/ # 用户二进制可执行文件
| |-- include/ # 头文件
| |-- lib/ # 用户库文件
| |-- local/ # 本地数据和可执行文件
| `-- share/ # 共享数据
|-- var/ # 可变数据文件
|-- cache/ # 缓存数据
|-- lib/ # 状态数据
|-- log/ # 日志文件
`-- run/ # 运行时数据
|-- lost+found/ # 文件系统损坏后的恢复文件
`-- etc...
请注意,这个树状图只是一个简化的版本,实际的Linux文件系统可能包含更多的目录和子目录,具体取决于Linux的发行版和配置。一些目录如/var
、/usr
等,可能还有更多的子目录来满足不同的系统需求。
Linux系统根目录及其下各个常用目录的用途说明表:
下面是Linux系统根目录下各个常用目录及其用途的说明表:
目录 | 用途描述 |
---|---|
/ | 根目录,所有其他目录和文件的上级目录。 |
/bin | 存放基本的二进制可执行文件,如ls 、cat 、mkdir 等,它们对所有用户都可用。 |
/boot | 包含Linux内核和引导加载程序所需的文件,如内核映像和初始内存盘。 |
/dev | 包含设备文件,这些文件作为系统硬件设备的接口。 |
/etc | 包含系统和应用程序的配置文件,如网络配置、用户认证信息等。 |
/home | 用户的主目录,存放普通用户的个人文件。 |
/lib | 存放系统库文件,这些库文件为系统提供必要的功能支持。 |
/media | 用于挂载临时存储设备,如USB闪存驱动器、CD-ROM等。 |
/mnt | 用于临时挂载文件系统,通常由系统管理员或用户手动挂载。 |
/opt | 存放可选或第三方应用程序。 |
/proc | 虚拟文件系统,提供系统进程和内核参数的信息。 |
/root | root用户的主目录,具有系统最高权限的用户。 |
/run | 存放系统运行时的数据,如运行中的进程信息。 |
/sb | 存放系统级的二进制可执行文件,通常只有root用户才能访问。 |
/srv | 存放服务的数据文件,如WWW服务器的数据。 |
/sys | 虚拟文件系统,提供对系统硬件和内核子系统的状态和控制的接口。 |
/tmp | 存放临时文件,系统重启时这些文件会被清除。 |
/usr | 存放用户相关的应用程序和文件,包括bin 、sbin 、include 、lib 和share 等子目录。 |
/var | 存放可变数据文件,如日志文件、数据库文件、缓存等。 |
/lost+found | 用于存放文件系统检查工具如fsck 发现的损坏文件。 |
请注意,这个表列出的是大多数Linux发行版中常见的目录及其用途,但具体的目录结构和用途可能会根据不同的发行版和系统配置有所不同。
【注意】
:用pwd命令可以查看用户当前所在的工作目录位置。
[root@localhost bx]# pwd
/home/bx
[root@localhost bx]#
- 在Linux系统中,路径是用来指定文件或目录位置的方法,主要有两种类型:绝对路径和相对路径。
-
绝对路径 (Absolute Path)
- 绝对路径是从根目录
/
开始的完整路径。 - 它指定了从根目录到目标文件或目录的完整路径。
- 绝对路径提供了确切的位置,无论当前工作目录在哪里。
例如:
/home/user/documents
:表示从根目录开始,进入home
目录,然后是user
目录,最后是documents
目录。
- 绝对路径是从根目录
-
相对路径 (Relative Path)
- 相对路径是相对于当前工作目录的路径。
- 它不从根目录开始,而是从当前所在目录开始计算。
- 相对路径可以包含特殊字符来表示当前目录或父目录。
例如:
./documents
:表示当前目录下的documents
目录。../documents
:表示当前目录的父目录下的documents
目录。../../documents
:表示当前目录的上一级目录的上一级目录下的documents
目录。
特殊路径符号:
.
:表示当前目录。..
:表示当前目录的父目录。~
:表示当前用户的主目录(例如,/home/username
)。
使用场景:
- 当你需要从一个脚本或命令行中明确指定文件或目录的位置时,使用绝对路径。
- 当你需要编写可移植的脚本或命令时,使用相对路径,这样无论当前工作目录在哪里,脚本或命令都能正确执行。
示例:
假设当前工作目录是/home/user
,以下是一些示例命令:
-
使用绝对路径列出
documents
目录的内容:ls /home/user/documents
-
使用相对路径列出
documents
目录的内容:ls documents
-
如果当前目录是
/home/user/projects
,使用相对路径回到user
目录并列出documents
目录的内容:cd .. && ls documents
在编写脚本或命令时,选择使用绝对路径还是相对路径取决于你的需求和上下文环境。
2.1.2 Linux文件(目录)的命名规则
Linux文件(和目录)的命名遵循一些基本规则和惯例,尽管它相对宽松,但了解这些规则有助于避免潜在的问题和混淆。以下是Linux文件和目录命名的一些规则和建议:
-
长度限制:文件名的最大长度通常是有限制的,但这个限制可能因文件系统而异。在大多数现代文件系统中,最大长度可以达到255个字符,但最好不要超过这个限制。
-
不允许空格:文件名中不应包含空格。如果需要使用空格来分隔单词,可以使用下划线
_
或短横线-
作为替代。 -
不允许的字符:文件名中不能包含以下字符:
- 正斜杠
/
:用于分隔目录路径。 - 空字符:即空格键。
- 特殊字符:如
*
、?
、|
、<
、>
、\
等。
- 正斜杠
-
避免使用保留字符:尽管技术上可以,但最好避免在文件名中使用特殊字符,如
*
、?
、[
、]
等,因为这些字符在shell中有特殊含义。 -
避免以点开始:以点
.
开始的文件名(隐藏文件)在大多数shell中默认不显示。虽然这不是禁止的,但应谨慎使用。 -
避免使用保留名称:某些名称被系统保留,如
.
和..
表示当前目录和父目录。使用这些作为文件名可能导致混淆或错误。 -
大小写敏感:Linux文件系统是大小写敏感的,这意味着
File
和file
是两个不同的文件。 -
文件扩展名:虽然Linux不强制要求文件扩展名来识别文件类型,但使用文件扩展名可以帮助用户和应用程序识别文件的内容和用途。
-
简洁明了:文件名应该简洁明了,能够描述文件的内容或用途。
-
避免使用特殊符号:虽然技术上可以使用一些特殊符号,如
+
、=
、:
等,但为了避免跨平台兼容性问题,最好避免使用它们。 -
语言和编码:使用ASCII字符集或UTF-8编码的字符,以确保文件名在不同语言和环境中的兼容性。
遵循这些规则和建议,可以确保你的文件名在不同的Linux环境中都是有效和可读的,同时也有助于维护良好的文件组织结构。
2.2项目实施
使用root登录系统后在系统中打开终端窗口,看到的内容是:
[root@localhost~]#
这个就是Linux系统的命令提示符它的涵义如下:
命令提示符 [root@localhost bx]#
在Linux系统中提供了一些关于当前环境的重要信息,下面是对各部分的解释:
-
[ ]:这是提示符的分隔符号,没有特殊含义。
-
root:这表示当前用户是
root
用户。在Linux中,root
是超级用户账户,拥有对系统的所有权限。 -
@:这个符号通常用来分隔用户名和主机名,表示当前用户正在与哪个系统交互。
-
localhost:这表示当前工作的系统的名字是
localhost
。localhost
是一个特殊的网络名称,它总是指向本地主机。 -
~:代表当前所在的目录的家目录。
-
#:这个符号表示当前用户是超级用户(root)。在大多数Linux系统中,普通用户的提示符以
$
结尾,而root
用户的提示符以#
结尾。这有助于快速区分普通用户和超级用户权限。
2.2.1 任务一 操作文件和目录
- 文件和目录的基本操作
【注】
:
- OPTION: 这是命令行选项的简称,通常以连字符
-
或--
开头。选项用于改变命令的默认行为。例如,-v
是--verbose
的简写形式,用于使命令在执行时显示更多的信息。 - FILE: 这代表一个或多个文件名,命令将对这些文件执行操作。在命令行中,你可以指定单个文件名,或者使用通配符
*
来指定多个文件。 - DIRECTORY: 这代表一个或多个目录名,命令将对这些目录执行操作。类似于文件,你可以指定单个目录名,或者使用通配符来匹配多个目录。
- …: 这个省略号表示你可以在命令中使用多个该类型的参数。例如,
cp
命令可以同时复制多个文件,所以你可以列出多个SOURCE
文件。 - SOURCE: 这是要被复制、移动或删除的原始文件或目录的路径。在涉及文件或目录操作的命令中,
SOURCE
指明了操作的起点。 - DESTINATION: 这是操作的目标位置,例如复制或移动命令中的最终放置点。对于复制或移动命令,
DESTINATION
可以是文件或目录的路径。
# cd - 切换当前工作目录
# 语法:
# cd [OPTION] [DIRECTORY]
# 选项:
# - 无选项:切换到用户的主目录
# 示例:
cd # 切换到用户的主目录
cd /path/to/dir # 切换到指定的目录
cd - # 切换到上一个工作目录
cd ~ # 切换到当前用户的主目录
# ls - 列出目录内容
# 语法:
# ls [OPTION]... [FILE]...
# 选项:
# -a, --all 与 -l 一起使用时,显示所有文件,包括以点开头的文件
# -l 使用长列表格式显示信息
# -h, --human-readable 与 -l 一起使用时,以易读的格式显示文件大小
# -R 递归地列出子目录的内容
# 示例:
ls -l # 以长列表格式显示当前目录下的文件和目录
ls -lah # 显示所有文件,包括隐藏文件,以易读的格式显示文件大小
ls -R /path/to/dir # 递归列出指定目录下的所有文件和目录
# mkdir - 创建目录
# 语法:
# mkdir [OPTION]... DIRECTORY...
# 选项:
# -m, --mode=MODE 设置目录的权限模式(一个八进制数或符号形式)
# -p, --parents 创建目录时,也创建需要的父目录
# 示例:
mkdir NewFolder # 创建名为 NewFolder 的新目录
mkdir -m 700 Secret # 创建一个权限为700的目录 Secret
mkdir -p /path/to/new/directory # 创建多级目录,包括所有必需的父目录
# rmdir - 删除空目录
# 语法:
# rmdir [OPTION]... DIRECTORY...
# 注意:rmdir 只能删除空目录,如果目录不为空,将报错。
# 示例:
rmdir EmptyFolder # 删除名为 EmptyFolder 的空目录
# touch - 更新文件时间戳或创建新文件
# 语法:
# touch [OPTION]... FILE...
# 选项:
# -a 仅更改访问时间
# -m 仅更改修改时间
# -t STAMP 设置文件的时间戳,STAMP 的格式为 [[CC]YY]MMDDhhmm[.ss]
# 示例:
touch file.txt # 如果文件不存在,则创建它;如果存在,则更新其时间戳
touch -a file.txt # 仅更新文件的访问时间
# cp - 复制文件或目录
# 语法:
# cp [OPTION]... SOURCE... DESTINATION
# 选项:
# -r, -R, --recursive 递归复制目录及其内容
# -i, --interactive 覆盖前提示
# -v, --verbose 详细模式
# 示例:
cp file1.txt /path/to/destination # 复制单个文件到指定目录
cp -r source_directory /path/to/destination # 递归复制整个目录
cp -i file1.txt file2.txt # 如果目标文件存在,提示覆盖
# rm - 删除文件或目录
# 语法:
# rm [OPTION]... FILE...
# 选项:
# -r, -R, --recursive 递归删除目录及其内容
# -f, --force 忽略不存在的文件,不提示
# -v, --verbose 详细模式
# 示例:
rm file1.txt # 删除单个文件
rm -r directory # 递归删除整个目录及其内容
rm -f file1.txt # 强制删除文件,不提示确认
# mv - 移动或重命名文件或目录
# 语法:
# mv [OPTION]... SOURCE... DESTINATION
# 选项:
# -i, --interactive 如果目标文件存在,提示是否覆盖
# -v, --verbose 详细模式
# 示例:
mv file1.txt /path/to/destination # 移动文件到新位置
mv file1.txt file2.txt # 重命名文件
mv directory1 directory2 # 重命名目录
- 文件和目录的基本操作的简单案例
通过一系列命令在 /TEST
目录下创建一个简单的文件和目录结构,并执行一些基本操作。以下是步骤和相应的命令:
-
创建
/TEST
目录:mkdir /TEST
-
切换到
/TEST
目录:cd /TEST
-
在
/TEST
目录下创建一些文件:touch file1.txt file2.txt
-
创建一个子目录
subdir1
:mkdir subdir1
-
在
subdir1
中创建一个文件:touch subdir1/file3.txt
-
列出当前目录的内容:
ls -l
-
复制
file1.txt
到subdir1
目录:cp file1.txt subdir1/
-
移动
file2.txt
并重命名为newfile.txt
:mv file2.txt newfile.txt
-
将
subdir1
中的file1.txt
复制到当前目录并重命名为file1_copy.txt
:cp subdir1/file1.txt file1_copy.txt
-
删除
file1.txt
:rm file1.txt
-
删除
subdir1
目录及其内容(注意:由于subdir1
内还有文件,需要递归删除):rm -r subdir1
-
再次列出当前目录的内容,确认之前的操作:
ls -l
这个案例展示了如何在一个新建目录 /TEST
中创建文件和目录,执行复制、移动、重命名和删除操作,以及如何使用 ls
命令查看目录内容。所有的操作都在 /TEST
目录内完成,没有涉及到目录外的其他位置。
2.2.2 任务二:查看文件内容
- 以下是Linux中用于查看文件内容的常用命令的详细说明:
【注】
:参考2.2.1的注。
# cat - 连接文件并打印到标准输出设备
# 作用:显示整个文件的内容。
# 语法:
# cat [OPTION]... [FILE]...
# 选项:
# -n 显示行号
# 示例:
cat file.txt # 显示file.txt的内容
cat -n file.txt # 显示file.txt的内容,并带上行号
# more - 查看文件内容
# 作用:分页显示文件内容,每次显示一屏。
# 语法:
# more [OPTION]... [FILE]...
# 选项:
# +NUMBER 从第NUMBER行开始显示
# 示例:
more file.txt # 分页显示file.txt的内容
more +10 file.txt # 从第10行开始显示file.txt的内容
# less - 反向查看文件
# 作用:允许前后翻页查看文件,提供更多交互功能。
# 语法:
# less [OPTION]... [FILE]...
# 选项:
# +NUMBER 从第NUMBER行开始显示
# -S 折叠长行,避免水平滚动
# 示例:
less file.txt # 交互式查看file.txt的内容
less +10 file.txt # 从第10行开始显示file.txt的内容
# head - 显示文件的开头部分
# 作用:显示文件的前几行,默认是前10行。
# 语法:
# head [OPTION]... [FILE]...
# 选项:
# -n [NUMBER] 显示文件的前NUMBER行
# 示例:
head file.txt # 显示file.txt的前10行
head -n 20 file.txt # 显示file.txt的前20行
# tail - 显示文件的结尾部分
# 作用:显示文件的最后几行,默认是最后10行。
# 语法:
# tail [OPTION]... [FILE]...
# 选项:
# -n [NUMBER] 显示文件的最后NUMBER行
# -f 跟踪文件的新行,实时显示新增内容
# 示例:
tail file.txt # 显示file.txt的最后10行
tail -n 20 file.txt # 显示file.txt的最后20行
tail -f file.txt # 实时显示file.txt新增的内容
这些命令是查看文件内容的基本工具,各有其特点和用途。cat
命令适合查看小文件的完整内容;more
和 less
命令适合查看大文件,提供了分页和交互式查看的功能;head
和 tail
命令则用于查看文件的开头或结尾部分。
- 查看文件内容简单案例
让我们通过一个简单的案例来演示如何使用 cat
、more
、less
、head
和 tail
命令来查看文件内容。我们有一个名为 /TEST
的目录,并且在这个目录下有一个名为 example.txt
的文件,我们将使用这个文件作为案例。
-
在/TEST目录下创建
example.txt
文件并添加一些内容:echo "这是第一行内容。" > example.txt echo "这是第二行内容。" >> example.txt echo "这是第三行内容。" >> example.txt
-
使用
cat
命令查看整个文件内容:cd /TEST cat example.txt
-
使用
cat -n
显示文件内容并带上行号:cat -n example.txt
-
使用
more
命令分页查看文件内容:more example.txt
使用
more
时,你可以按Space
键翻页,按q
键退出。 -
使用
less
命令交互式查看文件内容:less example.txt
less
允许你向上和向下翻页,使用Page Up
和Page Down
键,或者b
(上一页)和Space
(下一页)。退出less
可以使用q
键。 -
使用
head
命令查看文件的前几行:head example.txt
这将显示
example.txt
的前10行。 -
使用
head -n 5
显示文件的前5行:head -n 5 example.txt
-
使用
tail
命令查看文件的最后几行:tail example.txt
这将显示
example.txt
的最后10行。 -
使用
tail -n 5
显示文件的最后5行:tail -n 5 example.txt
-
使用
tail -f
实时跟踪文件新增内容:
tail -f example.txt
如果 example.txt
文件在查看时被追加内容,tail -f
会实时显示这些新增内容。按 Ctrl + C
退出。
这个案例展示了如何使用不同的命令来查看文件的不同部分,以及如何以不同的方式与文件内容交互。
2.2.3 任务三 :文件查找命令
以下是Linux中用于文件查找的三个常用命令的详细说明:
find
-
作用:在指定目录及其子目录下查找符合条件的文件或目录。
-
语法格式:
find [PATH] [OPTIONS] [ACTIONS]
-
可选参数:
-name
:按文件名查找。-type
:查找文件类型,如f
表示文件,d
表示目录。-mtime
:查找文件内容上次修改时间距今多少天之内的文件。-user
:查找属于哪个用户的文件。-size
:查找文件大小符合特定条件的文件,如+5M
表示大于5MB。
-
示例:
find / -name "*.txt" # 在根目录及其子目录下查找所有以.txt结尾的文件 find /home/user -type d -name ".cache" # 查找 /home/user 目录下所有名为.cache的目录 find . -mtime -7 # 查找当前目录及其子目录下过去7天内被修改过的文件
grep
-
作用:搜索文件内容,查找包含指定文本的行。
-
语法格式:
grep [OPTIONS] PATTERN [FILE...]
-
可选参数:
-i
:忽略大小写。-v
:显示不包含匹配文本的行。-r
或--recursive
:递归地在指定目录下搜索所有文件。-n
:显示匹配行及行号。
-
示例:
grep "error" log.txt # 在log.txt中查找包含"error"的行 grep -i "warning" *.log # 忽略大小写,在当前目录下所有.log文件中查找包含"warning"的行 grep -rn "fatal" /var/log # 递归地在/var/log目录下查找包含"fatal"的行,并显示行号
which
-
作用:查找系统可执行文件的路径。
-
语法格式:
which [COMMAND]
-
可选参数:
- 无常用可选参数,但可通过环境变量如
$PATH
影响搜索结果。
- 无常用可选参数,但可通过环境变量如
-
示例:
which ls # 查找ls命令的可执行文件路径 which python # 查找python命令的可执行文件路径
这些命令在Linux系统中用于查找文件和内容非常有用。find
命令可以深入文件系统进行搜索,grep
命令可以在文件内容中进行模式匹配搜索,而 which
命令则用于查找可执行文件的位置。
2.2.4 任务四 :文件操作辅助命令
以下是Linux中一些用于文件操作辅助的常用命令的详细说明:
ln
-
作用:创建链接,包括硬链接和符号链接。
-
语法格式:
ln [OPTION]... [-T] TARGET... DIRECTORY ln [OPTION]... TARGET... [-T] DIRECTORY ln -s [OPTION]... [TARGET]... DIRECTORY
-
可选参数:
-s
:创建符号链接,而不是硬链接。-f
:强制执行,如果目标已存在则删除。
-
示例:
ln -s /path/to/original /path/to/link # 创建指向原始文件的符号链接 ln original.txt copy.txt # 创建硬链接,如果在同一文件系统
history
-
作用:显示用户命令历史列表。
-
语法格式:
history [OPTION]
-
可选参数:
-c
:清除当前的命令历史。-n
:读取历史命令但不执行。
-
示例:
history # 显示命令历史 history -c # 清除命令历史
man
-
作用:显示系统命令的手册页。
-
语法格式:
man [OPTION] [LOCALE] [MANPAGE]
-
可选参数:
-k
或--search
:搜索手册页关键词。
-
示例:
man ls # 显示ls命令的手册页 man -k grep # 搜索包含grep关键词的所有手册页
管道符“|”
-
作用:将一个命令的输出作为另一个命令的输入。
-
语法格式:
command1 | command2
-
示例:
ls -l | grep "txt" # 列出所有文件并以.txt结尾的文件
echo
-
作用:在标准输出设备上显示一行文本。
-
语法格式:
echo [OPTION]... [STRING]...
-
可选参数:
-e
:使反斜杠字符生效,如换行\n
。
-
示例:
echo "Hello, World!" # 显示Hello, World! echo -e "This is a \nnew line" # 显示两行文本
clear
-
作用:清除终端屏幕。
-
语法格式:
clear
-
示例:
clear # 清除终端屏幕
这些命令在Linux系统中用于辅助文件操作和命令行使用。ln
用于创建链接,history
显示命令历史,man
提供命令的帮助手册,管道符|
连接命令以进行复杂的数据处理,echo
用于显示文本,而 clear
用于清理屏幕。
2.2.5 任务五: 使用vim编辑器
Vim是一个功能强大的文本编辑器,在Linux系统中广泛使用。以下是关于如何使用Vim的一些基础指南:
- 启动与退出Vim
- 启动Vim: 要启动Vim,你可以在终端输入以下命令:
vim filename
其中filename
是你想要编辑的文件名。如果文件不存在,Vim将会创建一个新文件。
退出Vim:
退出Vim的基本命令是:
:q
如果做了更改并想要保存它们,可以使用:
:wq
如果只想保存更改但不退出,使用:
:w
如果不想保存更改并强制退出,可以使用:
-
:q!
2vim的三种工作模式
Vim编辑器有三种基本模式,它们是:
- 普通/命令模式(Command Mode) - 也称为命令模式。
- 插入/输入模式(Insert Mode)
- 命令行模式(Ex Mode) - 也称为末行模式。
下面是每种模式的详细介绍和常用命令:
普通模式(Command Mode)
普通模式是Vim启动时的默认模式。在这个模式下,你可以使用键盘移动光标,执行文本操作命令,但是不能直接输入文本。(箭头按键是一样的)
-
移动光标:
h
:左移光标j
:下移光标k
:上移光标l
:右移光标
-
文本操作:
i
:进入插入模式,在当前光标前插入文本I
:进入插入模式,在当前行首插入文本a
:进入插入模式,在当前光标后插入文本A
:进入插入模式,在当前行尾插入文本o
:在当前行下方新开一行并进入插入模式O
:在当前行上方新开一行并进入插入模式dd
:删除当前行yy
:复制当前行p
:粘贴文本u
:撤销操作Ctrl + r
:重做操作
-
查找和替换:
/word
:向下查找"word"?word
:向上查找"word"n
:查找下一个匹配项N
:查找上一个匹配项:%s/old/new/g
:替换文档中所有的"old"为"new"
-
文件操作:
:w
:保存文件:q
:退出Vim:wq
:保存并退出:q!
:不保存退出
插入模式(Insert Mode)
插入模式允许你直接输入文本。你可以通过按i
、I
、a
、A
、o
或O
从普通模式进入插入模式。在插入模式下,大多数按键都用来输入文本,但也有一些特殊命令:
Esc
:退出插入模式并返回普通模式
命令行模式(Ex Mode)
命令行模式可以通过在普通模式下按:
键进入。在这个模式下,你可以输入单个或多个命令来执行复杂的操作。
-
保存和退出:
:w
:保存文件:wq
:保存文件并退出:q
:退出Vim(如果没有更改,将不退出):q!
:不保存更改并退出
-
查找并替换:
:%s/old/new/g
:在整文档中查找"old"并替换为"new":%s/old/new/gc
:在替换前进行确认
-
设置选项:
:set number
:显示行号:set nonumber
:隐藏行号
-
搜索高亮:
/word
:搜索"word"并高亮所有匹配项:nohlsearch
:取消搜索高亮
-
打开新文件:
:e filename
:打开新文件
-
查看和设置:
:set
:查看当前所有设置:help topic
:查看关于特定主题的帮助
-
宏录制:
q<letter>
:开始录制宏到寄存器<letter>
q
:停止录制宏@<letter>
:执行寄存器<letter>
中的宏
-
分割窗口:
:split
或:sp
:垂直分割窗口:vsplit
或:vsp
:水平分割窗口
-
退出命令行模式:
- 按
Enter
键执行命令并返回普通模式。
- 按
这些模式和命令是Vim编辑器的基础,掌握它们可以帮助你更高效地使用Vim进行文本编辑。
2.3 grep高级应用及正则表达式
2.3.1 基本正则表达式
正则表达式是一种强大的文本处理工具,用于搜索、替换或分割符合特定模式的字符串。下面是Linux中基本正则表达式的组成、常见元字符以及标识字符集的介绍:
- 基本正则表达式的组成
基本正则表达式由以下元素组成:
- 普通字符:直接表示其自身的字符,如字母、数字和一些符号。
- 元字符:具有特殊意义的字符,用于定义搜索模式。
- 字符类:表示一组字符的集合,如
[abc]
表示任何一个a
、b
或c
。 - 重复操作符:指定前面字符或字符类出现的次数,如
*
、+
、?
和{n,m}
。
- 基本正则表达式中常见元字符
以下是一些常用的元字符及其含义:
.
:点字符,匹配任意单个字符(除了换行符)。^
:脱字符,匹配输入字符串的开始位置或行的开始。$
:美元符号,匹配输入字符串的结束位置或行的结束。*
:星号,匹配前面的子表达式零次或多次。+
:加号,匹配前面的子表达式一次或多次。?
:问号,匹配前面的子表达式零次或一次。[]
:方括号,匹配方括号内的任意字符(字符集)。()
:圆括号,将多个表达式组合成一个子表达式,用于分组。|
:竖线,逻辑或操作符,匹配两个表达式中的任意一个。{n}
:花括号,匹配确定的 n 次。{n,}
:至少匹配 n 次。{n,m}
:最少匹配 n 次且最多 m 次。
- 标识字符集
字符集用于定义一个字符的集合,以下是一些特殊字符集:
[abc]
:匹配a
、b
或c
中的任意一个字符。[a-z]
:匹配任何小写字母。[A-Z]
:匹配任何大写字母。[0-9]
:匹配任何数字。[^abc]
:脱字符在方括号内,匹配除了a
、b
或c
之外的任意字符。\d
:匹配任意数字,等同于[0-9]
。\D
:匹配除了数字之外的任意字符,等同于[^0-9]
。\w
:匹配任意字母数字字符,包括下划线,等同于[A-Za-z0-9_]
。\W
:匹配非字母数字字符,等同于[^A-Za-z0-9_]
。\s
:匹配任意的空白符(包括空格、制表符、换页符等)。\S
:匹配非空白符。
正则表达式非常灵活,可以通过组合这些基本元素和元字符来创建复杂的搜索模式。掌握正则表达式对于文本处理和编程非常有用。