2015年6月

拿起你的自拍杆跟我来。

XnRetro 照片编辑器

XnRetro 是一个可以让你快速给你照片添加“类 Instagram”效果的程序。

你肯定知道我说的这些效果:划痕、噪点、相框、过度处理、复古和怀旧色调(因为在这个数字过客的时代,我们一定知道无穷无尽的自拍永远也找不回怀旧的自己。)

无论你认为这些效果是愚蠢的艺术还是创作的捷径,这些滤镜非常流行,可以帮助那些平实无奇的照片添加个性。

XnRetro是一个照片编辑应用

XnRetro的功能

XnRetro 有下面那些功能

  • 20 种色彩滤镜
  • 15 种光影效果(虚化、泄露等等)
  • 28 种画框和边线
  • 5 种插图 (带力度控制)
  • 对比度、伽马校正、饱和度等图像调整
  • 矩形修剪选项

灯光效果调整

(理论上)你可以保存编辑过的 .jpg 或者 .png 文件,并且直接在 app 中分享到社交媒体上。

我说“理论上”的意思是保存.jpg图像无法正常在 linux 版的程序上工作(你可以保存 .png 的图像)。相似问题还有,大多数内置的社交链接失效或者无法导出。

要使用15 种光影效果,你需要在 XnRetro 的‘light’文件夹下将 .jpg 文件重新保存成 .png 文件。编辑‘light.xml’来匹配新的文件名,点击保存那么灯光效果就可以没有问题的加载进 XnRetro 了。

XnRetro 值得安装么?

XnRetro 并不是完美的。它看上去很老土、很难正确的安装,并且已经几年没有更新了

但它还可以使用,除了保存 .jpg 文件外。同时也是那些像 Gimp 或者 Shotwell 的那些‘正规’的图片调整工具的一个灵活替代品。

虽然像 Pixlr Touch UpPolarr 这样的 web 应用和 Chrome Apps 也提供相似的功能,但你也许正在寻找真正原生的解决方案。

习惯了 XnRetro 就很难离开它。

下载 Ubuntu 下的 XnRetro

XnRetro 没有可用的 .deb 安装包。它以二进制文件的形式发行,这意味着你需要每次双击程序来运行。它也只有32位的版本。

你可以使用下面的 XnRetro下载链接。下载完成后你需要解压压缩包并进入。双击里面的‘xnretro’程序。


via: http://www.omgubuntu.co.uk/2015/05/instagram-photo-filters-ubuntu-desktop-app

作者:Joey-Elijah Sneddon 译者:geekpi 校对:wxy

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

文本编辑器是用来编辑纯文本的软件。这种软件有许多用处,包括修改配置文件,编写程序源代码,记下一些想法或者甚至写一份购物列表。由于这种编辑器能都用于许多不同的方面,因此值得花些时间找一个最适合您喜好的编辑器。

不论编辑器有多么复杂,它们通常有一个共同的功能集,包括查找/替换文本,格式化文本,导入文件以及在文件中移动文本。

所有这些文本编辑器都是基于终端的应用,因此他们很适合在远程主机上编辑文件。文本编辑器通常也会提供一个图形化的用户界面,但依旧会保证快速和精简。

基于终端的应用程序在系统资源方面也是轻量级的(在低配置机器上很有用),比起它的图形化版本来也会更快、更高效,由于它们在X需要重启时也不会停止工作,因此非常适合编写脚本。

我选择了一些我最喜欢的开源文本编辑器,他们在使用系统资源方面都非常节俭。

Textadept

Textadept是一款适合程序员的,快速、精简、可扩展、跨平台的开源文本编辑器。这个开源程序由C和Lua写就,并且于这些年间在速度和精简方面进行了优化。

Textadept是那些想要无限的扩展性且不愿牺牲速度或屈服于代码膨胀的程序员们的理想编辑器。

它也有一个用于终端的版本,仅仅依赖ncurses,适合在远程主机上进行编辑。

功能包括:

  • 轻量级
  • 精简设计以最大化利用屏幕
  • 自包含的执行文件 - 无需安装
  • 全键盘驱动
  • 无限制的分割视图(GUI版本),以您所好任意水平或垂直的分割编辑器窗口。请注意Textadep不是一个选项卡式的编辑器。
  • 支持多达80种的编程语言
  • 强大的代码片段和快捷键命令
  • 代码自动补全和API查询
  • 无与伦比的扩展性
  • 书签
  • 查找和替换
  • 在文件中查找
  • 基于缓存的单词补全
  • 成熟的编程语言符号自动补全,以及显示API文档的功能
  • 主题:亮色、暗色、终端
  • 使用词法分析器将名称放到缓冲中,如评论、字符串、关键词
  • 支持会话
  • 快速打开
  • 许多可用的模块,包括对Java、Python、Ruby和近期打开文件列表的支持
  • 符合Gnome HIG用户接口的指导
  • 支持编辑Lua代码。许多Textadept对象和Lua的标准库支持语法自动补全和LuaDoc。

Vim

vim是一个高级的文本编辑器,它在'vi'强大的基础上,并拥有更全面的功能集。

这个编辑器对编程和编辑其他纯ASCII的文件十分有用。所有的命令都由普通的键盘按键提供,能够使用十指来输入,因而十分快捷。另外,功能键可以由用户来定义,并且可也以使用鼠标。

Vim通常被称作"程序员的编辑器",它十分适合于编程,并被认为可以作为完整的集成开发环境。然而,这个软件并不是仅仅面向程序员。Vim适合于各种文本编辑,从编写email到修改配置文件。

Vim的界面基于文本界面下的命令行。尽管它的图形化版本gVim为常用的命令添加了菜单和工具栏,但这个软件的整个功能依旧依赖于它的命令行模式。

功能包括:

  • 3 种模式:

    • 命令模式
    • 插入模式
    • 命令行模式
  • 无限制的撤销
  • 多个窗口和缓冲区
  • 平滑的插入模式
  • 根据所编辑的文件的类型使用不同的颜色或风格进行语法高亮
  • 交互命令

    • 标记一行
    • vi 行缓冲
    • 移动代码块
  • 块操作
  • 命令行历史
  • 扩展的正则表达式
  • 可编辑压缩/打包文件 (gzip, bzip2, zip, tar)
  • 文件名补全
  • 标记跳转
  • 折叠文本
  • 缩进
  • ctags和cscope整合
  • 100%与vi的模式兼容
  • 插件用于添加/扩展功能
  • vimscript, Vim的内部脚本
  • Unicode支持
  • 多语言支持
  • 在线帮助支持

  • 网址: www.vim.org
  • 开发者: Bram Moolenaar
  • 许可证: GNU GPL compatible (charityware)
  • 版本号: 7.4

