Linux基本工具

news2024/11/16 13:35:12

文章目录

  • Linux软件包管理器yum
    • 关于rzsz
    • 安装与卸载示例
    • 注意事项
  • Linux开发工具vim
  • vim基本操作总结
    • 插入模式:
    • 移动光标快捷键
    • 删除文字
    • 复制
    • 替换
    • 撤销上一次操作
    • 更改
    • 跳至指定的行
    • 多文件操作
    • 底行模式
  • sudo
  • Linux编译器gcc/g++的使用
    • 预处理
    • 编译
    • 汇编
    • 链接
    • 生成可执行文件
    • 总结
    • 详谈链接
    • debug和release
  • Linux项目自动化构建工具make/Makefile

Linux软件包管理器yum

软件包和软件包管理器分别是什么?为了更好地理解他们之间的关系,我们可以拿手机上的应用来阐述,软件包就相当于手机上的各种APP,而软件包管理器就相当于与应用商店,是用来下载他们的地方,Linux中的yum就是扮演着应用商店这个角色。

关于rzsz

作用:这个工具用于Windows机器和远端Linux机器通过Xshell传输软件
安装完毕之后也可以通过拖拽到Xshell界面的方式将Windows文件传输到Linux机器中
在这里插入图片描述
rz:接收文件
sz:将Linux中文件保存至本地

安装与卸载示例

以上面的rzsz工具为例,在安装软件之前要保证网络的畅通
通过yum list指令可以罗列出所有的软件包,因为软件包太多我们不容易去找,我们可以通过管道的方式去删选出特定的安装包,例如
通过yum list | grep lrzsz指令可以筛选出对应的安装包
筛选结果如下
在这里插入图片描述

安装软件由于需要向系统目录中写入内容,一般需要sudo或者切换到root账号下,才能完成
在这里插入图片描述

卸载也是通过一条指令来完成,如下:
在这里插入图片描述

注意事项

在这里插入图片描述

软件包名称:主版本号,次版本号,源程序发行号-软件包的发行号,平台主机,CPU框架
“x86_64”后缀表示64位系统的安装包,“i686”后缀表示32位系统的安装包,选择安装包时要和系统匹配
“el7”表示操作系统发行版的版本,“el7”表示的是centos7/redhat7,“el6”表示的是centos6/redhat6
最后一列OS表示的是“软件源”的名称,类似于华为应用商店,小米应用商店等

Linux开发工具vim

vim是一个多模式的编辑器,分别是命令模式,插入模式,底行模式各模式的功能区分如下:
正常/普通/命令模式(Normal mode):
控制光标的移动,字符、字或行的删除,移动复制某区段及进入insert mode下,或者到last line mode
插入模式(insert mode):
只有在insert mode下,才可以做文字输入,按[Esc]键可回到命令行模式。该模式被频繁使用。
末行模式(lsat line mode):
文件保存或退出,也可进行文件替换,找字符串,列出行号等操作。在命令模式下shift+:即可进入该模式。
要查看你所有的模式:打开vim,底行输入:help vim-modes即可

vim基本操作总结

插入模式:

按[i]切换进入插入模式,按“i”进入插入模式后是从光标当前位置开始输入文件
按[a]进入插入模式之后,是从目前光标所在位置的下一个位置开始输入文字
按[o]进入插入模式之后,是从当前光标所在行后插入新的一行,然后从行首开始输入文字
按[O]进入插入模式之后,是从当前光标所在行前插入新的一行,然后从行首开始输入文字

移动光标快捷键

