Linux工具的使用

目录

1.Linux编辑器-vim使用

vim 指令的学习

命令模式

底行模式

2.Linux编译器-gcc/g++使用

 gcc常见选项:

动静态库概念

3.Linux项目自动化构建工具-make/Makefile 

4.Linux写一个小程序-进度条

进度条

5.git的使用

6.yum软件包管理器

7.gdb Linux调试器

gdb操作


1.Linux编辑器-vim使用

vi/vim 的区别简单点来说,它们都是多模式编辑器(写代码的编辑器)
vim一共有三个模式, 命令模式,编辑模式,底行模式 ,他们的关系如下图所示

vim 指令的学习

命令模式

yy:将当前光标所在的行

p:将复制行进行粘贴

nyy复制n行    np粘贴n行(n是具体的数字)

u:撤销操作

ctrl + r:撤销u操作

shift + g:光标定位到文件的结尾

gg:光标定位到文件的最开始

n + shift +g:光标定位到文件的任意行

shift + 6(^)∶将光标定位到当前行的最开始

shift + 4($)︰将光标定位到当前行最结尾

w, b:以单词为单位进行光标的前后移

h,j, k,l:左,下,上,右

shiftt~:大小写切换

shift + r :进入替换模式(s也可以替换)

r:替换光标所在的字符,支持nr
 

底行模式

set no/ nonu:打开行号,或者取消行号

vs文件名:分屏操作

w:写入,w!

q:退出,q!

: ! cmd:不退出vim执行对应的命令(执行命令行,编译,运行,查看man)等

2.Linux编译器-gcc/g++使用

 gcc常见选项:

格式 gcc [选项] 要编译的文件 [选项] [目标文件]
也可以写成 gcc -o mytest mytest.c  (-o 后面是新命名的程序)

    -o 用于指定目标文件名称

  -g 生成debug程序。向程序中添加调试符号信息

-static 此选项对生成的文件采用静态链接
1. 预处理(进行宏替换)    -E 预处理完成后停止,不进行编译
2. 编译(生成汇编)        -S 编译完成后停止,不进行汇编
3. 汇编(生成机器可识别代码)    -c 汇编完成后停止,不进行链接
4. 连接(生成可执行文件或库文件)

动静态库概念

函数库一般分为静态库和动态库两种。

静态库是指编译链接时,把库文件的代码全部加入到可执行文件中,因此生成的文件比较大,但在运行时也 就不再需要库文件了。其后缀名一般为“.a”

动态库与之相反 , 在编译链接时并没有把库文件的代码加入到可执行文件中 , 而是在程序执行时由运行时 链接文件加载库, 这样可以节省系统的开销。动态库一般后缀名为 “.so”, 如前面所述的 libc.so.6 就是动态 库。gcc 在编译时默认使用动态库。完成了链接之后 ,gcc 就可以生成可执行文件

 

3.Linux项目自动化构建工具-make/Makefile 

makefile 带来的好处就是 ——“ 自动化编译 ,一旦写好,只需要一个 make 命令,整个工程完全自动编 译,极大的提高了软件开发的效率。
make 是一个命令工具,是一个解释 makefile 中指令的命令工具
make是一条命令,makefile是一个文件,两个搭配使用,完成项目自动化构建。
下面举例子使用
首先有一个mytest.c的文件,然后touch一个makefile,用vim打开makefile,在里面写入
  1 mytest:mytest.c   //依赖关系
  2     gcc mytest.c -o mytest //依赖方法
  3 
  4 .PHONY:clean //伪目标
  5 clean: //依赖关系
  6     rm -f mytest   //依赖方法

编写makefile,1是依赖关系,2是依赖方法。    这里mytest依赖mytest.c

make就是执行makefile里面的代码,标准是从上到下执行,但是clean是总是被执行的

那么makefile是如何得知,我的可执行程序是最新的?? ?

根据文件的最近修改时间来的!!

makefile中的伪对象表示对象名称并不代表真正的文件名,与实际存在的同名文件没有相互关系,因此伪对象不管同名目标文件是否存在都会执行对应的生成指令

4.Linux写一个小程序-进度条

首先要了解\n和\r的概念

\n是换行(换到下一个行的当前位置)

\r是回车(回到这个行的最开始)

#include <stdio.h>
#include <unistd.h>
int main()
{
 printf("hello Makefile!\n");
 sleep(3);
 return 0;
}  
//这里是先打印,然后3秒后退出,先执行打印
#include <stdio.h>
#include <unistd.h>
int main()
{
 printf("hello Makefile!");
 sleep(3);
 return 0;
}
//先执行sleep,然后再打印出来

为什么结果不一样呢??

这里的区别就是加没加" \n "

(早就执行完了!! 只不过信息没有被立马显示出来!!

C语言是会给我们提供输出缓冲区的,根据特定的刷新策略,来进行刷新!

输出缓冲区就是c语言给我们提供的一段内存空间)

显示器设备,一般的刷新策略是行刷新碰到\n,就把\n之前的所有的字符全部给我显示出来

解决办法是加上fflush(stdout)

#include <stdio.h>
int main()
{
 printf("hello Makefile!");
 fflush(stdout);
 sleep(3);
 return 0;
}

进度条

#include<stdio.h>                                                                                                                                                   
 #include<string.h>
 #include<unistd.h>


 #define NUM 102

 int main()
 {
		  char bar[NUM]; //定义一个数组
	
		    memset(bar, 0, sizeof(bar));//初始化数组
	
		   const char* lable = "|/-\\";//4个符号
	     int cnt = 0;
	    while (cnt <= 100)
		    {
		        printf("[%-100s][%d%%] %c\r", bar, cnt, lable[cnt % 4]);
				//%s打印#用来显示进度,%d%%是百分数,后面那个是用来记录进程的,%4是因为只有四个符号
				//                                                              0  1  2  3
		       bar[cnt] = '#';
		        cnt++;
		
			       fflush(stdout);
		         usleep(30000);
		    }
	
	    return 0;
	 }


 

5.git的使用

git log  查看提交目录

git rm  删除文件

有时候会提交冲突,无脑git pull

6.yum软件包管理器

7.gdb Linux调试器

gcc && g++默认形成的可执行程序是release的!!故无法直接被调试!

gdb操作

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值