程序员成长之旅 ——linux常用工具

除了vim还有哪些厉害的编辑器

vim

Vim是从 vi 发展出来的一个文本编辑器。代码补完、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。和Emacs并列成为类Unix系统用户最喜欢的编辑器。

Eclipse

Eclipse是一款很酷的开源代码编辑器,它拥有代码高亮和智能提示等强大的功能。在Eclipse中,完全胜任以下编程语言的工作——Python, R, Ruby, JavaScript, Natural, Lasso, C, C++, COBOL, Scheme, Clojure, Groovy等等,它也是Java集成开发环境,甚至提供了对Java 8的支持。在一些Web开发IDE特性的帮助下,你可以非常方便地对代码文件进行组织和访问。

Brackets

Brackets也是一款为Linux开发者设计的开源代码编辑器,使用Brackets写代码,你不会被任何事情所打断。比如在写HTML代码时,即便你没有保存代码也可以及时预览你的Web页面效果。你也可以使用Theseus来检查变量,Brackets默认提供一种主题,当然你也可以在扩展中心获取更多的主题。

Emacs

Emacs不仅仅是一个编辑器,他是一个整合环境,或可称它为集成开发环境,这些功能如让使用者置身于全功能的操作系统中。Emacs不仅可以作为文本编辑器,还可以用来收发电子邮件、通过FTP/TRAMP编辑远程档案、通过Telnet登录主机、上新闻组、登陆IRC和朋友交流、查看日历等功能。

Light Table

LightTable是一个免费开放源代码的编辑器,该编辑器有一个非常干净的界面,并有大量扩展。它与Windows、Mac和Linux都兼容,是高度可定制的。使用Light Table,开发者只需打开一个浏览器窗口即可实时查看更改,并且支持不同的嵌入。

Chocolat

Chocolat本身是Mac OS X的最佳代码编辑器。该编辑器旨在与OS无缝集成,Chocolat为JS、Python和HTML提供拖放功能、拆分编辑、代码折叠和代码完成。

Sublime Text

一个紧凑但性能较高的代码编辑器一个跨平台的代码编辑器,适用于所有WordPress项目。 Sublime Text有很多功能可以提供:

  1. 脚本编程

  2. 自定义界面

  3. 常规文件切换

  4. 合成和错误检测

  5. 多媒体选择和编辑

  6. 外部插件集成

  7. Themes

除了gcc还有哪些厉害的编译器

MSVC

Windows平台上最常用的编译器,在C++编译器圣战中的胜利者,一个常被人诟病的是对标准的支持不够新不够快(最近开始逐步加快了)。随着微软发布基于Clang / C2,这一条路以后若成功,MSVC与Clang / C2并行,甚至逐步逐步退出舞台,都是有可能的事情。

Clang

licence极度友好,代码质量非常棒,采用的IR为LLVM IR非常优秀,各大公司逐步发力在Clang上,包括不限于微软,IBM,Nvidia等,各大公司也在开始疯狂的往Clang / LLVM交代码(圈地),也开始往Clang实现OpenMP,Nvidia GPU等支持,目前在赶超GCC的道路上一路激情的狂奔,前途一片光明。但是Clang依赖于的LLVM,目前的性能无法与GCC相提辩论,在Benchmark性能测试上几乎没有胜利的项目,优化的道路上任重道远,同时一些开源软件没有办法编译过去,主要是缺乏对GCC 一些Builtin函数、自身带的汇编器的孱弱导致。

GCC/G++

跨体系结构很多,很多开源软件默认编译器都是GCC/G++,这一点上Clang比不上。

ICC

没有自己专门的前端(传说中的外包),而且是针对Intel体系结构上专门优化。

IBM XL C++

在IBM特定硬件与平台上表现非常牛逼,Benchmark性能测试非常优秀,其最初的设计思想就是为了性能,其最高优化级别可以达到O5,带来的缺点则是在编译时间上往往过长。而另外一个常被人诟病的是对C++标准的支持、开源软件的支持、错误信息的提示上都不够友好,然而从13.2开始,随着IBM采用Clang融合方案,目前这几项都得到有效改良,然而融合的道路也必定是漫长的。

调试的时候为啥还需要编译选项中添加 -g

因为gcc -g 指令是调试运行指令(debug),不加的话只能运行代码(release),不能调试。

加上-g选项以后,gcc在编译是会做以下额外的操作:

  1. 创建符号表,符号表包含了程序中使用的变量名称的列表。

  2. 关闭所有的优化机制,以便程序执行过程中严格按照原来的C代码进行。

readelf命令

