目录
Linux软件管理器 yum
1.什么是软件包
2.查看软件包
3安装与卸载
vim-Linux编辑器
1.vim基础概念
2.vim的基础操作
命令模式基本操作
底层模式基本操作
3、其它模式
Linux编译器 gcc/g++
1.如何进行编译
2.编译的四个过程
预处理(-E)
编译(-S)
汇编(-c)
链接
动态库与静态库
动态库和静态库的转变
Linux调试器 gdb
基本操作
Linux项目自动化构建工具 make/makefile
1.什么是make/makefile?
2.依赖关系与依赖方法
Linux软件管理器 yum
1.什么是软件包
在Linux下安装软件, 一个通常的办法是下载到程序的源代码, 并进行编译, 得到可执行程序. 但是这样太麻烦了, 于是有些人把一些常用的软件提前编译好, 做成软件包(可以理解成windows上的安 装程序)放在一个服务器上, 通过包管理器可以很方便的获取到这个编译好的软件包, 直接进行安装. 软件包和软件包管理器, 就好比 "App" 和 "应用商店" 这样的关系. yum(Yellow dog Updater, Modified)是Linux下非常常用的一种包管理器. 主要应用在Fedora, RedHat, Centos等发行版上.
2.查看软件包
关于 rzsz, 这个工具用于 windows 机器和远端的 Linux 机器通过 XShell 传输文件.
安装完毕之后可以通过拖拽的方式将文件上传过去.
注意事项: 关于 yum 的所有操作必须保证主机(虚拟机)网络畅通!!! 可以通过 ping 指令验证
查看软件包: 通过 yum list 命令可以罗列出当前一共有哪些软件包. 由于包的数目可能非常之多, 这里我们需要使用 grep 命令筛选出我们关注的包. 例如:
yum list | grep lrsz
结果如下:
lrzsz.x86_64 0.12.20-36.el7 @base
-
软件包名称: 主版本号.次版本号.源程序发行号-软件包的发行号.主机平台.cpu架构。
-
"x86_64" 后缀表示64位系统的安装包, "i686" 后缀表示32位系统安装包. 选择包时要和系统匹配。
-
"el7" 表示操作系统发行版的版本. "el7" 表示的是 centos7/redhat7. "el6" 表示centos6/redhat6。
-
最后一列, base 表示的是 "软件源" 的名称, 类似于 "小米应用商店", "华为应用商店" 这样的概念。
3安装与卸载
例如要安装tree
sudo yum install tree
安装gcc:
sudo yum install lrzsz
这时系统会向你再次确认是否安装,若不想进行此类再次确定可在末尾加上 -y
sudo yum install lrzsz -y
卸载软件:
sudo yum remove lrzsz
vim-Linux编辑器
安装vim:
sudo yum install vim
1.vim基础概念
vim的三种模式
我们重点讲解三种模式(其实有好多模式,目前掌握这3种即可),分别是命令模式 (command mode)、插入模式(Insert mode)和底行模式(last line mode),各模式的功能区分如下:
正常/普通/命令模式(Normal mode)
控制屏幕光标的移动,字符、字或行的删除,移动复制某区段及进入Insert mode下,或者到 last line mode
插入模式(Insert mode)
只有在Insert mode下,才可以做文字输入,按「ESC」键可回到命令行模式。该模式是我们后面用的最频繁的编辑模式。
末行模式(last line mode)
文件保存或退出,也可以进行文件替换,找字符串,列出行号等操作。 在命令模式下,shift+: 即可进入该模式。要查看你的所有模式:打开vim,底行模式直接输入:help vim-modes
2.vim的基础操作
命令模式基本操作
-
进入插入模式
按[i]进入插入模式[insert mode], 按“i” 进入插入模式后是从光标当前位置开始输入文件
按[a]进入插入模式,是从光标所在位置的下一个位置开始输入文字
按[o]进入插入模式,是插入新的一行,从行首开始输入文字
锚点,左右定位:
[shift+4] : 定位到光标所在行的最结尾
[ shift+6] :定位到光标所在行的最开始
上下定位
[gg] :定位到最文件的最开始
[shift+g] :光标定位到文件的结尾
[n+shift+g] : 光标定位到文件的任意行
[yy] : 将当前光标所在的行,复制
[p] :粘贴
[nyy] : (n为具体数字) 从光标位置向下复制n行
[np] :向下粘贴n次
[u] :撤销
[ctrl+r] :取消刚才的撤销
[dd],[ndd]:删除光标所在行
[ndd+p],[dd+p]:剪切
[shirt+~] :将当前光标所在位置的字母大小写切换
[w],[b]:按照单词为单位进行光标跳转
[x],[nx] :删除光标所在字符和光标之后的字符
[X], [nX] :删除光标位置之前的字符,不包括光标当前位置
[r]对光标位置的字符进行替换
[shift+r(R)]:进入替换模式 k,j(jump),k(king),l:左,下,上,右
底层模式基本操作
set nu: 调出行号
set nonu:取消行号
w,q,!:保存,退出,强制
!+命令:不退出vim执行命令行命令
vs filename :分屏(依旧用wq!退出,光标在哪个退出哪个文件)
ctrl+ww:光标在多屏幕下进行切换
3、其它模式
列模式
ctrl+v进入列模式,进入列模式后可以通过命令模式的组合键移动光标来选择区域。按下大写的I可以在列模式中进入插入模式,对第一行进行操作即可,下面几行会复制第一行的操作。操作完之后按esc键退出,一般用来注释。
Linux编译器 gcc/g++
1.如何进行编译
在Linux下,我们通常用gcc和g++编译器进行编译,命令如下:
格式 gcc [选项] 要编译的文件 [选项] [目标文件]
在编译完成后生成a.out可执行文件,./a.out执行该文件。
2.编译的四个过程
预处理(-E)
功能:头文件展开,去注释,进行宏替换,条件编译。
gcc默认打印到屏幕上,如果要指定路径,后面加上-o选项,-o后面是路径。
-E :从现在开始进行程序的翻译,如果预处理完成,就停止
可以看出没有mytest.i文件比proc.c文件大很多,原因是在预处理阶段进行了头文件展开。
编译(-S)
功能:c代码编译成汇编
-S : 从现在开始进行程序翻译,如果编译完成,立即停止
汇编(-c)
功能:把汇编翻译成二进制语言
链接
功能:目标文件,只有函数的调用,没有函数的实现。链接的本质是将函数的调用和函数的实现结合起来。
运行:
动态库与静态库
安装静态库
sudo yum install -y glibc-static #C静态库
sudo yum install -y libstdc++-static #C++静态库
库的使用时需要链接(Link),而根据链接方式的不同,把库分为两种,动态库和静态库。
静态库(静态链接库):编译链接时,把库文件的代码全部加入到可执行文件中。
优点:可移植性强,不依赖第三方库,不会因为库的损坏导致程序无法运行。
缺点:浪费空间。
动态库(动态链接库):编译链接时,不会把库文件拷贝进来,只会存储库指向动态库的引用,等程序真正运行时,才会加载。
优点:省空间(磁盘的空间,内存的空间),体积小,速度快。
缺点:依赖动态库,可移植性较差,会因为库的损坏或者版本不合无法运行程序。
动态库和静态库的转变
gcc生成的可执行程序,默认是动态的。
gcc 带上 -staic就会变成静态。
Linux调试器 gdb
sudo yum install gdb #安装gdb
-
程序的发布方式有两种,debug模式和release模式
-
Linux gcc/g++出来的二进制程序,默认是release模式
-
要使用gdb调试,必须在源代码生成二进制程序的时候, 加上 -g 选项
-
退出gdb,使用quit命令
基本操作
l(行号):显示代码
r:运行代码
b 行号:打断点
info b:查看断点
d 行号:删除断点
n:逐过程
s:逐语句
finish:直接运行完毕对应的函数
until:跳转至任意行(不建议使用)
continue:跳转到下一个断点处
p:查看变量内容活地址
display 变量:变量常显示
undisplay 行号:去掉常显示的变量
c : 运行至下一个断点处停下
Linux项目自动化构建工具 make/makefile
make 是命令 makefile是一个文件
1.什么是make/makefile?
会不会写makefile,从一个侧面说明了一个人是否具备完成大型工程的能力 一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作 makefile带来的好处就是——“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率。 make是一个命令工具,是一个解释makefile中指令的命令工具,一般来说,大多数的IDE都有这个命令,比如:Delphi的make,Visual C++的nmake,Linux下GNU的make。可见,makefile都成为了一种在工程方面的编译方法。 make是一条命令,makefile是一个文件,两个搭配使用,完成项目自动化构建。
2.依赖关系与依赖方法
依赖关系主要表明需要依赖的对象,而依赖方法主要描述需要依赖的对象做什么。比如在上学期间,家里都会给我们打生活费。我们没钱了就会联系父母,因为我们和父母之间具有依赖关系。而联系父母是为了让他们给我们打生活费,打生活费这个具体行为这称为依赖方法。
我们要创建一个makefile文件,依赖关系和依赖方法都写在里面。
.PHONY表示伪目标,依赖方法总是被执行,可以重复执行。 make clean可以重复执行,而在文件不发生改变的情况下make只能执行一次。