当前位置: 首页 > article >正文

【Linux】工具和软件

目录

软件包管理器 yum

软件操作

yum list

yum install

yum remove

yum源

编辑器 vim

多模式

命令模式

上下左右定位

操作

多文件操作

底行模式

vim配置

编译器 gcc/g++

编译四步骤

gcc选项

-o

-E 

-S

-c

​编辑

-g

自动化构建工具 make/Makefile

【形成可执行文件】

【清理文件】

【make】

【ACM时间】

【伪目标】

【特殊符号】

版本控制器 git

git clone

git add

git commit -m

git push

git log

git status

.gitigore

调试器 gdb

debug,release

gdb

q(quit)

l(list)

l n

l 0

l 函数名

b(break) 行号

b 函数名

i(info) b

d(delete) 断点编号

r(run)

n(next)

s(step)

p 变量

p &

​编辑

display 变量

undisplay 编号

until n

finish

 c(continue)

disable 断点编号

enable 断点编号

bt(breaktrace)

i(info) locals


软件包管理器 yum

yum类似应用商店客户端,有人已经把软件写好放在服务器上了,通过yum找到服务器上的软件下载

软件操作

yum list

可以显示所有可下载软件,我们要找lrzsz软件

yum install

下载

yum remove

卸载

yum源

yum下载软件是通过下载链接下载的,存放下载链接的地方叫yum源。

这个是官方yum源,也就是存放一些比较通用的软件的下载链接

除了官方yum源还有扩展yum源,比如epel,扩展源需要自己下载

更新yum源本质是替换yum源文件 

编辑器 vim

作用是文本编写也就是写代码。

多模式

vim是一个多模式编辑器,当你打开vim默认模式是命令模式,所有的输入都是命令而不是文本输入,输入i命令可以切换到插入模式,这时候就可以文本输入了,写完想退出怎么办?先按esc变成命令模式,然后输入:命令进入底行模式,然后输入wq即可保存退出,w是单纯的保存,q是单纯的退出。

命令模式

上下左右定位

gg:光标定位到最开始的行

G:光标定位到最结尾的行

nG:光标定位到第n行

^:光标定位到当前行的开始位置

$:光标定位到当前行的结尾位置

b, w:光标以单词为单位进行左右移动,可跨行

h, j, k, l:左,下,上,右,光标以字符单位移动

操作

(n)yy:复制光标所在行(或从这行开始复制n行)

(n)dd:剪切或删除光标所在行(n行)

(n)x:删除光标所在字符(n个)

(n)p:粘贴n行到光标的下一行

u:撤销

Ctrl r:对撤销进行撤销

~:切换光标位置的大小写

(n)r:对光标字符进行替换或替换多个

R:进入替换模式,对光标内容进行替换

多文件操作

vs:进入底行模式然后vs加文件名可以打开多个文件窗口

Ctrl ww:光标切换到其他窗口

底行模式

:进入底行模式

wq保存退出

!加指令,可以在底行模式调用外部指令

set nu, 显示行号,set nonu, 去掉行号

vim配置

vimrc是配置文件,如果没有的话自己创建,vim启动时会执行里面的配置选项

每个用户的vim配置文件是独立的,不会互相影响,不建议修改root的vim配置

【一键配置】

直接复制到指令行执行

curl -sLf https://gitee.com/HGtz2222/VimForCpp/raw/master/install.sh -o ./install.sh && bash ./install.sh

编译器 gcc/g++

gcc只能编译C语言,g++可以编译C/C++

编译后会形成一个可执行文件,名字默认为a.out,./a.out运行

编译四步骤

从文本程序到二进制程序需要经过四个步骤

一,预处理:去注释,头文件展开,条件编译,宏替换。

二,编译:把代码转成汇编

三,汇编:把汇编转成二进制

四,链接:将目标文件和库进行连接形成可执行文件

gcc选项

不加任何选项,默认生成并输出到a.out

-o

是指要输出到哪个文件,如果没有就创建

-E 

将预处理做完就停下来

-S

将编译做完就停下来

-c

将汇编做完就停下来,生成的.o文件叫可重定位目标二进制文件,简称目标文件

最后一步,链接,将目标文件和库进行连接形成可执行文件,库提供方法的实现,本质是一个文件

-g

选择debug模式,体积会比release大

自动化构建工具 make/Makefile

make是一条指令,Makefile是一个文件,

mycode依赖mycode.c,根据依赖关系完成依赖方法上面的行为,

【形成可执行文件】

查看依赖的文件是否存在,如果不存在,会递归式的根据依赖关系形成目标文件,make会自动推导makefile的依赖关系

【清理文件】

【make】

make指令默认会执行第一个要形成的目标文件,其它的目标文件要在make后面指定名称

