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

【Linux】Linux工具(1)

3.Linux工具(1)

文章目录

  • 3.Linux工具(1)
      • Linux 软件包管理器 yum
        • 什么是软件包
        • 关于 rzsz
        • 查看软件包——yum list命令
        • 如何安装软件
        • 如何卸载软件
        • 补充——yum如何找到要安装软件的下载地址
      • Linux开发工具
        • Linux编辑器-vim使用
          • 1.vim的基本概念
          • 2.vim的基本操作
          • 3.简单vim配置
      • Linux编译器-gcc/g++使用
        • 1.背景知识
        • 2.gcc如何完成
          • 预处理(进行宏替换)
          • 编译(生成汇编)
          • 汇编(生成机器可识别代码)
          • 连接(生成可执行文件或库文件)
          • 动态库
          • 动态库、动态链接、静态库与静态链接的对比总结
          • gcc选项

Linux 软件包管理器 yum

什么是软件包
  • 在Linux下安装软件, 一个通常的办法是下载到程序的源代码, 并进行编译, 得到可执行程序.
  • 但是这样太麻烦了, 于是有些人把一些常用的软件提前编译好, 做成软件包(可以理解成windows上的安装程序)放在一个服务器上, 通过包管理器可以很方便的获取到这个编译好的软件包, 直接进行安装.
  • 软件包和软件包管理器, 就好比 “App” 和 “应用商店” 这样的关系.
  • yum(Yellow dog Updater, Modified)是Linux下非常常用的一种包管理器. 主要应用在Fedora, RedHat,Centos等发行版上.
关于 rzsz

这个工具用于 windows 机器和远端的 Linux 机器通过 XShell 传输文件,安装完毕之后可以通过拖拽的方式将文件上传过去.

  • 注意事项
    关于 yum 的所有操作必须保证主机(虚拟机)网络畅通!!!
    可以通过 ping 指令验证
查看软件包——yum list命令

通过 yum list 命令可以罗列出当前一共有哪些软件包. 由于包的数目可能非常之多, 这里我们需要使用 grep 命令只筛选出我们关注的包. 例如:

[root@hcss-ecs-b735 dir2]# yum list | grep gcc-c++
gcc-c++.x86_64                           4.8.5-44.el7                  @base    
avr-gcc-c++.x86_64                       4.9.2-1.el7                   epel     
gcc-c++-aarch64-linux-gnu.x86_64         4.8.5-16.el7.1                epel     
gcc-c++-alpha-linux-gnu.x86_64           4.8.5-16.el7.1                epel     
gcc-c++-arm-linux-gnu.x86_64             4.8.5-16.el7.1                epel     
gcc-c++-avr32-linux-gnu.x86_64           4.8.5-16.el7.1                epel     
gcc-c++-bfin-linux-gnu.x86_64            4.8.5-16.el7.1                epel     
gcc-c++-c6x-linux-gnu.x86_64             4.8.5-16.el7.1                epel     
gcc-c++-cris-linux-gnu.x86_64            4.8.5-16.el7.1                epel     
gcc-c++-frv-linux-gnu.x86_64             4.8.5-16.el7.1                epel     
gcc-c++-h8300-linux-gnu.x86_64           4.8.5-16.el7.1                epel     
gcc-c++-hppa-linux-gnu.x86_64            4.8.5-16.el7.1                epel     
gcc-c++-hppa64-linux-gnu.x86_64          4.8.5-16.el7.1                epel     
gcc-c++-ia64-linux-gnu.x86_64            4.8.5-16.el7.1                epel     

注意:

  1. 软件包名称: 主版本号、次版本号、源程序发行号、软件包的发行号、主机平台、cpu架构
  2. x86_64 后缀表示64位系统的安装包, i686 后缀表示32位系统安装包. 选择包时要和系统匹配.
  3. el7 表示操作系统发行版的版本,el7 表示的是 centos7/redhat7. el6 表示 centos6/redhat6.
  4. 最后一列, base 表示的是 “软件源” 的名称, 类似于 “小米应用商店”, “华为应用商店” 这样的概念.
