在Linux中,软件包是一种预编译的程序集合,通常包含了用户需要的应用程序、库、文档和其他依赖项。
软件包管理工具是用于安装、更新和删除这些软件包的软件。常见的Linux软件包管理工具包括APT(Advanced Packaging Tool)和YUM(Yellowdog Updater, Modified)等。
软件包通常由软件开发商或发行版团队创建和维护,以确保它们与操作系统的兼容性和稳定性。通过使用软件包管理工具,用户可以轻松地安装、更新和删除软件包,而无需手动下载和编译源代码。
从软件开发商的网站上下载源代码,并按照文档进行编译和安装。
RPM(Red Hat Package Manager)是Red Hat系列Linux发行版使用的包管理系统,常见于基于Red Hat的发行版,如Fedora、CentOS等。使用rpm命令可以直接安装、卸载、升级软件包,但是软件之间的依赖关系很麻烦。
YUM( Yellowdog Updater Modified)是Fedora和CentOS等Linux发行版使用的包管理系统,而APT(Advanced Packaging Tool)是Debian和Ubuntu等基于Debian的发行版使用的包管理系统。
yum源在这里类似官方的软件库 可以找到大量的软件 在虚拟机我们要配置国内的镜像源
有时候要去准官方 或者 非官方的位置下载软件
RPM(Red Hat Package Manager)RPM可以管理软件包的安装、更新和卸载,通过它可以让用户方便地安装、升级和删除软件。
参数:
-i
:安装软件包。
-U
:升级软件包。
-d
:显示详细信息。
-f
:强制执行。
使用例子:
安装软件包:
sudo rpm -i package_name.rpm
升级软件包:
sudo rpm -U package_name.rpm
显示详细信息:
sudo rpm -ql package_name
强制执行:
RPM有时可能需要管理员权限才能执行某些操作,可以使用-f
参数强制执行。例如,如果用户没有管理员权限但仍然需要安装软件包,可以使用以下命令:
sudo rpm -fi package_name.rpm --force
YUM(Yellowdog Updater Modified)YUM使用RPM包管理系统,它可以自动处理软件包的依赖关系,并从本地或远程仓库下载和安装软件包。
参数:
-y
:自动回答所有提示为“是”。
--skip-broken
:跳过有问题的软件包并继续安装。
--disablerepo=
和--enablerepo=
:禁用或启用特定的软件仓库。
--exactmatch
:仅匹配完全匹配的软件包名称。
--groupinstall
:同时安装与所选软件包相关的所有软件组。
--noguess
:禁用软件包猜测功能。
选项:
install
update
remove
makecache 创建元数据缓存
list 列出一个或一组软件包
groups 显示或使用、组信息
help 显示用法提示
history 显示或使用事务历史
info 显示关于软件包或组的详细信息
使用例子:
安装软件包:
sudo yum install
更新软件包:
sudo yum update
显示软件包的详细信息:
sudo yum info
自动回答所有提示为“是”:
sudo yum update -y
跳过有问题的软件包: 有时,某些软件包可能存在依赖关系问题,导致无法安装。可以使用--skip-broken
参数来跳过有问题的软件包并继续安装。例如:
sudo yum update --skip-broken
下载:
yum list | grep lrzsz
yum -y install lrzsz
Nano是一个免费的、开源的文本编辑器,它运行在Windows、Linux和Unix系统上。Nano是一个轻量级的编辑器,它被设计为简单易用,同时提供足够的功能来满足大多数用户的需求。
下面是nano的一些主要特点:
Nano具有简单直观的界面,使您可以轻松地在文本文件中导航。
Nano具有丰富的键盘快捷键,使您可以快速执行常见任务,而不必使用鼠标。
Nano支持高级编辑功能,例如自动完成、宏、语法突出显示和正则表达式搜索。
Nano具有轻量级的内存,因此在处理大型文本文件时性能良好。
Nano是一个免费和开源的软件,可以在GPL下使用和修改。
下面是nano的一些常用命令和选项:
命令: nano
:启动nano编辑器。
nano
:打开指定的文件。
nano
:使用指定的选项打开文件。
选项:
-a
:在打开文件之前,将
的内容作为命令行参数传递给nano。
-c
:在打开文件之前,清空文件内容。
-d
:在打开文件之前,将文件内容读入到nano的缓冲区中,以便在编辑时更快地显示。
-f
:在打开文件之前,将文件内容读入到nano的缓冲区中,以便在编辑时更快地显示,并在保存文件时自动保存。
-h
:显示帮助消息,
-i
:开启自动换行。
-I
:忽略自动换行。
-m
:开启鼠标支持。
-M
关闭鼠标支持。
-p
:开启拼写检查。
-P
:关闭拼写检查。
-s
:开启语法高亮支持。
-S
:关闭语法高亮支持。
-v
:显示版本信息。
-V
:显示版本信息并退出。
使用例子:
打开一个名为example.txt
的文件:
sudo nano example.txt
打开文件并自动保存:
sudo nano -f example.txt
打开文件并开启语法高亮:
sudo nano -s example.txt
打开文件并开启自动换行:
sudo nano -i example.txt
显示nano的版本信息:
sudo nano -v
Nano文本编辑器还支持许多键盘快捷键,如复制、粘贴、删除行、查找等。例如Ctrl+C
复制选中内容、C+V
粘贴内容、Ctrl+X
删除选中内容等。
这是nano下的提示文本:
^G Get H^O Write^R Read ^Y Prev ^K Cut T^C Cur Pos ^X Exit ^J Justi^W Where^V Next ^U UnCut^T To Spell
Vim 是一种流行的文本编辑器,具有丰富的命令模式。在 Vim 的命令模式下,您可以使用各种命令来编辑文本、移动光标、删除文本、复制文本、撤销更改等。
到时候整理可以上网查查
以下是一些常见的 Vim 命令模式命令: 末行模式:
i 或 I:进入插入模式,开始输入文本。
Esc:退出插入模式,返回到命令模式。
:w:保存文件。
:q:退出 Vim。
:q!:强制退出 Vim,不保存任何更改。
:n:跳转到下一个文件。
:N:跳转到上一个文件。
:r
:0:光标移到文件开头。
G:将光标移到文件末尾。
/
#x: 删除光标所在#个字符。
n dd:剪切n行。
yy:复制当前行。
p:在复制行下方粘贴文本。
vs
#!:光标移动到第#个位置
ctrl +b 屏幕向后移动一页
ctrl + f屏幕向前移动一页
ctrl + u屏幕向后移动半页
ctrl + d屏幕向前移动半页
gg :进入文本开始
r R:替换
u撤销操作
ctrl + r 撤销恢复
set nu 设置行号
在/etc/vimrc文件是配置文件
使得vim可以有更高级的功能 可以上网查看方法
安全的配置sudoers文件 和vim功能一样
程序运行的处理:预处理 编译 汇编 链接
Linux的GCC(GNU Compiler Collection) GCC是GNU项目的一部分,是一个自由软件许可证下的开源编译器,可用于编译C、C++和Objective-C等编程语言的代码。GCC支持多种操作系统和硬件架构,包括x86、x86-64、ARM、MIPS、PowerPC等。
GCC的参数和选项:
-o
:指定输出文件的名称。
-E
: 仅作预处理,不进行编译、汇编和链接
-S
: 编译到汇编语言,不进行汇编和链接
-c
: 编译、汇编到目标代码,不进行链接,生成可执行文件。
-D
:定义宏。
-U
:取消定义宏。
-g
:生成调试信息。以debug方式发布 从readelf -S 文件名 | grep -i debug查看
-static
:采用静态编译
-I
:添加头文件搜索路径。
-L
:指定库文件的搜索路径。
-l
:指定链接库名称
-include file
:在预处理阶段包含指定的文件。
-shared
: Create a shared library
-std=<标准>
:指定输入源文件遵循的标准
-f
:启用或禁用特定编译选项。
-fPIC
:生成位置无关代码(Position Independent Code)。这种代码在内存中的位置不受限制,可以在不同的地址空间执行,特别适用于动态链接和共享库。
-wl
:用来传递额外的链接器选项的,例如,-Wl,-rpath,/my/library
会将 /my/library
添加到运行时共享库的搜索路径中。
-rpath,path
:这个选项用于指定运行时共享库的搜索路径。path
应该是包含共享库文件的目录。
-Wall
:显示所有警告信息。
-Werror
:将警告视为错误并停止编译。
-O
:优化编译级别。
使用例子:
gcc -o example example.c gcc -E mycode.c -o mycode.i #条件编译 gcc -E mycode.c -o mycode.i -DDEBUG #定义DEBUG宏
在终端中输入“./example”来运行生成的可执行文件,默认生成的a.out文件
Linux的g++是GNU Compiler Collection(GCC)的一部分,它是一个功能强大的C++编译器,用于编译C++代码。g++支持C++98和C++11及更高版本的标准,并提供了许多高级特性,如自动内存管理、异常处理、模板等。g++支持多种操作系统和硬件架构,包括x86、x86-64、ARM等。
g++使用和gcc 大体相同 g++适配gcc:
使用例子:
g++ -o myprogram main.cpp
在终端中输入“./myprogram”来运行生成的可执行文件。
1.使用ldd命令查看文件的动态依赖
2.默认下gcc优先动态库编译,通过-static 选项该改变这个优先级
3.c语言的静态库是glibc-static
3.c++的静态扩展库是 libstdc++-static
静态编译文件扩展很严重,编译后不再依赖静态库
优缺点:
1.静态编译独立性好,但是占用空间和内存大
2.动态编译牵一发而动全身,倒是节省空间
在软件开发过程中,Debug 和 Release 是两个不同的构建类型,它们在编译选项、功能和大小上有所不同。
Debug 版本通常包含调试信息和其他工具,用于帮助开发人员在开发过程中调试和测试代码。Debug 版本会生成更多的输出,例如源代码级别的跟踪信息,以帮助开发人员定位问题并修复它们。此外,Debug 版本通常会禁用一些优化选项,以减小文件大小和提高调试性能。
Release 版本通常用于向最终用户提供产品。它经过更多的优化和,以提高代码的执行速度和内存使用效率。此外,Release 版本会压缩和精简代码,以减小文件大小。为了提高执行效率,Release 版本会包含更多的优化选项,例如内联汇编、代码缓存和循环展开等。
make是一个自动化构建工具,它可以根据Makefile文件中的规则和指令,自动地编译和链接源代码文件,生成可执行文件或库文件。make使用简单的语法和命令,使得构建过程更加方便和高效。
参数和选项:
-j
:并行执行make命令,指定同时执行的进程数。
-k
:如果Makefile中有任何未解决问题,make将一直等待直到所有问题都被解决。
-s
:静默模式,不显示警告信息。
-V
:显示make版本信息。
使用例子:
构建单个文件:
make file.c
这将会编译file.c文件并生成可执行文件。
构建多个文件:
make file1.o file2.o file3.o
这将会编译file1.c、file2.c和file3.c文件,并将它们链接生成可执行文件。
使用变量: 在Makefile中可以使用变量来存储依赖关系、目标文件等信息。例如:
CC = gcc CFLAGS = -Wall -Werror OBJS = file1.o file2.o file3.o TARGET = program $(TARGET): $(OBJS) $(CC) $(CFLAGS) -o $(TARGET) $(OBJS) mytest.exe:mycode.c gcc -o mytest.exe mycode.c .PHONY:clean clean: rm -f mytest.exe
在这个例子中,TARGET是目标文件名,OBJS是目标文件的列表,CC是编译器名称,CFLAGS是编译器的选项。当make运行时,它会检查目标文件的依赖关系,如果需要,它会自动地编译目标文件的依赖项。当所有依赖项都被正确编译后,它会使用指定的命令来链接这些文件并生成可执行文件。
依赖关系:
make 在检索Makefile时候 是一个递归的栈执行 makefile的自动化推导
例如:
mycode.exe:mycode.o gcc -o mycode.exe mycode.o mycode.s: mycode.i gcc -S mycode.i -o mycode.s mycode.o:mycode.s gcc -c mycode.s -o mycode.o mycode.i:mycode.c gcc -E mycode.c -o mycode.i $@表示:左边的内容 $^表示:右边的内容 .PHONY:clean clean: rm -f mycode.exe,mycode.s,mycode.i,mycode.o
make在执行时候默认执行第一个指令,推导第一个指令的依赖关系
如上 make会执行 mycode.exe的方法 同时会自动化推导依赖关系 依次生成 .o .s .i .exe 文件
make === make mycode.exe
make clean :执行 rm-r....
make在编译过后如果源文件没有被更新 就不会在编译了
如何实现: 比较可执行程序的最近修改时间 与 源文件的最近修改时间 (Modify)
这时候就引出了一个声明.PHONY:修饰的内容 总是被执行
怎么一次性生成多个可执行程序呢?
.PHONY:all all:otherExe mycode mycode:mycode.c gcc mycode -o mycode.i -std=c99 otherExe:otherExe.c g++ -o mycode.i otherExe -std=c++11 .PHONY:clean clean: rm -f mycode otherExe
makefile格式:
方法:依赖关系 依赖目标
参数选项:
在依赖目标前加@ 表示不在屏幕上输出提示信息
在依赖目标中 : $@表示冒号左边的内容 $^表示冒号右边的内容
$<
:代表规则中的第一个依赖文件。
$?
:代表所有比目标文件新的依赖文件。
$^
:代表所有依赖文件的列表。
$*
:代表模式匹配出的所有文件。例如,如果规则中有%.o: %.c
,那么$*就会代表所有的.c
文件。
$(@D)
:代表目标文件的目标目录。
$(@F)
:代表目标文件的文件名。
$(@)
:代表目标文件的完整路径。
$($VAR))
:代表变量$(VAR)的值。
$(VAR)
:代表变量VAR的值。
$(call [arguments])
调用函数,例如$(call echo, hello)
会输出hello
Git是一个分布式版本控制系统,主要用于跟踪文件变更和协调多人之间的代码修改。它能够有效地解决代码的版本控制、冲突解决、多人协作等问题。
具体来说,Git的主要作用包括:
版本控制:Git可以记录文件的历史版本,并允许你查看和回滚到之前的版本。这对于多人协作开发非常有用,因为可以避免代码冲突和重复工作。
多人协作:Git可以轻松地管理多人之间的代码修改,并确保每个人都在最新的版本上工作。它支持分支和合并,使得多个开发人员可以同时开发不同的功能,并在完成后将其合并到一个代码库中。
数据完整性:Git通过使用SHA-1哈希算法对文件和目录结构进行完整性检查,确保数据的完整性。这有助于防止数据被篡改或损坏。
可靠备份:Git可以将代码库备份到任何地方,包括远程服务器、本地计算机等。它还支持增量备份,只备份文件变更的部分,从而节省存储空间和传输时间。
开源社区:Git已经成为许多开源项目的默认版本控制系统,使得可以轻松地参与开源项目,并与其他开发者协作开发。
SVN也可以做到版本控制 git是开源的
最常用的 git 命令有: add 添加文件内容至索引 bisect 通过二分查找定位引入 bug 的变更 branch 列出、创建或删除分支 checkout 检出一个分支或路径到工作区 clone 克隆一个版本库到一个新目录 commit 记录变更到版本库 diff 显示提交之间、提交和工作区之间等的差异 fetch 从另外一个版本库下载对象和引用 grep 输出和模式匹配的行 init 创建一个空的 Git 版本库或重新初始化一个已存在的版本库 log 显示提交日志 merge 合并两个或更多开发历史 mv 移动或重命名一个文件、目录或符号链接 pull 获取并合并另外的版本库或一个本地分支 push 更新远程引用和相关的对象 rebase 本地提交转移至更新后的上游分支中 reset 重置当前HEAD到指定状态 rm 从工作区和索引中删除文件 show 显示各种类型的对象 status 显示工作区状态 tag 创建、列出、删除或校验一个GPG签名的 tag 对象
在你的项目文件夹中打开命令行或终端,然后运行:
git init
添加当前文件夹中的所有文件到 Git 仓库,运行:
git add .
或者,你可以选择性地添加单个文件:
git add filename.txt
提交当前所有添加的文件,并附上说明,运行://必须上传说明
git commit -m "Initial commit"
查看当前的 Git 仓库状态,运行:
git status
创建一个新分支:
git branch new-branch
切换到新分支:
git checkout new-branch
合并分支:
git merge new-branch
删除分支:
git branch -d new-branch
克隆远程仓库:
git clone https://github.com/username/repository.git
推送本地分支到远程仓库:
git push origin new-branch
拉取远程仓库的更改:
git pull origin main
为项目打上版本标签:
git tag v1.0
推送标签到远程仓库:
git push --tags
git clone https://gitee.com/rngsfan/xuexi.git git add . git commit -m "描述" 可能需要执行: git config --global user.email "[email protected]" git config --global user.name "RNGsfan" git push 要输入账号和密码
ignore文件存放不会被识别的文件后缀名
在git专题我们会认真讨论git
GDB是一个强大的源代码调试工具,用于在程序运行时进行单步调试、设置断点、观察变量值等。它提供了丰富的调试功能,包括调试器命令行界面、查看程序内存、调用函数、查看堆栈信息等。
参数和选项:
-g
:包含调试信息,用于进行源代码调试。
-l
:显示可执行文件依赖的所有共享库。
-n
:不进行任何操作,仅显示GDB的版本信息。
-q
:安静模式,不显示任何调试器相关的输出信息。
-r
:显示可执行文件的关联库信息。
-T
:显示所有设置的调试器选项。
使用例子:
启动调试会话:使用GDB启动一个可执行文件进行调试,可以在终端输入以下命令:
gdb program_name
查看文件内容:l n:从第n行开始输出
设置断点:break or b 行号or函数: Set breakpoint at specified line or function
b mycode.c:19 在mycode,c文件19行设置断点
删除断点:delete breakpoints
休眠,唤醒:disable / enable
查看断点信息:info break\b
运行程序:run [arguments] 或者 r
单步调试:step
、next
和continue
until``finish
s:逐语句 step into
n:逐过程
c:运行到下一个断点
until 行号: 快速跳转至某一行
finish: 快速跑完当前所处的函数
查看变量值:print &i or p &i:查看i的地址
display &i :常显示i的地址 取消用
undisplay 编号(编号在display栏目中)
设置变量值:set var
查看堆栈信息:backtrace or bt
保存和退出调试会话:quit