当前位置: 首页 > 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中最…...

【C++浅析】lambda表达式:基本结构 使用示例

基本结构 [捕获列表](参数列表) -> 返回类型 { // 函数体 } 捕获列表 ([ ]): 用于指定外部变量的捕获方式。可以&#xff1a; 通过值捕获&#xff1a;[x]通过引用捕获&#xff1a;[&x]捕获所有变量通过值&#xff1a;[]捕获所有变量通过引用&#xff1a;[&]自…...

利用Redis获取权限的多种方式

更多实战内容&#xff0c;可前往无问社区查看http://www.wwlib.cn/index.php/artread/artid/10333.html Redis是我们在实战中经常接触到的一款数据库&#xff0c;因其在前期打点中被利用后可直接影响服务器安全所以在攻防过程中也备受红队关注&#xff0c;在本文中会重点分享一…...

LeetCode - LCR 146- 螺旋遍历二维数组

LCR 146题 题目描述&#xff1a; 给定一个二维数组 array&#xff0c;请返回「螺旋遍历」该数组的结果。 螺旋遍历&#xff1a;从左上角开始&#xff0c;按照 向右、向下、向左、向上 的顺序 依次 提取元素&#xff0c;然后再进入内部一层重复相同的步骤&#xff0c;直到提取完…...

如何获取Bing站长工具API密钥

Bing站长工具近期悄然上线了网站URL推送功能&#xff0c;似乎有意跟随百度的步伐。这个新功能允许站长通过API向Bing提交链接数据&#xff0c;当然也可以通过Bing站长工具手动提交。 本文将详细介绍如何通过Bing站长工具生成用于网站链接推送的API密钥。 首先&#xff0c;访问…...

NC 调整数组顺序使奇数位于偶数前面(一)

系列文章目录 文章目录 系列文章目录前言 前言 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站&#xff0c;这篇文章男女通用&#xff0c;看懂了就去分享给你的码吧。 描述 输入一个长度…...

Unity异步把图片数据从显存下载到内存(GPU->CPU)

Unity异步把图片数据从显存下载到内存&#xff08;GPU->CPU&#xff09; 1.c#核心代码 using System.Collections; using System.Collections.Generic; using Unity.Collections; using UnityEditor.PackageManager.Requests; using UnityEngine; using UnityEngine.Rende…...

【MySQL】C/C++连接MySQL客户端,MySQL函数接口认知,图形化界面进行连接

【MySQL】C/C引入MySQL客户端 安装mysqlclient库mysql接口介绍初始化mysql_init链接数据库mysql_real_connect下发mysql命令mysql_query获取出错信息mysql_error获取执行结果mysql_store_result获取结果行数mysql_num_rows获取结果列数mysql_num_fields判断结果列数mysql_field…...

Wireshark分析工具

简单用例 首先打开软件&#xff0c;左上角点文件&#xff0c;选中要分析的文件列表。 导入用tcpdump抓的包后进行分析&#xff0c;这里要输入过滤条件&#xff0c;对网络包进行一定的过滤处理。&#xff08;这里172网段是阿里云的地址&#xff0c;用自己写的python2脚本对阿里…...

linux网络配置脚本

通过脚本&#xff0c;设置静态ip以及主机名 因为企业9的网络配置文件和企业7的不一样所以&#xff0c;我们以rhel9和rhel7为例 rhel7/centos7/openeuler #!/bin/bash cat > /etc/sysconfig/network-scripts/ifcfg-$1 << EOF DEVICE$1 ONBOOTyes BOOTPROTOnone IPAD…...

IT管理:我与IT的故事4

首先&#xff0c;宣布一个“坏消息”。最近Herry童鞋的办公邮箱似乎有些“抽抽”了&#xff0c;所以邮件出现了延迟、拒收、被拒收、甚至是石沉大海的现象。为了能够更好的和大家进行沟通&#xff0c;大家如果发邮件到我办公邮箱的时候&#xff0c;若不嫌麻烦&#xff0c;可以抄…...