ne

ne是一款全屏幕的开源文本编辑器。它像是一个比vi更容易学习的vi替代物,并且可以在POSIX-兼容的系统中便携使用。

ne对于新手来说易于使用,但也非常强大并有完全可配置的引导程序,并且在资源使用上十分节约。

功能包括:

  • 三种用户界面: 控制键,命令行、菜单;按键和菜单都可配置
  • 语法高亮
  • 对于UTF-8文件的完全支持,包括占据多列的字符(宽字符)
  • 文档,剪切块,显示的维度和文件/行号长度都有编号,并且仅受制于机器的整型字长
  • 简单的脚本语言,脚本可以用简单易理解的录制/播放的方式制作
  • 无限制的撤销/重做功能(可以通过命令禁用)
  • 基于被编辑的文件扩展名的自动个性化配置系统
  • 使用您文档中的词语做字典来进行自动前缀补全
  • 易用的文件存取功能
  • 扩展的正则表达式可用于查找和替换,类似emacs和vi
  • 非常紧凑的内存模型,在加载和修改大型文件时十分快速
  • 可编辑二进制文件

  • 网址: ne.di.unimi.it
  • 开发者: Sebastiano Vigna (original developer). Additional features added by Todd M. Lewis
  • 许可证: GNU GPL v3
  • 版本号: 2.5

Zile

Zile(Zile Is Lossy Emacs,Emacs精简版),它是一个小型的Emacs的克隆版。Zile是一个可定制的,自文档化,实时显示的编辑器,Zile被开发的尽可能像Emacs一样,每个Emacs用户都会对Zile感到亲切。

Zile以它极小的RAM用量,大约130KB,以及快速开始编辑而闻名。它是支持8比特字符集的,允许用于编写任何种类的文件。

功能包括:

  • 小型但快速、强大
  • 多个缓冲区,允许多级的撤销
  • 多窗口
  • 以最小的缓冲区完成补全
  • 自动填充 (自动换行)
  • Registers
  • 看起来像Emacs,键序列、功能和变量名都与Emacs相同
  • Killing
  • Yanking
  • 自动行末检测

  • 网址: www.gnu.org/software/zile
  • 开发者: Reuben Thomas, Sandro Sigala, David A. Capello
  • 许可证: GNU GPL v2
  • 版本号: 2.4.11

nano

nano是基于curses库的文本编辑器。它是Pico(Pine电子邮件客户端编辑器)的一个复刻版。

由于Pine套件的许可证问题诉讼案(Pine并未以开源许可证发布),并且也因为Pine缺少一些重要的功能,nano项目于1999年发起。

nano致力于赶上Pico的功能和其易用性,与此同时提供更多的功能,但不集成Pine/Pico的邮件客户端。

nano像Pico一样是以键盘为导向的设计,可以用控制键来控制。

功能包括:

  • 交互式的查找和替换
  • 彩色语法高亮
  • 转到行号和列号处
  • 自动缩进
  • 功能开关
  • 支持UTF-8
  • 混合型的文件类型自动转换
  • 逐字输入模式
  • 多个文件缓冲区
  • 平滑滚动
  • 括号匹配
  • 自定义引用字符串
  • 备份文件
  • 国际化支持
  • tab补全文件名

  • 网址: nano-editor.org
  • 开发者: Chris Allegretta, David Lawrence, Jordi Mallach, Adam Rogoyski, Robert Siemborski, Rocco Corsi, David Benbennick, Mike Frysinger
  • 许可证: GNU GPL v3
  • 版本号: 2.2.6

via: http://www.linuxlinks.com/article/20141011073917230/TextEditors.html

作者:Frazer Kline 译者:wwy-hust 校对:wxy

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

DNF即Dandified YUM,是基于RPM的Linux发行版的下一代软件包管理工具。它首先在Fedora 18中出现,并且在最近发行的Fedora 22中替代了YUM工具集

DNF致力于改善YUM的瓶颈,即性能、内存占用、依赖解决、速度和许多其他方面。DNF使用RPM、libsolv和hawkey库进行包管理。尽管它并未预装在CentOS和RHEL 7中,但您可以通过yum安装,并同时使用二者。

您也许想阅读更多关于DNF的信息:

最新的DNF稳定版本是2015年5月11日发布的1.0(在写这篇文章之前)。它(以及所有DNF之前版本)主要由Python编写,并以GPL v2许可证发布。

安装DNF

尽管Fedora 22官方已经过渡到了DNF,但DNF并不在RHEL/CentOS 7的默认仓库中。

为了在RHEL/CentOS系统中安装DNF,您需要首先安装和开启epel-release仓库。

# yum install epel-release
或
# yum install epel-release -y

尽管并不建议在使用yum时添上'-y'选项,因为最好还是看看什么将安装在您的系统中。但如果您对此并不在意,则您可以使用'-y'选项以自动化的安装而无需用户干预。

接下来,使用yum命令从epel-realease仓库安装DNF包。

# yum install dnf

在您装完dnf后,我会向您展示27个实用的dnf命令和例子,以便帮您更容易和高效的管理基于RPM包的发行版。

1. 检查DNF版本

检查您的系统上安装的DNF版本。

# dnf --version

检查DNF版本

2. 列出启用的DNF仓库

dnf命令中的'repolist'选项将显示您系统中所有启用的仓库。

# dnf repolist

检查所有开启的仓库

3. 列出所有启用和禁用的DNF仓库

'repolist all'选项将显示您系统中所有启用/禁用的仓库。

# dnf repolist all

列出所有启用/禁用的仓库

4. 用DNF列出所有可用的且已安装的软件包

'dnf list'命令将列出所有仓库中所有可用的软件包和您Linux系统中已安装的软件包。

# dnf list

用DNF列出所有的软件包

5. 用DNF列出所有已安装的软件包

