Linux环境 基础开发工具使用

Posted 在下赵某人

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux环境 基础开发工具使用相关的知识,希望对你有一定的参考价值。

目录:

Linux 软件包管理器 yum

什么是软件包

  1. 在Linux下安装软件, 一个通常的办法是下载到程序的源代码, 并进行编译, 得到可执行程序.
  2. 但是这样太麻烦了, 于是有些人把一些常用的软件提前编译好, 做成软件包(可以理解为软件安装程序)放在一个服务器上,
    通过包管理器(可以理解为软件商店)可以很方便的获取到这个编译好的软件包, 直接进行安装.
  3. 软件包和软件包管理器, 就好比 “安装包” 和 “应用商店” 这样的关系.
  4. yum是Linux下非常常用的一种包管理器. 主要应用在Fedora,RedHat, Centos等发行版上.

关于 rz、sz

rz,sz是 windows机器 和 远端的Linux机器 通过 XShell 传输文件的命令行工具。

安装:

  • yum install lrzsz

用法:

  • sz:将选定的文件发送到本地机器
  • rz:运行该命令会弹出一个文件选择窗口,可以通过拖拽的方式将文件从本地上传到Linux服务器。

查看软件包

yum list 命令可以罗列出当前一共有哪些软件包. 包的数目可能非常多,我们需要使用 grep 命令筛选出我们需要的包。例如:

yum list | grep lrzsz

结果如下:

注意事项:

  • 软件包名称: 主版本号.次版本号.源程序发行号-软件包的发行号.主机平台.cpu架构.
  • "x86_64" 后缀表示64位系统的安装包, “i686” 后缀表示32位系统安装包. 选择包时要和系统匹配.
  • "el7" 表示操作系统发行版的版本. “el7” 表示的是 centos7/redhat7. “el6” 表示centos6/redhat6.
  • base 表示的是 “软件源” 的名称, 类似于 “小米应用商店”, “华为应用商店” 这样的概念.

如何安装软件

用install命令,例如 lrzsz 的安装:

sudo yum install lrzsz

yum 会自动下载对应的软件包,最后会进行询问,这时候敲 “y” 确认安装。最后会出现 “complete” 字样, 说明安装完成。

注意事项:

  • 安装软件时由于需要向系统目录中写入内容, 一般需要 sudo 或者切到 root 账户下才能完成.
  • yum安装软件只能一个装完了再装另一个. 正在yum安装一个软件的过程中, 如果再尝试用yum安装另外一个软件, yum会报错.

如何卸载软件

用remove命令,例如 lrzsz 的卸载:

sudo yum remove lrzsz

总结:

  1. 搜索: sudo yum list |grep xxx
  2. 安装: sudo yum install [-y] xxx
  3. 卸载: sudo yum remove [-y] xxx

Linux开发工具 — 编辑器vim使用

vi/vim都是多模式编辑器,但vim是vi的升级版本,vim兼容vi的所有指令。

安装vim:

sudo yum install [-y] vim

1. vim的基本概念

vim的三种常用模式:1.命令模式、2.插入模式、3.底行模式

各模式的功能区分如下:

  1. 正常/普通/命令模式
  • 控制屏幕光标的移动。
  • 字符、字或行的复制、剪切、粘贴、删除。
  • 进入 插入模式 下,或者到 底行模式
  1. 插入模式
  • 只有在插入模式下,才可以做文字输入。
  • 命令模式下,输入aio即可进入该模式。按「ESC」键可回到命令行模式。
  1. 底行/末行模式
  • 文件保存或退出,也可以进行文件替换,找字符串,列出行号等操作。
  • 命令模式下,shift+: 即可进入该模式。按「ESC」键可回到命令行模式。

