Linux-基础开发工具

目录

软件包

        软件包的含义

        软件生态 

        一、核心组成部分

        二、开发工具与环境

        三、软件包管理

        四、应用领域与技术支持

        五、社区与文化

        具体操作 

        软件安装

        软件卸载

         安装源

编辑器Vim

vim的使用

 vim的操作

vim命令集 

        正常模式

插入模式

移动光标 

删除文字 

 复制

替换 

 撤销操作 

 更改

跳到指定行 

底行模式

 vim配置 

编译器gcc/g++ 

         编译过程

        gcc的使用

        预处理 

         编译

        汇编

        链接

动态链接与静态链接

        静态链接

         动态链接

        库

        静态库与动态库

        gcc的选项

自动化构建-make/Makefile

        代码实现

make的工作方式

Makefile的扩展语法 

        GIT 

        git安装

调试器 gdb/cgdb 

        启用gdb

        使用指令


软件包

        软件包的含义

        在linux下安装软件,可以通过下载软件的源代码,进行编译得到可执行程序,但这样麻烦

于是可以在服务器上下载提前编译好的程序,也就是软件包,可以直接进行安装

        也就是类似于 软件 和 软件商店 的关系 

        在centos是yum下载 ubnutu是apt下载

        软件生态 

Linux的软件生态是指围绕Linux操作系统形成的一系列软件、技术、服务和社区的集合。

        一、核心组成部分

  1. 操作系统内核:Linux内核是整个生态的基石,它负责管理操作系统的硬件资源和提供系统服务。Linux内核是开源的,这使得任何人都可以自由使用、修改和分发,从而促进了系统的快速发展和不断完善。
  2. 开源软件:Linux社区中有数以千计的开源软件、应用程序和工具,涵盖了从桌面应用到服务器应用的各种场景。这些开源软件不仅丰富了Linux的软件生态,还为用户提供了更多的选择和定制化的可能。

        二、开发工具与环境

  1. 开发工具:Linux为软件开发者提供了许多优秀的开发工具,如基于文本的编辑器Vim和Emacs、Eclipse集成开发环境等。这些工具为开发者提供了高效、便捷的编程体验。
  2. 图形界面:Linux系统提供了多种桌面环境和窗口管理器,如GNOME、KDE、XFCE和LXDE等。这些图形界面提供了方便美观的用户界面,使得用户可以轻松地操作系统和应用程序。

        三、软件包管理

Linux系统采用软件包管理器来轻松地安装、更新和管理软件包。流行的软件包管理器有APT(如Ubuntu的apt-get)、RPM(如Fedora的yum)和DNF(如openSUSE的zypper)等。这些工具使得用户可以方便地管理自己的软件环境,确保软件的版本和安全性。

        四、应用领域与技术支持

  1. 云计算与大数据:Linux已成为云计算和大数据领域的主要操作系统。各大云计算公司,包括Amazon、Google和Microsoft等,都支持Linux作为云服务的操作系统。Linux的开源特性和良好的扩展性使其成为构建云计算平台和大数据处理系统的理想选择。
  2. 物联网与人工智能:随着物联网和人工智能技术的快速发展,Linux在这些领域也发挥着越来越重要的作用。Linux可以通过定制和优化来适应各种物联网设备和智能系统的需求,推动这些技术的普及和应用。
  3. 技术支持与服务:Linux生态还涵盖了支持Linux系统的硬件平台和提供相关技术支持、咨询服务的公司与组织。这些公司和组织为用户提供了专业的技术支持和服务,确保了Linux系统的稳定性和可靠性。

        五、社区与文化

  1. 全球用户社区:Linux拥有庞大的全球用户社区和开发者社区。这些社区成员共同参与了Linux的开发和改进工作,为Linux的快速发展和不断完善做出了重要贡献。
  2. 开源文化:Linux的开源特性促进了开源文化的发展和传播。开源文化鼓励人们共享知识、合作创新,并推动了整个技术领域的进步和发展。

        具体操作 

通过 yum list列出有那些软件包 

使用grep命令筛选出我们关注的软件包

        例:

[root@hcss-ecs-bffb ~]# yum list | grep lrzsz 
Repodata is over 2 weeks old. Install yum-cron? Or run: yum makecache fast
lrzsz.x86_64                             0.12.20-36.el7                base     

 

[root@hcss-ecs-bffb ~]# yum search lrzsz
Loaded plugins: fastestmirror
Repodata is over 2 weeks old. Install yum-cron? Or run: yum makecache fast
Loading mirror speeds from cached hostfile
=============================================================== N/S matched: lrzsz ================================================================
lrzsz.x86_64 : The lrz and lsz modem communications programs

  Name and summary matches only, use "search all" for everything.