尽管'dnf list'命令将列出所有仓库中所有可用的软件包和已安装的软件包。然而像下面一样使用'list installed'选项将只列出已安装的软件包。

# dnf list installed

列出已安装的软件包

6. 用DNF列出所有可用的软件包

类似的,可以用'list available'选项列出所有开启的仓库中所有可用的软件包。

# dnf list available

用DNF列出可用的软件包

7. 使用DNF查找软件包

如果您不太清楚您想安装的软件包的名字,这种情况下,您可以使用'search'选项来搜索匹配该字符(例如,nano)和字符串的软件包。

# dnf search nano

通过关键字搜索软件包

8. 查看哪个软件包提供了某个文件/子软件包?

dnf的选项'provides'能查找提供了某个文件/子软件包的软件包名。例如,如果您想找找哪个软件包提供了您系统中的'/bin/bash'文件,可以使用下面的命令

# dnf provides /bin/bash

查找提供文件的软件包

9. 使用DNF获得一个软件包的详细信息

如果您想在安装一个软件包前知道它的详细信息,您可以使用'info'来获得一个软件包的详细信息,例如:

# dnf info nano

用DNF查看软件信息

10. 使用DNF安装软件包

想安装一个叫nano的软件包,只需运行下面的命令,它会为nano自动的解决和安装所有的依赖。

# dnf install nano

用DNF安装软件

11. 使用DNF更新一个软件包

您可能只想更新一个特定的包(例如,systemd)并且保留系统内剩余软件包不变。

# dnf update systemd

更新一个软件包

12. 使用DNF检查系统更新

检查系统中安装的所有软件包的更新可以简单的使用如下命令:

# dnf check-update

检查系统更新

13. 使用DNF更新系统中所有的软件包

您可以使用下面的命令来更新整个系统中所有已安装的软件包。

# dnf update
或
# dnf upgrade

更新系统

14. 使用DNF来移除/删除一个软件包

您可以在dnf命令中使用'remove'或'erase'选项来移除任何不想要的软件包。

# dnf remove nano
或
# dnf erase nano

移除系统中的软件

15. 使用DNF移除于依赖无用的软件包(Orphan Packages)

这些为了满足依赖安装的软件包在相应的程序删除后便不再需要了。可以用过下面的命令来将它们删除。

# dnf autoremove

移除无用的依赖包

16. 使用DNF移除缓存的软件包

我们在使用dnf时经常会碰到过期的头部信息和不完整的事务,它们会导致错误。我们可以使用下面的语句清理缓存的软件包和包含远程包信息的头部信息。

# dnf clean all

移除DNF缓存

17. 获得特定DNF命令的帮助

您可能需要特定的DNF命令的帮助(例如,clean),可以通过下面的命令来得到:

# dnf help clean

获得某一命令帮助

18. 列出所有DNF的命令和选项

要显示所有dnf的命令和选项,只需要:

# dnf help

获得命令选项帮助

19. 查看DNF的历史记录

您可以调用'dnf history'来查看已经执行过的dnf命令的列表。这样您便可以知道什么被安装/移除及其时间戳。

# dnf history

查看历史记录

20. 显示所有软件包组

'dnf grouplist'命令可以显示所有可用的或已安装的软件包,如果没有什么输出,则它会列出所有已知的软件包组。

# dnf grouplist

列出所有软件包组

21. 使用DNF安装一个软件包组

要安装一组由许多软件打包在一起的软件包组(例如,Educational Softaware),只需要执行:

# dnf groupinstall 'Educational Software'

安装一个软件包组

22. 更新一个软件包组

可以通过下面的命令来更新一个软件包组(例如,Educational Software):

# dnf groupupdate 'Educational Software'

更新软件包组

23. 移除一个软件包组

可以使用下面的命令来移除一个软件包组(例如,Educational Software):

# dnf groupremove 'Educational Software'

移除软件包组

24. 从某个特定的仓库安装一个软件包

DNF可以从任何特定的仓库(比如 epel)安装一个软件包(例如,phpmyadmin):

# dnf --enablerepo=epel install phpmyadmin

从特定的仓库安装软件

25. 将已安装的软件包同步到稳定发行版

'dnf distro-sync'将同步所有已安装的软件包到所有开启的仓库中最近的稳定版本。如果没有选择软件包,则会同步所有已安装的软件包。

# dnf distro-sync

将包同步至稳定版

26. 重新安装一个软件包

'dnf reinstall nano'命令将重新安装一个已经安装的软件包(例如,nano):

# dnf reinstall nano

重新安装软件包

27. 降级一个软件包

选项'downgrade'将会使一个软件包(例如,acpid)回退到低版本。

# dnf downgrade acpid

示例输出

Using metadata from Wed May 20 12:44:59 2015
No match for available package: acpid-2.0.19-5.el7.x86_64
Error: Nothing to do.

我观察到:dnf不会按预想的那样降级一个软件包。这已做为一个bug被提交。

结论

DNF是YUM管理器的优秀替代品。它试着自动做许多甚至不推荐有经验的Linux系统管理员做的工作。例如:

  • --skip-broken不被DNF识别,并且DNF中没有其替代命令。
  • 尽管您可能会运行dnf provides,但再也没有'resolvedep'命令了。
  • 没有'deplist'命令用来发现软件包依赖。
  • 您排除一个仓库意味着在所有操作上排除该仓库,而在yum中,排除一个仓库只在安装和升级等时刻排除他们。

许多Linux用户对于Linux生态系统的走向不甚满意。首先Systemd替换了init系统v,现在DNF将于不久后替换YUM,首先是Fedora 22,接下来是RHEL和CentOS。

您怎么看呢?是不是发行版和整个Linux生态系统并不注重用户并且在朝着与用户愿望相悖的方向前进呢?IT行业里有这样一句话 - “如果没有坏,为什么要修呢?”,System V和YUM都没有坏。

上面便是这篇文章的全部了。请在下方留言以让我了解您的宝贵想法。点赞和分享以帮助我们传播。谢谢!


via: http://www.tecmint.com/dnf-commands-for-fedora-rpm-package-management/

作者:Avishek Kumar 译者:wwy-hust 校对:wxy

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

curl -s 'https://raw.githubusercontent.com/jlevy/the-art-of-command-line/master/README.md' | egrep -o '<code>\w+</code>' | tr -d '`' | cowsay -W50

