【Linux】Linux学习第二节——常用工具

news/2024/7/21 12:49:12 标签: linux, vim, 编辑器

文章目录

    • 常用工具
      • 1.软件包管理工具
        • 什么是软件包
        • `yum`三班斧
          • 1.查看
          • 2.安装
          • 3.移除
      • 2.编辑器
        • `vim`
        • vim操作模式
        • vim使用
          • 打开文件
          • 操作模式的切换
          • 普通模式下的操作指令
            • 1.光标移动
            • 2.文本操作
            • 3.其他操作
          • `sudo `
      • 3.编译器
        • `gcc/g++`
        • 编译器作用
        • 编译过程
          • 1.预处理
          • 2.编译
          • 3.汇编
          • 4.链接
        • 函数库
            • 链接库文件的两种方式
      • 4.调试器
        • `gdb`
          • 1.调试器加载程序
          • 2.开始调试程序
          • 3.常用调试指令
      • 5.项目自动化构建工具
        • `Makefile`/`make`
          • `Makefile`的编写规则
          • `make`的解释执行规则
          • `make`的编写执行规则进阶版
          • 伪对象的声明使用
      • 6.项目版本管理工具
        • `git`
          • `git`使用

常用工具

1.软件包管理工具

什么是软件包

  • 在Linux下安装软件,通常的办法是下载到程序的源代码,并进行编译,得到可执行的文件
  • 但是这样太麻烦了,所以有些人把一些常用的软件提前编译好,做成了软件包
  • 软件包和软件包管理器,就类似于手机上的应用商店
  • yum是Linux下非常常用的包管理器

yum三班斧

1.查看
  • yum list---->查看所有软件包
  • yum search---->搜索指定软件包
2.安装
  • 首先要进入管理员权限 ---->su root
  • yum install---->安装软件包
3.移除
  • 首先要进入管理员权限---->su root
  • yum remove----->卸载安装包

我们想查看常用工具是否已经安装,可以查看每个工具的版本信息,如果找不到就代表没有安装

例如

  • vim --version
  • gcc --version

注意:关于yum的所有操作必须保证主机网络畅通

💙💙💙💙💙💙💙💙💙💙💙💙💙平平无奇的分界线💙💙💙💙💙💙💙💙💙💙💙💙💙💙💙

2.编辑器

vim_42">vim

vim是一个命令行编辑器,其中不能使用鼠标----在命令行中实现光标的移动,文本的操作,文本的编辑

vim_46">vim操作模式

总共有12种,常用三种:

1.插入模式:进行文本数据的编辑插入

2.普通模式:进行文本常见的操作-复制、剪切、粘贴、删除、撤销、返回、文本对齐、光标移动

3.底行模式:进行文本的保存和退出,以及文本的匹配查找替换操作

vim_56">vim使用

打开文件

vim filename---->打开一个已有的文件若不存在就会创建,打开后默认处于普通模式

操作模式的切换

所有模式都是围绕普通模式进行切换的

1.普通模式—>插入模式

  • i/a/o/I/A/O从普通模式进入插入模式

  • i进入插入模式,是从光标当前位置开始输入文件

  • a进入插入模式,光标后移一个字符开始插入

  • o进入插入模式,在光标下面新插入一行,在行首开始插入,

  • I进入插入模式,是从光标所在行的行首开始插入

  • A进入插入模式,从光标所在行的行尾开始插入

  • O进入插入模式,在光标所在上一行插入新行,在行首进行插入

2.普通模式—>底行模式

  • 英文:,从普通模式到底行模式
  • :q退出
  • :w 保存
  • :wq保存并退出
  • :q! 不保存的强制退出

3.其他模式—>普通模式

  • 任何模式下按ESC键,都可以返回普通模式
普通模式下的操作指令
1.光标移动
  • h/j/k/l:按字符的上下移动
  • w/b:按单词的左右移动
  • ctrl+f/b:上下翻页
  • gg/G:首行/尾行
2.文本操作
  • yy:将光标所在之处到字尾的字符复制到缓冲区中
  • nyy:复制从光标所在行往下数的n行文字
  • dd:删除光标所在行
  • ndd:删除从光标开始行往下的n行
  • x:删除字符
  • dw:删除单词
  • p:将缓冲区的字符粘贴到光标所在位置
  • P:将缓冲区的字符粘贴至光标所在上一行

vim中没有剪切,删除就是剪切,虽然看到数据被删除了,但是也复制到剪切板上了

3.其他操作

u:撤销上一次操作

ctrl+r:撤销的反向操作

gg=G:全文对齐

sudo

功能:临时为用户操作提权,不用每次都切换到管理员用户了

但是sudo是需要配置的

1.su root 切换到管理员用户

2.visudo 打开sudo配置

3.:90 跳转到文档第90行,90 行附近

4.yy复制root这一行,p粘贴

5.将用户名从root变成自己的用户名称

6.:wq保存退出

💙💙💙💙💙💙💙💙💙💙💙💙💙平平无奇的分界线💙💙💙💙💙💙💙💙💙💙💙💙💙💙💙

3.编译器

