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

项目二 管理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.xdnf.cn/news/1451817.html

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

相关文章

【测试】软件测试方案—实际项目直接套用(Word原件)

1. 引言 1.1. 编写目的 1.2. 项目背景 1.3. 读者对象 1.4. 参考资料 1.5. 术语与缩略语 2. 测试策略 2.1. 测试完成标准 2.2. 测试类型 2.2.1. 功能测试 2.2.2. 性能测试 2.2.3. 安全性与访问控制测试 2.3. 测试工具 3. 测试技术 4. 测试资源 4.1. 人员安排 4.2. 测试环境 4.2.…

2024 年最新使用 Node 搭建QQ开放平台官方 QQ 频道机器人详细教程(更新中)

注册 QQ 开放平台账号 QQ 开放平台是腾讯应用综合开放类平台&#xff0c;包含 QQ 机器人、QQ 小程序、QQ 小游戏 等集成化管理&#xff0c;也就是说你注册了QQ 开放平台&#xff0c;你开发 QQ 机器人还是 QQ 小程序都是在这个平台进行部署上线和管理。 如何注册 QQ 开放平台账…

小熊家政帮day22-day23 订单系统优化(订单状态机、练习分库分表、索引、订单缓存)

目录 1 状态机1.1 状态机介绍1.1.1 当前存在的问题1.1.2 使用状态机解决问题 1.2 实现订单状态机1.2.1 编写订单状态机1.2.1.1 依赖引入1.2.1.2 订单状态枚举类1.2.1.3 状态变更事件枚举类1.2.1.4 定义订单快照类1.2.1.5 定义事件变更动作类1.2.1.5 定义订单状态机类1.2.1.6 状…

明天二战六级

明天二战六级&#xff0c;各位程序员们&#xff0c;加油

HTML静态网页成品作业(HTML+CSS)—— 明星吴磊介绍网页(5个页面)

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

最新Sublime Text软件安装包分享(汉化版本)

Sublime Text 是一款广受欢迎的跨平台文本编辑器&#xff0c;专为代码、标记和散文编辑而设计。它以其简洁的用户界面、强大的功能和高性能而著称&#xff0c;深受开发者和写作者的喜爱。 一、下载地址 链接&#xff1a;https://pan.baidu.com/s/1kErSkvc7WnML7fljQZlcOg?pwdk…

EasyGBS服务器和终端配置

服务器配置 修改easygbs.ini sip/host为本机IP&#xff0c;否则终端能登录&#xff0c;无法视频。 [sip] host192.168.3.190 终端用于登录的用户名和密码 default_usertest default_passwordtest1234 default_guest_userguest default_guest_passwordtest1234终端配置 关…

2024 年最新基于 LLOneBot NT 框架搭建 QQ 机器人详细教程(更新中)

LLOneBot 概述 llonebot&#xff08;LLOneBot&#xff09;是一个与OneBot&#xff08;也称为CQHTTP&#xff09;协议兼容的机器人框架&#xff0c;它允许开发者使用不同的编程语言&#xff08;如Python、Go、JavaScript等&#xff09;编写机器人应用&#xff0c;并与各种支持 …

(done) 什么是 perplexity 困惑度?

参考&#xff1a;https://www.youtube.com/watch?vB_2bntDYano 困惑度 perplexity 是一种用来衡量语言模型性能的度量&#xff0c;类似于交叉熵。 困惑度越低越好&#xff0c;越低说明一个模型越好。 一个典型的公式在下面&#xff1a;

WordPress如何删除内存中的缓存?

今天boke112百科将某篇文章修改分类和内容更新后&#xff0c;发现文章底部的相关文章显示的内容跟文章分类、标签毫无关系&#xff0c;还是显示原来的旧内容。后来查看YIA主题相关文章的代码&#xff0c;才发现相关文章的数据保存到内存中的&#xff0c;而且是永不过期&#xf…

Windows 11 中安装 Docker Desktop 并安装镜像

