比较文本差异的工具_Linux 开发的五大必备工具 | Linux 中国

Linux 已经成为工作、娱乐和个人生活等多个领域的支柱,人们已经越来越离不开它。在 Linux 的帮助下,技术的变革速度超出了人们的想象,Linux 开发的速度也以指数规模增长。因此,越来越多的开发者也不断地加入开源和学习 Linux 开发地潮流当中。在这个过程之中,合适的工具是必不可少的,可喜的是,随着 Linux 的发展,大量适用于 Linux 的开发工具也不断成熟。甚至可以说,这样的工具已经多得有点惊人。

为了选择更合适自己的开发工具,缩小选择范围是很必要的。但是这篇文章并不会要求你必须使用某个工具,而只是缩小到五个工具类别,然后对每个类别提供一个例子。然而,对于大多数类别,都会有不止一种选择。下面我们来看一下。

容器

放眼于现实,现在已经是容器的时代了。容器既及其容易部署,又可以方便地构建开发环境。如果你针对的是特定的平台的开发,将开发流程所需要的各种工具都创建到容器映像中是一种很好的方法,只要使用这一个容器映像,就能够快速启动大量运行所需服务的实例。

一个使用容器的最佳范例是使用 Docker[1],使用容器(或 Docker)有这些好处:

◈ 开发环境保持一致◈ 部署后即可运行◈ 易于跨平台部署◈ Docker 映像适用于多种开发环境和语言◈ 部署单个容器或容器集群都并不繁琐

通过 Docker Hub[2],几乎可以找到适用于任何平台、任何开发环境、任何服务器、任何服务的映像,几乎可以满足任何一种需求。使用 Docker Hub 中的映像,就相当于免除了搭建开发环境的步骤,可以直接开始开发应用程序、服务器、API 或服务。

Docker 在所有 Linux 平台上都很容易安装,例如可以通过终端输入以下命令在 Ubuntu 上安装 Docker:

  1. sudo apt-get install docker.io

Docker 安装完毕后,就可以从 Docker 仓库中拉取映像,然后开始开发和部署了(如下图)。

5325ccb7fa9eb0636bf4d2a77dbe9c96.png

图 1: Docker 镜像准备部署

版本控制工具

如果你正在开发一个大型项目,又或者参与团队开发,版本控制工具是必不可少的,它可以用于记录代码变更、提交代码以及合并代码。如果没有这样的工具,项目几乎无法妥善管理。在 Linux 系统上,Git[3] 和 GitHub 的易用性和流行程度是其它版本控制工具无法比拟的。如果你对 Git 和 GitHub 还不太熟悉,可以简单理解为 Git 是在本地计算机上安装的版本控制系统,而 GitHub 则是用于上传和管理项目的远程存储库。 Git 可以安装在大多数的 Linux 发行版上。例如在基于 Debian 的系统上,只需要通过以下这一条简单的命令就可以安装:

  1. sudo apt-get install git

安装完毕后,就可以使用 Git 来实施版本控制了(如下图)。

ed013f697d92a93eccea697652b504ce.png

图 2:Git 已经安装,可以用于很多重要任务

Github 会要求用户创建一个帐户。用户可以免费使用 GitHub 来管理非商用项目,当然也可以使用 GitHub 的付费模式(更多相关信息,可以参阅价格矩阵)。

文本编辑器

如果没有文本编辑器,在 Linux 上开发将会变得异常艰难。当然,文本编辑器之间孰优孰劣,具体还是要取决于开发者的需求。对于文本编辑器,有人可能会使用 vim、emacs 或 nano,也有人会使用带有 GUI 的编辑器。但由于重点在于开发,我们需要的是一种能够满足开发人员需求的工具。不过我首先要说,vim 对于开发人员来说确实是一个利器,但前提是要对 vim 非常熟悉,在这种前提下,vim 能够满足你的所有需求,甚至还能给你更好的体验。然而,对于一些开发者(尤其是刚开始接触 Linux 的新手)来说,这不仅难以帮助他们快速达成需求,甚至还会是一个需要逾越的障碍。考虑到这篇文章的目标是帮助 Linux 的新手(而不仅仅是为各种编辑器的死忠粉宣传他们拥护的编辑器),我更倾向于使用 GUI 编辑器。

就文本编辑器而论,选择 Bluefish[6] 一般不会有错。 Bluefish 可以从大部分软件库中安装,它支持项目管理、远程文件多线程操作、搜索和替换、递归打开文件、侧边栏、集成 make/lint/weblint/xmllint、无限制撤销/重做、在线拼写检查、自动恢复、全屏编辑、语法高亮(如下图)、多种语言等等。

33ba6a7c3886fc70e8e42d63634cd264.png

图 3:运行在 Ubuntu 18.04 上的 Bluefish

IDE