流畅地使用命令行是一个常被忽略的技能,或被认为是神秘的奥义。但是,它会以明显而微妙的方式改善你作为工程师的灵活度和生产力。这是我在 Linux 上工作时发现的有用的命令行使用小窍门和笔记的精粹。有些小窍门是很基础的,而有些是相当地特别、复杂、或者晦涩难懂。这篇文章不长,但是如果你可以使用并记得这里的所有内容,那么你就懂得很多了。

其中大部分最初出现Quora上,但是考虑到兴趣所在,似乎更应该放到 Github 上,这里的人比我更能提出改进建议。如果你看到一个错误,或者更好的某种东西,请提交问题或 PR!(当然,提交前请看看必读小节和已有的 PR/Issue。)

必读

范围:

  • 本文是针对初学者和专业人员的,选题目标是覆盖面广(全都很重要)、有针对性(大多数情况下都给出具体实例)而简洁(避免不必要内容以及你能在其它地方轻松找到的离题的内容)。每个小窍门在某种情形下都很必需的,或者能比替代品大大节省时间。
  • 这是为 Linux 写的。绝大部分条目都可以同样应用到 MacOS(或者甚至 Cygwin)。
  • 主要针对交互式 Bash,尽管大多数小窍门也可以应用到其它 shell,以及常规 Bash 脚本。
  • 包括了“标准的”UNIX 命令以及那些需要安装的软件包(它们很重要,值得安装)。

注意:

  • 为了能在一篇文章内展示尽量多的东西,一些具体的信息会被放到引用页里。你可以使用 Google 来获得进一步的内容。(如果需要的话,)你可以使用 apt-get/yum/dnf/pacman/pip/brew 来安装这些新的程序。
  • 使用 Explainshell 来获取命令、参数、管道等内容的解释。

基础

  • 学习基本 Bash 技能。实际上,键入man bash,然后至少浏览一遍所有内容;它很容易理解,没那么长。其它 shell 也不错,但是 Bash 很强大,而且到处都可以找到(如果在你自己的笔记本上学习 zsh、fish 之类,会在很多情形下受到限制,比如使用现存的服务器时)。
  • 至少学好一种基于文本的编辑器。理想的一个是 Vim(vi),因为在终端中编辑时随时都能找到它(即使大多数时候你在使用 Emacs、一个大型的 IDE、或一个现代的时髦编辑器)。
  • 学习怎样使用 man 来阅读文档(好奇的话,用 man man 来列出分区号,比如 1 是常规命令,5 是文件描述,8 用于管理员)。用 apropos 找到帮助页。了解哪些命令不是可执行程序,而是 Bash 内置的,你可以用 helphelp -d 得到帮助。
  • 学习使用 >< 来进行输出和输入重定向,以及使用 | 来管道重定向,学习关于 stdout 和 stderr 的东西。
  • 学习 *(也许还有 ?{...} )文件通配扩展和应用,以及双引号 " 和单引号 ' 之间的区别。(更多内容请参看下面关于变量扩展部分)。
  • 熟悉 Bash 作业管理:&ctrl-zctrl-cjobsfgbgkill 等等。
  • 掌握ssh,以及通过 ssh-agentssh-add 等进行无密码验证的基础技能。
  • 基本的文件管理:lsls -l(特别是,知道ls -l各个列的意义),lessheadtailtail -f(或者更好的less +F),lnln -s(知道硬链接和软链接的区别,以及硬链接相对于软链接的优势),chownchmoddu(用于查看磁盘使用率的快速摘要:du -sk *)。文件系统管理:dfmountfdiskmkfslsblk
  • 基本的网络管理: ipifconfigdig
  • 熟知正则表达式,以及各种使用grep/egrep的选项。-i-o-A-B 选项值得掌握。
  • 学会使用 apt-getyumdnfpacman(这取决于你的发行版)来查找并安装软件包。确保你可以用 pip 来安装基于 Python 的命令行工具(下面的一些东西可以很容易地通过 pip 安装)。

