2017年5月

Python-mode 是一个 Vim 插件,它使你能够在 Vim 编辑器中更快的利用包括 pylint、rope、pydoc、pyflakes、pep8、autopep8、pep257 和 mccable 在内的各种库来写 Python 代码,这些库提供了一些编码功能,比如静态分析、特征重构、折叠、补全和文档等。

推荐阅读: 如何用 Bash-Support 插件将 Vim 编辑器打造成编写 Bash 脚本的 IDE

这个插件包含了所有你在 Vim 编辑器中可以用来开发 Python 应用的特性。

Python-mode 的特性

它包含下面这些值得一提的特性:

  • 支持 Python 2.6+ 至 Python 3.2 版本
  • 语法高亮
  • 提供 virtualenv 支持
  • 支持 Python 式折叠
  • 提供增强的 Python 缩进
  • 能够在 Vim 中运行 Python 代码
  • 能够添加/删除断点
  • 支持 Python 代码的快捷移动和操作
  • 能够在运行的同时检查代码(pylint、pyflakes、pylama ……)
  • 支持自动修复 PEP8 错误
  • 允许在 Python 文档中进行搜索
  • 支持代码重构
  • 支持强代码补全
  • 支持定义跳转

在这篇教程中,我将阐述如何在 Linux 中为 Vim 安装设置 Python-mode,从而在 Vim 编辑器中开发 Python 应用。

如何在 Linux 系统中为 Vim 安装 Python-mode

首先安装 Pathogen (它使得安装插件超级简单,并且运行文件位于私有目录中),从而更加容易的安装 Python-mode

运行下面的命令来获取 pathogen.vim 文件和它需要的目录:

# mkdir -p ~/.vim/autoload ~/.vim/bundle && \
# curl -LSso ~/.vim/autoload/pathogen.vim https://tpo.pe/pathogen.vim

然后把下面这些内容加入 ~/.vimrc 文件中:

execute pathogen#infect()
syntax on
filetype plugin indent on

安装好 pathogen 以后,你可以像下面这样把 Python-mode 插件放入 ~/.vim/bunble 目录中:

# cd ~/.vim/bundle 
# git clone https://github.com/klen/python-mode.git

然后像下面这样在 Vim 中重建 helptags

:helptags

你需要启用 filetype-plugin:help filetype-plugin-on)和 filetype-indent:help filetype-indent-on)来使用 Python-mode 。

在 Debian 和 Ubuntu 中安装 Python-mode

另一种在 Debian 和 Ubuntu 中安装 Python-mode 的方法是使用 PPA,就像下面这样

$ sudo add-apt-repository https://klen.github.io/python-mode/deb main
$ sudo apt-get update
$ sudo apt-get install vim-python-mode

如果你遇到消息:“The following signatures couldn’t be verified because the public key is not available”,请运行下面的命令:

$ sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys B5DF65307000E266

现在,使用 vim-addon-manager 启用 Python-mode:

$ sudo apt install vim-addon-manager
$ vim-addons install python-mode

在 Linux 中定制 Python-mode

如果想覆盖默认键位绑定,可以在 .vimrc 文件中重定义它们,比如:

" Override go-to.definition key shortcut to Ctrl-]
let g:pymode_rope_goto_definition_bind = "<C-]>"
" Override run current python file key shortcut to Ctrl-Shift-e
let g:pymode_run_bind = "<C-S-e>"
" Override view python doc key shortcut to Ctrl-Shift-d
let g:pymode_doc_bind = "<C-S-d>"

注意,默认情况下, Python-mode 使用 Python 2 进行语法检查。你可以在 .vimrc 文件中加入下面这行内容从而启动 Python 3 语法检查。

let g:pymode_python = 'python3'

你可以在 Python-mode 的 GitHub 仓库找到更多的配置选项: https://github.com/python-mode/python-mode

这就是全部内容了。在本教程中,我向你们展示了如何在 Linux 中使用 Python-mode 来配置 Vim 。请记得通过下面的反馈表来和我们分享你的想法。


作者简介:

Aaron Kili 是一个 Linux 和 F.O.S.S 爱好者、Linux 系统管理员、网络开发人员,现在也是 TecMint 的内容创作者,他喜欢和电脑一起工作,坚信共享知识。


via: https://www.tecmint.com/python-mode-a-vim-editor-plugin/

作者:Aaron Kili 译者:ucasFL 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