集成开发环境Integrated Development Environment(IDE)是包含一整套全面的工具、可以实现一站式功能的开发环境。 开发者除了可以使用 IDE 编写代码,还可以编写文档和构建软件。在 Linux 上也有很多适用的 IDE,其中 Geany[7] 就包含在标准软件库中,它对用户非常友好,功能也相当强大。 Geany 具有语法高亮、代码折叠、自动完成,构建代码片段、自动关闭 XML 和 HTML 标签、调用提示、支持多种文件类型、符号列表、代码导航、构建编译,简单的项目管理和内置的插件系统等强大功能。

Geany 也能在系统上轻松安装,例如执行以下命令在基于 Debian 的 Linux 发行版上安装 Geany:

  1. sudo apt-get install geany

安装完毕后,就可以快速上手这个易用且强大的 IDE 了(如下图)。

81b9716e46a36ff03081a971f1295249.png

图 4:Geany 可以作为你的 IDE

文本比较工具

有时候会需要比较两个文件的内容来找到它们之间的不同之处,它们可能是同一文件的两个不同副本(有一个经过编译,而另一个没有)。这种情况下,你肯定不想要凭借肉眼来找出差异,而是想要使用像 Meld[8] 这样的工具。 Meld 是针对开发者的文本比较和合并工具,可以使用 Meld 来发现两个文件之间的差异。虽然你可以使用命令行中的文本比较工具,但就效率而论,Meld 无疑更为优秀。

Meld 可以打开两个文件进行比较,并突出显示文件之间的差异之处。 Meld 还允许用户从两个文件的其中一方合并差异(下图显示了 Meld 同时打开两个文件)。

44b7779cde394e726a76a4200a222f19.png

图 5: 以简单差异的模式比较两个文件

Meld 也可以通过大多数标准的软件库安装,在基于 Debian 的系统上,执行以下命令就可以安装:

  1. sudo apt-get install meld

高效地工作

以上提到的五个工具除了帮助你完成工作,而且有助于提高效率。尽管适用于 Linux 开发者的工具有很多,但对于以上几个类别,你最好分别使用一个对应的工具。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/437361.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【转】C# 动态对象(dynamic)的用法

说到正确用法,那么首先应该指出一个错误用法: 常有人会拿var这个关键字来和dynamic做比较。实际上,var和dynamic完全是两个概念,根本不应该放在一起做比较。var实际上是编译期抛给我们的“语法糖”,一旦被编译&#x…

关于prototype使用位置问题的讨论

问题贴:http://bbs.csdn.net/topics/390446362 new四部曲: (1)创建一个新的对象,并让函数的 this 指针指向它; (2)将函数的 prototype 对象的所有成员都赋给这个新对象&#xff0c…

第二次尝试修复Hbase2出现Region不一致,使用 HBCK2 - 2021.11.15

spark任务中入hbase任务全部失败了&#xff0c;查看日志发现hbase出现问题 报错日志&#xff1a; 在hbase的log中看到报错 Call queue is full on xxxx,16000,1611197476326, too many items queued 修改了配置文件&#xff0c;增加了队列数量 <property><name>h…

@query传参_vue-router中params传参和query传参的区别及处理方法

在 Vue 实例内部&#xff0c;你可以通过 $router 访问路由实例。因此你可以调用 this.$router.push想要导航到不同的 URL&#xff0c;则使用 router.push 方法。这个方法会向 history 栈添加一个新的记录&#xff0c;所以&#xff0c;当用户点击浏览器后退按钮时&#xff0c;则…

JS成员函数声明位置优化

上代码 function A() {this.a function(){}; } a1 new A(); a2 new A(); alert( a1.aa2.a);输出 说明了a1.a&#xff0c;a2.a指向的内存不是同一个&#xff0c;也就是每个对象都有一份自己的函数&#xff0c;只不过一个类的所有实例之间的函数长得是一样的&#xff01; 所以…

【转】什么是用例

用例是什么? 其原始英文是usecase&#xff0c;直译过来就成了用例。这也是一个比较贴切的叫法了。 从字面的直接理解就是使用的例子。 另一种比较流行的定义是用例就是与使用者(actor)交互的&#xff0c;并且给使用者提供可观测的有意义的结果的一系列活动的集合。 这个定义…

第一次尝试修复Hbase2出现Region不一致,HBCK2

出现问题的原因 Hadoop中报错&#xff0c;集群中某节点的一块磁盘损坏了&#xff0c;运维修复后&#xff0c;hbase出现了region不一致的情况。 修复HBCK2 首先查看web ui中被lock的producer&#xff0c;先释放父region使用bypass -or pid&#xff0c;再释放子producer使用byp…

mybatis plus 事务管理器_SpringBoot第七篇:springboot开启声明式事务

springboot开启事务很简单&#xff0c;只需要一个注解Transactional 就可以了。因为在springboot中已经默认对jpa、jdbc、mybatis开启了事事务&#xff0c;引入它们依赖的时候&#xff0c;事物就默认开启。当然&#xff0c;如果你需要用其他的orm&#xff0c;比如beatlsql&…

【转】MySQL日期函数与日期转换格式化函数大全