多次使用make不会编译,代码有修改才可以编译,这样可以提高编译效率,但这是怎么做到的?

首页,先有源文件才有可执行文件,所以源文件的最后修改时间一定比可执行文件早,那么如果你修改了源文件,则源文件的最后修改时间就会变得比可执行文件晚,通过比较时间来判断是否修改过,从而判断是否需要再次编译。

【ACM时间】

stat:查看时间

Access:最近访问时间

Modify:最近‘文件内容’修改时间

Change:最近‘文件属性'修改时间

由于Access的改变过于频繁会不断修改这个在磁盘中的文件的属性,所以有个计数器当访问到一定次数才修改一次,touch如果跟一个已存在的文件名,那么它会把这个文件的时间全部更新

【伪目标】

make会根据源文件和目标文件的时间新旧判断是否需要对依赖关系进行编译。

如果我不管时间就是要让依赖关系总是编译呢?

答:用 .PHONY: 修饰,被修饰的文件叫伪目标文件,它总是被执行

清理的工作需要总是被执行,一般用来修饰clean

【特殊符号】

$@ 表示冒号左边的内容

$^ 表示冒号右边的内容

在依赖方法前面加@可以取消回显

版本控制器 git

git是具有网络功能的版本控制器,开源的,client和server一体的,

git clone

把远端仓库克隆到本地

git add

把文件放在预存区

git commit -m

提交到本地仓库,并且要写提交日志

git push

提交到远端仓库

git log

查看提交记录

git status

查看是否有文件需要操作

.gitigore

文件内容包含了不想要的文件后缀,提交文件的时候可以过滤对应的文件

调试器 gdb

debug,release

发布软件有两种模式debug模式和release模式。

dubug可以被调式,release不能,因为前者在形成可执行程序的时候有调试信息,后者主要面向用户,不需要调试。

gcc默认编译模式是release,如果要debug发布需要-g。

debug多携带了调试信息,体积也会大一点。

gdb

后面跟文件进入调试

q(quit)

退出

l(list)

查看代码

l n

查看第n行的代码

l 0

空指令回车会执行上一条指令,配合l 0可以查看全部代码

l 函数名

看对应函数

b(break) 行号

在19行打断点

指定文件名的行号

b 函数名

在函数名的位置打断点

指定文件名

i(info) b

查看断点信息

d(delete) 断点编号

根据断点编号删除断点

r(run)

启动当前程序,遇到断点停下来

n(next)

逐过程,不进入函数内部

s(step)

逐语句,进入函数内部

p 变量

查看一个变量

p &

看地址

display 变量

常显示变量

undisplay 编号

去掉对应常显示变量


 

until n

跳到第n行

finish

当你在一个函数中,finish表示跑完这个函数就停下来

 c(continue)

从一个断点到下一个断点

disable 断点编号

关闭断点,让断点不起作用

enable 断点编号

打开断点

bt(breaktrace)

查看调用堆栈

i(info) locals

查看局部变量


http://www.kler.cn/a/386265.html

相关文章:

  • 自动驾驶系列—从数据采集到存储:解密自动驾驶传感器数据采集盒子的关键技术
  • FPGA学习(10)-数码管
  • 计算机网络 (1)互联网的组成
  • LeetCode题解:5.最长回文子串【Python题解超详细,中心拓展、动态规划、暴力解法】
  • 用友U8-Cloud uapbd.refdef.query sql注入漏洞复现
  • fastadmin多个表crud连表操作步骤
  • 前端必知必会-JavaScript数组方法(上)
  • GitHub中搜索项目方法
  • 【学习笔记】Kylin-Desktop-V10-SP1 麒麟系统知识5——网络设置
  • 从入门到精通:如何在Vue项目中有效运用el-image-viewer
  • 网络自动化03:简单解释send_config_set方法并举例
  • Docker 基础命令简介
  • Hive 实现查询用户连续三天登录记录
  • 【Ubuntu学习】Ubuntu无法使用vim命令编辑
  • 线程隔离和熔断降级并配置对应的服务降级
  • Wecom酱搭建企业微信发送消息
  • Leetcode:26. 删除有序数组中的重复项——Java快慢指针暴力解法
  • 华为云计算HCIE-Cloud Computing V3.0试验考试北京考场经验分享
  • 实战项目:通过自我学习让AI学习五子棋 - 1 - 项目定义
  • 【C语言】文件操作(超万字解析+形象图解)
  • Jest进阶知识:React组件的单元测试
  • 万字长文详解JavaScript基础语法--前端--前端样式--JavaWeb
  • redis 写入权限配置
  • 常用的 Lambda 表达式案例解析
  • 《 C++ 修炼全景指南:十九 》想懂数据库?深入 B 树的世界,揭示高效存储背后的逻辑
  • 不加锁解决线程安全