Linux系统与系统编程(4)——Linux软件包管理器、Vim与gcc

前言

**欢迎观看Linux系列文章!!**第4篇主要讲述了++Linux软件包管理器++ 、++Vim编译器的使用++ 、++gcc/g++编译器的使用++ 和++管理员组的加入++。

目录

前言

Linux软件包管理器

安装源

Vim编译器

简单使用Vim

Vim增强插件

Vim多模式

命令模式

光标定位

复制粘贴剪切

撤销

删除

替换转换

切换模式

退出Vim

底行模式

批量化替换

视图模式

批量化插入

批量化删除

Vim配置

配置文件

添加配置

补充指令

编译器gcc/g++

编译选项

预处理

编译

汇编

链接

最后补充

成为管理员

加入管理员组


Linux软件包管理器

如何在Linux下安装软件:

①源代码安装。容易出现跨平台问题,或者代码问题,不推荐。

②rpm包安装,但是不包含可执行文件所需的依赖环境,可能导致无法运行。

③使用软件包管理器进行安装(如yum / apt )。

就像是手机的应用商店一样,可以搜索、下载并安装需要的软件。

安装指令:

bash 复制代码
yum install [-y] xxxxx

卸载指令:

bash 复制代码
yum remove [-y] xxxxx

-y选项:无需询问确认,直接执行。

安装源

此为Centos的稳定软件源。

此为Centos的扩展软件源。

想要切换软件源,只用更改这里的配置文件即可,这里不多展示。

Vim编译器

是一个专注的编辑器,只负责代码编写,是多模式的编辑器,Linux自带的最经典的编辑器。

简单使用Vim

①先创建一个文件

②使用Vim编辑器打开

指令如下:

bash 复制代码
vim code.c

一般来说,Vim打开之后默认是命令模式,无法操作(有的系统可能默认的是插入模式,可以直接编辑)。

英文键盘输入 i,进入插入模式

此时,就可以开始编辑该文件了。

Ctrl + c(或Esc)退出插入模式,英文键盘输入 :w(带上冒号),按下回车,将刚刚编辑的内容写入文件中,即保存。

底部显示written,成功写入。若创建的是新文件,编辑后没有保存,那么创建的新文件会直接删除。

同样英文键盘,输入 :qa!(带上冒号),按下回车,退出Vim。

bash 复制代码
cat code.c

查看文件可以发现刚刚编辑的内容已经全部写入文件中。

可以对编写的代码用gcc编译(gcc工具下文会详细说明)

Vim增强插件

bash 复制代码
# 安装vim-enhanced(CentOS7默认自带,缺失则执行)
yum install -y vim-enhanced

作用:
开启语法高亮

写代码、配置文件时关键字、字符串、注释会自动变色
支持鼠标操作

可以用鼠标点、滚动、选中复制
支持更多编辑功能

代码自动缩进、对齐

括号匹配高亮 showmatch

多窗口、多标签页编辑

高级搜索、替换、正则功能

支持更多文件类型识别(Python/Java/JS/HTML 等)
支持系统剪贴板

可以和外部复制粘贴(+y / +p)

没装增强版:无法和系统剪贴板互通
支持更多编码、中文正常显示

UTF-8、GBK 等编码处理更完善

避免中文乱码、排版错乱

Vim多模式

支持多种模式,主要用到的是插入模式、命令模式、底行模式、替换模式、视图模式。

打开Vim,默认进入命令模式,此时你输入任何内容都会被当作指令,所以你任意输入的内容他没有反应,他认为你输入了无效的或者不支持的指令。

命令模式下,输入 i,进入插入模式,插入模式就是普通的文本编辑模式,这里不多赘述。

命令模式下,输入 :,进入底行模式,光标会被锁定在底行进行输入。

命令模式下,输入 R,进入替换模式。

命令模式下,输入 Ctrl + v,进入替换模式。

命令模式

命令模式下,你输入的命令在右下角显示,通过命令提高编辑效率

光标定位

Vim模式无法使用鼠标(某些版本,鼠标可以参与编辑),除了使用方向键,还可以用指令快速定位指定行,对于大文本尤其有用。

bash 复制代码
[行号]gg

如上命令,可将光标快速定位到指定行,若不输入行号,就默认为第一行。

bash 复制代码
[行号]G

如上命令,可将光标快速定位到指定行,若不输入行号,就默认为最后一行。

bash 复制代码
$

将光标定位到当前行行尾。

bash 复制代码
^

将光标定位到当前行行首。

bash 复制代码
h
j
k
l

以上四键,可以代替方向键。

h:左;j:下;k:上;l:右。

这是为了适配没有方向键的键盘。

ps:鼠标滚轮可以代替j、k使用

bash 复制代码
w
b

