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.mzph.cn/diannao/27627.shtml

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

相关文章

xgo 原理探索

Go 单测 mock 方案 Mock 方法原理依赖优点缺点接口 Mock为依赖项定义接口&#xff0c;并提供接口的 Mock 实现。需要定义接口和 Mock 实现。灵活&#xff0c;遵循 Go 的类型系统&#xff1b;易于替换实现。需要更多的样板代码来定义接口和 Mock 实现。Monkey Patching&#xf…

NOSQL -- ES

第三个我们比较常用的NOSQL类型的数据库 --- ES 介绍: ES的全称(Elasticsearch) ES是一个分布式全文搜索的引擎 也就是我们平常在购物, 搜索东西的时候常用的, 就是一个ES的类型, 分布式全文搜索引擎 查询原理: 1>分词: 在查询之前, 其会将一些数据拆分开, 按照词进行拆分…

day54 动态规划 part10 300.最长递增子序列 674. 最长连续递增序列 718. 最长重复子数组

300.最长递增子序列 动规五部曲 1.dp[i]的定义 dp[i]表示i之前包括i的以nums[i]结尾的最长递增子序列的长度 2.状态转移方程 位置i的最长升序子序列等于j从0到i-1各个位置的最长升序子序列 1 的最大值。 所以&#xff1a;if (nums[i] > nums[j]) dp[i] max(dp[i], dp…

样本学习:当AI遇上“少见多怪”

东汉名臣牟融在其著作《牟子》写道&#xff1a;“少所见&#xff0c;多所怪&#xff0c;睹橐驼&#xff0c;谓马肿背。”意思是见闻少的人遇到不常见的事物就觉得奇怪&#xff0c;见到骆驼也以为是背肿了的马。因此&#xff0c;后人总用“少见多怪”来嘲笑见识浅陋的人。然而&a…

七个备受欢迎的IntelliJ IDEA实用插件

有了Lombok插件&#xff0c;IntelliJ就能完全理解Lombok注解&#xff0c;使它们能如预期般工作&#xff0c;防止出现错误&#xff0c;并改善IDE的自动完成功能。 作为IntelliJ IDEA的常用用户&#xff0c;会非常喜欢使用它&#xff0c;但我们必须承认&#xff0c;有时这个IDE&…

3.多层感知机

目录 1.感知机训练感知机XOR问题&#xff08;Minsky&Papert 1969&#xff09; AI的第一个寒冬总结 2.多层感知机(MLP)学习XOR单隐藏层&#xff08;全连接层&#xff09;激活函数&#xff1a;Sigmoid激活函数&#xff1a;Tanh激活函数&#xff1a;ReLu 最常用的 因为计算速度…

openGauss学习笔记-300 openGauss AI特性-AI4DB数据库自治运维-DBMind的AI子功能-SQL Rewriter SQL语句改写

文章目录 openGauss学习笔记-300 openGauss AI特性-AI4DB数据库自治运维-DBMind的AI子功能-SQL Rewriter SQL语句改写300.1 概述300.2 使用指导300.2.1 前提条件300.2.2 使用方法示例300.3 获取帮助300.4 命令参考300.5 常见问题处理openGauss学习笔记-300 openGauss AI特性-AI…

微服务之负载均衡器

