从入门到精通:详解Linux环境基础开发工具的使用

前言

在这篇文章中,我将深入学习和理解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后,默认处于命令模式,需要切换到插入模式才能输入文字。

模式切换
  • 命令模式切换至插入模式 :按aio
    • a:从光标当前位置的下一个位置开始输入文字。
    • i:从光标当前位置开始输入文字。
    • o:插入新的一行,从行首开始输入文字。
  • 插入模式切换至命令模式 :按ESC键。
  • 命令模式切换至末行模式 :按shift + :
退出VIM及保存文件

在命令模式下,按一下:进入末行模式。例如:

sh 复制代码
:w    # 保存当前文件
:wq   # 保存并退出VIM
:q!   # 不保存强制退出VIM

VIM正常模式命令集

插入模式
  • i:切换进入插入模式,从光标当前位置开始输入文件。
  • a:切换进入插入模式,从光标当前位置的下一个位置开始输入文字。
  • o:切换进入插入模式,插入新的一行,从行首开始输入文字。
移动光标
  • 使用hjkl分别控制光标左、下、上、右移一格。
  • G:移动到文章的最后。
  • $:移动到光标所在行的行尾。
  • ^:移动到光标所在行的行首。
  • w:光标跳到下一个字的开头。
  • e:光标跳到下一个字的字尾。
  • b:光标回到上一个字的开头。
  • #l:光标移到该行的第#个位置,例如5l56l
  • 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插件
  1. 下载taglist_xx.zip,解压完成后,将解压出来的doc内容放到~/.vim/doc,将解压出来的plugin内容拷贝到~/.vim/plugin

  2. ~/.vimrc中添加:

    sh 复制代码
    let Tlist_Show_One_File=1
    let Tlist_Exit_OnlyWindow=1
    let Tlist_Use_Right_Window=1
安装文件浏览器和窗口管理器插件WinManager
  1. 下载winmanager.zip,解压完成后,将解压出来的doc内容放到~/.vim/doc,将解压出来的plugin内容拷贝到~/.vim/plugin

  2. ~/.vimrc中添加:

    sh 复制代码
    let g:winManagerWindowLayout='FileExplorer|TagList'
    nmap wm :WMToggle<cr>
  3. 重启VIM,打开文件,在正常模式下输入wm

Linux编译器GCC/G++使用

背景知识

GCC是GNU Compiler Collection的缩写,是Linux系统中的标准编译器。它支持多种编程语言,如C、C++、Objective-C、Fortran、Ada等。GCC编译器的工作过程分为四个阶段:预处理、编译、汇编和连接。

  1. 预处理:进行宏替换、文件包含、条件编译和去注释等操作。
  2. 编译:将预处理后的代码翻译成汇编语言。
  3. 汇编:将汇编代码转化为机器码。
  4. 连接:将目标文件与库文件链接,生成可执行文件或库文件。

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

调试过程中可以使用以下命令:

  • listl 行号:显示源代码,每次列10行。
  • runr:运行程序。
  • nextn:单条执行。
  • steps:进入函数调用。
  • breakb 行号:在某一行设置断点。
  • info break:查看断点信息。
  • finish:执行到当前函数返回。
  • printp 表达式:打印表达式的值。
  • set var:修改变量的值。
  • continuec:从当前位置开始连续执行程序。
  • delete breakpoints:删除所有断点。
  • disable breakpoints:禁用断点。
  • enable breakpoints:启用断点。
  • display 变量名:跟踪查看变量值。
  • undisplay:取消对变量的跟踪。
  • until 行号:跳至指定行。
  • backtracebt:查看函数调用及参数。
  • 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官网注册账号,并进行邮箱校验。

创建项目
  1. 登录成功后,进入个人主页,点击左下方的New repository按钮新建项目。
  2. 在新页面中输入项目名称,点击Create repository按钮确认创建。
  3. 在创建好的项目页面中复制项目的链接,备用下载。

下载项目到本地

创建好一个放置代码的目录,然后使用以下命令下载项目:

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博客进行配置。

总结

从软件包管理器、编辑器、编译器、调试器、自动化构建工具到版本控制工具,每个工具都有其独特的功能和用法。掌握这些工具,可以帮助我们更高效地进行开发和管理项目。

嗯,就是这样啦,文章到这里就结束啦,真心感谢你花时间来读。

觉得有点收获的话,不妨给我点个 吧!

如果发现文章有啥漏洞或错误的地方,欢迎私信我或者在评论里提醒一声~

相关推荐
正在走向自律24 分钟前
阿里云ESC服务器一次性全部迁移到另一个ESC
服务器·阿里云·云计算
gywl1 小时前
openEuler VM虚拟机操作(期末考试)
linux·服务器·网络·windows·http·centos
青木沐1 小时前
Jenkins介绍
运维·jenkins
WTT00111 小时前
2024楚慧杯WP
大数据·运维·网络·安全·web安全·ctf
苹果醋32 小时前
React源码02 - 基础知识 React API 一览
java·运维·spring boot·mysql·nginx
了一li2 小时前
Qt中的QProcess与Boost.Interprocess:实现多进程编程
服务器·数据库·qt
日记跟新中2 小时前
Ubuntu20.04 修改root密码
linux·运维·服务器
唐小旭2 小时前
服务器建立-错误:pyenv环境建立后python版本不对
运维·服务器·python
码农君莫笑2 小时前
信管通低代码信息管理系统应用平台
linux·数据库·windows·低代码·c#·.net·visual studio