Linux 命令行下的好东西

来自:简书,作者:jagttt
链接:http://www.jianshu.com/p/5ca890e5bdbf
为你列举一些可能没注意过的好用的 linux 命令行命令 。
现在做网站做移动应用最讲究的就是推广了,推广做的好那就成功了一大半,相对的没曝光产品再好也很难做下去 。就这个角度而言绝大多数 Linux 命令行的推广简直是烂透了 。繁多 Linux 有用极了的命令行工具就静静的躺在你发行版默认安装的包裹里,很多时候只有当你碰到什么问题的时候网上搜一圈才能知道 。更蛋疼的是这里面很多东西你一旦知道了就会想我靠原来没这个到底是怎么过的下去 。所以这里我会列出一些我用过的一些,大部分发行版默认就有,或者能用包裹管理工具轻松获取的东西 。
这篇文章仅讨论 Linux 环境下的东西,很显然对 macOS 也适用 。其实很多东西虽然有 windows 也可以找的到但配置比较麻烦,这里不再仔细讲 。很多东西像 Linux 老鸟看起来会觉得哈哈哈实在是太基础 。但是像 cd, ls, mkdir 这些太基础的写在这里又显得太业余,所以很多十分常用的命令这边我也跳过了 。像 git 这种重量级的工具,和 sed, awk 这些能单独出书的东西我觉得我也讲不清楚,所以这边都是功能简单的小东西 。不过这些小问题就算了吧...
 
如果你时间比较充裕...那么不如看看这本书吧: <<The Linux Command Line>> 。书的内容就跟标题一样,深入浅出的介绍了所谓 "Linux 命令行" 的方方面面,本文很多内容也是从书里看到的 。网站上有 PDF 合法免费下载,书写的很好可以很随意的看不会觉得压力太大 。最主要的,如果你是刚刚接触 Linux 那么这个说不定是最好的上手教程,我十分后悔原来不知道这么书 。这么说起来另外一本 Linux 入门大师级教程应该是鸟哥私房菜,这个实在是太出名以至于我觉得没什么可以说的 。
 
如果你没什么空的话那下面就以随机的顺序列出一些我觉得非常棒的命令行工具 。这里不详细介绍各种参数,你应该做的是用 man xxx 来查看文档 。如果这些程序在你的发行版里没有安装,那么请手动搜一下 。Mac 用户的话在 homebrew 里可以应该都能找到 。
tmux
虽然说顺序很随机但这一条一定得排在第一个 。很多人用 Linux 的状态都是自己的机器是 Windows,用 putty 连到一个哪里的 Linux 服务器进行工作 。这样的话每次断开的时候你运行的程序都是会被杀掉的 。你可能会希望退出的时候能把打开的程序保持在那里,下次用连接的时候又能自动到之前的工作状态 。tmux 就是这个问题的终极解决方案 。它们一方面的功能是能在一个 Terminal 里创建多个“窗口”,另一方面如果你关闭连接或者意外掉线,它们默认也不会关掉,下次连上去可以用 tmux attach 来恢复你之前的工作状态 。
如果你没听说过这个或者类似的 screen 的话,那你应该给我一点现金 。
tree
ls 可能是你最常用的命令之一 。tree 可以递归的列出目录下所有的文件,并以树状形式展现:
$ tree .├── b├── c│ └── d└── what对应的也有 pstree 可以以这样的方式来显示进程树 。
ack
我记得我曾经在面试的时候被问到过“请写如何调用 grep 来列出当前目录下所有文件里,含有某个字符串的行” 。这个问题我的回答是 “用 ack 就可以了” 。ack 的官网域名就叫 betterthangrep.com 。由于在当前目录下载所有文件里查找某个字串符是如此常见的一个操作,执行 ack foo 就可以在当前目录所有文件里查找 foo 。ack 默认会跳过很多没用的目录和文件,让查找更快,输出结果更准确 。另外像默认开启的彩色显示也让人用起来很舒畅 。
ack 目前大部分发行版中没有,如果你使用的是 Ubuntu 的话其包裹名字是 ack-grep,执行文件的名字也一样 。具体可以在这里查看文档 。
rsync
比如说你本地有一台电脑,远程有一台服务器 。你想把你的一个文件夹全部拷贝到另外一边的某个地方去 。你这个文件夹经常也要更新,希望通过某种方式把更新的部分能迅速同步过去 。这应该怎么做?不知道 rsync 的话你可能会想用 git,搭建一个 ftp,或者用 scp 或者别的 。但事实上 rsync 才是真正的为精确的解决这个问题而生的软件 。rsync 最棒的地方就是差量更新,也就是只把另外一边缺少的东西传过去,而且你不需要任何额外配置,速度快的飞起 。一个例子:
rsync -arvuzp --chmod=g+rx ./built/ me@example


推荐阅读