Linux 的命令行里面有用来停止正在运行的进程的所有所需工具。Jack Wallen 将为您讲述细节。

 title=

想像一下:你打开了一个程序(可能来自于你的桌面菜单或者命令行),然后开始使用这个程序,没想到程序会锁死、停止运行、或者意外死机。你尝试再次运行该程序,但是它反馈说原来的进程没有完全关闭。

你该怎么办?你要结束进程。但该如何做?不管你信与不信,最好的解决方法大都在命令行里。值得庆幸的是, Linux 有供用户杀死错误的进程的每个必要的工具,然而,你在执行杀死进程的命令之前,你首先需要知道进程是什么。该如何处理这一类的任务。一旦你能够掌握这种工具,它实际是十分简单的……

让我来介绍给你这些工具。

我来概述的步骤是每个 Linux 发行版都能用的,不论是桌面版还是服务器版。我将限定只使用命令行,请打开你的终端开始输入命令吧。

定位进程

杀死一个没有响应的进程的第一个步骤是定位这个进程。我用来定位进程的命令有两个:topps 命令。top 是每个系统管理员都知道的工具,用 top 命令,你能够知道到所有当前正在运行的进程有哪些。在命令行里,输入 top 命令能够就看到你正在运行的程序进程(图1)

 title=

图 1: top 命令给出你许多的信息。

从显示的列表中你能够看到相当重要的信息,举个例子,Chrome 浏览器反映迟钝,依据我们的 top 命令显示,我们能够辨别的有四个 Chrome 浏览器的进程在运行,进程的 pid 号分别是 3827、3919、10764 和 11679。这个信息是重要的,可以用一个特殊的方法来结束进程。

尽管 top 命令很是方便,但也不是得到你所要信息最有效的方法。 你知道你要杀死的 Chrome 进程是那个,并且你也不想看 top 命令所显示的实时信息。 鉴于此,你能够使用 ps 命令然后用 grep 命令来过滤出输出结果。这个 ps 命令能够显示出当前进程列表的快照,然后用 grep 命令输出匹配的样式。我们通过 grep 命令过滤 ps 命令的输出的理由很简单:如果你只输入 ps 命令,你将会得到当前所有进程的列表快照,而我们需要的是列出 Chrome 浏览器进程相关的。所以这个命令是这个样子:

ps aux | grep chrome

这里 aux 选项如下所示:

  • a = 显示所有用户的进程
  • u = 显示进程的用户和拥有者
  • x = 也显示不依附于终端的进程

当你搜索图形化程序的信息时,这个 x 参数是很重要的。

当你输入以上命令的时候,你将会得到比图 2 更多的信息,而且它有时用起来比 top 命令更有效。

 title=

图 2:用 ps 命令来定位所需的内容信息。

结束进程

现在我们开始结束进程的任务。我们有两种可以帮我们杀死错误的进程的信息。

  • 进程的名字
  • 进程的 ID (PID)

你用哪一个将会决定终端命令如何使用,通常有两个命令来结束进程:

  • kill - 通过进程 ID 来结束进程
  • killall - 通过进程名字来结束进程

有两个不同的信号能够发送给这两个结束进程的命令。你发送的信号决定着你想要从结束进程命令中得到的结果。举个例子,你可以发送 HUP(挂起)信号给结束进程的命令,命令实际上将会重启这个进程。当你需要立即重启一个进程(比如就守护进程来说),这是一个明智的选择。你通过输入 kill -l 可以得到所有信号的列表,你将会发现大量的信号。

图 3: 可用的结束进程信号。

最经常使用的结束进程的信号是:

Signal NameSingle ValueEffect
SIGHUP1挂起
SIGINT2键盘的中断信号
SIGKILL9发出杀死信号
SIGTERM15发出终止信号
SIGSTOP17, 19, 23停止进程

好的是,你能用信号值来代替信号名字。所以你没有必要来记住所有各种各样的信号名字。

所以,让我们现在用 kill 命令来杀死 Chrome 浏览器的进程。这个命令的结构是:

kill SIGNAL PID

这里 SIGNAL 是要发送的信号,PID 是被杀死的进程的 ID。我们已经知道,来自我们的 ps 命令显示我们想要结束的进程 ID 号是 3827、3919、10764 和 11679。所以要发送结束进程信号,我们输入以下命令:

kill -9 3827
kill -9 3919
kill -9 10764
kill -9 11679

一旦我们输入了以上命令,Chrome 浏览器的所有进程将会成功被杀死。

我们有更简单的方法!如果我们已经知道我们想要杀死的那个进程的名字,我们能够利用 killall 命令发送同样的信号,像这样:

killall -9 chrome

附带说明的是,上边这个命令可能不能捕捉到所有正在运行的 Chrome 进程。如果,运行了上边这个命令之后,你输入 ps aux | grep chrome 命令过滤一下,看到剩下正在运行的 Chrome 进程有那些,最好的办法还是回到 kIll 命令通过进程 ID 来发送信号值 9 来结束这个进程。

结束进程很容易

正如你看到的,杀死错误的进程并没有你原本想的那样有挑战性。当我让一个顽固的进程结束的时候,我趋向于用 killall命令来作为有效的方法来终止,然而,当我让一个真正的活跃的进程结束的时候,kill命令是一个好的方法。


via: https://www.linux.com/learn/intro-to-linux/2017/5/how-kill-process-command-line

作者:JACK WALLEN 译者:hwlog 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

Cream 附加包通过把一个更加熟悉的“面孔”置于 Vim 文本编辑器之上,同时保留 Vim 的功能,使其更加容易使用

 title=

大约 10 年前,我既使用 Emacs 进行文本编辑,也使用 Vim 进行文本编辑。说到底,我的确是一个热衷于 Emacs 的家伙。尽管 Emacs 在我的心里占据了很重要的地位,但我知道, Vim 也不赖。

一些人,或者像我一样的人,在技术方面有些笨手笨脚。多年来,我和一些 Linux 新手交流,了解到他们想使用 Vim,但是却失望的发现, Vim 编辑器和他们在其它操作系统上使用过的编辑器不一样。

但是,当我把 Cream 介绍给他们以后,他们的失望就变成了满意。Cream 是 Vim 的一个附加包,它使得 Vim 更加容易使用。Cream 让这些 Linux 新手变成了 Vim 的坚决拥护者和忠心用户。

让我们来看一看 Cream 是什么以及它是如何让 Vim 变得更加容易使用的。

Cream 的安装

在安装 Cream 之前,你需要先在你的电脑上安装好 Vim 和 GVim 的 GUI 组件。我发现最容易完成这件事的方法是使用 Linux 版本的包管理器。

安装好 Vim 以后,便可下载 Cream 的安装程序,或者你也可以再次使用 Linux 发行版的包管理器进行安装。

安装好 Cream 以后,你可以从应用菜单选择它(比如,Applications->Cream)或者在程序启动器中输入 Cream,从而启动 Cream 。

 title=

Cream 的使用

如果你之前已经使用过 Gvim,那么你会注意到, Cream 几乎没改变该编辑器的外观和感觉。最大的不同是 Cream 的菜单栏和工具栏,它们取代了 Gvim 陈旧的菜单栏和工具栏,新的菜单栏和工具栏的外观和功能分组看起来和其它编辑器的一样。

Cream 的菜单栏对用户隐藏了更多的技术选项,比如指定一个编译器的能力,以及运行 make 命令的能力。当你通过使用 Cream 更加熟悉 Vim 以后,你只需要从 Setting->Preferences->Behavior 选择选项,就可以更容易地访问这些特性。有了这些选项,你可以(如果你想)体验到一个兼有 Cream 和传统 Vim 二者优点的强大编辑器。

Cream 并不是仅由菜单驱动。尽管编辑器的功能仅有单击或双击两种方式,但是你也可以使用常见的键盘快捷键来执行操作,比如 CTRL-O(打开一个文件),CTRL-C(复制文本)。你不需要在几种模式之间切换,也不需要记住一些很难记住的命令。

Cream 开始运行以后,打开一个文件,或者新建一个文件,然后就可以开始输入了。几个我向他们介绍过 Cream 的人说,虽然 Cream 保留了 Vim 的许多典型风格,但是 Cream 使用起来更加舒服。

 title=

并不是说 Cream 是 Vim 的简化版,远远不是。事实上, Cream 保留了 Vim 的全部特性,同时,它还有一系列其他有用的特性。我发现的 Cream 的一些有用的特性包括:

  • 一个标签式界面
  • 语法高亮(特别是针对 Markdown、LaTeX 和 HTML)
  • 自动修正拼写错误
  • 字数统计
  • 内建文件浏览器