日常使用

  • 在Bash中,使用 tab 补完参数,使用 ctrl-r 来搜索命令历史。
  • 在Bash中,使用 ctrl-w 来删除最后的单词,使用 ctrl-u 来删除整行,返回行首。使用 alt-balt-f 来逐词移动,使用 ctrl-k 来清除到行尾的内容,以及使用 ctrl-l 清屏。参见 man readline 来查看 Bash 中所有默认的键盘绑定,有很多。例如,alt-. 可以循环显示先前的参数,而alt- 扩展通配。(LCTT 译注:关于 Bash 下的快捷键,可以参阅: </article-5660-1.html> )
  • 另外,如果你喜欢 vi 风格的键盘绑定,可以使用 set -o vi
  • 要查看最近用过的命令,请使用 history 。 有许多缩写形式,比如 !$(上次的参数)和!!(上次的命令),虽然使用 ctrl-ralt-. 更容易些。(LCTT 译注:关于历史扩展功能,可以参阅: </article-5658-1.html> )
  • 返回先前的工作目录: cd -
  • 如果你命令输入到一半,但是改变主意了,可以敲 alt-# 来添加一个 # 到开头,然后将该命令作为注释输入(或者使用快捷键 ctrl-a#enter 输入)。然后,你可以在后面通过命令历史来回到该命令。
  • 使用 xargs(或 parallel),它很强大。注意,你可以控制每行(-L)执行多少个项目,以及并行执行(-P)。如果你不确定它是否会做正确的事情,可以首先使用 xargs echo。同时,使用 -I{} 也很方便。样例:
  find . -name '*.py' | xargs grep some_function
  cat hosts | xargs -I{} ssh root@{} hostname
  • pstree -p 对于显示进程树很有帮助。
  • 使用 pgreppkill 来按名称查找进程或给指定名称的进程发送信号(-f 很有帮助)。
  • 掌握各种可以发送给进程的信号。例如,要挂起进程,可以使用 kill -STOP [pid]。完整的列表可以查阅 man 7 signal
  • 如果你想要一个后台进程一直保持运行,使用 nohupdisown
  • 通过 netstat -lntpss -plat 检查哪些进程在监听(用于 TCP,对 UDP 使用 -u 替代 -t)。
  • lsof来查看打开的套接字和文件。
  • 在 Bash 脚本中,使用 set -x 调试脚本输出。尽可能使用严格模式。使用 set -e 在遇到错误时退出。也可以使用 set -o pipefail,对错误进行严格处理(虽然该话题有点微妙)。对于更复杂的脚本,也可以使用 trap
  • 在 Bash 脚本中,子 shell(写在括号中的)是组合命令的便利的方式。一个常见的例子是临时移动到一个不同的工作目录,如:
  # 在当前目录做些事
  (cd /some/other/dir; other-command)
  # 继续回到原目录
  • 注意,在 Bash 中有大量的各种各样的变量扩展。检查一个变量是否存在:${name:?error message}。例如,如果一个Bash脚本要求一个单一参数,只需写 input_file=${1:?usage: $0 input_file}。算术扩展:i=$(( (i + 1) % 5 ))。序列: {1..10}。修剪字符串:${var%suffix}${var#prefix}。例如,if var=foo.pdf ,那么 echo ${var%.pdf}.txt 会输出 foo.txt
  • 命令的输出可以通过 <(some command) 作为一个文件来处理。例如,将本地的 /etc/hosts 和远程的比较:
  diff /etc/hosts <(ssh somehost cat /etc/hosts)
  • 了解 Bash 中的“嵌入文档”,就像在 cat <<EOF ... 中。
  • 在 Bash 中,通过:some-command >logfile 2>&1 同时重定向标准输出和标准错误。通常,要确保某个命令不再为标准输入打开文件句柄,而是将它捆绑到你所在的终端,添加 </dev/null 是个不错的做法。
  • man ascii 可以得到一个不错的ASCII表,带有十六进制和十进制值两种格式。对于常规编码信息,man unicodeman utf-8man latin1 将很有帮助。
  • 使用 screentmux 来复用屏幕,这对于远程 ssh 会话尤为有用,使用它们来分离并重连到会话。另一个只用于保持会话的最小可选方案是 dtach
  • 在 ssh 中,知道如何使用 -L-D(偶尔也用-R)来打开端口通道是很有用的,如从一台远程服务器访问网站时。
  • 为你的 ssh 配置进行优化很有用;例如,这个 ~/.ssh/config 包含了可以避免在特定网络环境中连接被断掉的情况的设置、使用压缩(这对于通过低带宽连接使用 scp 很有用),以及使用一个本地控制文件来开启到同一台服务器的多通道:
  TCPKeepAlive=yes
  ServerAliveInterval=15
  ServerAliveCountMax=6
  Compression=yes
  ControlMaster auto
  ControlPath /tmp/%r@%h:%p
  ControlPersist yes
  • 其它一些与 ssh 相关的选项对会影响到安全,请小心开启,如各个子网或主机,或者在信任的网络中:StrictHostKeyChecking=noForwardAgent=yes
  • 要获得八进制格式的文件的权限,这对于系统配置很有用而用 ls 又没法查看,而且也很容易搞得一团糟,可以使用像这样的东西:
  stat -c '%A %a %n' /etc/timezone
  • 对于从另一个命令的输出结果中交互选择值,可以使用percol
  • 对于基于另一个命令(如git)输出的文件交互,可以使用fpp (路径选择器)。
  • 要为当前目录(及子目录)中的所有文件构建一个简单的 Web 服务器,让网络中的任何人都可以获取,可以使用: python -m SimpleHTTPServer 7777 (使用端口 7777 和 Python 2)。

处理文件和数据

  • 要在当前目录中按名称定位文件,find . -iname '*something*'(或者相类似的)。要按名称查找任何地方的文件,使用 locate something(但请记住,updatedb 可能还没有索引最近创建的文件)。
  • 对于源代码或数据文件进行的常规搜索(要比 grep -r 更高级),使用 ag
  • 要将 HTML 转成文本:lynx -dump -stdin
  • 对于 Markdown、HTML,以及各种类型的文档转换,可以试试 pandoc
  • 如果你必须处理 XML,xmlstarlet 虽然有点老旧,但是很好用。
  • 对于 JSON,使用jq
  • 对于 Excel 或 CSV 文件,csvkit 提供了 in2csvcsvcutcsvjoincsvgrep 等工具。
  • 对于亚马逊 S3 ,s3cmd 会很方便,而 s4cmd 则更快速。亚马逊的 aws 则是其它 AWS 相关任务的必备。
  • 掌握 sortuniq,包括 uniq 的 -u-d 选项——参见下面的单行程序。
  • 掌握 cutpastejoin,它们用于处理文本文件。很多人会使用 cut,但常常忘了 join
  • 了解 tee,它会将 stdin 同时复制到一个文件和 stdout,如 ls -al | tee file.txt
  • 知道 locale 会以微妙的方式对命令行工具产生大量的影响,包括排序的顺序(整理)以及性能。大多数安装好的 Linux 会设置 LANG 或其它 locale 环境变量为本地设置,比如像 US English。但是,你要明白,如果改变了本地环境,那么排序也将改变。而且 i18n 过程会让排序或其它命令的运行慢好多倍。在某些情形中(如像下面那样的设置操作或唯一性操作),你可以安全地整个忽略缓慢的 i18n 过程,然后使用传统的基于字节的排序顺序 export LC_ALL=C
  • 了解基本的改动数据的 awksed 技能。例如,计算某个文本文件第三列所有数字的和:awk '{ x += $3 } END { print x }'。这可能比 Python 的同等操作要快3倍,而且要短3倍。
  • 在一个或多个文件中,替换所有出现在特定地方的某个字符串:
  perl -pi.bak -e 's/old-string/new-string/g' my-files-*.txt
  • 要立即根据某个模式对大量文件重命名,使用 rename。对于复杂的重命名,repren 可以帮助你达成。
  # 恢复备份文件 foo.bak -> foo:
  rename 's/\.bak$//' *.bak
  # 完整的文件名、目录名 foo -> bar:
  repren --full --preserve-case --from foo --to bar .
  • 使用 shuf 来从某个文件中打乱或随机选择行。
  • 了解 sort 的选项。知道这些键是怎么工作的(-t-k)。特别是,注意你需要写-k1,1来只通过第一个字段排序;-k1意味着根据整行排序。
  • 稳定排序(sort -s)会很有用。例如,要首先按字段2排序,然后再按字段1排序,你可以使用 sort -k1,1 | sort -s -k2,2
  • 如果你曾经需要在 Bash 命令行中写一个水平制表符(如,用于 -t 参数的排序),按ctrl-v [Tab],或者写$'\t'(后面的更好,因为你可以复制/粘贴)。
  • 对源代码进行补丁的标准工具是 diffpatch。 用 diffstat 来统计 diff 情况。注意 diff -r 可以用于整个目录,所以可以用 diff -r tree1 tree2 | diffstat 来统计(两个目录的)差异。
  • 对于二进制文件,使用 hd 进行简单十六进制转储,以及 bvi 用于二进制编辑。
  • 还是用于二进制文件,strings(加上 grep 等)可以让你找出一点文本。
  • 对于二进制文件的差异(delta 压缩),可以使用 xdelta3
  • 要转换文本编码,试试 iconv 吧,或者对于更高级的用途使用 uconv;它支持一些高级的 Unicode 的东西。例如,这个命令可以转换为小写并移除所有重音符号(通过扩展和丢弃):
  uconv -f utf-8 -t utf-8 -x '::Any-Lower; ::Any-NFD; [:Nonspacing Mark:] >; ::Any-NFC; ' < input.txt > output.txt
  • 要将文件分割成几个部分,来看看 split(按大小分割)和 csplit(按格式分割)吧。
  • 使用 zlesszmorezcatzgrep 来操作压缩文件。

系统调试

  • 对于 Web 调试,curlcurl -I 很方便灵活,或者也可以使用它们的同行 wget,或者更现代的 httpie
  • 要了解磁盘、CPU、网络的状态,使用 iostatnetstattop(或更好的 htop)和(特别是)dstat。它们对于快速获知系统中发生的状况很好用。
  • 对于更深层次的系统总览,可以使用 glances。它会在一个终端窗口中为你呈现几个系统层次的统计数据,对于快速检查各个子系统很有帮助。
  • 要了解内存状态,可以运行 freevmstat,看懂它们的输出结果吧。特别是,要知道“cached”值是Linux内核为文件缓存所占有的内存,因此,要有效地统计“free”值。
  • Java 系统调试是一件截然不同的事,但是对于 Oracle 系统以及其它一些 JVM 而言,不过是一个简单的小把戏,你可以运行 kill -3 <pid>,然后一个完整的堆栈追踪和内存堆的摘要(包括常规的垃圾收集细节,这很有用)将被转储到stderr/logs。
  • 使用 mtr 作路由追踪更好,可以识别网络问题。
  • 对于查看磁盘满载的原因,ncdu 会比常规命令如 du -sh * 更节省时间。
  • 要查找占用带宽的套接字和进程,试试 iftopnethogs 吧。
  • (Apache附带的)ab工具对于临时应急检查网络服务器性能很有帮助。对于更复杂的负载测试,可以试试 siege
  • 对于更仔细的网络调试,可以用 wiresharktsharkngrep
  • 掌握 straceltrace。如果某个程序失败、挂起或崩溃,而你又不知道原因,或者如果你想要获得性能的大概信息,这些工具会很有帮助。注意,分析选项(-c)和使用 -p 关联运行进程。
  • 掌握 ldd 来查看共享库等。
  • 知道如何使用 gdb 来连接到一个运行着的进程并获取其堆栈追踪信息。
  • 使用 /proc。当调试当前的问题时,它有时候出奇地有帮助。样例:/proc/cpuinfo/proc/xxx/cwd/proc/xxx/exe/proc/xxx/fd//proc/xxx/smaps
  • 当调试过去某个东西为何出错时,sar 会非常有帮助。它显示了 CPU、内存、网络等的历史统计数据。
  • 对于更深层的系统和性能分析,看看 stap (SystemTap),perf) 和 sysdig 吧。
  • 确认是正在使用的 Linux 发行版版本(支持大多数发行版):lsb_release -a
  • 每当某个东西的行为异常时(可能是硬件或者驱动器问题),使用dmesg

