1.在Linux下安装软件,一个通常的办法是下载到程序的源代码,并进行编译,得到可执行程序。 2.将一些常用的软件提前编译好,做成软件包,放在一个服务器上,通过包管理器可以很方便的获取到这个编译好的软件包。直接进行安装。 3.软件包和软件管理器就好比Appstore 4.yum是Linux下常用的一种包管理器。主要应用在centos,fedora,redhat上。
关于rzsz :用于win和远端Linux机器通过xshell传输文件。安装完毕后可以通过拖拽的方式来传递文件 注意事项: 关于yum的所有操作,必须在有网络的条件下进行: 检测命令行:ping指令
查看软件包 通过yum list命令可以罗列出当前一共有哪些软件包,可恨据许哟啊使用grep命令,筛选出具有关键字的包。
注意事项:
1.软件包名称,主版本号,次版本号,源程序发行号-软件包的发行号,主机平台,cpu架构。 2.“x86_64”后缀表示64为系统的安装包,“i686”后缀表示32位系统安装包。 3.“el8”表示的是操作系统发行的版本。 4.最后一列,base表示的是“软件源”的名称,类似于“华为应用商店”。
通过yum进行安装
注意: 1.安装需要向系统目录写入文件,所以一般要在sudo或者root账户下完成。 2.yum一次只能进行一个下载任务,如果在一个软件下载的过程中去下载另一个可能会报错。
vim是什么? 答:编译器 为什么学vim? 答:有时候,需要在生成环境下,快速定位问题,甚至需要快速修改代码。
常用的三种模式 | 功能 |
---|---|
正常/普通/命令模式 | 控制光标的移动,字符,字,或者行的删除,移动复制某一区段及进入insert模式,或者last line 模式 |
插入模式 | 只有在insert模式下,才能进行文字的输入,按[esc]即可退回到命令行模式 |
末行模式 | 文件保存及退出,也可进行文件替换,找字符串,列出行号等操作。在命令行模式下,使用shift + :即可进入 |
1.
$ vim test.cpp
即可进入vim,此时是正常模式。
2.[正常模式] --->[插入模式] a ---> 光标的下一位插入 i --->光标处插入 o ----> 光标另起下一行插入。
3.[插入模式] --->[正常模式] 无脑[esc] 4.[正常模式] ----> [末行模式] [shift + :] 5.退出及保存 在末行模式下 w(保存当前文件) q(退出vim) 其中 可以使用[q!]强制退出。
命令 | 说明 |
---|---|
移动光标 | 可以使用上下左右键,也可使用[h j k l],对应[上 下 左 右]。 |
G | 移动到文章末尾 |
$ | 移动至光标所在行的末尾 |
^ | 移动至光标所在行的行首 |
gg | 进入文本的末端 |
shift g | 进入文本末端 |
yy | 复制当前行 |
p | 粘贴当前行的后面,[np 可批量化操作] |
dd | 剪切(删除)当前行 [ndd] |
u | 撤销刚刚的操作 |
CTRL r | 针对u操作,进行再次撤销 |
w,b | 向后,向前在一行以单词为单位进行光标移动 |
h,j,k,l | 左 下 上 后 |
shift + ` | 大小写快速切换 |
r | 替换光标所在的字符 [nr] |
shift+ r | R:批量化操作 |
x | 删除光标所在字符 [nx] |
1.预处理 2.编译 3.汇编 4.链接
环节 | 任务 | 指令 |
---|---|---|
预处理 | 宏定义替换,头文件展开,条件编译,去注释等 | gcc _E test.c -o test.i |
编译 | 检测代码的规范性,并将代码翻译成汇编语言 | gcc -S test.i -o test.s |
汇编 | 将.s文件转换成.o的二进制目标文件 | gcc -c test.s -o test.o |
链接 | 生成可执行文件或者库文件 | gcc test.o -o test |
示例:
补充:数据库 在c的程序中,并没有printf的声明,但是程序却能够跑起来。 原因:系统把这些函数都实现了,并命名为"lib.so.6"的库文件里面去了。在没有特定指定时。gcc会去默认路径下”"usr/lib"下查找“,通过库,完成了对代码的运行。 数据库一般分为静态库与动态库两种
静态库 | 动态库 | |
---|---|---|
后缀 | .a | .so |
区别 | 编译链接时,将库文件全部加入到可执行文件中进行编译 | 程序运行时,链接文件加载入库 |
特点 | 生成的文件比较大,但是运行一次后,不再需要库文件 | 文件较小,但是每次运行都需要库文件参与,缺少库文件链接会直接die |
gcc默认生成的二进制程序,是动态链接。 |
选项 | 解释 |
---|---|
-E | 只激活预处理,这个不生成文件,你需要把它重定向到一个输出文件里面 |
-S | 编译到汇编语言不进行汇编和链接 |
-c | 编译到目标代码 |
-o | 文件输出到 文件 |
-static | 此选项对生成的文件采用静态链接 |
-g | 生成调试信息。GNU 调试器可利用该信息 |
-w | 不生成任何警告信息 |
-wall | 生成所有的警告信息 |
Linux下默认生成的可执行程序是release版本,无法调试
-g选项 | 解释 |
---|---|
b 行号 | 打断点 |
info b | 查看断点 |
d 编号 | 取消断点 |
l 行号 | 显示代码 |
s | step,逐语句(计入断点),类似于vs的F11 |
n | next 逐过程,类似于vs下的F10 |
display && undisplay | 常显示和取消常显示 |
until 行号 | 跳转至指定行 |
r | 运行程序 |
c | 从一个断点运行至另一个断点,类似于vs下的 F9 + F5 |
finish | 执行完当前函数就等下来 |
生成一个debug版本的test_g
1.工程文件不计其数,按照类型,功能,模块分在若干文件中。makefile定义了一系列规则来制定工作,文件的编译顺序,那些文件重新编译等。 2.在makefile定义好依赖对象和依赖关系后,只需要一个make就能自动完成编译,提高了效率。 3.make是一条命令,makefile是一个文件。 4.在编译代码的时候,可能存在指令写反导致源代码被覆盖的事情,makefile可以有效解决此类问题。 基本格式
目标文件 :依赖关系 //table 依赖方法
举例:
连续输入make,会生成这样一句话
关于.PHONY 是makefile语法格式中的一个关键字 clean被.PHONY修改时,表明:总是被执行的 无论目标文件是否新旧,照样直接执行依赖关系。 问题:makefile是如何识别我的exe/bin是新的还是旧的? 根据对比源文件和可执行程序的最近修改时间,评估是否需要重新生成。
查询指令 stat [文件]
文件 = 内容(影响Modify)+ 属性(影响Change) 修改文件内容可能会引起Change time的变化。 至于Access读取文件都会引起变化。
Makefile多文件编译
引入:缓冲区: 本质上是一段内存空间,用来临时储存数据的,使用\n可以刷新缓冲区,或者使用fflush(stdout)就可以将缓冲区的数据直接打印出来。 换行 + 回车 使用 “\r" -- 光标移动到本行的最初位置。
#include#include #include #define N 101 #define STYLE '*' int main() { char bar[N];// memset(bar,'\0',sizeof(bar));//初始化 const char p[] = "|/-\\";// int cnt = 0; while(cnt < N) { printf("[%-100s][%d%%][%c]\r",bar,cnt,p[cnt%4]); fflush(stdout);//刷新缓冲区 bar[cnt++]=STYLE; usleep(20000);//ms } printf("\n"); return 0; }
安装git
yum install -y git
如何使用? 1.建立gitte仓库 2.git clone +URL(仓库的http链接)。 3.git add +[文件] 4.git commit -m "有用的日志"。 5.git push
第一次使用,需要配置用户名和邮箱 .gitignore 是一个黑名单,只要加上对应后缀,那么上传时就会自动规避掉带有此后缀的文件。 关于:在网上修改代码,本地不会修改,导致后续上传git引起的错误解决方案。 使用命令行:git pull然后无脑q! 这样就自动合并同步了。