Linux操作系统学习:day07

news2024/10/7 11:40:49

内容来自:Linux介绍

视频推荐:[Linux基础入门教程-linux命令-vim-gcc/g++ -动态库/静态库 -makefile-gdb调试](

目录

    • day07
      • 42、使用 grep 搜索文件内容
      • 43、使用 locate 搜索文件
      • 44、 vim 的安装和介绍
        • vim的模式
      • 45、命令模式下光标的移动
        • 1、保存退出
        • 2、代码格式化
        • 3、光标移动
      • 46、命令模式下的删除操作
      • 47、命令模式下的撤销和反撤销、复制和粘贴操作
        • 撤销和反撤销
        • 复制和粘贴
      • 48、命令模式下的可视模式操作
        • 字符可视模式
        • 行可视模式
        • 块可视化模式
      • 49、命令模式下的代码注释操作
      • 50、命令模式下的字符替换
      • 51、命令模式下的关键字搜索
      • 52、在命令模式下查询 man 文档

day07

42、使用 grep 搜索文件内容

find 不同 grep 命令用于查找文件里符合条件的字符串。grep 命令中有几个常用参数,下面介绍一下:

  • -r:如果需要搜索目录中的文件内容, 需要进行递归操作, 必须指定该参数
  • -i:对应要搜索的关键字, 忽略字符大小写的差别
  • -n:在显示符合样式的那一行之前,标示出该行的列数编号
# 语法格式: 
$ grep "搜索的内容" 搜索的路径/文件 参数

对应要搜索的文件内容,建议放到引号中,因为关键字中可能有特殊字符,或者有空格,从而导致解析错误。

关于引号,单双都可以,可根据自己的需求选择。

搜索举例:

# 搜索指定文件中是否有字符串 include
$ grep "include" a.c
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>

# 不区分大小写进行搜索
$ grep "INCLUDE" a.c
$ grep "INCLUDE" a.c -i
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>

# 搜索指定目录中哪些文件中包含字符串 include 并且显示关键字所在的行号
$ grep "include" ./ -rn        
./a.c:1:#include <stdio.h>
./a.c:2:#include <unistd.h>
./a.c:3:#include <fcntl.h>
./luffy/get/e.c:1:#include <stdio.h>
./luffy/get/e.c:2:#include <unistd.h>
./luffy/get/e.c:3:#include <fcntl.h>
./luffy/c.c:1:#include <stdio.h>
./luffy/c.c:2:#include <unistd.h>
./luffy/c.c:3:#include <fcntl.h>
./ace/b.c:1:#include <stdio.h>
./ace/b.c:2:#include <unistd.h>
./ace/b.c:3:#include <fcntl.h>
./.bash_history:1449:grep "include" ./
./.bash_history:1451:grep "include" ./ -r
./.bash_history:1465:grep "include" a.c


43、使用 locate 搜索文件

我们可以将locate看作是一个简化版的find, 使用这个命令我们可以根据文件名搜索本地的磁盘文件, 但是locate的效率比find要高很多。原因在于它不搜索具体目录,而是搜索一个本地的数据库文件,这个数据库中含有本地所有文件信息。Linux系统自动创建这个数据库,并且每天自动更新一次,所以使用locate命令查不到最新变动过的文件。为了避免这种情况,可以在使用locate之前,先使用updatedb命令,手动更新数据库。

# 使用管理员权限更新本地数据库文件, root用户这样做
$ updatedb
# 非root用户需要加 sudo
$ sudo updatedb

locate 有一些常用参数, 使用之前先来介绍一下:

  1. 搜索所有目录下以某个关键字开头的文件
$ locate test		# 搜索所有目录下以 test 开头的文件
  1. 搜索指定目录下以某个关键字开头的文件,指定的目录必须要使用绝对路径
$ locate /home/robin/test    # 指定搜索目录为 /home/robin/, 文件以 test 开头
  1. 搜索文件的时候,忽略文件名的大小写,使用参数 -i
$ locate TEST -i	# 文件名以小写的test为前缀的文件也能被搜索到
  1. 列出前N个匹配到的文件名称或路径名称,使用参数-n
$ locate test -n 5		# 搜索文件前缀为 test 的文件, 并且只显示5条信息
  1. 基于正则表达式进行文件名匹配,查找符合条件的文件,使用参数 -r
# 使用该参数, 需要有正则表达式基础
$ locate -r "\.cpp$"		# 搜索以 .cpp 结尾的文件

正则表达式小科普:

  1. 在正则表达式中 . 可以匹配任意一个非 \n 的单字符
  2. 上边的命令中使用转译字符 \ 对特殊字符 . 转译,就得到了普通的字符 .
  3. 在正则表达式中 $ 放到字符尾部,表示字符串必须以这个字符结尾,上边的命令中修饰的是字符 p
  4. 正则表达式中的 字符 c 和后边的字符 p 需要进行字节匹配,没有特殊含义
  5. 通过上面的解释就能明白 \.cpp$ 说的就是以 .cpp 结尾的字符串


44、 vim 的安装和介绍

Vim 是 Linux 操作系统中一款功能强大的文本编辑器,支持安装各种插件。但是 vim 和 windows 中的文件编辑器所不同的是它没有 UI 界面,所有的操作都是通过键盘快捷键操作完成的,因此要想熟练使用 vim 在 Linux 中进行文本编辑是有成本的,需要花费一定的时间去练习。

如果我们拿到了一个纯净版的 Linux,里边是没有 vim 的,但是有一个类似的文本编辑器叫做Vi。vi编辑器的功能不是很强,可以这样理解vim就是vi的增强版。

首先介绍一下如何在线安装vim,软件安装需要管理员权限:

  • Ubuntu

    $ sudo apt install vim		# 如果是root用户就不用加 sudo 了
    
  • CentOS

    $ sudo yum install vim		# 如果是root用户就不用加 sudo 了
    

vim安装完毕之后,可以先查看一下版本 (在线安装不能保证安装的软件是最新版本)

$ vim --version

另外vim还提供了使用文档,直接在终端执行下面的命令就可以打开了

$ vimtutor
vim的模式

在vim中一共有三种模式,分别是 命令模式末行模式编辑模式,当我们打开vim之后默认进入的是命令模式

  • 命令模式:在该模式下我们可以进行查看文件内容修改文件关键的搜索等操作。
  • 编辑模式:在该模式下主要对文件内容进行修改和内容添加。
  • 末行模式:在该模式下可以进行 执行Linux命令保存文件进行行的跳转窗口分屏等操作。

介绍的以上三种模式之间是可以相互切换的:

  • 命令模式 -> 编辑模式 -> 命令模式
  • 命令模式 -> 末行模式 -> 命令模式
  • 编辑模式和末行模式之间是不能相互直接切换的

在这里插入图片描述


45、命令模式下光标的移动

通过 vim 打开一个文件,如果文件不存在,在退出的时候进行了保存,文件就会被创建出来

# 打开一个文件
$ vim 文件名
1、保存退出

直接在键盘上操作,通过键盘按两个连续的大写的Z (此处是大写的Z, 需要先按住 Shift 再操作哦)

# 先按住 shift 键, 然后连续按两次 z
ZZ
2、代码格式化

在编码过程中,为了便于阅读和代码维护,代码都需要按照样式对其,如果代码格式凌乱,可以在命令模式下快速进行代码的格式化,让其看起来更加美观,这个操作需要在键盘上连续输入多个字符。

# 假设写的c/c+代码没有对齐, 通过该命令可以对齐代码
# 一定要注意最后一个字符是 大写的 G, 因此需要先按 shift
gg=G
3、光标移动

在vim中可以使用键盘上的方向键()来移动光标,这种操作相对比较麻烦,有一种更加简便的操作方式,就是使用键盘上的 hjkl

# 标准的移动光标的方法: 使用 h, j, k, l

                                       光标上移   
                                          ↑
                                          |
                    光标左移 <-- h    j    k    l --> 光标右移
                                     |
                                     ↓
                                  光标下移    

除此之外我们还可以使用一些快捷键实现光标的快速跳转,常用的有:

快捷键功能备注
0光标移动到行首
$光标移动到行尾部选按两个键:shift + 4
gg光标移动到文件头第一行的开始
G光标移动到文件尾部最后一行的开始
nG行跳转n 代表要跳转到哪一行
n+回车相对跳转 n 行从光标所在当前行往下跳 n 行,n 对应的是一个整数


46、命令模式下的删除操作

在vim中是没有删除操作的,其实所谓的删除就是剪切,被删除的数据都可被粘贴到文档的任意位置,即便如此我们还是习惯性的将剪切操作称之为删除,常用的删除操作如下表所示:

快捷键功能备注
x (小写)删除光标后边的字符vim中的光标比较宽会盖住后边的字符
X (大写)删除光标前边的字符
dw删除单词要先把光标移动到单词的第一个字母上再删除, 否则单词只能被删除一部分
d0删除光标前的字符串从字符串开头到光标当前位置的字符串被删除了
d$ (D)删除光标后的字符串从光标当前位置到字符串尾部的字符串被删除了, 使用 D也行
dd删除光标所在行
ndd删除n行从光标所在行开始删除n行, n对应的是一个整数


47、命令模式下的撤销和反撤销、复制和粘贴操作

撤销和反撤销

撤销和反撤销对应windows中的 ctrl+zctrl+y,但是在vim中使用这两个快捷键是不行的。

快捷键功能备注
u撤销等价于 windows 中的 ctrl+z
ctrl+r反撤销等价于 windows 中的 ctrl+y
复制和粘贴

前边已经介绍了,在vim中做删除操作就相当于剪切,剪切或者复制之后的数据都可以用来做粘贴操作,在vim中对应的快捷键如下:

快捷键功能备注
p粘贴到光标所在行的下边小写的 p
P粘贴到光标所在行的上边大写的 P
yy复制光标所在行
nyy从光标所在行向下复制 n 行n是要复制的行数, 代表一个整数


48、命令模式下的可视模式操作

在编辑文件的过程中,有时候需要删除或者需要复制的数据不整行的,而是一行中的某一部分,这时候可以使用可视模式进行文本的选择,之后再通过相关的快捷键对所选中的数据块进行复制或者删除操作。

有三种方式可以切换到可视模式:

  • v: 进入的字符可视化模式(Characterwise visual mode),文本选择是以字符为单位的。
  • V :进入的行可视化模式(Linewise visual mode),文本选择是以行为单位的。
  • ctrl-v: 进入的块可视化模式(Blockwise visual mode),可以选择一个矩形内的文本。

进入到可视模式之后,就可以进行文本块的选择和复制以及删除了

快捷键功能备注
h光标向左移动移动光标用于可视模式下的数据块选择
j光标向下移动移动光标用于可视模式下的数据块选择
k光标向上移动移动光标用于可视模式下的数据块选择
l光标向右移动移动光标用于可视模式下的数据块选择
d删除(剪切)删除可视模式下选中的数据块
y复制复制可视模式下选中的数据块
p (小写)数据粘贴到光标的后边粘贴在可视模式下复制或者剪切的数据块
P (大写)数据粘贴到光标的前边粘贴在可视模式下复制或者剪切的数据块
字符可视模式

控制光标方向用来选择文件中的不规则数据块,可以对选中的文本信息进行复制和删除

# 进入到字符可视模式,直接在键盘上按 v 即可: 
v

通过 v 切换到字符可视模式之后,在窗口的最下方会看到 -- VISUAL-- 字样。

在这里插入图片描述

行可视模式

向下移动光标可以选择一整行,向上移动光标可以取消整行选择

# 进入行可视模式, 键盘上按 shift+v 
V

通过 V 切换到行可视模式之后, 在窗口的最下方会看到 -- VISUAL LINE -- 字样。
在这里插入图片描述

块可视化模式

通过向上,下移动光标控制矩形文本块的高度,通过向左,右移动光标控制矩形文本块的宽度。

# 进入块可视模式, 选择一个矩形文本块
ctrl+v

通过 ctrl+v 切换到块可视模式之后,在窗口的最下方会看到 -- VISUAL BLOCK -- 字样。

在这里插入图片描述


49、命令模式下的代码注释操作

代码块注释可以使用块可视模式,具体操作步骤如下:

  1. 通过 ctrl+v 进入块可视模式

  2. 移动光标上移(k)或者下移(j),选中多个代码行的开头,如下图所示:

在这里插入图片描述

  1. 选择完毕后,按大写的的 I 键,此时下方会提示进入“insert” 模式,输入你要插入的注释符,例如: //

  2. 最后按ESC键,你就会发现选中的多行代码已经被注释了

删除多行注释的方法,同样 Ctrl+v 进入列选择模式,移动光标把要删除的注释符选中,按下d,注释就被删除了。
在这里插入图片描述


50、命令模式下的字符替换

命令模式下的替换功能并不强,常用于某个单字符的替换。

快捷键功能备注
r替换光标后的单个字符
R替换光标后的多个字符esc 结束替换


51、命令模式下的关键字搜索

在vim的命令模式下一共有三种查找方式,首先需要在键盘上输入对应的字符,然后按回车键vim会进行关键字匹配,之后就可以通过 n 或者 N进行关键字之间的切换了。

搜索快捷键关键字遍历描述备注
/n从当前位置向下直接按键盘上的 / 即可
N从当前位置向上
?n从当前位置向上直接按键盘上的 ? 即可, 需要使用组合键
N从当前位置向下
#n从当前位置向上光标需要先放在被搜索的关键字上, 键盘上按 #
N从当前位置向下

关于 ?# 都需要使用组合键,这点要注意一下。

下面总结一下这三种搜索方式:

  1. 使用 / 或者 ? 搜索效果一样,只是遍历关键字的时候的顺序是相反的
  2. 使用 # 必须先从被搜索的文件中找到要搜索的关键字,好处就是搜索的内容不需要通过键盘输入
  3. 以上两种搜索方式各有优劣,请根据实际情况选择使用。


52、在命令模式下查询 man 文档

man 文档,是Linux中默认自带的帮助文档, 作为程序猿可以通过这个文档来查询 shell 命令或者标准API函数或者系统自带的配置文件格式的说明等信息。

man文档一共有9个章节, 具体如下:

章节说明
section 1Linux提供的所有shell命令
section 2系统函数(由内核提供的)
section 3库调函数(程序库中的函数)
section 4特殊文件(通常在/dev目录中可以找到)
section 5系统配置文件格式和约定,比如:/etc/passwd
section 6游戏(如果有的话)
section 7杂项(包括宏包和约定)
section 8系统管理命令(通常仅针对root用户)
section 9内核例程[非标准]
# 打开 man 文档首页
$ man man
# 退出 man 文档,直接按键盘上的 q 即可
q

那么,我们如何通过 man 文档查询相关的shell命令或者函数等信息呢?

# 下边举几个例子:

# 查询第一章的shell命令
$ man 1 cp

# 查询第二章的系统函数 (如: read, write, open 等)
$ man 2 read

# 查询第三章的标准的库函数 (如: fread, fwrite, fopen 等)
$ man 3 fread

# 查询第五章的特殊的配置文件说明, 比如: /etc/passwd 或者 /etc/group
$ man 5 passwd

查询的时候章节号是可以省略的,只是查到的结果不精确。如果不写章节号,从第一章开始搜索查询的关键字,如果查询到了,直接就结束了。也就是说如果查询的是函数,但是这个函数和某个命令的名字是相同的,查询到第一章搜索就结束了。

如果当前是在 vim 的命令模式下,我们可以直接跳转到 man 文档:

  • 找到要查看的函数,然后将光标放到该函数上
  • 在键盘上依次输入:章节号(可选) + K (shift+k)(大写的k),就会自动调整到 man 文档中了

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

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

相关文章

昇思MindSpore学习总结四——数据变换Transforms

1、数据变换 数据变换&#xff0c;字面意思&#xff0c;就是将我们在实际项目中获取的数据进行相应的操作&#xff0c;方便后期处理。数据变换的方法很多&#xff0c;例如归一化、标准化等。 为什么要进行数据变换&#xff1f;&#xff08;1&#xff09;我们采集到的数据&#…

Linux——echo命令,管道符,vi/vim 文本编辑器

1.echo 命令 作用 向终端设备上输出字符串或变量的存储数据 格式 echo " 字符串 " echo $ 变 量名 [rootserver ~] # echo $SHELL # 输出变量的值必须加 $ /bin/bash [rootserver ~] # str1" 我爱中国 " # 自定义变量 echo 重定向输出到文件 ec…

简单的本地局域网的前后端接口联调

由于项目被赶进度了&#xff0c;急于前后端联调接口&#xff0c;但是我又没钱买服务器&#xff08;主要我也不会部署&#xff09;&#xff0c;所以我这里就紧急找一个后端的大神朋友请教了一下&#xff1a;苏泽SuZe-CSDN博客 提示&#xff1a;这里不讲后端怎么写接口、前端怎么…

SBTI(科学碳目标)认证是什么?

SBTI认证&#xff0c;全称为“科学基础目标设置倡议”&#xff08;Science-Based Targets initiative&#xff09;认证&#xff0c;是一种广泛认可的企业可持续发展标准。以下是关于SBTI认证的详细解释&#xff1a; 一、认证目标 SBTI认证旨在推动企业采取可持续的经营实践&a…

云原生之使用Docker部署RabbitMQ消息中间件

云原生之使用Docker部署RabbitMQ消息中间件 一、RabbitMQ介绍1.1 RabbitMQ简介1.2 RabbitMQ特点1.3 RabbitMQ使用场景 二、检查Docker环境2.1 检查Docker版本2.2 检查操作系统版本2.3 检查Docker状态 三、下载RabbitMQ镜像四、部署RabbitMQ服务4.1创建挂载目录4.2 运行RabbitMQ…

利用代理IP实现高效大数据抓取的策略与技巧

在当今信息爆炸的时代&#xff0c;数据对于各行各业都至关重要。而数据的获取往往需要通过网络爬取。然而随着网络安全意识的提高和反爬虫机制的加强&#xff0c;传统的数据爬取方式可能会受到限制。在这种情况下&#xff0c;代理IP技术的应用就显得尤为重要。本文将探讨代理IP…

S32K3 --- Wdg(内狗) Mcal配置

前言 看门狗的作用是用来检测程序是否跑飞,进入死循环。我们需要不停地喂狗,来确保程序是正常运行的,一旦停止喂狗,意味着程序跑飞,超时后就会reset复位程序。 一、Wdg 1.1 WdgGeneral Wdg Disable Allowed : 启用此参数后,允许在运行的时候禁用看门狗 Wdg Enable User…

服务器日志事件ID4107:从自动更新 cab 中提取第三方的根目录列表失败,错误为: 已处理证书链,但是在不受信任提供程序信任的根证书中终止。

在查看Windows系统日志时&#xff0c;你是否有遇到过事件ID4107错误&#xff0c;来源CAPI2&#xff0c;详细信息在 http://www.download.windowsupdate.com/msdownload/update/v3/static/trustedr/en/authrootstl.cab 从自动更新 cab 中提取第三方的根目录列表失败&#xff0c;…

使用自定义的shiro密码匹配器CredentialsMatcher完成密码验证

今天突然想研究一下shiro怎么匹配用户的密码。 我们使用shiro的API登录时&#xff0c;会先创建一个令牌对象&#xff0c;而经常用的令牌对象是UsernamePasswordToken&#xff0c;把用户输入的用户名和密码作为参数构建一个UsernamePasswordToken&#xff0c;然后通过Subject.l…

爆款短视频素材库有哪些?分享几个容易火的视频素材网站

当今自媒体时代&#xff0c;每位内容创作者都渴望制作出下一个爆款短视频。你是否在寻找那些能让你的视频迅速蹭热度的顶级素材库&#xff1f;本文将为你介绍几个视频素材库&#xff0c;它们或许能成为你成功的秘密武器。首先要提的&#xff0c;自然是著名的国内素材库——蛙学…

财务RPA与数字化转型——财务RPA如何促进企业的数字化转型

在数字化时代&#xff0c;企业面临着推动创新、提高效率的巨大挑战。RPA财务机器人作为智慧财务不可或缺的新动能&#xff0c;不仅能够优化财务流程&#xff0c;还能够在整个企业中引领数字化变革。本文金智维将深入探讨财务RPA如何成为企业数字化转型的战略利器&#xff0c;为…

docker 搭建 AI大数据模型 --- 使用GPU

docker 搭建 AI大数据模型 — 使用GPU方式 搭建本地大模型&#xff0c;最简单的方法&#xff01;效果直逼GPT 服务器GPU系统HP580 G8P40Rocky9.2 安装程序AnythingLLM前端界面Open WebUIChatOllamaollama 一、AnythingLLM 介绍 AnythingLLM 是 Mintplex Labs Inc. 开发的一…

自然语言处理-BERT处理框架-transformer

目录 1.介绍 2.Transformer 2.1 引言 2.2 传统RNN网络的问题 2.3 整体架构 2.4 Attention 2.5 Self-Attention如何计算 3.multi-headed机制 4. BERT训练方法 1.介绍 BERT&#xff1a;当前主流的解决框架&#xff0c;一站式搞定NLP任务。&#xff08;解决一个NLP任务时的考虑…

STM32 IWDG(独立看门狗)

1 IWDG简介 STM32有两个看门狗&#xff1a;一个是独立看门狗&#xff08;IWDG&#xff09;&#xff0c;另外一个是窗口看门狗。独立看门狗也称宠物狗&#xff0c;窗口看门狗也称警犬。本文主要分析独立看门狗的功能和它的应用。 独立看门狗用通俗一点的话来解释就是一个12位的…

访问外网的安全保障——反向沙箱

反向沙箱作为一种网络安全技术&#xff0c;其核心理念在于通过构建一个隔离且受控的环境&#xff0c;来有效阻止潜在的网络威胁对真实系统的影响。在当今日益复杂的网络环境中&#xff0c;如何借助反向沙箱实现安全上网&#xff0c;已成为众多用户关注的焦点。 随着信息化的发…

解决ubuntu18.04 安装vscode 报依赖库错误,以及打不开终端的问题。

其实很简单&#xff0c;ubuntu18.04太老了&#xff0c;官网最新版本的vscode对ubuntu18.04会有些依赖库的问题。 一顿查资料后发现2023.11月的1.85版本正常使用&#xff0c;于是完美解决。 下载链接 Visual Studio Code November 2023 点击这里下载。 下载完成&#xff0c;…

STM32 I2C总线锁死原因及解决方法

本文介绍STM32 I2C总线锁死原因及解决方法。 在使用STM32 I2C总线操作外设时&#xff0c;有时会遇到I2C总线锁死&#xff08;I2C总线为Busy状态&#xff09;的问题&#xff0c;即便复位MCU也无法解决&#xff0c;本文介绍其锁死的原因和解决方法&#xff0c;并给出相应的参考代…

【Redis四】主从复制、哨兵以及Cluster集群

目录 一.主从复制、哨兵、集群的区别 二.Redis主从复制 1.作用 2.原理 3.流程 三.搭建Redis 主从复制 1.源码编译安装以及配置文件修改 1.1.修改 Redis 配置文件&#xff08;Slave节点操作&#xff09; 2.验证主从复制 2.1.在Master节点上看日志 2.2.在Master节点上…

学习记录696@网络安全之认证、报文完整性、密钥分发与证书

认证 即通信双方如何认证对方身份。 这种情况存在问题&#xff1a;trudy可以伪造A的IP地址。就算带上密码也可能被截获&#xff0c;用于重放攻击。 解决重放攻击的办法是随机数挑战&#xff0c;每次认证时&#xff0c;B都发一个挑战码给A。A加密后再传给B&#xff0c;如果B…

学习阳明心学,需要下真功夫,持续用功

阳明心学是功夫之学&#xff0c;看到善的就发扬光大&#xff0c;看到恶的就立即改正&#xff0c;这才是真功夫