[root@hcss-ecs-bffb ~]# yum info lrzsz
Loaded plugins: fastestmirror
Repodata is over 2 weeks old. Install yum-cron? Or run: yum makecache fast
Loading mirror speeds from cached hostfile
Available Packages
Name        : lrzsz
Arch        : x86_64
Version     : 0.12.20
Release     : 36.el7
Size        : 78 k
Repo        : base/7/x86_64
Summary     : The lrz and lsz modem communications programs
URL         : http://www.ohse.de/uwe/software/lrzsz.html
License     : GPLv2+
Description : Lrzsz (consisting of lrz and lsz) is a cosmetically modified
            : zmodem/ymodem/xmodem package built from the public-domain version of
            : the rzsz package. Lrzsz was created to provide a working GNU
            : copylefted Zmodem solution for Linux systems.

        分别为 列出 查找 和 详细信息查看

        对于信息查看

 x86_64 表示64位系统的安装包

el7是表示发行版本,‘el7'表示的是centos7/redhat7

主要详细见翻译

        软件安装

# centos

$ sudo yum install -y lrzsz

# Ubntu

$ sudo apt install -y lrzsz 

注: 

  1. yum/apt 会自动查找需要下载的软件包下载 这个时候使用y确定
  2. 出现 complete 或没有报错 就是 安装完成 
  3. yum/apt不能同时安装多个软件

        软件卸载

# Centos

$ sudo yum remove [-y] lrzsz

# Ubuntu

$ sudo apt remove [-y] lrzsz 

         安装源

        Centos的

[root@hcss-ecs-bffb ~]# ll /etc/yum.repos.d/
total 52
-rw-r--r--  1 root root 1732 Jul 26 11:33 CentOS-Base.repo
-rw-r--r--. 1 root root 1309 Oct 23  2020 CentOS-CR.repo
-rw-r--r--. 1 root root  649 Oct 23  2020 CentOS-Debuginfo.repo
-rw-r--r--. 1 root root  314 Oct 23  2020 CentOS-fasttrack.repo
-rw-r--r--. 1 root root  630 Oct 23  2020 CentOS-Media.repo
-rw-r--r--. 1 root root 1331 Oct 23  2020 CentOS-Sources.repo
-rw-r--r--. 1 root root 8515 Oct 23  2020 CentOS-Vault.repo
-rw-r--r--. 1 root root  616 Oct 23  2020 CentOS-x86_64-kernel.repo
-rw-r--r--  1 root root  927 Jul 26 11:34 epel.repo
-rw-r--r--  1 root root 1358 Sep  5  2021 epel.repo.rpmnew
-rw-r--r--  1 root root 1457 Sep  5  2021 epel-testing.repo

 Centos-Base 是标准源 epel.repo 是扩展源

        Ubuntu的是

$ cat /etc/apt/sources.list     #标准
$ ll /etc/apt/sources.list.d    #扩展

不做解释 我机器是centos的 

编辑器Vim

       2890698b97fe8dd5384fdcf4ee65dc5c.png (3301×2550)(清晰图地址)

vim的使用

重要的三种模式(有很多种模式) 命令模式 插入模式 底行模式

  • 命令模式

控制屏幕光标的移动,字符的删除,更改模式

  • 插入模式

用 i 进入进行文字的输入 ESC可以返回命令模式

  •  底行模式

文件保存退出,文件替换,查找字符串,列出行号 用 shift 和 :进入该模式

 vim的操作

        创建/使用

vim test.c 

        切换模式

  • 正常->插入

        a i o

  • 插入->正常

        ESC

  • 正常->末行

        shift + ; (:)

        保存/退出

:w   (仅保存)

:wq (保存并退出)
: q!  (强制退出)

vim命令集 

        正常模式

插入模式

按【i】进入插入模式,并在原地开始输入

按【a】进入插入模式,并在下一个位置开始输入文字

按【o】进入插入模式,插入新的一行

按【ESC】退出插入模式

移动光标 

【h】【j】【k】【l】左 上 下 右

【G】文字末尾

【$】行尾

【^】行首

【w】下一个单词开头

【e】下一个单词字尾

【b】上一个单词开头

【#l】该行的第#个位置

【gg】文本开头

【shift + g】文本末尾

【ctrl + 【b】【f】【u】【d】】 后一页 前一页 后半页 前半页面

删除文字 

【x】按一下 删一个字符

【#x】删除光标及其之后共#个字符

【shift x】删除前面的一个字符

【# shift x】删除光标及其前面共#个字符

【dd】删除光标所在行

【#dd】从光标所在行及其下面共#个行删除

 复制

【yw】把光标所在之处到字尾的字符复制到缓冲区中

【#yw】复制#个字符到缓冲区

【yy】复制光标所在行到缓冲区

【#yy】复制光标及其下面共#个行的复制

【p】粘贴

替换 

【r】替换所在处的字符