单行程序

这是将命令连成一行的一些样例:

  • 有时候通过 sort/uniq 对文本文件做交集、并集和差集运算时,这个例子会相当有帮助。假定 ab 是已经进行了唯一性处理的文本文件。这会很快,而且可以处理任意大小的文件,总计可达数千兆字节。(Sort不受内存限制,不过如果 /tmp 放在一个很小的根分区的话,你可能需要使用 -T 选项。)也可参见上面关于LC_ALL的注解和 -u 选项(参见下面例子更清晰)。
sh cat a b | sort | uniq > c # c 是 a 和 b 的并集 
cat a b | sort | uniq -d > c # c 是 a 和 b 的交集 
cat a b b | sort | uniq -u > c # c 是 a 减去 b 的差集
  • 使用 grep . * 来可视化查看一个目录中的所有文件的所有内容,例如,对于放满配置文件的目录: /sys/proc/etc
  • 对某个文本文件的第三列中所有数据进行求和(该例子可能比同等功能的Python要快3倍,而且代码也少于其3倍):
  awk '{ x += $3 } END { print x }' myfile
  • 如果想要查看某个文件树的大小/日期,该例子就像一个递归ls -l,但是比ls -lR要更容易读懂:
  find . -type f -ls
  • 只要可以,请使用 xargsparallel。注意,你可以控制每行(-L)执行多少个项目,以及并行执行(-P)。如果你不确定它是否会做正确的事情,可以首先使用 xargs echo。同时,使用 -I{} 也很方便。样例:
  find . -name '*.py' | xargs grep some_function
  cat hosts | xargs -I{} ssh root@{} hostname
  • 比如说,你有一个文本文件,如 Web 服务器的日志,在某些行中出现了某个特定的值,如 URL 中出现的 acct_id 参数。如果你想要统计有多少个 acct_id 的请求:
cat access.log | egrep -o 'acct_id=[0-9]+' | cut -d= -f2 | sort | uniq -c | sort -rn
  • 运行该函数来获得来自本文的随机提示(解析Markdown并从中提取某个项目):
function taocl() {
    curl -s https://raw.githubusercontent.com/jlevy/the-art-of-command-line/master/README.md |
      pandoc -f markdown -t html |
      xmlstarlet fo --html --dropdtd |
      xmlstarlet sel -t -v "(html/body/ul/li[count(p)>0])[$RANDOM mod last()+1]" |
      xmlstarlet unesc | fmt -80
  }

