Linux开发工具相关问题

在Linux的系统设置问题上,学会使用文本编辑器来编辑Linux参数配置文件是一项很重要的能力。Linux环境下的文本编辑器有很多,重点掌握VIM却是很有必要的。VIM是VI的升级版,很多软件的编辑接口会主动调用VI,而VIM已经不仅仅可以作为一个文本编辑器,也可以作为程序开发工具,供程序开发者使用。

一、 vim的配置

一些简单配置Linux的命令有:

set nu // 在左侧行号
set tabstop=4 //tab 长度设置为 4
set nobackup //覆盖文件时不备份
set cursorline //突出显示当前行
set ruler //在右下角显示光标位置的状态行
set autoindent //自动缩进
set mouse=a //允许使用鼠标移动光标
set showmode //显示左下角状态行
set hlsearch //搜索时关键字高亮反白
set showcmd

配置vim的文件在目录/etc下面,有个名为vimrc的文件,这就是系统中公共的vim配置文件,对所有用户都开放。而在每个用户的主目录下,都可以自己建立私有的配置文件,命名为:”.vimrc”。用vim打开.vimrc键入上述命令保存即可。


关于vim的简单配置详细的介绍:VIM简单配置
如何获得良好的界面:vim配置界面
要想获得更强大的功能可以点击:大牛:超级强大的VIM配置(vimplus)

二、常用的编辑器, 以及这些编辑器之间的区别和优缺点.

Linux中强大的编辑器列表

  • VI 编辑器是一个基于命令行的、功能强大的文本编辑器,最早为 Unix 系统开发,后来也被移植到许多的 Unix 和 Linux 发行版上。 VIM(也被称作 VI IMproved)——VI 编辑器的高阶版本,在 VI 已经很强的功能上添加了更多的功能,这些功能有:

    • 支持更多 Linux 发行版,
    • 支持多种编程语言,包括 python、c++、perl 等语言的代码块折叠,语法高亮,
    • 支持通过多种网络协议,包括 http、ssh 等编辑文件,
    • 支持编辑压缩归档中的文件,
  • Emacs:著名的集成开发环境和文本编辑器。Emacs和Vim对于 Linux 桌面上进行文本编辑是重量级的,Emacs演化出了众多分支,其中使用最广泛的两种是:1984年由Richard Stallman发起的GNU Emacs,以及1991年发起的XEmacs。XEmacs是GNU Emacs的分支,至今仍保持着相当的兼容性。最新的的GNU EMACS的功能包括:

    • 内容感知编辑模式,包括许多文件类型的语法着色。
    • 完整的内置文档,包括新用户教程。
    • 几乎所有人类脚本都支持 完全Unicode。
    • 高度可定制,使用Emacs Lisp代码或图形界面。
    • 超越文本编辑,包括功能的整个生态系统的项目策划人,邮件和新闻阅读器,调试器接口, 日历,和更多。
    • 用于下载和安装扩展的包装系统等等

详情点击:GNU

  • Eclipse:Eclipse 是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse 附带了一个标准的插件集,包括Java开发工具(Java Development Kit,JDK)。最初主要用来Java语言开发,但是目前亦有人通过插件使其作为其他计算机语言比如C++和Python的开发工具。

    • 在Eclipse中,完全胜任以下编程语言的工作——Python, R, Ruby, JavaScript, Natural, Lasso, C, C++, COBOL, Scheme, Clojure, Groovy等等

Eclipse官网:ECLIPSEFOUNDATION

  • Brackets:Adobe公司发布了Brackets 1.0,一款针对Web设计人员的免费开源文本编辑器,内置HTML,CSS和JavaScript,方便开发者进行HTML,CSS和JavaScript编程。Brackets 1.0适用于Windows,Mac和Linux操作系统,为Web设计人员和开发人员提供针对性的功能,如:

    • 实时预览,在浏览器视图和源代码之间轻松切换,
    • 在特定的代码位进行内联编辑工作,而无需弹出式窗口或其他选项卡。
    • 下载和使用扩展,添加功能以帮助他们的工作流程,如Git整合和JSHint支持
    • 摘要预览,自动从PSD获取设计信息,
    • Brackets作为一个开源项目,对于想要自定义文本编辑器的用户,可以从Github上Brackets项目页面下载源代码并修改代码进行编译,来适合自己的需求。

    官方网站:http://brackets.io/
    Github代码托管:https://www.github.com/adobe/brackets

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

    • 更改: 我们从 NW.js 切换到了 Electron
    • 更改: Light Table 的发行与自更新进程完全地公开在github上
    • 增加: Light Table 可以用提供的脚本在各个支持的平台上从源码构建
    • 增加: Light Table 大部分的 node 代码库将通过 npm 依赖来安装,以取代以前采用分叉库的方式
    • 增加: 有效文档。更多详情内容见下面
    • 修复: 版本号 >= OSX 10.10的系统下的主要的可用性问题
    • 更改: 官方不再提供 32位 Linux 软件包下载,不过仍然支持从源码构建
    • 修复: ClojureScript eval 支持 ClojureScript 的现代版本

