宣城市建设监督管理局网站,网站做专题页面,h5开发工具哪个好,中国建设银行积分兑换网站目录
Linux软件包管理器 - yum Linux下安装软件的方式 认识yum 查找软件包 安装软件 如何实现本地机器和云服务器之间的文件互传 卸载软件
Linux编辑器 - vim vim的基本概念 vim下各模式的切换 vim命令模式各命令汇总 vim底行模式各命令汇总 vim的简单配置
Linux编译器 - gc…目录
Linux软件包管理器 - yum Linux下安装软件的方式 认识yum 查找软件包 安装软件 如何实现本地机器和云服务器之间的文件互传 卸载软件
Linux编辑器 - vim vim的基本概念 vim下各模式的切换 vim命令模式各命令汇总 vim底行模式各命令汇总 vim的简单配置
Linux编译器 - gcc/g gcc/g的作用 gcc/g语法 预处理 编译 汇编 链接 静态库与动态库
Linux项目自动化构建工具 - make/Makefile make/Makefile的重要性 依赖关系和依赖方法 多文件编译 make原理 项目清理
Linux第一个小程序 - 进度条 行缓冲区的概念 \r和\n 进度条代码
Gitee上传代码 Linux软件包管理器 - yum Linux下安装软件的方式
在 Linux 系统中安装软件的方法主要有以下三种 编译源代码从网络上下载软件的源代码然后自行编译生成可执行程序。这种方式适合高级用户可以根据需要进行深度定制。 使用 rpm 包获取 rpm 安装包然后通过 rpm 命令进行安装。这种方法不解决软件的依赖关系适合安装单个独立的软件包。 使用 yum 包管理器通过 yum 命令进行软件安装。这是最常用的方法之一因为它会自动处理软件的依赖关系简化了安装过程。 认识yum yum 是 Fedora、RedHat 和 CentOS 系统中的前端软件包管理器。它可以自动从指定的服务器下载并安装 rpm 包自动处理依赖关系并一次性安装所有必需的软件包省去了手动逐个下载和安装的繁琐过程。
注意一个服务器同一时刻只允许一个yum进行安装不能在同一时刻同时安装多个软件。 因为yum是从服务器上下载RPM包所以在下载时必须联网可以通过ping指令判断当前云服务器是否联网。 查找软件包 通过 yum list 命令可以罗列出当前一共有哪些软件包. 由于包的数目可能非常之多, 这里我们需要使用 grep 命令只筛选出我们关注的包. 例如:
yum list | grep lrzsz 结果如下
lrzsz.x86_64 0.12.20-36.el7 base 说明 1软件包名称主版本号.次版本号.源程序发行号-软件包的发行号.主机平台.cpu架构。 2x86_64后缀表示64位系统的安装包i686后缀表示32位系统安装包选择包时要和系统匹配。 3el7表示操作系统发行版的版本“el7表示的是centos7/redhat7”“el6表示centos6/redhat6”。 4最后一列表示的是“软件源”的名称类似于“小米应用商店”“华为应用商店”这样的概念。 安装软件
指令 sudo yum install 软件名
sudo yum install lrzsz yum会自动找到都有哪些软件包需要下载这时候敲“y”确认安装当出现“complete”字样时说明安装完成。
注意事项 1安装软件时由于需要向系统目录中写入内容一般需要sudo或者切换到root账户下才能完成。 2yum安装软件只能一个装完了再装另一个正在使用yum安装一个软件的过程中如果再尝试用yum安装另外一个软件yum会报错。 如何实现本地机器和云服务器之间的文件互传 既然已经安装了lrzsz这里就顺便说一下lrzsz如何使用。
指令 rz -E 通过该指令可选择需要从本地机器上传到云服务器的文件。
指令 sz 文件名 该指令可将云服务器上的文件下载到本地机器的指定文件夹。 卸载软件
指令 sudo yum remove 软件名 yum会自动卸载该软件这时候敲“y”确认卸载当出现“complete”字样时说明卸载完成。
Linux编辑器 - vim vim的基本概念 Vim是一个功能强大的文本编辑器特别适用于编写和编辑代码。 它的核心概念包括几种主要模式 命令模式 (Normal mode): 在命令模式下键盘输入的大多数按键会被解释为命令而不是输入字符。这时候你可以移动光标、复制粘贴文本、删除字符或行、查找替换等操作。常用的移动命令包括 h (左)、j (下)、k (上)、l (右)以及 w (下一个单词)、b (前一个单词) 等。 插入模式 (Insert mode): 在插入模式下Vim类似于普通文本编辑器你可以直接输入并编辑文本。进入插入模式的常见方法是按下 i 键在光标当前位置插入、a 键在光标后插入、o 键在当前行下插入新行并进入插入模式等。 底行模式 (Command-line mode): 底行模式允许你执行一些底层命令如保存文件、退出编辑器、执行查找替换等操作。你可以通过按下 : 进入底行模式然后输入相应的命令来执行操作。例如:w 保存文件、:q 退出、:wq 保存并退出等。 vim下各模式的切换
指令 vim 文件名
russleovirtual-machine:~/russleo$ vim test.c 进入vim后默认为命令模式普通模式要输入文字需切换到插入模式。 从命令模式切换至插入模式 按下 i在当前光标处进入插入模式可以直接输入文本。按下 a在当前光标的后一位置进入插入模式方便在已有文本后添加内容。按下 o在当前光标所在行的下方新起一行并进入插入模式适合在当前行下方插入新内容。 从命令模式切换至底行模式 输入 Shift;实际上就是输入 :进入底行模式可以执行保存、退出等命令。 从插入模式或底行模式切换至命令模式 按下 Esc 键即可从插入模式或底行模式返回到命令模式这样你可以继续使用移动、删除、复制等命令操作文本。 这些快捷键和操作方法是Vim中使用频率非常高的基础操作熟练掌握它们能够极大提升编辑效率和流畅度。 vim命令模式各命令汇总 移动光标 k光标向上移动。j光标向下移动。h光标向左移动。l光标向右移动。$Shift4移动到光标所在行的行尾。^Shift6移动到光标所在行的行首。gg移动到文本的开头。GShiftg移动到文本的末尾。nG移动到第n行的行首。nEnter光标向下移动n行。w跳到下一个单词的开头。e跳到当前或下一个单词的结尾。b跳到前一个单词的开头。 删除 x删除光标所在位置的字符。nx删除光标后n个字符。X删除光标前的一个字符。nX删除光标前n个字符。dd删除光标所在行。ndd删除从光标开始的n行。 复制粘贴 yy复制光标所在行到缓冲区。nyy复制光标开始的n行到缓冲区。yw复制从光标到当前单词结尾的字符到缓冲区。nyw复制光标后的n个单词到缓冲区。p粘贴缓冲区的内容在光标的下一行。np粘贴缓冲区的内容在光标的下一行n次。 剪切 dd剪切光标所在行。ndd剪切从光标开始的n行。p粘贴剪切的内容在光标的下一行。np粘贴剪切的内容在光标的下一行n次。 撤销和恢复 u撤销最后的操作。Ctrlr恢复上一步撤销的操作。 大小写切换 ~Shift切换光标所在位置字符的大小写。n~切换光标后n个字符的大小写。 替换 r替换光标所在位置的字符。R替换从光标位置开始的字符直到按下 Esc 键。 更改 cw删除从光标到当前单词结尾的字符并进入插入模式。cnw删除光标后的n个单词并进入插入模式。 翻页 Ctrlb向上翻一页。Ctrlf向下翻一页。Ctrlu向上翻半页。Ctrld向下翻半页。 vim底行模式各命令汇总 在使用底行模式之前记住先按「Esc」键确定你已经处于命令模式再按「:」即可进入底行模式。 行号设置 set nu显示行号。set nonu取消显示行号。 保存退出 w保存文件。q退出 Vim。如果有未保存的修改会提示保存或放弃修改。q!强制退出 Vim丢弃所有修改。wq保存并退出 Vim。 分屏指令 vs 文件名在垂直方向上分屏打开指定文件。Ctrlw w在多个分屏之间切换光标焦点。 执行指令 !指令在不退出 Vim 的情况下执行 Linux 指令。例如可以使用 :!ls 查看当前目录的内容或者 :!make 编译当前代码。 vim的简单配置
关于Vim配置文件的位置和作用范围如下 系统级配置文件位于 /etc/vimrc这是系统中公共的配置文件对所有用户都有效。系统管理员可以在这里设置全局的 Vim 配置选项影响所有用户的 Vim 使用体验。 用户级配置文件位于每个用户的主目录下路径为 ~/.vimrc。例如用户 xxx 的私有配置文件路径为 /home/xxx/.vimrc。这是用户私有的配置文件只对该用户有效。用户可以在这里设置个性化的 Vim 配置选项如显示行号、设置键盘映射、定义命令别名等。 vim的配置比较复杂某些vim配置还需要使用插件建议不要自己一个个去配置。比较简单的方法是直接执行以下指令想在哪个用户下让vim配置生效就在哪个用户下执行该指令不推荐直接在root下执行 在CSDN上有很多关于vim配置的文章配置完成后像什么自动补全、行号显示以及自动缩进什么的就都有了。
Linux编译器 - gcc/g gcc/g的作用 gcc和g分别是GNU的C和C的编译器。 gcc和g在执行编译的时候一般有以下四个步骤 预处理阶段这是编译过程的第一步预处理器负责展开所有的头文件移除注释进行宏定义的替换并根据预处理指令如#ifdef、#ifndef等执行条件编译。这一阶段源代码被调整为更适于编译的形式。 编译阶段在预处理完成后编译器开始工作将经过预处理的C或C代码翻译成汇编语言。这一过程涉及到语法分析、语义分析以及优化等复杂操作确保生成的汇编代码既符合规范又高效。 汇编阶段接下来汇编器接手将上一步生成的汇编语言代码转换成机器能理解的二进制目标代码。这些目标代码文件通常以.o或.obj为扩展名它们是下一步链接过程的基本单位。 链接阶段最后链接器将所有相关的二进制目标代码文件连接在一起解决外部引用生成最终的可执行程序或库文件。这一过程中链接器还会处理静态库和动态库的链接确保程序运行时能够访问到所需的全部资源。 gcc/g语法 语法 gcc/g 选项 文件常用选项 -E当使用这个选项时GCC/G仅执行预处理阶段并输出预处理后的源代码。通常用于检查预处理的结果。 -S使用这个选项时GCC/G会执行预处理和编译阶段但不会进行汇编和链接。结果是一个汇编语言文件。 -c这个选项告诉编译器仅编译到目标代码(.o文件)而不进行链接。 -o这个选项允许你指定输出文件的名字。例如gcc main.c -o myprogram 将编译 main.c 并将可执行文件命名为 myprogram。 -static使用这个选项时GCC/G会尝试使用静态库进行链接而不是共享库。这会导致生成的可执行文件较大但可能在没有安装相应共享库的系统上仍能运行。 -g这个选项要求编译器生成调试信息使得生成的可执行文件可以用调试器如 GDB 来调试。 -shared当创建动态链接库.so 文件时需要使用此选项。它告诉编译器生成一个共享对象。 -w这个选项抑制所有的警告信息。 -Wall相反于 -w-Wall 开启尽可能多的警告信息帮助开发者发现潜在的问题。 -O0, -O1, -O2, -O3这些选项控制编译器的优化等级。-O0 表示不进行优化而 -O3 是最高等级的优化可以显著提高程序的运行速度但可能会导致生成的代码更难理解对于人类而言。 预处理
russleoVM-0-2-ubuntu:~/test$ gcc -E test.c -o test.i预处理功能主要包括头文件展开、去注释、宏替换、条件编译等。预处理指令是以#开头的代码行。-E选项的作用是让gcc/g在预处理结束后停止编译过程。-o选项是指目标文件“xxx.i”文件为已经过预处理的原始程序。 编译
russleoVM-0-2-ubuntu:~/test$ gcc -S test.i -o test.s在这个阶段中gcc/g首先检查代码的规范性、是否有语法错误等以确定代码的实际要做的工作在检查无误后将代码翻译成汇编语言。用户可以使用-S选项来进行查看该选项只进行编译而不进行汇编生成汇编代码。-o选项是指目标文件“xxx.s”文件为已经过翻译的原始程序。 汇编
russleoVM-0-2-ubuntu:~/test$ gcc -c test.s -o test.o汇编阶段是把编译阶段生成的“xxx.s”文件转成目标文件。使用-c选项就可以得到汇编代码转化为“xxx.o”的二进制目标代码了。 链接
russleoVM-0-2-ubuntu:~/test$ gcc test.o -o test在成功完成以上步骤之后就进入了链接阶段。链接的主要任务就是将生成的各个“xxx.o”文件进行链接生成可执行文件。gcc/g不带-E、-S、-c选项时就默认生成预处理、编译、汇编、链接全过程后的文件。若不用-o选项指定生成文件的文件名则默认生成的可执行文件名为a.out 静态库与动态库
函数库一般分为静态库和动态库两种
静态库是指编译链接时把库文件的代码全部加入到可执行文件当中因此生成的文件比较大但在运行时也就不再需要库文件了静态库一般以.a为后缀。动态库与之相反在编译链接时并没有把库文件的代码加入到可执行文件当中而是在程序运行时由链接文件加载库这样可以节省系统的开销动态库一般以.so为后缀。 动态链接 优点省空间磁盘的空间内存的空间bin体积小加载速度快。 缺点依赖动态库程序可移植性较差。静态链接 优点不依赖第三方库程序的可移植性较高。 缺点浪费空间。 gcc和g默认生成的二进制程序是动态链接的我们可以使用file指令进行查看。
其次我们还可以使用ldd指令查看动态链接的可执行文件所依赖的库。
虽然gcc和g默认采用的是动态链接但如果我们需要使用静态链接带上-static选项即可。
russleoVM-0-2-ubuntu:~/test$ gcc test.c -o test_s -static此时生成的可执行文件就是静态链接的了。 我们可以查看源代码相同但链接方式不同而生成的两个可执行程序test和test_s的大小。这也证明了动态链接比较节省空间而静态链接比较浪费空间。
Linux项目自动化构建工具 - make/Makefile make/Makefile的重要性 撰写Makefile的能力对于大型软件工程的管理至关重要它不仅反映了一个开发者对项目结构和构建流程的理解深度还体现了其能否高效地处理复杂工程的能力。在大型项目中源代码文件数量庞大根据类型、功能或模块被精心组织在不同的目录下。此时Makefile就像一个指挥家通过预定义的规则有序地安排文件的编译顺序甚至执行更为复杂的任务如依赖性管理、资源清理等。 Makefile的核心优势在于实现“自动化编译”。一旦正确配置只需简单输入make命令整个工程就能自动完成编译显著提升了开发效率减少了人为错误使得软件构建过程更加稳定可靠。此外make作为解释Makefile指令的工具已广泛集成到各种集成开发环境IDE中如Delphi的makeVisual C的nmake以及Linux下GNU的make这表明Makefile已经成为跨平台项目构建的标准实践。 总之Makefile与make命令的结合为软件工程提供了一种标准化、自动化的构建方案是现代软件开发中不可或缺的一部分。掌握Makefile的编写意味着能够更好地管理和优化大型项目的构建流程提高团队的开发效率。 注意make是一条命令Makefile是一个文件 依赖关系和依赖方法
在使用make/Makefile前我们首先应该理解各个文件之间的依赖关系以及它们之间的依赖方法。 依赖关系 文件A的变更会影响到文件B那么就称文件B依赖于文件A。 例如test.o文件是由test.c文件通过预处理、编译以及汇编之后生成的文件所以test.c文件的改变会影响test.o所以说test.o文件依赖于test.c文件。 依赖方法 如果文件B依赖于文件A那么通过文件A得到文件B的方法就是文件B依赖于文件A的依赖方法。 例如test.o依赖于test.c而test.c通过gcc -c test.c -o test.o指令就可以得到test.o那么test.o依赖于test.c的依赖方法就是gcc -c test.c -o test.o。 多文件编译 在处理包含多个源文件的工程项目时采用多步骤的编译策略可以显著提升开发效率和构建速度。直接使用gcc命令一次性编译所有源文件虽然可行但在源代码频繁变更的情况下这种做法会导致不必要的重复工作因为哪怕只是单个源文件发生改动也需要重新编译整个项目。 相比之下先将每个源文件独立编译成目标文件通常为.o格式的二进制文件再将这些目标文件链接生成最终的可执行程序是一种更为高效的做法。这种方式的好处在于当你修改了某个源文件后只需要重新编译那个特定的源文件生成新的目标文件然后与其它未改动的目标文件一起进行链接从而生成更新后的可执行程序。这样既节省了时间又避免了资源的浪费。 首先针对每个源文件使用gcc命令进行编译生成相应的目标文件。例如 gcc -c file1.c -o file1.o
gcc -c file2.c -o file2.o 然后将所有生成的目标文件链接起来创建可执行程序 gcc file1.o file2.o -o executable 需要注意的是在编译阶段无需显式指定头文件路径。编译器会根据源文件中的#include指令自动查找所需的头文件。如果头文件使用的是标准库通常使用尖括号包含如果是项目内部的自定义头文件则使用双引号包含。编译器会依据不同的包含方式从系统库路径或当前项目路径查找对应的头文件。 但是随着源文件个数的增加我们每次重新生成可执行程序时所需输入的gcc指令的长度与个数也会随之增加。这时我们就需要使用make和Makefile了这将大大减少我们的工作量。 步骤1 在源文件所在目录下创建一个名为Makefile/makefile的文件。 步骤2 编写Makefile文件。 Makefile文件最简单的编写格式是先写出文件的依赖关系然后写出这些文件之间的依赖方法依次写下去。 编写完毕Makefile文件后保存退出然后在命令行当中执行make指令便可以生成可执行程序以及该过程产生的中间产物。 Makefile文件的简写方式
$表示依赖关系中的目标文件冒号左侧。$^表示依赖关系中的依赖文件列表冒号右侧全部。$表示依赖关系中的第一个依赖文件冒号右侧第一个。
例如以上Makefile文件可以简写为 说明 gcc/g携带-c选项时若不指定输出文件的文件名则默认输出文件名为xxx.o所以这里也可以不用指定输出文件名。 make原理
make会在当前目录下找名字为“Makefile”或“makefile”的文件。如果找到它会找文件当中的第一个目标文件在上面的例子中它会找到mytest这个文件并把这个文件作为最终的目标文件。如果mytest文件不存在或是mytest所依赖的后面的test.o文件和main.o文件的文件修改时间比mytest文件新那么它就会执行后面的依赖方法来生成mytest文件。如果mytest所依赖的test.o文件不存在那么make会在Makefile文件中寻找目标为test.o文件的依赖关系如果找到则再根据其依赖方法生成test.o文件类似于堆栈的过程。当然你的test.c文件和main.c文件是存在的于是make会生成test.o文件和main.o文件然后再用test.o文件和main.o文件生成最终的mytest文件。make会一层又一层地去找文件的依赖关系直到最终编译出第一个目标文件。在寻找的过程中如果出现错误例如最后被依赖的文件找不到那么make就会直接退出并报错。 项目清理 在我们每次重新生成可执行程序前都应该将上一次生成可执行程序时生成的一系列文件进行清理但是如果我们每次都手动执行一系列指令进行清理工作的话未免有些麻烦因为每次清理时执行的都是相同的清理指令这时我们可以将项目清理的指令也加入到Makefile文件当中。 即命令——“make clean”以此来清除所有的目标文件以便重编译。
Linux第一个小程序 - 进度条 行缓冲区的概念 首先我们来感受一下行缓冲区的存在在Linux当中以下代码的运行结果是什么样的 对于此代码大家应该都没问题当然是先输出字符串hello world然后休眠3秒之后结束运行。那么对于以下代码呢 可以看到代码中仅仅删除了字符串后面的’\n’那么代码的运行结果还与之前相同吗答案否定的该代码的运行结果是先休眠3秒然后打印字符串hello world之后结束运行。该现象就证明了行缓冲区的存在。 显示器对应的是行刷新即当缓冲区当中遇到’\n’或是缓冲区被写满才会被打印出来而在第二份代码当中并没有’\n’所以字符串hello world先被写到缓冲区当中去了然后休眠3秒后直到程序运行结束时才将hello world打印到显示器当中。 \r和\n \r 回车使光标回到本行行首。 \n 换行使光标下移一格。 既然是\r是使光标回到本行行首那么如果我们向显示器上写了一个数之后再让光标回到本行行首然后再写一个数不就相当于将前面一个数字覆盖了吗 但这里有一个问题不使用’\n’进行换行怎么将缓冲区当中数据打印出来 这里我们可以使用fflush函数该函数可以刷新缓冲区即将缓冲区当中的数据刷新当显示器当中。 对此我们可以编写一个倒计时的程序。 进度条代码 Makefile processbar.h processbar.c main.c 代码效果 Gitee上传代码 首先我们需要在gitee上注册一个仓库再将我们的仓库克隆到Linux系统中如下图所示 在Linux系统上安装git工具
russleoVM-0-2-ubuntu:~$ sudo apt install -y git再将需要上传的目录复制到仓库目录下 再依次进行add commit -m push操作 如果没有显示错误信息我们就可以在gitee网站上看到我们所上传的文件及目录。