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

Linux - 基础工具使用

文章目录

    • 一、yum
      • 1、介绍
      • 2、功能
      • 3、语法
      • 4、使用
    • 二、rzsz
      • 1、安装rzsz的指令
      • 2、介绍
      • 3、使用
    • 三、vim基础使用
      • 1、介绍
      • 2、基础使用
    • 四、gcc/g++使用
      • 1、生成可执行文件过程
      • 2、语法
      • 3、常用选项
      • 4、编译过程
      • 5、动静态库
      • 6、包含头文件的多文件编译
      • 7、链接外部库


一、yum

1、介绍

Linux中的yum是一个强大的软件包管理器,全称为Yellow dog Updater, Modified。它在Fedora、RedHat以及基于RPM包管理系统的其他Linux发行版(如CentOS)中广泛使用。yum基于RPM包管理,但提供了更高级的功能,如自动解决软件包依赖关系、从指定服务器自动下载RPM包并进行安装等。

2、功能

yum命令提供了查找、安装、更新、删除以及管理软件包仓库等功能的命令行接口。通过yum,用户可以轻松地管理系统中的软件包,无需手动下载和处理复杂的依赖关系。

3、语法

yum [options] [command] [package ...]

options:可选参数,用于修改命令的行为,如-y(自动回答yes)、-q(静默模式)、-v(详细模式)等。
command:要执行的操作,如install(安装)、update(更新)、remove(删除)等。
package:软件包名称,是执行操作时的目标对象。

4、使用

使用yum命令时需要是root用户或者普通用户提权。

(1)安装软件

yum install package_name

package_name:软件包名称。

(2)更新系统上的全部软件

yum update

(3)更新系统上指定的软件包

yum update package_name

(4)删除软件包

yum remove package_name

(5)搜索包含特定关键字的软件包

yum search keyword

(6)列出所有已安装的软件包

yum list installed

(7)列出所有可用的软件包

yum list available

(8)已安装的软件包中查找lrzsz:通过管道加grep指令

yum list installed | grep lrzsz

(9)清理所有缓存的包和头文件

yum clean all

(10)仅清理缓存的包

yum clean packages

(11)仅清理缓存的头文件

yum clean headers

二、rzsz

1、安装rzsz的指令

sudo yum install lrzsz

2、介绍

rzsz是一个在Linux环境中常用的文件上传下载工具,它允许用户通过终端界面在本地和远程系统之间传输文件。rz和sz命令通常与串口通信或SSH连接一起使用,特别是在没有图形化界面的服务器上工作时非常方便。

3、使用

  1. 从Windows传输文件到Linux(rz命令)
    方法一:直接拖拽文件(如果终端软件支持)。
    方法二:在Linux终端中输入rz命令,然后Windows资源管理器(或文件管理器)会被打开。在Windows中选择要传输的文件,点击“打开”或“确定”,文件就会被上传到Linux服务器中。
rz	//输入回车后会自动跳出
  1. 从Linux传输文件到Windows(sz命令)
    在Linux终端中,使用sz命令后跟文件名来发送文件到本地Windows机器。
sz filename

三、vim基础使用

1、介绍

Vim是一个功能强大的文本编辑器,广泛用于Linux和Unix系统中,也支持在Windows系统中通过不同的方式使用。Vim具有三种主要模式:普通模式(也称为命令模式)、插入模式和末行模式。

2、基础使用

(1)普通模式(也称为命令模式)
普通模式进入插入模式

按「i」切换进入插入模式「insert mode」,
按“i”进入插入模式后是从光标当前位置开始输入文件;
按「a」进入插入模式后,是从目前光标所在位置的下一个位置开始输入文字; 按「o」进入插入模式后,是插入新的一行,从行首开始输入文字。

移动光标:

vim可以直接用键盘上的光标来上下左右移动,但正规的vim是用小写英文字母「h」、「j」、「k」、「l」,分别控制光标左、下、上、右移一格。
按「G」:移动到文章的最后
按「$」:移动到光标所在行的“行尾”
按「^」:移动到光标所在行的“行首”
按「w」:光标跳到下个字的开头
按「e」:光标跳到下个字的字尾
按「b」:光标回到上个字的开头
按「#l」:光标移到该行的第#个位置,如:5l,56l
按[gg]:进入到文本开始 按[shift+g]:进入文本末端
按「ctrl」+「b」:屏幕往“后”移动一页
按「ctrl」+「f」:屏幕往“前”移动一页 按「ctrl」+「u」:屏幕往“后”移动半页 按「ctrl」+「d」:屏幕往“前”移动半页

删除文字

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

复制

「yw」:将光标所在之处到字尾的字符复制到缓冲区中。
「#yw」:复制#个字到缓冲区 「yy」:复制光标所在行到缓冲区。
「#yy」:例如,「6yy」表示拷贝从光标所在的该行“往下数”6行文字。
「p」:将缓冲区内的字符贴到光标所在位置。注意:所有与“y”有关的复制命令都必须与“p”配合才能完成复制与粘贴功能。

替换

「r」:替换光标所在处的字符
「R」:替换光标所到之处的字符,直到按下「ESC」键为止。

撤销上一次操作

「u」:如果您误执行一个命令,可以马上按下「u」,回到上一个操作。按多次“u”可以执行多次回复。
「ctrl + r」: 撤销的恢复

更改

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

跳至指定的行

「ctrl」+「g」列出光标所在行的行号。
「#G」:例如,「15G」,表示移动光标至文章的第15行行首。

(2)插入模式

在普通模式下,通过输入i、a、o等命令可以进入插入模式,此时可以输入文本。
快捷键示例:
i:在当前光标处进入插入模式。
a:在当前光标后一个字符处进入插入模式
o:在当前行下方新加一行并进入插入模式。
按Esc键退出插入模式回到普通模式。

(3)末行模式
在使用末行模式之前,请记住先按「ESC」键确定您已经处于正常模式,再按「:」冒号即可进入末行模式。

列出行号「set nu」: 输入「set nu」后,会在文件中的每一行前面列出行号。

跳到文件中的某一行「#」:

「#」号表示一个数字,在冒号后输入一个数字,再按回车键就会跳到该行了,如输入数字15,再回车,就会跳到文章的第15行。

查找字符「/关键字」:

先按「/」键,再输入您想寻找的字符,如果第一次找的关键字不是您想要的,可以一直按「n」会往后寻找到您要的关键字为止。(向上查找)
「?关键字」:先按「?」键,再输入您想寻找的字符,如果第一次找的关键字不是您想要的,可以一直按「n」会往前寻找到您要的关键字为止。(向下查找)

保存文件

「w」: 在冒号输入字母「w」就可以将文件保存起来 离开vim
「q」:按「q」就是退出,如果无法离开vim,可以在「q」后跟一个「!」强制离开vim。
「wq」:一般建议离开时,搭配「w」一起使用,这样在退出的时候还可以保存文件。

(4)注释和去注释
注释:
Ctrl+v 进入块选择模式,然后使用hjkl移动光标进行选择,在按shift+i,进行注释,这样选择的行就会跟着注释。
在这里插入图片描述

去注释:
Ctrl+v进入块选择模式,然后使用hjkl移动光标选择,然后按下d即可。
在这里插入图片描述

四、gcc/g++使用