参阅更多 github.com/LightTable/LightTable/releases

  • Chocolat:Chocolat本身是Mac OS 的最佳代码编辑器。该编辑器旨在与OS无缝集成,Chocolat为JS、Python和HTML提供拖放功能、拆分编辑、代码折叠和代码完成,兼具原生的Cocoa及强大的文本编辑功能。Chocolat支持很多种编程语言的关键字高亮显示、窗口分割、标签页、色彩主题等功能。界面和MacVim非常相似。

  • Sublime Text:Sublime Text 是一个轻量、简洁、高效、跨平台的编辑器。

    • 支持多光标操作:它能让你对文本中的多个地方同时做修改,你可以看到多个地方在你输入的时候同时发生变化,
    • command palette能够让你轻松的做任何操作,勉去了记忆众多快捷键的痛苦。你只需要打开command palette ,输入几个字母,Sublime Text会用模糊查询给你提供建议和选项。跟直接使用快捷键几乎没区别
    • 编辑文件的同时你可以启动编译,看到输出结果,这种交互能让你快速发现编译错误
    • 扩展性很好,它使用了Python式的插件系统。

三、 常用的编译器(不限制编程语言, 不限制平台)

这些编译器有:

  • MSVC:是指微软的VC编译器,随着微软发布基于Clang / C2,MSVC与Clang / C2并行,继 Google Chrome 宣布弃用微软 C++ 编译器(MSVC)Windows 版 Chrome 改用 Clang 之后,Mozilla 的 Firefox 浏览器也宣布开始使用 Clang 编译器编译其 Windows 版本。
  • Clang:Clang 是一个 C++ 编写、基于 LLVM、发布于 LLVM BSD 许可证下的 C/C++/Objective C/Objective C++ 编译器,其目标(之一)就是超越 GCC。Clang 的特性有:
    • 快:通过编译 OS X 上几乎包含了所有 C 头文件的 carbon.h 的测试,包括预处理 (Preprocess),语法 (lex),解析 (parse),语义分析 (Semantic Analysis),抽象语法树生成 (Abstract Syntax Tree) 的时间,Clang 是 Apple GCC 4.0 的 2.5x 快。
    • 内存占用小:Clang 内存占用是源码的 130%,Apple GCC 则超过 10x。
    • 诊断信息可读性强:其中错误的语法不但有源码提示,还会在错误的调用和相关上下文的下方有~~~~~和^的提示。
    • GCC 兼容性。
    • 设计清晰简单,容易理解,易于扩展增强。与代码基础古老的 GCC 相比,学习曲线平缓。
    • 基于库的模块化设计,易于 IDE 集成及其他用途的重用。由于历史原因,GCC 是一个单一的可执行程序编译器,其内部完成了从预处理到最后代码生成的全部过程,中间诸多信息都无法被其他程序重用。Clang 将编译过程分成彼此分离的几个阶段,AST 信息可序列化。通过库的支持,程序能够获取到 AST 级别的信息,将大大增强对于代码的操控能力。对于 IDE 而言,代码补全、重构是重要的功能,然而如果没有底层的支持,只使用 tags 分析或是正则表达式匹配是很难达成的。
  • GCC/G++:gcc和g++都是GNU(组织)的一个编译器。gcc 是c的编译器,g++是c++的编译器。

常见GCC和G++的误区:GCC和G++的区别

  • ICC:全称Intel C++ Compiler,是Intel开发的C/C++/Fortran编译器套装,适用于Linux、Microsoft和Mac OS X操作系统,没有非IA指令集版本(就是说仅供x86架构CPU使用)。ICC广泛应用于高性能计算、分布式计算等商业计算领域,其向量化和并行化性能是业界的标杆,能够充分发挥现代处理器的特性。

ICC官方网站:ICC

  • IBM XL C++:IBM® XL C/C++ 是一种编译器,有助于为 IBM Power Systems™ 创建和维护使用 C/C++ 编写的应用,能最大限度地提高硬件利用率。缺点则是在编译时间上往往过长。对C++标准的支持、开源软件的支持、错误信息的提示上都不够友好,但随着13.2开始结合Clang正在进行优化。

官方网站:IBM XL C++

四、为什么调试的时候需要编译选项中添加 -g. 介绍readelf命令.

1 .调试的时候加上 -g 是为了生成调试信息,以便于GNU调试器利用该信息,
2.readelf命令用来显示一个或者多个elf格式的目标文件的信息,可以通过它的选项来控制显示哪些信息。这里的elf-file(s)就表示那些被检查的文件。可以支持32位,64位的elf格式文件,也支持包含elf文件的文档(这里一般指的是使用ar命令将一些elf文件打包之后生成的例如lib*.a之类的“静态库”文件)。(ELF文件, 其实就是Executable & Linkable Format, 是一种文件格式, 我们常见的目标文件、动态库和可执行文件, 都属于这个类型。)

