Linux---系统的初步学习【 项目二 管理Linux文件和目录】

news2025/2/22 18:09:53

项目二 管理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存放基本的二进制可执行文件,如lscatmkdir等,它们对所有用户都可用。
/boot包含Linux内核和引导加载程序所需的文件,如内核映像和初始内存盘。
/dev包含设备文件,这些文件作为系统硬件设备的接口。
/etc包含系统和应用程序的配置文件,如网络配置、用户认证信息等。
/home用户的主目录,存放普通用户的个人文件。
/lib存放系统库文件,这些库文件为系统提供必要的功能支持。
/media用于挂载临时存储设备,如USB闪存驱动器、CD-ROM等。
/mnt用于临时挂载文件系统,通常由系统管理员或用户手动挂载。
/opt存放可选或第三方应用程序。
/proc虚拟文件系统,提供系统进程和内核参数的信息。
/rootroot用户的主目录,具有系统最高权限的用户。
/run存放系统运行时的数据,如运行中的进程信息。
/sb存放系统级的二进制可执行文件,通常只有root用户才能访问。
/srv存放服务的数据文件,如WWW服务器的数据。
/sys虚拟文件系统,提供对系统硬件和内核子系统的状态和控制的接口。
/tmp存放临时文件,系统重启时这些文件会被清除。
/usr存放用户相关的应用程序和文件,包括binsbinincludelibshare等子目录。
/var存放可变数据文件,如日志文件、数据库文件、缓存等。
/lost+found用于存放文件系统检查工具如fsck发现的损坏文件。

请注意,这个表列出的是大多数Linux发行版中常见的目录及其用途,但具体的目录结构和用途可能会根据不同的发行版和系统配置有所不同。

【注意】:用pwd命令可以查看用户当前所在的工作目录位置。

