Merge branch 'master' of github.com:jlevy/the-art-of-command-line

This commit is contained in:
Dmytro Kovalov 2016-06-01 10:47:11 +09:00
commit 5e04f5e0c7
3 changed files with 12 additions and 11 deletions

View file

@ -80,7 +80,7 @@
- Используйте **ctrl-w** в Баше для того, чтобы удалить последнее слово в команде; **ctrl-u** для того, чтобы удалить команду полностью. Используйте **alt-b** и **alt-f** для того, чтобы бегать между словами команды, **ctrl-a** и **ctrl-e** для того, чтобы переместиться к началу и концу строки соответственно, **ctrl-k** для того, чтобы удалить часть команды от текущей позиции до конца строки, **ctrl-l** для того, чтобы очистить экран. Гляньте на `man readline` чтобы узнать о всех клавиатурных сочетаниях Баша. Их много! Например, **alt-.** бежит по предыдущим аргументам команды, а **alt-*** раскрывает глоб (globbing).
- Если Вам нравятся кравиатурных сочетаниях vim, сделайте `set -o vi``set -o emacs` чтобы вернуться обратно).
- Если Вам нравятся клавиатурные сочетания vim, сделайте `set -o vi``set -o emacs` чтобы вернуться обратно).
- Для редактирования длинных команд после установки другого редактора (например `export EDITOR=vim`), нажатие **ctrl-x** **ctrl-e** откроет текущую команду в редакторе для многострочного редактирования. Или, как в vi, **escape-v**.

View file