gcc/g++

gcc是C语言编译器,g++是c++语言编译器,不同的语言有不同的编译器

编译器作用

C语言,C++语言都是高级语言,机器无法识别这些代码,需要编译器,将高级语言代码解释成为机器指令,生成可执行程序文件再能执行

可执行程序文件:一段功能的机器指令集

编译型语言:c/c++

程序编译后才可以执行 ,运行性能高,编码较慢

脚本型语言 :python/lua/shell

编写完毕直接执行 逐行解释型语言,由解释工具逐行解释,然后执行功能,编码较快,但运行性能低

编译过程

1.预处理
gcc  -E a.c -o a.i
gcc  -E b.c -o b.i

展开所有代码(引入头文件,宏替换,删除注释…)gcc -E(只预处理)

2.编译
gcc -S a.i -o a.s
gcc -S b.i -o b.s

进行语义语法纠错,没有错误将代码解释成为汇编代码 gcc -S(只进行编译)

3.汇编
gcc -c a.s -o a.o
gcc -c b.s -o b.o

将汇编代码解释成为机器指令gcc -c(只进行汇编)

4.链接
gcc a.o b.o -o main

将所有用到的机器指令文件打包到一起,生成可执行程序gcc -o(指定要生成的文件名称)

📍我们在C语言中并没有定义printf函数,而且在预编译中包含的头文件中也只有函数的声明,那是哪里实现printf函数的呢?

这里引入一个重要概念

函数库

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aCDSOjGA-1641470756602)(C:\Users\86134\AppData\Roaming\Typora\typora-user-images\image-20220106134726937.png)]
图中libc是标准c库,printf就是标准c库中的函数,

gcc编译器在链接生成可执行程序的时候,会自动链接标准c库

链接库文件的两种方式

gcc中默认动态链接

1.动态链接:链接动态库,在可执行程序中记录函数符号信息表,生成的可执行程序比较小,但是运行时需要加载动态库,多个程序会在内存中使用同一个相同的库,不会再内存中造成代码冗余

2.静态链接:链接静态库,直接将使用的函数实现写入可执行程序中,生成的可执行程序比较大,但是运行时不需要额外依赖加载库文件,但是如果多个程序使用了相同的静态库,则运行起来会在内存中造成代码冗余
在这里插入图片描述
💙💙💙💙💙💙💙💙💙💙💙💙💙平平无奇的分界线💙💙💙💙💙💙💙💙💙💙💙💙💙💙💙

4.调试器

gdb

  • 调试一个程序的运行过程,能让我们从运行过程中发现程序哪里有问题,可以适当的改变数据达到某种调试目的

  • 不是所有的程序的都可以调试,调试器只能调试具有调试符号信息的程序—>debug版本的程序

  • gcc生成可执行程序,默认会生成release版本的程序,程序中没有调试符号信息,想要生成debug版本需要加上-g选项

    • gcc -g a.c b.c -o mian
1.调试器加载程序
  • gdb ./main 直接使用gdb加载程序
2.开始调试程序
  • run 直接运行
  • start 开始逐步调试
3.常用调试指令

1.流程控制

  • next/n:下一步,遇到函数直接运行,不会跟踪进入
  • step/s:下一步,遇到函数则跟踪进入函数
  • list/l:默认查看调试行附近代码,也可指定行—>list file:line
  • until:直接运行到指定行,也可以指定文件—>·until a.c line
  • continue/c:继续运行,直到断点处停下

2.断点操作

  • break/b 指定文件 :指定行:给指定文件的指定行打断点
  • break function:给函数打断点
  • info break:查看断点信息
  • watch 变量:给变量打断点,放变量数据改变的时候停下
  • delete/d:删除断点

3.调用栈操作

  • print/p:查看变量数据---->print a; print a=10---->设置变量数据
  • backtrace/bt:查看程序运行调用栈信息,程序一旦崩溃,查看调用栈可以快速定位崩溃位置—>栈顶函数

在这里插入图片描述

💙💙💙💙💙💙💙💙💙💙💙💙💙平平无奇的分界线💙💙💙💙💙💙💙💙💙💙💙💙💙💙💙

5.项目自动化构建工具

Makefile/make

Makefile:普通文本文件,用于记录项目的构建规则流程

make:Makefile解释程序,逐行解释Makefile中项目的构建规则,执行构建指令,完成项目的构建

Makefile的编写规则

第一步.目标对象:依赖对象

第二步.制表符\t 执行指令

目标对象:是要生成的可执行程序的名称

依赖对象:是生成目标对象所需要的源码文件

如果你出现了和我一样,下面这张图的错误,不同担心,这代表编辑 makefile 时出现格式错误了

在这里插入图片描述

记住:第二行gcc前面需要按下Tap键来空出空格,其他的都无效

在这里插入图片描述

修改以后,就没有问题了

在这里插入图片描述

make的解释执行规则

1.make一旦执行,就会在当前目录寻找Makefile

2.make的执行规则中,要生成目标对象,首先要保证依赖对象已经生成,若没有生成,则会递归向下寻找依赖对象的生成规则

在这里插入图片描述

