目录
软件包
软件包的含义
在linux下安装软件,可以通过下载软件的源代码,进行编译得到可执行程序,但这样麻烦
于是可以在服务器上下载提前编译好的程序,也就是软件包,可以直接进行安装
也就是类似于 软件 和 软件商店 的关系
在centos是yum下载 ubnutu是apt下载
软件生态
Linux的软件生态是指围绕Linux操作系统形成的一系列软件、技术、服务和社区的集合。
一、核心组成部分
- 操作系统内核:Linux内核是整个生态的基石,它负责管理操作系统的硬件资源和提供系统服务。Linux内核是开源的,这使得任何人都可以自由使用、修改和分发,从而促进了系统的快速发展和不断完善。
- 开源软件:Linux社区中有数以千计的开源软件、应用程序和工具,涵盖了从桌面应用到服务器应用的各种场景。这些开源软件不仅丰富了Linux的软件生态,还为用户提供了更多的选择和定制化的可能。
二、开发工具与环境
- 开发工具:Linux为软件开发者提供了许多优秀的开发工具,如基于文本的编辑器Vim和Emacs、Eclipse集成开发环境等。这些工具为开发者提供了高效、便捷的编程体验。
- 图形界面:Linux系统提供了多种桌面环境和窗口管理器,如GNOME、KDE、XFCE和LXDE等。这些图形界面提供了方便美观的用户界面,使得用户可以轻松地操作系统和应用程序。
三、软件包管理
Linux系统采用软件包管理器来轻松地安装、更新和管理软件包。流行的软件包管理器有APT(如Ubuntu的apt-get)、RPM(如Fedora的yum)和DNF(如openSUSE的zypper)等。这些工具使得用户可以方便地管理自己的软件环境,确保软件的版本和安全性。
四、应用领域与技术支持
- 云计算与大数据:Linux已成为云计算和大数据领域的主要操作系统。各大云计算公司,包括Amazon、Google和Microsoft等,都支持Linux作为云服务的操作系统。Linux的开源特性和良好的扩展性使其成为构建云计算平台和大数据处理系统的理想选择。
- 物联网与人工智能:随着物联网和人工智能技术的快速发展,Linux在这些领域也发挥着越来越重要的作用。Linux可以通过定制和优化来适应各种物联网设备和智能系统的需求,推动这些技术的普及和应用。
- 技术支持与服务:Linux生态还涵盖了支持Linux系统的硬件平台和提供相关技术支持、咨询服务的公司与组织。这些公司和组织为用户提供了专业的技术支持和服务,确保了Linux系统的稳定性和可靠性。
五、社区与文化
- 全球用户社区:Linux拥有庞大的全球用户社区和开发者社区。这些社区成员共同参与了Linux的开发和改进工作,为Linux的快速发展和不断完善做出了重要贡献。
- 开源文化: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
注:
- yum/apt 会自动查找需要下载的软件包下载 这个时候使用y确定
- 出现 complete 或没有报错 就是 安装完成
- 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++
编译过程
- 预处理 宏替换/驱逐是/条件编译/头文件展开
- 编译 生成汇编
- 汇编 生成机器可识别代码
- 连接 生成可执行文件
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

被折叠的 条评论
为什么被折叠?