如何安装软件

通过 yum, 我们可以通过很简单的一条命令完成 gcc-c++ 的安装.

[root@hcss-ecs-b735 dir2]# yum install -y gcc-c++				#主要看这里
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
Resolving Dependencies
--> Running transaction check
---> Package gcc-c++.x86_64 0:4.8.5-44.el7 will be installed
--> Processing Dependency: libstdc++-devel = 4.8.5-44.el7 for package: gcc-c++-4.8.5-44.el7.x86_64
--> Running transaction check
---> Package libstdc++-devel.x86_64 0:4.8.5-44.el7 will be installed
--> Finished Dependency ResolutionDependencies Resolved=============================================================================================Package                    Arch              Version                  Repository       Size
=============================================================================================
Installing:gcc-c++                    x86_64            4.8.5-44.el7             base            7.2 M
Installing for dependencies:libstdc++-devel            x86_64            4.8.5-44.el7             base            1.5 MTransaction Summary
=============================================================================================
Install  1 Package (+1 Dependent package)Total download size: 8.7 M
Installed size: 25 M
Downloading packages:
(1/2): libstdc++-devel-4.8.5-44.el7.x86_64.rpm                        | 1.5 MB  00:00:00     
(2/2): gcc-c++-4.8.5-44.el7.x86_64.rpm                                | 7.2 MB  00:00:00     
---------------------------------------------------------------------------------------------
Total                                                         33 MB/s | 8.7 MB  00:00:00     
Running transaction check
Running transaction test
Transaction test succeeded
Running transactionInstalling : libstdc++-devel-4.8.5-44.el7.x86_64                                       1/2 Installing : gcc-c++-4.8.5-44.el7.x86_64                                               2/2 Verifying  : gcc-c++-4.8.5-44.el7.x86_64                                               1/2 Verifying  : libstdc++-devel-4.8.5-44.el7.x86_64                                       2/2 Installed:gcc-c++.x86_64 0:4.8.5-44.el7                                                              Dependency Installed:libstdc++-devel.x86_64 0:4.8.5-44.el7                                                      Complete!			#主要看这里