本该主要介绍在 Windows 11 中安装 Docker Desktop 时的一些准备工作&#xff0c;以及该如何下载和安装&#xff0c;然后分别使用管理界面和 Docker 命令安装两个镜像。 一、准备工作 在 Windows 11 中安装 Docker Desktop 前&#xff0c;需要做一些准备。打开 【Windows 功能…

深入解析Prometheus:强大的开源监控与告警系统

目录 引言 一、运维监控平台的设计思路 &#xff08;一&#xff09;设计思路 1.数据收集模块 2.数据提取模块 3.监控告警模块 &#xff08;二&#xff09;监控平台层级 二、Prometheus简介 &#xff08;一&#xff09;基本介绍 &#xff08;二&#xff09;核心特征 …

c++/c输出double问题

这个我大抵能理解&#xff0c;%d是int嘛。 这是为啥&#xff1f; 这样又好了&#xff1f; 这我也能理解 这也可以 这也对&#xff1f; &#xff08;我知道我呢个函数为什么不对了&#xff0c;我的函数写的是int(&#xff09;) 附&#xff1a;保留几位小数&#xff1a; %.2f

五、特征缩放和多项式回归

目录 一、为什么要使用特征缩放(Feature Scaling) 1.首先来看预测房价的例子 2.特征缩放前后效果对比 二、特征缩放方法 1.统一除以范围最大值 2.均值归一化(Mean Normalization) 3.Z-score标准化(Z-score Normalization) 4.一些可以接受/不接受的缩放范围 三、如何识别…

填表统计预约打卡表单系统(FastAdmin+ThinkPHP+UniApp)

填表统计预约打卡表单系统&#xff1a;一键搞定你的预约与打卡需求​ 填表统计预约打卡表单系统是一款基于FastAdminThinkPHPUniApp开发的一款集信息填表、预约报名&#xff0c;签到打卡、活动通知、报名投票、班级统计等功能的自定义表单统计小程序。 &#x1f4dd; 一、引言…

SpringBoot集成mqtt上下线提醒功能设计

目录 1.首先安装emqx&#xff0c;去官网下载emqx压缩包&#xff0c;并且解压。 2.使用emqx start 命令启动emqx后台管理 3.下载mqttx调试工具&#xff0c;使用mqttx调试mqtt连接。下载地址:MQTTX下载-MQTTX官方版下载,下载完成直接打开&#xff0c;便可进行mqtt连接调试 4.…

Commons-Collections篇-CC4链分析

前言 因为 CommonsCollections4 除 4.0 的其他版本去掉了 InvokerTransformer 继承 Serializable&#xff0c;导致该方法无法序列化。 同时 CommonsCollections 4的版本 TransformingComparator 继承了 Serializable接口&#xff0c;而CommonsCollections 3里是没有的&#xf…

仿element-ui 实现自己组件库 <3>

目录 input 组件封装 v-model用在组件上 显示和隐藏密码 封装switch组件 实现转换的功能 设置checkbox input 组件封装 首先input组件的基本框架和样式&#xff1a; <div class"miao-input"><input class"miao-input_inner" > </div…

秋招突击——6/14——复习{(树形DP)树的最长路径}——新作{非递归求二叉树的深度、重复区间合并}

文章目录 引言复习树形DP——树的最长路径 新作使用dfs非递归计算二叉树的深度多个区间合并删除问题实现思路实现代码参考思路 总结 引言 这两天可能有点波动&#xff0c;但是算法题还是尽量保证复习和新作一块弄&#xff0c;数量上可能有所差别。 复习 树形DP——树的最长路…

Visual Studio Code 的安装教程和配置C语言环境插件推荐

目录 1.vscode简介2.下载安装vs code3.VSCode基础配置VSCode界面简介VSCode设置中文界面VSCode个性化设置VSCode常用设置基本编辑快捷键VSCode常用快捷键 4.下载安装MinGW5.设置vscode里的环境6.插件推荐7.vscode官方文档 1.vscode简介 VSCode是微软出的一款轻量级编辑器&…