编辑器
我们常见的编辑器有这几种vim,emacs,eclipse,Brackets,Sublime Text,Sed,nano,joe。接下来我们对其进行一一介绍。
Emacs
Emacs,著名的集成开发环境和文本编辑器。
Emacs被公认为是最受专业程序员喜爱的代码编辑器之一,另外一个是vim。
EMACS,即Editor MACroS(编辑器宏)的缩写,最初由Richard Stallman(理查德·马修·斯托曼)于1975年在MIT协同Guy Steele共同完成。这一创意的灵感来源于TECMAC和TMACS,它们是由Guy Steele、Dave Moon、Richard Greenblatt、Charles Frankston等人编写的宏文本编辑器。
自诞生以来,Emacs演化出了众多分支,其中使用最广泛的两种是:
1984年由Richard Stallman发起并由他维护至今的GNU Emacs,以及1991年发起的XEmacs。XEmacs是GNU Emacs的分支,至今仍保持着相当的兼容性。
Emac使用Emacs Lisp,这种有着极强扩展性的编程语言,从而实现了包括编程、编译乃至网络浏览等等功能的扩展。
Emacs和Vim比起来,编辑效率低下。emacs强调统一的环境,便于编程,里面包含了源代码管理,邮件收发等,最重要的是所谓与gbd出自一家,兼容性好。
Eclipse
Eclipse 是一个开放源代码、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。
虽然大多数用户很乐于将 Eclipse 当作 Java 集成开发环境(IDE)来使用,但 Eclipse 的目标却不仅限于此。
Eclipse 还包括插件开发环境(Plug-in Development Environment,PDE),这个组件主要针对希望扩展 Eclipse 的软件开发人员,因为它允许他们构建与 Eclipse 环境无缝集成的工具。由于 Eclipse 中的每样东西都是插件,对于给 Eclipse 提供插件,以及给用户提供一致和统一的集成开发环境而言,所有工具开发人员都具有同等的发挥场所。
这种平等和一致性并不仅限于 Java 开发工具。尽管 Eclipse 是使用Java语言开发的,但它的用途并不限于 Java 语言;例如,支持诸如C/C++、COBOL、PHP、Android等编程语言的插件已经可用,或预计将会推出。Eclipse 框架还可用来作为与软件开发无关的其他应用程序类型的基础,比如内容管理系统。
基于 Eclipse 的应用程序的一个突出例子是 IBM Rational Software Architect,它构成了 IBM Java 开发工具系列的基础。
Brackets
Brackets也是一款为Linux开发者设计的开源代码编辑器,使用Brackets写代码,你不会被任何事情所打断。
比如在写HTML代码时,即便你没有保存代码也可以及时预览你的Web页面效果。你也可以使用Theseus来检查变量,Brackets默认提供一种主题,你也可以在扩展中心获取更多的主题。
Lighttable
LightTable是一个应用ClojureScript写的可扩展的集成编辑环境(IDE)。由ChrisGranger和RobertAttorri开发。具有实时运行反馈,调试和搜索文档的功能。及时反馈功能提供了一个不同寻常的运行环境来让程序员构建抽象。
开发团队试图创造一个能够让程序员及时获知程序运行状态的软件。该软件一开始只支持Clojure语言,但是现在通过众多扩展,也能够支持Python和JavaScript语言。
Sublime Text
Sublime Text 是一个代码编辑器(Sublime Text 2是收费软件,但可以无限期试用),也是HTML和散文先进的文本编辑器。Sublime Text是由程序员Jon Skinner于2008年1月份所开发出来,它最初被设计为一个具有丰富扩展功能的Vim。
Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。
Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。
Sed
sed是一种流编辑器,它一次处理一行内容。
处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”,接着用sed命令处理缓冲区的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,只到文件末尾。文件内容并没有改变,除非你使用重定向的存储输出。
sed主要用来自动编辑一个或多个文件,简化对文件的反复操作,编写转换程序等。
nano
nano只是一个类似emacs的简单编译器,linux下有很多文本编辑器,其中系统(不管哪个分支)都会自带nano,但nano功能很少。
它使用简单,我们可以直接加上文件名就能够打开一个旧文件或新文件,我们可以打开一个旧文件编辑它,也可以打开一个新文件,即不管这个文件存不存在都是可以打开的。
接下来就要介绍我们最常用的vim。为什么我们要学习的得是vim,而不是其他的呢?
Vim
Vim是一个类似于Vi的著名的功能强大、高度可定制的文本编辑器,在Vi的基础上改进和增加了很多特性,是一个自由软件,其在代码补完、编译错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。
1999 年Emacs被选为Linuxworld文本编辑分类的优胜者,Vim屈居第二。但在2000年2月Vim赢得了Slashdot Beanie的最佳开放源代码文本编辑器大奖,又将Emacs推至二线, 总的来看, Vim和Emacs在文本编辑方面都是非常优秀的。
因为很多软件的编辑接口都会主动调用vi,因此你必须要学会vi,否则你很多命令就无法操作。这样你还怎么学好Linux。又vim是vi的高级版本,因此一定要掌握好它。如果说他有什么缺点的话,那就是需要完全用键盘操作,不能用鼠标,繁琐复杂的命令。但是当你用习惯了之后,你就会体会到那种运指如飞的感觉,就再也离不开它了。
编译器
1.EGCS:包括了C/C++/Obj-C/Fortran等编译器
2.Clang:licence极度友好,代码质量非常棒,采用的IR为LLVM IR非常优秀,但是Clang依赖于的3.LLVM,目前的性能无法与GCC相提辩论,缺乏对GCC一些Builtin函数、自身带的汇编器的孱弱,对一些开源软件没有办法编译过去。
4.ICC:没有自己专门的前端(传说中的外包),而且是针对Intel体系结构上专门优化。
5.IBM XL C++:在IBM特定硬件与平台上表现非常牛逼,Benchmark性能测试非常优秀,但是在编译时间上过长,对C++标准的支持、开源软件的支持、错误信息的提示上都不够友好。
为什么调试的时候需要编译选项中添加 -g?
在Linux中,gcc默认生成release版本 可执行程序中没有加入调试符号信息 无法实现逐步调试。使用gdb -g 可以生成debug版本。使程序可以进行调试。
readelf命令
(1)readelf用来显示一个或者多个elf格式的目标文件的信息,可以通过它的选项来控制显示哪些信息。这里的elf-file(s)就表示那些被检查的文件。可以支持32位,64位的elf格式文件,也支持包含elf文件的文档(这里一般指的是使用ar命令将一些elf文件打包之后生成的例如lib*.a之类的“静态库”文件)。
(2)选项
在 Linux 中输入 man readelf
- 在Linux下实现进度条程序. 通过makefile进行编译. 建议自主完成一个彩色的进度条.
1.创建一个test.c文件
vim test.c
#include
#include
#include
int main()
{
int i = 0;
char bar[101];
const char *lable = "|/-\\";
for(i=0;i<=100;i++)
{
bar[i]='\0';
printf("\033[0;31;47;5m%s\033[0m [%d%%][%c]\r",bar,i,lable[i%4]);
fflush(stdout);
bar[i]='#';
usleep(100000);
}
printf("\n");
return 0;
}
\033[ 后面的第一个参数是关闭所有文字的效果。
第二个参数是字体的颜色:
30—-黑色 31—-红色 32—-绿色 33—-黄色
34—-蓝色 35—-紫色 36—-墨绿 37~39—-白色
字体的背景色:
40—-黑色 41—-红色 42—-绿色 43—-黄色
44—-蓝色 45—-紫色 46—-墨绿色 47—-白色
第三个参数是字体的效果:
效果分为:
1—-高亮 4—-下划线 5—-闪烁 7—–背景取反 2J—-清屏
2.创建Makefile
test:test.c
gcc -o test test.c
.PHONY:clean
clean:
rm -f test
3.进度条结果:
Linux下软件安装
1.源码安装
安装一个源码包,是需要我们自己把源代码编译成二进制的可执行文件。如果你读得懂这些源代码,那么你就可以去修改这些源代码自定义功能,然后再去编译成你想要的。使用源码包的好处除了可以自定义修改源代码外还可以定制相关的功能,因为源码包在编译的时候是可以附加额外的选项的。
源码包的编译用到了linux系统里的编译器,常见的源码包一般都是用C语言开发的,这也是因为C语言为linux上最标准的程序语言。Linux上的C语言编译器叫做gcc,利用它就可以把C语言变成可执行的二进制文件。所以如果你的机器上没有安装gcc就没有办法去编译源码。你可以使用 yum install -y gcc 来完成安装。
安装一个源码包,通常需要三个步骤:
./config 在这一步可以定制功能,加上相应的选项即可,具有有什么选项可以通过”./config --help ”命令来查看。在这一步会自动检测你的linux系统与相关的套件是否有编译该源码包时需要的库,因为一旦缺少某个库就不能完成编译。只有检测通过后才会生成一个Makefile文件。
make 使用这个命令会根据Makefile文件中预设的参数进行编译,这一步其实就是gcc在工作了。
make install 安装步骤,生成相关的软件存放目录和配置文件的过程。
2.rpm安装
安装已经编译好的软件包Redhat Package Manager(rpm)。Redhat的软件包管理方式,适用rpm install 命令rpm不仅已经把软件源代码编译成二进制文件,而且还对软件包依赖的软件,系统环境等做了统计文件扩展名:rpm还有一种SRPM:没有编译成二进制文件,但是也包含rpm的特性。
3.yum安装
用rpm方式安装软件,如果依赖的软件没有事先安装,软件无法安装成功。为了解决这个问题,推出yum方式。既然依赖的软件没有安装在机器上,那么就先安装依赖的软件,在安装我需要安装的软件。因此yum在安装软件同时安装依赖软件。因此需要一个yum源来放依赖的软件源,对比被安装机器上rpm软件库。归根到底,yum也是基于rpm的。