vim可以直接使用键盘上的上下左右键来进行光标的移动,但正规的vim是通过小写字母[h],
[j], [k], [l],分别控制光标向左,下,上,右进行移动
按[gg]回到文本开始
按[G] = 按shift + g移动到文本的末尾
按[$]移动到所在行的行尾
按[^]移动到所在行的行首
按[w]光标跳到下个字词的开头
按[e]光标跳到下个字词的字尾
按[b]光标回到上个字词的开头
按[#l]光标从当前位置在当行向后移动#个字符
按Ctrl + d屏幕向前移动半页
按Ctrl + f屏幕向前移动一页
按Ctrl + u屏幕向后移动半页
按Ctrl + b屏幕向后移动一页

删除文字

[x]:每按一次,删除光标所在位置的一个字符
[#x]:例如:[5x]表示删除光标所在位置后面的5个字符(包括自己在内)
[X]:大写X,每按一次,表示删除光标所在位置的前一个位置的一个字符
[#X]:例如[6X]表示删除光标所在位置前面的6个字符
[dd]:表示删除光标所在行
[#dd]:从光标所在行开始删除#行

复制

[yw]:将光标所在之处到字尾的字符复制到缓冲区中
注意是到字尾不是到行尾
[#yw]:复制#个字到缓冲区
[yy]:复制光标所在行到缓冲区
[#yy]:例如[6yy]表示复制光标所在行到向下数的6行文字(包括光标所在行)
[p]:将缓冲区内的字符粘贴到光标所在的位置
注意:所有与‘y’有关的复制命令都必须与‘p’配合才能完成复制与粘贴功能

替换

[r]:替换光标所在位置处的字符
[R]:替换光标所到之处的字符,直到按下[Esc]键为止

撤销上一次操作

[u]:撤销上一次操作,按n次可撤销前n次操作
[Ctrl + r]:撤销的恢复

更改

[cw]更改光标所在处的字到字尾处
[c#w]:例如[c3w]表示更改3个字

跳至指定的行

列出光标所在行的行号Ctrl + g
[#G]:例如[10G]表示移动光标至文章第10行的行首

多文件操作

在底行模式中输入vs加上文件名就会以多窗口形式去打开对应的文件
如图在底行中输入指令vs code1.cpp后结果如下:
在这里插入图片描述
可以通过Ctrl + ww进行窗口光标切换
并且如果code.cpp这个文件并不存在,也可以被打开,在写入文本之后如果被保存了,那么这个文件就会被自动创建。

底行模式

[set nu]:列出行号
[set nonu]:取消行号
[w]:保存文件
[q]:退出vim
[wq]:退出并保存
如果无法退出可以在[q]后面跟一个[!]进行强制退出

sudo

并非所有人都能执行sudo,只有规范到/etc/sudoers内的用户才能够执行sudo这个命令
普通用户默认情况下没有能执行sudo命令的权限
在这里插入图片描述
若想要让普通用户用sudo执行属于root的权限命令,则要先让root去修改/etc/sudoers
切换到root账号打开/etc/sudoers去修改
在这里插入图片描述

在这里插入图片描述
把Linux3这个用户添加到白名单中,在底行模式中wq!保存并退出
在这里插入图片描述
返回到普通用户发现此时拥有sudo命令权限了
注意在普通用户第一次执行sudo命令时输入的密码就是这个普通用户的密码
要想去掉这个普通用户的sudo权限时,只需登录root账号在/etc/sudoers文件中把该用户删除即可

Linux编译器gcc/g++的使用

gcc用于编译C语言,g++用于编译C++,当然也可以用于编译C语言
源文件在由编译器生成可执行文件时,编译要经历四个过程
1.预处理
2.编译
3.汇编
4.链接
我们接下来一次观察这四个阶段生成的文件有什么变化

预处理

预处理阶段完成宏替换,去注释,头文件展开,条件编译等操作
如果要只让文件只完成到预处理阶段就停下来,则要进行一下操作
在这里插入图片描述
上述操作:先创建文件test.c,然后使用gcc编译器生成文件test.i,这里解释一下 -E 选项的作用,-E就是告诉编译器从现在进行程序的翻译,将预处理工作完成之后,就停下来,不要往后面走了
如果不加-o,则直接将生成的预处理文件内容打印出来
在这里插入图片描述
如果加上-o自定义命名生成的文件名称,-o后面紧跟要生成的文件名称
则创建对应的-o文件并不打印
在这里插入图片描述
在底行模式中输入vs test.i对比两个文件

在这里插入图片描述
此时我们可以看到生成的test.i文件中包含被展开的头文件,并且完成了宏替换,条件编译,去注释操作

编译

编译的结果是生成对应的汇编指令,以及完成语法分析,词法分析,语义分析,符号汇总等工作
在这里插入图片描述
-S的作用是从现在开始进行程序的翻译,将编译工作完成就停下来
对比结果如下:
在这里插入图片描述
可以看到此时程序完成了编译生成了对应的汇编指令

汇编

汇编的作用是生成将汇编指令生成机器可识别的二进制代码
在这里插入图片描述
-c作用是从现在开始进行程序的翻译,将汇编工作完成之后就停下来

在这里插入图片描述
生成的test.o称为可重定位目标二进制文件,简称目标文件,在Windows中生成的格式是.obj文件,注意此文件此时不可以独立执行,虽然已经是二进制了,但需要经过链接才能执行
在这里插入图片描述
可以看到即使我们给test.o加上可执行权限,它也是不可以被执行的
这点需要注意在Linux中一个文件即使具有可执行权限但是它没有可执行能力它也是不可以被执行的,具有权限和具有能力是不同的

链接

在这里插入图片描述
这一步我们叫做链接过程,作用是将可重定位二进制文件和库进行链接形成可执行程序

生成可执行文件

如果在直接生成可执行文件时,不加-o选项默认生成的可执行文件名称为a.out
在这里插入图片描述
我们也可以加上-o选项生成对应的自定义名称可执行文件,这里命名为自定义命名为mytest
在这里插入图片描述
注意在生成各种文件的过程中,后缀不是必须为对应的iso的,只不过为了容易区分加上了对应的后缀名,一般建议加上

总结

完成到预处理阶段就停下来加选项-E
生成的对应文件后缀为.i

完成到编译阶段就停下来加选项-S
生成的对应文件后缀为.s

完成到汇编阶段就停下来加选项-c
生成的对应文件后缀为.o

生成可执行程序加上-o
链接这一步我们是没有加其它选项的只有一个-o生成自定义文件名对应的可执行文件
快速记忆:ESc 和 iso(镜像文件名的后缀)

详谈链接

链接的作用是什么呢?我们在编写代码时,例如使用的cout,printf等本质上都是函数,而这些函数并不是我们自己实现的,它是已经定义在库中的函数,我们只需在链接时调用它即可,而库又分为静态库和动态库

动态库在编译链接时,并没有把库中的内容导入到可执行文件中,而是在程序运行时由运行时链接文件加载库,gcc,g++在编译时默认优先链接动态库

什么是静态库?静态库就是打包好的一个文件,在后续程序运行时把这个文件导入到我们的程序文件中,我们可以手动的去让一个程序去链接静态库,具体操作如下:
系统中默认是没有静态库的,要想链接静态库我们需要自己先去下载静态库
C语言静态库的下载方式如下
在这里插入图片描述
C++静态库的下载方式如下:
在这里插入图片描述
让程序去链接静态库而不是动态库操作如下:
在这里插入图片描述
可以看到静态链接生成的可执行程序mytest_static比动态链接生成的可执行程序mytest体积要大的多,这是因为静态链接是把库中的内容都放到了这个可执行文件中
在这里插入图片描述
以上是通过file指令对默认生成的可执行程序mytest和指定用静态库链接的方式去链接生成的可执行程序mytest_static进行验证的结果,可以看到默认优先链接的是动态库,在指定条件下才去链接静态库
动静态链接的优缺点:
动态库因为是共享库,所以可以有效地节省资源(磁盘资源,内存资源),但是动态库一旦缺失,就会导致各个程序无法运行
静态库,不依赖库,程序可以独立运行,体积大比较耗费资源

debug和release

可执行程序默认生成的是release版本,要想让它生成debug版本的可执行程序要加上-g选项
在这里插入图片描述
可以看到在动静态链接中debug版本都比对应的release版本体积要大,这是因为debug版本中添加了调试信息,而release版本是发行版本去掉了相关的调试信息

Linux项目自动化构建工具make/Makefile

在VisualStudio中我们可以使用快捷键Ctrl+F5就可以完成整个项目中个个源文件的编译运行,而在Linux中我们在此之前都是使用gcc或g++命令对项目中的每一个文件依次进行编译,那么在Linux中是否也有类似的编译和清理项目后重新编译的快捷方式呢?make和Makefile就是用来完成项目自动化构建的。
make是一条命令,makefile是一个文件,两者搭配使用。
makefile定义了一系列的规则来指定哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作
Makefile带来的好处就是自动化编译,一旦写好只需一个make命令,整个工程就可完成自动编译,极大的提高了软件开发的效率
make是一个命令工具,是一个解释Makefile中指令的命令工具。
通俗来讲,就是把要编译项目时的命令,全部写在Makefile这个文件中,然后通过make命令去执行Makefile这个文件中的指令,一次写好之后,在后续再要编译项目时只需执行make命令即可。清理项目的指令也可放在Makefile这个文件中。
在这里插入图片描述
在这里插入图片描述
创建一个文件命名为makefile文本内容如上
make指令自上而下执行默认执行第一条,要想执行clean需要在make后面加上对应的clean
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/642507.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何用智能工牌+语音分析技术,从会话数据中,自动化获取客户满意度评价

在企业客户服务过程中,如何获得客户对产品和服务真实、实时、全面的评价,是企业在后续提升客户满意度、洞察客户需求、制定个性化营销策略、提升销售成交率和品牌口碑的 那么传统企业在获取客户评价和提升客户认知这块都是怎么做的呢? 用运营…

【办公类-30-01】(Python)大班毕业证书批量打印(幼儿信息、性别、毕业日期、学校、公章、签名、证书日期)

背景需求 大班毕业在即,需要打印大班幼儿毕业证书。(已有打印好的彩色证书) 常规操作模式: 1,统一盖章,反复签字 200份证书,每张证书上需要盖园所章、园长签字200次 2. 每个班主任自己领取班…

彻底弄懂 JavaScript 异步任务处理原理

目录 1.单线程 什么是单线程? 2.同步和异步 同步 异步 3.事件循环(EventLoop) 1.事件循环的基本概念 2.微任务/宏任务 3.宏任务和微任务的执行顺序 4.常见的面试题 1.单线程 首先我们需要明白JS是单线程的,这是为了降低程序复杂性&#xff0c…

Windows上安装绿色版mysql-8.0.26

以8.0.26为例 1.安装包下载 下载地址:https://dev.mysql.com/downloads/mysql/下载后文件如图所示: 解压压缩包,并修改文件夹名称为mysql: 2.创建配置文件 在E:\mysql(MySQL解压目录)文件夹下&#…

VS Code 实用快捷键

在使用VS Code 开发过程中,熟练使用一些快捷键可以极大的便利我们的开发。所以,本文汇总了一些快捷键,以便想使用时忘记了可以快速查找到。 1. Alt 鼠标点击 在每一个点击的地方添加输入光标 2. Alt Shift 鼠标左键按住拖动 竖列多行选择。…

达梦数据库无法打开图形化界面的解决方法

在安装或使用DM数据库中,我们经常会需要使用图形化界面,但某些情况下,我们可能会打开图形化界面失败。本文分别介绍通过VNC或者VMware连接数据库服务器,和使用Xmanager第三方工具连接服务器打开图形化界面的方法。实验环境的操作系…

【ARM AMBA AXI 入门 6 - AXI3 协议中的锁定访问之AxLOCK信号】

文章目录 1.1 Locked accesses 1.1 Locked accesses 当主机使用 AxLOCK 信号来指示事务是锁定的事务时,互连(Interconnect)必须确保只有该主机可以访问目标从属区域,直到来自同一主机的未锁定事务完成。互连中的仲裁器(arbiter)必须执行此限制。 在主机…

【面试题】前端面试 15 问高频题

大厂面试题分享 面试题库 前后端面试题库 (面试必备) 推荐:★★★★★ 地址:前端面试题库 web前端面试题库 VS java后端面试题库大全 数组去重 遍历旧数组,然后拿着旧数组元素去查询新数组,如果该元素…

Linux安装mysql8

Linux安装mysql8 第一步:解压mysql安装包:tar -xvf mysql-server-8.0.25.tar.gz 第二步:更新文件夹名:mv mysql-server-8.0.25 mysql 第三步:进入mysql文件夹:cd mysql,创建data文件夹&#x…

OM6621PW蓝牙智能指纹锁(附芯片选型)

随着科技的快速发展,智能家居正逐渐成为现代生活的一部分。在智能家居领域,安全始终是人们关注的焦点。传统的机械锁存在被暴力破解、易被复制钥匙等安全隐患,无法满足当今社会对安全性的需求。因此,越来越多的家庭和商业场所开始…

【vue3】12-Vue 3中的Composition Api(二)

Vue3 - composition Api setup中的函数(1)computed函数使用(2)setup获取元素或组件(3)组件的生命周期函数(4)provide/inject函数(了解)(5&#xf…

Java实现PPT转MP4文件

环境要求 必须是Windows电脑&#xff0c;已安装微软Office且已激活。 引入Jar 首先在pom中引入jar包 <dependency><groupId>cc.pptshow</groupId><artifactId>pptshow</artifactId><version>1.3</version> </dependency> …

【2023年计划大纲】2023年技术笔记大纲

2023年技术笔记写作计划 按照技术类型&#xff0c;计划写以下三个领域的笔记&#xff1a; &#xff08;1&#xff09;AUTOSAR标准体系的专业知识&#xff0c;T-BOX,BMS,VCU这几个产品的设计和核心开发。包括UDS协议&#xff0c;XCP协议&#xff0c;OS操作系统。 每一个产品和…

测试工程师常见的面试问题及回答建议

说起软件测试近几年的发展&#xff0c;其实已悄无声息地发生了巨大的变化。前几年随着互联网行业的迅猛发展&#xff0c;软件测试人才稀缺&#xff0c;低门槛高薪资促使大批毕业生和转行人员一窝蜂地涌入。而现在&#xff0c;软件测试发展太快&#xff0c;纵观各大招聘网站&…

Prompt是什么_揭秘Prompt:大模型时代的关键技术与实践应用

文章目录 1 Prompt是什么Prompt的定义和基本概念Prompt的工作原理 2 综合案例案例1&#xff1a;根据内容提取数据生成表格百度&#xff1a;文心一言科大讯飞&#xff1a;讯飞星火 案例2&#xff1a;文生图百度&#xff1a;文心一言科大讯飞&#xff1a;讯飞星火 案例3&#xff…

如何建立一个好的待办事项系统并提高工作效率

如果你有一系列的任务需要完成&#xff0c;你会如何记住它们呢&#xff1f; 最简单的方法当然是将它们记在脑中&#xff0c;但如果任务的数量很多&#xff0c;记忆的细节难免模糊。纸和笔也是一个不错的选择&#xff0c;但纸质的任务清单容易遗失或者损坏。让应用来帮忙当然也…

ubuntu iptables开机自启动

一、配置ubuntu路由转发 用在一台电脑有多个网卡的情形下&#xff0c;一个网卡5网段、一个网卡8网段&#xff0c;8网段是网络出口&#xff0c;所以5网段的设备需要入网的话&#xff0c;要路由转发。 sudo iptables -t nat -A POSTROUTING -s 192.168.5.0/24 -j SNAT --to-sou…

对于中小企业,如何管理好仓库?

对于中小企业&#xff0c;如何管理好仓库&#xff1f; 在制造业摸爬滚打的这些年&#xff0c;也拜访了不少客户&#xff0c;帮助不少企业做了数字化方案&#xff0c;正如题主所说&#xff0c;“仓库是每一个经销商的根据地&#xff0c;如果不把仓库管理好&#xff0c;那么整个…

产品经理认证NPDP考试心得

什么是NPDP&#xff1f; 产品经理国际资格认证NPDP&#xff08;New Product Development Professional&#xff09;&#xff0c;由美国产品开发与管理协会&#xff08;PDMA&#xff09;所发起&#xff0c;是国际公认的新产品开发专业认证。 NPDP考试简介 考试方式&#xff1a…

C语言实现顺序表与链表创建

线性表 用于存储若干相同属性元素的有序序列称为线性表。 线性表特征&#xff1a; 存在唯一的第一个元素&#xff1b;存在唯一的最后一个元素&#xff1b;除第一个序列的每一个元素元素都有一个前驱元素&#xff0c;后一个都有一个后继元素。 顺序表 线性表的顺序表示指的…