Cream 本身也有许多附加包,可以给编辑器增加一些新的特性。这些特性包括文本加密、清理电子邮件内容,甚至还有一个使用教程。老实说,我还没有发现哪一个附加包是真正有用的,不过你的感受可能会有所不同。

我曾听过一些 Vi/Vim 的狂热分子谴责 Cream “降低”(这是他们的原话)了 Vi/Vim 编辑器的水准。的确,Cream 并不是为他们设计的。它是为那些想快速使用 Vim ,同时保留他们曾经使用过的编辑器的外观和感觉的人准备的。在这种情况下, Cream 是值得赞赏的,它使得 Vim 更加容易使用,更加广泛的被人们使用。

(题图 : opensource.com)


via: https://opensource.com/article/17/5/stir-bit-cream-make-vim-friendlier

作者:Scott Nesbitt 译者:ucasFL 校对:jasminepeng

本文由 LCTT 原创编译,Linux中国 荣誉推出

传说中的 LC3(LinuxCon + ContainerCon + CloudOpen)大会,将于今年 6 月 19 至 20 日在北京上演中国首秀。

Linux 中国(https://linux.cn/)作为本次 LC3 大会的推广合作伙伴,将全程跟踪报道本次 LC3 大会的最新消息和花絮动态。

据官方消息称,此次大会可谓众星云集,演讲嘉宾都是业内最顶尖的开源领袖,其中半数以上的嘉宾都来自海外,比如 Linux 界两位风云级的大神 Linus Torvalds 和 Greg Kroah-Hartman、华为平台首席架构师熊英、谷歌 Kubernetes 技术负责人 David Oppenheimer、OpenStack 基金会的 Jonathan Bryce 等等。值得一提的是,这也是 Linux 创始人 Linus Torvalds 首次访华!

下面我来为大家介绍几位参加本次大会的开源领袖:

Linus Torvalds ——Linux 和 Git 的创始人

Linus Torvalds  Linux 和 Git 的创始人

Linus Torvalds 先生创建了 Linux 内核,并负责领导广泛使用的 Linux 操作系统的开源开发,被称为“Linux 之父”。他至今仍然是将新代码纳入标准 Linux 内核的最终权威。

Linus Torvalds 于 1991 年研发出 Linux 内核。随后他与志愿者组建了团队,并于 1994 年春季发布了 V1.0 版内核。1996 年,Linus Torvalds 加入 Transmeta,同时继续负责 Linux 的内核开发。2003 年,Linus Torvalds 离开 Transmeta,在开源开发实验室(OSDL)的支持下,他专注于 Linux 内核的研发。开源开发实验室与自由标准组织(Free Standards Group)在 2007 年合并成立新机构“Linux 基金会”。

Linus Torvalds 还是著名的分布式版本控制系统 Git 的发明人。Git 现在已经广泛地应用于开源软件和软件产业的开发中,风靡开源界的 GitHub,以及 GitLab 都是以 Git 作为底层的版本控制系统而打造的。

Linus Torvalds 不仅仅享誉于开源界,而且以率真敏锐、观点鲜明而著称。本次来中国参加 LC3 是 Linus Torvalds 首次来华访问,在本次大会上,Linus Torvalds 将与 VMWare 的首席开源官 Dirk Hohndel 展开对话,大家該也很期待!

Greg Kroah-Hartman——Linux 内核主要维护人

Greg Kroah-Hartman  Linux 内核主要维护人

Greg Kroah-Hartman 是在内核级别维护 Linux 的核心开发人员之一。他在 Linux 基金会担任 Linux 基础研究员的角色, 他一直在做 Linux内核稳定分支(-stable)和包括 staging、USB、sysfs 等多个子系统的维护。

在 2012 年 2 月以前,他在 Novell 的 SUSE Labs工作,而后效力于 Linux 基金会,全心致力于 Linux 驱动程序项目。

Greg 在本次大会上将向我们分享 Linux 内核是如何开发的,整个机制是如何运作的。

李三琦——华为产品与解决方案首席技术官

李三琦  华为产品与解决方案首席技术官

李三琦博士现任华为产品与解决方案首席技术官。在此之前,他曾担任华为运营商 BG 首席技术官、IT 产品线和核心网产品线首席技术官以及数据中心和媒体网络BU总裁。

他曾创办过多家高科技公司,如中国的高鸿电讯科技有限公司(2000 年被大唐电信集团收购)和美国的 Santera Systems 公司(2003 年被 Tekelec 收购)。他还重组了 Santera Softswitch,成立了 Spatial Wireless 公司(于 2004 年被 Alcatel 收购)。在 2003 至 2007 年间,他担任 Tekelec 首席技术官。在他杰出的职业生涯中,李三琦曾为思科、AT&T、Verizon、KT 和三星等公司提供技术咨询服务,并在数家高科技创业公司的咨询委员会任职。

李三琦博士拥有 25 项专利,在国际学术期刊和顶级国际会议论文集上发表论文 160 多篇, 并担任过 20 多个博士生的导师。

熊英——华为云平台首席架构师

熊英  华为云平台首席架构师

熊英博士现任华为云平台首席架构师,目前主要负责云平台即服务(PaaS)的架构、策略和设计。他在云架构和设计、电子商务以及企业IT系统方面拥有 20 多年的经验。

在加入华为之前,他在微软工作了 8 年,担任 Azure 和 SQL Azure 云平台首席架构师和开发经理。他还在 AT&T 工作了十多年,担任企业技术架构师和开发经理。

David Oppenheimer——谷歌 Kubernetes 技术负责人

David Oppenheimer  谷歌 Kubernetes 技术负责人

David Oppenheimer 先生现任谷歌 Kubernetes 技术负责人。在加入 Kubernetes 团队之前,他任职于谷歌 Borg 和 Omega 集群管理系统。

他在本次大会上的演讲主题是 Kubernetes 的资源管理与调度,作为最近发展非常迅速的 K8S 技术的主要负责人之一,David 将以最权威的角度为我们阐述如何有效地分配共享资源(CPU、内存等),以达到更高效的资源利用,并在共享集群中强化隔离。本次讲演也将讨论最新发布的 K8S 1.6 上的新功能,包括容器的细粒度控制,以及如何使用它们来达成策略目标等,最后还将介绍K8S将来的版本发展方向。

申元庆——微软亚太科技有限公司董事长

申元庆  微软亚太科技有限公司董事长

申元庆先生现任微软亚太科技有限公司董事长、微软亚太研发集团首席运营官、微软中国云计算与企业事业部总经理。申元庆及其团队主导大数据、物联网和开发工具的发展战略,以提升微软智能云的客户体验,为中国客户和合作伙伴提供云迁移领域的全面支持。

在微软工作的 20 多年里,申元庆在微软的研发、销售和市场领域担任过多项管理职务。他早期还在微软先进技术中心(ATC)、微软中国创新集团、医疗解决方案集团(HSG)和战略合作集团(SPG)担任过管理职务。加入微软之前,他在IDT工作。他目前还在多家高科技公司担任董事会成员。

唐雄燕——中国联通网络技术研究院首席技术专家

唐雄燕  中国联通网络技术研究院首席技术专家

唐雄燕博士现任中国联通网络技术研究院首席技术专家,以及中国通信标准化协会(CCSA)副主席。他在通信技术领域拥有 20 多年的经验。1994 至 1997 年间,他在新加坡和德国进行高速光通信研究。1998 年以来,他一直从事中国电信运营商的技术管理工作。

他的专业领域包括宽带通信、光学和 IP 网络,新一代网络和物联网。近年来,他主要负责中国联通的SDN/NFV项目。

唐洪——阿里云首席架构师

唐洪  阿里云首席架构师

唐洪博士现任阿里云首席架构师。他于 2010 年加入阿里云,并在推动阿里云的大型计算引擎 Apsara 的发展中发挥了重要作用。

在加入阿里云之前,他担任第四大搜索引擎公司 Ask.com 的搜索系统基础设施总监。2008 年,他加入雅虎云计算团队并担任资深首席工程师,负责推动 Hadoop 的研发。唐洪博士在高性能计算并行系统、基于集群的分布式计算和存储系统、大型互联网服务和云计算等方面拥有 19 年的研发和行业经验。

Dirk Hohndel——VMware 副总裁兼首席开源官

Dirk Hohndel VMware 副总裁兼首席开源官

Dirk Hohndel 先生现任 VMware 首席开源官,负责领导公司的开源项目和战略制定,推动企业创建共同的价值观和流程,以实现 VMware 与开源社区的互动。

在加入 VMware 之前,Dirk 在英特尔工作近 15 年,担任首席 Linux 和开源技术专家,带领英特尔开源业务的发展。在此之前,他曾任德意志银行 SuSE 和 Unix 架构首席技术官。自 20 世纪 90 年代初以来,Dirk 一直是 Linux 和开放源代码的积极开发者和贡献者。作为早期的 Linux 内核开发人员之一,Dirk 多年来致力于 10 多个开源项目。

Jonathan Bryce——OpenStack 基金会执行董事

Jonathan Bryce  OpenStack 基金会执行董事

Jonathan Bryce 先生现任 OpenStack 基金会执行董事,此前他是 Rackspace Cloud 的创始人。

他一直为构建云而努力。早期担任过 Rackspace 的开发人员,与同事 Todd Morey 一起研究如何搭建一个网络托管环境,能让用户和企业都可以设计、开发和部署他们理想的网站,而所有这些都无需采购技术,操作简便。后来这一设想演变成 Rackspace Cloud。 自此,Bryce 成为 OpenStack 这一开源云软件项目的重要推动力量。从那时起,他一直是首创开源云软件 OpenStack 的主力军。

Dirk-Peter van Leeuwen——红帽高级副总裁兼亚太区总经理

Dirk-Peter van Leeuwen  红帽高级副总裁兼亚太区总经理

Dirk-Peter van Leeuwen 先生现任红帽高级副总裁兼亚太区总经理,负责拓展红帽的市场布局,管理红帽在亚太区的所有销售、市场和服务。自 2009 年 9 月到新加坡就任以来,他作为亚太区负责人,使红帽的营收增加了两倍,亚太区至今仍被视为红帽发展最快的地区。

红帽是基于开放源码的商业IT产品和解决方案首屈一指的提供商。

我们因何而聚?这一切都从一个操作系统、一个社区和一个红帽人开始的。 当然,操作系统是 Linux,这是许多人在这里的原因。但是,这个项目的真正明星不是某个人甚至不是红帽,而是一个不断地验证新想法并且改进它们的社区。开源社区为我们带来了改变世界的技术:互联网,云计算,容器等。

他在本次大会上将为我们分享《红帽和开源的力量》。

Dave Ward——思科系统工程首席技术官兼首席架构师

Dave Ward  思科系统工程首席技术官兼首席架构师

Dave Ward 先生现任思科系统工程首席技术官兼首席架构师,负责思科的新技术研发。他还担任过思科 IOS-XR 软件首席架构师,凭借在路由、系统软件和网络设计方面的专业知识而备受业内认可。

杨志强——中国移动研究院副院长

杨志强  中国移动研究院副院长

杨志强女士现任中国移动研究院副院长,教授级高级工程师,享受国务院政府特殊津贴。

杨志强在通信网络设计、开发和管理方面拥有 30 多年的经验。近年来,她负责核心网研究与规划、大数据与信息安全等领域,率领并完成了中国移动的关键网络战略项目,如中国移动 4G 核心网络试验,基于 TD-LTE 的 VOLTE 网络和面向SDN/NFV的核心网(Novonet)演进。她还带领团队开发和部署了一系列大数据和信息安全产品。

Jim Zemlin——Linux 基金会执行董事

Jim Zemlin  Linux 基金会执行董事

Jim Zemlin 先生的职业生涯见证了过去十年间的三大技术趋势:移动计算、云计算和开源软件。如今,作为 Linux 基金会执行董事,他凭借丰富经验,推动通过使用开源和 Linux 来加快技术创新。

更多讲演人

本次大会将有上百位嘉宾为我们带来近百场从主题演讲到分组讨论的精彩分享,内容涉及开源、Linux、云计算、容器等等最新前沿技术。在近百场的 LC3 会议中, 谁是你最想见的开源领袖呢?关注及对本文评论即有机会获取购票折扣优惠!

有关更多 LC3 会议的详情,请关注 LF Events 官微:

LF Events

5 月 28 日之前报名参会尚有最后的门票优惠!

(题图素材来自: Pixabay,CC0)

多年前,我曾是一名 Smalltalk 程序员,这种经验让我以一种不同的视角来观察编程的世界,例如,需要花时间来适应源代码应该存储在文本文件中的这种做法。

我们作为程序员通常会区分“开发”和“部署”,特别是我们在开发的地方所使用的工具不同于我们在之后部署软件时的地点和工具时。而在 Smalltalk 世界里,没有这样的区别。

Smalltalk 构建于虚拟机包含了你的开发环境(IDE、调试器、文本编辑器、版本控制等)的思路之上,如果你需要修改任何一处代码,你得修改内存中运行副本。如果需要的话,你可以为运行中的机器做个快照;如果你想分发你的代码,你可以发送一个运行中的机器的镜像副本(包括 IDE、调试器、文本编辑器、版本控制等)给用户。这就是上世纪 90 年代软件开发的方式(对我们中的一些人来说)。

如今,部署环境与开发环境有了很大的不同。起初,你不要期望那里(指部署环境)有任何开发工具。一旦部署,就没有版本控制、没有调试、没有开发环境。有的是记录和监视,这些在我们的开发环境中都没有,而有一个“构建管道”,它将我们的软件从开发形式转换为部署形式。作为一个例证,Docker 容器则试图重新找回上世纪 90 年代 Smalltalk 程序员部署体验的那种简单性,而避免同样的开发体验。

我想如果 Smalltalk 世界是我唯一的编程方面的体验,让我无法区分开发和部署环境,我可能会偶尔回顾一下它。但是在我成为一名 Smalltalk 程序员之前,我还是一位 APL 程序员,这也是一个可修改的虚拟机镜像的世界,其中开发和部署是无法区分的。因此,我相信,在当前的时代,人们编辑单独的源代码文件,然后运行构建管道以创建在编辑代码时尚不存在的部署作品,然后将这些作品部署给用户。我们已经以某种方式将这种反模式的软件开发制度化,而不断发展的软件环境的需求正在迫使我们找回到上世纪 90 年代的更有效的技术方法。因此才会有 Docker 的成功,所以,我需要提出我的建议。

我有两个建议:我们在运行时系统中实现(并使用)版本控制,以及,我们通过更改运行中的系统来开发软件,而不是用新的运行系统替换它们。这两个想法是相关的。为了安全地更改正在运行的系统,我们需要一些版本控制功能来支持“撤消”功能。也许公平地说,我只提出了一个建议。让我举例来说明。

让我们开始假设一个静态网站。你要修改一些 HTML 文件。你应该如何工作?如果你像大多数开发者一样,你会有两个,也许三个网站 - 一个用于开发,一个用于 QA(或者预发布),一个用于生产。你将直接编辑开发实例中的文件。准备就绪后,你将把你的修改“部署”到预发布实例。在用户验收测试之后,你将再次部署,这次是生产环境。

使用 Occam 的 Razor,让我们可以避免不必要地创建实例。我们需要多少台机器?我们可以使用一台电脑。我们需要多少台 web 服务器?我们可以使用具有多个虚拟主机的单台 web 服务器。如果不使用多个虚拟主机的话,我们可以只使用单个虚拟主机吗?那么我们就需要多个目录,并需要使用 URL 的顶级路径来区分不同的版本,而不是虚拟主机名。但是为什么我们需要多个目录?因为 web 服务器将从文件系统中提供静态文件。我们的问题是,目录有三个不同的版本,我们的解决方案是创建目录的三个不同的副本。这不是正是 Subversion 和 Git 这样的版本控制系统解决的问题吗?制作目录的多个副本以存储多个版本的策略回到了版本控制 CVS 之前的日子。为什么不使用比如说一个空的的 Git 仓库来存储文件呢?要这样做,web 服务器将需要能够从 git 仓库读取文件(参见 mod\_git)。

这将是一个支持版本控制的运行时系统。

使用这样的 web 服务器,使用的版本可以由 cookie 来标识。这样,任何人都可以推送到仓库,用户将继续看到他们发起会话时所分配的版本。版本控制系统有不可改变的提交; 一旦会话开始,开发人员可以在不影响正在运行的用户的情况下快速推送更改。开发人员可以重置其会话以跟踪他们的新提交,因此开发人员或测试人员就可能如普通用户一样查看在同台服务器上同一个 URL 上正在开发或正在测试的版本。作为偶然的副作用,A/B 测试仅仅是将不同的用户分配给不同的提交的情况。所有用于管理多个版本的 git 设施都可以在运行环境中发挥作用。当然,git reset 为我们提供了前面提到的“撤销”功能。

为什么不是每个人都这样做?

一种可能性是,诸如版本控制系统的工具没有被设计为在生产环境中使用。例如,给某人推送到测试分支而不是生产分支的许可是不可能的。对这个方案最常见的反对是,如果发现了一个漏洞,你会想要将某些提交标记为不可访问。这将是另一种更细粒度的权限的情况;开发人员将具有对所有提交的读取权限,但外部用户不会。我们可能需要对现有工具进行一些额外的改造以支持这种模式,但是这些功能很容易理解,并已被设计到其他软件中。例如,Linux (或 PostgreSQL)实现了对不同用户的细粒度权限的想法。

随着云环境变得越来越普及,这些想法变得更加相关:云总是在运行。例如,我们可以看到,AWS 中等价的 “文件系统”(S3)实现了版本控制,所以你可能有一个不同的想法,使用一台 web 服务器提供来自 S3 的资源文件,并根据会话信息选择不同版本的资源文件。重要的并不是哪个实现是最好的,而是支持这种运行时版本控制的愿景。

部署的软件环境应该是“版本感知”的原则,应该扩展到除了服务静态文件的 web 服务器之外的其他工具。在将来的文章中,我将介绍版本库,数据库和应用程序服务器的方法。


作者简介:

Robert M. Lefkowitz - Robert(即 r0ml)是一个喜欢复杂编程语言的编程语言爱好者。 他是一个提高清晰度、提高可靠性和最大限度地简化的编程技术收藏家。他通过让计算机更加容易获得来使它普及化。他经常演讲中世纪晚期和早期文艺复兴对编程艺术的影响。


via: https://opensource.com/article/17/1/difference-between-development-deployment

作者:Robert M. Lefkowitz 译者:geekpi 校对:Bestony

本文由 LCTT 原创编译,Linux中国 荣誉推出

通常,要在 Linux 终端删除一个文件,我们使用 rm 命令(删除文件)、shred 命令(安全删除文件)、wipe 命令(安全擦除文件)或者 secure-deletion 工具包(一个安全文件删除工具集合)。

我们可以使用上述任意的工具来处理相对较小的文件。如果我们想要删除超大的文件/文件夹,比如大概 100-200GB,在删除文件(I/O 调度)所花费的时间以及 RAM 占用量方面,就没有你想的那么简单。

在本教程中,我们会解释如何在 Linux 中有效率并可靠地删除大文件/文件夹。

建议阅读: 5 个在 Linux 中清空或者删除大文件的方法

我们的主要目标是使用一种不会在删除大文件时拖慢系统的技术,合理地占用 I/O。我们可以用 ionice 命令实现这个目标。

在 Linux 中使用 ionice 命令删除超大(200GB)文件

ionice 是一个可以对另一个程序设置或获取 I/O 调度级别和优先级的有用程序。如果没有给出参数或者只有 -p 参数,那么 ionice 将会查询该进程的当前的 I/O 调度级别以及优先级。

如果我们给出命令名称,如 rm 命令,它将使用给定的参数运行此命令。要获取或设置调度参数,请指定[进程的 PID],如下:

# ionice -p PID

要指定名字或者调度的数字,使用(0 表示无、1 表示实时、2 表示尽力、3 表示空闲)下面的命令。

以下命令表示 rm 会属于空闲 I/O 级别,并且只在其他进程不使用的时候使用 I/O:

---- Deleting Huge Files in Linux -----
# ionice -c 3 rm /var/logs/syslog
# ionice -c 3 rm -rf /var/log/apache

如果系统中没有很多空闲时间,那么我们希望使用尽力调度级别,并且使用低优先级:

# ionice -c 2 -n 6 rm /var/logs/syslog
# ionice -c 2 -n 6 rm -rf /var/log/apache

注意:要使用安全的方法删除大文件,我们可以使用先前提到的 shredwipe 以及 secure-deletion 工具包中的不同工具,而不是 rm 命令。

建议阅读:3 个在 Linux 中永久/安全删除文件/文件夹的方法

要获取更多信息,查阅 ionice 的手册页:

# man ionice 

就是这样了!你脑海里还有其他的方法么?在评论栏中与我们分享。


作者简介:

Aaron Kili 是 Linux 和 F.O.S.S 爱好者,将来的 Linux 系统管理员和网络开发人员,目前是 TecMint 的内容创作者,他喜欢用电脑工作,并坚信分享知识。


via: https://www.tecmint.com/delete-huge-files-in-linux/

作者:Aaron Kili 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出