3.在Makefile中找到第一个目标对象,根据依赖对象的时间关系,判断是否需要重新生成

  • 生成第一个对象后,make就会退出,不会继续生成第二个对象

  • 📍如果非要生成两个对象呢?

  • 也可以

    在这里插入图片描述

方法如上图,结果如下图

在这里插入图片描述

4.若是需要重新生成,则执行对应下方的指令(指令不是非要生成对象的指令,也可以是打印等)

make的编写执行规则进阶版

make 中的预定义变量

  • $@:表示目标对象
  • $^:表示所有依赖对象
  • $<:表示所有依赖对象中第一个依赖对象

在这里插入图片描述

这样是不是还有点麻烦,通配符%的使用

在这里插入图片描述
简洁多了~

伪对象的声明使用
.PHONY:目标对象的名称

作用:不管对象是否最新,每次都要重新生成

在这里插入图片描述

💙💙💙💙💙💙💙💙💙💙💙💙💙平平无奇的分界线💙💙💙💙💙💙💙💙💙💙💙💙💙💙💙

6.项目版本管理工具

git

git:项目的版本管理工具

版本管理工具:对项目的开发周期进行管理,每一次提交的修改都会有对应的版本号,能够让我们在程序的时候回滚回去

git使用

1.从远程仓库克隆到本地

git clone URL

2.本地提交修改信息

git add ./*

3.提交本次版本管理

git commit -m “内容”

4.将本次版本提交到远程服务器仓库

git push origin master

origin用于指定分支名称
💙💙💙💙💙💙💙💙💙💙💙💙💙平平无奇的分界线💙💙💙💙💙💙💙💙💙💙💙💙💙💙💙


http://www.niftyadmin.cn/n/1012233.html

相关文章

[转载]我的基于WCF的SOA架构项目实战

http://www.cnblogs.com/datacool/archive/2011/07/13/wcfsoa.html 本人才疏学浅&#xff0c;在现在的项目中即是程序员又是架构设计组组长。在使用WCF技术前看了无数号称WCF实战博客&#xff0c;没有一篇是我想要的。不过也算学到些皮毛。在此谢过&#xff0c;对你们的善意分享…

CLR线程池教程四大功能详解(2)

http://blog.sina.com.cn/s/blog_8d22eb930100tkc2.html &#xff08;文档下载地址&#xff1a;http://www.ctdisk.com/file/1758317&#xff09; 功能 3&#xff1a;CLR线程池教程之当单个内核对象得到信号通知时调用方法 要让线程池线程在内核对象得到信号通知时调用您的回…

EasyVS 0.3版本发布 -- 给力变换vs编辑器主题

之前版本介绍http://www.cnblogs.com/qianlifeng/archive/2012/01/09/2317625.html0.3版本下载&#xff1a;http://visualstudiogallery.msdn.microsoft.com/7310649d-87d9-45d2-b7da-99e5b001549e距离上次发布0.2版本也快三个多月了&#xff0c;这次的0.3版本增加了一些实用的…

五子棋精髓

“易有太极&#xff0c;是生两仪&#xff0c;两仪生四象&#xff0c;四象生八卦。” 这是五子棋的真实写照。在开始之初&#xff0c;黑白就相伴而生是成“两仪”&#xff0c;每枚子有四个方向称“四象”&#xff0c;每个子贴身周围有八个点谓之“八卦”。五子棋就是按照这个规律…

【C++】第四节——宏和内联函数

文章目录&#x1f4cd;为什么宏函数存在副作用内联函数&#x1f4cd;为什么内联函数特性补充debug和release 的区别Debug 版本Release 版本&#x1f4cd;为什么 &#x1f4cd;为什么a的值已经被改变为100了&#xff0c;但是输出了时候还是10&#xff1f; 在c中&#xff0c;被co…

【Linux】进程概念——冯诺依曼体系结构

文章目录冯诺依曼体系结构&#x1f4cd;什么是冯诺依曼体系结构?&#x1f4cd;图解&#x1f4cd;所有的设备都是围绕存储器工作的学习进程第一节&#xff0c;先从冯诺依曼开始冯诺依曼体系结构 &#x1f4cd;什么是冯诺依曼体系结构? 冯诺依曼体系结构即现代计算机的硬件体系…

基于 Android NDK 的学习之旅-----序言

前些日子做了个Android项目, 引擎层 用C的, 准备写这个系类的文章,借此跟朋友来分享下我NDK开放的经验以及自己知识的总结和备忘。希望能给需要这方面资料的朋友提供一定的帮助。 主要涉及到&#xff1a;环境的搭建Android.mk 文件的 配置 HelloWorldNDK 打印信息JNI 数据类型J…

Excel计算年龄(工龄)方法一则

刚才在Excel小组有人问Excel问如何计算年龄&#xff08;工龄&#xff09;的问题&#xff0c;其实方法特别多&#xff0c;这里就说一个方法使用Yearfrac和int函数来计算。 语法 YEARFRAC(start_date,end_date,basis) 要点 应使用 DATE 函数输入日期&#xff0c;或者将函数作为其…