Linux编辑器
yum
yum是包管理器,类似于Linux的应用商店,安装和卸载工具需要使用yum,Linux系统中是预装了yum的
rzsz工具: Linux和window的文件互传工具 yum install lrzsz
查看所有的软件列表: yum list
el代表centos,@base代表软件的提供方是base
卸载软件 yum remove lrzsz
拓展yum源: yum install epel-release
好玩(无用)的指令
yum install sl
yum源在哪里查看? ls /etc/yum.repos.d/
如何更新yum源?
先备份 sudo cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak
阿里云源 sudo wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
清华大学源 sudo wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.tuna.tsinghua.edu.cn/repo/Centos-7.repo
网易源 sudo wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.163.com/.help/CentOS7-Base-163.repo
清理缓存 sudo yum clean all
和sudo yum makecache
验证新源是否可用 sudo yum repolist
更新yum源的本质就是: 用新的保存有各种文件替换现有的CentOS-Base.repo
文件
vim
vim是一个文本编辑器
vim的模式:一开始进入vim之后是命令模式,输入i进入插入模式,输入shift+分号进入底行模式
在命令模式下,所有的输入都被当做命令来看待
命令模式->插入模式 输入i
或a
或o
即可
插入模式->命令模式 输入esc
即可
若在使用vim编辑文件时,出现了异常,导致后面打开文件的时候会出现异常.是因为vim默认会帮我们保存这个文件的备份.
此时输入d即可删除掉这个临时文件
vim命令行模式下的常用命令
shift+4
进入当前行的最后一列
shift+6
进入当前行的第一列
shift+g
将光标定位到文本的最结尾
gg
将光标定位到文本的最开始
number shift+g
将光标定位到文本的第number行
h
光标左移
l
光标右移
j
光标下移(jump)
k
光标上移(king)
number yy
复制当前行开始的number行
number p
将剪切板的内容粘贴number次
u
撤销
crtl+r
对撤销进行撤销
dd
剪切当前行能和p组合使用
number dd
剪切number行
摁住shift,按~
进行大小写转换
number r
替换当前光标所所在字符,替换为下一次输入
shift + r
进入替换模式
number x
删除光标所在字符,默认向后删
number shift + x
删除光标所在字符,向前删
w
按照单词在行内向右移动
b
按照单词在行内向左移动
shift + 3 查询当前页面中当前光标所在的单词,按n进行跳转
底行模式:
可以在底行中先输入!,再进行编译运行当前的软件
可以在底行中直接对比两个文件
如何进行光标移动?
ctrl + ww
w按两次在底行模式中输入
set nu
可以显示行号,输入set nonu
可以取消行号
vim使用技巧案例
vim test.cpp +11
让光标直接定位在11行
保存并退出vim的另一种方式: shift + zz
也就是输入两次Z
vim中批量化加注释的方式
- crtl + v
- hjkl区域选择
- 输入
shift + i
- 输入
//
- 输入
esc
vim中批量化去注释的方式
- ctrl + v
- hjkl区域选择
- 输入 d
vim的配置
- 需要到家目录创建
.vimrc
的文件
系统中也有一个vimrc
文件 通过 ls /etc/vimrc
查看
要配置vim,直接编辑对应用户的家目录下的.vimrc
文件即可
vim的一键配置,直接在gitee上搜索VimForCpp
直接执行这个指令即可
gcc/g++编译器
C语言代码编译制定文件名 gcc -o a test.c -std=c99
C代码也可以使用g++进行编译 g++ -o a test.c
gcc只能编译C代码,g++可以编译C代码和C++代码
程序翻译的过程
- 预处理
- 编译
- 汇编
- 链接
预处理(处理之后还是C语言代码)
- 头文件展开
- 去注释
- 宏替换
- 条件编译
编译(编译之后就成了汇编语言)
汇编(将汇编->二进制,也就是可重定位目标二进制文件,但是这个二进制文件是不能执行的)
链接()
预处理实例
gcc -E test.c -o test.i
注意右边的test.i文件中没有了头文件,因为进行了头文件展开
条件编译时: 可以在编译时添加宏
gcc -o mybin test.c -D V2=1
可以通过给编译器传递不同的宏的值来进行对代码的动态裁剪
编译实例
gcc -S test.i -o test.s
-S
选项的功能是?从现在开始进行程序的翻译,编译工作做完就停下来
汇编实例
gcc -c test.s -o test.o
此时的
test.o
文件已经是二进制了
-c
的功能? 从现在开始进行程序的翻译,如果汇编工作做完就停下来,最终生成的是不可执行的目标二进制文件
链接实例
gcc -o test test.o
如何查看一个文件所依赖的库呢? 使用 ldd filename
Linux | window | |
---|---|---|
动态库 | .so | .dll |
静态库 | .a | .lib |
动态库的特点:一旦缺失,所有依赖这个库的程序都无法执行
动态库
- 优点:比较节省资源,不会出现太多的重复代码,可以节约很多内存,网络等资源
- 缺点:对库的依赖性较强,一旦库丢失,所有使用这个库的程序都无法运行
静态库
- 优点:不依赖库,可以在同类型平台进行跨平台使用
- 缺点:生成的可执行程序的体积比较大,比较浪费资源.内存,网络等资源
默认的编译指令 gcc -o test test.c
是动态链接的
静态链接案例
如何主动进行静态链接? gcc -o mybin2 test.c -static
注意:在第一次执行这个指令的时候,会出错,是因为系统默认没有安装静态库,需要通过 sudo yum install glibc-static
指令进行安装
所以gcc的默认链接就是动态链接,要主动静态链接需要输入 -static
选项
案例:静态链接和动态链接生成的可执行文件的文件大小区别很大
使用g++进行静态链接 g++ -o file file.cpp
,前置安装: sudo yum install libstdc++-static
自动化构建工具Make/Makefile
make是一个命令 makefile是一个配置文件
mybin:test.c
gcc -o $@ @^
清理项目
mybin:test.c
gcc -o $@ @^
clean:
rm - r mybin
清理的话直接运行 make clean
即可
默认的make只会执行从上到下的第一个目标文件,并且默认只生成一个
使用make的实例
发现有了mybin文件之后,再次进行make之后,make帮我们检测了此时的mybin文件是否是最新的,只要mybin这个目标文件的最近修改时间比所有的源文件时间的最近修改时间新,就说明这个mybin文件是最新的.
如何查看一个文件的三个时间? stat filename
这三个时间从上到下分别是 Access Time, Modify Time,Change Time
当对文件的内容做修改时,修改的是Modify Time
如果是对文件的属性做更改那么就是改变文件的Change Time
Access TIme
是访问文件的最新的时间,但是并不是每次查看文件都会修改文件的Access Time
会浪费系统的资源
如果每次修改文件的话,Modify Time
和Change Time
都会同时改变,因为修改了文件之后,文件的大小也会变化.文件的属性也就变化了.
使用touch命令可以修改文件的Modify Time
. 例如 touch filename
makefile文件的更多的语法:
伪目标 使用 .PHONY
进行修饰
不过一般建议将clean设置为伪目标 因为清理工作总是要执行的
不建议将源文件设置为伪目标,如果每一次make的时候,每个目标文件都要重新编译的话,会降低编译效率
在makefile文件中还可以进行替换操作,如图
makfile文件中的递归式写法
mybin:test.o
gcc -o mybin test.o
test.o:test.s
gcc -c test.s -o test.o
test.s:test.i
gcc -S test.i -o test.s
test.i:test.c
gcc -E test.c -o test.i
.PHONY:clean
clean:
rm -f test.i test.s test.o mybin