前言
在这篇文章中,我将深入学习和理解Linux环境基础开发工具的使用。无论你是初学者还是有一定经验的开发者,相信这篇文章都会对你有所帮助。我们将详细讲解软件包管理器、编辑器、编译器、调试器、自动化构建工具以及版本控制工具的使用。
Linux软件包管理器YUM
什么是软件包
在Linux下安装软件,一个常用的办法是下载到程序的源代码,并进行编译,得到可执行程序。但是这样太麻烦了,于是有些人把一些常用的软件提前编译好,做成软件包(可以理解成Windows上的安装程序)放在一个服务器上,通过包管理器可以很方便地获取到这个编译好的软件包,直接进行安装。软件包和软件包管理器,就好比 "App" 和 "应用商店" 这样的关系。YUM(Yellow dog Updater, Modified)是Linux下非常常用的一种包管理器,主要应用在Fedora、RedHat、CentOS等发行版上。
关于rzsz
rzsz是一个用于Windows机器和远端的Linux机器通过XShell传输文件的工具。安装完毕之后可以通过拖拽的方式将文件上传到远端服务器,非常方便。需要注意的是,使用yum进行操作时,必须确保主机(虚拟机)网络畅通,可以通过ping指令验证网络连接是否正常。
查看软件包
通过yum list
命令可以列出当前系统中所有的软件包。由于包的数目可能非常多,我们可以使用grep
命令筛选出我们关注的包。例如:
sh
yum list | grep lrzsz
结果如下:
sh
lrzsz.x86_64 0.12.20-36.el7 @base
软件包名称包括主版本号、次版本号、源程序发行号、软件包的发行号、主机平台和CPU架构。例如,x86_64
表示64位系统的安装包,i686
表示32位系统安装包。选择包时要和系统匹配。el7
表示操作系统发行版的版本,如CentOS7/RedHat7,el6
表示CentOS6/RedHat6。最后一列base
表示软件源的名称,类似于"小米应用商店"、"华为应用商店"的概念。
安装软件
通过YUM,我们可以通过很简单的一条命令完成软件的安装。例如安装lrzsz
:
sh
sudo yum install lrzsz
YUM会自动找到需要下载的软件包,用户需要敲"y"确认安装,出现"complete"字样,说明安装完成。需要注意的是,安装软件时由于需要向系统目录中写入内容,一般需要使用sudo
或切换到root
账户下才能完成。另外,YUM安装软件时只能一个装完了再装另一个,如果在安装过程中再尝试用YUM安装另一个软件,YUM会报错。如果遇到YUM报错,可以自行百度解决方法。
卸载软件
卸载软件同样非常简单:
sh
sudo yum remove lrzsz
Linux编辑器VIM使用
VIM的基本概念
VIM是VI的升级版本,它不仅兼容VI的所有指令,而且还有一些新的特性,例如语法加亮、可视化操作等。VIM具有多种模式,目前我们主要掌握三种:命令模式(Command Mode)、插入模式(Insert Mode)和末行模式(Last Line Mode)。
- 命令模式(Command Mode):控制屏幕光标的移动、字符、字或行的删除、复制某区段等操作,以及进入插入模式或末行模式。
- 插入模式(Insert Mode) :在此模式下可以进行文字输入,按
ESC
键可回到命令模式。 - 末行模式(Last Line Mode) :进行文件保存或退出操作,也可以进行文件替换、找字符串、列出行号等操作。在命令模式下按
:
即可进入末行模式。
VIM的基本操作
进入VIM
在系统提示符下输入vim
及文件名称后进入VIM全屏幕编辑界面。例如:
sh
vim test.c
进入VIM后,默认处于命令模式,需要切换到插入模式才能输入文字。
模式切换
- 命令模式切换至插入模式 :按
a
、i
或o
。a
:从光标当前位置的下一个位置开始输入文字。i
:从光标当前位置开始输入文字。o
:插入新的一行,从行首开始输入文字。
- 插入模式切换至命令模式 :按
ESC
键。 - 命令模式切换至末行模式 :按
shift + :
。
退出VIM及保存文件
在命令模式下,按一下:
进入末行模式。例如:
sh
:w # 保存当前文件
:wq # 保存并退出VIM
:q! # 不保存强制退出VIM
VIM正常模式命令集
插入模式
i
:切换进入插入模式,从光标当前位置开始输入文件。a
:切换进入插入模式,从光标当前位置的下一个位置开始输入文字。o
:切换进入插入模式,插入新的一行,从行首开始输入文字。
移动光标
- 使用
h
、j
、k
、l
分别控制光标左、下、上、右移一格。 G
:移动到文章的最后。$
:移动到光标所在行的行尾。^
:移动到光标所在行的行首。w
:光标跳到下一个字的开头。e
:光标跳到下一个字的字尾。b
:光标回到上一个字的开头。#l
:光标移到该行的第#
个位置,例如5l
、56l
。gg
:进入文本开头。shift + g
:进入文本末尾。ctrl + b
:屏幕往后移动一页。ctrl + f
:屏幕往前移动一页。ctrl + u
:屏幕往后移动半页。ctrl + d
:屏幕往前移动半页。
删除文字
x
:每按一次,删除光标所在位置的一个字符。#x
:例如,6x
表示删除光标所在位置的后面(包含自己在内)6个字符。X
:每按一次,删除光标所在位置的前一个字符。#X
:例如,20X
表示删除光标所在位置的前20个字符。dd
:删除光标所在行。#dd
:从光标所在行开始删除#
行。
复制和粘贴
yw
:将光标所在处到字尾的字符复制到缓冲区中。#yw
:复制#
个字到缓冲区。yy
:复制光标所在行到缓冲区。#yy
:例如,6yy
表示拷贝从光标所在的该行往下数6行文字。p
:将缓冲区内的字符贴到光标所在位置。注意:所有与"y"有关的复制命令都必须与"p"配合才能完成复制与粘贴功能。
替换
r
:替换光标所在处的字符。R
:替换光标所到之处的字符,直到按下ESC
键为止。
撤销操作
u
:撤销上一次操作。按多次u
可以执行多次撤销。ctrl + r
:恢复撤销的操作。
更改
cw
:更改光标所在处的字到字尾处。c#w
:例如,c3w
表示更改3个字。
跳至指定行
ctrl + g
:列出光标所在行的行号。#G
:例如,15G
表示移动光标至文章的第15行行首。
VIM末行模式命令集
列出行号
set nu
:在文件中的每一行前面列出行号。
跳到文件中的某一行
#
:输入数字#
,再按回车键就会跳
到该行。例如,输入数字15
,再回车,就会跳到文章的第15行。
查找字符
/关键字
:按/
键,再输入想寻找的字符,如果第一次找的关键字不是想要的,可以一直按n
会往后寻找。?关键字
:按?
键,再输入想寻找的字符,如果第一次找的关键字不是想要的,可以一直按n
会往前寻找。
保存文件
w
:保存文件。
离开VIM
q
:退出,如果无法离开VIM,可以在q
后跟一个!
强制退出。wq
:保存并退出。
VIM操作总结
VIM有三种主要模式:正常模式、插入模式和末行模式。我们可以使用各种命令进行文件的编辑、查看、查询、插入、删除、替换、撤销、复制等操作。此外,VIM还有许多其他模式,用户可以通过研究VIM的帮助文档来了解更多。
简单VIM配置
配置文件的位置
在目录/etc/
下面,有个名为vimrc
的文件,这是系统中公共的VIM配置文件,对所有用户都有效。而在每个用户的主目录下,可以自己建立私有的配置文件,命名为.vimrc
。例如,/root
目录下,通常已经存在一个.vimrc
文件,如果不存在,则可以创建一个。
切换用户到自己的工作目录:
sh
su
cd ~
打开自己目录下的.vimrc
文件:
sh
vim .vimrc
常用配置选项
- 设置语法高亮:
syntax on
- 显示行号:
set nu
- 设置缩进的空格数为4:
set shiftwidth=4
使用插件
要配置更强大的VIM,原生的配置可能功能不全,可以选择安装插件来完善配置。例如,安装TagList插件和WinManager插件。
安装TagList插件
-
下载
taglist_xx.zip
,解压完成后,将解压出来的doc
内容放到~/.vim/doc
,将解压出来的plugin
内容拷贝到~/.vim/plugin
。 -
在
~/.vimrc
中添加:shlet Tlist_Show_One_File=1 let Tlist_Exit_OnlyWindow=1 let Tlist_Use_Right_Window=1
安装文件浏览器和窗口管理器插件WinManager
-
下载
winmanager.zip
,解压完成后,将解压出来的doc
内容放到~/.vim/doc
,将解压出来的plugin
内容拷贝到~/.vim/plugin
。 -
在
~/.vimrc
中添加:shlet g:winManagerWindowLayout='FileExplorer|TagList' nmap wm :WMToggle<cr>
-
重启VIM,打开文件,在正常模式下输入
wm
。
Linux编译器GCC/G++使用
背景知识
GCC是GNU Compiler Collection的缩写,是Linux系统中的标准编译器。它支持多种编程语言,如C、C++、Objective-C、Fortran、Ada等。GCC编译器的工作过程分为四个阶段:预处理、编译、汇编和连接。
- 预处理:进行宏替换、文件包含、条件编译和去注释等操作。
- 编译:将预处理后的代码翻译成汇编语言。
- 汇编:将汇编代码转化为机器码。
- 连接:将目标文件与库文件链接,生成可执行文件或库文件。
GCC如何完成
预处理
预处理主要包括宏定义、文件包含、条件编译、去注释等操作。预处理指令是以#
号开头的代码行。用户可以使用-E
选项进行预处理,停止编译过程。例如:
sh
gcc -E hello.c -o hello.i
其中,-E
选项的作用是让GCC在预处理结束后停止编译过程,-o
选项指定输出文件,.i
文件是已经过预处理的C源代码。
编译
编译阶段中,GCC首先检查代码的规范性、是否有语法错误等,在检查无误后,将代码翻译成汇编语言。用户可以使用-S
选项只进行编译而不进行汇编,生成汇编代码。例如:
sh
gcc -S hello.i -o hello.s
汇编
汇编阶段是将汇编代码转化为机器码。用户可以使用-c
选项生成目标文件。例如:
sh
gcc -c hello.s -o hello.o
连接
连接阶段是将目标文件与库文件链接,生成可执行文件或库文件。例如:
sh
gcc hello.o -o hello
函数库
在C程序中,常用的库函数如printf
的实现并不在源代码中定义,而是在库文件中。系统将这些函数实现放在名为libc.so.6
的库文件中,GCC会在链接阶段将其链接到程序中。函数库分为静态库和动态库两种。
- 静态库 :在编译链接时将库文件的代码全部加入到可执行文件中,生成的文件较大,但运行时不需要库文件。静态库的后缀名一般为
.a
。 - 动态库 :在编译链接时不将库文件的代码加入到可执行文件中,而是在程序执行时由运行时链接器加载库文件,节省系统开销。动态库的后缀名一般为
.so
。
GCC选项
GCC提供了许多选项,用户可以根据需要进行配置。例如:
-E
:只激活预处理,不生成文件。-S
:只进行编译,不进行汇编和链接。-c
:只进行编译,不进行连接。-o
:指定输出文件。-static
:生成静态链接的文件。-g
:生成调试信息。-shared
:尽量使用动态库,生成的文件较小,但需要系统有动态库。-O0
至-O3
:编译器优化选项的4个级别,-O0
表示没有优化,-O1
为默认值,-O3
优化级别最高。-w
:不生成任何警告信息。-Wall
:生成所有警告信息。
Linux调试器GDB使用
背景
程序发布方式有两种:debug模式和release模式。Linux下GCC/G++生成的二进制程序默认是release模式,要使用GDB调试,必须在源代码生成二进制程序时加上-g
选项。
开始使用
GDB是GNU Debugger的缩写,用于调试程序。用户可以通过以下命令启动GDB:
sh
gdb binFile
调试过程中可以使用以下命令:
list
或l 行号
:显示源代码,每次列10行。run
或r
:运行程序。next
或n
:单条执行。step
或s
:进入函数调用。break
或b 行号
:在某一行设置断点。info break
:查看断点信息。finish
:执行到当前函数返回。print
或p 表达式
:打印表达式的值。set var
:修改变量的值。continue
或c
:从当前位置开始连续执行程序。delete breakpoints
:删除所有断点。disable breakpoints
:禁用断点。enable breakpoints
:启用断点。display 变量名
:跟踪查看变量值。undisplay
:取消对变量的跟踪。until 行号
:跳至指定行。backtrace
或bt
:查看函数调用及参数。info locals
:查看当前栈帧局部变量的值。quit
:退出GDB。
理解
通过实际操作理解GDB的使用方法,可以帮助用户在调试过程中快速定位和解决问题。
Linux项目自动化构建工具Make/Makefile
背景
Makefile是一种自动化编译工具,定义了一系列的规则来指定哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译等。Makefile极大地提高了软件开发的效率,特别是在大型项目中。Make是一个命令工具,用于解释Makefile中的指令。
理解
Makefile定义了一系列依赖关系和命令。例如:
Makefile
hello: hello.o
gcc hello.o -o hello
hello.o: hello.s
gcc -c hello.s -o hello.o
hello.s: hello.i
gcc -S hello.i -o hello.s
hello.i: hello.c
gcc -E hello.c -o hello.i
Makefile通过依赖关系定义了编译顺序,Make会根据依赖关系自动进行编译。
项目清理
在Makefile中定义清理目标,可以方便地清除所有生成的文件。例如:
Makefile
.PHONY: clean
clean:
rm -f hello.i hello.s hello.o hello
伪目标clean
用于清除所有目标文件,以便重编译。
Linux第一个小程序:进度条
\r和\n
回车\r
和换行\n
的概念在进度条显示中非常重要。回车\r
将光标移到行首,换行\n
将光标移到下一行。
行缓冲区概念
行缓冲区会导致输出无法立即显示,可以通过fflush(stdout)
刷新缓冲区。例如:
c
#include <stdio.h>
#include <unistd.h>
int main() {
printf("hello Makefile!");
fflush(stdout);
sleep(3);
return 0;
}
进度条代码
下面是一个简单的进度条实现代码:
c
#include <stdio.h>
#include <unistd.h>
#include <string.h>
int main() {
int i = 0;
char bar[102];
memset(bar, 0, sizeof(bar));
const char *lable = "|/-\\";
while (i <= 100) {
printf("[%-100s][%d%%][%c]\r", bar, i, lable[i % 4]);
fflush(stdout);
bar[i++] = '#';
usleep(10000);
}
printf("\n");
return 0;
}
使用Git命令行
安装Git
可以通过以下命令安装Git:
sh
yum install git
在GitHub创建项目
注册账号
在GitHub官网注册账号,并进行邮箱校验。
创建项目
- 登录成功后,进入个人主页,点击左下方的
New repository
按钮新建项目。 - 在新页面中输入项目名称,点击
Create repository
按钮确认创建。 - 在创建好的项目页面中复制项目的链接,备用下载。
下载项目到本地
创建好一个放置代码的目录,然后使用以下命令下载项目:
sh
git clone [url]
Git操作三板斧
git add
将需要用Git管理的文件告知Git:
sh
git add [文件名]
git commit
提交改动到本地:
sh
git commit -m "提交日志"
git push
同步到远端服务器上:
sh
git push
需要输入用户名和密码,提交成功后,刷新GitHub页面就能看到代码改动了。
配置免密码提交
可以参考CSDN博客进行配置。
总结
从软件包管理器、编辑器、编译器、调试器、自动化构建工具到版本控制工具,每个工具都有其独特的功能和用法。掌握这些工具,可以帮助我们更高效地进行开发和管理项目。
嗯,就是这样啦,文章到这里就结束啦,真心感谢你花时间来读。
觉得有点收获的话,不妨给我点个赞 吧!
如果发现文章有啥漏洞或错误的地方,欢迎私信我或者在评论里提醒一声~