按单词为单位,快速前后移动光标。

w:向后文走;b向前文走。

补充:

每个文件上一次关闭时,光标在哪,下次打开光标就默认在哪。

其次,可以自行设置Vim打开文件后光标的位置。

bash 复制代码
vim code.c +8

打开文件code.c并将光标放置在第八行开头。

复制粘贴剪切

bash 复制代码
[复制行数]yy

复制当前行开始的n行内容(不输入行数默认1行)。

bash 复制代码
[粘贴次数]p

粘贴n次到下一行(不输入行数默认1次)。

cpp 复制代码
[剪切行数]dd

剪切当前行开始的n行内容(不输入行数默认1行)。

也可以用dd来删除,但是会覆盖剪贴板。

撤销

在不退出Vim的情况下,才可以一直撤销,即使保存了也可以撤销。

bash 复制代码
u

撤销上一步操作。

bash 复制代码
Ctrl + r

取消上一次撤销。

删除

bash 复制代码
x

小写x,往后一个一个字符删除。

bash 复制代码
X

大写X,往前一个一个字符删除。

当然也可以用之前的dd删除。

替换转换

bash 复制代码
[替换字数]r[替换字符]

从当前字符开始,把n个字符替换为指定字符。

bash 复制代码
~

选中字符进行大小写切换。

切换模式

bash 复制代码
R

进入替换模式,输入时会从依次替换原有字符。

bash 复制代码
a
i
o

进入插入模式,

a:进入插入模式,并且光标往后走一个字符。

i:进入插入模式。

o:进入插入模式,并往下新建空行。

bash 复制代码
:

进入底行模式,并等待输入底行命令。

bash 复制代码
Ctrl + v

进入视图模式。

退出Vim

bash 复制代码
ZZ

退出,并保存。

bash 复制代码
:wq

也可进入底行模式,保存并退出。

底行模式

bash 复制代码
w
q
![command]

w:保存。

q:退出Vim。

! :强制执行保存或者退出(在修改如配置文件等重要文件时,系统会询问或者阻拦);

也可以在不退出Vim的情况下,使用Linux命令进行调试。

三者可任意组合。

bash 复制代码
set nu
set nonu

set nu:设置行号;

set nonu:取消行号。

bash 复制代码
/[关键字] + 回车ENTER

定位到文本中从当前光标位置开始的第一个关键字,后续每按一次n键,向下匹配一个关键字。

bash 复制代码
vs [文件名]

分屏打开两个文件,可进行对比。但是只能操控光标所在的文件。若文件不存在,会在当前路径自动生成新文件。

bash 复制代码
Ctrl ww

分屏情况下,可切换文件操作,将光标移动到另一个文件中进行操作。

批量化替换

bash 复制代码
%s/[被替换词]/[替换词]/ [g]

printf批量替换为print

如果不加g,同行重复出现的替换词不进行替换。

视图模式

批量化插入

①Ctrl + v进入视图模式

②通过hjkl,操控光标,选中区域

③shift + i进入插入模式

④输入注释符 //

⑤点击Esc完成批量注释。

批量化删除

①Ctrl + v进入视图模式。

②hjkl方向键选择要删除的注释符 //

③输入d完成批量删除

Vim配置

就像设置一样,完成配置可以省去每次打开Vim时的操作。

配置文件

bash 复制代码
vim ~/.vimrc

配置当前用户的Vim,不会影响其他用户。

bash 复制代码
vim /etc/vimrc

配置全局(影响所有用户),就修改/etc/vimrc。

该文件可能不存在,不存在创建即可。

添加配置

bash 复制代码
//显示行号
set number

//自动缩进
set autoindent

//智能缩进
set smartindent

//制表符=4个空格
set tabstop=4

//缩进宽度=4个空格
set shiftwidth=4

//退格键删除制表符时,删除4格
set softtapstop=4

//把制表符转换为空格
set expandtab

//高亮显示当前行
set cursorline

//启用鼠标支持(所有模式)
set mouse=a

//开启语法高亮
syntax enable

//显示匹配的括号
set showmatch

//搜索时忽略大小写
set ignorecase

//搜索时智能大小写(有大写则区分)
set smartcase

//搜索结果高亮
set hlsearch

//输入搜索内容时实时高亮
set incsearch

//不创建备份文件(xxx.conf~)
set nobackup

//不创建交换文件(.swp)
set noswapfile

//不创建临时文件,该文件保存时自动删除(.xxx.swp)
set nowriteback

//编码设置为UTF-8
set encoding=utf-8
set fileencodings=utf-8,gbk,gb2312

//右侧显示状态栏
set laststatus=2

//命令行高度
set cmdheight=1

//显示光标位置(行、列、所处文件内容百分比处)
set ruler