【R】不断替换直到按下ESC

 撤销操作 

【u】:如果您误执行一个命令,可以马上按下u撤销

【ctrl+r】撤销 撤销

 更改

【cw】更改光标所在处的字到字尾处

【c#w】更改#个字

跳到指定行 

【ctrl】 + 【g】列出光标所在行的行号

【#G】 移动光标到15行尾

底行模式

         在正常模式下按:即可进入底行模式

  • 列出行号

【sert nu】

  • 跳转某一行

【#】 到第#行

  •  查找字符

【/】 先按【/】再按你想寻找的字符,可以按【n】向后查找

【?】按【?】在输入想要查找的字符,可以按【n】向前查找

  • 保存文件

【w】 按【w】保存文件

  • 退出文件

【q】按【q】退出vim

【q!】强制退出

【wq】保存并退出

 vim配置 

可以再自己的home内编辑

vim .vimrc

输入

语法高亮              syntax on

显式行号              set nu

设置缩进空格为4 set shiftwidth = 4

推荐去gitee或者csdn找人家配置好的vim

编译器gcc/g++ 

         编译过程

  1. 预处理        宏替换/驱逐是/条件编译/头文件展开
  2. 编译            生成汇编
  3. 汇编            生成机器可识别代码
  4. 连接            生成可执行文件

        gcc的使用

gcc 【选项】 要编译的文件 【选项】【目标文件】

        预处理 

  • 预处理是包括宏定义,条件编译,去注释
  • 预处理指令以#开头的代码行
  • gcc -E hello.c -o hello.i
  • 选项 "-E" 该选项的作用是让gcc在预处理结束后停止编译过程
  • 选项“-o”是指目标文件,“。i”文件为预处理的C原始程序

         编译

  • gcc检查代码的规范性。是否有语法错误,确定代码实际要做的工作
  • 把代码翻译成汇编语言
  • 选项-S来进行查看,该选项只进行编译而不进行汇编,生成汇编代码
  • 例:gcc -S hello.i -o hello.s

        汇编

  •  把编译生成的.s转成目标文件

  • 选项-c来看.o文件

  • 例:gcc -c hello.s -o hello.o

        链接

  • 在成功编译后,就进入了链接阶段
  • 例:gcc hello.o -o hello 

动态链接与静态链接

        静态链接

简短来说:静态链接,就是把所有独立编译的,有依赖关系的文件独立的包含,并且拥有全套本地文件,所以

  • 浪费空间 单个可执行程序会包含独立的目标文件与依赖文件,会导致依赖文件产生大量副本,占用空间
  • 更新困难,如果依赖文件的修改了,就需要重新编译链接形成可执行程序
  • 运行速度快,因为都是独立包含所有需要的执行库

         动态链接

动态链接时把程序按照模块进行拆分出多个独立运行的模块,在运行的时候链接成一个整体

动态链接更常用一些

ldd可以打印程序或者库文件所依赖的共享库列表

        库

 系统把函数实现的头文件和源文件放在了特殊的地方,如果没有指定头文件的位置,gcc会到系统默认路径/usr/lib下进行查找,也就是连接到libc.so.6库函数中去,这样就能实现系统库自带的函数了

        静态库与动态库

  • 静态库时只编译链接时,把库文件的代码加入到可执行文件中,产生的文件很大,也就不需要库文件了,后缀为.a

  • 动态库是运行时候要链接的,用.so作为后缀 

  • gcc生成的默认程序是动态链接的

        c/c++的静态库安装

yum install glibc-static libstdc++-static -y 

        gcc的选项

  • -E 预处理
  • -S 编译到汇编语言不进行汇编和链接
  • -c 编译到目标代码
  • -o 输出文件
  • -static 对文件采用静态链接
  • -g 生成调试信息
  • -shared 尽量使用动态库
  •  -O0 -O1 -O2 -O3 编译器的四个优化级别 -O0 无优化 -O1为缺省值 -O3级别最高
  • -w 不生产警告信息
  • -Wall 生成所有警告信息

自动化构建-make/Makefile

        makefile定义了一系列规则对文件进行系统性的操作,那些文件需要编译,那些文件后边一,那些文件需要重新编译,甚至是更复杂的功能

         makefile带来的好处就是 自动化编译,仅需make命令,整个工程都会自动编译,提高了软件开发的效率

        make是命名,makefile是一个文件

        代码实现

 a:a.c                                                        #a 依赖 a.c

        gcc a.c -o a

.PHONY:clean                                         #伪目标 依赖 clean

clean:                                                       #clean的执行命名 

        rm -f a

 伪目标是总是执行的

对于一个文件

[amd@hcss-ecs-bffb 2025-1-16]$ stat ./a.c
  File: ‘./a.c’
  Size: 74            Blocks: 8          IO Block: 4096   regular file
