From b909256a2e73926dbcb4911c6d33a0e1a4cd85d4 Mon Sep 17 00:00:00 2001 From: Ryan Date: Thu, 8 Oct 2015 11:02:40 +0800 Subject: [PATCH 01/22] typo MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 会时 sort ==> 会使 sort --- README-zh.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README-zh.md b/README-zh.md index eb27bae..8194748 100644 --- a/README-zh.md +++ b/README-zh.md @@ -194,7 +194,7 @@ - 了解如何使用 `tee` 将标准输入复制到文件甚至标准输出,例如 `ls -al | tee file.txt`。 -- 了解语言环境对许多命令行工具的微妙影响,包括排序的顺序和性能。大多数 Linux 的安装过程会将 `LANG` 或其他有关的变量设置为符合本地的设置。意识到当你改变语言环境时,排序的结果可能会改变。明白国际化可能会时 sort 或其他命令运行效率下降*许多倍*。某些情况下(例如集合运算)你可以放心的使用 `export LC_ALL=C` 来忽略掉国际化并使用基于字节的顺序。 +- 了解语言环境对许多命令行工具的微妙影响,包括排序的顺序和性能。大多数 Linux 的安装过程会将 `LANG` 或其他有关的变量设置为符合本地的设置。意识到当你改变语言环境时,排序的结果可能会改变。明白国际化可能会使 sort 或其他命令运行效率下降*许多倍*。某些情况下(例如集合运算)你可以放心的使用 `export LC_ALL=C` 来忽略掉国际化并使用基于字节的顺序。 - 了解 `awk` 和 `sed` 关于数据的简单处理的用法。例如,将文本文件中第三列的所有数字求和:`awk '{ x += $3 } END { print x }'`. 这可能比同等作用的 Python 代码快三倍且代码量少三倍。 From 0260ae53160b1217c6eac57f42078004123946fe Mon Sep 17 00:00:00 2001 From: TAKAGI Masahiro Date: Fri, 9 Oct 2015 08:49:07 +0900 Subject: [PATCH 02/22] ja: Tweak the tone MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 「です・ます」->「だ・である」 --- README-ja.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/README-ja.md b/README-ja.md index 2e5a31f..f112d89 100644 --- a/README-ja.md +++ b/README-ja.md @@ -20,21 +20,21 @@ ![curl -s 'https://raw.githubusercontent.com/jlevy/the-art-of-command-line/master/README.md' | egrep -o '`\w+`' | tr -d '`' | cowsay -W50](https://raw.githubusercontent.com/jlevy/the-art-of-command-line/master/cowsay.png) -コマンドラインで流れるように操作ができるということは、軽く見られたり他人から理解されないスキルだとみなされることもあるでしょう。しかしそのスキルは、明らかにかすぐ分かるようかは問わず、エンジニアとしてのあなたの柔軟性や生産性を改善してくれるものです。ここでは、Linuxでコマンドラインを使う上で便利だと思ったメモやTipsの数々を挙げてみます。あるものは基礎的ですが、非常に詳しいもの、洗練されたもの、曖昧なものもあります。このページはそんなに長いものではないですが、ここに書いてあることの全てを使ったり思い出すことができれば、かなり詳しくなれるでしょう。 +コマンドラインで流れるように操作ができるということは、軽く見られたり他人から理解されないスキルだとみなされることもあるだろう。しかしそのスキルは、明らかにかすぐ分かるようかは問わず、エンジニアとしてのあなたの柔軟性や生産性を改善してくれるものだ。ここでは、Linuxでコマンドラインを使う上で便利だと思ったメモやTipsの数々を挙げてみる。あるものは基礎的だが、非常に詳しいもの、洗練されたもの、曖昧なものもある。このページはそんなに長いものではないが、ここに書いてあることの全てを使ったり思い出すことができれば、かなり詳しくなれるだろう。 -ここに書いてあることの多くは、[元々](http://www.quora.com/What-are-some-lesser-known-but-useful-Unix-commands)[Quora](http://www.quora.com/What-are-some-time-saving-tips-that-every-Linux-user-should-know)に[書かれて](http://www.quora.com/What-are-the-most-useful-Swiss-army-knife-one-liners-on-Unix)いたものが多いですが、私よりももっと優れた人たちがすぐに改善案を出すことができるGithubに置くのがよいのではと思ったのです(訳注 : 原文はGithub上にあります)。間違いやもっとこうした方がよいという点があれば、イシューを登録するかプルリクエストをください!(もちろん、メタ情報の項や既存のプルリクエスト、イシューをまず確認してください) +ここに書いてあることの多くは、[元々](http://www.quora.com/What-are-some-lesser-known-but-useful-Unix-commands)[Quora](http://www.quora.com/What-are-some-time-saving-tips-that-every-Linux-user-should-know)に[書かれて](http://www.quora.com/What-are-the-most-useful-Swiss-army-knife-one-liners-on-Unix)いたものが多いが、私よりももっと優れた人たちがすぐに改善案を出すことができるGithubに置くのがよいのではと思った(訳注 : 原文はGithub上にある)。間違いやもっとこうした方がよいという点があれば、イシューを登録するかプルリクエストを送ってほしい!(もちろん、メタ情報の項や既存のプルリクエスト、イシューをまず確認しよう) ## メタ情報 対象 : -- このガイドは、初心者向けでも経験者向きでもあります。幅広く(書いてあることは全て重要)、かつ明確で(多くのケースに対して具体的な例を付ける)、そして簡潔(他の場所で見つけられるような重要でないことや脱線したことは省く)であることをゴールにしています。各項目は、多くの場面において必須であるか、他の方法に比べて劇的に時間を節約してくれるでしょう。 -- Linux向けに書いています。多くはMacOS(あるいはCygwin)でも使えますが、全部ではありません。 -- インタラクティブなBashを使うことを想定していますが、多くの項目は他のシェルやBashのスクリプトでも使えるでしょう。 +- このガイドは、初心者向けでも経験者向きでもある。幅広く(書いてあることは全て重要)、かつ明確で(多くのケースに対して具体的な例を付ける)、そして簡潔(他の場所で見つけられるような重要でないことや脱線したことは省く)であることをゴールにしている。各項目は、多くの場面において必須であるか、他の方法に比べて劇的に時間を節約してくれるだろう。 +- Linux向けに書いている。多くはMacOS(あるいはCygwin)でも使えるが、全部ではない。 +- インタラクティブなBashを使うことを想定しているが、多くの項目は他のシェルやBashのスクリプトでも使えるだろう。 注意 : -- 1ページ内に収めるために、内容には暗黙的に書かれていることがあります。ここで取りかかりを知ったりコマンドが分かれば、詳細をどこかで調べたりするくらいはできるでしょう。新しいプログラムをインストールするには、`apt-get`/`yum`/`dnf`/`pacman`/`pip`/`brew`(どれか適したもの)を使いましょう。 +- 1ページ内に収めるために、内容には暗黙的に書かれていることがある。ここで取りかかりを知ったりコマンドが分かれば、詳細をどこかで調べたりするくらいはできるだろう。新しいプログラムをインストールするには、`apt-get`/`yum`/`dnf`/`pacman`/`pip`/`brew`(どれか適したもの)を使おう。 - コマンドやオプション、パイプを分解して理解する手助けに、[Explainshell](http://explainshell.com/)を使おう。 ## 基本 @@ -447,10 +447,10 @@ ## 免責事項 -ごく一部の例外はありますが、コードは誰でも読めるように書かれています。力には責任が伴います。Bashで*できる*からといって、そうすべき必要があるという意味ではありません! ;) +ごく一部の例外はありますが、コードは誰でも読めるように書かれている。力には責任が伴う。Bashで*できる*からといって、そうすべき必要があるという意味ではない! ;) ## ライセンス [![Creative Commons License](https://i.creativecommons.org/l/by-sa/4.0/88x31.png)](http://creativecommons.org/licenses/by-sa/4.0/) -このドキュメントは[Creative Commons Attribution-ShareAlike 4.0 International Licene](http://creativecommons.org/licenses/by-sa/4.0/)でライセンスされます。 +このドキュメントは[Creative Commons Attribution-ShareAlike 4.0 International Licene](http://creativecommons.org/licenses/by-sa/4.0/)でライセンスされる。 From 58444a7d606ef9a3f4b89d2ed73252749d6f3aa9 Mon Sep 17 00:00:00 2001 From: Thomas Lee Date: Sun, 8 Nov 2015 11:03:56 +0800 Subject: [PATCH 03/22] zh: Refine disclaimer. --- README-zh.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README-zh.md b/README-zh.md index 6be9d9a..9a1a6d1 100644 --- a/README-zh.md +++ b/README-zh.md @@ -493,7 +493,7 @@ ## 免责声明 -除去特别微小的任务,记录下这些代码以便他人查看。责任往往伴随着能力,*可以*做并不意味着应该做。 +除去特别微小的任务,编写代码是出于方便阅读的目的。能力往往伴随着责任。你 *可以* 在 Bash 中做一些事并不意味着你应该去做!;) ## 授权条款 From 406adb307761b541ecf259349cc221a3391163bd Mon Sep 17 00:00:00 2001 From: Thomas Lee Date: Sun, 8 Nov 2015 11:09:39 +0800 Subject: [PATCH 04/22] zh: Mention AUTHORS.md. --- README-zh.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README-zh.md b/README-zh.md index 9a1a6d1..6d3cff1 100644 --- a/README-zh.md +++ b/README-zh.md @@ -6,6 +6,7 @@ # 命令行的艺术 [![Join the chat at https://gitter.im/jlevy/the-art-of-command-line](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/jlevy/the-art-of-command-line?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) + - [必读](#必读) - [基础](#基础) - [日常使用](#日常使用) @@ -23,7 +24,7 @@ 熟练使用命令行是一种常常被忽视或被认为难以掌握的技能,但实际上,它可以提高你作为工程师的灵活性以及生产力。本文是一份我在 Linux 上工作时发现的一些关于命令行的使用的小技巧的摘要。有些小技巧是非常基础的,而另外一些则是相当复杂的甚至晦涩难懂的。这篇文章并不长,但当你能够熟练掌握这里列出的所有技巧时,你就学会了很多关于命令行的东西了。 -这里的大部分内容 +这篇文章是[许多作者和译者](AUTHORS.md)共同的成果。这里的大部分内容 [首次](http://www.quora.com/What-are-some-lesser-known-but-useful-Unix-commands) [出现](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 来做这件事是更佳的选择。如果你在本文中发现了错误或者存在可以改善的地方,请果断提交 Issue 或 Pull Request!(当然在提交前请看一下必读节和已有的 PR/issue)。 From 4dff08b5146b1f1c893efb603aa2e68265b74a0a Mon Sep 17 00:00:00 2001 From: Thomas Lee Date: Sun, 8 Nov 2015 11:22:44 +0800 Subject: [PATCH 05/22] zh: Refine "More resources" section --- README-zh.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/README-zh.md b/README-zh.md index 6d3cff1..4de5d19 100644 --- a/README-zh.md +++ b/README-zh.md @@ -487,9 +487,10 @@ ## 更多资源 - [awesome-shell](https://github.com/alebcay/awesome-shell):一份精心组织的命令行工具及资源的列表。 -- [Strict mode](http://redsymbol.net/articles/unofficial-bash-strict-mode/):为了编写更好的脚本文件。. -- [shellcheck](https://github.com/koalaman/shellcheck):一个 shell 脚本分析工具,基本上等同于 bash/sh/zsh 的 lint。 -- [Filenames and Pathnames in Shell](http://www.dwheeler.com/essays/filenames-in-shell.html):在 shell 脚本里正确处理文件名的好工具。 +- [awesome-osx-command-line](https://github.com/herrbischoff/awesome-osx-command-line):一份针对 Mac OS 命令行的更深入的指南。 +- [Strict mode](http://redsymbol.net/articles/unofficial-bash-strict-mode/):为了编写更好的脚本文件。 +- [shellcheck](https://github.com/koalaman/shellcheck):一个静态 shell 脚本分析工具,本质上是 bash/sh/zsh 的 lint。 +- [Filenames and Pathnames in Shell](http://www.dwheeler.com/essays/filenames-in-shell.html):有关如何在 shell 脚本里正确处理文件名的细枝末节。 ## 免责声明 From 7cefab0c54ab8d03bb06ef1c091a85d569f1c46b Mon Sep 17 00:00:00 2001 From: Thomas Lee Date: Sun, 8 Nov 2015 11:34:55 +0800 Subject: [PATCH 06/22] zh: Refine section "MacOS X only" --- README-zh.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README-zh.md b/README-zh.md index 4de5d19..0811931 100644 --- a/README-zh.md +++ b/README-zh.md @@ -475,7 +475,7 @@ - 用 `pbcopy` 复制任何命令的输出到桌面应用,用 `pbpaste` 粘贴输入。 -- 在终端中将 Option 键视为 alt 键,Preferences -> Profiles -> Keyboard 勾选上 "Use Option as Meta key"。 +- 若要在 Mac OS 终端中将 Option 键视为 alt 键(例如在上面介绍的 **alt-b**, **alt-f** 等命令中用到),打开 偏好设置 -> 描述文件 -> 键盘 并勾选“使用 Option 键作为 Meta 键”。 - 用 `open` 或者 `open -a /Applications/Whatever.app` 使用桌面应用打开文件。 @@ -483,6 +483,8 @@ - 注意 MacOS 系统是基于 BSD UNIX 的,许多命令(例如 `ps`,`ls`,`tail`,`awk`,`sed`)都和 Linux 中有些微的不同,这些极大的被 System V-style Unix 和 GNU 工具影响。你可以通过标题为 "BSD General Commands Manual" 的 man 页面发现这些不同。在有些情况下 GNU 版本的命令也可能被安装(例如 `gawk` 和 `gsed` 对应 GNU 中的 awk 和 sed )。如果要写跨平台的 Bash 脚本,避免使用这些命令(例如,考虑 Python 或者 `perl` )或者经过仔细的测试。 +- 用 `sw_vers` 获取 MacOS 的版本信息。 + ## 更多资源 From 517d5a5442253a9d9753c072ffca5ea4d1d85aca Mon Sep 17 00:00:00 2001 From: Thomas Lee Date: Sun, 8 Nov 2015 11:48:13 +0800 Subject: [PATCH 07/22] zh: Refine section "One-liners". --- README-zh.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/README-zh.md b/README-zh.md index 0811931..b9abad2 100644 --- a/README-zh.md +++ b/README-zh.md @@ -12,7 +12,7 @@ - [日常使用](#日常使用) - [文件及数据处理](#文件及数据处理) - [系统调试](#系统调试) -- [一行代码](#一行代码) +- [单行代码](#单行代码) - [冷门但有用](#冷门但有用) - [仅限 MacOS X 系统](#仅限-macos-x-系统) - [更多资源](#更多资源) @@ -187,7 +187,7 @@ - 关于 Amazon S3,[`s3cmd`](https://github.com/s3tools/s3cmd) 很方便而 [`s4cmd`](https://github.com/bloomreach/s4cmd) 更快。Amazon 官方的 [`aws`](https://github.com/aws/aws-cli) 以及 [`saws`](https://github.com/donnemartin/saws) 是其他 AWS 相关工作的基础。 -- 了解如何使用 `sort` 和 `uniq`,包括 uniq 的 `-u` 参数和 `-d` 参数,详见后文一行代码节。另外可以了解一下 `comm`。 +- 了解如何使用 `sort` 和 `uniq`,包括 uniq 的 `-u` 参数和 `-d` 参数,详见后文单行代码节。另外可以了解一下 `comm`。 - 了解如何使用 `cut`,`paste` 和 `join` 来更改文件。很多人都会使用 `cut`,但几乎都不会使用 `join`。 @@ -277,7 +277,7 @@ - 无论什么东西工作得很欢乐时试试 `dmesg`(可能是硬件或驱动问题)。 -## 一行代码 +## 单行代码 一些命令组合的例子: @@ -288,14 +288,14 @@ cat a b b | sort | uniq -u > c # c is set difference a - b ``` -- 使用 `grep . *` 来阅读检查目录下所有文件的内容,例如检查一个充满配置文件的目录比如 `/sys`、`/proc`、`/etc`。 +- 使用 `grep . *`(每行都会附上文件名)或者 `head -100 *`(每个文件有一个标题)来阅读检查目录下所有文件的内容。这在检查一个充满配置文件的目录(如 `/sys`、`/proc`、`/etc`)时特别好用。 - 计算文本文件第三列中所有数的和(可能比同等作用的 Python 代码快三倍且代码量少三倍): ```sh awk '{ x += $3 } END { print x }' myfile ``` -- 如果你想在文件树上查看大小\日期,这可能看起来像递归版的 `ls -l` 但比 `ls -lR` 更易于理解: +- 如果你想在文件树上查看大小/日期,这可能看起来像递归版的 `ls -l` 但比 `ls -lR` 更易于理解: ```sh find . -type f -ls ``` From 104e56119e2ea10460d2b9235343be0babe79478 Mon Sep 17 00:00:00 2001 From: Thomas Lee Date: Sun, 8 Nov 2015 12:32:31 +0800 Subject: [PATCH 08/22] zh: Refine & sync section "Processing files and data". --- README-zh.md | 25 ++++++++++++++++++------- 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/README-zh.md b/README-zh.md index b9abad2..963bea7 100644 --- a/README-zh.md +++ b/README-zh.md @@ -175,7 +175,7 @@ - 使用 [`ag`](https://github.com/ggreer/the_silver_searcher) 在源代码或数据文件里检索(比 `grep -r` 更好)。 -- 将HTML转为文本:`lynx -dump -stdin` +- 将 HTML 转为文本:`lynx -dump -stdin` - Markdown,HTML,以及所有文档格式之间的转换,试试 [`pandoc`](http://pandoc.org/)。 @@ -183,6 +183,8 @@ - 使用 [`jq`](http://stedolan.github.io/jq/) 处理 JSON。 +- 使用 [`shyaml`](https://github.com/0k/shyaml) 处理 YAML。 + - Excel 或 CSV 文件的处理,[csvkit](https://github.com/onyxfish/csvkit) 提供了 `in2csv`,`csvcut`,`csvjoin`,`csvgrep` 等工具。 - 关于 Amazon S3,[`s3cmd`](https://github.com/s3tools/s3cmd) 很方便而 [`s4cmd`](https://github.com/bloomreach/s4cmd) 更快。Amazon 官方的 [`aws`](https://github.com/aws/aws-cli) 以及 [`saws`](https://github.com/donnemartin/saws) 是其他 AWS 相关工作的基础。 @@ -204,12 +206,19 @@ perl -pi.bak -e 's/old-string/new-string/g' my-files-*.txt ``` -- 依据某种模式批量重命名多个文件,使用 `rename`。对于复杂的重命名规则,[`repren`](https://github.com/jlevy/repren) 或许有帮助。 +- 使用 [`repren`](https://github.com/jlevy/repren) 来批量重命名,或是在多个文件中搜索替换。(有些时候 `rename` 命令也可以批量重命名,但要注意,它在不同 Linux 发行版中的功能并不完全一样。) ```sh - # Recover backup files foo.bak -> foo: - rename 's/\.bak$//' *.bak - # Full rename of filenames,directories,and contents foo -> bar: + # Full rename of filenames, directories, and contents foo -> bar: repren --full --preserve-case --from foo --to bar . + # Recover backup files whatever.bak -> whatever: + repren --renames --from '(.*)\.bak' --to '\1' *.bak + # Same as above, using rename, if available: + rename 's/\.bak$//' *.bak +``` + +- 根据 man 页面的描述,`rsync` 真的是一个快速且非常灵活的文件复制工具。它通常被用于机器间的同步,但在本地也同样有用。它同时也是删除大量文件的[最快方法](https://web.archive.org/web/20130929001850/http://linuxnote.net/jianingy/en/linux/a-fast-way-to-remove-huge-number-of-files.html)之一: +```sh +mkdir empty && rsync -r --delete empty/ some-dir && rmdir some-dir ``` - 使用 `shuf` 从一个文件中随机选取多行。 @@ -222,7 +231,7 @@ - 对于二进制文件,使用 `hd` 使其以十六进制显示以及使用 `bvi` 来编辑二进制。 -- 同样对于二进制文件,使用 `strings`(包括 `grep` 等等)允许你查找一些文本。 +- 同样对于二进制文件,`strings`(包括 `grep` 等等)允许你查找一些文本。 - 二进制文件对比(Delta 压缩),使用 `xdelta3`。 @@ -233,7 +242,9 @@ - 拆分文件,查看 `split`(按大小拆分)和 `csplit`(按模式拆分)。 -- 使用 `zless`,`zmore`,`zcat` 和 `zgrep`对压缩过的文件进行操作。 +- 用 [`dateutils`](http://www.fresse.org/dateutils/) 中的 `dateadd`, `datediff`, `strptime` 等工具操作日期和时间表达式。 + +- 使用 `zless`,`zmore`,`zcat` 和 `zgrep` 对压缩过的文件进行操作。 ## 系统调试 From 2d70262edc5dbb9919b70039e10dd2907de480e2 Mon Sep 17 00:00:00 2001 From: Thomas Lee Date: Sun, 8 Nov 2015 12:58:37 +0800 Subject: [PATCH 09/22] zh: Refine section "Everyday use" --- README-zh.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/README-zh.md b/README-zh.md index 963bea7..06f09cd 100644 --- a/README-zh.md +++ b/README-zh.md @@ -72,7 +72,7 @@ ## 日常使用 -- 在 Bash 中,可以使用 **Tab** 自动补全参数,使用 **ctrl-r** 搜索命令行历史。 +- 在 Bash 中,可以使用 **Tab** 自动补全参数,使用 **ctrl-r** 搜索命令行历史(在按下之后,键入便可以搜索,重复按下 **ctrl-r** 会在更多匹配中循环,按下 **Enter** 会执行找到的命令,按下右方向键会将结果放入当前行中,使你可以进行编辑)。 - 在 Bash 中,可以使用 **ctrl-w** 删除你键入的最后一个单词,使用 **ctrl-u** 删除整行,使用 **alt-b** 和 **alt-f** 以单词为单位移动光标,使用 **ctrl-a** 将光标移至行首,使用 **ctrl-e** 将光标移至行尾,使用 **ctrl-k** 删除光标至行尾的所有内容,使用 **ctrl-l** 清屏。键入 `man readline` 查看 Bash 中的默认快捷键,内容很多。例如 **alt-.** 循环地移向前一个参数,以及 **alt-*** 展开通配符。 @@ -106,7 +106,7 @@ - 使用 `uptime` 或 `w` 来查看系统已经运行多长时间。 -- 使用`alias`来创建常用命令的快捷形式。例如:`alias ll='ls -latr'`使你可以方便地执行`ls -latr`命令。 +- 使用 `alias` 来创建常用命令的快捷形式。例如:`alias ll='ls -latr'` 使你可以方便地执行`ls -latr`命令。 - 在 Bash 脚本中,使用 `set -x` 去调试输出,尽可能的使用严格模式,使用 `set -e` 令脚本在发生错误时退出而不是继续运行,使用 `set -u` 来检查是否使用了未赋值的变量,使用 `set -o pipefail` 严谨地对待错误(尽管问题可能很微妙)。当牵扯到很多脚本时,使用 `trap`。一个好的习惯是在脚本文件开头这样写,这会使它检测一些错误,并在错误发生时中断程序并输出信息: ```bash @@ -114,16 +114,16 @@ trap "echo 'error: Script failed: see failed command above'" ERR ``` -- 在 Bash 脚本中,子 shell(使用括号`(...)`)是一种便捷的方式去组织参数。一个常见的例子是临时地移动工作路径,代码如下: +- 在 Bash 脚本中,子 shell(使用括号 `(...)`)是一种组织参数的便捷方式。一个常见的例子是临时地移动工作路径,代码如下: ```bash # do something in current dir (cd /some/other/dir && other-command) # continue in original dir ``` -- 在 Bash 中,注意到其中有许多形式的扩展。检查变量是否存在:`${name:?error message}`。例如,当 Bash 脚本需要一个参数时,可以使用这样的代码 `input_file=${1:?usage: $0 input_file}`。数学表达式:`i=$(( (i + 1) % 5 ))`。序列:`{1..10}`。 截断字符串:`${var%suffix}` 和 `${var#prefix}`。例如,假设 `var=foo.pdf`,那么 `echo ${var%.pdf}.txt` 将输出 `foo.txt`。 +- 在 Bash 中,要注意其中有许多形式的扩展。检查变量是否存在:`${name:?error message}`。例如,当 Bash 脚本需要一个参数时,可以使用这样的代码 `input_file=${1:?usage: $0 input_file}`。数学表达式:`i=$(( (i + 1) % 5 ))`。序列:`{1..10}`。截断字符串:`${var%suffix}` 和 `${var#prefix}`。例如,假设 `var=foo.pdf`,那么 `echo ${var%.pdf}.txt` 将输出 `foo.txt`。 -- 使用括号扩展(`{`...`}`)可以减少不必要的重复输入相似文本以及文本组合。 +- 使用括号扩展(`{`...`}`)来减少输入相似文本,并自动化文本组合。这在某些情况下会很有用,例如 `mv foo.{txt,pdf} some-dir`(同时移动两个文件),`cp somefile{,.bak}`(会被扩展成 `cp somefile somefile.bak`)或者 `mkdir -p test-{a,b,c}/subtest-{1,2,3}`(会被扩展成所有可能的组合,并创建一个目录树)。 - 通过使用 `<(some command)` 可以将输出视为文件。例如,对比本地文件 `/etc/hosts` 和一个远程文件: ```sh From efe70e30b045e1ec2c50475ff1530726adc29c25 Mon Sep 17 00:00:00 2001 From: Thomas Lee Date: Sun, 8 Nov 2015 13:08:34 +0800 Subject: [PATCH 10/22] zh: Refine Meta --- README-zh.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README-zh.md b/README-zh.md index 06f09cd..16ac4ee 100644 --- a/README-zh.md +++ b/README-zh.md @@ -34,7 +34,7 @@ 涵盖范围: -- 这篇文章对刚接触命令行的新手以及具有命令行使用经验的人都有用处。本文致力于做到覆盖面广(尽量包括一切重要的内容),具体(给出最常见的具体的例子)以及简洁(避免一些不必要的东西以及一些偏题的可以在其他地方翻阅到文献的东西)。 每个小技巧在某个特定情境下都是基本的或能够显著地节约时间。 +- 这篇文章对刚接触命令行的新手以及具有命令行使用经验的人都有用处。本文致力于做到*覆盖面广*(尽量包括一切重要的内容),*具体*(给出最常见的具体的例子)以及*简洁*(避免不必要的,或是可以在其他地方轻松查到的细枝末节)。每个小技巧在特定情境下或是基本的,或是能显著节约时间。 - 本文为 Linux 所写,除了[仅限 MacOS X 系统](#仅限-macos-x-系统)节。其它节中的大部分内容都适用于其它 Unix 系统或 MacOS 系统,甚至 Cygwin。 - 本文关注于交互式 Bash,尽管很多技巧也适用于其他 shell 或 Bash 脚本。 - 本文包括了“标准的”Unix 命令和需要安装特定包的命令,只要它们足够重要。 From c2cf2b2a83d158c162dd26cf14941015c154bfe4 Mon Sep 17 00:00:00 2001 From: Thomas Lee Date: Sun, 8 Nov 2015 13:14:27 +0800 Subject: [PATCH 11/22] zh: Refine the first paragraph. --- README-zh.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README-zh.md b/README-zh.md index 16ac4ee..7c955e9 100644 --- a/README-zh.md +++ b/README-zh.md @@ -22,7 +22,7 @@ ![curl -s 'https://raw.githubusercontent.com/jlevy/the-art-of-command-line/master/README.md' | egrep -o '`\w+`' | tr -d '`' | cowsay -W50](cowsay.png) -熟练使用命令行是一种常常被忽视或被认为难以掌握的技能,但实际上,它可以提高你作为工程师的灵活性以及生产力。本文是一份我在 Linux 上工作时发现的一些关于命令行的使用的小技巧的摘要。有些小技巧是非常基础的,而另外一些则是相当复杂的甚至晦涩难懂的。这篇文章并不长,但当你能够熟练掌握这里列出的所有技巧时,你就学会了很多关于命令行的东西了。 +熟练使用命令行是一种常常被忽视,或被认为难以掌握的技能,但实际上,它会提高你作为工程师的灵活性以及生产力。本文是一份我在 Linux 上工作时,发现的一些命令行使用技巧的摘要。有些技巧非常基础,而另一些则相当复杂,甚至晦涩难懂。这篇文章并不长,但当你能够熟练掌握这里列出的所有技巧时,你就学会了很多关于命令行的东西了。 这篇文章是[许多作者和译者](AUTHORS.md)共同的成果。这里的大部分内容 [首次](http://www.quora.com/What-are-some-lesser-known-but-useful-Unix-commands) From cd02db97753913e806f0ee1232d0674d0b75206e Mon Sep 17 00:00:00 2001 From: Thomas Lee Date: Sun, 8 Nov 2015 13:16:09 +0800 Subject: [PATCH 12/22] zh: Adjust the Chinese word used for 'tips'. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 小技巧 => 技巧 --- README-zh.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README-zh.md b/README-zh.md index 7c955e9..958bb67 100644 --- a/README-zh.md +++ b/README-zh.md @@ -34,7 +34,7 @@ 涵盖范围: -- 这篇文章对刚接触命令行的新手以及具有命令行使用经验的人都有用处。本文致力于做到*覆盖面广*(尽量包括一切重要的内容),*具体*(给出最常见的具体的例子)以及*简洁*(避免不必要的,或是可以在其他地方轻松查到的细枝末节)。每个小技巧在特定情境下或是基本的,或是能显著节约时间。 +- 这篇文章对刚接触命令行的新手以及具有命令行使用经验的人都有用处。本文致力于做到*覆盖面广*(尽量包括一切重要的内容),*具体*(给出最常见的具体的例子)以及*简洁*(避免不必要的,或是可以在其他地方轻松查到的细枝末节)。每个技巧在特定情境下或是基本的,或是能显著节约时间。 - 本文为 Linux 所写,除了[仅限 MacOS X 系统](#仅限-macos-x-系统)节。其它节中的大部分内容都适用于其它 Unix 系统或 MacOS 系统,甚至 Cygwin。 - 本文关注于交互式 Bash,尽管很多技巧也适用于其他 shell 或 Bash 脚本。 - 本文包括了“标准的”Unix 命令和需要安装特定包的命令,只要它们足够重要。 @@ -259,7 +259,7 @@ mkdir empty && rsync -r --delete empty/ some-dir && rmdir some-dir - 若要了解内存状态,运行并理解 `free` 和 `vmstat` 的输出。尤其注意“cached”的值,它指的是 Linux 内核用来作为文件缓存的内存大小,因此它与空闲内存无关。 -- Java 系统调试则是一件截然不同的事,一个可以用于 Oracle 的 JVM 或其他 JVM 上的调试的小技巧是你可以运行 `kill -3 ` 同时一个完整的栈轨迹和堆概述(包括 GC 的细节)会被保存到标准输出/日志文件。JDK 中的 `jps`,`jstat`,`jstack`,`jmap` 很有用。[SJK tools](https://github.com/aragozin/jvm-tools) 更高级. +- Java 系统调试则是一件截然不同的事,一个可以用于 Oracle 的 JVM 或其他 JVM 上的调试的技巧是你可以运行 `kill -3 ` 同时一个完整的栈轨迹和堆概述(包括 GC 的细节)会被保存到标准输出/日志文件。JDK 中的 `jps`,`jstat`,`jstack`,`jmap` 很有用。[SJK tools](https://github.com/aragozin/jvm-tools) 更高级. - 使用 `mtr` 去跟踪路由,用于确定网络问题。 @@ -316,7 +316,7 @@ mkdir empty && rsync -r --delete empty/ some-dir && rmdir some-dir cat access.log | egrep -o 'acct_id=[0-9]+' | cut -d= -f2 | sort | uniq -c | sort -rn ``` -- 运行这个函数从这篇文档中随机获取一条小技巧(解析 Markdown 文件并抽取项目): +- 运行这个函数从这篇文档中随机获取一条技巧(解析 Markdown 文件并抽取项目): ```sh function taocl() { curl -s https://raw.githubusercontent.com/jlevy/the-art-of-command-line/master/README.md | From de8a9f17712cd1886fbb27ca0fc66119be82a0af Mon Sep 17 00:00:00 2001 From: Thomas Lee Date: Sun, 8 Nov 2015 13:17:30 +0800 Subject: [PATCH 13/22] en: Add a missing period --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index f160541..46772dd 100644 --- a/README.md +++ b/README.md @@ -507,7 +507,7 @@ These are items relevant *only* on MacOS. ## More resources - [awesome-shell](https://github.com/alebcay/awesome-shell): A curated list of shell tools and resources. -- [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): A more in-depth guide for the Mac OS command line. - [Strict mode](http://redsymbol.net/articles/unofficial-bash-strict-mode/) for writing better shell scripts. - [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. From e7125f43f650e2151ccff53217a6982ee2d95216 Mon Sep 17 00:00:00 2001 From: Cheong Yiufung Date: Tue, 17 Nov 2015 21:05:14 +0800 Subject: [PATCH 14/22] Fix error in du command. --- README-zh.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README-zh.md b/README-zh.md index 6be9d9a..f677b52 100644 --- a/README-zh.md +++ b/README-zh.md @@ -60,7 +60,7 @@ - 了解 `ssh`,以及学会通过使用 `ssh-agent`,`ssh-add` 等命令来实现基本的无密码认证。 -- 学会基本的文件管理:`ls` 和 `ls -l` (了解 `ls -l` 中每一列代表的意义),`less`,`head`,`tail` 和 `tail -f` (甚至 `less +F`),`ln` 和 `ln -s` (了解硬链接与软链接的区别),`chown`,`chmod`,`du` (硬盘使用情况概述:`du -hk *`)。 关于文件系统的管理,学习 `df`,`mount`,`fdisk`,`mkfs`,`lsblk`。知道 inode 是什么(与 `ls -i` 和 `df -i` 等命令相关)。 +- 学会基本的文件管理:`ls` 和 `ls -l` (了解 `ls -l` 中每一列代表的意义),`less`,`head`,`tail` 和 `tail -f` (甚至 `less +F`),`ln` 和 `ln -s` (了解硬链接与软链接的区别),`chown`,`chmod`,`du` (硬盘使用情况概述:`du -hs *`)。 关于文件系统的管理,学习 `df`,`mount`,`fdisk`,`mkfs`,`lsblk`。知道 inode 是什么(与 `ls -i` 和 `df -i` 等命令相关)。 - 学习基本的网络管理:`ip` 或 `ifconfig`,`dig`。 From 992df209aafe3426ae6b62587ed7f15964af42eb Mon Sep 17 00:00:00 2001 From: francescomalatesta Date: Fri, 27 Nov 2015 19:39:49 +0100 Subject: [PATCH 15/22] Italian translation here! --- README-it.md | 538 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 538 insertions(+) create mode 100644 README-it.md diff --git a/README-it.md b/README-it.md new file mode 100644 index 0000000..35c2c29 --- /dev/null +++ b/README-it.md @@ -0,0 +1,538 @@ +[ Traduzioni: [English](README.md), [Español](README-es.md), [日本語](README-ja.md), [한국어](README-ko.md), [Português](README-pt.md), [Русский](README-ru.md), [Slovenščina](README-sl.md), [Українська](README-uk.md), [中文](README-zh.md) ] + + +# The Art of Command Line (Traduzione Italiana) + +[![Join the chat at https://gitter.im/jlevy/the-art-of-command-line](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/jlevy/the-art-of-command-line?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) + +- [Meta](#meta) +- [Le Basi](#le-basi) +- [Uso quotidiano](#uso-quotidiano) +- [Processare file e dati](#processare-file-e-dati) +- [Debug sistema](#debug-sistema) +- [One-liner](#one-liner) +- [Oscuri ma utili](#oscuri-ma-utili) +- [MacOS X](#macos-x) +- [Ulteriori risorse](#ulteriori-risorse) +- [Disclaimer](#disclaimer) + + +![curl -s 'https://raw.githubusercontent.com/jlevy/the-art-of-command-line/master/README.md' | egrep -o '`\w+`' | tr -d '`' | cowsay -W50](cowsay.png) + +Saper usare con una certa facilità la linea di comando è spesso visto come una sorta di "sapere arcano". Anche se può sembrare, in realtà non è decisamente così: può migliorare la tua produttività e la tua flessibilità in modi che neanche immagini. Questa che stai per leggere è una selezione di trucchi e di consigli che riguardano la linea di comando, che abbiamo trovato utili lavorando con Linux. Alcune di queste nozioni sono elementari, altre molto specifiche, se non sofisticate e, a volte, oscure. + +Non c'è da preoccuparsi, comunque: la pagina che stai scorrendo non è molto lunga e non ti ruberà molto tempo. Prenderci dimestichezza, saperla usare quando necessario, te ne renderà ancora di più. + +Questo lavoro è il risultato degli sforzi di [svariati autori e traduttori](AUTHORS.md). + +Una buona parte di ciò che leggi è [apparsa](http://www.quora.com/What-are-some-lesser-known-but-useful-Unix-commands), [originariamente](http://www.quora.com/What-are-the-most-useful-Swiss-army-knife-one-liners-on-Unix), su [Quora](http://www.quora.com/What-are-some-time-saving-tips-that-every-Linux-user-should-know). Tuttavia, visto l'interesse, mi è sembrato logico usare Github per raccogliere il tutto e creare un qualcosa a cui chiunque avrebbe potuto contribuire, anche con un piccolo suggerimento. Non abbiamo la pretesa di aver creato qualcosa di perfetto: se trovi qualche errore faccelo sapere, magari aprendo una Pull Request! + + +## Meta + +Obiettivi: + +- Questa guida è adatta sia a principianti che ad utenti con più conoscenze. Ci proponiamo di seguire tre principi fondamentali: *ampiezza* (cerchiamo di includere tutto quello che serve), *specificità* (dando degli esempi concreti) e *brevità* (evitando tutto il futile e il superfluo). Ogni consiglio viene dato con l'obiettivo di salvare del tempo prezioso. +- Questa guida è stata scritta per Linux, con alcune eccezioni per che abbiamo riportato nella sezione "[MacOS X](#macos-x-only)". In ogni caso, molti dei consigli che vedrai si applicano tranquillamente ad altri sistemi operativi Unix e a MacOS. +- Il focus principale sarà su interactive Bash, nonostante non sia esclusivamente così. +- Verranno inclusi comandi "base" Unix, ma anche altri che necessiteranno di installazioni separate. + +Note: + +- Per tenere tutto su una sola pagina, il contenuto è stato incluso tramite reference. Crediamo che tu sia abbastanza intelligente da cercare i dettagli su qualcosa di specifico, o su un comando, usando Google. Usa `apt-get`/`yum`/`dnf`/`pacman`/`pip`/`brew` (in base alla situazione) per installare i nuovi programmi. +- Se vuoi, usa [Explainshell](http://explainshell.com/) per avere uno spaccato più completo su cosa fanno comandi, pipe, opzioni e così via. + + +## Le Basi + +- Impara le basi di Bash. Usa `man bash` e cerca almeno di scorrere velocemente l'intero scritto. Non è troppo lungo e neanche difficile da seguire. Altre shell possono andare bene, ma Bash è molto potente e sempre disponibile (impararne una sola tra zsh, fish e così via, per quanto ti possa tentare, ti darà problemi a lungo termine, lavorando su altre piattaforme). + +- Impara ad usare bene almeno un editor di testo. Idealmente, potresti usare Vim (`vi`), con il quale non c'è praticamente competizione per questo genere di cose (si, anche se volessi usare Emacs, oppure un altro di quei grossi IDE, o magari l'ennesimo ultimo editor ultramoderno ed hipster). + +- Impara a leggere la documentazione usando `man` (per i più curiosi, `man man` elenca le varie sezioni. Ad esempio, 1 indica i comandi "regolari", 5 per file/convenzioni, 8 per l'amministrazione). Trova le pagine tramite `apropos`. Ricorda inoltre che alcuni comandi non sono degli eseguibili, ma dei "builtin" di Bash. Usa `help -d` in caso di necessità. + +- Impara tutto sul reindirizzamento dell'output e dell'input, usando `>`, `<` ed il pipe `|`. Impara anche che `>` sovrascrive il file output, mentre `>>` aggiunge del contenuto alla fine. Impara tutto riguardo stdout e stderr. + +- Impara anche qualcosa sul file glob, l'uso di `*` (e magari anche di `?` e `[`...`]`), oltre alla differenza tra i doppi `"` e singoli `'` apici. Guarda più in giù per quanto riguarda l'espansione delle variabili. + +- Acquisisci familiarità con la gestione dei job con Bash: `&`, **ctrl-z**, **ctrl-c**, `jobs`, `fg`, `bg`, `kill`, e così via. + +- Impara ad usare `ssh` e le basi della passwordless authentication, tramite `ssh-agent`, `ssh-add`, e così via. + +- Gestione base dei file: `ls` e `ls -l` (nello specifico, impara cosa indica ognuna delle colonne che escono fuori da `ls -l`), `less`, `head`, `tail` e `tail -f` (or even better, `less +F`), `ln` e `ln -s` (impara le differenze ed i vantaggi nell'uso di hard link o soft link), `chown`, `chmod`, `du` (per una panoramica veloce, usa: `du -hs *`). Per la gestione del filesystem, guardati `df`, `mount`, `fdisk`, `mkfs`, `lsblk`. Impara anche cos'è un inode (`ls -i` or `df -i`). + +- Gestione base delle reti: `ip` or `ifconfig`, `dig`. + +- Impara ad usare per bene le espressioni regolari, e le varie flag per `grep`/`egrep`. Nello specifico, varrebbe la pena anche vedersi le opzioni `-i`, `-o`, `-v`, `-A`, `-B`, e `-C`. + +- Impara ad usare `apt-get`, `yum`, `dnf` o `pacman` (in base alla distro che usi) per trovare ed installare nuovi package. E assicurati anche di aver installato `pip`, in modo tale da installare agevolmente i vari tool da linea di comando basati sul linguaggio Python. Alcuni di quelli che vedrai in seguito sono più semplici da installare se usi `pip`. + + +## Uso quotidiano + +- In Bash, usa **Tab** per completare i vari parametri dei comandi, oppure elencarli. Usa **ctrl-r** per effettuare una ricerca nella cronologia dei comandi inseriti (premi *ctrl-r*, quindi effettua la ricerca. Per vedere più risultati premi ripetutamente *ctrl-r*). Premi quindi **Invio** per eseguire il comando trovato, oppure premi su **freccia destra** per mettere il comando sulla linea attuale, in modo tale da poterlo modificare. + +- In Bash, usa **ctrl-w** per cancellare l'ultima parola, **ctrl-u** per cancellare tutto fino all'inizio della riga. Usa **alt-b** ed **alt-f** per muoverti di parola in parola. **ctrl-a** ti permette di tornare all'inizio della riga attuale senza cancellare nulla, mentre con **ctrl-e** puoi spostarti direttamente alla fine. **ctrl-k** cancella tutto quello che c'è dal punto attualmente scelto fino alla fine della riga. Inoltre, **ctrl-l** pulisce lo schermo. Per vedere una lista completa di tutte le varie scorciatoie presenti (ce ne sono molte) in bash, usa `man readline`. Ad esempio, **alt-.** serve a ciclare attraverso gli argomenti precedenti. + +- In alternativa se ti piacciono le scorciatoie in stile vi, usa `set -o vi` (e `set -o emacs` per tornare indietro se dovessi cambiare idea). + +- Per modificare dei comandi lunghi può essere utile impostare un editor di tua scelta (esempio: `export EDITOR=vim`). Premendo **ctrl-x** **ctrl-e** aprirai l'attuale comando in un editor multi-line per una modifica più agevole. Oppure, se stai lavorando con uno stile vi, **escape-v**. + +- Per vedere i comandi più recenti, usa `history`. Ci sono anche altre abbreviazioni da usare per lo stesso scopo, come `!$` (per l'ultimo) e `!!`, nonostante questi vengano spesso rimpiazzati da **ctrl-r** e **alt-.**. + +- Per tornare alla directory precedente: `cd -` + +- Se stai digitando un comando, sei a metà e cambi idea, usa **alt-#** per aggiungere un `#` all'inizio della linea, rendendola di fatto un commento (oppure usa la sequenza **ctrl-a**, **#**, **invio**). Puoi quindi ritornarci dopo, tramite la cronologia. + +- Usa `xargs` (o `parallel`). Si tratta di un tool molto potente, che ti permette di eseguire un certo comando tante volte quanti sono gli elementi restituiti da un altro comando. Quando non sei sicuro di quello che stai facendo, usa `xargs echo` per schiarirti le idee. Inoltre, `-I{}` è abbastanza utile. Ecco un esempio: + +```bash + find . -name '*.py' | xargs grep some_function + cat hosts | xargs -I{} ssh root@{} hostname +``` + +- `pstree -p` è un ottimo tool che ti mostra l'albero dei processi. + +- Usa `pgrep` e `pkill` per trovare dei processi ed inviare loro un segnale specifico (`-f` è utile a riguardo). + +- Impara a conoscere i vari segnali che puoi inviare ai processi. Ad esempio, per sospendere un processo puoi usare `kill -STOP [pid]`. Per una lista completa, esegui `man 7 signal`. + +- Usa `nohup` o `disown` se vuoi fare in modo che un certo processo vada avanti indefinitamente. + +- Controlla quali processi sono in ascolto tramite `netstat -lntp` oppure `ss -plat` (per TCP; aggiungere invece `-u` per UDP). + +- Dai uno sguardo a `lsof` per un elenco di socket e file aperti. + +- Usa `uptime` o `w` per sapere da quanto tempo il sistema è stato avviato. + +- Usa `alias` per creare delle scorciatoie personalizzate. Ad esempio, puoi usare `alias ll='ls -latr'`, che creerà un nuovo alias `ll` per il comando `ls -latr`. + +- Negli script Bash, usa `set -x` (o la variante `set -v`, che effettua un log dell'input, includendo variabili e commenti) per un migliore debug dell'output. Comunque, cerca di usare la modalità strict a meno che tu non abbia bisogno del contrario. Una buona norma suggerisce di usare lo strict mode tranne nel caso in cui tu non possa usare `set -e` per annullare un comando in caso di errore (nonzero exit code). Considera anche l'uso di `set -o pipefail`, Puoi inoltre usare `trap` su EXIT o ERR. Un'abitudine piuttosto utile è quella di iniziare uno script così, facendo in modo che annulli la propria esecuzione in caso vengano rilevati degli errori. + +```bash + set -euo pipefail + trap "echo 'error: Script failed: see failed command above'" ERR +``` + +- Negli script Bash, le subshell (scritte tra parentesi) sono un ottimo modo di raggruppare dei comandi. Un esempio piuttosto comune è il muoversi temporaneamente verso una directory differente, per poi tornare a lavorare in quella attuale. + +```bash + # faccio qualcosa nella directory attuale + (cd /some/other/dir && other-command) + # continuo nella directory attuale +``` + +- In Bash esistono svariati tipi di espansione di variabile. Come controllare se una variabile esiste: `${name:?error message}`. Ad esempio, se uno script richiede un singolo parametro, scrivi `input_file=${1:?usage: $0 input_file}`. Espansione aritmetica: `i=$(( (i + 1) % 5 ))`. Sequenze: `{1..10}`. Trim di stringhe: `${var%suffix}` and `${var#prefix}`. Ad esempio, se `var=foo.pdf`, allora `echo ${var%.pdf}.txt` restituisce `foo.txt`. + +- Usare la brace expansion tramite `{`...`}` può essere molto comodo in caso di necessità di automazione di alcuni task simili. Un esempio è `mv foo.{txt,pdf} some-dir` (che con un solo comando muoverà due file, il pdf ed il txt), `cp somefile{,.bak}` (che si espande a `cp somefile somefile.bak`) o `mkdir -p test-{a,b,c}/subtest-{1,2,3}` (che espande tutte le possibili combinazioni, creando un albero di directory). + +- L'output di un comando può essere trattato come un file tramite `<(some command)`. Ad esempio, per comparare il file `/etc/hosts` locale con uno in remoto: + +```sh + diff /etc/hosts <(ssh somehost cat /etc/hosts) +``` + +- Impara qualcosa sugli "here documents" in Bash, come `cat <logfile 2>&1` oppure `some-command &>logfile`. Spesso, per assicurarti che un certo comando non lasci un handle aperto "legandoti al terminale attuale" potrebbe essere una buona idea aggiungere ` bar: + repren --full --preserve-case --from foo --to bar . + # Recover backup files whatever.bak -> whatever: + repren --renames --from '(.*)\.bak' --to '\1' *.bak + # Same as above, using rename, if available: + rename 's/\.bak$//' *.bak +``` + +- Come la pagina del manuale spiega, `rsync` è un ottimo tool per copiare file, versatile e velocissimo. Si, è conosciuto per sincronizzare file da una macchina all'altra, ma è ugualmente utile se viene usato localmente. Viene anche riconosciuto come [uno dei modi più veloci](https://web.archive.org/web/20130929001850/http://linuxnote.net/jianingy/en/linux/a-fast-way-to-remove-huge-number-of-files.html) di cancellare un grande numero di file tutti insieme: + +```sh +mkdir empty && rsync -r --delete empty/ some-dir && rmdir some-dir +``` + +- Usa `shuf` per selezionare una serie di linee da un file, in ordine casuale. + +- Impara a conoscere le opzioni di `sort`. Per i numeri, usa `-n`, oppure `-h` per gestire numeri leggibili dal'uomo (`du -h`). Impara a capire come funzionano le varie chiavi (`-t` e `-k`). In particolare, fai attenzione a quando scrivi `-k1,1` per ordinare solo per il valore del primo campo, visto che `-k1` significa ordinare secondo l'intera riga. Lo stable sort (`sort -s`) può esserti utile. Immagina ad esempio di voler ordinare secondo il valore del secondo campo, e secondariamente del primo. Userai `sort -k1,1 | sort -s -k2,2`. + +- Se dovessi aver bisogno di scrivere, letteralmente, un tab in Bash, premi **ctrl-v** **[Tab]** o scrivi `$'\t'`. + +- I tool standard per il patching del codice sono `diff` e `patch`. Guarda anche Guarda anche `diffstat` per saperne di più su una diff e `sdiff` per una side-by-side diff. Nota bene che `diff -r` lavora con intere directory. Usa `diff -r tree1 tree2 | diffstat` per una panoramica dei cambiamenti. Usa `vimdiff` per comparare e modificare file. + +- Per file binari, usa `hd`, `hexdump` o `xxd` per semplici hex dump, e `bvi` o `biew` per editing binario. + +- Inoltre, sempre per file binari, usa `strings` (insieme `grep`, e così via) per trovare sezioni di testo al loro interno; + +- Per diff binarie (delta compression), usa `xdelta3`. + +- Per convertire un testo da una codifica ad un'altra, prova `iconv`. Oppure `uconv` in caso di necessità più avanzate; supporta svariate opzioni avanzate inerenti Unicode. Ad esempio, questo comando rimuove tutti gli accenti e trasforma le stringhe in lettere tutte minuscole: + +```sh + uconv -f utf-8 -t utf-8 -x '::Any-Lower; ::Any-NFD; [:Nonspacing Mark:] >; ::Any-NFC; ' < input.txt > output.txt +``` + +- Per dividere un file in altri file più piccoli, guarda `split` (per dividere in base alla dimensione) e `csplit` (per dividere in base ad un pattern). + +- Se devi manipolare date ed orari, usa `dateadd`, `datediff`, `strptime` e così via, di [`dateutils`](http://www.fresse.org/dateutils/). + +- Usa `zless`, `zmore`, `zcat` e `zgrep` per lavorare su file compressi. + + +## Debug sistema + +- Per il web debugging, `curl` e `curl -I` sono decisamente utili. La stessa cosa vale anche per l'equivalente `wget`, o ancora per il più recente [`httpie`](https://github.com/jkbrzt/httpie). + +- Per avere più informazioni sullo stato attuale del sistema, dalla cpu ai dischi, il tool classico più usato è `top` (o la sua versione migliorata `htop`), `iostat` e `iotop`. Usa `iostat -mxz 15` per avere informazioni base sulla CPU ed informazioni dettagliate, per partizione, sui dischi e sulle loro performance. + +- Per avere più dettagli sulle connessioni di rete, usa `netstat` e `ss`. + +- Per una panoramica veloce di cosa sta succedendo nel sistema, `dstat` è ottimo. Per avere invece molte più informazioni e scendere nel dettaglio, usa [`glances`](https://github.com/nicolargo/glances). + +- Per saperne di più sullo stato della memoria, esegui ed impara a capire il significato dei comandi `free` e `vmstat`. In particolare, sii consapevole del fatto che la memoria "cached" è quella mantenuta dal kernel Linux come file cache, che a tutti gli effetti poi conta come memoria libera. + +- Il system debugging con Java è tutta un'altra cosa. Uno dei trucchi più semplici sulla JVM Oracle (ed anche altre) è che all'esecuzione di `kill -3 ` verrà messo in log un trace full stack (inclusi molti dettagli sulla garbage collection). Anche `jps`, `jstat`, `jstack` e `jmap` del JDK sono molto utili. Ci sono poi i vari [SJK tools](https://github.com/aragozin/jvm-tools), più avanzati. + +- Usa `mtr` per rilevare problemi di rete. Molto meglio di traceroute. + +- Per capire perché un disco viene visto pieno, `ncdu` ti evita perdite di tempo rispetto al più comune `du -sh *`. + +- Per capire quale socket o processo sta usando troppa banda prova `iftop` o `nethogs`. + +- `ab` (incluso in Apache) è ottimo per un test di carico veloce di un webserver. Per test di carico più avanzati, prova anche `siege`. + +- Per un debug di rete più avanzato, dai uno sguardo a `wireshark`, `tshark` o `ngrep`. + +- Impara qualcosa di più su `strace` e `ltrace`. Possono essere molto utili quando un programma crasha, o magari rimane in blocco e tu non capisci perché. Degne di nota le opzioni di profiling (`-c`), e la possibilità di agganciare un processo in esecuzione (`-p`). + +- Impara qualcosa di più riguardo `ldd` per controllare le librerie condivise. + +- Impara a connetterti ad un processo in esecuzione con `gdb` e recuperare il suo stack trace. + +- Usa `/proc`. Fantastico quando devi fare un live debug in caso di problemi. Esempi: `/proc/cpuinfo`, `/proc/meminfo`, `/proc/cmdline`, `/proc/xxx/cwd`, `/proc/xxx/exe`, `/proc/xxx/fd/`, `/proc/xxx/smaps` (dove `xxx` è il nome del processo o il suo pid). + +- Quando vuoi debuggare qualcosa che è andato storto in passato, `sar` può essere molto utile. Permette di controllare uno storico delle statistiche di CPU, memoria, rete e così via. + +- Usa `stap` per un'analisi più approfondita del sistema in termini di performance ([SystemTap](https://sourceware.org/systemtap/wiki)), [`perf`](https://en.wikipedia.org/wiki/Perf_(Linux)), e [`sysdig`](https://github.com/draios/sysdig). + +- Controlla quale OS stai usando con `uname` oppure `uname -a` (informazioni generali sul kernel) o `lsb_release -a` (informazioni sulla distro Linux). + +- Usa `dmesg` quando il sistema si comporta in modo davvero strano (problemi hardware o legati ai driver, insomma). + + +## One-liner + +Qualche esempio di combinazione di più comandi comandi: + +- Decisamente è utile è sapere che puoi effettuare intersesione, unione e differenza di file di testo tramite `sort`/`uniq`. Immagina di avere `a` e `b`, due file di testo. Il metodo in questione è veloce e tra l'altro supporta anche file di svariati gigabyte. Guarda anche la nota riguardo `LC_ALL` e l'opzione `-u` di `sort`. + +```sh + cat a b | sort | uniq > c # c is a union b + cat a b | sort | uniq -d > c # c is a intersect b + cat a b b | sort | uniq -u > c # c is set difference a - b +``` + +- Usa `grep . *` per esaminare velocemente i contenuti di tutti i file in una certa directory (in modo che ogni linea venga abbinata al nome del file), oppure `head -100 *`. Può essere molto utile per quelle directory piene file di configurazione, come `/sys`, `/proc`, `/etc`. + + +- Sommare tutti i numeri sulla terza colonna di un file di testo (probabilmente 3 volte più veloce e corto della controparte in Python): + +```sh + awk '{ x += $3 } END { print x }' myfile +``` + +- Nel caso in cui tu voglia vedere dimensioni e date per un certo "albero" di file (un po' come `ls -l`, ma ricorsivo): + +```sh + find . -type f -ls +``` + +- Immagina di avere un file di testo, come un log di un server, like a web server log, ed un certo valore appare di tanto in tanto tra le righe, come ad esempio un parametro `acct_id` in un URL.. Ecco come contare le richieste effettuate che contengono tale parametro `acct_id`: + +```sh + cat access.log | egrep -o 'acct_id=[0-9]+' | cut -d= -f2 | sort | uniq -c | sort -rn +``` + +- Per monitorare costantemente i cambiamenti ai file, usa `watch`. Ad esempio, per controllare i cambiamneti in una certa directory usa `watch -d -n 2 'ls -rtlh | tail'` oppure, se stai monitorando un file di configurazione inerente il WiFi, `watch -d -n 2 ifconfig`. + +- Esegui questa funzione per ottenere un consiglio a caso da questo documento: + +```sh + 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 + } +``` + + +## Oscuri ma utili + +- `expr`: esegue operazioni aritmetiche o booleane, oltre a valutare espressioni regolari. + +- `m4`: un semplice macro processor. + +- `yes`: stampa una stringa per un numero indefinito di volte. + +- `cal`: un calendario. + +- `env`: esegue un comando (utile negli script). + +- `printenv`: stampa le variabili di ambiente (utile per il debug e negli script). + +- `look`: trova parole inglesi (o linee in un file) partendo da una stringa. + +- `cut`, `paste` e `join`: manipolazione di dati. + +- `fmt`: formatta paragrafi di testo. + +- `pr`: formatta del testo in pagine/colonne. + +- `fold`: sistema delle linee di testo. + +- `column`: formatta del testo in colonne o tabelle dalla larghezza fissa. + +- `expand` ed `unexpand`: converte spazi in tab, e viceversa. + +- `nl`: aggiunge il conteggio delle righe. + +- `seq`: stampa dei numeri. + +- `bc`: calcolatrice. + +- `factor`: scompone un numero in fattori. + +- [`gpg`](https://gnupg.org/): cripta e firma i file. + +- `toe`: tabella di tutti i terminali disponbili. + +- `nc`: per il network debugging e trasferimento dati. + +- `socat`: socket relay e tcp port forwarder (simile a `netcat`). + +- [`slurm`](https://github.com/mattthias/slurm): visualizzazione del traffico di rete. + +- `dd`: spostamento dati tra file e dispositivi. + +- `file`: identifica il tipo di un certo file. + +- `tree`: mostra le sottodirectory con una struttura ad albero. A differenza di `ls`, è ricorsivo. + +- `stat`: informazioni su un file. + +- `time`: esegue un comando e tiene traccia del tempo di esecuzione. + +- `timeout`: avvia un comando definendo anche un certo ammontare di tempo oltre il quale non si può andare. Se tale ammontare di tempo viene raggiunto, il comando viene annullato. + +- `lockfile`: crea un file che può essere rimosso solo tramite `rm -f`. + +- `logrotate`: gestie i log, la loro rotazione, compressione ed invio via mail. + +- `watch`: esegue un comando più volte, mostrando i risultati ed evidenziando le differenze tra tali risultati. + +- `tac`: stampa un file al contrario. + +- `shuf`: sceglie casualmente delle righe da un file. + +- `comm`: compara dei file ordinati riga per riga. + +- `pv`: monitora i progressi dei dati attraverso un pipe. + +- `hd`, `hexdump`, `xxd`, `biew` e `bvi`: dump o modifica di file binari. + +- `strings`: estrae del testo da file binari. + +- `tr`: manipolazione e trasformazione dei caratteri. + +- `iconv` o `uconv`: conversione di testi in altre codifiche. + +- `split` e `csplit`: divisione di un file in altri file più piccoli. + +- `sponge`: legge tutto l'input prima di riscriverlo, utile in caso di lettura e scrittura sullo stesso file. Ad esempio: `grep -v something some-file | sponge some-file`. + +- `units`: conversione da e verso altre unità di misura (guarda anche `/usr/share/units/definitions.units`). + +- `apg`: genera password casuali. + +- `7z`: compressione di file ad alta ratio. + +- `ldd`: informazioni su una libreria dinamica. + +- `nm`: elenca i vari simboli presenti un object file. + +- `ab`: benchmark di webserver. + +- `strace`: debug delle chiamate di sistema. + +- `mtr`: un traceroute migliore per il debug di rete. + +- `cssh`: shell visuale concorrente. + +- `rsync`: sincronizza file e cartelle tramite SSH oppure in locale. + +- `wireshark` e `tshark`: packet capturing e debug di rete. + +- `ngrep`: come grep... ma per il traffico di rete. + +- `host` e `dig`: DNS lookup. + +- `lsof`: descrittore dei processi ed informazioni su socket. + +- `dstat`: statistiche di sistema. + +- [`glances`](https://github.com/nicolargo/glances): overview di sistemi multipli ad alto livello. + +- `iostat`: statistiche sull'uso dei dischi. + +- `mpstat`: statistiche sull'uso della CPU. + +- `vmstat`: statistiche sull'uso della memoria. + +- `htop`: versione migliorata di top. + +- `last`: cronologia dei login. + +- `w`: mostra chi è autenticato. + +- `id`: user/group identity info. + +- `sar`: cronologia di alcune statistiche del sistema. + +- `iftop` o `nethogs`: uso della rete da parte di socket e processi. + +- `ss`: statistiche sui socket. + +- `dmesg`: messaggi di errore di avvio e di sistema in generale. + +- `sysctl`: visualizza e configura i parametri del kernel a run time. + +- `hdparm`: tool di gestione dischi SATA/ATA. + +- `lsb_release`: informazioni sulla distribuzione Linux. + +- `lsblk`: visualizzazione ad albero dei dischi e relative partizioni. + +- `lshw`, `lscpu`, `lspci`, `lsusb`, `dmidecode`: informazioni sull'hardware, tra cui CPU, BIOS, RAID, scheda grafica e dispositivi di ogni tipo. + +- `lsmod` e `modinfo`: elenco e dettaglio dei vari moduli del kernel. + +- `fortune`, `ddate`, e `sl`: mmmh, beh, dipende molto da quanto consideri le locomotive a vapore e le citazioni di Zippy "utili". + + +## MacOS X + +Consiera questa sezione come un'esclusiva MacOS. + +- I package vengono gestiti con `brew` (Homebrew) e/o `port` (MacPorts). Possono essere usati su MacOS per installare molti dei comandi visti in questo articolo. + +- Copia l'output di un qualsiasi comando tramite `pbcopy` ed incollalo, invece, con `pbpaste`. + +- Per abilitare l'Option key sul terminale Mac OS come un'alt key (per riprodurre comandi quali **alt-b**, **alt-f**, e così via), apri Preferenze -> Profili -> Tastiera e scegli "Usa Option come meta key". + +- Per aprire un file con un'applicazione desktop, usa `open` oppure `open -a /Applications/LaTuaApplicazione.app`. + +- Cerca i file con `mdfind` ed elenca i vari metadati (come gli EXIF per le foto) con `mdls`. + +- Sii consapevole del fatto che MacOS è basato su BSD Unix, e molti dei suoi comandi (ad esempio `ps`, `ls`, `tail`, `awk`, `sed`) presentano alcune variazioni rispetto alla loro controparte Linux. Per controllare tali differenze devi vedere se la pagina del manuale ha come titolo "BSD General Commands Manual". Come logica conseguenza, quindi, ricorda di non usare tali comandi se hai intenzione di scrivere degli script cross-platform. + +- Per avere più informazioni sulla tua release di MacOS, usa `sw_vers`. + + +## Ulteriori risorse + +- [awesome-shell](https://github.com/alebcay/awesome-shell): Una curatissima lista di tool e risorse +- [awesome-osx-command-line](https://github.com/herrbischoff/awesome-osx-command-line): Una guida approfondita sulla linea di comando in Mac OSX +- [Strict mode](http://redsymbol.net/articles/unofficial-bash-strict-mode/) per scrivere script migliori +- [shellcheck](https://github.com/koalaman/shellcheck): Un tool di analisi per script shell. Praticamente lint per bash/sh/zsh. +- [Filenames and Pathnames in Shell](http://www.dwheeler.com/essays/filenames-in-shell.html): Un compendio sul come gestire nomi dei file e path nella shell + + +## Disclaimer + +Con l'eccezione di pochi piccoli task, il codice è stato scritto per permettere agli altri di leggerlo agevolmente. Da grandi poteri derivano grandi responsabilità. Ricorda: il fatto che tu possa *fare* qualcosa in Bash non implica comunque che tu debba per forza! ;) + + +## License + +[![Creative Commons License](https://i.creativecommons.org/l/by-sa/4.0/88x31.png)](http://creativecommons.org/licenses/by-sa/4.0/) + +A questo lavoro è attribuita la [Creative Commons Attribution-ShareAlike 4.0 International License](http://creativecommons.org/licenses/by-sa/4.0/). From b56ce5c17f53ea1a9de1a1db22e865d391baf5fc Mon Sep 17 00:00:00 2001 From: Joshua Levy Date: Sun, 29 Nov 2015 16:14:13 -0800 Subject: [PATCH 16/22] Add Italian translation links and new maintainer. Follow-on to #307. --- README-es.md | 14 +++++++------- README-it.md | 6 ++++-- README-ja.md | 4 ++-- README-ko.md | 2 +- README-pt.md | 2 +- README-ru.md | 2 +- README-sl.md | 4 +++- README-uk.md | 6 +++--- README-zh.md | 2 +- README.md | 4 +++- admin/authors-info.yml | 3 ++- 11 files changed, 28 insertions(+), 21 deletions(-) diff --git a/README-es.md b/README-es.md index 523af11..0265e3f 100644 --- a/README-es.md +++ b/README-es.md @@ -1,5 +1,5 @@ -[ Languages: -[English](README.md), [Español](README-es.md), [日本語](README-ja.md), [한국어](README-ko.md), [Português](README-pt.md), [Русский](README-ru.md), [Slovenščina](README-sl.md), [Українська](README-uk.md), [中文](README-zh.md) +[ Languages: +[English](README.md), [Español](README-es.md), [Italiano](README-it.md), [日本語](README-ja.md), [한국어](README-ko.md), [Português](README-pt.md), [Русский](README-ru.md), [Slovenščina](README-sl.md), [Українська](README-uk.md), [中文](README-zh.md) ] @@ -24,7 +24,7 @@ La fluidez en el terminal es una destreza a menudo abandonada y considerada arcaica, pero esta mejora su flexibilidad y productividad como ingeniero en formas obvia y sutil. Esta es una selección de notas y consejos al usar el terminal que encontramos útiles al trabajar en Linux. Algunos consejos son elementales y algunos bastante específicos, sofisticados u oscuros. Esta página no es larga, pero si puedes usar y recordar todos los puntos aquí mostrados, sabrás un montón. Este trabajo es el resultado de [muchos autores y traductores](AUTHORS.md). -La mayor parte +La mayor parte [originalmente](http://www.quora.com/What-are-some-lesser-known-but-useful-Unix-commands) [apareció](http://www.quora.com/What-are-the-most-useful-Swiss-army-knife-one-liners-on-Unix) en [Quora](http://www.quora.com/What-are-some-time-saving-tips-that-every-Linux-user-should-know), @@ -253,7 +253,7 @@ mkdir empty && rsync -r --delete empty/ some-dir && rmdir some-dir - Para depuración web, `curl` y `curl -I` son prácticos, o como sus equivalentes `wget`, o el más moderno [`httpie`](https://github.com/jkbrzt/httpie). -- Para conocer el estado del cpu/disco, las clásicas herramientas son `top` (o mejor `htop`), `iostat`, y `iotop`. Usa `iostat -mxz 15` para CPU básicas y estadísticas detalladas y visión de rendimiento por partición del disco. +- Para conocer el estado del cpu/disco, las clásicas herramientas son `top` (o mejor `htop`), `iostat`, y `iotop`. Usa `iostat -mxz 15` para CPU básicas y estadísticas detalladas y visión de rendimiento por partición del disco. - Para detalles de la conexión de red, usa `netstat` y `ss`. @@ -337,7 +337,7 @@ Algunos ejemplos de comandos reunidos: - `expr`: ejecuta operaciones aritméticas o booleanas o evalúa expresiones regulares -- `m4`: procesador de macro sencillo +- `m4`: procesador de macro sencillo - `yes`: imprime un string sin fin @@ -469,7 +469,7 @@ Algunos ejemplos de comandos reunidos: - `ss`: estadísticas de socket -- `dmesg`: mensajes de error del arranque y del sistema +- `dmesg`: mensajes de error del arranque y del sistema - `sysctl`: examina y configura los parámetros de kernel de Linux en tiempo de ejecución @@ -480,7 +480,7 @@ Algunos ejemplos de comandos reunidos: - `lsblk`: lista de dispositivos de bloque: una vista tipo arbol de sus discos y particiones de disco - `lshw`, `lscpu`, `lspci`, `lsusb`, `dmidecode`: información de hardware, incluyendo CPU, BIOS, RAID, gráficos, dispositivos, etc - + - `lsmod` y `modinfo`: lista y muestra detalles de los módulos del kernel - `fortune`, `ddate`, y `sl`: um, bien, depende de si considera las locomotoras de vapor y citas Zippy "útiles" diff --git a/README-it.md b/README-it.md index 35c2c29..803a5f8 100644 --- a/README-it.md +++ b/README-it.md @@ -1,4 +1,6 @@ -[ Traduzioni: [English](README.md), [Español](README-es.md), [日本語](README-ja.md), [한국어](README-ko.md), [Português](README-pt.md), [Русский](README-ru.md), [Slovenščina](README-sl.md), [Українська](README-uk.md), [中文](README-zh.md) ] +[ Languages: +[English](README.md), [Español](README-es.md), [Italiano](README-it.md), [日本語](README-ja.md), [한국어](README-ko.md), [Português](README-pt.md), [Русский](README-ru.md), [Slovenščina](README-sl.md), [Українська](README-uk.md), [中文](README-zh.md) +] # The Art of Command Line (Traduzione Italiana) @@ -19,7 +21,7 @@ ![curl -s 'https://raw.githubusercontent.com/jlevy/the-art-of-command-line/master/README.md' | egrep -o '`\w+`' | tr -d '`' | cowsay -W50](cowsay.png) -Saper usare con una certa facilità la linea di comando è spesso visto come una sorta di "sapere arcano". Anche se può sembrare, in realtà non è decisamente così: può migliorare la tua produttività e la tua flessibilità in modi che neanche immagini. Questa che stai per leggere è una selezione di trucchi e di consigli che riguardano la linea di comando, che abbiamo trovato utili lavorando con Linux. Alcune di queste nozioni sono elementari, altre molto specifiche, se non sofisticate e, a volte, oscure. +Saper usare con una certa facilità la linea di comando è spesso visto come una sorta di "sapere arcano". Anche se può sembrare, in realtà non è decisamente così: può migliorare la tua produttività e la tua flessibilità in modi che neanche immagini. Questa che stai per leggere è una selezione di trucchi e di consigli che riguardano la linea di comando, che abbiamo trovato utili lavorando con Linux. Alcune di queste nozioni sono elementari, altre molto specifiche, se non sofisticate e, a volte, oscure. Non c'è da preoccuparsi, comunque: la pagina che stai scorrendo non è molto lunga e non ti ruberà molto tempo. Prenderci dimestichezza, saperla usare quando necessario, te ne renderà ancora di più. diff --git a/README-ja.md b/README-ja.md index a6d0182..e52c600 100644 --- a/README-ja.md +++ b/README-ja.md @@ -1,5 +1,5 @@ [ Languages: -[English](README.md), [Español](README-es.md), [日本語](README-ja.md), [한국어](README-ko.md), [Português](README-pt.md), [Русский](README-ru.md), [Slovenščina](README-sl.md), [Українська](README-uk.md), [中文](README-zh.md) +[English](README.md), [Español](README-es.md), [Italiano](README-it.md), [日本語](README-ja.md), [한국어](README-ko.md), [Português](README-pt.md), [Русский](README-ru.md), [Slovenščina](README-sl.md), [Українська](README-uk.md), [中文](README-zh.md) ] 原文のコミット [bb0c38c0899339e836c37eead4a9534b06c56662](https://github.com/jlevy/the-art-of-command-line/blob/bb0c38c0899339e836c37eead4a9534b06c56662/README.md) @@ -451,6 +451,6 @@ ## ライセンス -[![Creative Commons License](https://i.creativecommons.org/l/by-sa/4.0/88x31.png)](http://creativecommons.org/licenses/by-sa/4.0/) +[![Creative Commons License](https://i.creativecommons.org/l/by-sa/4.0/88x31.png)](http://creativecommons.org/licenses/by-sa/4.0/) このドキュメントは[Creative Commons Attribution-ShareAlike 4.0 International Licene](http://creativecommons.org/licenses/by-sa/4.0/)でライセンスされる。 diff --git a/README-ko.md b/README-ko.md index 1b1e820..ba82662 100644 --- a/README-ko.md +++ b/README-ko.md @@ -1,5 +1,5 @@ [ Languages: -[English](README.md), [Español](README-es.md), [日本語](README-ja.md), [한국어](README-ko.md), [Português](README-pt.md), [Русский](README-ru.md), [Slovenščina](README-sl.md), [Українська](README-uk.md), [中文](README-zh.md) +[English](README.md), [Español](README-es.md), [Italiano](README-it.md), [日本語](README-ja.md), [한국어](README-ko.md), [Português](README-pt.md), [Русский](README-ru.md), [Slovenščina](README-sl.md), [Українська](README-uk.md), [中文](README-zh.md) ] diff --git a/README-pt.md b/README-pt.md index 1372a51..0287157 100644 --- a/README-pt.md +++ b/README-pt.md @@ -1,5 +1,5 @@ [ Languages: -[English](README.md), [Español](README-es.md), [日本語](README-ja.md), [한국어](README-ko.md), [Português](README-pt.md), [Русский](README-ru.md), [Slovenščina](README-sl.md), [Українська](README-uk.md), [中文](README-zh.md) +[English](README.md), [Español](README-es.md), [Italiano](README-it.md), [日本語](README-ja.md), [한국어](README-ko.md), [Português](README-pt.md), [Русский](README-ru.md), [Slovenščina](README-sl.md), [Українська](README-uk.md), [中文](README-zh.md) ] diff --git a/README-ru.md b/README-ru.md index 1743d93..3d8ca98 100644 --- a/README-ru.md +++ b/README-ru.md @@ -1,5 +1,5 @@ [ Languages: -[English](README.md), [Español](README-es.md), [日本語](README-ja.md), [한국어](README-ko.md), [Português](README-pt.md), [Русский](README-ru.md), [Slovenščina](README-sl.md), [Українська](README-uk.md), [中文](README-zh.md) +[English](README.md), [Español](README-es.md), [Italiano](README-it.md), [日本語](README-ja.md), [한국어](README-ko.md), [Português](README-pt.md), [Русский](README-ru.md), [Slovenščina](README-sl.md), [Українська](README-uk.md), [中文](README-zh.md) ] diff --git a/README-sl.md b/README-sl.md index e502e67..b7398e1 100644 --- a/README-sl.md +++ b/README-sl.md @@ -1,4 +1,6 @@ -[ Languages: [English](README.md), [Español](README-es.md), [日本語](README-ja.md), [한국어](README-ko.md), [Português](README-pt.md), [Русский](README-ru.md), [Slovenščina](README-sl.md), [Українська](README-uk.md), [中文](README-zh.md) ] +[ Languages: +[English](README.md), [Español](README-es.md), [Italiano](README-it.md), [日本語](README-ja.md), [한국어](README-ko.md), [Português](README-pt.md), [Русский](README-ru.md), [Slovenščina](README-sl.md), [Українська](README-uk.md), [中文](README-zh.md) +] # Umetnost ukazne vrstice diff --git a/README-uk.md b/README-uk.md index 4d350a7..2c2551c 100644 --- a/README-uk.md +++ b/README-uk.md @@ -1,6 +1,6 @@ [ Languages: -[English](README.md), [Español](README-es.md), [日本語](README-ja.md), [한국어](README-ko.md), [Português](README-pt.md), [Русский](README-ru.md), [Slovenščina](README-sl.md), [Українська](README-uk.md), [中文](README-zh.md)] - +[English](README.md), [Español](README-es.md), [Italiano](README-it.md), [日本語](README-ja.md), [한국어](README-ko.md), [Português](README-pt.md), [Русский](README-ru.md), [Slovenščina](README-sl.md), [Українська](README-uk.md), [中文](README-zh.md) +] # Мистецтво командного рядка [![Вступайте в англомовний чат проекту https://gitter.im/jlevy/the-art-of-command-line](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/jlevy/the-art-of-command-line?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) @@ -78,7 +78,7 @@ - Зверніть увагу на `lsof` щоб подивитися відкриті сокети і файли. - Команда `uptime` or `w` показує як довго працює система. - Використовуйте `alias`, щоб створити скорочення для часто використовуємих команд. Наприклад, `alias ll='ls -latr'` створить нове скорочення(alias) `ll`. -- У Bash скриптах використовуйте `set -x` (або `set -v`) щоб дебажити вивід. Використовуйте строгий(strict) режим скрізь, де це можливо. Використовуйте `set -e` для того, щоб припиняти виконання при помилках (не нульовий вихідний код). Використовуйте `set -u` що б визначити невстановленні змінні. Використовуйте `set -o pipefail` щоб при помилках невикористовувати пайпи(вертикальна риска). Для більш складних скриптів також використовуйте `trap` на EXIT or ERR. +- У Bash скриптах використовуйте `set -x` (або `set -v`) щоб дебажити вивід. Використовуйте строгий(strict) режим скрізь, де це можливо. Використовуйте `set -e` для того, щоб припиняти виконання при помилках (не нульовий вихідний код). Використовуйте `set -u` що б визначити невстановленні змінні. Використовуйте `set -o pipefail` щоб при помилках невикористовувати пайпи(вертикальна риска). Для більш складних скриптів також використовуйте `trap` на EXIT or ERR. Корисний звичка почати використовувати настипний скрипт, який допоможе виявити і перервати на загальних помилоках і вивести повідомлення: ```bash set -euo pipefail diff --git a/README-zh.md b/README-zh.md index 692873c..21b32dd 100644 --- a/README-zh.md +++ b/README-zh.md @@ -1,5 +1,5 @@ [ Languages: -[English](README.md), [Español](README-es.md), [日本語](README-ja.md), [한국어](README-ko.md), [Português](README-pt.md), [Русский](README-ru.md), [Slovenščina](README-sl.md), [Українська](README-uk.md), [中文](README-zh.md) +[English](README.md), [Español](README-es.md), [Italiano](README-it.md), [日本語](README-ja.md), [한국어](README-ko.md), [Português](README-pt.md), [Русский](README-ru.md), [Slovenščina](README-sl.md), [Українська](README-uk.md), [中文](README-zh.md) ] diff --git a/README.md b/README.md index f160541..e0cc66a 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,6 @@ -[ Languages: [English](README.md), [Español](README-es.md), [日本語](README-ja.md), [한국어](README-ko.md), [Português](README-pt.md), [Русский](README-ru.md), [Slovenščina](README-sl.md), [Українська](README-uk.md), [中文](README-zh.md) ] +[ Languages: +[English](README.md), [Español](README-es.md), [Italiano](README-it.md), [日本語](README-ja.md), [한국어](README-ko.md), [Português](README-pt.md), [Русский](README-ru.md), [Slovenščina](README-sl.md), [Українська](README-uk.md), [中文](README-zh.md) +] # The Art of Command Line diff --git a/admin/authors-info.yml b/admin/authors-info.yml index 023f5af..80d02f9 100644 --- a/admin/authors-info.yml +++ b/admin/authors-info.yml @@ -36,4 +36,5 @@ roles: xuchunyang: translator (zh) stevenlordiam: translator (zh) Armour: translator (zh) - stepan0904: translator and maintaner (uk) + stepan0904: translator and maintainer (uk) + francescomalatesta: translator and maintainer (it) From 2daf0e6e0d02779112ae76455079e1c1cf6aa338 Mon Sep 17 00:00:00 2001 From: Thomas Lee Date: Tue, 1 Dec 2015 21:07:58 +0800 Subject: [PATCH 17/22] zh: Refine the translation of "one-liner" --- README-zh.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README-zh.md b/README-zh.md index 958bb67..b1e9809 100644 --- a/README-zh.md +++ b/README-zh.md @@ -12,7 +12,7 @@ - [日常使用](#日常使用) - [文件及数据处理](#文件及数据处理) - [系统调试](#系统调试) -- [单行代码](#单行代码) +- [单行脚本](#单行脚本) - [冷门但有用](#冷门但有用) - [仅限 MacOS X 系统](#仅限-macos-x-系统) - [更多资源](#更多资源) @@ -189,7 +189,7 @@ - 关于 Amazon S3,[`s3cmd`](https://github.com/s3tools/s3cmd) 很方便而 [`s4cmd`](https://github.com/bloomreach/s4cmd) 更快。Amazon 官方的 [`aws`](https://github.com/aws/aws-cli) 以及 [`saws`](https://github.com/donnemartin/saws) 是其他 AWS 相关工作的基础。 -- 了解如何使用 `sort` 和 `uniq`,包括 uniq 的 `-u` 参数和 `-d` 参数,详见后文单行代码节。另外可以了解一下 `comm`。 +- 了解如何使用 `sort` 和 `uniq`,包括 uniq 的 `-u` 参数和 `-d` 参数,详见后文单行脚本节。另外可以了解一下 `comm`。 - 了解如何使用 `cut`,`paste` 和 `join` 来更改文件。很多人都会使用 `cut`,但几乎都不会使用 `join`。 @@ -288,7 +288,7 @@ mkdir empty && rsync -r --delete empty/ some-dir && rmdir some-dir - 无论什么东西工作得很欢乐时试试 `dmesg`(可能是硬件或驱动问题)。 -## 单行代码 +## 单行脚本 一些命令组合的例子: From 86d63f5a95ac3fdb14464ecc07531eb26ad77e97 Mon Sep 17 00:00:00 2001 From: James Kolce Date: Wed, 2 Dec 2015 00:26:36 -0700 Subject: [PATCH 18/22] Fix anchors for Spanish version --- README-es.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/README-es.md b/README-es.md index 0265e3f..41538ff 100644 --- a/README-es.md +++ b/README-es.md @@ -8,15 +8,15 @@ [![Join the chat at https://gitter.im/jlevy/the-art-of-command-line](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/jlevy/the-art-of-command-line?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) - [Meta](#meta) -- [Fundamentos](#basics) -- [Uso diario](#everyday-use) -- [Procesamiento archivos y datos](#processing-files-and-data) -- [Depuración del sistema](#system-debugging) +- [Fundamentos](#fundamentos) +- [Uso diario](#de-uso-diario) +- [Procesamiento archivos y datos](#procesamiento-de-archivos-y-datos) +- [Depuración del sistema](#depuración-del-sistema) - [One-liners](#one-liners) -- [Obscuro pero útil](#obscure-but-useful) -- [Solo para MacOS X](#macos-x-only) -- [Más recursos](#more-resources) -- [Advertencia](#disclaimer) +- [Obscuro pero útil](#oscuro-pero-útil) +- [Solo para MacOS X](#solo-para-macos-x) +- [Más recursos](#más-recursos) +- [Advertencia](#advertencia) ![curl -s 'https://raw.githubusercontent.com/jlevy/the-art-of-command-line/master/README.md' | egrep -o '`\w+`' | tr -d '`' | cowsay -W50](cowsay.png) From ebe46e8390f2b4a48cf694627374498000948b2d Mon Sep 17 00:00:00 2001 From: Hyojin Kwak Date: Thu, 3 Dec 2015 12:00:08 +0900 Subject: [PATCH 19/22] ko: Correct spelling --- README-ko.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README-ko.md b/README-ko.md index 1b1e820..fb16091 100644 --- a/README-ko.md +++ b/README-ko.md @@ -21,7 +21,7 @@ ![curl -s 'https://raw.githubusercontent.com/jlevy/the-art-of-command-line/master/README.md' | egrep -o '`\w+`' | tr -d '`' | cowsay -W50](cowsay.png) -커맨드라인을 능숙하게 다루는것은 도외시되거나 신비스럽게 여겨집니다. 하지만 커맨드라인은 명백하고도 미묘한 방법으로 엔지니어가 하는 작업의 유연성과 생산성을 향상시십니다. 이 문서는 리눅스에서 작업을 하면서 찾은 노트와 팁들의 모음입니다. 몇 가지는 기초적이고, 몇가지는 상당히 구체적이며, 세련되고, 잘 알려지지 않은 것입니다. 이 문서는 그리 길지 않지만, 여기 있는 모든것을 사용할 수 있게 되고, 기억해낼 수 있게 된다면, 많은 것을 알게되는 것입니다. +커맨드라인을 능숙하게 다루는것은 도외시되거나 신비스럽게 여겨집니다. 하지만 커맨드라인은 명백하고도 미묘한 방법으로 엔지니어가 하는 작업의 유연성과 생산성을 향상시킵니다. 이 문서는 리눅스에서 작업을 하면서 찾은 노트와 팁들의 모음입니다. 몇 가지는 기초적이고, 몇가지는 상당히 구체적이며, 세련되고, 잘 알려지지 않은 것입니다. 이 문서는 그리 길지 않지만, 여기 있는 모든것을 사용할 수 있게 되고, 기억해낼 수 있게 된다면, 많은 것을 알게되는 것입니다. 여기있는 대부분의 것은 [원래](http://www.quora.com/What-are-some-lesser-known-but-useful-Unix-commands) From 377387c4f60a0a59bed7519bee3cbe181adc744c Mon Sep 17 00:00:00 2001 From: stepan Date: Thu, 3 Dec 2015 22:52:13 +0200 Subject: [PATCH 20/22] typo --- README-uk.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README-uk.md b/README-uk.md index 2c2551c..d779a56 100644 --- a/README-uk.md +++ b/README-uk.md @@ -337,7 +337,7 @@ Той факт, що щось може бути написано на Bash, зовсім не означає, що воно має бути на ньому написано. ;) -## Лицензія +## Ліцензія [![Creative Commons License](https://i.creativecommons.org/l/by-sa/4.0/88x31.png)](http://creativecommons.org/licenses/by-sa/4.0/) From 7891b6a365dfad420d7d6f9fabbf6308208c1366 Mon Sep 17 00:00:00 2001 From: stepan Date: Thu, 3 Dec 2015 22:52:30 +0200 Subject: [PATCH 21/22] + awesome-osx-command-line to others source --- README-uk.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README-uk.md b/README-uk.md index d779a56..af750a1 100644 --- a/README-uk.md +++ b/README-uk.md @@ -326,6 +326,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. - [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. From a682762957bbd6b0686b00d1399ea274bac581e5 Mon Sep 17 00:00:00 2001 From: yasuhiroki Date: Mon, 7 Dec 2015 23:20:36 +0900 Subject: [PATCH 22/22] ja: fixed kanji. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit "遅れる" means, be delayed. "送れる" means, can send. --- README-ja.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README-ja.md b/README-ja.md index e52c600..8fecfd9 100644 --- a/README-ja.md +++ b/README-ja.md @@ -87,7 +87,7 @@ - `pgrep`や`pkill`で、プロセス名で検索したりシグナルを送れる(`-f`も便利)。 -- プロセスに遅れる色々なシグナルを知っておこう。例えば、プロセスをサスペンドするには`kill -STOP [pid]`を使う。全種類見るなら、`man 7 signal`。 +- プロセスに送れる色々なシグナルを知っておこう。例えば、プロセスをサスペンドするには`kill -STOP [pid]`を使う。全種類見るなら、`man 7 signal`。 - バックグラウンドプロセスをずっと実行し続けたいなら`nohup`あるいは`disown`を使おう。