1、生成可执行文件过程

  1. 预处理(进行宏替换)
  2. 编译(生成汇编)
  3. 汇编(生成机器可识别代码)
  4. 连接(生成可执行文件或库文件

2、语法

gcc [选项] 要编译的文件 [选项] [目标文件] 链接库外部库/头文件目录
g++ [选项] 要编译的文件 [选项] [目标文件] 链接库外部库/头文件目录

3、常用选项

-E 只激活预处理,这个不生成文件,你需要把它重定向到一个输出文件里面
-S 编译到汇编语言不进行汇编和链接
-c 编译到目标代码
-o 文件输出到 文件
-static 此选项对生成的文件采用静态链接
-g 生成调试信息。GNU 调试器可利用该信息。
-shared此选项将尽量使用动态库,所以生成文件比较小,但是需要系统由动态库.
-O0-O1-O2-O3编译器的优化选项的4个级别,
-O0表示没有优化,
-O1为缺省值,
-O3优化级别最高
-w 不生成任何警告信息。
-Wall 生成所有警告信息。
-i(大写):添加头文件搜索路径。如: g++ -o test test.c -I test.h
-L:添加库文件搜索路径。
-l:链接指定的库。
标准选项:
-std=c++98、-std=c++11、-std=c++14、-std=c++17、-std=c++20 等,用于指定C++标准版本

4、编译过程

预处理(进行宏替换) :
预处理功能主要包括宏定义,文件包含,条件编译,去注释等。 预处理指令是以#号开头的代码行。 实例: gcc –E hello.c –o hello.i 选项“-E”,该选项的作用是让 gcc 在预处理结束后停止编译过程。 选项“-o”是指目标文件,“.i”文件为已经过预处理的C原始程序。(只能处理一个源文件)
编译(生成汇编):
在这个阶段中,gcc首先要检查代码的规范性、是否有语法错误等,以确定代码的实际要做的工作,在检查 无误后,gcc 把代码翻译成汇编语言。 用户可以使用“-S”选项来进行查看,该选项只进行编译而不进行汇编,生成汇编代码。 实例: gcc –S hello.i –o hello.s( 只能处理一个源文件)
汇编(生成机器可识别代码): 汇编阶段是把编译阶段生成的“.s”文件转成目标文件 读者在此可使用选项“-c”就可看到汇编代码已转化为“.o”的二进制目标代码了 实例: gcc –c hello.s –o hello.o(只能处理一个源文件)
连接(生成可执行文件或库文件): 在成功编译之后,就进入了链接阶段。 实例: gcc hello.o –o hello (可以对多个文件进行链接)

5、动静态库

静态库是指编译链接时,把库文件的代码全部加入到可执行文件中,因此生成的文件比较大,但在运行时也就不再需要库文件了。其后缀名一般为“.a”。
动态库与之相反,在编译链接时并没有把库文件的代码加入到可执行文件中,而是在程序执行时由运行时链接文件加载库,这样可以节省系统的开销。动态库一般后缀名为“.so”,如前面所述libc.so.6
就是动态库。gcc 在编译时默认使用动态库。完成了链接之后,gcc 就可以生成可执行件,如下所示。gcc hello.o –o hellogcc默认生成的二进制程序,是动态链接的,这点可以通过gcc选项 file 命令验证。

file hellogcc

显示信息:
在这里插入图片描述

6、包含头文件的多文件编译

编译有头文件的文件时需要通过 -I(i的大写):添加头文件搜索路径。
如:编译源文件:ProgressBar.c test.c ,这些源文件包含了ProgressBar.h

gcc ProgressBar.c test.c -o test -I ./

在这里插入图片描述

7、链接外部库

在使用g++编译C++程序时,如果需要链接到外部库,你需要确保编译器(实际上是链接器)能够找到这些库文件,并将它们与你的程序一起链接。这通常涉及到指定库文件的搜索路径(使用-L选项)和指定要链接的库(使用-l选项,注意不包括前缀lib和后缀如.so、.a等)。
-L:指定库文件的搜索路径。这告诉链接器在哪些目录中查找指定的库文件。
-l:指定要链接的库名(不包括前缀lib和后缀,如.so、.a等)。链接器会在-L指定的路径或标准库路径中查找相应的库文件。

假设你有一个名为myapp.cpp的C++源文件,它依赖于一个名为mylib的外部库,该库文件位于在标准库目录下,并且你想要生成一个名为myapp的可执行文件:

g++  myapp.cpp  -o myapp    -lmylib

这里,mylib是库名,链接器会查找名为libmylib.so(在Linux上对于共享库)或libmylib.a(对于静态库)的文件。

假设你有一个名为myapp.cpp的C++源文件,它依赖于一个名为mylib的外部库,该库文件位于/usr/local/lib目录下,并且你想要生成一个名为myapp的可执行文件。

g++ myapp.cpp  -o myapp  -L/usr/local/lib -lmylib

这条命令会编译myapp.cpp,告诉链接器在/usr/local/lib目录下查找库文件,并链接名为mylib的库。

相关文章:

Linux - 基础工具使用

文章目录 一、yum1、介绍2、功能3、语法4、使用 二、rzsz1、安装rzsz的指令2、介绍3、使用 三、vim基础使用1、介绍2、基础使用 四、gcc/g使用1、生成可执行文件过程2、语法3、常用选项4、编译过程5、动静态库6、包含头文件的多文件编译7、链接外部库 一、yum 1、介绍 Linux中…...

理解线程id和简单封装原生线程库

一、理解线程id 首先我们要知道给用户提供的线程id不是内核里面LWP(轻量级进程id),而是pthread库自己维护的一个唯一值。 我们理解为什么线程id不是内核里面LWP,因为用户没有权限使用内核里面的字段,那是专门给OS管理…...

Unified 阻抗控制 architecture、framework、approach

Unified 阻抗控制(Unified Impedance Control)作为一种控制策略,其architecture(架构)、framework(框架)和approach(方法)为: 一、Unified 阻抗控制 Archite…...

Java后端面试题(mq相关)(day9)

目录 为什么用MQ? 异步 、削峰、解耦1. 异步处理2. 解耦3. 削峰填谷 Exchange类型什么是死信队列?如何保证消息的可靠性?RabbitMQ中如何解决消息堆积问题?RabbitMQ中如何保证消息有序性?如何防止消息重复消费?(如何保证消息幂等…...

算法-华为OD机试-识别有效的IP地址和掩码并进行分类统计

1.描述 见牛客网 https://www.nowcoder.com/practice/de538edd6f7e4bc3a5689723a74356822. 分析 根据题目要求,分为以下几步 1. 提取IP地址和子网掩码 我们首先需要拆分输入的每一行,分别提取IP地址和子网掩码,并检查它们的合法性。 2.…...

钉钉开发网页应用JSAPI前端授权鉴权nodejs实现

钉钉开发网页应用JSAPI前端授权鉴权nodejs实现 使用钉钉进行H5网页开发的时候,需要调用一些钉钉提供具有原生能力的api,要调用这些api需要进行jsapi授权。 详见官方文档(可选)开发网页应用前端 - 钉钉开放平台 (dingtalk.com) 官方…...

uniapp 自定义全局弹窗

自定义全局弹窗可在js和.vue文件中调用&#xff0c;unipop样式不满足&#xff0c;需自定义样式。 效果图 目录结构 index.vue <template><view class"uni-popup" v-if"isShow"><view class"uni-popup__mask uni-center ani uni-cust…...

element+-ui图片无法使用--安装

element-ui图片无法使用 安装npm install element-plus/icons-vue 注册 // main.jsimport * as ElementPlusIconsVue from element-plus/icons-vueconst app createApp(App) for (const [key, component] of Object.entries(ElementPlusIconsVue)) {app.component(key, compo…...

Python编码系列—Python ORM(对象关系映射):高效数据库编程实践

&#x1f31f;&#x1f31f; 欢迎来到我的技术小筑&#xff0c;一个专为技术探索者打造的交流空间。在这里&#xff0c;我们不仅分享代码的智慧&#xff0c;还探讨技术的深度与广度。无论您是资深开发者还是技术新手&#xff0c;这里都有一片属于您的天空。让我们在知识的海洋中…...

一次日志记录中使用fastjson涉及到ByteBuffer的教训

背景 目前本人在公司负责的模块中&#xff0c;有一个模块是负责数据同步的&#xff0c;主要是将我们数据产线使用的 AWS Dynamodb 同步的我们的测试QA 的环境的 MongoDB 的库中&#xff0c;去年开始也提供了使用 EMR 批量同步的功能&#xff0c;但是有时候业务也需要少量的数据…...

掌握TCP连接管理与流量控制:从零开始

文章目录 1. TCP连接管理1.1 三次握手&#xff08;Three-way Handshake&#xff09;1.2 四次挥手&#xff08;Four-way Handshake&#xff09;1.3 TCP连接管理的重要性 2. TCP流量控制2.1 滑动窗口&#xff08;Sliding Window&#xff09;2.2 拥塞控制&#xff08;Congestion C…...

python提取b站视频的音频(提供源码

如果我想开一家咖啡厅&#xff0c;那么咖啡厅的音乐可得精挑细选&#xff01;又假设我非常喜欢o叔&#xff0c;而o叔只在b站弹钢琴&#xff0c;那这时候我就得想方设法把b站的视频转为音频咯&#xff01; 一、首先打开网页版bilibili&#xff0c;按F12&#xff1a; 二、刷新页面…...

嵌入式Linux ,QT5 鼠标键盘设备参数指定环境变量的方法

根文件系统中&#xff0c;一般用mdev来管理设备&#xff0c;不像udev方便&#xff0c;有时候在执行rcS脚本的时候因为&#xff0c;太快&#xff0c;有些设备比如鼠标还没在/dev/input中生成设备文件&#xff0c;最好使用前用mdev -s扫描并等待几秒钟&#xff0c;然后就可以在in…...

C语言钥匙迷宫2.0

目录 开头程序程序的流程图程序游玩的效果结尾 开头 大家好&#xff0c;我叫这是我58。废话不多说&#xff0c;咱们直接开始。 程序 #define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> #include <string.h> #include <Windows.h> enum color {Y,B,R …...

【多线程】初步认识Thread类及其应用

&#x1f490;个人主页&#xff1a;初晴~ &#x1f4da;相关专栏&#xff1a;多线程 / javaEE初阶 上篇文章我们简单介绍了什么是进程与线程&#xff0c;以及他们之间的区别与联系&#xff0c;实际应用中还是以多线程编程为主的&#xff0c;所以这篇文章就让我们更加深入地去剖…...

algorithm算法库学习之——划分操作和排序操作

algorithm此头文件是算法库的一部分。本篇介绍划分操作和排序操作。 划分操作 is_partitioned (C11) 判断范围是否已按给定的谓词划分 (函数模板) partition 将范围中的元素分为两组 (函数模板) partition_copy (C11) 复制一个范围&#xff0c;将各元素分为两组 (函数模板) st…...

XSS实验记录

目录 XXS地址 实验过程 Ma Spaghet Jeff Ugandan Knuckles Ricardo Milos Ah Thats Hawt Ligma Mafia Ok, Boomer XXS地址 XSS Game - Learning XSS Made Simple! | Created by PwnFunction 实验过程 Ma Spaghet 要求我们弹出一个alert(1337)sandbox.pwnfuncti…...

Cortex-A7的GIC(全局中断控制器)使用方法(7):基于stm32MP135的GIC配置中断效果测试

0 参考资料 STM32MP13xx参考手册.pdf&#xff08;RM0475&#xff09; ARM Generic Interrupt Controller Architecture version 2.0 - Architecture Specification.pdf 1 GIC配置中断效果测试 前面我们已经实现了GIC的配置&#xff0c;为了验证GIC是否配置有效&#xff0c;本例…...

c++动态数组new和delete

文章目录 动态数组的使用大全1. **基本创建和初始化**2. **动态调整大小**3. **动态数组的使用与标准库 std::vector**4. **动态数组作为函数参数**输出 5. **使用动态数组存储用户输入** 动态数组的使用大全 1. 基本创建和初始化 示例&#xff1a; #include <iostream&g…...

Redis热点知识速览(redis的数据结构、高性能、持久化、主从复制、集群、缓存淘汰策略、事务、Pub/Sub、锁机制、常见问题等)

Redis是一个开源的、使用内存作为存储的、支持数据结构丰富的NoSQL数据库。它的高性能、灵活性和简单易用使其在许多场景下成为首选的缓存解决方案。以下是Redis的常见和热点知识总结。 数据结构 Redis支持五种基本数据结构&#xff1a; String&#xff1a;字符串是Redis中最…...

【kafka】Golang实现分布式Masscan任务调度系统

要求&#xff1a; 输出两个程序&#xff0c;一个命令行程序&#xff08;命令行参数用flag&#xff09;和一个服务端程序。 命令行程序支持通过命令行参数配置下发IP或IP段、端口、扫描带宽&#xff0c;然后将消息推送到kafka里面。 服务端程序&#xff1a; 从kafka消费者接收…...

脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)

一、数据处理与分析实战 &#xff08;一&#xff09;实时滤波与参数调整 基础滤波操作 60Hz 工频滤波&#xff1a;勾选界面右侧 “60Hz” 复选框&#xff0c;可有效抑制电网干扰&#xff08;适用于北美地区&#xff0c;欧洲用户可调整为 50Hz&#xff09;。 平滑处理&…...

【第二十一章 SDIO接口(SDIO)】

第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...

【单片机期末】单片机系统设计

主要内容&#xff1a;系统状态机&#xff0c;系统时基&#xff0c;系统需求分析&#xff0c;系统构建&#xff0c;系统状态流图 一、题目要求 二、绘制系统状态流图 题目&#xff1a;根据上述描述绘制系统状态流图&#xff0c;注明状态转移条件及方向。 三、利用定时器产生时…...

ServerTrust 并非唯一

NSURLAuthenticationMethodServerTrust 只是 authenticationMethod 的冰山一角 要理解 NSURLAuthenticationMethodServerTrust, 首先要明白它只是 authenticationMethod 的选项之一, 并非唯一 1 先厘清概念 点说明authenticationMethodURLAuthenticationChallenge.protectionS…...

涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战

“&#x1f916;手搓TuyaAI语音指令 &#x1f60d;秒变表情包大师&#xff0c;让萌系Otto机器人&#x1f525;玩出智能新花样&#xff01;开整&#xff01;” &#x1f916; Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制&#xff08;TuyaAI…...

深度学习习题2

1.如果增加神经网络的宽度&#xff0c;精确度会增加到一个特定阈值后&#xff0c;便开始降低。造成这一现象的可能原因是什么&#xff1f; A、即使增加卷积核的数量&#xff0c;只有少部分的核会被用作预测 B、当卷积核数量增加时&#xff0c;神经网络的预测能力会降低 C、当卷…...

安宝特方案丨船舶智造的“AR+AI+作业标准化管理解决方案”(装配)

船舶制造装配管理现状&#xff1a;装配工作依赖人工经验&#xff0c;装配工人凭借长期实践积累的操作技巧完成零部件组装。企业通常制定了装配作业指导书&#xff0c;但在实际执行中&#xff0c;工人对指导书的理解和遵循程度参差不齐。 船舶装配过程中的挑战与需求 挑战 (1…...

【从零学习JVM|第三篇】类的生命周期(高频面试题)

前言&#xff1a; 在Java编程中&#xff0c;类的生命周期是指类从被加载到内存中开始&#xff0c;到被卸载出内存为止的整个过程。了解类的生命周期对于理解Java程序的运行机制以及性能优化非常重要。本文会深入探寻类的生命周期&#xff0c;让读者对此有深刻印象。 目录 ​…...

如何更改默认 Crontab 编辑器 ?

在 Linux 领域中&#xff0c;crontab 是您可能经常遇到的一个术语。这个实用程序在类 unix 操作系统上可用&#xff0c;用于调度在预定义时间和间隔自动执行的任务。这对管理员和高级用户非常有益&#xff0c;允许他们自动执行各种系统任务。 编辑 Crontab 文件通常使用文本编…...