晦涩难懂,但却有用

  • expr:实施算术或布林操作,或者求正则表达式的值
  • m4:简单的宏处理器
  • yes:大量打印一个字符串
  • cal:漂亮的日历
  • env:(以特定的环境变量设置)运行一个命令(脚本中很有用)
  • look:查找以某个字符串开头的英文单词(或文件中的行)
  • cutpaste 以及 join:数据处理
  • fmt:格式化文本段落
  • pr:格式化文本为页/列
  • fold:文本折行
  • column:格式化文本为列或表
  • expandunexpand:在制表符和空格间转换
  • nl:添加行号
  • seq:打印数字
  • bc:计算器
  • factor:分解质因子
  • gpg:加密并为文件签名
  • toe:terminfo 条目表
  • nc:网络调试和数据传输
  • socat:套接字中继和 tcp 端口转发(类似 netcat
  • slurm:网络流量可视化
  • dd:在文件或设备间移动数据
  • file:识别文件类型
  • tree:以树形显示目录及子目录;类似 ls,但是是递归的。
  • stat:文件信息
  • tac:逆序打印文件
  • shuf:从文件中随机选择行
  • comm:逐行对比分类排序的文件
  • hdbvi:转储或编辑二进制文件
  • strings:从二进制文件提取文本
  • tr:字符转译或处理
  • iconvuconv:文本编码转换
  • splitcsplit:分割文件
  • units:单位转换和计算;将每双周(fortnigh)一浪(浪,furlong,长度单位,约201米)转换为每瞬(blink)一缇(缇,twip,一种和屏幕无关的长度单位)(参见: /usr/share/units/definitions.units)(LCTT 译注:这都是神马单位啊!)
  • 7z:高比率文件压缩
  • ldd:动态库信息
  • nm:目标文件的符号
  • ab:Web 服务器基准测试
  • strace:系统调用调试
  • mtr:用于网络调试的更好的路由追踪软件
  • cssh:可视化并发 shell
  • rsync:通过 SSH 同步文件和文件夹
  • wiresharktshark:抓包和网络调试
  • ngrep:从网络层摘取信息
  • hostdig:DNS查询
  • lsof:处理文件描述符和套接字信息
  • dstat:有用的系统统计数据
  • glances:高级,多个子系统概览
  • iostat:CPU和磁盘使用率统计
  • htop:top的改进版
  • last:登录历史
  • w:谁登录进来了
  • id:用户/组身份信息
  • sar:历史系统统计数据
  • iftopnethogs:按套接口或进程的网络使用率
  • ss:套接口统计数据
  • dmesg:启动和系统错误信息
  • hdparm:SATA/ATA 磁盘操作/改善性能
  • lsb_release:Linux 发行版信息
  • lsblk:列出块设备,以树形展示你的磁盘和分区
  • lshw:硬件信息
  • fortuneddatesl:嗯,好吧,它取决于你是否认为蒸汽机车和 Zippy 引用“有用”

更多资源

免责声明

除了非常小的任务外,其它都写出了代码供大家阅读。伴随力量而来的是责任。事实是,你在Bash中做的,并不意味着是你所应该做的!;)


via: https://github.com/jlevy/the-art-of-command-line

作者:jlevy 译者:GOLinux 校对:wxy

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

由于一切都迁移到了云上,作为提高职员生产力的一种方式,虚拟远程桌面在工业中越来越流行。尤其对于那些需要在多个地方和设备之间不停漫游的人,远程桌面可以让他们和工作环境保持无缝连接。远程桌面对于雇主同样有吸引力,可以在工作环境中提高敏捷性和灵活性,由于硬件整合、桌面安全加固等原因降低 IT 花费。

在 Linux 世界中,理所当然设置远程桌面有很多选择,支持许多协议(例如 RDP、RFB、NX) 和服务器/客户端实现(例如 TigerVNC、RealVNC、FreeNX、x2go、X11vnc、TeamViewer 等等)。

这当中有个出色的产品叫做 X2Go,它是一个基于 NX(译者注:通过计算机网络显示远程桌面环境的一种技术,可参考 Wiki)的远程桌面服务器和客户端的开源(GPLv2)实现。在这个教程中,我会介绍 如何为 Linux VPS 使用 X2Go 设置远程桌面环境

X2Go 是什么?

X2Go 的历史要追溯到 NoMachine 的 NX 技术。NX 远程桌面协议的设计目的是通过利用主动压缩和缓存解决低带宽和高延迟的网络连接问题。后来,NX 转为闭源,但 NX 库还是采用 GPL 协议。这导致出现了多种基于 NX 的远程桌面解决方案开源实现,X2Go 就是其中之一。

和其它解决方案例如 VNC 相比,X2Go 有哪些好处呢? X2Go 继承了 NX 技术的所有高级功能,很自然能在慢速网络连接上良好工作。另外,由于它内置的基于 SSH 的加密技术,X2Go 保持了确保安全的良好业绩记录。不再需要手动设置 SSH 隧道 。X2Go 默认支持音频,这意味着远程桌面的音乐播放可以通过网络传送,并进入本地扬声器。在易用性方面,远程桌面上运行的应用程序可以在你的本地桌面中以一个独立窗口无缝呈现,会给你造成一种应用程序实际上在你本地桌面运行的错觉。正如你看到的,这些都是一些基于 VNC 的解决方案所缺少的强大功能

X2GO 的桌面环境兼容性

和其它远程桌面服务器一样,X2Go 服务器也有一些已知的兼容性问题。像 KDE 3/4、Xfce、MATE 和 LXDE 是对 X2Go 服务器最友好的桌面环境。但是,用其它桌面管理器效果可能有所不同。例如,已知 GNOME 3 之后的版本、KDE 5、Unity 和 X2Go 并不兼容。如果你的远程主机的桌面管理器和 X2Go 兼容,你可以继续以下的教程。

在 Linux 上安装 X2Go 服务器

X2Go 由远程桌面服务器和客户端组件组成。让我们首先安装 X2Go 服务器。我假设你已经有一个和 X2Go 兼容的桌面管理器并且在远程主机上运行,我们会安装 X2Go 服务器到该远程主机。

注意系统启动后 X2Go 服务器组件没有需要单独启动的服务。你只需要保证开启了 SSH 服务并在正常运行。

