Linux 下开发工具

编辑器 - Vim

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

配置常见的代码模板

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
func Setfilehead()
call append(0, '/***********************************************')
call append(1, '# Filename: '.expand ("%"))
call append(2, '# Author: Tim 15291418231@163.com')
call append(3, '# Description: ---')
call append(4, '# Create: '.strftime ("% Y-% m-% d % H:% M:% S"))
call append(5, '# Last Modified: '.strftime ("% Y-% m-% d % H:% M:% S"))
call append(6, '***********************************************/')
call append(7, '')
call append (8, '#include <stdio.h>')
call append (9, '#include <stdlib.h>')
call append (10, '#include <unistd.h>')
call append (11, '#include <sys/types.h>')
call append (12, '')
call append (13, 'int main (int argc, char *argv []){')
call append (14, '')
call append (15, ' return 0;')
call append (16, '}')
endfunc

" 映射 F1 快捷键,生成后跳转至第 14 行,然后进入 vim 的插入模式
map <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 程序步骤

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

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

② 编译:语法检查、生成汇编代码
1
gcc -S -o hello.s hello.i

③ 汇编:汇编代码 ———-> 机器码
1
gcc -c -o hello.o hello.s

④ 链接:链接为可执行文件
1
gcc -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
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
/*************************************************************************
> File Name: main.c
> Author: Tim
> Mail: 15291418231@163.com
> Created Time: 2018 年 09 月 21 日 星期五 03 时 23 分 51 秒
************************************************************************/

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

int main(int argc, char *argv [])
{
char buf [102] = {0};
int i = 0;
// 注意这里需要使用转义字符
char arr [4] = "/-|\\";
for(i= 0;i<=100;i++)
{
buf [i] = '*';
if(i<40)
printf("[\033 [0;31m%-100s\033 [0;39m] [% d%%][% c]\r", buf,i,arr [i%4]);// 进度条颜色修饰
else if(i>=40 && i< 80)
printf("[\033 [0;33m%-100s\033 [0;39m] [% d%%][% c]\r",buf,i,arr [i%4]);
else
printf("[\033 [0;32m%-100s\033 [0;39m] [% d%%][% c]\r",buf,i,arr [i%4]);

//printf ("[%-100s] [% d%%][% c]\r",buf,i,arr [i%4]);

//printf 是按行缓冲的,所以需要刷新缓冲区
fflush (stdout);
//usleep 的单位是微秒
usleep (50000);
}
// 最后需要换行
printf("\n");
return 0;
}

yum 与 rpm 安装的区别

源代码安装

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

rpm 安装

  1. 源代码形式的特点:操作复杂、编译时间长、极易出现问题、依赖关系复杂
  2. 为了方便,RPM(redhat package manager)
    3.RPM 通过将代码基于特定平台系统编译为可执行文件,并保存依赖关系,来简化开源软件的安装管理。针对不同的系统设定不同的包
  3. 常用命令规范:linuxcast-1.2.0-30.el6.1686.rpm 包名 - 版本号 - 适用平台 - 32/64-rpm
  4. 使用 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 卸载;