在linux下安装软件,可以通过下载软件的源代码,进行编译得到可执行程序,但这样麻烦
于是可以在服务器上下载提前编译好的程序,也就是软件包,可以直接进行安装
也就是类似于 软件 和 软件商店 的关系
在centos是yum下载 ubnutu是apt下载
Linux的软件生态是指围绕Linux操作系统形成的一系列软件、技术、服务和社区的集合。
Linux系统采用软件包管理器来轻松地安装、更新和管理软件包。流行的软件包管理器有APT(如Ubuntu的apt-get)、RPM(如Fedora的yum)和DNF(如openSUSE的zypper)等。这些工具使得用户可以方便地管理自己的软件环境,确保软件的版本和安全性。
通过 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
注:
# 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的
2890698b97fe8dd5384fdcf4ee65dc5c.png (3301×2550)(清晰图地址)
重要的三种模式(有很多种模式) 命令模式 插入模式 底行模式
控制屏幕光标的移动,字符的删除,更改模式
用 i 进入进行文字的输入 ESC可以返回命令模式
文件保存退出,文件替换,查找字符串,列出行号 用 shift 和 :进入该模式
创建/使用
vim test.c
切换模式
a i o
ESC
shift + ; (:)
保存/退出
:w (仅保存) :wq (保存并退出) : q! (强制退出)
按【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】保存并退出
可以再自己的home内编辑 vim .vimrc 输入 语法高亮 syntax on 显式行号 set nu 设置缩进空格为4 set shiftwidth = 4
推荐去gitee或者csdn找人家配置好的vim
gcc 【选项】 要编译的文件 【选项】【目标文件】
简短来说:静态链接,就是把所有独立编译的,有依赖关系的文件独立的包含,并且拥有全套本地文件,所以
动态链接时把程序按照模块进行拆分出多个独立运行的模块,在运行的时候链接成一个整体 动态链接更常用一些 ldd可以打印程序或者库文件所依赖的共享库列表
系统把函数实现的头文件和源文件放在了特殊的地方,如果没有指定头文件的位置,gcc会到系统默认路径/usr/lib下进行查找,也就是连接到libc.so.6库函数中去,这样就能实现系统库自带的函数了
c/c++的静态库安装
yum install glibc-static libstdc++-static -y
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的时间对比
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 ... @" 15 .PHONY:clean 16 clean: 17 (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是版本控制器,用于控制版本,协作编程等任务
yum install git
然后去gitee注册账号和空间 然后链接项目后下载到本地
git clone 【nul】
nul是项目链接
然后是三板斧
git add 【文件名】 git commit -m ”批注“ git push
启用gdb 需要在编译的时候 加-g选项 产生debug模式 程序发布方式为debug和release模式,gcc/g++默认是release无法调试,需要改成debug模式进行调试
[amd@hcss-ecs-bffb 2025-1-17-1]$ gcc FlushProcess.c -o FlushProcess.exe -g
推荐使用cgdb
sudo apt-get install -y cgdb sudo yum install -y cgdb