Linux基础开发工具快速入门

article/2025/11/6 16:20:01

学习导航

    • 一、软件包管理器yum
        • 1.linux如何进行安装
        • 2.什么是软件包
        • 3.yum如何安装程序
          • (1)原理的感性理解
          • (2)yum常用指令
    • 二、Linux编辑器Vim的使用
        • 1.初步认识
        • 2.Vim命令模式下的批量化操作
          • (1)复制粘贴
          • (2)快速移动
          • (3)修改
        • 3.Vim底行模式下的操作
    • 三、Linux编译器gcc、g++的使用
        • 1.预处理、编译、汇编、链接
        • 2.头文件与库文件
        • 3.静态库与动态库
    • 四、Linux调试器gdb的使用
        • 1.基本概况
        • 2.调试指令
    • 五、Linux自动化构建工具
        • 1.基本概况
          • (1)是什么?
          • (2)什么是依赖方法、关系
          • (3)为什么需要makefile
        • 2.最简单的案例
          • (1)案例演示
          • (2)问题反思
        • 3.伪目标
          • (1)问题引入
          • (2)问题延伸: Linux是如何识别目标文件的新旧的?
          • (3)总结
        • 4.多文件的makefile
    • 六、git的学习使用
        • 1.在Gitee创建仓库
        • 2.克隆项目到本地
          • (1)第一步:确定url
          • (2)第二步:clone
        • 3.Git三板斧
          • (1)第一招:git dd
          • (2)第二招:git commit
          • (3)git push
        • 4.其他
          • (1)git log
          • (2).gitignore
          • (3)git status
          • (4)git pull

一、软件包管理器yum

1.linux如何进行安装

  • 源码安装:下载程序的源代码, 并进行编译, 得到可执行程序

    [缺点]:配置麻烦,对小白不友好

  • npm包安装:

    [缺点]:其依赖的库还需要自己额外安装

  • yum安装

    [优点]:不用编译源码;不用解决软件依赖问题

2.什么是软件包

  • 将一些常用的软件提前编译好,做成软件包(可以理解成windows上的安装程序)放在一个服务器上,通过包管理器可以很方便的获取到这个编译好的软件包,,直接进行安装
  • 软件包和软件包管理器,就好比 “App” 和 “应用商店” 这样的关系
  • yum(Yellow dog Updater,Modified)是Linux下非常常用的一种包管理器。主要应用在 Fedora, RedHat,Centos 等发行版上

3.yum如何安装程序

(1)原理的感性理解

yum就类似于手机上的应用商店,从linux服务器上取拉取我们指定的程序

image-20220812103910815

[提问]:yum是怎么知道去哪些服务器里下的呢?

[答]:Linux里有相应的配置文件。.repo就是一个个yum源了

image-20220812114732788

如果下载程序速度慢或者repo中的网站为外网,那么可以考虑更新yum源。

[注意❗]:做任何配置的时候,都不要直接删除,而是先备份

image-20220812115454337

(2)yum常用指令
  • 搜索

image-20220812113939871

  • 安装

image-20220812114153100

  • 卸载

image-20220812114121707

  • yum makecache:服务器的包信息下载到本地电脑缓存起来
  • yum -y update:升级所有包同时,也升级软件和系统内核
  • yum -y upgrade:只升级所有包,不升级软件和系统内核,软件和内核保持原样

二、Linux编辑器Vim的使用

1.初步认识

  1. 什么是Vim?

    vim是一个功能强大的多模式编辑器,只能用来写代码。各个模式切换如下

    image-20220812131245944

    从命令模式到插入模式还有两种方法:

    • o:插入新的一行,从行首开始输入文字
    • a:从目前光标所在位置的下一个位置开始输入文字
  2. 为什么要学Vim?

    有时候,需要我们在生成环境下快速定位问题,甚至快速修改代码

  3. Vim的快速配置

    VimforCpp链接

2.Vim命令模式下的批量化操作

(1)复制粘贴
  1. yy :复制当前行 nyy:复制n行
  2. p:粘贴到当前行的下一行 np:复制n份
  3. dd:剪切当前行 ndd:剪切n行
  4. u:撤销当前操作
  5. ctrl + r:复原操作(针对撤销操作)
(2)快速移动
  1. g + g:光标快速定位到文本最开始
  2. shift + g(G):光标快速定位到文本末尾
  3. n + shift + g:光标快速定位到文本第n行
  4. shift + 4($):光标快速定位到文本行的末尾
  5. shift + 6(^):光标快速定位到文本行的最开始
  6. w,b:向后、向前以单词为单位进行移动
  7. h,j,k,l:左 下 上 右