1、负载均衡介绍 负载均衡就是将负载(工作任务&#xff0c;访问请求)进行分摊到多个操作单元(服务器&#xff0c;组件)上 进行执行。 根据负载均衡发生位置的不同&#xff0c; 一般分为服务端负载均衡和客户端负载均衡。 服务端负载均衡指的是发生在服务提供者一方&#xff…

Visual Studio 使用第三方库管理工具 vcpkg

一、介绍 Windows下开发C/C程序&#xff0c;少不了用开源的第三方库。比如线性代数和矩阵分析的库eigen&#xff0c;或者图像处理的OpenCV库。虽然这些库都是开源的&#xff0c;但是由于要编译debug和release版本的&#xff0c;32位以及64位的&#xff0c;如果像FFmpeg…

基于springboot实现校园组团平台系统项目【项目源码】计算机毕业设计

基于springboot实现校园组团平台系统的设计演示 SSM框架介绍 本课题程序开发使用到的框架技术&#xff0c;英文名称缩写是SSM&#xff0c;在JavaWeb开发中使用的流行框架有SSH、SSM、SpringMVC等&#xff0c;作为一个课题程序采用SSH框架也可以&#xff0c;SSM框架也可以&…

FullCalendar日历组件集成实战(14)

背景 有一些应用系统或应用功能&#xff0c;如日程管理、任务管理需要使用到日历组件。虽然Element Plus也提供了日历组件&#xff0c;但功能比较简单&#xff0c;用来做数据展现勉强可用。但如果需要进行复杂的数据展示&#xff0c;以及互动操作如通过点击添加事件&#xff0…

每日一题——Python实现PAT乙级1028 人口普查 Keyboard(举一反三+思想解读+逐步优化)六千字好文

一个认为一切根源都是“自己不够强”的INTJ 个人主页&#xff1a;用哲学编程-CSDN博客专栏&#xff1a;每日一题——举一反三Python编程学习Python内置函数 Python-3.12.0文档解读 目录 题目链接​编辑我的写法 专业点评 时间复杂度分析 空间复杂度分析 总结 我要更强…

Python基础教程(十八):MySQL - mysql-connector 驱动

&#x1f49d;&#x1f49d;&#x1f49d;首先&#xff0c;欢迎各位来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里不仅可以有所收获&#xff0c;同时也能感受到一份轻松欢乐的氛围&#xff0c;祝你生活愉快&#xff01; &#x1f49d;&#x1f49…

碳化硅陶瓷膜良好的性能

碳化硅陶瓷膜是一种高性能的陶瓷材料&#xff0c;以其独特的物理和化学特性&#xff0c;在众多领域展现出了广泛的应用前景。以下是对碳化硅陶瓷膜的详细介绍&#xff1a; 一、基本特性 高强度与高温稳定性&#xff1a;碳化硅陶瓷膜是一种非晶态陶瓷材料&#xff0c;具有极高的…

从GAN到WGAN(02/2)

文章目录 一、说明二、GAN中的问题2.1 难以实现纳什均衡(Nash equilibrium)2.2 低维度支撑2.3 梯度消失2.4 模式坍缩2.5 缺乏适当的评估指标 三、改进的GAN训练四、瓦瑟斯坦&#xff08;Wasserstein&#xff09;WGAN4.1 什么是 Wasserstein 距离&#xff1f;4.2 为什么 Wassers…

53.Python-web框架-Django开始第一个应用的多语言

针对上一篇的功能&#xff0c;本次仅对页面做了多语言&#xff0c;大家可以看看效果。 51.Python-web框架-Django开始第一个应用的增删改查-CSDN博客 目录 部门列表 新增部门 编辑部门 部门列表 源码 <!DOCTYPE html> {% load static %} {% load i18n %} <html …

JAVA开发 使用Apache PDFBox库生成PDF文件,绘制表格

1. 表格位置定点 2.执行效果展示&#xff08;截取PDF文件图片&#xff09; 3.执行代码 当我们使用Apache PDFBox库在PDF文件中创建带有表格的内容&#xff0c;需要遵循几个步骤。PDFBox本身并没有直接的API来创建表格&#xff0c;但我们可以通过定位文本、绘制线条和单元格矩形…

shell编程基础(第16篇:命令是什么?有哪些注意事项)

前言 前面我们已经使用过各种各样的命令&#xff0c;那么命令到底是什么呢&#xff1f;我们又该怎么理解该术语&#xff1f; 什么是命令&#xff1f; 命令是command的中文翻译&#xff0c;能在命令行中执行的是命令。因为早期的计算机只有文字界面&#xff0c;命令是程序&#…

高速公路智能管理系统:构建安全畅通的数字大动脉

随着城市化进程的加速和交通需求的增长&#xff0c;高速公路系统作为城市交通的重要组成部分&#xff0c;正承担着越来越多的交通运输任务。为了提升高速公路的安全性、便捷性和智能化管理水平&#xff0c;高速公路智能管理系统应运而生。本文将深入探讨高速公路智能管理系统的…

Leetcode 剑指 Offer II 082.组合总和 II

题目难度: 中等 原题链接 今天继续更新 Leetcode 的剑指 Offer&#xff08;专项突击版&#xff09;系列, 大家在公众号 算法精选 里回复 剑指offer2 就能看到该系列当前连载的所有文章了, 记得关注哦~ 题目描述 给定一个可能有重复数字的整数数组 candidates 和一个目标数 tar…