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:匹配非空白符。

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

如何申请小程序SSL证书

在互联网时代&#xff0c;数据安全和用户隐私保护变得尤为重要。SSL证书作为网站、应用或小程序与用户之间建立安全连接的关键工具&#xff0c;其重要性不言而喻。SSL证书能够加密数据传输&#xff0c;防止信息被窃取&#xff0c;提升用户信任度&#xff0c;对于小程序开发者来…

u-boot(六) - 详细启动流程

一&#xff0c;u-boot启动第一阶段 1&#xff0c;启动流程 ENTRY(_start) //arch/arm/lib/vectors.S ----b resets //arch/arm/cpu/armv7/start.S --------b save_boot_params ------------b save_boot_params_ret //将cpu的工作模式设置为SVC32模式&#xff08;即管理模式&a…

【PHP开发工程师系统性教学】——thinkPHP的分页操作,不管有几页,用这个你想分几页就分几页

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;开发者-曼亿点 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 曼亿点 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a…

力扣384. 打乱数组

Problem: 384. 打乱数组 文章目录 题目描述思路复杂度Code 题目描述 思路 打乱数组的主要算法&#xff1a; 从1 - n每次生成[i ~ n - i]的一个随机数字&#xff0c;再将原数组下标位置为i的元素和该随机数字位置的元素交换 复杂度 打乱数组的主要算法 时间复杂度: O ( n ) O(…

YOLOv8可视化界面,web网页端检测

YOLOv8可视化界面&#xff0c;web网页端检测。支持图片检测&#xff0c;视频检测&#xff0c;摄像头检测等&#xff0c;支持检测、分割等多种任务&#xff0c;实时显示检测画面。支持自定义数据集&#xff0c;计数&#xff0c;……

编译原理:语法分析

目录 引言上下文无关文法 CFG: Context-Free Grammar定义推导方法最左推导和最右推导 分析树分析树->抽象语法树常见的上下文无关文法文法设计二义性文法扩展巴科斯范式&#xff1a;EBNF extended Backus Normal Form 文法和语言分类相关术语直接推导推导*推导句型、句子、语…

酷开科技丨酷开系统智慧中心,解锁AI智能家居生活的无限可能

想象一下&#xff0c;未来的AI电视不再是冷冰冰的机器&#xff0c;而是家庭的智能伙伴。它学习你的喜好&#xff0c;预测你的需求&#xff0c;用声音和触感与你交流。它控制家中的灯光、温度&#xff0c;甚至帮你订购生活用品。 在探索智能家居的未来发展时&#xff0c;酷开系…

计算机图形学入门11:图形管线与着色器

1.什么是图形管线 把场景中的物体经过一系列的处理&#xff0c;最后一张图像的形式在屏幕上显示出来&#xff0c;这一系列过程就是图形管线(Graphics Pipeline)&#xff0c;也叫实时渲染管线(Real-time Rendering Pipeline)。如下图所示&#xff0c;为整个渲染管线的过程。 渲染…

WPF学习(1)--类与类的继承

在面向对象编程中&#xff0c;继承是一种机制&#xff0c;允许一个类&#xff08;称为子类或派生类&#xff09;从另一个类&#xff08;称为父类或基类&#xff09;继承属性和方法。继承使我们能够创建一个通用类&#xff0c;然后根据需要扩展或修改它以创建更具体的类。以下是…

基于改进字典学习的旋转机械故障诊断方法(MATLAB)

在过去的二十年里&#xff0c;稀疏表示在各个领域引起了广泛的关注。它的核心思想是将信号描述为尽量少的字典原子&#xff0c;在计算机视觉、生物学、特征提取和机械故障诊断方面显示出强大而可靠的能力。SR通常分为两个步骤&#xff1a;构建字典和学习稀疏系数。对于稀疏系数…

借力AI,助力网络钓鱼(邮件)检测

引言 互联网时代&#xff0c;邮件系统依然是人们工作、生活中的很重要的一部分&#xff0c;与此同时&#xff0c;邮件系统的发展带来的钓鱼邮件问题也成为网络中的最大的安全隐患之一。本文将为大家解开网络钓鱼&#xff08;邮件&#xff09;的神秘面纱&#xff0c;一探究竟&a…

证照之星是一款很受欢迎的证件照制作软件

证照之星是一款很受欢迎的证件照制作软件&#xff0c;证照之星可以为用户提供“照片旋转、裁切、调色、背景处理”等功能&#xff0c;满足用户对证件照制作的基本需求。本站证照之星下载专题为大家提供了证照之星电脑版、安卓版、个人免费版等多个版本客户端资源&#xff0c;此…

软件性能测试基本概述

大家好&#xff0c;在性能测试的世界里&#xff0c;确保软件系统的高效运行至关重要。性能测试不仅仅是为了评估软件系统的性能&#xff0c;更是为了保障用户体验、提高系统稳定性和可靠性。本文将带您一览性能测试的基本概述&#xff0c;从性能测试的定义、重要性&#xff0c;…

OpenGL3.3_C++_Windows(5)

变换 && 3D空间的2D图形 /\/\/\/\/\//\/\/\/\/\/\/\/\//\/\///\/\/\/\//\/\/\/\//\//\/\/\/\/\\/GLM库从0.9.9版本起&#xff0c;默认会将矩阵类型初始化为一个零矩阵&#xff08;所有元素均为0&#xff09;&#xff0c;而不是单位矩阵&#xff08;对角元素为1&#…

学习Java中的Future类

学习Java中的Future类 Future接口在Java 5中引入&#xff0c;作为java.util.concurrent包的一部分。它代表一个异步计算的结果&#xff0c;当计算完成时可以通过Future对象获取结果。Future对象提供了一些方法来检查任务是否完成、等待任务完成并获取任务结果、取消任务等。 …

django学习入门系列之第二点《浏览器能识别的标签3》

文章目录 列表表格往期回顾 列表 无序列表 <!-- <ul </ul> 无序列表 --> <ul><li> 内容1 </li><li> 内容2 </li><li> 内容3 </li><li> 内容4 </li> </ul>有序列表 <!-- <ol> &…

html实现粘贴excel数据,在页面表格中复制

录入数据时&#xff0c;有时候需要把excel中的数据一条条粘贴到页面中&#xff0c;当数据量过多时&#xff0c;这种操作很令人崩溃。本篇文章实现了从excel复制好多行数据后,可在页面粘贴的功能 具体实现代码 <!DOCTYPE html> <html lang"en"> <head…

Spring Boot登录开发 - 邮箱登录/注册接口实现

Hi~&#xff01;这里是奋斗的小羊&#xff0c;很荣幸您能阅读我的文章&#xff0c;诚请评论指点&#xff0c;欢迎欢迎 ~~ &#x1f4a5;&#x1f4a5;个人主页&#xff1a;奋斗的小羊 &#x1f4a5;&#x1f4a5;所属专栏&#xff1a;C语言 &#x1f680;本系列文章为个人学习…

微信小程序请求request封装

公共基础路径封装 // config.js module.exports {// 测试BASE_URL: https://cloud.chejj.cn,// 正式// BASE_URL: https://cloud.mycjj.com };请求封装 // request.js import config from ../config/baseUrl// 请求未返回时的loading const showLoading () > wx.showLoadi…