readelf命令用来显示一个或者多个elf格式的目标文件的信息,可以通过它的选项来控制显示哪些信息。这里的elf-file(s)就表示哪些被检查的文件。可以支持32位,64位的elf格式文件,也支持包含elf文件的文档(这里一般指的是使用ar命令将一些elf文件打包之后生成的例如lib*.a之类的“静态库”文件)。这个程序和objdump提供的功能相似,但是它显示的信息更为具体,并且它不依赖BFD库(BFD是一个GNU项目,它的目标就是希望通过一种统一的接口来处理不同的目标文件),所以即使BFD库有什么bug存在的话也不会影响到readelf程序。运行readelf时,除了-v和-H之外,其他的选项必须有一个被指定。命令参数:

  1. -l 显示程序头表信息, 包括有几个段,每个段的属性,以及每个段中包含有哪几个节

  2. -S 显示节区表内所有的信息,包括每个节的属性

  3. -h 显示所有头的信息,包括elf文件头,程序头和节头,即“-l,-h,-S”的组合。

  4. -s 显示符号表的信息,包含静态符号表和动态符号表。如果指关心动态符号表,可以直接用“-d”。

  5. -r 显示所有定位入口的信息。

彩色进度条的实现

#include<stdio.h>
#include<unistd.h>
#define NONE  "\e[0m"
#define Red "\e[0;31m"
#define Blue "\e[0;34m"
int main()
{

	char buf[21] = {0};
	int index = 0;
	char tmp[5] = {'-','\\','|','/','\0'};
	while(index <= 20)
	{
		buf[index] = '#';
		if(index <= 10)
		{
			printf(Red"%s[%d%%%c]\r"NONE,buf,index*5,tmp[index%4]);
		}
		else
		{
			printf(Blue"%s[%d%%%c]\r"NONE,buf,index*5,tmp[index%4]);
		}
		fflush(stdout);
		index++;
		sleep(1);
	}
	printf("\n");
	return 0;
}

彩色进度条并不难,关键要清楚几个点,非常的关键

  1. %% 输出一个百分号
  2. '\033[0m’用于恢复默认的终端输出属性,否则会影响后续的输出。
  3. 我们在实现的时候需要每次输出完都需要使用fflush(stdout)将缓冲区刷新,以便下一次的输出。
  4. 回车用’\r’表示,表示的是回到这行的起始位置。换行用‘\n’表示,表示的是换行到下一行。所以我们在实现的时候需要用的是’\r’,才能实现进度条的效果。
  5. \033[ Param {;Param;…}m 或 \e[ Param {;Param;…}m
    其中,’\033[‘或’\e[‘引导转义序列,'m’表示设置属性并结束转义序列。Param为属性值,{…}表示可选(多个参数之间用分号隔开,与顺序无关)。

在这里插入图片描述

参考网页

Linux下软件安装的几种方式(源码安装, rpm安装, yum安装)

简要介绍三种安装方式

rpm工具:RPM包是预先在linux机器上编译好并打包好的文件,安装起来非常快捷。但是也有一些缺点,比如安装的环境必须与编译时的环境一致或者相当;包与包之间存在着相互依赖的情况

yum工具:yum最大的优势在于可以联网去下载所需要的rpm包,然后自动安装,在这个过程中如果要安装的rpm包有依赖关系,yum会帮你解决掉这些依赖关系依次安装所有rpm包

源码包:安装一个源码包,是需要我们自己把源代码编译成二进制的可执行文件。如果你读得懂这些源代码,那么你就可以去修改这些源代码自定义功能,然后再去编译成你想要的。使用源码包的好处除了可以自定义修改源代码外还可以定制相关的功能,因为源码包在编译的时候是可以附加额外的选项的

rpm安装和yum安装的区别

主要区别

rpm :只能安装已经下载到本地机器上的rpm包,无法解决软件包的依赖关系。
yum:在线下载并安装rpm包,能更新系统,能自动处理包与包之间的依赖问题。

yum

YUM被称为 Yellow dog Updater, Modified,是一个在Fedora和RedHat以及SUSE中的Shell前端软件包管理器。YUM使用Python语言写成。YUM客户端基于RPM包进行管理,可以通过HTTP服务器下载、FTP服务器下载、本地软件池的等方式获得软件包,可以从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系。
YUM在安装RPM时,会从服务器下载相应包,且缓存在本地。
使用YUM进行RPM包的管理,非常简单方便。

rpm

RPM管理支持事务机制。增强了程序安装卸载的管理。

RPM的功能: 打包、安装、查询、升级、卸载、校验、数据库管理。

RPM的缺点: 由于Linux中的程序大多是小程序。程序与程序之间存在非常复杂的依赖关系。RPM无法解决软件包的依赖关系。

RPM包 用RPM工具可以将二进制程序进行打包,包被称为RPM包。RPM包并不是跨平台的

其它相关资料

发布了76 篇原创文章 · 获赞 16 · 访问量 4429

猜你喜欢

转载自blog.csdn.net/wuweiwuju___/article/details/102690618
今日推荐