Device: fd01h/64769d    Inode: 788958      Links: 1
Access: (0664/-rw-rw-r--)  Uid: ( 1000/     amd)   Gid: ( 1000/     amd)
Access: 2025-01-16 22:41:47.943434689 +0800
Modify: 2025-01-16 22:41:46.009480483 +0800
Change: 2025-01-16 22:41:46.009480483 +0800
 Birth: -
 

文件就是 内容与属性

属性中

Modify 内容变更时间更新

Change 属性变更时间更新

Access 访问时间更新

总执行的原因:

        如果反复使用make,文件会按照更新时间对比来编译,更早的会改变以前的文件,如果时间不比原来的文件早就不会执行,总执行时虎烈源文件和可执行目标文件的Modify的时间对比

make的工作方式

  • 在本目录下寻找 Makefile或者 makefile文件
  • 按照文件内容开始执行
  • 如果要生成的文件不存在或者M时间落后于依赖文件 就会生成目标文件
  • 如果报错会直接退出,make只关注文件的依赖性

Makefile的扩展语法 

  1 CC=gcc
  2 #SRC=$(shell ls *.c) 
  3 SRC=$(wildcard *.c)
  4 OBJ=$(SRC:.c=.o)
  5 LFLAGS=-o
  6 FLAGS=-c
  7 RM=rm -f
  8 BIN=$(OBJ:.o=.exe)
  9 $(BIN):$(OBJ)
 10   @$(CC) $(LFLAGS) $@ $^ 
 11   @echo "linking ... $^ to $@"
 12 %.o:%.c
 13   @$(CC) $(FLAGS) $<                                                                                                        14   @echo "compling ... $< to $@" 
 15 .PHONY:clean
 16 clean:
 17   $(RM) $(OBJ) $(BIN)
 18 .PHONY:test
 19 test:
 20   @echo $(SRC)
 21   @echo $(OBJ)

        小程序代码补充

\r 回车 回到第一个位置

\n 换行 换到下一行

fflush(stdout)刷新缓冲区 

         很简单的代码

#include <stdio.h>
#include <string.h>
#include <unistd.h>

int main()
{
  char buffer[101];
  memset(buffer,0,sizeof(buffer));
  const char *lable="|/-\\";
  int cnt = 0;
  while(cnt <= 100)
  {
    printf("[%-100s][%d%%][%c]\r", buffer, cnt, lable[cnt % 4]);
    fflush(stdout);
    buffer[cnt]= '=';
    cnt++;
    usleep(50000);
  }
  printf("\n");
  return 0;
}

        GIT 

git是版本控制器,用于控制版本,协作编程等任务

        git安装

yum install git

        然后去gitee注册账号和空间 然后链接项目后下载到本地

git clone 【nul】 

        nul是项目链接

然后是三板斧

git add 【文件名】

git commit -m ”批注“

git push  

调试器 gdb/cgdb 

        启用gdb

启用gdb 需要在编译的时候 加-g选项 产生debug模式

程序发布方式为debug和release模式,gcc/g++默认是release无法调试,需要改成debug模式进行调试

[amd@hcss-ecs-bffb 2025-1-17-1]$ gcc FlushProcess.c -o FlushProcess.exe -g 

        使用指令

  • list/l                                 列出N行代码                                        list/l N
  • list/l 函数名                     列出指定函数源代码                            list/l main
  • llist/l 文件名:行号          列出指定文件源代码
  • r/run                                程序开始执行                                    
  • n/next                              单步执行/不进入函数内部
  • s/step                              单步执行/进入函数内部
  • b/break 【文件名:】行号 设置断点
  • break 函数名                   在函数开头设置断点
  • finish                               执行到当前函数返回并停止
  • print/p 表达式                  打印表达式的值
  • p 变量                             打印变量的值
  • set var 变量 = 值             更改变量的值
  • continue/c                       从当前位置开始连续执行程序
  • delete/d breakpoints       删除所有断点
  • delete/d breakpoints n    删除编号为n的断点
  • disable breakpoints        禁用所有断点
  • enable breakpoints         启用所有断点
  • info/i berakpoints            查看所有断点
  • display 变量                    跟踪显示变量的值
  • undisplay                        取消对指定编号变量的跟踪显示
  • until 行号                         执行到指定行号
  • backtrace/bt                     查看当前执行栈的各级函数调用及参数
  • info/i locals                       查看当前栈帧的局部变量值
  • quit                                  退出
  • watch                               实时监控表达式或者变量的值
  • 条件断点
    • 新增断点 在已有断点上新增
    • 新增 b 行号 if i == 30(条件)
    • 追加 condition 断点编号 i==30(条件 没有if)

        推荐使用cgdb

sudo apt-get install -y cgdb

sudo yum install -y cgdb

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值