Linux下开发工具

编辑器-Vim

都知道vim是Linux下的编辑器之神,当然还有emacs也是特别NB的,个人在Linux下比较常用的也就是Vim了,接下来说说vim的一些配置技巧:

配置常见的代码模板

 1func Setfilehead()
 2    call append(0, '/***********************************************')
 3    call append(1, '#      Filename: '.expand("%"))
 4    call append(2, '#        Author: Tim 15291418231@163.com')
 5    call append(3, '#   Description: ---')
 6    call append(4, '#        Create: '.strftime("%Y-%m-%d %H:%M:%S"))
 7    call append(5, '# Last Modified: '.strftime("%Y-%m-%d %H:%M:%S"))
 8    call append(6, '***********************************************/')
 9    call append(7, '')
10    call append(8, '#include <stdio.h>')
11    call append(9, '#include <stdlib.h>')
12    call append(10, '#include <unistd.h>')
13    call append(11, '#include <sys/types.h>')
14    call append(12, '')
15    call append(13, 'int main(int argc, char *argv[]){')
16    call append(14, '')
17    call append(15, '	return 0;')    
18    call append(16, '}')
19endfunc
20
21"映射F1快捷键,生成后跳转至第14行,然后进入vim的插入模式
22map <F1> :call Setfilehead()<CR>:14<CR>o

这样的话只要新建源文件的时候按一下F1,代码就会自动添加到源文件中了!

已经配置好的Vim

这里推荐使用几个开源项目: 《VimForCpp》 这个目前只适用于CentOS7,其他版本后续才会支持! 《space-vim》 这个也是比较好用的一个vim,插件都是一句代码全部搞定!

vim和emacs的比较

  • VIM和emacs是可以高度可定制化的编辑器,特别是emacs算是unix下的第一个“人工智能生命”,经过定制化以后几乎可以干任何事情,VIM在高度定制化以后的编辑速度(当然,前提是你要熟悉它的几种工作模式,特别是快捷键的应用),几乎是其它编辑器不可匹敌的
  • VIM和emacs属于神器级别的东西,用的好就是神器,用不习惯它就是垃圾,对于大部分人来说他们都是需要比较长的时间才能上手的东西,而UE这样的属于已经给你定制好了,但是没有过多可定制选项的编辑器,方便上手,但是扩展性能就不怎么样了

编译器-gcc

gcc是"GNU Compiler Collection"的缩写