yum 会自动找到都有哪些软件包需要下载, 这时候敲 “y” 确认安装.(我这里由于使用了-y选项所以不需要再次确认来继续安装
出现 “complete” 字样, 说明安装完成.

注意事项:

  • 安装软件时由于需要向系统目录中写入内容, 一般需要 sudo 或者切到 root 账户下才能完成.
  • yum安装软件只能一个装完了再装另一个. 正在yum安装一个软件的过程中, 如果再尝试用yum安装另外一个软件, yum会报错.
    如果 yum 报错, 请自行百度.
如何卸载软件

仍然是一条命令:

yum remove [软件名]
补充——yum如何找到要安装软件的下载地址

当我们在使用yum下载软件的时候我们会发现,我们并不需要向yum提供详细的软件下载地址就可以直接通过软件名下载这个软件。这是因为yum有相应的配置文件,这个配置文件里面会记录yum其他软件有关的下载路径

[root@hcss-ecs-b735 dir2]# ls /etc/yum.repos.d/
CentOS-Base.repo       CentOS-fasttrack.repo  CentOS-Vault.repo          epel.repo.rpmnew
CentOS-CR.repo         CentOS-Media.repo      CentOS-x86_64-kernel.repo  epel-testing.repo
CentOS-Debuginfo.repo  CentOS-Sources.repo    epel.repo

对于如何切换yum源以及如何对虚拟机上的Linux系统配置yum源,可以在网上进行搜索。在网上找到yum源、直接下载在Linux服务器中的yum源配置文件位置

#!/bin/bash
##  备份 /etc/yum.repos.d/CentOS-Base.repo
sudo cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
##  更换为阿里源
sudo curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
##  安装epel
sudo yum install -y epel-release
##  使用阿里提供的epel源
sudo curl -o /etc/yum.repos.d/epel-7.repo  http://mirrors.aliyun.com/repo/epel-7.repo
##  清空yum缓存
sudo yum clean all
##  重建yum缓存
sudo yum makecache

Linux开发工具

Linux编辑器-vim使用

vim是一个多模式的编辑器,不是编译器(不能编译代码)

1.vim的基本概念

vim有很多种模式但这里只简要介绍三种最常用的模式,三种模式分别是命令模式(command mode)、插入模式(Insert mode)和底行模式(last line mode),各模式的功能区分如下:

在这里插入图片描述

  • 正常/普通/命令模式(Normal mode)
    控制屏幕光标的移动,字符、字或行的删除,移动复制某区段及进入Insert mode下,或者到 last line mode

  • 插入模式(Insert mode)
    只有在Insert mode下,才可以做文字输入,按「ESC」键可回到命令行模式。该模式是我们后面用的最频繁的编辑模式。

  • 末行模式(last line mode)
    文件保存或退出,也可以进行文件替换,找字符串,列出行号等操作。 在命令模式下,shift+: 即可进入该模式。要查看你的所有模式:打开vim,底行模式直接输入

2.vim的基本操作

vim的操作指令有点多,其实不需要刻意去记忆,用的多了自然就记住了,这里简单列举几个


1. 模式切换

Esc 退出其他模式。(进入正常模式)

[正常模式]切换至[插入模式]

  • i:光标前插入 这个用的最多

  • I:行首插入

  • a:光标后插入

  • A:行尾插入

  • o:下方新建行插入

  • O:上方新建行插入

  • v:字符选择

  • V:行选择

  • Ctrl+v:块选择

  • [正常模式]切换至[末行模式]
    「shift + ;」, 其实就是输入「:」


2. 光标移动

  • h ← / j ↓ / k ↑ / l → 这个基本不用,用键盘上的上下左右键就可以

  • 0:行首 / ^:第一个非空字符

  • $:行尾

  • gg:文件开头

  • G:文件末尾

  • 5G:5:跳转到第5行

  • Ctrl+f:向下翻页 / Ctrl+b:向上翻页

  • %:跳转到匹配的括号(如 {}, ()

  • w光标移动到下一个单词(连续英文字符串)

  • b光标移动到上一个单词(连续英文字符串)


3. 文本编辑

  • shift + r:进入替换模式,需要用EXC退回正常模式

  • x:删除光标指向的字符

  • shift + ~:大小写切换

  • shift + x:删除光标之前的字符

  • dw:删除到单词结尾

  • dd:删除整行(应该算是一种剪切

  • 3dd:删除3行

  • d$:删除到行尾

  • yy:复制当前行

  • 3yy:复制3行

  • p:粘贴到光标后 / P:粘贴到光标前

  • u:撤销

  • Ctrl+r:重做


4. 搜索与替换

  • /keyword:向下搜索(注意这个ketword是你要找的字符)

  • ?keyword:向上搜索

  • n:下一个匹配 / N:上一个匹配

  • :s/old/new:替换当前行第一个匹配

  • :s/old/new/g:替换当前行所有匹配

  • :%s/old/new/g:替换全文所有匹配

  • :%s/old/new/gc:替换时逐个确认


5. 保存与退出

  • :w:保存
  • :q:退出
  • :wq:x:保存并退出
  • :q!:强制退出(不保存)
  • :w!:强制写入
  • wq!:强制保存并退出
  • ZZ(Shift+z+z):快速保存退出

6. 分屏与标签页

  • :sp [file]:水平分屏

  • :vsp [file]:垂直分屏

  • Ctrl+w + 方向键:切换分屏

  • :tabnew:新建标签页

  • gt:下一个标签 / gT:上一个标签


7. 其他实用命令

  • >>:当前行右缩进 / <<:左缩进

  • gg=G:自动缩进全文(适合代码)

  • :set number:set nu):显示行号

  • :set nowrap:禁止自动换行

  • :help [command]:查看帮助(如 :help :w

8. 可视模式操作

  • 选中文本后:
    • y:复制选中内容
    • d:删除选中内容
    • >:向右缩进 / <:向左缩进
    • 块模式下按 I 插入内容,按 Esc 应用到所有

9.在vim中编译、执行代码

  • :!gcc :与之前的gcc 用法是一样的

  • :./[可执行文件名]:执行当前文件夹中的可执行文件

  • :!可以执行命令行命令,路径为当前vim打开的文件路径

  • vs + 其他文件名:打开其他文件支持分屏操作

3.简单vim配置

在网上有许多教我们如何配置vim的教程,我这里就用一个比较简单的方式来进行配置。

  • 安装方法

在 shell 中执行指令(想在哪个用户下让vim配置生效, 就在哪个用户下执行这个指令. 强烈 “不推荐” 直接在 root 下执行):

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

需要按照提示输入 root 密码. 您的 root 密码不会被上传, 请放心输入.

  • 卸载方法

在安装了 VimForCpp 的用户下执行:

bash ~/.VimForCpp/uninstall.sh

Linux编译器-gcc/g++使用

1.背景知识

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

这个内容在C语言学习的时候就已经了解过了,可以去搜索一下

2.gcc如何完成

格式:gcc [选项] 要编译的文件 [选项] [目标文件]

预处理(进行宏替换)

预处理功能主要包括宏定义,文件包含,条件编译,去注释等。预处理指令是以#号开头的代码行。

实例: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 code.s -o code.o

连接(生成可执行文件或库文件)

在成功编译之后,就进入了链接阶段。

实例:gcc hello.o -o hello

动态库

在这里涉及到一个重要的概念:函数库。我们的C程序中,并没有定义“printf”的函数实现,且在预编译中包含的“stdio.h”中也只有该函数的声明,而没有定义函数的实现,那么,是在哪里实“printf”函数的呢?

最后的答案是:系统把这些函数实现都被做到名为 libc.so.6 的库文件中去了,在没有特别指定时,gcc 会到系统默认的搜索路径“/usr/lib”下进行查找,也就是链接到 libc.so.6 库函数中去,这样就能实现函数“printf”了,而这也就是链接的作用

函数库一般分为静态库和动态库两种

  • 静态库是指编译链接时,把库文件的代码全部加入到可执行文件中,因此生成的文件比较大,但在运行时也就不再需要库文件了。其后缀名一般为“.a”。在Windows版本中的动态库是.lib结尾的文件

  • 把码加入到可执行文件中,而是在程序执行时由运行时链接文件加载库,这样可以节省系统的开销。动态库一般后缀名为“.so”,如前面所述的 libc.so.6 就是动态库。gcc 在编译时默认使用动态库。完成了链接之后,gcc 就可以生成可执行文件,如gcc hello.o -o hello。还有一个可以提一点的是,在Windows版本中的动态库是.dll结尾的文件

  • gcc默认生成的二进制程序,是动态链接的,这点可以通过 命令验证。

动态库、动态链接、静态库与静态链接的对比总结

1. 定义

概念说明
动态库运行时加载的共享库(如 .dll.so),不嵌入程序,可被多个进程共享。
动态链接在程序运行时将动态库绑定到进程的过程(自动加载或手动 dlopen)。
静态库编译时嵌入程序的库(如 .lib.a),代码直接合并到可执行文件中。
静态链接在程序编译时将静态库代码复制到可执行文件中,生成独立文件。

2. 特点

特性动态库/动态链接静态库/静态链接
文件大小程序体积小(仅自身代码)程序体积大(包含所有依赖库代码)
内存占用低(多个程序共享同一库)高(每个程序独立加载库代码)
更新维护替换库文件即可生效需重新编译程序
依赖管理需处理库版本冲突(依赖地狱)无外部依赖,独立运行
加载时机运行时加载(延迟绑定)编译时嵌入
适用场景通用软件、系统级程序(如 glibc嵌入式系统、独立工具(如 busybox

3. 优缺点对比

动态库与动态链接

  • 优点
    • 节省内存和磁盘空间(共享性)。
    • 支持热更新(无需重新编译程序)。
    • 灵活加载(如插件系统)。
  • 缺点
    • 依赖外部环境(库缺失或版本冲突会导致程序崩溃)。
    • 首次调用函数时可能有解析延迟(PLT/GOT 机制)。

静态库与静态链接

  • 优点
    • 程序独立,无需外部依赖。
    • 启动速度快(无运行时加载开销)。
    • 避免依赖地狱。
  • 缺点
    • 文件体积大(代码冗余)。
    • 更新需重新编译分发。
    • 内存占用高(多进程无法共享库代码)。

6. 总结

  • 动态库与动态链接
    通过共享代码按需加载优化资源利用,适合通用软件和灵活扩展,但需管理依赖和版本。
  • 静态库与静态链接
    空间换独立性,适合对部署环境要求严格的场景(如嵌入式系统),但牺牲了更新便利性。

注意:

  • 在操作系统中一般默认使用的是动态链接,但我们在编译的时候可以指定用静态链接,也就是下面gcc的-static选项
  • 我们可以用file命令查看一个程序的详细信息,包括它是静态链接和动态链接
  • 云服务器可能没有安装静态库,去搜索安装
gcc选项

-E 只激活预处理,这个不生成文件,你需要把它重定向到一个输出文件里面
-S 编译到汇编语言不进行汇编和链接
-c 编译到目标代码
-o 文件输出到 文件
-static 此选项对生成的文件采用静态链接
-g 生成调试信息。GNU 调试器可利用该信息。
-shared 此选项将尽量使用动态库,所以生成文件比较小,但是需要系统由动态库.
-O0
-O1
-O2
-O3 编译器的优化选项的4个级别,-O0表示没有优化,-O1为缺省值,-O3优化级别最高-w 不生成任何警告信息。
-Wall 生成所有警告信息。

gcc选项记忆

esc,iso例子。我们一般用的时候都是直接将C语言文件通过gcc hello.c -o hello 直接编译成可执行文件。不需要逐步生成各种中间文件。

http://www.xdnf.cn/news/333973.html

相关文章:

  • 基于Centos7的DHCP服务器搭建
  • 【MySQL】存储引擎 - MyISAM详解
  • ARM 芯片上移植 Ubuntu 操作系统详细步骤
  • 云原生架构下的企业数字化转型之路:理念、挑战与落地实战
  • 2. Windows+Msys2+QGis3.36.1编译运行
  • 【Python开源】深度解析:一款高效音频封面批量删除工具的设计与实现
  • Axios替代品Alova
  • nutui-uniapp项目:弹框、弹出层的组件选择问题(组件对比)
  • 基于腾讯云MCP广场的AI自动化实践:爬取小红书热门话题
  • STM32系统定时器以及微秒延时函数分析
  • 电池自动分选机:新能源时代的“质检卫士”
  • Excel学习笔记
  • 蓝桥杯第十六届c组c++题目及个人理解
  • C++入门(下)--《Hello C++ World!》(2)(C/C++)
  • 【C++】手搓一个STL风格的string容器
  • 【开源解析】基于Python的智能文件备份工具开发实战:从定时备份到托盘监控
  • 键盘固件刷写详解:Bootloader
  • AppInventor2如何实现写文件不覆盖,而是在文件尾部追加?
  • 使用 React 实现语音识别并转换功能
  • Java游戏服务器开发流水账(2)开发中Maven的管理
  • CROSS 技术全解析:边缘计算如何成为行业价值新引擎
  • Linux下使用openssh搭建sftp服务
  • SQL:MySQL函数:字符串函数
  • 金仓数据库征文-金仓KES数据同步优化实践:逻辑解码与增量同步
  • 深入理解负载均衡:传输层与应用层的原理与实战
  • KRaft (Kafka 4.0) 集群配置指南(超简单,脱离 ZooKeeper 集群)还包含了简化测试指令的脚本!!!
  • WSL部署CosyVoice
  • node.js 实战——express图片保存到本地或服务器(七牛云、腾讯云、阿里云)
  • 能耗优化新引擎:EIOT平台助力企业降本增效
  • 需求分析阶段测试工程师主要做哪些事情