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

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

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

相关推荐
齐齐大魔王2 小时前
linux-进程通信
linux·运维·服务器
十铭忘2 小时前
实用linux 命令和实用工具
linux·经验分享
Fanfanaas2 小时前
Linux 系统编程 进程篇 (二)
linux·运维·服务器·c语言·开发语言·学习
Once_day2 小时前
Linux之(31)Shell的set命令
linux·运维·bash
念恒123062 小时前
Linux基础开发工具(编写一个简易进度条)
linux·c语言
Hello.Reader2 小时前
算法是什么
linux·运维·算法
cui_ruicheng2 小时前
Linux IO入门(二):重定向与缓冲区机制
linux·运维·服务器
有谁看见我的剑了?2 小时前
Linux 内核参数优化
linux·网络·php
Harvy_没救了2 小时前
Ansible 学习指南
linux·运维·服务器·ansible