照明灯具类企业网站,宁波哪里有网站建设高端的,手机网站的宽度,网站制作常见问题 图片版权Welcome to 9ilks Code World (๑•́ ₃ •̀๑) 个人主页: 9ilk
(๑•́ ₃ •̀๑) 文章专栏#xff1a; Linux网络编程 本篇博客我们来认识一下Linux中的一些基础开发工具 --- yum,vim,gcc/g。 #x1f3e0; yum
#x1f3b8; 什么是yum
当用户想下载软… Welcome to 9ilks Code World (๑•́ ₃ •̀๑) 个人主页: 9ilk
(๑•́ ₃ •̀๑) 文章专栏 Linux网络编程 本篇博客我们来认识一下Linux中的一些基础开发工具 --- yum,vim,gcc/g。 yum 什么是yum
当用户想下载软件或工具时,都需要到特定位置进行下载,比如你在手机上下载app,需要到对应的应用商城下载。类似的在Linux系统下也有下载的需求通常来说下载方式主要有以下几种
1. 源代码安装下载程序的源码进行编译得到可执行程序之后使用非常不方便。
2. rpm包安装将源码提前在各种不同环境下编译好形成一种压缩包叫rpm包直接下载可执行程序就能安装好实际上就是把可执行程序拷贝到指定路径下。但是主要可能会存在软件之间依赖问题比如还需要你安装其他软件额外的库之类的。
3. yum/apt安装一站式安装。 Q如何理解yum? 为了方便有的人就把常用的软件提前在各种环境下编译后形成软件包之后上传到服务端上通过包管理器可以很方便的获取到这个提前编译好的软件包进行安装。软件包和软件管理器就好比“App和”应用商店“的关系yum是Linux下非常常用的一种软件包管理器它相当于一个软件管家帮我们管理软件。yum主要用在Fedora,RedHat,Centos等发行版上而Ubuntu下使用的是aptapt同样提供了⾃动解决依赖关系、下载和安装软件包的功能。
注其中服务器端充当一个审核员的作用保证用户下载到的都是绿色健康的软件。 Linux软件生态
Linux下载软件的过程 操作系统的好坏评估 --- ⽣态问题 对于一款操作系统我们不仅要看到操作系统本身还要看到特定OS背后的生态。
为什么会有⼈免费特定社区提供软件还发布还提供云服务器让你下载 注随着软件越做越大这样做就有越多开发者越能暴露更多问题越能修正问题有更多开发者维护文档这对提升项目质量是有益的。
软件包依赖的问题 国内镜像源 yum/apt 操作
1. 查看软件包
通过该命令可以罗列出当前⼀共有哪些软件包,由于包的数目可能非常之多,这里我们需要使用grep命令进行筛选 :
---Centos
yum list | grep lrzsz--Ubuntu
apt search lrzsz
apt show lrzsz 2. 安装软件
# Centos
$ sudo yum install -y lrzsz# Ubuntu
$ sudo apt install -y lrzsz
注使用yum/apt安装软件需要root权限。 安装软件时由于需要向系统⽬录中写⼊内容,⼀般需要sudo或者切到root账⼾下才能完成yum/apt安装软件只能⼀个装完了再装另⼀个.正在yum/apt安装⼀个软件的过程中,如果再尝试⽤yum/apt安装另外⼀个软件,yum/apt会报错。
3. 卸载软件
# Centos
sudo yum remove [-y] lrzsz# Ubuntu
sudo apt remove [-y] lrzsz
带上-y选项是不提示直接卸载
4. 注意事项
关于yum/apt的所有操作必须保证主机(虚拟机)网络畅通!!!可以通过ping指令验证 5. rzsz工具
1安装
//Centos
sudo yum install [-y] lrzsz//Ubuntu
sudo apt install lrzsz
2使用命令介绍
sz 文件名将Linux中文件下载到Windows中。 rz : 将本地文件上传到Linux中。 yum/apt源配置 Q : yum/apt既然相当于是一个软件管家那它是怎么知道到哪台服务器上下载数据的呢 答其实yum/apt配置文件中说明了其他软件的下载安装路径
Centos : yum yum会根据/etc/yum.repos.d/该路径下面的配置文件来构成自己的下载链接根据OS版本根据你要下载的软件yum会帮住我们下载国外链接一般比较卡我们可以使用国内各大高校提供的镜像yum源所以需要配置。那么如何配置本质就是更改文件或者更改文件内容把软件源里的地址链接从国外的地址链接更新成国内的。 //1.备份
cp -r xxxx
//2.获取yum源 把远端的链接上的配置文件下载下来改名为CentOS-Base.repo
sudo wget -O /etc/yum.repos.d/CentOS-Base.repo xxxx
//3.清理缓存生成缓存升级更新
sudo yum clear all
sudo yum makecache
sudo yum -y updateUbuntu : apt
1.打开配置文件
sudo vim /etc/apt/sources.list
2.配置文件替换为下载的apt源
...
3.保存并更新
sudo apt update yum/apt其他操作
makecache将软件包信息缓存到本地 (这样每次安装不用去搜索)
clean all 清理老旧的缓存信息
update 升级所有包同时也升级软件和系统内核
upgrade只升级所有包Vim/Vi
vi/vim的区别简单来说,他们都是多模式编辑器,不同的是vim是vi的升级版本,它不仅兼容vi的所有指令,而且还有一些新的特性在里面.例如语法加亮,可视化操作不仅可以在终端运行,也可以运行与x window、mac os、windows。 vim使用方法
vim 文件名 vim的基本概念
我们讲解vim的三种模式(其实vim有多种模式目前掌握三种即可)分别是命令行模式(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 模式之间的切换关系如下 命令模式相当于游戏中的起始界面, 任何模式都可以从命令模式进入,而且退出都是用的Esc键。命令行模式 - 插入模式
1. i : 按「i」切换进⼊插⼊模式「insertmode」按“i”进⼊插⼊模式后是从光标当前位置开始输⼊⽂件
2. a 按「a」进⼊插⼊模式后是从⽬前光标所在位置的下⼀个位置开始输⼊⽂字。
3. o : 按「o」进⼊插⼊模式后是插⼊新的⼀⾏从⾏⾸开始输⼊⽂字。
命令行模式 - 底行模式 按下shift就进入底行模式输入对应操作即可。底行模式 - 退出vim : 此时输入不同选项即可退出vim。
1. w : 保存当前文件。
2. wq : 保存并退出vim。
3. q! : 强制退出。
4. w! : 强制写入。
如果我想执行shell命令但不退出vim可以切换为底行模式再使用 指令。 命令行模式退出vim : shift zz 命令模式常见命令集
1对光标(动图中绿色方块即是光标)所在行的操作
yy : 对当前光标所在行进行复制n yy: 从光标当前行开始往下的n行复制。p: 粘贴。u : 撤销上一次操作。ctrl r : 撤销的恢复。d: 删除光标所在行。可以搭配p完成剪贴操作。n dd 对光标所在行开始往下n行进行删除操作。搭配np完成n次剪贴。
2光标快速定位/光标为锚点的操作
shift g(G) : 定位到文本的最结尾。gg : 定位到文本的最开始。n shift g : 定位到文本的第n行。h j k l : 其实就是光标上下左右的移动。h为左侧j为下侧k为上侧l为右侧。shift 4($) 移动到光标所在行的行尾。shift 6(^) : 移动到光标所在行的行首。 w : 以单词(不存在空的连续字符串)为单位向后跳转。(一直按住w会不断往后跳)b 以单词为单位向前跳转。n x : 从光标当前位置开始进行删除n个字符。(一直按住会不断删)n shift x : 删除光标所在位置的前n个字符。shift ~ 大小写快速切换。(一直按住会自动往后对字符进行切换大小写)n r 替换字符从光标当前位置开始替换n个字符。(前提是有n个字符否则不会进行替换) 底行模式命令集
set nu: 显示文本行号。set nonu : 取消行号。n 回车 跳转到第n行。/ 关键字先按/键再输入想查找的字符如果第一次找的关键字不是想要你的可以一直按住n会往后寻找。(从前往后)/ 关键字先按/键再输入想查找的字符如果第一次找的关键字不是想要你的可以一直按住n会往前寻找。(从后往前)
如果你想同时用vim编辑多个文件,那可以在底行模式输入vs 文件名进行分屏操作: 注 : 光标在哪个文件,就说明正在编辑哪个文件,如果想将光标切换到另一个窗口,使用ctrl ww。 替换模式 底行模式时使用shift r则可进入替换模式能对文本进行自由替换编辑输入啥就会将光标所在处替换为啥。 示范 视图模式
当我们对文本部分内容想批量化进行注释时在命令模式操作有点麻烦此时我们可以切换到视图模式。
切换方法先切换到insert模式按住ctrl v进入视图模式。
注释操作方法可以使用h j k l移动光标进行批量化选取代码区域(可利用nshift g进行快速跳转),选取之后按住shift I进入插入模式按/两次再Esc即可进行注释。
取消注释进入视图模式同样利用h j k l进行批量化选取区域再按住d。
示范 简单vim配置
配置文件位置
在目录/etc/下面有个名为vimrc的文件这是系统中公共的vim配置文件对所有用户都有效。在每个用户的主目录下都可以建立私有配置文件命名为.vimrc“。在该配置文件下进行的操作只对当前用户生效 常用配置选项测试
设置语法高亮度syntax on显示行号set nu设置缩进空格数为4set shiftwidth4 普通用户使用sudo提权 提权问题如何把用户从普通用户提权提到root权限 默认情况下普通用户使用root权限时,即使sudo也会受阻,这是因为普通用户并没有成为root用户的受信任列表里,此时需要把普通用户加入到该列表这样就可以使用root用户权限!
打开/etc/sudoers 添加普通用户进受信任名单 gcc/g 前置知识
预处理进行宏替换/去注释/条件编译/头文件展开等。编译生成汇编。汇编生成机器可识别代码。链接生成可执行文件或库文件。 gcc/g介绍及安装
1. 什么是gcc/g gcc/g都是编译器其中gcc是GCC中的GUN C编译器g是GCC中GUN C编译器。 gcc : gcc对于.c和.cpp文件分别当作c和cpp文件编译(c和cpp语法强度不同)g: g统一当作cpp文件内编译g编译文件时会自动链接标准库STL而gcc不会。
2. 安装
//1.先查看版本
gcc --version
g --version//2.没有则进行安装
yum/apt install -y gcc
yum/apt install -y g gcc/g编译选项 我们以gcc为例 1不带选项
gcc是一个编译器如果不带任何选项默认直接将程序编译为可执行文件也就是一步到位默认形成的可执行程序叫a.out: 如果想执行可执行权限直接./可执行程序名。但是注意该可执行权限本身有可执行的权限
如果想删除可执行程序则使用rm即可因为可执行程序也是文件 2预处理
预处理功能主要包括宏定义,⽂件包含,条件编译,去注释等预处理指令是以#号开头的代码行选项“-E”,该选项的作⽤是让gcc在预处理结束后停⽌编译过程选项“-o”是指⽬标⽂件,“.i”⽂件为已经过预处理的C原始程序 test.i文件是源码经过预处理之后的内容: ( 3 ) 编译
在这个阶段中,gcc⾸先要检查代码的规范性、是否有语法错误等,以确定代码的实际要做的⼯作,在检查⽆误后,gcc把代码翻译成汇编语⾔。⽤⼾可以使⽤“-S”选项来进⾏查看,该选项只进⾏编译⽽不进⾏汇编,⽣成汇编代码.s文件 编译文件内容如下 4汇编
汇编阶段是把编译阶段⽣成的“.s”⽂件转成⽬标⽂件可使⽤选项“-c”就可看到汇编代码已转化为“.o”的⼆进制⽬标代码了 注意当然也可以对.c文件直接使用-c选项生成.o文件帮我们把预处理编译都做了
5链接
在成功编译之后,就进⼊了链接阶段链接的时候需要把⼀堆文件链接在⼀起才生成可执行程序。
gcc test.o -o test
注我们可以使用-o来自命名可执行文件的名字。 函数库
1. 什么是库?
我们的C程序中,并没有定义printf的函数实现,而且在预编译中包含的stdio.h中也只有该函数 的声明,而没有定义函数的实现,那么是在哪里定义函数的实现呢?答案是:系统把这些函数的实现都放到名为libc.so.6的库文件中,在没有指定时,gcc会到系统默认路径的搜索路径/usr/lib下进行查找,也就是链接到libc.so.6库函数中去,这样就能实现函数了,这也就是链接的作用!ldd 可执行程序查看可执行程序链接时依赖的库 2. 库分类 函数库一般分为静态库和动态库两种。动态库在linux下后缀一般为.so在windows下后缀为.dll静态库在linux下后缀为.a在windows下后缀为.lib。 静态库编译链接时,把库⽂件的代码全部加入到可执⾏⽂件中,因此⽣成的⽂件⽐较⼤,但在运⾏时也就不再需要库⽂件了。动态库与之相反,在编译链接时并没有把库⽂件的代码加⼊到可执⾏⽂件中,⽽是在程序执⾏时由运⾏时链接⽂件加载库,这样可以节省系统的开销。动态库⼀般后缀名为“.so”,如前⾯所述的libc.so.6就是动态库。gcc在编译时默认使⽤动态库。gcc默认生成的二进制程序是动态链接的可以使用file命令验证 如果想静态链接则需要带上-static选项 注无论是动态链接还是静态链接都一定要提供对应的动静态库 理解动静态库以及安装动静态库
1例子1 : 假设你是个刚中考完的准高中生你咨询你录取学校的张三学长你录取的学校怎么上网学长就提前告诉你了网吧的相关信息当你上高中时你每天按时完成学习完成任务4-6点的时候就去学长说的西门上网日复一日都是这样你每天来回翻墙一趟去网吧上网 准高中生时的你相当于还没加载进操作系统的可执行程序学校相当于是操作系统学校的附近网吧就相当于是动态库你要上网的时候需要跑到他那去上网而你这个张三学长相当于是个编译器他告诉你网吧信息就相当于是连接的过程
(2) 例子2 : 没过多久网吧遭到举报倒闭了但是你没有因为网吧而成绩下降只是当作一种闲暇娱乐知道什么时间做什么事因此你要求老爸跟校长申请在宿舍申请安装一台电脑保证适当的闲暇校长鉴于你的优秀成绩同意了 由于网吧倒闭原本也在网吧上网的同学也不能上网这体现了动态库一旦丢失所有程序都无法运行而你在宿舍安装一台电脑此时相当于静态链接此时不依赖网吧也能上网了。因此静态链接就是把我们要访问的方法实现,拷贝到我们自己的可执行程序中!
3⼀般我们的云服务器C/C的静态库并没有安装可以采⽤如下⽅法安装
sudo yum install -y glibc-static # C语言静态库
sudo yum install -y libstdc-static # C静态库
4动静态库/链接比较
1. 动态库一旦动态库缺失所有经过动态链接的程序都无法运行。同时动态库比较节省资源可执行程序体积比较小。
2. 静态库比较浪费资源可执行程序体积比较大。不依赖其他库库丢失也无所谓程序照样能运行。
3. 静态链接虽然因为可执行程序中已经具备所需任何东西而运行速度快但是它浪费空间因为每个可执行程序中对所有需要的目标文件都要有一份副本而且更新比较困难因为因为每当库函数的代码修改了这个时候就需要重新进行编译链接形成可执行程序而动态库因为可以做到被大家所共享方法所以真正的实现永远都是在库中。程序内部只有地址比较节省空间。动态链接其实远⽐静态链接要常⽤得多Linux中默认使用动态链接和动态库。 gcc其他常用选项 • -E只激活预处理,这个不⽣成⽂件,你需要把它重定向到⼀个输出⽂件⾥⾯ • -S编译到汇编语⾔不进⾏汇编和链接 • -c编译到⽬标代码 • -o⽂件输出到⽂件 • -static此选项对⽣成的⽂件采⽤静态链接 • -g⽣成调试信息。GNU调试器可利⽤该信息。 • -shared此选项将尽量使⽤动态库所以⽣成⽂件⽐较⼩但是需要系统由动态库. • -O0 • -O1 • -O2 • -O3编译器的优化选项的4个级别-O0表⽰没有优化,-O1为缺省值-O3优化级别最⾼ • -w不⽣成任何警告信息。 • -Wall⽣成所有警告信息。 下篇博客我们将讲解Linux其他常用工具Makefilegit , gdb。