2. vim的基本操作

  1. 进入vim,输入:vim+文件名称,就进入vim编辑界面:

  • 注意,进入vim之后,默认是处于[正常模式],要切换到[插入模式]才能够输入文字。
  1. [正常模式]切换至[插入模式]
  • 输入a
  • 输入i
  • 输入o
  1. [插入模式]切换至[正常模式]
  • 处于[插入模式],只能输入、删除文字。按「ESC」键可转到 [正常模式] 。
  1. [正常模式]切换至[末行模式]
  • 「shift + ;」
  1. 退出vim及保存文件:在[正常模式]下,输入「shift+;」进入「末行模式」
  • : w (保存当前文件)
  • : wq (输入「wq」,存盘并退出vim)
  • : q! (输入q!,不存盘强制退出vim)

3. vim正常模式命令集

  • 进入、退出插入模式
  1. 按「 i 」进入插入模式后,从光标当前位置开始输入文件;
  2. 按「a」进入插入模式后,从目前光标所在位置的下一个位置开始输入文字;
  3. 按「o」进入插入模式后,是插入新的一行,从行首开始输入文字。
  4. 从插入模式切换为命令模式按「ESC」键。
  • 移动光标
  1. 「h」、「j」、「k」、「l」,分别控制光标左、下、上、右移动
  2. 按「b」:光标回到上个字的开头
  3. 按「w」:光标跳到下个字的开头
  4. 按「 $ 」:移动到光标所在行的“行尾”
  5. 按「^」:移动到光标所在行的“行首”
  6. 按[gg]:进入到文本开始
  7. 按「G」:移动到文章的最后
  8. 按[num+shift+g]:光标定位到num行
  • 复制、剪切(删除)、粘贴
  1. 「yy」:复制光标所在行到缓冲区。
  2. 「#yy」:例如,「6yy」表示拷贝从光标所在的该行“往下数”6行文字。
  3. 「dd」:删除光标所在行
  4. 「#dd」:从光标所在行开始删除#行
  5. 「p」:将缓冲区的内容粘贴到光标所在位置的下一行。
  6. 「#p」:将缓冲区的内容粘贴#次到光标所在位置的下一行。
  • 文本修改
  1. 「r」:替换光标所在处的字符。
  2. 「#r」:批量替换光标所处字符开始往后的#个字符。
  3. 「R」:进入替换模式,替换光标所到之处的字符,直到按下「ESC」键为止。
  4. 「x」:剪切(删除)光标所在处的字符,多次按x会不断往后替删。
  5. 「#x」:批量剪切(删除)光标所处字符开始往后的#个字符。
  6. 「X」:剪切(删除)光标所在处前面的字符,多次按x会不断往前替删。
  7. 「#X」:批量剪切(删除)光标所在处的前面#个字符。
  8. 「 ~ 」:将光标所在处字符进行大小写替换。按多次 ~ 会不断往后替换。
  • 撤销与重做
  1. 「u」:如果误执行一个命令,可以按下 u ,回到上一个操作。
  2. 「ctrl + r」: 撤销的恢复

4. vim末行模式命令集

附:正常模式按「:」即可进入末行模式。

  • 保存、离开文件
  1. 「w」: 保存。
  2. 「w!」: 强制保存。
  3. 「q」: 退出。
  4. 「q!」: 强制退出。
  5. 「wq」: 保存并退出。
  6. 「wq!」: 强效保存并退出。
  • 批量化替换
  1. %s/test/TEST/g: 进行批量化替换,(后者替换前者)。即:TEST 替换 test
  • 感叹号+指令
  1. 在底行,感叹号!后面可以跟任何命令。
  2. eg:
    !gcc filename.c —> 在底行直接对filename.c进行编译。
    !./a.out —> 不退出vim,在底行直接将编译结果运行
  • 列出行号 + 跳到文件中的某一行
  1. 「set nu」: 会在文件中的每一行前面列出行号。
  2. 「num」: 冒号后输入一个数字 num ,回车就会跳到该行。
  • 查找字符
  1. 「 /关键字」: 回车会将所有关键词高亮出来,按「n」会向查找。
  2. 「?关键字」: 回车会将所有关键词高亮出来,按「n」会向查找。
  • 多窗口
  1. 「vs」: vs + filename,左右filename的分屏。
  2. 「ctrl + 双击w」: 分屏窗口的切换。

5. vim操作总结

6. 简单vim配置

