Linux 软件包管理与vim工具使用详解
🌏个人博客主页:个人主页
什么是软件包
-
在Linux下安装软件, 一个通常的办法是下载到程序的源代码, 并进行编译, 得到可执行程序.
-
但是这样太麻烦了, 于是有些人把一些常用的软件提前编译好, 做成软件包(可以理解成windows上的安装程序)放在一个服务器上, 通过包管理器可以很方便的获取到这个编译好的软件包, 直接进行安装.
-
软件包和软件包管理器, 就好比 "App" 和 "应用商店" 这样的关系.
-
yum(Yellow dog Updater, Modified)是Linux下非常常用的一种包管理器. 主要应用在Fedora, RedHat, Centos等发行版上.
Liunx安装软件
- 源码安装(需要自己编译,生成可执行程序,容易出问题,比较麻烦)
- rpm安装(Liunx下面的安装包,需要自己找,有彼此的依赖关系不好解决)
- yum安装(解决安装源,安装版本,安装依赖)
Linux下载软件的过程(Ubuntu、Centos、other)
在windows里面下载软件,我们可以通过应用商城直接下载。
这里的yum就相当于Liunx下面的应用商店,帮助我们下载软件。
yum怎么知道去哪里下载安装软件的呢?
yum有自己的配置文件,记录自己的搜索路径。
centos7配置新的yum源
python
# 切换到 root 用户
sudo su
# 备份原有的 YUM 源配置文件
cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak
# 下载新的 YUM 源配置文件
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
# 清除 YUM 缓存
yum clean all
# 生成新的缓存
yum makecache
# 验证新源是否有效
yum repolist
# 更新已安装的包(可选)
yum update
操作系统的好坏评估---生态问题
📢注意事项:
关于 yum 的所有操作必须保证主机(虚拟机)网络畅通!!!
可以通过 ping 指令验证
ping www.baidu.com
如何安装软件
通过 yum, 我们可以通过很简单的一条命令完成 gcc 的安装
yum 会自动找到都有哪些软件包需要下载, 这时候敲 "y" 确认安装,出现 "complete" 字样, 说明安装完成。
📢注意事项:
安装软件时由于需要向系统目录中写入内容, 一般需要 sudo 或者切到 root 账户下才能完成。
yum安装软件只能一个装完了再装另一个.,正在yum安装一个软件的过程中,如果再尝试用yum安装另外一个软件,,yum会报错。
查看软件包
通过 yum list 命令可以罗列出当前一共有哪些软件包.。由于包的数目可能非常之多,这里我们需要使用 grep 命令只筛选出我们关注的包。
结果如下:
📢注意事项:
- 软件包名称: 主版本号.次版本号.源程序发行号-软件包的发行号.主机平台.cpu架构.
- "x86_64" 后缀:表示64位系统的安装包, "i686" 后缀表示32位系统安装包. 选择包时要和系统匹配.
- "el7" :表示操作系统发行版的版本. "el7" 表示的是 centos7/redhat7. "el6" 表示 centos6/redhat6.
- base :表示的是 "软件源" 的名称, 类似于 "小米应用商店", "华为应用商店" 这样的概念
卸载软件
仍然是⼀条命令:
sudo yum remove [-y] lrzsz
Linux编辑器-vim使用
vi/vim的区别简单点来说,它们都是多模式编辑器,不同的是vim是vi的升级版本,它不仅兼容vi的所有指令,而且还有一些新的特性在里面。例如语法加亮,可视化操作不仅可以在终端运行,也可以运行于mac os、windows。
- vim的基本概念
我们讲解vim的三种模式,分别是命令模式(command mode)、插入模式(Insert mode)和底行模式(last line mode),各模式的功能区分如下:
- 正常/普通/命令模式(Normal mode)
控制屏幕光标的移动,字符、字或行的删除,移动复制某区段及进入Insert mode下,或者到 last line mode - 插入模式(Insert mode)
只有在Insert mode下,才可以做文字输入,按「ESC」键可回到命令行模式。该模式是我们后面用的最频繁
的编辑模式。 - 末行模式(last line mode)
文件保存或退出,也可以进行文件替换,找字符串,列出行号等操作。 在命令模式下,shift+: 即可进入该模
式。要查看你的所有模式:打开vim,底行模式直接输入
1、快速跳动光标
gg
:将光标快速移动到文本的开始位置(第一个字符)G
即shift + g
:将光标快速移动到文本的结束位置(最后一个字符)$
即shift + 4
:将光标快速移动到所在行的最右侧^
即shift + 6
:将光标快速移动到所在行的最左侧n + G
即n + shift + g
:将光标快速移动到任意行
2、移动光标
- h:光标向左移
- j:光标向下移
- k:光标向上移
- l:光标向右移
3、复制/粘贴/剪切/删除
- (n)yy:复制当前(n)行
- (n)p:在光标所在行的下面粘贴(n行)
- (n)dd:剪切、删除当前所在的(n)行
4、撤回/取消撤回
- u:取消上一步执行的操作
- Ctrl + r:取消上一次的撤回操作
5、字符的处理
-
(n)~或者
n+shift ~
:将光标后面的字符大小写转换 -
(n)r 或者
n +r
输入:将光标后面的字符全部替换为输入的字符 -
(n)x:向后删除删除光标所字符
-
X即
n+shift+x
:向前删除删除光标所在字符
R即shift + r:进入替换模式,此时光标所在的字符被替换为输入的字符
6、批量化(去)注释
批量化注释:
- 第一步:Ctrl + v
- 第二步:h, j, k, l选择要被注释的区域
- 第三步:shift + i
- 第四步://
- 第五步:Esc
批量化去注释:
- 第一步:Ctrl + v
- 第二步:h, j, k, l选择要被去注释的区域
- 第三步:d
7、多文件
第一步:vs filename(不退出vim情况下打开更多文件)底行模式中打开更多的文件
第二步:ctrl+ww 窗口光标切换 (光标在哪一个窗口,就在哪一个窗口进行操作)
底行模式
1、保存与退出
- q(!):(强制)退出
- w(!):(强制)保存
- wq(!):(强制)保存并推出
2、不退出vim的情况下执行shell命令
- ! + 命令
3、新建一个窗口(或打开另一个文件)
- vs filename
4、搜索关键字
- / + 关键字
简单vim配置
配置文件的位置
- 在目录 /etc/ 下面,有个名为vimrc的文件,这是系统中公共的vim配置文件,对所有用户都有效。
- 而在每个用户的主目录下,都可以自己建立私有的配置文件,命名为:".vimrc"。例如,/root目录下,
- 通常已经存在一个.vimrc文件,如果不存在,则创建之。
- 切换用户成为自己执行 su ,进入自己的主工作目录,执行 cd ~
- 打开自己目录下的.vimrc文件,执行 vim .vimr
如果家目录下面没有.vimrc文件需要自己创建
在 shell 中执行指令(想在哪个用户下让vim配置生效, 就在哪个用户下执行这个指令. 强烈 "不推荐" 直接在 root 下执行):
curl -sLf https://gitee.com/HGtz2222/VimForCpp/raw/master/install.sh -o ./install.sh && bash ./install.sh
接下来我们就可以在用vim写代码了,但是默认是两个空格缩进。
我们可以打开.vimrc
进行修改样式
大小改成4即可
Linux编译器-gcc/g++使用
格式 gcc [选项] 要编译的文件 [选项] [目标文件]
预处理(进行宏替换)
预处理功能主要包括宏定义,文件包含,条件编译,去注释等。
预处理指令是以#号开头的代码行。
实例: gcc --E code.c --o code.i
选项"-E",该选项的作用是让 gcc 在预处理结束后停止编译过程。
选项"-o"是指目标文件,".i"文件为已经过预处理的C原始程序。
编译(生成汇编)
在这个阶段中,gcc 首先要检查代码的规范性、是否有语法错误等,以确定代码的实际要做的工作,在检查无误后,gcc 把代码翻译成汇编语言。
用户可以使用"-S"选项来进行查看,该选项只进行编译而不进行汇编,生成汇编代码。
实例: gcc --S code.i --o code.s
汇编(生成机器可识别代码)
汇编阶段是把编译阶段生成的".s"文件转成目标文件
读者在此可使用选项"-c"就可看到汇编代码已转化为".o"的二进制目标代码了
实例: gcc --c hello.s --o hello.o
此时,已经生成的可重定位的目标文件但是并不能执行,因为此时还缺少库里面的文件,如:printf库函数等,所以它并不是一个可执行文件,需要连接。
连接(生成可执行文件或库文件)
在成功编译之后,就进入了链接阶段。
实例: gcc code.o --o code
在这里涉及到一个重要的概念:函数库
我们的C程序中,并没有定义"printf"的函数实现,且在预编译中包含的"stdio.h"中也只有该函数的声明,而没有定义函数的实现,那么,是在哪里实"printf"函数的呢?
最后的答案是:系统把这些函数实现都被做到名为 libc.so.6 的库文件中去了,在没有特别指定时,gcc 会到
系统默认的搜索路径"/usr/lib"下进行查找,也就是链接到 libc.so.6 库函数中去,这样就能实现函数"printf"了,而这也就是链接的作用
ldd查看程序执行时依赖那些库
函数库一般分为静态库和动态库两种。
静态库
静态库是指编译链接时,把我们要访问的方法实现拷贝到自己的可执行程序中,其缀名一般为".a"。
特点:比较浪费资源,可执行程序体积大,不依赖其他库,库丢失也无所谓,程序照样执行。
动态库
动态库与之相反,在编译链接时并没有把库文件的代码加入到可执行文件中,而是在程序执行时由运行时链接文件加载库,就是说程序在执行的时候它会跳到动态库里面执行,然后执行完在回来,这样可以节省系统的开销。
动态库一般后缀名为".so",如前面所述的 libc.so.6 就是动态库。gcc 在编译时默认使用动态库。
特点:一旦动态库缺失,所以程序都无法执行,比较节省资源,可执行程序体积小。
gcc默认生成的二进制程序,是动态链接的,这点可以通过 file 命令验证。
安装C/C++静态库指令
C静态库:sudo yum install -y glibc-static
C++静态库:sudo yum install -y libstdc+±static
如何执行sudo命令?
总结
Linux通过软件包管理器(如YUM)简化了软件安装与管理,将软件预编译为包供用户安装,避免了源码编译的复杂性。软件包如同Windows的安装程序,YUM是其"应用商店"。
安装软件可以通过源码、RPM包或YUM完成,其中YUM解决了依赖关系问题。配置YUM源需调整相关文件并清理缓存。
Vim作为Linux常用编辑器,分为命令、插入和底行模式,支持快速移动、批量注释等功能,配置通过.vimrc实现。
GCC是Linux默认的C/C++编译器,编译过程包括预处理、编译、汇编和链接,生成静态库和动态库分别用于资源独立性和共享性。
通过Sudo权限可完成系统级软件管理,确保高效和安全的操作环境。