@ -346,7 +346,7 @@
## Інші джерела
- [awesome-shell](https://github.com/alebcay/awesome-shell): Розширює Shell.
- [awesome-osx-command-line](https://github.com/herrbischoff/awesome-osx-command-line): A more in-depth guide for the Mac OS command line.
- [awesome-osx-command-line](https://github.com/herrbischoff/awesome-osx-command-line): Поглиблений посібник до командного рядка OS X.
- [Strict mode](http://redsymbol.net/articles/unofficial-bash-strict-mode/) щоб краще писати Shell скрипти.
- [shellcheck](https://github.com/koalaman/shellcheck): A shell script static analysis tool. Essentially, lint for bash/sh/zsh.
- [Filenames and Pathnames in Shell](http://www.dwheeler.com/essays/filenames-in-shell.html): The sadly complex minutiae on how to handle filenames correctly in shell scripts.

View file

@ -29,28 +29,29 @@
[出现](http://www.quora.com/What-are-the-most-useful-Swiss-army-knife-one-liners-on-Unix)
于 [Quora](http://www.quora.com/What-are-some-time-saving-tips-that-every-Linux-user-should-know)
但已经迁移到了 Github并由众多高手做出了许多改进。
如果你在本文中发现了错误或者存在可以改善的地方,请[**贡献你的一份力**](/CONTRIBUTING.md)。
如果你在本文中发现了错误或者存在可以改善的地方,请[**贡献你的一份力**](/CONTRIBUTING.md)。
## 前言
涵盖范围:
- 这篇文章对刚接触命令行的新手以及具有命令行使用经验的人都有用处。本文致力于做到*覆盖面广*(尽量包括一切重要的内容),*具体*(给出最常见的具体的例子)以及*简洁*(避免不必要的,或是可以在其他地方轻松查到的细枝末节)。每个技巧在特定情境下或是基本的,或是能显著节约时间。
- 这篇文章对刚接触命令行的新手,以及具有命令行使用经验的人都有用处。本文致力于做到*覆盖面广*(尽量包括一切重要的内容),*具体*(给出最常见的具体的例子),以及*简洁*(避免不必要的,或是可以在其他地方轻松查到的细枝末节)。每个技巧在特定情境下或是基本的,或是能显著节约时间。
- 本文为 Linux 所写,除了[仅限 OS X 系统](#仅限-os-x-系统)和[仅限 Windows 系统](#仅限-windows-系统)的部分。其它节中的大部分内容都适用于其它 Unix 系统或 OS X甚至 Cygwin。
- 本文关注于交互式 Bash尽管很多技巧也适用于其他 shell 或 Bash 脚本。
- 本文包括了“标准的”Unix 命令和需要安装特定包的命令,只要它们足够重要。
注意事项:
- 为了能在一页内展示尽量多的东西,一些具体的信息会被间接的包含在引用页里。聪明机智的你如果掌握了使用 Google 搜索引擎的基本思路与命令,那么你将可以查阅到更多的详细信息。使用 `apt-get``yum``dnf``pacman``pip` 或 `brew`(以及其它合适的包管理器)来安装新程序。
- 为了能在一页内展示尽量多的东西,一些具体的信息会被间接地包含在引用页里。聪明机智的你,如果掌握了使用 Google 搜索引擎的基本思路与命令,那么你将可以查阅到更多的详细信息。使用 `apt-get``yum``dnf``pacman`
`pip``brew`(以及其它合适的包管理器)来安装新程序。
- 使用 [Explainshell](http://explainshell.com/) 去获取相关命令、参数、管道等内容的解释。
## 基础
- 学习 Bash 的基础知识。具体来说,输入 `man bash` 并至少全文浏览一遍; 它很简单并且不长。其他的 shell 可能很好用,但 Bash 功能强大几乎所有情况下都是可用的 *只*学习 zshfish 或其他的 shell 的话,在你自己的电脑上会显得很方便,但在很多情况下会限制你,比如当你需要在服务器上工作时)。
- 学习 Bash 的基础知识。具体来说,输入 `man bash` 并至少全文浏览一遍; 它很简单并且不长。其他的 shell 可能很好用,但 Bash 功能强大几乎所有情况下都是可用的 *只*学习 zshfish 或其他的 shell 的话,在你自己的电脑上会显得很方便,但在很多情况下会限制你,比如当你需要在服务器上工作时)。
- 学习并掌握至少一个基于文本的编辑器。通常 Vim `vi` 会是你最好的选择,因为在终端里进行随机编辑 Vim 真的毫无敌手,哪怕是 Emacs、某大型 IDE 甚至时下非常流行的编辑器。
- 学习并掌握至少一个基于文本的编辑器。通常 Vim `vi` 会是你最好的选择,因为在终端里进行随机编辑Vim 真的毫无敌手,哪怕是 Emacs、某大型 IDE 甚至时下非常流行的编辑器。
- 学会如何使用 `man` 命令去阅读文档。学会使用 `apropos` 去查找文档。了解有些命令并不对应可执行文件而是Bash内置的可以使用 `help``help -d` 命令获取帮助信息。
@ -86,11 +87,11 @@
- 键入 `history` 查看命令行历史记录。其中有许多缩写,例如 `!$`(最后键入的参数)和 `!!`(最后键入的命令),尽管通常被 **ctrl-r****alt-.** 取代。
- 要进入家目录可以用 `cd`。要访问你的家目录中的文件,可以使用前缀 `~`(例如 `~/.bashrc`)。在 `sh` 脚本里则用 `$HOME` 指代目录。
- 要进入 home 目录可以用 `cd`。要访问你的 home 目录中的文件,可以使用前缀 `~`(例如 `~/.bashrc`)。在 `sh` 脚本里则用 `$HOME` 指代 home 目录。
- 回到上一个工作路径:`cd -`
- 如果你输入命令的时候改变了主意,按下 **alt-#** 在行首添加 `#`,或者依次按下 **ctrl-a** **#** **enter**。这样做的话,之后你可以很方便的利用命令行历史回到你刚才输入到一半的命令。
- 如果你输入命令的时候改变了主意,按下 **alt-#** 在行首添加 `#`,或者依次按下 **ctrl-a** **#** **enter**。这样做的话,之后你可以很方便的利用命令行历史回到你刚才输入到一半的命令。
- 使用 `xargs` `parallel`)。他们非常给力。注意到你可以控制每行参数个数(`-L`)和最大并行数(`-P`)。如果你不确定它们是否会按你想的那样工作,先使用 `xargs echo` 查看一下。此外,使用 `-I{}` 会很方便。例如:
```bash
@ -123,7 +124,7 @@
- 当变量和文件名中包含空格的时候要格外小心。Bash 变量要用引号括起来,比如 `"FOO"`。尽量使用 `-0``-print0` 选项以便用空字符来分隔文件名,例如 `locate -0 pattern | xargs -0 ls -al``find / -print0 -type d | xargs -0 ls -al`。如果 for 循环中循环访问的文件名含有空格,只需用 `IFS=$'\n'` 把内部字段分隔符设为换行符。
- 在 Bash 脚本中,使用 `set -x` 去调试输出,尽可能使用严格模式,使用 `set -e` 令脚本在发生错误时退出而不是继续运行,使用 `set -u` 来检查是否使用了未赋值的变量,使用 `set -o pipefail` 严谨地对待错误(尽管问题可能很微妙)。当牵扯到很多脚本时,使用 `trap`。一个好的习惯是在脚本文件开头这样写,这会使它检测一些错误,并在错误发生时中断程序并输出信息:
- 在 Bash 脚本中,使用 `set -x` 去调试输出,尽可能使用严格模式,使用 `set -e` 令脚本在发生错误时退出而不是继续运行,使用 `set -u` 来检查是否使用了未赋值的变量,使用 `set -o pipefail` 严谨地对待错误(尽管问题可能很微妙)。当牵扯到很多脚本时,使用 `trap`。一个好的习惯是在脚本文件开头这样写,这会使它检测一些错误,并在错误发生时中断程序并输出信息:
```bash
set -euo pipefail
trap "echo 'error: Script failed: see failed command above'" ERR
@ -166,7 +167,7 @@
ControlPersist yes
```
- 部分其他的关于 ssh 的选项是安全敏感且应当小心启用。例如在可信任的网络中:`StrictHostKeyChecking=no``ForwardAgent=yes`
- 部分其他的关于 ssh 的选项是安全敏感的,而且应当小心启用。例如在可信任的网络中:`StrictHostKeyChecking=no``ForwardAgent=yes`
- 考虑使用 [`mosh`](https://mosh.mit.edu/) 作为 ssh 的替代品,它使用 UDP 协议。