-I:指定头文件路径 -On:n=0~3,编译器优化,n越大优化等级越高 -Wall:提示更多的警告信息 -D:编译器时定义宏,注意-D和宏之间没有空格 -g:包含调试信息 这样编译才能被GDB调试 -C 告诉预处理器不要丢弃注释。配合`-E’选项使用。 -M:生成与.c和头文件的依赖关系以用于Makefile,包括系统库的头文件 -MM:生成与.c和头文件的依赖关系以用于Makefile,不包括系统库的头文件 -v可以查看gcc的版本信息,但是要是在gcc -v 后面加上一个源文件例如,gcc -v main.c,这样可以获得gcc所使用的系统头文件。

GCC编译C/CPP程序步骤

① 预处理:头文件展开、宏替换、去注释

1gcc -E -o hello.i hello.c

② 编译:语法检查、生成汇编代码

1gcc -S -o hello.s hello.i

③ 汇编:汇编代码——->机器码

1gcc -c -o hello.o hello.s

④ 链接:链接为可执行文件

1gcc -o hello hello.o

readelf命令

readelf命令用来显示一个或者多个elf格式的目标文件的信息,可以通过它的选项来控制显示哪些信息。 ELF(Executable and Linking Format)是一个定义了目标文件内部信息如何组成和组织的文件格式。内核会根据这些信息加载可执行文件,内核根据这些信息可以知道从文件哪里获取代码,从哪里获取初始化数据,在哪里应该加载共享库,等信息。 ELF文件有下面三种类型: 1、目标文件 gcc -c test.c 得到的test.o就是目标文件,目标文件通过链接可生成可执行文件。 静态库其实也算目标文件,静态库是通过ar命令将目标打包为.a文件。 如:ar crv libtest.a test.o 2、可执行文件 gcc -o test test.c 得到的test文件就是可执行的二进制文件。 3、共享库 gcc test.c -fPIC -shared -o libtest.so 得到的文件listtest.so就是共享库。 可以通过readelf来区分上面三种类型的ELF文件,每种类型文件的头部信息是不一样的!

实现一个彩色的进度条

注意点:printf()是按行缓冲的、sleep()与usleep()函数的单位、如何打印彩色字体

 1/*************************************************************************
 2	> File Name: main.c
 3	> Author: Tim
 4	> Mail: 15291418231@163.com
 5	> Created Time: 2018年09月21日 星期五 03时23分51秒
 6 ************************************************************************/
 7
 8#include<unistd.h>
 9#include<stdio.h>
10
11int main(int argc, char *argv[])
12{
13    char buf[102] = {0};
14    int i = 0;
15    //注意这里需要使用转义字符
16    char arr[4] = "/-|\\";
17    for(i= 0;i<=100;i++)
18    {
19        buf[i] = '*';
20        if(i<40)
21            printf("[\033[0;31m%-100s\033[0;39m] [%d%%][%c]\r", buf,i,arr[i%4]);//进度条颜色修饰
22        else if(i>=40 && i< 80)
23            printf("[\033[0;33m%-100s\033[0;39m] [%d%%][%c]\r",buf,i,arr[i%4]);
24        else
25            printf("[\033[0;32m%-100s\033[0;39m] [%d%%][%c]\r",buf,i,arr[i%4]);
26
27        //printf("[%-100s] [%d%%][%c]\r",buf,i,arr[i%4]);
28
29        //printf是按行缓冲的,所以需要刷新缓冲区
30        fflush(stdout);
31        //usleep的单位是微秒
32        usleep(50000);
33    }
34    //最后需要换行
35    printf("\n");
36    return 0;
37}

yum与rpm安装的区别

源代码安装

  1. 绝大多数开源软件都是直接以原码形式发布的
  2. 源代码一般会被打成.tar.gz的归档压缩文件
  3. 源代码需要编译成为二进制形式之后才能够运行使用
  4. 源代码基本编译流程:
  • configure 检查编译环境;
  • make对源代码进行编译;
  • make insall 将生成的可执行文件安装到当前计算机中

rpm安装

1.源代码形式的特点:操作复杂、编译时间长、极易出现问题、依赖关系复杂 2.为了方便,RPM(redhat package manager) 3.RPM通过将代码基于特定平台系统编译为可执行文件,并保存依赖关系,来简化开源软件的安装管理。针对不同的系统设定不同的包 4.常用命令规范:linuxcast-1.2.0-30.el6.1686.rpm 包名-版本号-适用平台-32/64-rpm 5.使用rpm –i software.rpm(安装); rpm -e software.rpm(卸载); rpm –U software.rpm(升级形式安装); rpm –ivh http://www.linuxcast.net/software.rpm(支持通过http\ftp协议形式安装) -v 显示详细信息;-h显示进度条

yum安装

rpm软件包形式的管理虽然方便,但是需要手工解决软件包的依赖关系。很多时候安装一个软件安装一个软件需要安装1个或者多个其他软件,手动解决时,很复杂,yum解决这些问题。Yum是rpm的前端程序,主要目的是设计用来自动解决rpm的依赖关系,其特点:

  • 自动解决依赖关系;
  • 可以对rpm进行分组,基于组进行安装操作;
  • 引入仓库概念,支持多个仓库
  • 配置简单

yum仓库用来存放所有的现有的.rpm包,当使用yum安装一个rpm包时,需要依赖关系,会自动在仓库中查找依赖软件并安装。仓库可以是本地的,也可以是HTTP、FTP、nfs形式使用的集中地、统一的网络仓库。 仓库的配置文件/etc/yum.repos.d目录下

  • yum install 安装;
  • yum remove卸载;