//模仿notepad、Windows记事本的快捷操作习惯,支持Ctrl+z,Ctrl+s,Ctrl+a等
behave mswin

//不管光标在哪,退格键都能正常删除,和你用的所有现代编辑器行为一致
set backspace=indent,eol,start

//实时显示你在普通模式下输入的未完成命令
set showcmd

//开启「增量搜索」:你在输入搜索关键词的过程中,Vim 会实时高亮匹配到的内容,不用等输完按回车才跳转。
set incsearch

还不止这些,有需要可以上浏览器查询或者使用AI大模型询问,这里不多赘述。

推荐使用这些(其中有部分配置已经是默认配置,为避免遗漏,最好都加上)。

补充指令

bash 复制代码
i[历史命令首字母]

快捷执行历史指令,不用重新再输入完整指令。

使用场景:

bash 复制代码
gcc code.c -o code

我们可以用这行命令去编译C语言文件,如果我们对code.c进行多次修改,就不用再多次编译了。

直接输入

bash 复制代码
!g

快速编译,相当于执行了

bash 复制代码
gcc code.c -o code

以此类推,还有:! l == l l 等等。

编译器gcc/g++

gcc只能编译C语言,g++可以编译C语言和C++(g++是兼容的,且使用方法同gcc)。

编译选项

bash 复制代码
gcc [选项] [要编译的文件] [选项] [目标文件]

编译代码分为四个步骤:预处理、编译、汇编、链接。

先把code.c修改为如图

预处理

目的是:去注释、替换宏、条件编译、展开头文件。

-E

对文件进行编译,到预处理步骤停止。

-o

指明形成的目标文件名称

预处理完成后,代码变成728行

预处理把头文件都展开了,条件编译不符合条件的也被省略。

头文件在安装Linux系统时,就安装在了/usr/include目录中,

除了开发工具还得有配套的库,就是如上的头文件。

编译

目的是生成汇编语言。

-S

对文件进行编译,直到生成汇编语言停止。

全变为汇编语言

汇编

目的是生成机器可识别代码

-c

对文件进行编译,直到文件变为二进制文件为止。

生成的.o文件为可重定位目标二进制文件

链接

将文件进行编译(将.o文件和库文件进行链接),直到生成可执行文件或库文件为止。

.o包含了函数的调用,库文件包含了函数体,二者链接才可以完成执行。

无需选项即可链接。此处生成了可执行文件code

-static

不添加该选项时,默认为动态链接;反之则为静态链接。动态链接得有动态库,静态链接得有静态库。

Linux一般只有动态库,静态库需要另外安装。

bash 复制代码
yum install glibc-static libstdc++-static -y

输入可执行文件的路径,即可运行可执行文件。

最后补充

现在我们学会了Vim编辑器和gcc工具,我们以后对文件的操作会越来越多,那么出现误操作的可能性也会增加。为了避免在使用root用户修改文件时发生不可挽回的错误。我们从现在开始使用普通管理员身份来操作。

成为管理员

用root用户打开/etc/sudoers

bash 复制代码
vim /etc/sudoers

该配置文件只有root有权利修改,管理员也无法操作。

打开文件约100多行左右的位置

这里将普通用户Tom加入了管理员组。

从此之后使用管理员Tom即可,普通管理员的权限足矣。

给Tom提权之后,Tom还是要通过sudo提权来进行root权限的操作,还要输入密码,权限还是比不上root的。

加入管理员组

下图可见配置文件还把root权限授权给了wheel组

必须以root身份,通过命令将用户加入wheel组。

bash 复制代码
usermod -aG wheel Tom

实践中更推荐这种做法。首先他不需要去修改配置文件,其次便于多用户管理。操作规范是企业实践时看重的一点。

❤~~本文完结!!感谢观看!!接下来更精彩!!欢迎来我博客做客~~❤

相关推荐
A小辣椒1 天前
TShark:Wireshark CLI 功能
linux
A小辣椒2 天前
TShark:基础知识
linux
AlfredZhao2 天前
OCI 明明分配了 200G 系统盘,为什么 df 只看到 30G?
linux·oci
AlfredZhao2 天前
vi 删除指定范围的行,不用再反复按 dd
linux·vi
用户9718356334663 天前
银河麒麟 KY10 申威(SW64) 安装 nginx-1.16.1-2.p01.ky10.sw_64.rpm 详细步骤
linux
猪脚踏浪3 天前
linux 拷贝文件或目录到指定的位置
linux
摇滚侠3 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
bush43 天前
嵌入式linux学习记录十四、术语
linux·嵌入式
载数而行5203 天前
Linux 11 动态监控指令top
linux
不会C语言的男孩3 天前
Linux 系统编程 · 第 8 章:进程基础
linux·c语言