Mysql作为一款开元的免费关系型数据库&#xff0c;用户基础非常庞大&#xff0c;本文列出了MYSQL常用日期函数与日期转换格式化函数 1、DAYOFWEEK(date) 1 2 SELECT DAYOFWEEK(‘2016-01-16) SELECT DAYOFWEEK(‘2016-01-16 00:00:00) 1 -> 7 (表示返回日期date是星期几…

JS静态变量和静态函数

function A(){this.id "我是AA"} // 在构造函数外定义的都是所有对象共享的 A.id "我是A"; A.sayId function(){alert(A.id);} A.sayId(); 如上&#xff0c;在构造函数外用函数名定义的属性或者方法&#xff0c;可以也只可以通过函数名来访问&…

Spark读取HDFS上的Snappy压缩文件所导致的内存溢出问题 java.lang.OutOfMemoryError: GC overhead limit exceeded

报错java.lang.OutOfMemoryError: GC overhead limit exceeded HDFS上有一些每天增长的文件&#xff0c;使用Snappy压缩&#xff0c;突然某天OOM了 1.原因: 因为snappy不能split切片&#xff0c;也就会导致一个文件将会由一个task来读取&#xff0c;读取后解压&#xff0c;数…

【转】VS编程,快速折叠或者展开代码到 #region 级别的设置方法。

在代码比较多的文档中&#xff0c;使用#region进行分功能的区分折叠是一个方便的方法。 如果文档中含有很多个#region标签&#xff0c;想一次全部折叠或者展开&#xff0c;有时是必要的。 这里给出一种设置方法&#xff0c;适用于VS2019&#xff0c;其它VS版本请自己验证。 1、…

记录一个JS异常Uncaught NotFoundError

在使用appendChild和insertBefore时&#xff0c;出现 Uncaught NotFoundError : An attempt was made to reference to a Node in a cotext where it does not exist 错误 经测试是因为误认为parent可以是向上n级的parent&#xff0c;而实际上应该是向上第一级的parent才正确…

.net一个函数要用另一个函数的值_Mysql:条件判断函数-CASE WHEN、IF、IFNULL详解

前言在众多SQL中&#xff0c;统计型SQL绝对是让人头疼的一类&#xff0c;之所以如此&#xff0c;是因为这种SQL中必然有大量的判读对比。而条件判断函数就是应对这类需求的利器。本文重点总结CASE WHEN、IF、IFNULL三种函数。1 CASE WHENCase when语句能在SQL语句中织入判断逻辑…

记录一次HBase的scan的分页查询

修改前任bug&#xff0c;Hbase查询过于慢了&#xff0c;以至于都查不出来了&#xff0c;看了代码发现使用的Scan只设置了withStartRow、withEndRow、setCaching扫描,拿到全部数据后存入集合再subList进行分页&#xff0c;但是HBase中存在某些数据有几百万条&#xff0c;根本sca…

python需要配置环境变量吗_python需要设置哪些环境变量?我只知道一个PYTHONHOME指向安装目录。(python详细安装教程 path)...

怎么把Python文件夹添加进Path中 “我的电脑”点右键&#xff0c;“属性” “高级”&#xff0c;“环境变量”&#xff0c;“系统变量” 然后&#xff0c;Path添加“c:\python26”之类的。 怎么在Path中添加Python路径 ⒈单击开始&#xff0c;在搜索框输入cmd&#xff0c;然后&…

qt5.3.1+opencv2.4.9编译环境的搭建

到官网下载qt-opensource-windows-x86-mingw482_opengl-5.3.1.exe文件&#xff0c;执行该文件&#xff0c;选择默认安装即可实现QT的安装&#xff08;安装在C盘的根目录下&#xff09;&#xff0c;该文件封装好了Qt libraries、Qt Creator&#xff0c;其中Qt Creator为3.1.2版本…

Spark2内存调优总结 - 内存划分 与 内存计算 与 调参方式

使用的Spark2以上版本所以只考虑UnifiedMemoryManager动态内存管理&#xff0c;如图&#xff1a; 1. 内存划分 与 内存计算 与 调参方式 1.1 三部分&#xff1a;Spark内存、用户内存、预留内存 预留内存&#xff1a;300MB 固定Spark内存和用户内存比例由参数spark.memory.fra…

java 通过id获取html代码_Maven私服安装配置,java通过私服下载代码,并打包后上传到私服(Nexus)...

Maven私服一般安装Nexus。首先&#xff0c;Nexus下载&#xff0c;访问Nexus官方网址https://www.sonatype.com/download-nexus-repo-oss下载完成后是个压缩包第二步 配置&#xff1a;1)将上一步下载的nexus解压2)端口和监听配置application-port&#xff1a;监听端口applicatio…

Qt下OpenCv中cvGetWindowHandle的使用

昨天因为OpenCv自带的 cvNamedWindow 功能不多&#xff0c;所以想修饰一下&#xff0c;添加几个控件上去&#xff0c;结果获取不到句柄或指针。试了半天无效&#xff0c;于是就准备放弃&#xff0c;打算自己写一个对话框&#xff0c;但是感觉有点麻烦&#xff0c;而且心里不爽&…