5.是否有良好的软件生态;
开源的优势是一个人维护大型项目,不如多个人来维护,同时开源有利于形成良好的Linux生态,有利于快速占据市场;
1.4开源产生依赖
操作系统的设计者和推动者要共同维护Linux的生态。
推动者如:顶尖的工程师或者黑客,为了实现价值提高知名度,维护软件生态;
由于Linux开源免费,所以很多互联网公司主要使用Linux并且会产生使用依赖。使用者们的目的为了产生企业级软件,所以购买Linux服务器,鼓励工程师和黑客们开发服务。开源免费注定资金不足,难以维持生态,这时候使用者们就会以提供钱或者设备的捐赠之类的方式维护其生态。
1.5yum使用
yum的使用必须联网,可以使用ping指令进行验证。
ping www.baidu.com
yum list
#列举一下所有软件包,但是由于很多需要搭配grep过滤出来需要的
sudo yum install -y 软件包名
#需要注意的是普通用户安装软件需要提权
sudo yum remove -y 软件包名
#进行软件的卸载
1.5.1rz/sz软件的安装和使用
sudo yum install -y lrzsz
rz
#将文件从Windows传到Linux上
sz 文件名
#将文件发送到Windows
1.5.2yum源
yum内置了app下载链接,即yum源。
Base指的是官方yum源,epel指的是扩展yum源。
yum源存放在/etc/yum.repos.d这个目录下。
sudo yum install -y eple-release
#安装扩展yum源
二、vim编辑器
vim是一种多模式编辑器,常见的是三种模式。以下是三种模式及切换方式。在底行模式下,:!wq。!表示强制执行,w表示写入保存,q表示退出。
命令模式:
使用n可以进行性n行操作;
光标定位:
gg:定位光标到文本起始行开始的位置;
G:定位光标到文本最后一行的开头位置;
ng:定位到n行开头;
$:光标定位到当前行结尾;(锚点)
^:光标定位到当前行开头;(锚点)
w:光标向右移动;
b:光标向左移动;
hjkl:分别对应光标向左下上右移动;
复制:
yy:复制光标所在行的内容;
nyy:复制光标开始n行的内容;
粘贴:
p:将拷贝内容粘贴到光标的下一行;
np:将n份拷贝内容粘贴到光标的下一行;
撤销:
u:撤销上次操作;
ctrl+r:反撤销;
剪切:
dd:剪切光标所在行内容;
ndd:剪切光标所在行开始n行的内容;
其他:
shift+~:快速大小写转换;
nr:将光标当前位置的往后n个字符替换;
nx:将光标当前位置的往后n个字符删除;
批量化替换模式:
使用R进入,按两下insert键;
插入模式:
使用i进入,或者I,或者按一下insert键;
批量选择模式:
使用ctrl+v进入;要注意使用hjkl进行移动,再次进入插入模式要使用I;
多文件模式:
使用vs 文件名进入;
使用ctrl+ww实现光标在不同文件的切换;
底行模式:
1.!wq:!表示强制执行,w表示写入保存,q表示退出;
2./+文本关键词:搜索功能,搜索文本关键词匹配的子串;
3.!+各种指令操作:在vim里执行各种指令;
4.set nu/nonu:显示行号/去掉行号;
三、编译工具gcc/g++
3.1gcc的使用
g++与gcc类似,只是编译.cc/.cpp./cxx结尾的文件,gcc编译的是.c文件。
要注意的是,能够开发是因为安装了相关的头文件和库文件,头文件在/user/include/路径下存放着,库文件在/lib64下存放着;
对一份源代码编译可细分为四个阶段,分别是预处理、编译、汇编、链接;
预处理阶段:
gcc -E test.c -o test.i -g
#这个阶段主要进行了去注释、头文件展开、条件编译、宏替换;
#E表示执行到预处理阶段结束,o表示以此方式命名,D表示定义一个量,用来进行条件编译;生成的.i文件本质上是一个较为干净的源文件,g表示以debug的方式进行编译,会留下许多调试信息;
编译阶段:
gcc -S test.i -o test.s
#这个阶段主要进行了语法检查,符号汇总,生成了汇编文件;
#S表示执行到编译阶段结束
汇编阶段:
gcc -c test.s -o test.o
#这个阶段是将汇编文件转换成二进制文件,形成符号表(注意此时的符号表不一定是有效的)
#c表示执行到汇编阶段结束,.o文件是可重定位目标二进制文件
链接阶段:
gcc test.o -o test.exe
#这个阶段会将多个二进制文件进行连接形成可执行文件或者库文件,进行合并符号表(此时的符号表才是有效的)
#不加选项直接生成的就是可执行程序,Windows下要求可执行程序必须是以.exe后缀结尾的;
条件编译可以实现同时维护专业版和社区版的软件,具体使用不同的版本是使用条件编译就可以对代码进行切割;
3.2、编译完成常用的一些指令
1.od
od 二进制文件名
#进行二进制文件的查看
2.ldd
ldd test.exe
#查看可执行程序的依赖情况
3.file
file 可执行程序
#显示链接方式
4.readelf
readelf 可执行程序
#查看可执行程序的二进制构成,可执行程序一般是elf格式的二进制文件;
5.stat
stat 文件名
#可以查看文件的属性
3.3链接
Linux中.so是动态库,.a是静态库,Windows中.dll是动态库,.lib是静态库,库文件其实就是对.o文件进行打包。一般libname.so中name就是库文件的名字。
安装开发包的本质就是安装头文件和对应的库文件,头文件提供声明,库文件提供实现和定义;默认使用的是动态库的方式进行链接。
链接方式分为静态链接和动态链接;
对于动态链接,动态库又被称为共享库,不同的程序都可以访问,只存在一份即可,但是程序对动态库的依赖性较大。
对于静态库,是将库文件的内容拷贝到自己的可执行文件中,用哪些拷贝哪些,依赖性较弱,可以独立运行程序,但是会导致代码膨胀;
形成可执行程序时,默认使用的连接方式是动态链接,所以必须提供动态库,进行静态链接时需要加选项-static;
四、自动化构建工具make/makefile
make:一条指令,makefile:是一个当前目录下的文件,通过依赖关系和依赖方法,进行栈结构的推导来完成自动化构建;
注意依赖方法不可以顶格写。可执行程序和源程序的更新是通过时间戳来进行比较的,如果时间戳更新了就可以make重新构建,时间戳不更新,make就不会执行,这是做为了提高编译效率。
如果想让对应的依赖关系总是被执行,.PHONY:伪目标,就会强制执行伪目标。
特殊符号:
最后的话
最近很多小伙伴找我要Linux学习资料,于是我翻箱倒柜,整理了一些优质资源,涵盖视频、电子书、PPT等共享给大家!
资料预览
给大家整理的视频资料:
给大家整理的电子书资料:
如果本文对你有帮助,欢迎点赞、收藏、转发给朋友,让我有持续创作的动力!
,如果时间戳更新了就可以make重新构建,时间戳不更新,make就不会执行,这是做为了提高编译效率。
如果想让对应的依赖关系总是被执行,.PHONY:伪目标,就会强制执行伪目标。
特殊符号:
最后的话
最近很多小伙伴找我要Linux学习资料,于是我翻箱倒柜,整理了一些优质资源,涵盖视频、电子书、PPT等共享给大家!
资料预览
给大家整理的视频资料:
[外链图片转存中…(img-z8BoeRz5-1718863079240)]
给大家整理的电子书资料:
[外链图片转存中…(img-uO4XDbwL-1718863079241)]
如果本文对你有帮助,欢迎点赞、收藏、转发给朋友,让我有持续创作的动力!