admin管理员组文章数量:1130349
目录
一.Linux 软件包管理器 yum
1.什么是软件包
2.centos 7中安装形式
3.yum安装好处:
4.yum工具的常用选项
(1)yum list | grep sl
软件包信息介绍:
(2)sudo yum install sl ——安装软件
(3)sudo yum remove sl ——卸载软件
5.yum相关命令
二.Linux编辑器-vim
1.vim是什么?
2.为什么要学vim?
3.vim的三种模式
(1)底行模式下的操作
(2)三种模式转换关系
4.命令模式下的文本批量化操作:
5.批量化操作
(1)批量化注释-视图模式
(2)批量化替换
6.整个代码编译的流程
三.Linux编译器-gcc/g++使用
g++下载命令:sudo yum install -y gcc-c++
编译过程:
gcc test.c -o mytest 把文件编译后放进 mytest中
1.预处理
预处理,编译,汇编,链接
2.头文件和库文件
3.动态/静态链接
下载代码:
四.Linux调试器-gdb调试器 使用
1.gdb binFile 退出: ctrl + d 或 quit 调试命令:
(1)gcc hello.c -o hello_g -g 转为debug版本
(2)gdb hello_g 进行调试
(3)gdb下的list命令显示代码,简称 l
回车默认是继续执行上一条指令,l 0 后 多次回车就会显示全部代码
(4)b 15 - 打断点在第15行(breakpoint), info b- 显示断点信息
(5) d 1——1是第一个断点的断点序号 - 删除第几个断点(delete)
(6)r - 重新从头开始执行程序(run),会直接跳到第一个断点处, c - 从一个断点,之间跳转到另一个断点(continue) 相当于F5
(7)p 变量名 - 显示某变量的值
(8)display 变量名/&变量名 - 持续显示某变量的值/地址(相当于监视)
undisplay 序号 - 删除第几个变量名/&变量名
(9)n - 逐过程=F10(next),s - 逐语句=F11(step)进入函数
(10)until 行号 直接跳到第几行
(11)finish 完成当前函数并跳出
(12)bt——查看调用堆栈
五.Linux项目自动化构建工具-make/Makefifile
1.make与makefile:
2.makefile使用:
make的顺序
3..PHONY 解释
makefile是如何识别我的exe/bin文件是新的还是旧的呢? ?
4.gcc -o $@ $^
5.makeflie中编不过就加上 -std=c99
六.进度条小程序
1.缓冲区
2.回车\r vs换行
3.倒计时程序:
4.进度条(需要usleep)
七.git
1.git,gitee,github介绍
2.git历史
3.如何使用gitee?
(1)git pull同步文件
4.注意事项
b:配置一下你的用户名和邮箱,目的:让文件内容可追溯。
git log可以查看作者信息:
C. gitignore:黑名单
一.Linux 软件包管理器 yum
1.什么是软件包
在 Linux 下安装软件 , 一个通常的办法是下载到程序的源代码 , 并进行编译 , 得到可执行程序 . 但是这样太麻烦了 , 于是有些人把一些常用的软件提前编译好 , 做成软件包 ( 可以理解成 windows 上的安 装程序 ) 放在一个服务器上 , 通过包管理器可以很方便的获取到这个编译好的软件包 , 直接进行安装 . 软件包和软件包管理器 , 就好比 "App" 和 " 应用商店 " 这样的关系 . yum(Yellow dog Updater, Modifified) 是 Linux 下非常常用的一种包管理器 . 主要应用在 Fedora, RedHat, Centos 等发行版上 .2.centos 7中安装形式
1.源码安装
2. rpm包安装
3.yum安装
3.yum安装好处:
1.不用编译源码
2.不用解决软件的依赖关系(此处作为了解)
如果我要知道我要安装什么软件,用yum可以很简单^
我们要安装别人的软件:
1.需要别人先把代码给我编译成为可执行程序
2.需要有人将编好的软件,放在用户能下载的地方(官网,应用软件市场)
Linux也是一样的!
手机安装示例:
yum安装示例:yum类似于手机上的应用市场APP,迅雷这些安装软件
4.yum工具的常用选项
install 表示安装软件包
list 列出所有可供安装的软件包
search 搜索包含指定关键字的软件包
remove 卸载指定的软件包
(1)yum list | grep sl
yum list:把yum包含的软件包都列出来。
yum list | grep sl :把yum包含的软件包中还有sl的软件包都列出来。
[zsh@ecs-78471 lesson6]$ yum list | grep sl
cyrus-sasl-lib.x86_64 2.1.26-23.el7 @anaconda
openssl.x86_64 1:1.0.2k-24.el7_9 @updates
openssl-libs.x86_64 1:1.0.2k-24.el7_9 @updates
python-slip.noarch 0.4.0-4.el7 @anaconda
python-slip-dbus.noarch 0.4.0-4.el7 @anaconda
rsyslog.x86_64 8.24.0-57.el7_9.1 @updates
slang.x86_64 2.2.4-11.el7 @anaconda
NetworkManager-adsl.x86_64 1:1.18.8-2.el7_9 updates
NetworkManager-fortisslvpn.x86_64 1.2.8-7.el7 epel
NetworkManager-fortisslvpn-gnome.x86_64 1.2.8-7.el7 epel
aisleriot.x86_64 1:3.22.2-1.el7 epel
anope-openssl.x86_64 2.0.10-1.el7 epel
apr-util-openssl.x86_64 1.5.2-6.el7 base
autocorr-sl.noarch 1:5.3.6.1-25.el7_9 updates
batik-slideshow.noarch 1.8-0.12.svn1230816.el7 base
bitten-slave.noarch 1:0.6-3.el7 epel
cgnslib.x86_64 3.2.1-4.el7 epel
cgnslib-devel.x86_64 3.2.1-4.el7 epel
cinnamon-translations.noarch 3.6.2-2.el7 epel
csslint.noarch 0.10.0-2.el7 epel
cyrus-sasl.i686 2.1.26-24.el7_9 updates
cyrus-sasl.x86_64 2.1.26-24.el7_9 updates
cyrus-sasl-devel.i686 2.1.26-24.el7_9 updates
cyrus-sasl-devel.x86_64 2.1.26-24.el7_9 updates
cyrus-sasl-gs2.i686 2.1.26-24.el7_9 updates
………………
软件包信息介绍:
lrzsz.x86_64 0.12.20-36.el7 @base lrzsz软件包名称 x86:适用的平台 _64:64位 "el7" 表示的是 centos7 base 表示的是 "软件源" 的名称 注意事项: 软件包名称: 主版本号.次版本号.源程序发行号-软件包的发行号.主机平台.cpu架构. "x86_64" 后缀表示64位系统的安装包, "i686" 后缀表示32位系统安装包. 选择包时要和系统匹配. "el7" 表示操作系统发行版的版本. "el7" 表示的是 centos7/redhat7. "el6" 表示 centos6/redhat6. 最后一列, base 表示的是 "软件源" 的名称, 类似于 "小米应用商店", "华为应用商店" 这样的概念(2)sudo yum install sl ——安装软件
或sudo yum install sl.x86_64 ——安装sl
需要安装的几个软件:
①sudo yum install sl
②sudo yum install -y lrzsz
③sudo yum install -y epel-release(准官方服务器列表)
④sudo yum install -y vim
(3)sudo yum remove sl ——卸载软件
sudo yum remove sl ——卸载sl这个软件
5.yum相关命令
yum makecache命令的功能是将服务器的软件包信息缓存到本地(yum工具在每次安装指定软件包的时候,都会检测源服务器上的软件包信息,为了便捷不用每次都去搜索软件包信息,因此使用 yum makecache将软件包信息缓存到本地,使用 yum clean all 清理老旧的缓存信息。)
yum search命令可以在所有软件包中搜索包含有指定关键字的软件包
yum clean all 命令可以清除缓存中老旧的头文件和软件包
yum -y update:升级所有包同时,也升级软件和系统内核;
yum -y upgrade:只升级所有包,不升级软件和系统内核,软件和内核保持原样。
二.Linux编辑器-vim
1.vim是什么?
是一个编辑器
(1)只能用来写代码
(2)功能强大的多模式的编辑器
2.为什么要学vim?
有时候,需要我们在生成环境下,需要你快速的定位问题,甚至需要你快速的修改代码!
3.vim的三种模式
(其实有好多模式,目前掌握这3种即可) 命令模式(command mode)(或 正常/普通/默认模式) 功能:控制屏幕光标的移动,字符、字或行的删除,移动复制某区段及进入Insert mode下,或者到 last line mode 插 入模式(Insert mode) 只有在Insert mode下,才可以做文字输入,按「ESC」键可回到命令行模式。该模式是我们后面用的最频繁 的编辑模式。 底行模式(last line mode)(或末行模式) 文件保存或退出,也可以进行文件替换,找字符串,列出行号等操作。 在命令模式下,shift+: 即可进入该模式。要查看你的所有模式:打开vim,底行模式直接输入(退出shift+: q,保存并退出shift+: wq) 替换模式:shift+r切换到替换模式,再输入就会直接覆盖已写内容(1)底行模式下的操作
在末行模式下,键入:wq 保存并退出编辑,就算没有修改也会写入,并修改文件时间属性
在末行模式下,键入:q! 强制退出编辑,但并不保存当前修改
在末行模式下,键入:x! 保存并退出编辑,仅当文件有修改时会保存,并修改文件时间属性
在编辑模式下,键入”ESC”键并非直接退出vi编辑,而是用于返回普通模式
(2)三种模式转换关系
命令模式——>插入模式 i:直接进入插入模式 a:从下一个字符进入插入模式 o:从下一行进入插入模式温馨提示:任何模式想回到命令模式无脑esc
4.命令模式下的文本批量化操作:
yy: 复制当前行,nyy——复制包括光标所在行的下面n行内容
p: 粘贴到当前行的后面,np——粘贴n次已复制的内容
dd: 剪切(删除)当前行,ndd——剪切包括光标所在行的下面n行内容
u: 撤销刚刚的操作(相当于vs下的ctrl+z)
ctrl+r: 针对u操作,再次进行撤销(相当于vs下的ctrl+y)
shift+g:(就是G) 光标快速定位到文本末尾
gg: 快速的将光标定位到文本的最开始
n+shift+g: 光标快速定位到文本的第n行
shift+4:(4就是$) 光标快速定位到文本行的末尾
shift+6: (^) 光标快速 定位到文本行的开始 $^:通常叫锚点
w,b: 向后(w),向前(b)在一行以单词为单位进行光标移动
h,j,k,l: h左,j下,k上,l右(光标的移动上下左右移动)
shift + ~ (esc下面) : ~ 大小写快速切换
r+输入字符: 替换光标所在的字符为输入字符, 支持nr——(把包括光标在内的后n个字符替换为n个相同字符)
shift+r:(R) 批量化替换(写一个就覆盖一个原有内容)
x: 删除光标所在的字符,nx——删除包括光标在内的后n个字符
s+AAA+yyy+g vim编辑器中,将字符AAA全部替换成yyy(g比较常用,通常使用g表示全部替换,默认如果不给的话,表示只替换一次)
结论:vim更适合处理大型项目或者文件。
5.批量化操作
(1)批量化注释-视图模式
Esc到命令模式下在下面操作
批量化注释:输入法小写情况下,ctrl+v,hjkl选中区域,切换输入法大写,输入i,再输入 //, 最后esc即可
去注释:命令模式下,小写,ctrl + v,hjkl选中区域(注释区域),注意l向右移动直到选中两列 /,d。相当于删除操作。
(2)批量化替换
6.整个代码编译的流程
vim编辑文件,cat读文件,gcc mytest.c 编译文件,生成a.out文件,./a.out执行文件即可。
三.Linux编译器-gcc/g++使用
g++下载命令:sudo yum install -y gcc-c++
gcc只能编译c语言,g++能编译c语言和c++
编译过程:
gcc test.c -o mytest 把文件编译后放进 mytest中
1.预处理
gcc -E test.c -o test.i
vim test.i //进入test.i
-E:从现在开始给我进行程序的翻译,当预处理完成,就停下来!
-o test.i:把预处理后的结果放进test.i中
如何查看预处理过程:底行模式下输入vs test.i 进入预处理后的结果
预处理,编译,汇编,链接
-E -S -c 可记作 ESc ,文件后缀 .i .s. o 记作 iso
2.头文件和库文件
头文件: 给我们提供了可以使用的方法,所有的开发环境,具有语法提示,本质是通过头文件帮我们搜索的! (比如给我们提供了printf这个方法)
库文件:给我们提供了可以使用的方法的实现,以供链接,形成我们自己的可执行程序!(比如给我们提供了printf这个方法的底层实现)
3.动态/静态链接
动态链接:自己的可执行程序的执行方法直接去库中找方法对应的程序执行(不发生拷贝,只发生关联)
优点:大家共享一个库,可以节省资源
缺点:一旦库缺失,会导致几乎所有的程序失效!
动态库:libxxx.so
静态链接:把库中的方法代码,直接拷贝到自己的可执行程序中去(发生拷贝,exe最终与库无关)
优点:不依赖任何库,程序可以独立执行
缺点:浪费资源
静态库:libxxx.a
gcc. g+ +编译的时候默认的链接模式:动态链接 (若想转为静态链接-需要加上static)
gcc/g++发布软件的默认方式: release (若想转为debug-需要加上 -g选项)
默认 gcc test.c -o mytest 是动态链接,gcc test.c -o mytest -static 是静态链接
更推荐动态链接
默认一般而言,都没有自带静态库|
下载代码:
[root@ecs-78471 ~]# sudo yum install -y glibc-static
[root@ecs-78471 ~]# sudo yum install -y libstdc++-static
四.Linux调试器-gdb调试器 使用
vim:编辑器。gcc/g++:编译器。gdb:调试器-只能调试debug方式发布的软件 必须加-g选项
常用选项
1.gdb binFile 退出: ctrl + d 或 quit 调试命令:
list/l 行号:显示binFile源代码,接着上次的位置往下列,每次列10行。[重要] list/l 函数名:列出某个函数的源代码。 r或run:运行程序。[重要] n 或 next:单条执行。[重要] s或step:进入函数调用[重要] break(b) 行号:在某一行设置断点[重要] break 函数名:在某个函数开头设置断点 info break :查看断点信息。 fifinish:执行到当前函数返回,然后挺下来等待命令 print(p):打印表达式的值,通过表达式可以修改变量的值或者调用函数 p 变量:打印变量值。[重要] set var:修改变量的值 continue(或c):从当前位置开始连续而非单步执行程序[重要] run(或r):从开始连续而非单步执行程序 delete breakpoints:删除所有断点 delete breakpoints n:删除序号为n的断点[重要] disable breakpoints:禁用断点 enable breakpoints:启用断点 info(或i) breakpoints:参看当前设置了哪些断点 display 变量名:跟踪查看一个变量,每次停下来都显示它的值 undisplay:取消对先前设置的那些变量的跟踪 until X行号:跳至X行 breaktrace(或bt):查看各级函数调用及参数 info(i) locals:查看当前栈帧局 部变量的值 quit :退出 gdb(1)gcc hello.c -o hello_g -g 转为debug版本
①linux中默认生成的可执行程序是release版本,无法调试。直接gdb hello(默认形成的可执行程序无法调试)无法调试:
②debug版本比release版本大小要大,多出一些调试信息。
③gcc hello.c -o hello_g -g 中的-g是把release版本转为debug版本,debug版本可以调试。
c99就用:gcc hello.c -o hello_g -g -std=c99
(2)gdb hello_g 进行调试
(3)gdb下的list命令显示代码,简称 l
l 0:从第0行开始显示
回车默认是继续执行上一条指令,l 0 后 多次回车就会显示全部代码
(这个c语言代码是计算1~100相加,相加是5050)
(4)b 15 - 打断点在第15行(breakpoint), info b- 显示断点信息
(5) d 1——1是第一个断点的断点序号 - 删除第几个断点(delete)
(6)r - 重新从头开始执行程序(run),会直接跳到第一个断点处, c - 从一个断点,之间跳转到另一个断点(continue) 相当于F5
(7)p 变量名 - 显示某变量的值
p result:查看result这个变量的值;p &result:查看result这个变量的地址;
(8)display 变量名/&变量名 - 持续显示某变量的值/地址(相当于监视)
undisplay 序号 - 删除第几个变量名/&变量名
(9)n - 逐过程=F10(next),s - 逐语句=F11(step)进入函数
(10)until 行号 直接跳到第几行
(这里的1:res=5050 是之前的display长显示)
(11)finish 完成当前函数并跳出
(12)bt——查看调用堆栈
s进入函数AddToTop,调用堆栈 显示main现在走到17行了,AddToTop函数停在第5行,但未执行第5行
五.Linux项目自动化构建工具-make/Makefifile
1.make与makefile:
make是一个命令
makefile是一个文件
makefile:在当前路径下的一个普通文件
1.依赖关系(我是爸爸的儿子)
2.依赖方法(所以爸爸给我打钱) 达到打钱的目的
目的:形成可执行程序
(1)依赖关系: mytest -> mytest.c
(2)依赖方法: gcc mytest.c -o mytest
2.makefile使用:
touch一个Makefile(大小写都可),编写Makefile
mytest: mytest.c ①行 是依赖关系,mytest是目标文件,mytest.c是依赖文件列表
gcc mytest.c -o mytest ②行 是依赖方法(以tab水平制表符起头, 是tab的意思)
.PHONY:clean ③行 伪文件(下有解释)
clean: ④行 是孤儿式的依赖关系
rm -f mytest ⑤行 是依赖方法
写好后,以后直接make就可以按照依赖关系和方法进行编译,编译出可执行文件mytest。
删除要在Makefile中写伪文件③④⑤行,然后直接make clean就可以删除,如果直接rm可能会导致删除源文件,不能直接rm。
make的顺序
当交换mytest和clean的先后顺序后:make默认只会形成第一个目标文件,执行该依赖关系的依赖方法,如果把clean放在前面,单独make就是执行clean
3..PHONY 解释
.PHONY:makefile语法格式中的一个关键字
clean被. PHONY修饰时,表明:总是被执行的
总是被执行的:无论目标文件是否新旧,照样直接执行依赖关系!
总是不被执行:如果文件已经执行过依赖方法,是新文件,makefile自动识别文件如果是最新文件,就不再执行依赖方法,因为这浪费时间浪费资源
建议把clean写成 总是被执行的 ,不建议把mytest设置成总是被执行,mytest设置成总是不被执行
总是不被执行 的示例:make生成可执行程序mytest一次以后,mytest是最新文件,makefile自动识别文件mytest是最新文件,再次make就不再生成mytest文件了,下面解释makefile如何自动识别的。
makefile是如何识别我的exe/bin文件是新的还是旧的呢? ?
先看补充内容
———————————————————————————————————————补充内容
stat mytest查看文件属性,linux下的文件通常有三个时间:
Access(访问时间):由于访问/修改内容/修改属性这些操作中,访问是最频繁的操作,如果每次访问或cat查看都修改访问时间的数据 效率低,所以linux内核设置的是积累一定的访问次数才会改变一次访问时间。
Modify(文件内容改变的时间):对文件内容修改,就会改变Modify时间
Change(文件属性改变时间):对文件属性修改,就会改变Change时间。对文件内容修改同时也会改变文件属性,则对文件内容修改,也会改变Change时间。
————————————————————————————————————————
现在回答:makefile是如何识别我的exe/bin文件是新的还是旧的呢? ?
答:根据对比源文件和可执行程序的最近修改时间(Modify),评估要不要重新生成。源文件mytest.c 的modify时间在未修改的情况下一定是比 可执行程序mytest 的modify时间早,如果makefile发现源文件mytest.c 的modify时间 早于 可执行程序mytest 的modify时间,说明mytest.c未被修改过,此时 可执行程序mytest 也是最新的,则不会再次生成可执行程序;如果makefile发现源文件mytest.c 的modify时间 后于 可执行程序mytest 的modify时间,说明mytest.c被修改过,此时 可执行程序mytest 是旧文件,则会再次生成可执行程序;
总是被执行的:无论目标文件是否新旧,照样直接执行依赖关系!
4.gcc -o $@ $^
mytest: mytest.c
gcc -o $@ $^ $@ 代表目标文件mytest,$^ 代表依赖文件列表 mytest.c
.PHONY:clean
clean:
rm -f mytest
5.makeflie中编不过就加上 -std=c99
myshell:myshell.c
gcc -o $@ $^ -std=c99 //编不过就加-std=c99
.PHONY:clean
clean:
rm -f myshell
六.进度条小程序
1.缓冲区
示例:
上面代码的现象:有\n时,会立马显示hello 104,然后睡眠2秒结束;无\n时,会先睡眠2秒,然后显示hello 104结束;无\n时,执行顺序依然是从上到下,printf hello 104 先执行了,只是hello 104 没立即显示在屏幕上。因为无\n时在睡眠2秒期间,hello 104 先存在了缓冲区中,所以没立即显示在屏幕上。为什么呢?
缓冲区的理解:就是一段内存空间。
刷新策略:行刷新。 解释:程序中的打印数据先存到缓冲区中,等暂满一行就立马将内存中的空间显示出来,怎么定义一行内容呢?规定:“hello world\n” \n 之前包含\n称为 一行内容
所以结论就是:“hello world\n”是一行内容,会直接显示;“hello world”不是一行内容,会先存到缓冲区中,sleep完才显示。
不想用\n,就想让你的数据立马刷新!用flush(stdout)
2.回车\r vs换行
回车(\r):将光标回到当前行的最开始
换行:新起一行
\n:回车\r+换行
\n会刷新缓冲区,\r不会刷新缓冲区。
3.倒计时程序:
sleep的头文件 #include <unistd. h>
如果不写 fflush ,那么\r不会刷新缓冲区,屏幕上不会打印任何东西。
fflush(stdout) ; 作用是立即刷新缓冲区。
4.进度条(需要usleep)
usleep:1s=1000ms=100 0000 微秒 microsecond 例如:usleep(10000) 就是休眠10ms。
usleep的头文件也是 #include <unistd. h>
进度条总代码:
printf ("加载中: \033[46;34m%-100s\033 [0m[%d%%] [%c]\r", bar, cnt, lable[cnt%4]); 解释:
蓝色部分是进度条,橘黄色部分是加载值和转动光标,灰色是回车,其余部分都是颜色输出(格式如下)
七.git
1.git,gitee,github介绍
git是linux之父 雷纳斯托瓦兹 所写
什么是git:git是一个软件工具,版本控制器(类似于百度云盘):版本控制程序+网络(因为本地存储有丢失风险,所以网络 )
gitee,github基于git工具,搭建起来的网站
2.git历史
写git的作者和写linux操作系统的作者都是雷纳斯托瓦兹。
3.如何使用gitee?
1. 建立gitee仓库
2. git clone
3. git add(git add *是添加所有文件,git add .是添加当前目录下未添加的文件)
4. git commit -m”写好你的日志”
5. git push
建立仓库
(1)git pull同步文件
如果在网页的gitee中修改了已提交文件的内容,远端和本地内容不相同,则下一次再提交新文件会出错,需要先把以前的文件同步,git pull同步文件
4.注意事项
a. sudo yum install -y git 下载git
b.第一次使用git的时候,可能会让你配置一下你的用户名和邮箱
C. gitignore:黑名单
b:配置一下你的用户名和邮箱,目的:让文件内容可追溯。
别人看不懂你的文件时,方便别人联系你。
git log可以查看作者信息:
C. gitignore:黑名单
gitignore中所写的带后缀文件不得提交,还可以自己写上哪些后缀文件是不可提交上去的
*代表所有文件,*.x意思是所有后缀.x 的文件不可提交
目录
一.Linux 软件包管理器 yum
1.什么是软件包
2.centos 7中安装形式
3.yum安装好处:
4.yum工具的常用选项
(1)yum list | grep sl
软件包信息介绍:
(2)sudo yum install sl ——安装软件
(3)sudo yum remove sl ——卸载软件
5.yum相关命令
二.Linux编辑器-vim
1.vim是什么?
2.为什么要学vim?
3.vim的三种模式
(1)底行模式下的操作
(2)三种模式转换关系
4.命令模式下的文本批量化操作:
5.批量化操作
(1)批量化注释-视图模式
(2)批量化替换
6.整个代码编译的流程
三.Linux编译器-gcc/g++使用
g++下载命令:sudo yum install -y gcc-c++
编译过程:
gcc test.c -o mytest 把文件编译后放进 mytest中
1.预处理
预处理,编译,汇编,链接
2.头文件和库文件
3.动态/静态链接
下载代码:
四.Linux调试器-gdb调试器 使用
1.gdb binFile 退出: ctrl + d 或 quit 调试命令:
(1)gcc hello.c -o hello_g -g 转为debug版本
(2)gdb hello_g 进行调试
(3)gdb下的list命令显示代码,简称 l
回车默认是继续执行上一条指令,l 0 后 多次回车就会显示全部代码
(4)b 15 - 打断点在第15行(breakpoint), info b- 显示断点信息
(5) d 1——1是第一个断点的断点序号 - 删除第几个断点(delete)
(6)r - 重新从头开始执行程序(run),会直接跳到第一个断点处, c - 从一个断点,之间跳转到另一个断点(continue) 相当于F5
(7)p 变量名 - 显示某变量的值
(8)display 变量名/&变量名 - 持续显示某变量的值/地址(相当于监视)
undisplay 序号 - 删除第几个变量名/&变量名
(9)n - 逐过程=F10(next),s - 逐语句=F11(step)进入函数
(10)until 行号 直接跳到第几行
(11)finish 完成当前函数并跳出
(12)bt——查看调用堆栈
五.Linux项目自动化构建工具-make/Makefifile
1.make与makefile:
2.makefile使用:
make的顺序
3..PHONY 解释
makefile是如何识别我的exe/bin文件是新的还是旧的呢? ?
4.gcc -o $@ $^
5.makeflie中编不过就加上 -std=c99
六.进度条小程序
1.缓冲区
2.回车\r vs换行
3.倒计时程序:
4.进度条(需要usleep)
七.git
1.git,gitee,github介绍
2.git历史
3.如何使用gitee?
(1)git pull同步文件
4.注意事项
b:配置一下你的用户名和邮箱,目的:让文件内容可追溯。
git log可以查看作者信息:
C. gitignore:黑名单
一.Linux 软件包管理器 yum
1.什么是软件包
在 Linux 下安装软件 , 一个通常的办法是下载到程序的源代码 , 并进行编译 , 得到可执行程序 . 但是这样太麻烦了 , 于是有些人把一些常用的软件提前编译好 , 做成软件包 ( 可以理解成 windows 上的安 装程序 ) 放在一个服务器上 , 通过包管理器可以很方便的获取到这个编译好的软件包 , 直接进行安装 . 软件包和软件包管理器 , 就好比 "App" 和 " 应用商店 " 这样的关系 . yum(Yellow dog Updater, Modifified) 是 Linux 下非常常用的一种包管理器 . 主要应用在 Fedora, RedHat, Centos 等发行版上 .2.centos 7中安装形式
1.源码安装
2. rpm包安装
3.yum安装
3.yum安装好处:
1.不用编译源码
2.不用解决软件的依赖关系(此处作为了解)
如果我要知道我要安装什么软件,用yum可以很简单^
我们要安装别人的软件:
1.需要别人先把代码给我编译成为可执行程序
2.需要有人将编好的软件,放在用户能下载的地方(官网,应用软件市场)
Linux也是一样的!
手机安装示例:
yum安装示例:yum类似于手机上的应用市场APP,迅雷这些安装软件
4.yum工具的常用选项
install 表示安装软件包
list 列出所有可供安装的软件包
search 搜索包含指定关键字的软件包
remove 卸载指定的软件包
(1)yum list | grep sl
yum list:把yum包含的软件包都列出来。
yum list | grep sl :把yum包含的软件包中还有sl的软件包都列出来。
[zsh@ecs-78471 lesson6]$ yum list | grep sl
cyrus-sasl-lib.x86_64 2.1.26-23.el7 @anaconda
openssl.x86_64 1:1.0.2k-24.el7_9 @updates
openssl-libs.x86_64 1:1.0.2k-24.el7_9 @updates
python-slip.noarch 0.4.0-4.el7 @anaconda
python-slip-dbus.noarch 0.4.0-4.el7 @anaconda
rsyslog.x86_64 8.24.0-57.el7_9.1 @updates
slang.x86_64 2.2.4-11.el7 @anaconda
NetworkManager-adsl.x86_64 1:1.18.8-2.el7_9 updates
NetworkManager-fortisslvpn.x86_64 1.2.8-7.el7 epel
NetworkManager-fortisslvpn-gnome.x86_64 1.2.8-7.el7 epel
aisleriot.x86_64 1:3.22.2-1.el7 epel
anope-openssl.x86_64 2.0.10-1.el7 epel
apr-util-openssl.x86_64 1.5.2-6.el7 base
autocorr-sl.noarch 1:5.3.6.1-25.el7_9 updates
batik-slideshow.noarch 1.8-0.12.svn1230816.el7 base
bitten-slave.noarch 1:0.6-3.el7 epel
cgnslib.x86_64 3.2.1-4.el7 epel
cgnslib-devel.x86_64 3.2.1-4.el7 epel
cinnamon-translations.noarch 3.6.2-2.el7 epel
csslint.noarch 0.10.0-2.el7 epel
cyrus-sasl.i686 2.1.26-24.el7_9 updates
cyrus-sasl.x86_64 2.1.26-24.el7_9 updates
cyrus-sasl-devel.i686 2.1.26-24.el7_9 updates
cyrus-sasl-devel.x86_64 2.1.26-24.el7_9 updates
cyrus-sasl-gs2.i686 2.1.26-24.el7_9 updates
………………
软件包信息介绍:
lrzsz.x86_64 0.12.20-36.el7 @base lrzsz软件包名称 x86:适用的平台 _64:64位 "el7" 表示的是 centos7 base 表示的是 "软件源" 的名称 注意事项: 软件包名称: 主版本号.次版本号.源程序发行号-软件包的发行号.主机平台.cpu架构. "x86_64" 后缀表示64位系统的安装包, "i686" 后缀表示32位系统安装包. 选择包时要和系统匹配. "el7" 表示操作系统发行版的版本. "el7" 表示的是 centos7/redhat7. "el6" 表示 centos6/redhat6. 最后一列, base 表示的是 "软件源" 的名称, 类似于 "小米应用商店", "华为应用商店" 这样的概念(2)sudo yum install sl ——安装软件
或sudo yum install sl.x86_64 ——安装sl
需要安装的几个软件:
①sudo yum install sl
②sudo yum install -y lrzsz
③sudo yum install -y epel-release(准官方服务器列表)
④sudo yum install -y vim
(3)sudo yum remove sl ——卸载软件
sudo yum remove sl ——卸载sl这个软件
5.yum相关命令
yum makecache命令的功能是将服务器的软件包信息缓存到本地(yum工具在每次安装指定软件包的时候,都会检测源服务器上的软件包信息,为了便捷不用每次都去搜索软件包信息,因此使用 yum makecache将软件包信息缓存到本地,使用 yum clean all 清理老旧的缓存信息。)
yum search命令可以在所有软件包中搜索包含有指定关键字的软件包
yum clean all 命令可以清除缓存中老旧的头文件和软件包
yum -y update:升级所有包同时,也升级软件和系统内核;
yum -y upgrade:只升级所有包,不升级软件和系统内核,软件和内核保持原样。
二.Linux编辑器-vim
1.vim是什么?
是一个编辑器
(1)只能用来写代码
(2)功能强大的多模式的编辑器
2.为什么要学vim?
有时候,需要我们在生成环境下,需要你快速的定位问题,甚至需要你快速的修改代码!
3.vim的三种模式
(其实有好多模式,目前掌握这3种即可) 命令模式(command mode)(或 正常/普通/默认模式) 功能:控制屏幕光标的移动,字符、字或行的删除,移动复制某区段及进入Insert mode下,或者到 last line mode 插 入模式(Insert mode) 只有在Insert mode下,才可以做文字输入,按「ESC」键可回到命令行模式。该模式是我们后面用的最频繁 的编辑模式。 底行模式(last line mode)(或末行模式) 文件保存或退出,也可以进行文件替换,找字符串,列出行号等操作。 在命令模式下,shift+: 即可进入该模式。要查看你的所有模式:打开vim,底行模式直接输入(退出shift+: q,保存并退出shift+: wq) 替换模式:shift+r切换到替换模式,再输入就会直接覆盖已写内容(1)底行模式下的操作
在末行模式下,键入:wq 保存并退出编辑,就算没有修改也会写入,并修改文件时间属性
在末行模式下,键入:q! 强制退出编辑,但并不保存当前修改
在末行模式下,键入:x! 保存并退出编辑,仅当文件有修改时会保存,并修改文件时间属性
在编辑模式下,键入”ESC”键并非直接退出vi编辑,而是用于返回普通模式
(2)三种模式转换关系
命令模式——>插入模式 i:直接进入插入模式 a:从下一个字符进入插入模式 o:从下一行进入插入模式温馨提示:任何模式想回到命令模式无脑esc
4.命令模式下的文本批量化操作:
yy: 复制当前行,nyy——复制包括光标所在行的下面n行内容
p: 粘贴到当前行的后面,np——粘贴n次已复制的内容
dd: 剪切(删除)当前行,ndd——剪切包括光标所在行的下面n行内容
u: 撤销刚刚的操作(相当于vs下的ctrl+z)
ctrl+r: 针对u操作,再次进行撤销(相当于vs下的ctrl+y)
shift+g:(就是G) 光标快速定位到文本末尾
gg: 快速的将光标定位到文本的最开始
n+shift+g: 光标快速定位到文本的第n行
shift+4:(4就是$) 光标快速定位到文本行的末尾
shift+6: (^) 光标快速 定位到文本行的开始 $^:通常叫锚点
w,b: 向后(w),向前(b)在一行以单词为单位进行光标移动
h,j,k,l: h左,j下,k上,l右(光标的移动上下左右移动)
shift + ~ (esc下面) : ~ 大小写快速切换
r+输入字符: 替换光标所在的字符为输入字符, 支持nr——(把包括光标在内的后n个字符替换为n个相同字符)
shift+r:(R) 批量化替换(写一个就覆盖一个原有内容)
x: 删除光标所在的字符,nx——删除包括光标在内的后n个字符
s+AAA+yyy+g vim编辑器中,将字符AAA全部替换成yyy(g比较常用,通常使用g表示全部替换,默认如果不给的话,表示只替换一次)
结论:vim更适合处理大型项目或者文件。
5.批量化操作
(1)批量化注释-视图模式
Esc到命令模式下在下面操作
批量化注释:输入法小写情况下,ctrl+v,hjkl选中区域,切换输入法大写,输入i,再输入 //, 最后esc即可
去注释:命令模式下,小写,ctrl + v,hjkl选中区域(注释区域),注意l向右移动直到选中两列 /,d。相当于删除操作。
(2)批量化替换
6.整个代码编译的流程
vim编辑文件,cat读文件,gcc mytest.c 编译文件,生成a.out文件,./a.out执行文件即可。
三.Linux编译器-gcc/g++使用
g++下载命令:sudo yum install -y gcc-c++
gcc只能编译c语言,g++能编译c语言和c++
编译过程:
gcc test.c -o mytest 把文件编译后放进 mytest中
1.预处理
gcc -E test.c -o test.i
vim test.i //进入test.i
-E:从现在开始给我进行程序的翻译,当预处理完成,就停下来!
-o test.i:把预处理后的结果放进test.i中
如何查看预处理过程:底行模式下输入vs test.i 进入预处理后的结果
预处理,编译,汇编,链接
-E -S -c 可记作 ESc ,文件后缀 .i .s. o 记作 iso
2.头文件和库文件
头文件: 给我们提供了可以使用的方法,所有的开发环境,具有语法提示,本质是通过头文件帮我们搜索的! (比如给我们提供了printf这个方法)
库文件:给我们提供了可以使用的方法的实现,以供链接,形成我们自己的可执行程序!(比如给我们提供了printf这个方法的底层实现)
3.动态/静态链接
动态链接:自己的可执行程序的执行方法直接去库中找方法对应的程序执行(不发生拷贝,只发生关联)
优点:大家共享一个库,可以节省资源
缺点:一旦库缺失,会导致几乎所有的程序失效!
动态库:libxxx.so
静态链接:把库中的方法代码,直接拷贝到自己的可执行程序中去(发生拷贝,exe最终与库无关)
优点:不依赖任何库,程序可以独立执行
缺点:浪费资源
静态库:libxxx.a
gcc. g+ +编译的时候默认的链接模式:动态链接 (若想转为静态链接-需要加上static)
gcc/g++发布软件的默认方式: release (若想转为debug-需要加上 -g选项)
默认 gcc test.c -o mytest 是动态链接,gcc test.c -o mytest -static 是静态链接
更推荐动态链接
默认一般而言,都没有自带静态库|
下载代码:
[root@ecs-78471 ~]# sudo yum install -y glibc-static
[root@ecs-78471 ~]# sudo yum install -y libstdc++-static
四.Linux调试器-gdb调试器 使用
vim:编辑器。gcc/g++:编译器。gdb:调试器-只能调试debug方式发布的软件 必须加-g选项
常用选项
1.gdb binFile 退出: ctrl + d 或 quit 调试命令:
list/l 行号:显示binFile源代码,接着上次的位置往下列,每次列10行。[重要] list/l 函数名:列出某个函数的源代码。 r或run:运行程序。[重要] n 或 next:单条执行。[重要] s或step:进入函数调用[重要] break(b) 行号:在某一行设置断点[重要] break 函数名:在某个函数开头设置断点 info break :查看断点信息。 fifinish:执行到当前函数返回,然后挺下来等待命令 print(p):打印表达式的值,通过表达式可以修改变量的值或者调用函数 p 变量:打印变量值。[重要] set var:修改变量的值 continue(或c):从当前位置开始连续而非单步执行程序[重要] run(或r):从开始连续而非单步执行程序 delete breakpoints:删除所有断点 delete breakpoints n:删除序号为n的断点[重要] disable breakpoints:禁用断点 enable breakpoints:启用断点 info(或i) breakpoints:参看当前设置了哪些断点 display 变量名:跟踪查看一个变量,每次停下来都显示它的值 undisplay:取消对先前设置的那些变量的跟踪 until X行号:跳至X行 breaktrace(或bt):查看各级函数调用及参数 info(i) locals:查看当前栈帧局 部变量的值 quit :退出 gdb(1)gcc hello.c -o hello_g -g 转为debug版本
①linux中默认生成的可执行程序是release版本,无法调试。直接gdb hello(默认形成的可执行程序无法调试)无法调试:
②debug版本比release版本大小要大,多出一些调试信息。
③gcc hello.c -o hello_g -g 中的-g是把release版本转为debug版本,debug版本可以调试。
c99就用:gcc hello.c -o hello_g -g -std=c99
(2)gdb hello_g 进行调试
(3)gdb下的list命令显示代码,简称 l
l 0:从第0行开始显示
回车默认是继续执行上一条指令,l 0 后 多次回车就会显示全部代码
(这个c语言代码是计算1~100相加,相加是5050)
(4)b 15 - 打断点在第15行(breakpoint), info b- 显示断点信息
(5) d 1——1是第一个断点的断点序号 - 删除第几个断点(delete)
(6)r - 重新从头开始执行程序(run),会直接跳到第一个断点处, c - 从一个断点,之间跳转到另一个断点(continue) 相当于F5
(7)p 变量名 - 显示某变量的值
p result:查看result这个变量的值;p &result:查看result这个变量的地址;
(8)display 变量名/&变量名 - 持续显示某变量的值/地址(相当于监视)
undisplay 序号 - 删除第几个变量名/&变量名
(9)n - 逐过程=F10(next),s - 逐语句=F11(step)进入函数
(10)until 行号 直接跳到第几行
(这里的1:res=5050 是之前的display长显示)
(11)finish 完成当前函数并跳出
(12)bt——查看调用堆栈
s进入函数AddToTop,调用堆栈 显示main现在走到17行了,AddToTop函数停在第5行,但未执行第5行
五.Linux项目自动化构建工具-make/Makefifile
1.make与makefile:
make是一个命令
makefile是一个文件
makefile:在当前路径下的一个普通文件
1.依赖关系(我是爸爸的儿子)
2.依赖方法(所以爸爸给我打钱) 达到打钱的目的
目的:形成可执行程序
(1)依赖关系: mytest -> mytest.c
(2)依赖方法: gcc mytest.c -o mytest
2.makefile使用:
touch一个Makefile(大小写都可),编写Makefile
mytest: mytest.c ①行 是依赖关系,mytest是目标文件,mytest.c是依赖文件列表
gcc mytest.c -o mytest ②行 是依赖方法(以tab水平制表符起头, 是tab的意思)
.PHONY:clean ③行 伪文件(下有解释)
clean: ④行 是孤儿式的依赖关系
rm -f mytest ⑤行 是依赖方法
写好后,以后直接make就可以按照依赖关系和方法进行编译,编译出可执行文件mytest。
删除要在Makefile中写伪文件③④⑤行,然后直接make clean就可以删除,如果直接rm可能会导致删除源文件,不能直接rm。
make的顺序
当交换mytest和clean的先后顺序后:make默认只会形成第一个目标文件,执行该依赖关系的依赖方法,如果把clean放在前面,单独make就是执行clean
3..PHONY 解释
.PHONY:makefile语法格式中的一个关键字
clean被. PHONY修饰时,表明:总是被执行的
总是被执行的:无论目标文件是否新旧,照样直接执行依赖关系!
总是不被执行:如果文件已经执行过依赖方法,是新文件,makefile自动识别文件如果是最新文件,就不再执行依赖方法,因为这浪费时间浪费资源
建议把clean写成 总是被执行的 ,不建议把mytest设置成总是被执行,mytest设置成总是不被执行
总是不被执行 的示例:make生成可执行程序mytest一次以后,mytest是最新文件,makefile自动识别文件mytest是最新文件,再次make就不再生成mytest文件了,下面解释makefile如何自动识别的。
makefile是如何识别我的exe/bin文件是新的还是旧的呢? ?
先看补充内容
———————————————————————————————————————补充内容
stat mytest查看文件属性,linux下的文件通常有三个时间:
Access(访问时间):由于访问/修改内容/修改属性这些操作中,访问是最频繁的操作,如果每次访问或cat查看都修改访问时间的数据 效率低,所以linux内核设置的是积累一定的访问次数才会改变一次访问时间。
Modify(文件内容改变的时间):对文件内容修改,就会改变Modify时间
Change(文件属性改变时间):对文件属性修改,就会改变Change时间。对文件内容修改同时也会改变文件属性,则对文件内容修改,也会改变Change时间。
————————————————————————————————————————
现在回答:makefile是如何识别我的exe/bin文件是新的还是旧的呢? ?
答:根据对比源文件和可执行程序的最近修改时间(Modify),评估要不要重新生成。源文件mytest.c 的modify时间在未修改的情况下一定是比 可执行程序mytest 的modify时间早,如果makefile发现源文件mytest.c 的modify时间 早于 可执行程序mytest 的modify时间,说明mytest.c未被修改过,此时 可执行程序mytest 也是最新的,则不会再次生成可执行程序;如果makefile发现源文件mytest.c 的modify时间 后于 可执行程序mytest 的modify时间,说明mytest.c被修改过,此时 可执行程序mytest 是旧文件,则会再次生成可执行程序;
总是被执行的:无论目标文件是否新旧,照样直接执行依赖关系!
4.gcc -o $@ $^
mytest: mytest.c
gcc -o $@ $^ $@ 代表目标文件mytest,$^ 代表依赖文件列表 mytest.c
.PHONY:clean
clean:
rm -f mytest
5.makeflie中编不过就加上 -std=c99
myshell:myshell.c
gcc -o $@ $^ -std=c99 //编不过就加-std=c99
.PHONY:clean
clean:
rm -f myshell
六.进度条小程序
1.缓冲区
示例:
上面代码的现象:有\n时,会立马显示hello 104,然后睡眠2秒结束;无\n时,会先睡眠2秒,然后显示hello 104结束;无\n时,执行顺序依然是从上到下,printf hello 104 先执行了,只是hello 104 没立即显示在屏幕上。因为无\n时在睡眠2秒期间,hello 104 先存在了缓冲区中,所以没立即显示在屏幕上。为什么呢?
缓冲区的理解:就是一段内存空间。
刷新策略:行刷新。 解释:程序中的打印数据先存到缓冲区中,等暂满一行就立马将内存中的空间显示出来,怎么定义一行内容呢?规定:“hello world\n” \n 之前包含\n称为 一行内容
所以结论就是:“hello world\n”是一行内容,会直接显示;“hello world”不是一行内容,会先存到缓冲区中,sleep完才显示。
不想用\n,就想让你的数据立马刷新!用flush(stdout)
2.回车\r vs换行
回车(\r):将光标回到当前行的最开始
换行:新起一行
\n:回车\r+换行
\n会刷新缓冲区,\r不会刷新缓冲区。
3.倒计时程序:
sleep的头文件 #include <unistd. h>
如果不写 fflush ,那么\r不会刷新缓冲区,屏幕上不会打印任何东西。
fflush(stdout) ; 作用是立即刷新缓冲区。
4.进度条(需要usleep)
usleep:1s=1000ms=100 0000 微秒 microsecond 例如:usleep(10000) 就是休眠10ms。
usleep的头文件也是 #include <unistd. h>
进度条总代码:
printf ("加载中: \033[46;34m%-100s\033 [0m[%d%%] [%c]\r", bar, cnt, lable[cnt%4]); 解释:
蓝色部分是进度条,橘黄色部分是加载值和转动光标,灰色是回车,其余部分都是颜色输出(格式如下)
七.git
1.git,gitee,github介绍
git是linux之父 雷纳斯托瓦兹 所写
什么是git:git是一个软件工具,版本控制器(类似于百度云盘):版本控制程序+网络(因为本地存储有丢失风险,所以网络 )
gitee,github基于git工具,搭建起来的网站
2.git历史
写git的作者和写linux操作系统的作者都是雷纳斯托瓦兹。
3.如何使用gitee?
1. 建立gitee仓库
2. git clone
3. git add(git add *是添加所有文件,git add .是添加当前目录下未添加的文件)
4. git commit -m”写好你的日志”
5. git push
建立仓库
(1)git pull同步文件
如果在网页的gitee中修改了已提交文件的内容,远端和本地内容不相同,则下一次再提交新文件会出错,需要先把以前的文件同步,git pull同步文件
4.注意事项
a. sudo yum install -y git 下载git
b.第一次使用git的时候,可能会让你配置一下你的用户名和邮箱
C. gitignore:黑名单
b:配置一下你的用户名和邮箱,目的:让文件内容可追溯。
别人看不懂你的文件时,方便别人联系你。
git log可以查看作者信息:
C. gitignore:黑名单
gitignore中所写的带后缀文件不得提交,还可以自己写上哪些后缀文件是不可提交上去的
*代表所有文件,*.x意思是所有后缀.x 的文件不可提交
版权声明:本文标题:linux篇【3】:Linux 环境基础开发工具yum,vim,gcc,makefile,git 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://it.en369.cn/jiaocheng/1754949780a2745910.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。


发表评论