Ubuntu 或 Linux Mint:

配置 X2Go PPA 库。对于 Ubuntu 14.04 以及更高版本,有可用的 X2Go PPA。

$ sudo add-apt-repository ppa:x2go/stable
$ sudo apt-get update
$ sudo apt-get install x2goserver x2goserver-xsession

Debian (Wheezy):

$ sudo apt-key adv --recv-keys --keyserver keys.gnupg.net E1F958385BFE2B6E
$ sudo sh -c "echo deb http://packages.x2go.org/debian wheezy main > /etc/apt/sources.list.d/x2go.list"
$ sudo sh -c "echo deb-src http://packages.x2go.org/debian wheezy main >> /etc/apt/sources.list.d/x2go.list"
$ sudo apt-get update
$ sudo apt-get install x2goserver x2goserver-xsession

Fedora:

$ sudo yum install x2goserver x2goserver-xsession

CentOS/RHEL:

首先启用 EPEL 库 然后运行:

$ sudo yum install x2goserver x2goserver-xsession 

在 Linux 上安装 X2Go 客户端

在将会连接到远程桌面的本地主机上,安装以下命令安装 X2Go 客户端。

Ubuntu 或 Linux Mint:

配置 X2Go PPA 库。对于 Ubuntu 14.04 以及更高版本,有可用的 X2Go PPA。

$ sudo add-apt-repository ppa:x2go/stable
$ sudo apt-get update
$ sudo apt-get install x2goclient

Debian (Wheezy):

$ sudo apt-key adv --recv-keys --keyserver keys.gnupg.net E1F958385BFE2B6E
$ sudo sh -c "echo deb http://packages.x2go.org/debian wheezy main > /etc/apt/sources.list.d/x2go.list"
$ sudo sh -c "echo deb-src http://packages.x2go.org/debian wheezy main >> /etc/apt/sources.list.d/x2go.list"
$ sudo apt-get update
$ sudo apt-get install x2goclient

Fedora:

$ sudo yum install x2goclient

CentOS/RHEL:

首先启用 EPEL 库 ,然后运行:

$ sudo yum install x2goclient 

用 X2Go 客户端连接到远程桌面

现在可以连接到远程桌面了。在本地主机上,只需运行以下命令或者使用桌面启动器启动 X2Go 客户端。

$ x2goclient

输入远程主机的 IP 地址和 SSH 用户名称。同时,指定会话类型(例如,远程主机的桌面管理器)。

如果需要的话,你可以自定义其它东西(通过点击其它的标签),例如连接速度、压缩、屏幕分辨率等等。

当你初始化一个远程桌面连接的时候,会要求你登录。输入你的 SSH 登录名和密码。

成功登陆后,你会看到远程桌面屏幕。

如果你想测试 X2Go 的无缝窗口功能,选择 "Single application" 会话类型,然后指定远处主机上可执行文件的路径。在该例子中,我选择远程 KDE 主机上的 Dolphin 文件管理器。

你成功连接后,你会在本地桌面上看到一个远程应用窗口,而不是完整的远程桌面屏幕。

总结

在这篇教程中,我介绍了如何在 Linux VPS 实例上设置 X2Go 远程桌面。正如你所看到的,整个设置过程都非常简单(如果你使用一个合适的桌面环境的话)。尽管对于特定桌面仍有问题,X2Go 是一个安全、功能丰富、快速并且免费的远程桌面解决方案。

X2Go 的什么功能最吸引你?欢迎分享你的观点。


via: http://xmodulo.com/x2go-remote-desktop-linux.html

作者:Dan Nanni 译者:ictlyh 校对:wxy

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

一个新的Linux内核已经发布了 - 全世界为之心跳(我们想把它说的诗意一些)。

Linus Torvalds(除了他不会有谁了)在Linux邮件列表(当然不会在别的地方)中宣布,在大概两个月后迎来了第一个4.x系列的Linux内核的发布

像每次发布前那样,Linux 4.1带来了很多的改变。它们包括了硬件兼容性、电源管理、文件系统性能、以及你从没听说过的处理器的技术修复。

Linux 4.1 已经进入将在10月发布的 Ubuntu 15.10 。

Linux 4.1 有哪些新东西

Tux got mail

Tux 收到了邮件

这个标题只是说说而已,我们不是简单地将发布公告贴到这里。

我们会从(大量、冗长以及那些不明觉厉的的技术的)更改日志去挑选一些对桌面用户而言,不见得夸张但或许有用的亮点。

电源管理

你可以在Linux 4.1中找到的面向用户的一大特性是对 Intel 的 Cherry Trail 和 Bay Trai 芯片、Soc及Intel计算棒等设备的性能及能效的提升。

传闻建议是Linux 4.1给出了新的Intel硬件组合,和更长电池寿命。这么多的进步自然不可能针对所有芯片,它只对特定芯片和系统(和高端的)有用,但仍旧是一个令人兴奋的消息。

Linux 4.1 亮点包括:

  • ext4 有了文件系统层面的加密(感谢Google)
  • 罗技游戏手柄lg4ff驱动改进了‘力反馈’
  • 东芝笔记本驱动进行了USB睡眠充电和背光改进
  • Xbox One控制器支持Rumble
  • Wacom平板驱动改进了电源报告
  • 各种针对arm和x86设备电源管理改进
  • Samsung Exynos 3250 电源管理改进
  • 支持Bamboo平板
  • 联想OneLink Pro Dock获得USB支持
  • 支持Realtek 8723A、 8723B、 8761A、 8821 Wi-Fi网卡

Ubuntu中安装Linux 4.1

虽然这次发布的内核被标记为稳定,但是Ubuntu用户并不需要迫切地安装它。

但如果你等不及了并且技术足够熟练,你可以从Canonical的主干内核归档中下载合适的软件包来安装Linux 4.1(或者冒着风险使用第三方PPA)。

10月发布的Ubuntu 15.10 Wily Werewolf将会基于Ubuntu Kernel 4.1.x(Ubuntu内核是基于Linux内核加上Ubuntu没被上流接受的独有补丁)。


via: http://www.omgubuntu.co.uk/2015/06/linux-4-1-kernel-new-features

作者:Joey-Elijah Sneddon 译者:geekpi 校对:wxy

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