五、 在Linux下实现进度条程序. 通过makefile进行编译. 以及实现全彩色的进度条.

1.缓冲区概念
缓冲区(buffer)这个中文译意源自当计算机的高速部件与低速部件通讯时,必须将高速部件的输出暂存到某处,以保证高速部件与低速部件相吻合. 后来这个意思被扩展了,成为”临时存贮区”的意思。
缓冲区分为:无缓冲、行缓冲、全缓冲。
无缓冲:表示的是没有缓冲,可以将信息立马显现出来,典型代表是标准错误流stderr。
行缓冲:表示的是输入输出遇到换行才执行真正的I/O操作。典型的代表是键盘的操作。
全缓冲:表示的是输入输出写满缓冲区才执行I/O操作。典型的代表是磁盘的读写。
fflush:
fflush,函数名, 清除读写缓冲区,需要立即把输出缓冲区的数据进行物理写入时。
fflush(stdin)刷新标准输入缓冲区,把输入缓冲区里的东西丢弃[非标准]
fflush(stdout)刷新标准输出缓冲区,把输出缓冲区里的东西打印到标准输出设备上


本文来自 Important_ 的CSDN 博客 ,全文地址请点击:Linux下实现进度条

2.进度条代码
prograss_bar.c

#include
#include
#include

int main()
{
	int i = 0;
	char bar[102] = { 0 };
	const char* lable = "|/-\\";
	while(i <= 100)
	{
		printf("[%-100s][%d%%][%c]\r",bar, i, lable[i%4]);//缓冲区未刷新		
		fflush(stdout);//刷新缓冲区	
		bar[i++] = '#';
		usleep(100000);//沉睡100ms
	}
	printf("\n");
	return 0;
}

Makefile

prograss_bar:prograss_bar.o
	gcc prograss_bar.c -o prograss_bar
prograss_bar.o:prograss_bar.s
	gcc -c prograss_bar.s -o prograss_bar.o
prograss_bar.s:prograss_bar.i
	gcc -S prograss_bar.i -o prograss_bar.s
prograss_bar.i:prograss_bar.c
	gcc -E prograss_bar.c -o prograss_bar.i

.PHONE:clean

clean:
	rm -f prograss_bar.i prograss_bar.s prograss_bar.o prograss_bar


Linux开发工具相关问题_第1张图片
3.彩色进度条
prograss_bar.c

#include
#include
#include

int main()
{
	int i = 0;
	char bar[102] = { 0 };
	const char* lable = "|/-\\";
	while(i <= 100)
	{
		printf("\e[34m[%-100s][%d%%][%c]\r\e[0m",bar, i, lable[i%4]);
		fflush(stdout);	
		bar[i++] = '#';
		usleep(100000);
	}
	printf("\n");
	return 0;
}

在这里插入图片描述
4.当出现下面的情况时可以试下调整字体大小(Ctrl + ‘-’ 和 Ctrl + Shift+ ‘+’)或者是分辨率。

Linux开发工具相关问题_第2张图片

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

一、源码安装:

步骤: 编译源码,然后安装
1.1安装准备:
a、 首先用yum安装gcc,用于编译源码
b、管网下载源码包
c、winSCP windows与Linux传输文件(若直接用安装软件的linux电脑下载就不用传输了)

1.2 安装过程
a、解压
b、进入解压后的目录配置文件 ./configure # 大多数情况下源码包都会带configure这样一个配置工具,具体使用方法可以vim查看其内容
c、make #编译源码包 如果报错了 make clean 清除缓存重新make
d、make install # 安装
然后删除源码包软件和安装目录

二、rpm安装:

rpm安装:安装别人编译好的软件包

rpm即Redhat Package Manager,Redhat的软件包管方式,适用rpm install 命令

rpm不仅已经把软件源代码编译成二进制文件,而且对软件包依赖的文件,系统环境等做了统计文件扩展名:rpm

还有一种SRPM:没有编译成二进制文件,但是也包含rpm的特性

三、yum安装:

用rpm方式安装软件,如果依赖的软件没有事先安装,软件无法安装成功。

为了解决这个问题,推出yum方式。

既然依赖的软件没有安装在机器上,那么就先安装依赖文件,再安装我需要安装的软件。

因此yum在安装软件同时安装依赖文件。

因此需要一个yum源来放依赖的软件源,对比被安装机器上rpm软件库归根到底,yum也是基于rpm的。


Linux下软件安装方式详解:Linux安装软件

你可能感兴趣的:(Lunix,Linux开发工具,进度条)