(3)修改
  1. shift + `(ESC下面):快速大小写切换
  2. r:替换光标所在的字符 n r :替换成n个r
  3. shift + r®:批量化替换
  4. x:删除光标所在字符 nx:删除n个

3.Vim底行模式下的操作

  1. 替换:[range]s / {pattern} / {string} / [flags] [count]
    • range表示范围。%用于表示全文
    • s表示替换
    • pattern 表示字符串匹配规则,即要匹配什么样的字符串
    • string 表示要将匹配到的字符串替换为的新的string字符串
    • [flags] s_flags中,g比较常用,通常使用g表示全部替换,默认如果不给的话,表示只替换一次
    • [count] 表示在一行中匹配多少次
  2. 打印:[range]p[rint] [flags]
    • 用于打印指定区间的行
  3. 退出:
    • q:退出 (q!表示强制退出)
    • wq:保存并退出。就算没有修改也会写入,并修改文件时间属性
    • x: 保存并退出编辑,仅当文件有修改时会保存,并修改文件时间属性

三、Linux编译器gcc、g++的使用

1.预处理、编译、汇编、链接

gcc -E test.c -o test.i   // 预处理
gcc -S test.i -o test.s   // 编译
gcc -c test.s -o test.o   // 汇编
gcc test.o -o mytest      // 包含链接过程

[说明]:

  • -E:从当前文件开始翻译,翻译到预处理完成时停止
  • -o:将生成的文件保存到临时文件test.i中
  • -S:从当前文件开始翻译,翻译到编译过程结束时停止
  • -c:从当前文件开始翻译,翻译到汇编结束时停止

[记忆]:

  • ESc 、 iso

[注意❗]:

g++可以编译C语言代码也可以编译C++代码,而gcc只能编译C语言代码

2.头文件与库文件

  • 头文件为我们提供了可以使用的方法, 开发环境。语法提示也是头文件帮助我们搜索的
  • 库文件为我们提供了可以使用的方法的实现,以供链接形成我们自己的可执行程序

3.静态库与动态库

  1. 动态库:Linux(.so) windows(.dll)
  2. 静态库:Linux(.a) windows(.lib)

[动态库]:

  • 优点:大家共享一个库可以节省空间
  • 缺点:一旦库缺失,会导致几乎所有程序失效

​   一般而言,更推荐使用动态库,Linux系统也是这样认为,所以生成的可执行程序默认都是动态链接。

​  如果想生成静态链接的可执行程序,要加上-static的后缀,但是系统一般没有自带静态库,所以还需要额外安装glibc-static libstdc++-static

​  使用ldd指令可以显示链接属性

四、Linux调试器gdb的使用

1.基本概况

使用 gdb + 文件名即可进行调试了,但是遇到如下错误:

  1. 可执行程序才可调试

image-20220814100855670

【解决】:编译生成可执行程序

  1. 默认生成可执行程序为release版本

image-20220814101110595

【解决】:加上-g选项,生成debug版本下的可执行程序

image-20220814101743876

不难发现,以debug模式发布,因为包含调试信息,体积会更大

2.调试指令

  1. l + 行号:从第n行开始显示 (list)

  2. b+ 行号:打断点 (break)

  3. d+ 断点编号:删除断点 (delete)

  4. info b:显示断点信息

  5. s:逐语句进行 (step)

  6. n:逐过程进行 (nest)

  7. p+ 变量:类似于监视的作用 (printf)

  8. display + 变量名:跟踪某一个变量,每次停下来都显示它的值

  9. undisplay + 变量名:取消跟踪

  10. until+ 行号:跳转到指定行号

  11. r:运行程序 (run)

  12. c: 从一个断点跳到另一个断点 (continue)

  13. finish:执行完一个函数就停下

  14. bt:查看调用堆栈

五、Linux自动化构建工具

1.基本概况

(1)是什么?
  • make 是一条指令,makefile(也可以是Makefile)是一个文件

  • makefile = 依赖方法 + 依赖关系

(2)什么是依赖方法、关系

image-20220817151956322

​ 依赖关系表明,可执行程序的实现依赖哪些源文件

​ 依赖方法表明,源文件是如何生成可执行程序的。依赖关系和依赖方法对于Makefile文件来说缺一不可。

(3)为什么需要makefile

​  在VS下,我们只要写好了头文件和源文件,编译器就在自动帮我们生成可执行程序,我们从来不需要关心各个文件之间是怎样相互链接的,因为编译器已经帮我们完成了项目的构建。

​  如果这个过程需要我们手动完成:对于单个文件的简单程序,一条命令就可以直接搞定了(编译+连接),但是如果是一个复杂的工程,可能有成千上万个文件,然后需要链接大量的动态或静态库。试想一下,你还想一条一条命令执行吗?

​  因此makefile就出现了,它定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,极大的帮助我们完成项目的构建

2.最简单的案例

(1)案例演示

image-20220817162520095

[笔记]:

  1. makefile文件最核心的就是说明依赖关系依赖方法,以上面生成 mytest 文件为例说明:

    • mytest 一行表示 mytest 文件的生成依赖文件 mytest.c
    • gcc 一行指令说明了 mytest 是如何通过mytest.c 生成而来的(gcc编译而来)
  2. 书写makefile文件时要严格注意格式。书写依赖方法时要换行并且按下 tab 键,注意tab键不能用按相应数量的空格来代替,否则会有如下错误

    image-20220817165151165

  3. 依赖关系可以为空,例如 clean 的实现不依赖任何其他文件

  4. 有了Makefile文件后我们使用 make 指令就执行相应操作

    image-20220817165443080

(2)问题反思
  1. 为什么使用make指令时默认执行生成mytest的代码?

【答】:makefile在形成文件的时候默认自顶向下扫描,默认只会形成第一个目标文件,并执行该依赖关系的依赖方法。

image-20220818091633894

3.伪目标

(1)问题引入

​ 上面例子中出现的.PHONY是什么意思呢? phony在英语中的意思是赝品,即我们创建了一个伪造的目标——clean。

​ 伪目标和真正目标的区别在于,伪目标总是可以被执行

image-20220818093301833

(2)问题延伸: Linux是如何识别目标文件的新旧的?

通过stat指令我们可以获得文件的基础信息,我们对下面的三个时间加以说明:

image-20220818093718248

  • Access:表示读取或进入文件的时间
  • Modify:表示文件内容被修改的时间
  • Change:表示文件属性被修改的时间

​ 由于Access的使用频率最高,所以出于优化的考虑,只有读取或者进入文件达到一定次数才会修改Access的时间

image-20220818094408486

​ 文件内容修改也有可能会改变文件属性,例如文件大小也是文件属性的一种

回到我们最初的问题,Linux是如何判断目标文件的新旧的?

【答】通过比较源文件和目标文件的 Modify 时间来判断

image-20220818095140812

如果目标文件是新的,那么它的修改时间一定在源文件修改时间得到后面

反之,则说明源文件在创建目标文件后发生了改变,即目标文件变“旧”了。

image-20220818095355079

当我们修改源文件后,发现又可以 make mytest

(3)总结

.PHONY修饰的目标文件总是被执行

4.多文件的makefile

​ 前面我们只提到了最简单的makefile,我们现在举一个多文件的例子来帮助大家理解makefile的意义以及输入make指令后所经历的过程:

image-20220818140253738

  • make会在当前目录下寻找名叫 “makefile” 或者 "Makefile"的文件
  • 如果找到,它会找文件中的第一个目标文件(target)。在上面的例子中,他会找到「Add」这个文件,并把这个文件作为最终的目标文件
  • 如果目标文件所依赖的文件并不存在,那么Makefile会自动的向下运行,从剩余的依赖关系中首先生成目标文件的所依赖的文件,最终再生成目标文件
  • 这就是make的依赖性:make会一层又一层地去找文件的依赖关系,直到最终编译出第一个目标文件
  • 在找寻的过程中,如果出现错误,比如最后被依赖的文件找不到,那么make就会直接退出,并报错;而对于所定义的命令的错误,或是编译不成功,make根本不理 —— make只管文件的依赖性

六、git的学习使用

1.在Gitee创建仓库

image-20220819090509478

2.克隆项目到本地

(1)第一步:确定url

image-20220819090624851

推荐使用HTTPS,因此操作简单,不需要配置

(2)第二步:clone

image-20220819091008760

随后需要输入Gitee的用户名密码 (用户名在头像框下)。

image-20220819091831008

稍等一会后,就完成了远程仓库的拷贝

image-20220819092128381

3.Git三板斧

(1)第一招:git dd

git add +「文件名/目录名」:将需要git管理的文件告知git

image-20220819092903540

【备注】:

  • git add . 表示将当前目录下没有添加的文件全部添加进去
(2)第二招:git commit

git commit -m + 「本次提交日志」: 提交改动到本地git仓库

image-20220819093403872

首次commit可能还需要你指定自己的用户名和邮箱,按照提示配置即可(作用之后会提到)

image-20220819093529567

【备注】:

  • 目录里也不能为空,随便往里面写点什么都行
  • 提交日志不要胡写,被同事看见就要被喷了😜
(3)git push

git push:同步到远端服务器上

image-20220819095238396

4.其他

(1)git log

image-20220819095627900

​ 使用 git log 指令后我们就可以看见这段代码的作者、它的联系方式以及他所写的注释 。

​ 如果对这段代码有疑惑,可以通过邮箱来联系到相应的作者,这也就是我们之前指定自己用户名和邮箱的意义所在

(2).gitignore

.gitignore属于隐藏文件,要想他显示出来需要加上-a选项

image-20220819100007900

我们也可以进一步修改.gitignore来过滤掉自己不需要的后缀的文件

image-20220819100147387

image-20220819100559717

commit后我们就已经可以发现a.x和a.X根本没有被添加进去

我们尝试单个add,结果更加明显

image-20220819100716458

(3)git status

使用该指令可显示当前git的状态

(4)git pull

当Gitee仓库中的内容发生改变后,你直接git push很容易造成代码冲突。

首先输入指令git pull,它的作用是取回远程主机某个分支的更新,再与本地的指定分支合并。之后再次push就不会冲突了


http://chatgpt.dhexx.cn/article/ThgC0gwY.shtml

相关文章

Linux快速入门

概述 后端程序员必会Linux Windows对比Linux 本地安装虚拟机跑Linux 这里不推荐,因为比较慢,占资源 购买云服务器(推荐) 虚拟机安装后占用空间,也会有些卡顿,我们作为程序员其实可以选择购买一台自己…

Linux入门篇01~~Linux的快速入门 (简洁,详细,基础)

文章目录 1. 入门概述1.1 我们为什么要学习Linux1.2 Linux 简介1.3 Linux 发行版1.4 Linux 应用领域1.5 Linux vs Windows1.6 环境搭建 2. 走进Linux世界2.1 系统目录结构2.2 Linux 文件颜色表示2.3 关机命令2.4 辅助工具2.5 目录切换2.6 目录CURD2.7 文件内容查看2.8 网络配置…

【Linux】-- 入门基础命令

目录 Linux简介 一、用户相关操作命令 1.查看当前用户who am i 2.新建用户adduser 3.修改密码passwd 4.删除用户userdel 二、ls指令 1.-a 2.-d 3.-i 4.-k 5.-l 6. -n 7.-F 8.-r 9.-t 10.-s 11.-R 12.-1 三、pwd命令 四、cd指令 1.Linux管理文件形式 2.绝对路径和相…

linux简单入门

目录 Linux简介Linux目录结构Linux文件命令文件处理命令文件查看命令常用文件查看命令 Linux的用户和组介绍Linux权限管理 Linux简介 Linux,全称GNU/Linux,是一种免费使用和自由传播的类UNIX操作系统,其内核由林纳斯本纳第克特托瓦兹&#x…

Linux零基础快速入门篇

推荐教程:Linux零基础快速入门到精通 操作系统概述 操作系统是计算机软件的一种,它主要负责:作为用户和计算机硬件之间的桥梁,调度和管理计算机硬件进行工作而计算机,如果没有操作系统,就是一堆无法使用的…

Linux新手快速入门(万字超详细)

Linux系统新手入门 文章目录 Linux系统新手入门前言一、Linux的文件和目录结构1.1 Linux的文件1.2 Linux的目录结构 二、 VIM编译器2.1 了解VIM编译器2.2 一般模式2.3 编辑模式2.4 指令模式 三、网络配置3.1 配置网络ip地址3.2 配置主机名 四、系统管理4.2 systemctl4.3 设置后…

Linux小白10分钟快速入门教程

1 基础知识 应用领域:服务器使用。 linux启动:Linux系统的启动过程可以分为5个阶段: 内核的引导。当计算机打开电源后,首先是BIOS开机自检,按照BIOS中设置的启动设备(通常是硬盘)来启动。操作…

快速入门Linux

学习目标 1、Linux/centos系统简介 2、Centos系统目录结构 3、Centos常用命令 4、Centos安装Java 5、Centos安装Tomcat 6、Centos安装Mysql 7、Mysql主从复制 8、Shell编程1、Linux简介 Linux是一个免费和开源的操作系统。能运行在多种设备上,比如手机、平板电脑、…

Sftp和ftp over ssh2的区别

最近使用SecureFx,涉及了两个不同的安全文件传输协议: -sftp -ftp over SSH2 这两种协议是不同的。sftp是ssh内含的协议,只要sshd服务器启动了,它就可用,它本身不需要ftp服务器启动。ftp over SSH2则象一个二传手。 1、…

ssh2实现远程连接机器webShell

1. nodejs使用ssh2连接shell,简单交互 示例:使用conn.shell import { Client } from ssh2;const conn new Client(); conn .on(ready, () > {console.log(Client :: ready);conn.shell({ term: xterm }, (err, stream) > {if (err) {throw err;…

Putty上传文件报Received SSH2_MSG_CHANNEL_DATA for nonexistent channel 0

生产服务器通过Putty上传jar包报错信息如下: 排查发现出现原因是上传目录磁盘空间满了 解决办法:进入磁盘空间满的目录,执行du -a|sort -rn|head -10,对磁盘空间进行清理,注意不要删除data目录的数据,尽量找…

SSH J2EE

<I>what is "SSH" 在J2EE项目中表示了3种框架,即 Spring+Struts+Hibernate。 Struts对Model,View和Controller都提供了对应的组件。 Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。它是为了解决企业应用开发的复杂性而创建的。 Hibernat…

ssh2框架整合详细版(使用较新jar包)

ssh2框架整合Maven详细配置、多种方式介绍&#xff0c;中间碰到问题与注意点&#xff0c;部分已有指出。 关于Eclipse中使用Maven详见http://blog.csdn.net/it_faquir/article/details/54562242 步骤一 导入必备junit、javax.servlet相关jar包&#xff0c;maven配置如下&…

nodejs系列-如何用JS代码连接远程服务器并执行命令创建文件-ssh2

ssh2是什么&#xff1f; SSH2 client and server模块用纯JavaScript为node.js编写。我们可以在代码里使用它链接远端服务器&#xff0c;执行一些必要的操作 为什么要使用ssh2&#xff1f; 作为一名前端&#xff0c;我们在某些情况下&#xff0c;需要使用代码去登录Linux服务器…

【SSH2框架(理论篇)】--SSH2 Vs 经典三层

&#xfeff;&#xfeff; 这几天一直在学习使用SSH2框架&#xff0c;对于框架本身的使用并不是很困难&#xff0c;相信经过多锻炼就能够熟练的掌握框架的使用&#xff0c;让我匪夷所思的是在使用框架的时候感觉很熟悉&#xff0c;好像在哪里用过似得。就在某次查看代码的时候突…

xshell7无法远程连接linux虚拟机,启动SSHD报错:Bad SSH2 cipher spec...

项目场景&#xff1a; xshell7无法远程连接linux虚拟机 问题描述 终端输入systemctl start sshd 启动报错&#xff1a; 输入sshd -t 查看具体报错信息&#xff1a; 解决方案&#xff1a; 输入ssh -Q cipher&#xff0c;查看ssh使用了哪些ciphers: 复制结果 输入vim …

2.ssh远程登录

1.ssh命令 &#xff08;1&#xff09;ssh命令的参数ssh- l 指定登陆用户 - i 指定私钥 - X 开启图形 - f 后台运行 - o 指定连接参数 - t 制定连接跳板 ssh - l root 172.25.254 .x -o "StrictHostKeyChecking no" 首次连接不需要…

SSH建立原理

一、ssh2协议 在ssh1中&#xff0c;由单个协议提供密钥交换、身份认证与加密的功能&#xff0c;而ssh2内部由3个协议组合一起&#xff0c;为其提供这些功能。这3个协议: 传输层协议 认证协议 连接协议 传输层协议 主要提供密钥交换与服务器端认证功能 认证协议…

SSH2协议加密与连接过程

最近在做ssh2联动交换机模块&#xff0c;看到libssh2-1.9.0版本对于用户认证有三种不同的方式&#xff1a; ① password&#xff08;默认&#xff09;② keyboard-interactive ③ publickey 看代码并不是太理解&#xff0c;所以查询了一番&#xff0c;SSH2通信大致分为两步&a…

来说说datatype

今天敲代码一直卡在一个问题上面好久那就是--datatype的未定义&#xff0c;起初不晓得datatype的含义&#xff0c;遇到这种情况首先想到的就是自己又忘记加上面头文件了。随即写了个stdlib.h上去。可是问题并没有得到解决&#xff0c;还是显示未定义。 怀疑是不是自己拼写的错误…