[root@localhost bx]# pwd
/home/bx
[root@localhost bx]#
  • 在Linux系统中,路径是用来指定文件或目录位置的方法,主要有两种类型:绝对路径和相对路径。
  1. 绝对路径 (Absolute Path)

    • 绝对路径是从根目录/开始的完整路径。
    • 它指定了从根目录到目标文件或目录的完整路径。
    • 绝对路径提供了确切的位置,无论当前工作目录在哪里。

    例如:

    • /home/user/documents:表示从根目录开始,进入home目录,然后是user目录,最后是documents目录。
  2. 相对路径 (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文件和目录命名的一些规则和建议:

  1. 长度限制:文件名的最大长度通常是有限制的,但这个限制可能因文件系统而异。在大多数现代文件系统中,最大长度可以达到255个字符,但最好不要超过这个限制。

  2. 不允许空格:文件名中不应包含空格。如果需要使用空格来分隔单词,可以使用下划线 _ 或短横线 - 作为替代。

  3. 不允许的字符:文件名中不能包含以下字符:

    • 正斜杠 /:用于分隔目录路径。
    • 空字符:即空格键。
    • 特殊字符:如 *?|<>\ 等。
  4. 避免使用保留字符:尽管技术上可以,但最好避免在文件名中使用特殊字符,如 *?[] 等,因为这些字符在shell中有特殊含义。

  5. 避免以点开始:以点 . 开始的文件名(隐藏文件)在大多数shell中默认不显示。虽然这不是禁止的,但应谨慎使用。

  6. 避免使用保留名称:某些名称被系统保留,如 ... 表示当前目录和父目录。使用这些作为文件名可能导致混淆或错误。

  7. 大小写敏感:Linux文件系统是大小写敏感的,这意味着 Filefile 是两个不同的文件。

  8. 文件扩展名:虽然Linux不强制要求文件扩展名来识别文件类型,但使用文件扩展名可以帮助用户和应用程序识别文件的内容和用途。

  9. 简洁明了:文件名应该简洁明了,能够描述文件的内容或用途。

  10. 避免使用特殊符号:虽然技术上可以使用一些特殊符号,如 +=: 等,但为了避免跨平台兼容性问题,最好避免使用它们。

  11. 语言和编码:使用ASCII字符集或UTF-8编码的字符,以确保文件名在不同语言和环境中的兼容性。

​ 遵循这些规则和建议,可以确保你的文件名在不同的Linux环境中都是有效和可读的,同时也有助于维护良好的文件组织结构。

2.2项目实施

使用root登录系统后在系统中打开终端窗口,看到的内容是:

[root@localhost~]#

这个就是Linux系统的命令提示符它的涵义如下:

命令提示符 [root@localhost bx]# 在Linux系统中提供了一些关于当前环境的重要信息,下面是对各部分的解释:

  1. [ ]:这是提示符的分隔符号,没有特殊含义。

  2. root:这表示当前用户是 root 用户。在Linux中,root 是超级用户账户,拥有对系统的所有权限。

  3. @:这个符号通常用来分隔用户名和主机名,表示当前用户正在与哪个系统交互。

  4. localhost:这表示当前工作的系统的名字是 localhostlocalhost 是一个特殊的网络名称,它总是指向本地主机。

  5. ~:代表当前所在的目录的家目录。

  6. #:这个符号表示当前用户是超级用户(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 目录下创建一个简单的文件和目录结构,并执行一些基本操作。以下是步骤和相应的命令:

  1. 创建 /TEST 目录

    mkdir /TEST
    
  2. 切换到 /TEST 目录

    cd /TEST
    
  3. /TEST 目录下创建一些文件

    touch file1.txt file2.txt
    
  4. 创建一个子目录 subdir1

    mkdir subdir1
    
  5. subdir1 中创建一个文件

    touch subdir1/file3.txt
    
  6. 列出当前目录的内容

    ls -l
    
  7. 复制 file1.txtsubdir1 目录

    cp file1.txt subdir1/
    
  8. 移动 file2.txt 并重命名为 newfile.txt

    mv file2.txt newfile.txt
    
  9. subdir1 中的 file1.txt 复制到当前目录并重命名为 file1_copy.txt

    cp subdir1/file1.txt file1_copy.txt
    
  10. 删除 file1.txt

    rm file1.txt
    
  11. 删除 subdir1 目录及其内容(注意:由于 subdir1 内还有文件,需要递归删除):

    rm -r subdir1
    
  12. 再次列出当前目录的内容,确认之前的操作:

    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 命令适合查看小文件的完整内容;moreless 命令适合查看大文件,提供了分页和交互式查看的功能;headtail 命令则用于查看文件的开头或结尾部分。

  • 查看文件内容简单案例

​ 让我们通过一个简单的案例来演示如何使用 catmorelessheadtail 命令来查看文件内容。我们有一个名为 /TEST 的目录,并且在这个目录下有一个名为 example.txt 的文件,我们将使用这个文件作为案例。

  1. 在/TEST目录下创建 example.txt 文件并添加一些内容

    echo "这是第一行内容。" > example.txt
    echo "这是第二行内容。" >> example.txt
    echo "这是第三行内容。" >> example.txt
    
  2. 使用 cat 命令查看整个文件内容

    cd /TEST
    cat example.txt
    
  3. 使用 cat -n 显示文件内容并带上行号

    cat -n example.txt
    
  4. 使用 more 命令分页查看文件内容

    more example.txt
    

    使用 more 时,你可以按 Space 键翻页,按 q 键退出。

  5. 使用 less 命令交互式查看文件内容

    less example.txt
    

    less 允许你向上和向下翻页,使用 Page UpPage Down 键,或者 b(上一页)和 Space(下一页)。退出 less 可以使用 q 键。

  6. 使用 head 命令查看文件的前几行

    head example.txt
    

    这将显示 example.txt 的前10行。

  7. 使用 head -n 5 显示文件的前5行

    head -n 5 example.txt
    
  8. 使用 tail 命令查看文件的最后几行

    tail example.txt
    

    这将显示 example.txt 的最后10行。

  9. 使用 tail -n 5 显示文件的最后5行

    tail -n 5 example.txt
    
  10. 使用 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的一些基础指南:

  1. 启动与退出Vim
  • 启动Vim: 要启动Vim,你可以在终端输入以下命令:
vim filename

其中filename是你想要编辑的文件名。如果文件不存在,Vim将会创建一个新文件。

退出Vim

退出Vim的基本命令是:

:q

如果做了更改并想要保存它们,可以使用:

:wq

如果只想保存更改但不退出,使用:

:w

如果不想保存更改并强制退出,可以使用:

  • :q!
    

2vim的三种工作模式

在这里插入图片描述

Vim编辑器有三种基本模式,它们是:

  1. 普通/命令模式(Command Mode) - 也称为命令模式。
  2. 插入/输入模式(Insert Mode)
  3. 命令行模式(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)

插入模式允许你直接输入文本。你可以通过按iIaAoO从普通模式进入插入模式。在插入模式下,大多数按键都用来输入文本,但也有一些特殊命令:

  • 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中基本正则表达式的组成、常见元字符以及标识字符集的介绍:

  1. 基本正则表达式的组成

基本正则表达式由以下元素组成:

  • 普通字符:直接表示其自身的字符,如字母、数字和一些符号。
  • 元字符:具有特殊意义的字符,用于定义搜索模式。
  • 字符类:表示一组字符的集合,如 [abc] 表示任何一个 abc
  • 重复操作符:指定前面字符或字符类出现的次数,如 *+?{n,m}
  1. 基本正则表达式中常见元字符

以下是一些常用的元字符及其含义:

  • .:点字符,匹配任意单个字符(除了换行符)。
  • ^:脱字符,匹配输入字符串的开始位置或行的开始。
  • $:美元符号,匹配输入字符串的结束位置或行的结束。
  • *:星号,匹配前面的子表达式零次或多次。
  • +:加号,匹配前面的子表达式一次或多次。
  • ?:问号,匹配前面的子表达式零次或一次。
  • []:方括号,匹配方括号内的任意字符(字符集)。
  • ():圆括号,将多个表达式组合成一个子表达式,用于分组。
  • |:竖线,逻辑或操作符,匹配两个表达式中的任意一个。
  • {n}:花括号,匹配确定的 n 次。
  • {n,}:至少匹配 n 次。
  • {n,m}:最少匹配 n 次且最多 m 次。
  1. 标识字符集

字符集用于定义一个字符的集合,以下是一些特殊字符集:

  • [abc]:匹配 abc 中的任意一个字符。
  • [a-z]:匹配任何小写字母。
  • [A-Z]:匹配任何大写字母。
  • [0-9]:匹配任何数字。
  • [^abc]:脱字符在方括号内,匹配除了 abc 之外的任意字符。
  • \d:匹配任意数字,等同于 [0-9]
  • \D:匹配除了数字之外的任意字符,等同于 [^0-9]
  • \w:匹配任意字母数字字符,包括下划线,等同于 [A-Za-z0-9_]
  • \W:匹配非字母数字字符,等同于 [^A-Za-z0-9_]
  • \s:匹配任意的空白符(包括空格、制表符、换页符等)。
  • \S:匹配非空白符。

正则表达式非常灵活,可以通过组合这些基本元素和元字符来创建复杂的搜索模式。掌握正则表达式对于文本处理和编程非常有用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1824536.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AI模型部署:Triton Inference Server部署ChatGLM3-6B实践

前言 内容摘要 本篇先将搭建基础Triton设置模块&#xff0c;将ChatGLM3-6B部署为服务跑通&#xff0c;再加入动态批处理和模型预热来提升服务的性能和效率&#xff0c;包括以下几个模块 Docker镜像环境准备模型基础配置config.pbtxt自定义Python后端model.py模型服务加载卸载…

人工智能历史与现状

1 人工智能历史与现状 1.1 人工智能的概念和起源 1.1.1 人工智能的概念 人工智能 (Artificial Intelligence ,AI)是一门研究如何使计算机 能够模拟人类智能行为的科学和技术,目标在于开发能够感知、理解、 学习、推理、决策和解决问题的智能机器。人工智能的概念主要包含 以…

Stable Diffusion本地化部署详细攻略

一、硬件要求 内存&#xff1a;至少16GB 硬盘&#xff1a;至少60GB以上的磁盘空间&#xff0c;推荐SSD固态硬盘 显卡&#xff1a;推荐NVIDIA显卡 显存&#xff1a;至少4GB Stabl Diffusion因为是在本地部署&#xff0c;对显卡的要求比较高&#xff0c;如果经济能力可以的话…

如何打造电力全域知识中心:知识库融合知识图谱

前言 随着人工智能技术的进步&#xff0c;智能化成为产业转型升级的关键抓手&#xff0c;国家电网在“十四五”发展规划中提出加快公司数字化转型进程、推进能源互联网企业建设的要求。知识管理能力建设作为强化企如何打造电力全域知识中心&#xff1a;知识库融合知识图谱业运…

荣耀笔记本IP地址查看方法详解:轻松掌握网络配置技巧

在数字化时代的浪潮中&#xff0c;笔记本电脑已经成为我们生活和工作中不可或缺的重要工具。对于荣耀笔记本用户而言&#xff0c;掌握基本的网络配置技巧显得尤为重要。其中&#xff0c;查看IP地址是连接网络、配置设备、排除故障等场景下的关键步骤。本文将详细介绍荣耀笔记本…

Python 全栈系列252 一些小计划

说明 最近整体进展还比较顺利&#xff0c;不过也因为这样&#xff0c;好几个线头怎么继续平衡和推进需要稍微捋一下。 内容 按重要|紧急方法来看&#xff0c;线头1是重要且紧急的&#xff0c;QTV200也算重要且紧急&#xff0c;其他都算是重要不紧急。 线头1: 数据清洗 虽然…

电子行业实施MES管理系统的时机是什么

随着信息技术的飞速发展&#xff0c;MES生产管理系统逐渐成为电子企业实现自动化生产和信息化管理的必备工具。那么&#xff0c;何时是电子企业实施MES管理系统的最佳时机呢&#xff1f; 1.生产过程中出现了问题&#xff0c;需要优化和改进。 2.企业需要提高产品交付和响应速…

5月产品更新 | 10大更新汇总,快来看看你的需求上线了吗?

5月&#xff0c;Smartbi从客户需求出发&#xff0c;并结合企业在数据分析、处理等方面遇到的问题&#xff0c;对数据模型、数据指标等数十项功能进行了优化升级。 Smartbi用户可以在官网下载下载PC端&#xff0c;更新后便可以使用相关功能&#xff0c;也可以在体验中心体验相关…

第二十三节:带你梳理Vue2:Vue插槽的认识和基本使用

前言: 通过上一节的学习,我们知道了如何将数据从父组件中传递到子组件中, 除了除了将数据作为props传入到组件中,Vue还允许传入HTML, Vue 实现了一套内容分发的 API&#xff0c;这套 API 的设计灵感源自 Web Components 规范草案&#xff0c;将 <slot> 元素作为承载分发…

Rust 实战丨并发构建倒排索引

引言 继上篇 Rust 实战丨倒排索引&#xff0c;本篇我们将参考《Rust 程序设计&#xff08;第二版&#xff09;》中并发编程篇章来实现高并发构建倒排索引。 本篇主要分为以下几个部分&#xff1a; 功能展示&#xff1a;展示我们最终实现的 2 个工具的效果&#xff08;构建索…

linux系统宝塔服务器temp文件夹里总是被上传病毒php脚本

目录 简介 上传过程 修复上传漏洞 tmp文件夹总是被上传病毒文件如下图: 简介 服务器时不时的会发送短信说你服务器有病毒, 找到了这个tmp文件, 删除了之后又有了。 确实是有很多人就这么无聊, 每天都攻击你的服务器。 找了很久的原因, 网上也提供了一大堆方法,…

力扣 面试题17.04.消失的数字

数组nums包含从0到n的所有整数&#xff0c;但其中缺了一个。请编写代码找出那个缺失的整数。你有办法在O(n)时间内完成吗&#xff1f; 示例 1&#xff1a; 输入&#xff1a;[3,0,1] 输出&#xff1a;2 示例 2&#xff1a; 输入&#xff1a;[9,6,4,2,3,5,7,0,1] 输出&#x…

【qt】平面CAD(计算机辅助设计 )项目 上

CAD 一.前言二.界面设计三.提升类四.接受槽函数五.实现图形action1.矩形2.椭圆3.圆形4.三角形5.梯形6.直线7.文本 六.总结 一.前言 用我们上节课刚刚学过的GraphicsView架构来绘制一个可以交互的CAD项目! 效果图: 二.界面设计 添加2个工具栏 需要蔬菜的dd我! 添加action: …

Vue 若依框架常见问题

获取当前用户id或其它信息 user.js import { login, logout, getInfo } from /api/login import { getToken, setToken, removeToken } from /utils/authconst user {state: {token: getToken(),id: ,name: ,avatar: ,roles: [],permissions: [], shop: [] // 店铺列表},mu…

Zig标准库:最全数据结构深度解析(1)

最近新闻看到17岁中专女生拿下阿里全球数学竞赛第12名。咱们学习标准库中的数据结构是和学习数学是一脉相承的&#xff0c;结构体很多&#xff0c;也非常枯燥&#xff0c;但是不能全面解读过一遍&#xff0c;你很难写出合理的代码。所以&#xff0c;这一章节我们开始深度解析Zi…

HTML静态网页成品作业(HTML+CSS)—— 校园贷主题网页(2个页面)

&#x1f389;不定期分享源码&#xff0c;关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 &#x1f3f7;️本套采用HTMLCSS&#xff0c;未使用Javacsript代码&#xff0c;共有2个页面。 二、作品演示 三、代…

理解Python的元类

1.type()函数 type 函数是一个内置函数&#xff0c;用来获取一个对象的类型。它可以接受一个参数&#xff0c;返回这个参数的数据类型。type也可以用来创建类&#xff0c;type就是元类 x333 list["ab"] tuple (1, "a", True, 3.14) dict {name: Alice,…

驱动开发(四):Linux内核中断

驱动开发系列文章&#xff1a; 驱动开发&#xff08;一&#xff09;&#xff1a;驱动代码的基本框架 驱动开发&#xff08;二&#xff09;&#xff1a;创建字符设备驱动 驱动开发&#xff08;三&#xff09;&#xff1a;内核层控制硬件层 驱动开发&#xff08;四&#xf…

JDK17 你的下一个白月光

JDK版本升级的非常快&#xff0c;现在已经到JDK20了。JDK版本虽多&#xff0c;但应用最广泛的还得是JDK8&#xff0c;正所谓“他发任他发&#xff0c;我用Java8”。 但实际情况却不是这样&#xff0c;越来越多的java工程师拥抱 JDK17&#xff0c;于是了解了一下 JDK17新语法&a…

浅谈TARA在汽车网络安全中的关键角色

随着现代汽车技术的迅猛发展&#xff0c;网络安全成为汽车行业一个不可忽视的领域。为了应对日益复杂的网络威胁&#xff0c;ISO/SAE 21434标准和UN R155法规提供了系统化的网络安全管理框架。其中&#xff0c;TARA&#xff08;威胁分析与风险评估&#xff09;作为核心方法论&a…