vim配置极其麻烦,接下来是一些原理。最后会引用一个大佬的自动配置方法。(推荐使用,也可以自己配置)

  • 配置文件的位置
  1. 在目录 /etc/ 下面,有个名为vimrc的文件,这是系统中公共的vim配置文件,对所有用户都有效。
  2. 而在每个用户的主目录下,都可以自己建立私有的配置文件,命名为:“.vimrc”。例如,/root目录下,通常已经存在一个.vimrc文件,如果不存在,则创建之。
  3. 切换用户成为自己执行 su ,进入自己的主工作目录。
  4. 打开自己目录下的.vimrc文件,自己写入配置。(自己写入配置)
  • 常用配置选项
  1. 设置行号 — set nu
  2. 设置下划线 — set cursorline
  3. 设置自动锁紧 — set autoindent
  4. 设置缩进的空格数为4: set shiftwidth=4
  5. 设置c 风格缩进 — set cindent
  6. 自动补全括号:
    inoremap ( ()i
    inoremap [ []i
    inoremap i
    inoremap < <>i
  7. 高亮匹配括号 — hi MatchParen ctermbg=blue ctermfg=white
  8. 高亮匹配括号 — :NoMatchParen
  9. 如果要再开启,可以用 — :DoMatchParen
  10. 如果要更改颜色,可以用hi,例如: — :hi MatchParen ctermbg=blue ctermfg=white
  • 使用插件
  1. 安装TagList插件,下载taglist_xx.zip ,解压完成,将解压出来的doc的内容放到~/.vim/doc, 将解压出来的plugin下的内容拷贝到~/.vim/plugin
  2. 在~/.vimrc 中添加: let Tlist_Show_One_File=1 let Tlist_Exit_OnlyWindow=1 let Tlist_Use_Right_Window=1
  3. 安装文件浏览器和窗口管理器插件: WinManager
  4. 下载winmanager.zip,2.X版本以上的
  5. 解压winmanager.zip,将解压出来的doc的内容放到~/.vim/doc, 将解压出来的plugin下的内容拷贝到~/.vim/plugin
  6. 在~/.vimrc 中添加 let g:winManagerWindowLayout=‘FileExplorer|TagList nmap wm :WMToggle
  7. 然后重启vim,打开~/XXX.c或~/XXX.cpp, 在normal状态下输入"wm", 你将看到上图的效果。更具体移步:点我, 其他手册,请执行vimtutor命令。
  • 安装方法:(大佬的)

支持环境
目前只支持 Centos7 x86_64. 后面会考虑 Ubuntu 等发行版的支持.
安装方法
在 shell 中执行指令(想在哪个用户下让vim配置生效, 就在哪个用户下执行这个指令. 强烈 “不推荐” 直接在 root 下执行):
curl -sLf https://gitee.com/HGtz2222/VimForCpp/raw/master/install.sh -o ./install.sh && bash ./install.sh
注:
引用自:https://gitee.com/HGtz2222/VimForCpp?_from=gitee_search#%E5%AE%89%E8%A3%85%E6%96%B9%E6%B3%95

7. 更深入可以去参考

vim从入门到精通


Linux开发工具 — 编译器-gcc/g++使用

1. 背景知识

2. gcc如何完成

格式: gcc [选项] 要编译的文件【选项】[目标文件]

  1. 预处理(进行宏替换等)
  • 预处理功能主要包括:宏定义,文件包含,条件编译,去注释等
  • 预处理指令是以#号开头的代码行 (头文件、宏等)。
  • 实例: gcc –E hello.c –o hello.i
  • 选项“-E”,该选项的作用是让 gcc 在预处理结束后停止编译过程。
  • 选项“-o”是指目标文件, “.i”文件为已经过预处理的C原始程序。
  1. 编译(生成汇编)
  • 编译功能主要包括:检查代码的规范性、检查是否有语法错误等,检查无误后 gcc 会把代码翻译成汇编语言 (.s文件)。
  • 选项“-S”,该选项的作用是让 gcc 只进行编译而不进行汇编。编译结束会生成汇编代码。
  • 实例: gcc –S hello.i –o hello.s
  1. 汇编(生成机器可识别的代码)
  • 汇编阶段是把编译阶段生成的 .s文件转成 .o文件
  • .o文件即:目标文件 也叫 目标二进制
  • 选项“-c”,该选项的作用是让 gcc 汇编结束后停止编译过程。代码已转化为“.o”的二进制目标代码了。
  • 实例: gcc –c hello.s –o hello.o
  1. 连接(生成可执行文件或库文件)
  • 在成功编译之后,就进入了链接阶段。
  • 完成链接后会生成可执行文件.out 。
  • 实例: gcc hello.o –o hello
  1. 函数库的概念:
  • 我们的C程序中,并没有定义“printf”的函数实现,且“stdio.h”中也只有该函数的声明,而没有定义函数的实现,那么是在哪里实“printf”函数的呢?
  • 答案是:系统把这些函数实现都被做到名为 libc.so.6 的库文件中去了,在没有特别指定时,gcc 会到系统默认的搜索路径“/usr/lib”下进行查找,也就是链接到 libc.so.6 库函数中去,这样就能实现函数“printf”了,而这也就是链接的作用
  1. 函数库一般分为静态库和动态库两种。
  • 静态库是指编译链接时,把库文件的代码全部加入到可执行文件中,因此生成的文件比较大,但在运行时也就不再需要库文件了。静态库后缀名一般为“.a”
  • 动态库在编译链接时并没有把库文件的代码加入到可执行文件中,而是在程序执行时由运行时链接文件加载库,这样就节省了系统的开销,因此生成的文件比较小。动态库一般后缀名为“.so”。
  • gcc 在编译时默认使用动态库。如前面所述的 libc.so.6 就是动态库。
  1. gcc选项
  • -E 只激活预处理,这个不生成文件,你需要把它重定向到一个输出文件里面
  • -S 编译到汇编语言不进行汇编和链接
  • -c 编译到目标代码
  • -o 文件输出到文件
  • -static 此选项对生成的文件采用静态链接

Linux开发工具 — 调试器-gdb使用

1. 背景

  1. 程序的发布方式有两种,debug模式和release模式
  2. Linux gcc/g++出来的二进制程序,默认是release模式
  3. 要使用gdb调试,必须在源代码生成二进制程序的时候, 加上 -g 选项

2. 开始使用

  1. 打印源代码:
  • list或l 行号:显示源代码,回车接着上次的位置往下列,每次列10行。
  • list或l 函数名:列出某个函数的源代码。
  1. 退出gdb:
  • 退出gdb: ctrl + d 或 quit 或 q
  • eg:
  1. 断点的相关操作:
  • break(b) 行号:在某一 设置断点
  • break 函数名:在某个函数开头 设置断点
  • disable breakpoints:禁用断点。存在的意义保留调试痕迹
  • 调试完毕或调试过程中,保留调试痕迹很重要。
  • enable breakpoints:启用断点
  • delete breakpoints n:删除序号为n的断点
  • delete breakpoints:删除所有断点(这个时候不能简写为d)
  • info break :查看断点信息。
  • eg:
  1. 监视变量相关
  • p 变量:打印变量值。
  • eg
  • print§:打印表达式的值,通过表达式可以修改变量的值或者调用函数
  • eg:
  • display 变量名:跟踪查看一个变量,每次停下来都显示它的值
  • undisplay:取消对先前设置的那些变量的跟踪
  • eg:
  • info(i) locals:查看当前栈帧局部变量的值
  1. 调试相关
  • r或run:运行程序从开始连续执行程序而非单步的执行。类似F5
  • continue(或c):跳到下一个断点从当前位置开始连续执行程序而非单步的执行。类似F5
  • r或run 和 continue(或c)配合相当于F5。
  • break(b) 行号:打断点,在某一行设置断点。相当于F9
  • n 或 next:逐过程,单步执行。相当于F10
  • s或step:逐语句可进入函数调试。相当于F11
  1. 定位问题最常用的三个命令:
  • continue(或c):跳到下一个断点,从当前位置开始连续而非单步执行程序
  • until X行号:跳转到对应的X行。可直接在函数内跳转到对应的X行
  • finish:把当前在跑的函数跑完,然后就挺下来等待命令
  1. 修改变量的值
  • set var:修改变量的值
  1. 查看各级函数调用及参数
  • breaktrace(或bt):查看各级函数调用及参数

Linux开发工具 — 项目自动化构建工具-make/Makefile使用

1、背景

  • 一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作
  • makefile带来的好处就是——“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率。
  • make是一个命令工具,是一个解释makefile中指令的命令工具,一般来说,大多数的IDE都有这个命令,比如:Delphi的make,Visual C++的nmake,Linux下GNU的make。可见,makefile都成为了一种在工程方面的编译方法。
  • make是一条命令,makefile是一个文件,两个搭配使用,完成项目自动化构建。

2、依赖方法、依赖关系

光有依赖关系是不够的,还需要依赖方法。

3、理解

操作步骤:

  1. 创建Makefile文件:
  • touch Makefile
  1. 写文件:
  • make clean—>执行clean
  • make mytest—>执行mytest
  • make—>默认执行mytest
  • 原因:makefile在自下而上进行目标文件扫描生成时,默认生成第一个可执行程序中之后就不往后生成了,即:Makefile默认只会生成一个目标文件
  1. 保存退出:
  • ctrl + d 或 quit 或 q

4、原理

  1. make会在当前目录下找名字叫“Makefile”或“makefile”的文件。
  2. 如果找到,它会找文件中的第一个目标文件,在上面的例子中,他会找到“mytest”这个文件,并把这个文件作为最终的目标文件。
  3. 如果mytest文件不存在,或是mytest所依赖的后面的mytest.c文件的文件修改时间要比mytest这个文件新,他就会执行后面所定义的命令来生成mytest这个文件。
  4. 如果mytest所依赖的mytest.c文件不存在,那么make会在当前文件中找mytest.c文件的依赖关系及文件,如果找到则再根据规则生成mytest.c文件。
  5. 这就是整个make的依赖性,make会一层又一层地去找文件的依赖关系,直到最终编译出第一个目标文件。
  6. 在找寻的过程中,如果出现错误,比如最后被依赖的文件找不到,那么make就会直接退出,并报错。

5、项目清理

  • 工程是需要被清理的
  • 一般我们这种clean的目标文件,我们将它设置为伪目标,用 .PHONY 修饰,伪目标的特性是,总是被执行的。

Linux第一个小程序-进度条

回车vs换行vs回车换行

  • 回车(\\r):光标回到当前行行首,但不会换到下一行。如果接着输出的话,本行以前的内容会被逐一覆盖。
  • 换行(\\n):换到当前位置的下一行,而不会回到行首。
  • 回车并换(\\r\\n):换到下一行并回到行首。
  • C语言中及大部分情况下,\\n代表的是回车并换行。

行缓冲区概念

  1. 观察以下两段代码的执行结果,为什么?
  • <1>
printf("hello bit\\n");
sleep(5);
  • 结果:打印—>停五秒—>结束

  • <2>

printf("hello bit\\r");
sleep(5);
  • 结果:停五秒—>打印—>结束
  1. 原因:<2>情况sleep时print已经执行了,但print执行了并不代表信息会被打印到屏幕上。
  • 刷新概念:把数据真正写入磁盘、文件、显示器、网络等设备或文件中去。
  1. 解决:fflush(stdout); //强制刷新
printf("hello bit\\r");
fflush(stdout);  //强制刷新
sleep(5);

输入输出


倒计时小程序

#include<iostream>
using namespace std;
#include<Windows.h>
#include<WinBase.h>
int main()

	for (int i = 9; i >= 0; i--)
	
		printf("%2d\\r", i);
		Sleep(1000);
	
	return 0;

  • printf("%2d\\r", i); //%2d表示输出时的位宽按2字符输出

进度条小程序:

相关练习:

以上是关于Linux环境 基础开发工具使用的主要内容,如果未能解决你的问题,请参考以下文章

Linux基础命令及使用方法

linux怎么查找软件所在位置

linux-基础命令

linux基础命令

linux基础命令一

linux基础必备