一、yum
linux下的软件安装一般有以下3种:
1. · 源码安装,下载源代码,编译好后,生成可执行文件进行安装(会有点麻烦,毕竟需要解决编译能否通过的问题)。 2. 3. · rpm安装,rpm已经编译好,打包好,直接安装即可 4. 5. · yum安装
1.了解yum
以上的第二种和第三种安装方法有什么区别呢?
(1)RPM
在了解yum之前,先了解RPM,RPM在linux中是一种用于互联网下载包的打包及安装工具,它能够进行打包、安装、查询、升级、卸载、校验、数据库管理。一个RPM包中的应用程序,除了自身所带的附加文件保证其正常以外,还需要其他特定版本文件,这就是软件包的依赖关系,程序与程序之间的依赖关系比较复杂,而RPM无法解决软件包的依赖关系。
(2)yum
yum(Yellow dog Updater, Modified)是Shell前端软件包管理器,即linux下进行软件安装的客户端,能够从服务器自动下载RPM包并安装,能够自动解决RPM所面临的软件包依赖关系,并且一次安装所有依赖的软件包,无须繁琐地一次次下载、安装,能够更方便地添加、删除、更新RPM包,便于管理系统更新。
yum在服务器端存有所有的RPM包,并把各个包之间的依赖关系记录在文件中,当使用yum安装RPM包时,yum会先从服务器端下载包的依赖,通过分析依赖文件从服务器端一次性下载所有相关的RPM包并进行安装。
这就好比手机应用市场APP是一个客户端,服务器上有手机应用市场App对用的应用服务,当用户搜索某款应用时,应用市场APP是作为客户端就会把请求发送到对应的应用服务,应用服务就会把结果返回给用户。当用户下载某款应用时,应用市场APP就会把下载请求发送给应用服务,让应用服务把软件下载下来发给用户,下载完成之后再安装。
同样,yum也是安装在linux上的一个客户端,在服务器上找到找到yum对应的服务,并且把软件信息下载下来,而且会根据该软件对应的依赖关系把相关软件下载下来并安装好。
2.yum使用
yum要从服务器下载RPM包及其依赖,因此所有操作必须联网。可用通过ping命令ping百度来判断是否连上互联网,像如下状态,网络正常:
且同一时刻同一服务器只允许安装一个软件,因此用yum安装软件包只能一个一个进行安装。
(1)查看软件包
命令:
yum list
用该命令可以罗列出当前有哪些软件包:
软件包很多,可以结合grep命令过滤:
对于yum列表:
1. · 软件包名称: 主版本号.次版本号.源程序发行号-软件包的发行号.主机平台.cpu架构. 2. · "x86_64" 后缀表示64位系统的安装包, "i686" 后缀表示32位系统安装包. 选择包时要和系统匹配. 3. · "el7" 表示操作系统发行版的版本. "el7" 表示的是 centos7/redhat7. "el6" 表示 centos6/redhat6. 4. · 最后一列, base 表示的是 "软件源" 的名称, 类似于 "小米应用商店", "华为应用商店" 这样的概念.
(2)安装软件
安装软件必须以root权限进行软件安装,命令:
sudo yum install 软件名
sudo是以root权限使用yum进行软件安装:
假如使用sudo安装软件,出现以下情况:
这说明创建了delia用户以后,没有对应修改sudoers文件或者group文件,可以按照如下方式修改sudoers文件:
① 以root用户身份打开/etc/sudoers文件
② 添加如下行:
再按Esc键,输入wq!保存退出。此时再去执行yum的安装命令就OK了。
安装的lrzsz这个软件包有什么用呢?
lrzsz是一款在linux里可代替ftp上传和下载的程序。其中,rz、sz是Linux/Unix同Windows进行ZModem文件传输的命令行工具:
上传windows文件到云服务器,命令:
rz -E
如:
将云服务器文件下载到windows,命令:
sz 文件名
如:
(3)卸载软件
同样卸载软件也要在root权限下执行卸载软件命令:
sudo yum remove 软件名
如要卸载lrzsz软件,需要输入'y' 进行确认:
提示successed和Complete,表明卸载成功:
二.Linux编辑器-vim
1. vim概念
vim是从vi发展出来的文本编辑器,不过vim是vi的升级版本,它不仅兼容vi的所有指令,还有新特性,比如语法加亮,可视化操作,不仅可以在终端运行,也可以在x window、 mac os、windows上运行。
vim主要有3种模式:命令模式、插入模式、底行模式,这三种模式可以切换,每次切换,文本最下面一行就有不同的模式。
(1)命令模式
控制屏幕光标的移动,字符、字或行的删除,可以移动、复制、剪切、粘贴文本。
(2)插入模式
只有在插入模式下才可以输入文字,编辑时使用较频繁。
(3)底行模式
保存文件、退出文件、替换文件,找字符串,列出行号等操作。可使用vim help-modes查看当前vim的所有模式。
2.vim模式切换
使用命令:
vim 文件名
比如:
进入vim命令模式,同时也是全屏幕编辑画面:
现在还不能编辑file.c文件,因为必须在插入模式下才能编辑文件。
(1)命令模式切换成插入模式
命令模式切换成插入模式有i、a、o 三种:
1. i:从光标当前位置开始输入文件 2. 3. a:从光标所在位置的下一个位置开始输入文字 4. 5. o:插入新的一行,从行首开始输入文字
(2)命令模式切换成底行模式
输入英文冒号:
:
(3)插入模式和底行模式切换为命令模式
输入键盘Esc:
Esc
3.命令模式操作
在按「Esc」后,切换到命令模式,才能做以下操作 :
(1)移动
移动光标有以下多种常用操作:
1. 「h」:左 2. 「l」:右 3. 「k」:上 4. 「j」:下 5. 「^」:移动到光标所在行的“行首” 6. 「$」:移动到光标所在行的“行尾” 7. 「w」:光标跳到下个字的开头 8. 「e」:光标跳到下个字的字尾 9. 「b」:光标回到上个字的开头 10. 「nl」:光标移到该行的第n个位置,如:5l,56l 11. [gg]:跳到第一行行首 12. 「G」:跳到最后一行行首 13. [shift+g]:进入文本末端
(2)翻页
翻页有以下常用操作:
1. 「ctrl+b」:上翻一页 2. 「ctrl+f」:下翻一页 3. 「ctrl+u」:上翻半页 4. 「ctrl+d」:下翻半页
(3)删除
删除文本有以下几种常用操作:
1. 「x」:每按一次,删除光标所在位置的一个字符 2. 「nx」:例如,「6x」表示删除光标所在位置的“后面(包含自己在内)”6个字符 3. 「X」:大写的X,每按一次,删除光标所在位置的“前面”一个字符 4. 「nX」:例如,「20X」表示删除光标所在位置的“前面”20个字符 5. 「dd」:删除光标所在行 6. 「ndd」:从光标所在行开始删除#行
(4)复制粘贴
复制粘贴文本有以下几种常用操作:
1. 「yy」:复制光标所在行到缓冲区 2. 「nyy」:例如,「6yy」表示拷贝从光标所在的该行“往下数”6行文字 3. 「yw」:复制将标所在之处到行尾的字符到缓冲区中 4. 「nyw」:复制n个字符到缓冲区 5. 「p」:将缓冲区内的字符粘贴到下一行 6. 「np」:将缓冲区内的字符粘贴到下n行 7. 8. 注意:所有与“y”有关的复制命令都必须与“p”配合才能完成复制与粘贴功能
(5)剪切
剪切文本有以下几种常用操作:
1. dd:剪切光标所在行 2. ndd:剪切从光标所在行开始往下的n行 3. p:将剪切的字符粘贴到下一行 4. np:将剪切的字符粘贴到下n行
(6)替换
替换文本有以下几种常用操作:
1. 「r」:替换光标所在处的字符。 2. 「R」:替换光标所到之处的字符,直到按下「ESC」键为止。
(7)撤销
撤销有以下常用操作:
1. 「u」:误执行一个命令时,马上按「u」,回到上一个操作。按多次“u”可以执行多次恢复。 2. 「ctrl + r」: 撤销恢复
(8)更改
更改有以下常用操作:
1. 「cw」:更改光标所在处的字到字尾处 2. 「cnw」:例如,「c3w」表示更改3个字
(9)跳转行
跳转行有以下常用操作:
1. 「ctrl」+「g」列出光标所在行的行号。 2. 「nG」:例如,「15G」,表示移动光标至文章的第15行行首
4.底行模式操作
在按「Esc」后,按「:」进入底行模式,才能做以下操作:
(1)列出行号
1. 「set nu」:列出所有行行号 2. 「set nonu」:隐藏所有行行号
(2)跳到某行
「n」:n代表第n行,输入n,再按「enter」就跳转到第n行了
(3)查找字符
1. 「/字符」:先输入/,再输入字符,再按enter,就会高亮显示该字符,如查找到多个字符,可以按键盘「n」向后跳转,光标会处于查找之前的行 2. 「?字符」:先输入?,再输入字符,再按enter,就会高亮显示该字符,如查找到多个字符,可以按键盘「n」向后跳转,光标会处于第一行行首
取消查找,底行模式:
:/nohl
(4)拷贝文件
1. 「vs 文件名」:双屏编辑同一文件 2. 「ctrl+w+w」:光标在两个双屏文件中跳转
(5)保存文件
「w」:在冒号后面输入w
(6)退出vim
1. 「q」:退出 2. 「q!」:强制退出vim 3. 「wq」:保存后退出vim 4. 「wq!」:保存后强制退出vim
5.配置vim
(1)公共配置
vim的系统公共配置文件位于/etc下,名为vimrc, 对所有用户都有效:
/etc/vimrc
如切换为root后, 在/etc下就能看到vimrc文件:
(2)用户私有配置
每个用户的主目录,都可以建立自己的私有配置文件,命名为.vimrc
1. su 用户名 2. cd ~ 3. vim .vimrc
在.vimrc文件中,可以配置下列配置选项:
1. syntax on //设置语法高亮: 2. set nu //显示行号: 3. set shiftwidth=4 //设置缩进的空格数为4
还有许多配置,包括当前行增加下划线,自动补全,等等配置,需要一个一个去配,有些配置还需要插件,比较麻烦。因此可以使用下面的命令直接配置(不要动公共配置,所以不要在root下执行,只能在普通用户家目录下执行):
curl -sLf https://gitee.com/HGtz2222/VimForCpp/raw/master/install.sh -o ./install.sh && bash ./install.sh
三、Linux编译器-gcc/g++
1.gcc/g++作用
gcc和g++是由GNU开发的编程语言编译器,其中,gcc用来编译c程序,g++用来编译c++程序。编译程序时,都要经历以下4个阶段:
- 预处理(包含头文件、宏替换、删除注释、条件编译,生成.i)
- 编译(语法分析、词法分析、语义分析、符号汇总,生成.s)
- 汇编(把汇编代码转换成机器指令(二进制指令),生成目标文件,形成符号表,生成.o)
- 链接(合并段表,合并和重定位符号表,生成可执行程序)
2.gcc/g++编译过程
使用以下命令进行编译:
gcc 【选项]】 源文件 【选项】 目标文件
常用选项:
1. -E 只激活预处理,这个不生成文件,你需要把它重定向到一个输出文件里面 2. -S 编译到汇编语言不进行汇编和链接 3. -c 编译到目标代码 4. -o 文件输出到 文件 5. -static 此选项对生成的文件采用静态链接 6. -g 生成调试信息。GNU 调试器可利用该信息。 7. -shared 此选项将尽量使用动态库,所以生成文件比较小,但是需要系统由动态库. 8. -O0 9. -O1 10. -O2 11. -O3 编译器的优化选项的4个级别,-O0表示没有优化,-O1为缺省值,-O3优化级别最高 12. -w 不生成任何警告信息。 13. -Wall 生成所有警告信息。
(1)预处理--选项-E 生成 .i
- 预处理功能主要包括宏定义,文件包含,条件编译,删除注释等。 预处理指令是以#号开头的代码行。
- 选项“-E”,让 gcc 在预处理结束后停止编译过程。
- 选项“-o”,是指目标文件,“.i”文件为已经过预处理的C原始程序。
对于文件HelloWorld.c
1. #include<stdio.h> 2. #define NUMBER 2 3. 4. int main() 5. { 6. #if NUMBER 7. printf("NUMBER=%d\n",NUMBER);//NUMBER被定义,就打印NUMBER的值,否则打印error 8. #else 9. printf("error"); 10. #endif 11. return 0; 12. 13. } 14.
执行命令:
gcc -o HelloWorld.c -o HelloWorld.i
这就生成了HelloWorld.i文件,cat一下HelloWorld.i文件:
(2)编译-选项-S 生成.s
- 这个过程把c代码转成汇编,包括:语法分析、词法分析、语义分析、符号汇总
- gcc 首先要检查代码的规范性、是否有语法错误等,以确定代码的实际要做的工作,在检查无误后,gcc 把代码翻译成汇编语言。
- 可以使用“-S”选项来进行查看,该选项只进行编译而不进行汇编,生成汇编代码
- 选项“-o”,是指目标文件,“.s”文件为已经翻译过的C原始程序。
继续执行以下命令:
gcc -S HelloWorld.i -o HelloWorld.s
生成HelloWorld.s文件后,cat一下汇编代码HelloWorld.s:
(3)汇编-选项-c 生成.o
- 把汇编代码转换成机器指令(二进制指令),生成目标文件,形成符号表
- 汇编阶段把编译阶段生成的“.s”文件转成目标文件
- 使用选项“-c”可看到汇编代码已转化为“.o”的二进制目标代码
使用以下命令:
gcc -c HelloWorld.s -o HelloWorld.o
生成HelloWorld.o文件,由于.o文件是二进制,因此cat的时候是乱码:
(4)链接-选项-o 生成可执行程序
- 合并段表,合并并重定位符号表。
- 在成功编译之后,就进入了链接阶段
执行以下命令:
gcc HelloWrld.o -o HelloWorld
生成HelloWorld可执行文件,使用cat查看可执行文件:
3.静态库和动态库
(1)静态库
静态库是指编译链接时,把库文件的代码全部加入到可执行文件中,因此生成的文件比较大,但在运行时也就不再需要库文件了。其后缀名一般为“.a” 。
1. 优点:可移植性好 2. 3. 缺点:体积大
先使用以下命令安装lib.c:
sudo yum install glibc-static
再使用静态链接生成可执行文件:
gcc 源文件 -o 目标文件 -static
如:
(2)动态库
动态库与之相反,在编译链接时并没有把库文件的代码加入到可执行文件中,而是在程序执行时由运行时链接文件加载库,这样可以节省系统的开销。动态库一般后缀名为“.so”。gcc 在编译时默认使用动态库(编译时,系统默认给了.so文件,gcc会默认优先使用 .so动态库进行编译,当没有.so才会找.a静态库,没有.a静态库就会报错)。完成了链接之后,gcc 就可以生成可执行文件。
1. 优点:体积小,轻量,节省内存和硬盘空间,下载传输方便 2. 3. 缺点:库代码没了,程序无法运行
使用
gcc HelloWorld.c -o HelloWorld
生成可执行程序后:
可以使用指令
file 可执行文件名
查看可执行文件HelloWorld的默认链接方式,发现是动态链接库: