From 8faadd48977746e33ffd2e4a047141e4cef0e4c8 Mon Sep 17 00:00:00 2001 From: Diomidis Spinellis Date: Tue, 26 Jan 2016 11:08:46 +0200 Subject: [PATCH 01/19] Add short Microsoft Windows section --- README.md | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index ef25da8..e994e74 100644 --- a/README.md +++ b/README.md @@ -14,6 +14,7 @@ - [One-liners](#one-liners) - [Obscure but useful](#obscure-but-useful) - [OS X only](#os-x-only) +- [Windows](#windows) - [More resources](#more-resources) - [Disclaimer](#disclaimer) @@ -35,7 +36,7 @@ but it has since moved to GitHub, where people more talented than the original a Scope: - This guide is both for beginners and the experienced. The goals are *breadth* (everything important), *specificity* (give concrete examples of the most common case), and *brevity* (avoid things that aren't essential or digressions you can easily look up elsewhere). Every tip is essential in some situation or significantly saves time over alternatives. -- This is written for Linux, with the exception of the "[OS X only](#os-x-only)" section. Many of the other items apply or can be installed on other Unices or OS X (or even Cygwin). +- This is written for Linux, with the exception of the "[OS X only](#os-x-only)" and "[Windows](#windows)" sections. Many of the other items apply or can be installed on other Unices or OS X (or even Cygwin). - The focus is on interactive Bash, though many tips apply to other shells and to general Bash scripting. - It includes both "standard" Unix commands as well as ones that require special package installs -- so long as they are important enough to merit inclusion. @@ -507,6 +508,23 @@ These are items relevant *only* on OS X. - To get OS X release information, use `sw_vers`. +## Windows + +- Access the power of the Unix shell under Microsoft Windows by installing Cygwin. Most of the things described in this document will work out of the box. + +- Install additional Unix programs with the Cygwin's package manager. + +- Use `mintty` as your command-line window. + +- Access the Windows clipboard through `/dev/clipboard`. + +- Run `cygstart` to open an arbitrary file through its registered application. + +- Access the Windows registry with `regtool`. + +- Convert between Cygwin and Windows-style file paths with `cygpath`. This is most useful in scripts that invoke Windows programs. + +- You can perform and script most Windows system administration tasks from the command line by learning and using `wmic`. ## More resources From 6f752fa251b5df1868cfd8343ea1a0630bed56bd Mon Sep 17 00:00:00 2001 From: Diomidis Spinellis Date: Wed, 27 Jan 2016 00:25:56 +0200 Subject: [PATCH 02/19] Add "only" to Windows section title --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index e994e74..a1ffb25 100644 --- a/README.md +++ b/README.md @@ -14,7 +14,7 @@ - [One-liners](#one-liners) - [Obscure but useful](#obscure-but-useful) - [OS X only](#os-x-only) -- [Windows](#windows) +- [Windows only](#windows-only) - [More resources](#more-resources) - [Disclaimer](#disclaimer) @@ -36,7 +36,7 @@ but it has since moved to GitHub, where people more talented than the original a Scope: - This guide is both for beginners and the experienced. The goals are *breadth* (everything important), *specificity* (give concrete examples of the most common case), and *brevity* (avoid things that aren't essential or digressions you can easily look up elsewhere). Every tip is essential in some situation or significantly saves time over alternatives. -- This is written for Linux, with the exception of the "[OS X only](#os-x-only)" and "[Windows](#windows)" sections. Many of the other items apply or can be installed on other Unices or OS X (or even Cygwin). +- This is written for Linux, with the exception of the "[OS X only](#os-x-only)" and "[Windows only](#windows-only)" sections. Many of the other items apply or can be installed on other Unices or OS X (or even Cygwin). - The focus is on interactive Bash, though many tips apply to other shells and to general Bash scripting. - It includes both "standard" Unix commands as well as ones that require special package installs -- so long as they are important enough to merit inclusion. @@ -508,7 +508,7 @@ These are items relevant *only* on OS X. - To get OS X release information, use `sw_vers`. -## Windows +## Windows only - Access the power of the Unix shell under Microsoft Windows by installing Cygwin. Most of the things described in this document will work out of the box. From 82d8626287eae6e89cfec111193ecdf52baa566d Mon Sep 17 00:00:00 2001 From: Diomidis Spinellis Date: Wed, 27 Jan 2016 08:47:33 +0200 Subject: [PATCH 03/19] Summarize Cygwin and Windows path mapping Addresses: #issuecomment-175369010 --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index a1ffb25..c406e8f 100644 --- a/README.md +++ b/README.md @@ -522,7 +522,7 @@ These are items relevant *only* on OS X. - Access the Windows registry with `regtool`. -- Convert between Cygwin and Windows-style file paths with `cygpath`. This is most useful in scripts that invoke Windows programs. +- Note that a `C:\` Windows drive path becomes `/cygdrive/c` under Cygwin, and that Cygwin's `/` appears under `C:\cygwin` on Windows. Convert between Cygwin and Windows-style file paths with `cygpath`. This is most useful in scripts that invoke Windows programs. - You can perform and script most Windows system administration tasks from the command line by learning and using `wmic`. From 448887b781cdf5ae6ddb9108e07e4ad37ee93ce2 Mon Sep 17 00:00:00 2001 From: Diomidis Spinellis Date: Wed, 27 Jan 2016 08:56:05 +0200 Subject: [PATCH 04/19] Add Cygwin link Addresses: #issuecomment-175369010 --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index c406e8f..77fcd62 100644 --- a/README.md +++ b/README.md @@ -510,7 +510,7 @@ These are items relevant *only* on OS X. ## Windows only -- Access the power of the Unix shell under Microsoft Windows by installing Cygwin. Most of the things described in this document will work out of the box. +- Access the power of the Unix shell under Microsoft Windows by installing [Cygwin](https://cygwin.com/). Most of the things described in this document will work out of the box. - Install additional Unix programs with the Cygwin's package manager. From d6dd7ce5d8dcb9caccb51d898c340267503937ab Mon Sep 17 00:00:00 2001 From: Timur M Date: Tue, 9 Feb 2016 01:59:52 +0300 Subject: [PATCH 05/19] =?UTF-8?q?Break=20the=20list=20of=20package=20manag?= =?UTF-8?q?ers=20=E2=80=93=20finishing?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The change in the list of package managers has been reproduced in those translations which used the original delimeter (forward slash, "/"). --- README-cs.md | 2 +- README-el.md | 2 +- README-es.md | 2 +- README-it.md | 2 +- README-ja.md | 2 +- README-pt.md | 2 +- README-ru.md | 2 +- README-sl.md | 2 +- README-uk.md | 2 +- README-zh-Hant.md | 2 +- README-zh.md | 2 +- 11 files changed, 11 insertions(+), 11 deletions(-) diff --git a/README-cs.md b/README-cs.md index fd7460a..48d9079 100644 --- a/README-cs.md +++ b/README-cs.md @@ -40,7 +40,7 @@ Rozsah: Poznámky: -- Pro udržení délky textu na jednu stranu, obsah je implicitně obsažen v odkazech. Jste dostatečně inteligentní aby jste si vyhledali více detailů z jiných zdrojů jakmile znáte příkaz či myšlenku na Googlu. Použijte `apt-get`/`yum`/`dnf`/`pacman`/`pip`/`brew` podle distribuce k instalaci nových progamů. +- Pro udržení délky textu na jednu stranu, obsah je implicitně obsažen v odkazech. Jste dostatečně inteligentní aby jste si vyhledali více detailů z jiných zdrojů jakmile znáte příkaz či myšlenku na Googlu. Použijte `apt-get`, `yum`, `dnf`, `pacman`, `pip` nebo `brew` podle distribuce k instalaci nových progamů. - Použijte [Explainshell](http://explainshell.com/) pro užitečné vysvětlení co příkazy, možnosti, roury a jiné dělají. diff --git a/README-el.md b/README-el.md index da277db..14e3d4a 100644 --- a/README-el.md +++ b/README-el.md @@ -42,7 +42,7 @@ Σημειώσεις: -- Για να κρατηθεί το παρόν σε μία σελίδα, υπάρχει περιεχόμενο που περιλαμβάνεται έμμεσα κάνοντας αναφορά σε αυτό. Είστε αρκετά έξυπνοι ώστε να αναζητήσετε περαιτέρω λεπτομέρειες αλλού, μόλις καταλάβετε την ιδέα ή την εντολή που χρειάζεται να αναζητήσετε στο Google. Χρησιμοποιήστε `apt-get`/`yum`/`dnf`/`pacman`/`pip`/`brew` (ανάλογα με την περίπτωση) για να εγκαταστήσετε νέα προγράμματα. +- Για να κρατηθεί το παρόν σε μία σελίδα, υπάρχει περιεχόμενο που περιλαμβάνεται έμμεσα κάνοντας αναφορά σε αυτό. Είστε αρκετά έξυπνοι ώστε να αναζητήσετε περαιτέρω λεπτομέρειες αλλού, μόλις καταλάβετε την ιδέα ή την εντολή που χρειάζεται να αναζητήσετε στο Google. Χρησιμοποιήστε `apt-get`, `yum`, `dnf`, `pacman`, `pip` ή `brew` (ανάλογα με την περίπτωση) για να εγκαταστήσετε νέα προγράμματα. - Χρησιμοποιήστε [Explainshell](http://explainshell.com/) για να έχετε μια χρήσιμη ανάλυση του τι κάνουν κάνουν εντολές, επιλογές, σωληνώσεις κλπ. ## Τα βασικά diff --git a/README-es.md b/README-es.md index 466f891..f2e6cbd 100644 --- a/README-es.md +++ b/README-es.md @@ -41,7 +41,7 @@ Alcance: Notas: -- Para mantener esto en una página, el contenido está incluido implícitamente por referencia. Eres lo suficientemente inteligente para consultar más detalles en otros lugares buscando en Google una vez conoces la idea o el comando. Usa `apt-get`/`yum`/`dnf`/`pacman`/`pip`/`brew` (según proceda) para instalar los nuevos programas. +- Para mantener esto en una página, el contenido está incluido implícitamente por referencia. Eres lo suficientemente inteligente para consultar más detalles en otros lugares buscando en Google una vez conoces la idea o el comando. Usa `apt-get`, `yum`, `dnf`, `pacman`, `pip` o `brew` (según proceda) para instalar los nuevos programas. - Usa [Explainshell](http://explainshell.com/) para obtener detalles de ayuda sobre que hacen los comandos, las opciones, las pipes, etc. diff --git a/README-it.md b/README-it.md index 9662262..c8ba329 100644 --- a/README-it.md +++ b/README-it.md @@ -39,7 +39,7 @@ Obiettivi: 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. +- 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` o `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. diff --git a/README-ja.md b/README-ja.md index f3cb4d6..8d7820f 100644 --- a/README-ja.md +++ b/README-ja.md @@ -34,7 +34,7 @@ 注意 : -- 1ページ内に収めるために、内容には暗黙的に書かれていることがある。ここで取りかかりを知ったりコマンドが分かれば、詳細をどこかで調べたりするくらいはできるだろう。新しいプログラムをインストールするには、`apt-get`/`yum`/`dnf`/`pacman`/`pip`/`brew`(どれか適したもの)を使おう。 +- 1ページ内に収めるために、内容には暗黙的に書かれていることがある。ここで取りかかりを知ったりコマンドが分かれば、詳細をどこかで調べたりするくらいはできるだろう。新しいプログラムをインストールするには、`apt-get`、`yum`、`dnf`、`pacman`、`pip`、`brew`(どれか適したもの)を使おう。 - コマンドやオプション、パイプを分解して理解する手助けに、[Explainshell](http://explainshell.com/)を使おう。 ## 基本 diff --git a/README-pt.md b/README-pt.md index d436a0a..b0cb8a2 100644 --- a/README-pt.md +++ b/README-pt.md @@ -34,7 +34,7 @@ Escopo: Notas: -- Para manter este guia em uma única página, o conteúdo implícito será incluído por referência. Você é competente o suficiente para verificar mais detalhes em outros lugares, desde que você já tenha entendido a ideia ou saiba o que procurar no Google. Use `apt-get`/`yum`/`dnf`/`pacman`/`pip`/`brew` (quando adequado) para instalar novos programas. +- Para manter este guia em uma única página, o conteúdo implícito será incluído por referência. Você é competente o suficiente para verificar mais detalhes em outros lugares, desde que você já tenha entendido a ideia ou saiba o que procurar no Google. Use `apt-get`, `yum`, `dnf`, `pacman`, `pip` ou `brew` (quando adequado) para instalar novos programas. - Use [Explainshell](http://explainshell.com/) para encontrar informações úteis sobre o que fazem os comandos, as opções, pipes e etc. diff --git a/README-ru.md b/README-ru.md index 5b26524..6e298e8 100644 --- a/README-ru.md +++ b/README-ru.md @@ -38,7 +38,7 @@ Заметки: -- Для того, чтобы руководство оставалось одностраничным, вся информация вставлена прямо сюда. Вы достаточно умные для того, чтобы самостоятельно изучить вопрос более детально в другом месте. Используйте `apt-get`/`yum`/`dnf`/`pacman`/`pip`/`brew` (в зависимости от вашей системы управления пакетами) для установки новых программ. +- Для того, чтобы руководство оставалось одностраничным, вся информация вставлена прямо сюда. Вы достаточно умные для того, чтобы самостоятельно изучить вопрос более детально в другом месте. Используйте `apt-get`, `yum`, `dnf`, `pacman`, `pip` или `brew` (в зависимости от вашей системы управления пакетами) для установки новых программ. - На [Explainshell](http://explainshell.com/) можно найти простое и подробное объяснение того, что такое команды, флаги, пайпы и т.д. diff --git a/README-sl.md b/README-sl.md index 82079b6..a1be039 100644 --- a/README-sl.md +++ b/README-sl.md @@ -40,7 +40,7 @@ Obseg: Opombe: -- Da se obdrži to na eni strani, je vsebina implicitno vključena z referencami. Ste dovolj pametni, da poiščete več podrobnosti drugje, ko enkrat poznate idejo ali ukaz za iskanje na Google-u. Uporabite `apt-get`/`yum`/`dnf`/`pacman`/`pip`/`brew` (kot je ustrezno), da namestite nove programe. +- Da se obdrži to na eni strani, je vsebina implicitno vključena z referencami. Ste dovolj pametni, da poiščete več podrobnosti drugje, ko enkrat poznate idejo ali ukaz za iskanje na Google-u. Uporabite `apt-get`, `yum`, `dnf`, `pacman`, `pip` ali `brew` (kot je ustrezno), da namestite nove programe. - Uporabite [Explainshell](http://explainshell.com/), da dobite uporabne razčlenitve, kaj ukazi, opcije, cevi itd. naredijo. diff --git a/README-uk.md b/README-uk.md index 4d4166e..2304b28 100644 --- a/README-uk.md +++ b/README-uk.md @@ -38,7 +38,7 @@ Нотатки: -- Що б все вміщалось на одній сторінці, вся інформація вставлена прямо тут. Ви досить розумні для того, щоб самостійно вивчити питання більш детально в іншому місці. Використовуйте `apt-get`/`yum`/`dnf`/`pacman`/`pip`/`brew` (залежно від вашої системи управління пакетами) для установки нових програм. +- Що б все вміщалось на одній сторінці, вся інформація вставлена прямо тут. Ви досить розумні для того, щоб самостійно вивчити питання більш детально в іншому місці. Використовуйте `apt-get`, `yum`, `dnf`, `pacman`, `pip` та `brew` (залежно від вашої системи управління пакетами) для установки нових програм. - На [Explainshell](http://explainshell.com/) можна знайти просте і докладне пояснення того, що таке команди, їх опції, пайпи(pipes(*|*)) і т.д. diff --git a/README-zh-Hant.md b/README-zh-Hant.md index d6f6f50..b596421 100644 --- a/README-zh-Hant.md +++ b/README-zh-Hant.md @@ -39,7 +39,7 @@ 注意事項: -- 為了能在一頁內展示盡量多的東西,一些具體的資訊會被間接的包含在引用頁裡。聰明機智的你如果掌握了使用 Google 搜尋引擎的基本方法與命令,那麼你將可以查閱到更多的詳細資訊。使用`apt-get`/`yum`/`dnf`/`pacman`/`pip`/`brew`(以及其它合適的包管理器)來安裝新程式。 +- 為了能在一頁內展示盡量多的東西,一些具體的資訊會被間接的包含在引用頁裡。聰明機智的你如果掌握了使用 Google 搜尋引擎的基本方法與命令,那麼你將可以查閱到更多的詳細資訊。使用`apt-get`,`yum`,`dnf`,`pacman`,`pip` 或`brew`(以及其它合適的包管理器)來安裝新程式。 - 使用 [Explainshell](http://explainshell.com/) 去獲取相關命令、參數、管道等解釋。 diff --git a/README-zh.md b/README-zh.md index d1ce094..8d8fe15 100644 --- a/README-zh.md +++ b/README-zh.md @@ -39,7 +39,7 @@ 注意事项: -- 为了能在一页内展示尽量多的东西,一些具体的信息会被间接的包含在引用页里。聪明机智的你如果掌握了使用 Google 搜索引擎的基本思路与命令,那么你将可以查阅到更多的详细信息。使用 `apt-get`/`yum`/`dnf`/`pacman`/`pip`/`brew`(以及其它合适的包管理器)来安装新程序。 +- 为了能在一页内展示尽量多的东西,一些具体的信息会被间接的包含在引用页里。聪明机智的你如果掌握了使用 Google 搜索引擎的基本思路与命令,那么你将可以查阅到更多的详细信息。使用 `apt-get`,`yum`,`dnf`,`pacman`,`pip` 或 `brew`(以及其它合适的包管理器)来安装新程序。 - 使用 [Explainshell](http://explainshell.com/) 去获取相关命令、参数、管道等内容的解释。 From f8f812f8ad001a58afa9dbb46816ee71de8b3ae6 Mon Sep 17 00:00:00 2001 From: "Lakshmipathi.G" Date: Mon, 15 Feb 2016 01:33:59 +0530 Subject: [PATCH 06/19] nano editor for beginners --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 3283210..e4029af 100644 --- a/README.md +++ b/README.md @@ -71,6 +71,8 @@ Notes: - Learn to use `apt-get`, `yum`, `dnf` or `pacman` (depending on distro) to find and install packages. And make sure you have `pip` to install Python-based command-line tools (a few below are easiest to install via `pip`). +- If you are a newcomer use `Nano` text editor, its the easiest to learn compared to `Vim` and `Emcas`. + ## Everyday use From 4e1abd4391ed786a35f80cbaa704b7bd0a19768c Mon Sep 17 00:00:00 2001 From: "Lakshmipathi.G" Date: Mon, 15 Feb 2016 01:40:37 +0530 Subject: [PATCH 07/19] basic calculator --- README.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/README.md b/README.md index e4029af..f62cca9 100644 --- a/README.md +++ b/README.md @@ -185,6 +185,11 @@ Notes: - For running a command with privileges, use `sudo` (for root) or `sudo -u` (for another user). Use `su` or `sudo bash` to actually run a shell as that user. Use `su -` to simulate a fresh login as root or another user. +- For a basic calculator (and of course access to Python in general), use `python` interpreter. For example, +``` +>>> 2+3 +5 +``` ## Processing files and data From f4544843b279ab60522628fced4b2f17ed5e34ee Mon Sep 17 00:00:00 2001 From: "Lakshmipathi.G" Date: Mon, 15 Feb 2016 01:48:01 +0530 Subject: [PATCH 08/19] prefer rsync over scp --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index f62cca9..359f5f5 100644 --- a/README.md +++ b/README.md @@ -244,6 +244,7 @@ Notes: ```sh mkdir empty && rsync -r --delete empty/ some-dir && rmdir some-dir ``` +Also use `rsync` instead of `scp`, so that after network interruption you resume the file transfer rather than restarting from scratch. - Use `shuf` to shuffle or select random lines from a file. From a38a24a1ed4bcfdeb1c2b1a8c07687b030fefde6 Mon Sep 17 00:00:00 2001 From: "Lakshmipathi.G" Date: Mon, 15 Feb 2016 02:00:50 +0530 Subject: [PATCH 09/19] fix typo: Emacs not Emcas --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 359f5f5..8958ee1 100644 --- a/README.md +++ b/README.md @@ -71,7 +71,7 @@ Notes: - Learn to use `apt-get`, `yum`, `dnf` or `pacman` (depending on distro) to find and install packages. And make sure you have `pip` to install Python-based command-line tools (a few below are easiest to install via `pip`). -- If you are a newcomer use `Nano` text editor, its the easiest to learn compared to `Vim` and `Emcas`. +- If you are a newcomer use `Nano` text editor, it's the easiest to learn compared to `Vim` and `Emacs`. ## Everyday use From e64c2f3c09dc8f5810e3c4f2e8e7117038f2eda9 Mon Sep 17 00:00:00 2001 From: "Lakshmipathi.G" Date: Mon, 15 Feb 2016 02:07:52 +0530 Subject: [PATCH 10/19] Verify disk space with lsof --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 8958ee1..69a91ea 100644 --- a/README.md +++ b/README.md @@ -312,6 +312,8 @@ Also use `rsync` instead of `scp`, so that after network interruption you resume - Use `dmesg` whenever something's acting really funny (it could be hardware or driver issues). +- If you delete a file and it doesn't free up expected disk space as reported by `du`, check whether the file is in use by a process: +`lsof | grep deleted | grep "filename-of-my-big-file"` ## One-liners From f8fc819af23bfb6469926a07f7f4dde17a41053f Mon Sep 17 00:00:00 2001 From: "Lakshmipathi.G" Date: Mon, 15 Feb 2016 02:11:02 +0530 Subject: [PATCH 11/19] 128K limit on commandline --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 69a91ea..b7bef5b 100644 --- a/README.md +++ b/README.md @@ -315,6 +315,8 @@ Also use `rsync` instead of `scp`, so that after network interruption you resume - If you delete a file and it doesn't free up expected disk space as reported by `du`, check whether the file is in use by a process: `lsof | grep deleted | grep "filename-of-my-big-file"` +- Know about the [128K limit](https://wiki.debian.org/CommonErrorMessages/ArgumentListTooLong) on command lines. This "Argument list too long" error is common when wildcard matching large numbers of files. (When this happens alternatives like `find` and `xargs` may help.) + ## One-liners A few examples of piecing together commands: From b1ad68b2151c9b1da6277a20da8402dcdb01d0dd Mon Sep 17 00:00:00 2001 From: "Lakshmipathi.G" Date: Mon, 15 Feb 2016 02:15:51 +0530 Subject: [PATCH 12/19] chattr to protect accidental file delete --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index b7bef5b..8910a5c 100644 --- a/README.md +++ b/README.md @@ -191,6 +191,9 @@ Notes: 5 ``` +- File attributes are settable via `chattr` and offer an alternative, lower-level alternative to file permissions. For example, to protect accidental file deletion the immutable flag: `sudo chattr +i /critical/directory/or/file` + + ## Processing files and data - To locate a file by name in the current directory, `find . -iname '*something*'` (or similar). To find a file anywhere by name, use `locate something` (but bear in mind `updatedb` may not have indexed recently created files). From fb7d95ea97f52403de20b5ce17a29b401a989389 Mon Sep 17 00:00:00 2001 From: "Lakshmipathi.G" Date: Mon, 15 Feb 2016 02:18:34 +0530 Subject: [PATCH 13/19] save and restore file permissions --- README.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/README.md b/README.md index 8910a5c..769f767 100644 --- a/README.md +++ b/README.md @@ -193,6 +193,12 @@ Notes: - File attributes are settable via `chattr` and offer an alternative, lower-level alternative to file permissions. For example, to protect accidental file deletion the immutable flag: `sudo chattr +i /critical/directory/or/file` +- Use `getfacl` and `setfcle` to save and restore file permissions. For example: +```sh + getfacl -R /some/path > permissions.txt + setfacl --restore=permissions.txt +``` + ## Processing files and data From 0ee468155b4ad10447c6d72ad1f68cbf97f0cdc1 Mon Sep 17 00:00:00 2001 From: "Lakshmipathi.G" Date: Mon, 15 Feb 2016 02:22:42 +0530 Subject: [PATCH 14/19] Fix for review comments --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 769f767..3dc5d5c 100644 --- a/README.md +++ b/README.md @@ -191,9 +191,9 @@ Notes: 5 ``` -- File attributes are settable via `chattr` and offer an alternative, lower-level alternative to file permissions. For example, to protect accidental file deletion the immutable flag: `sudo chattr +i /critical/directory/or/file` +- File attributes are settable via `chattr` and offer a lower-level alternative to file permissions. For example, to protect against accidental file deletion the immutable flag: `sudo chattr +i /critical/directory/or/file` -- Use `getfacl` and `setfcle` to save and restore file permissions. For example: +- Use `getfacl` and `setfacl` to save and restore file permissions. For example: ```sh getfacl -R /some/path > permissions.txt setfacl --restore=permissions.txt From 6b13ea552da86236e3b54ac3524e0e9fdf531dd1 Mon Sep 17 00:00:00 2001 From: "Lakshmipathi.G" Date: Tue, 16 Feb 2016 16:55:50 +0530 Subject: [PATCH 15/19] Remove nano tip --- README.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/README.md b/README.md index 3dc5d5c..b1c2685 100644 --- a/README.md +++ b/README.md @@ -71,8 +71,6 @@ Notes: - Learn to use `apt-get`, `yum`, `dnf` or `pacman` (depending on distro) to find and install packages. And make sure you have `pip` to install Python-based command-line tools (a few below are easiest to install via `pip`). -- If you are a newcomer use `Nano` text editor, it's the easiest to learn compared to `Vim` and `Emacs`. - ## Everyday use From 5440364e800f4b46ec21d7afb6f3a129e7c79ce3 Mon Sep 17 00:00:00 2001 From: mkwardakov Date: Tue, 16 Feb 2016 18:10:29 +0300 Subject: [PATCH 16/19] Synced russian version to original line-by-line to merge changes easly. Corrected a couple of words, removed a duplicate, joined few strings --- README-ru.md | 42 +++++++++++++++++++++--------------------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/README-ru.md b/README-ru.md index 426fb4d..63677d0 100644 --- a/README-ru.md +++ b/README-ru.md @@ -1,6 +1,7 @@ 🌍 *[Čeština](README-cs.md) ∙ [Ελληνικά](README-el.md) ∙ [English](README.md) ∙ [Español](README-es.md) ∙ [Français](README-fr.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) ∙ [繁體中文](README-zh-Hant.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) @@ -22,10 +23,12 @@ Продвинутому использованию командной строки зачастую не уделяют достаточного внимания. О терминале говорят как о чем-то мистическом. На самом же деле, это умение очевидно (и не очевидно) увеличивает Вашу продуктивность в работе. Данный документ является подборкой заметок и советов, которые я нашел для себя полезными, работая с командной строкой в Linux. Некоторые из их них – простые и очевидные, но некоторые - довольно сложные. И предназначены для решения конкретных задач. Это небольшая публикация, но если Вы уже знаете обо всем, что тут написано, и можете вспомнить, как это все использовать – вы много знаете! Этот гайд является результатом работы [большого числа авторов и переводчиков](AUTHORS.md) -Многое из того, что тут написано, [изначально](http://www.quora.com/What-are-some-lesser-known-but-useful-Unix-commands) +Многое из того, что тут написано, +[изначально](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, где обитают люди, которые талантливее меня и могут предлагать улучшения данной подборки. Если Вы заметили ошибки (во всех вариантах перевода), пожалуйста [**оставьте тикет или добавьте пулл-реквест**](CONTRIBUTING.md) (заранее изучив описание и посмотрев на уже созданнные тикеты и пулл-реквесты). +начав идею там, похоже, что стоит развить ее на Github, где обитают люди, которые талантливее меня и могут предлагать улучшения данной подборки. Если Вы заметили ошибки (во всех вариантах перевода), пожалуйста +[**оставьте тикет или добавьте пулл-реквест**](CONTRIBUTING.md) (заранее изучив описание и посмотрев на уже созданнные тикеты и пулл-реквесты). ## Описание @@ -39,9 +42,9 @@ Заметки: - Для того, чтобы руководство оставалось одностраничным, вся информация вставлена прямо сюда. Вы достаточно умные для того, чтобы самостоятельно изучить вопрос более детально в другом месте. Используйте `apt-get`, `yum`, `dnf`, `pacman`, `pip` или `brew` (в зависимости от вашей системы управления пакетами) для установки новых программ. - - На [Explainshell](http://explainshell.com/) можно найти простое и подробное объяснение того, что такое команды, флаги, пайпы и т.д. + ## Основы - Выучите основы Баша. Просто возьмите и напечатайте `man bash` в терминале и хотя бы просмотрите его; он довольно просто читается и он не очень большой. Другие шеллы тоже могут быть хороши, но Баш – мощная программа, и Баш всегда под рукой (использование *исключительно* zsh, fish и т.д., которые наверняка круто выглядят на Вашем ноутбуке во многом Вас ограничивает, например Вы не сможете использовать возможности этих шеллов на уже существующем сервере). @@ -68,15 +71,15 @@ - Обучитесь использованию системами управления пакетами `apt-get`, `yum`, `dnf` или `pacman` (в зависимости от дистрибутива) чтобы искать и устанавливать пакеты и обязательно имейте установленым `pip` для установки командных утилит, написанных на Python (некоторые из тех, что вы найдёте ниже, легче всего установить через `pip`). + ## Ежедневное использование - Используйте таб в Баше для автодополнения аргументов к командам и **ctrl-r** для поиска по истории командной строки (после нажатия введите запрос, нажмите **ctrl-r** снова чтобы натйи следующее сопадение, нажмите **Enter** для выполнения текущей найденной команды или стрелку вправо чтобы отредактировать команду). - Используйте **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` чтобы вернуться обратно). -- Для того, чтобы посмотреть историю, введите `history`. Также существует множество аббревиатур, например `!$` – последний аргумент, `!!` – последняя команда, хотя эти аббревиатуры часто заменяются шорткатами **ctrl-r** и **alt-.**. +- Если Вам нравятся кравиатурных сочетаниях vim, сделайте `set -o vi` (и `set -o emacs` чтобы вернуться обратно). - Для редактирования длинных команд после установки другого редактора (например `export EDITOR=vim`), нажатие **ctrl-x** **ctrl-e** откроет текущую команду в редакторе для многострочного редактирования. Или, как в vi, **escape-v**. @@ -94,6 +97,7 @@ cat hosts | xargs -I{} ssh root@{} hostname ``` + - `pstree -p` – полезный тип вывода дерева процессов. - Используйте `pgrep` или `pkill` для того, чтобы находить/слать сигналы к процессам по имени (`-f` помогает). @@ -124,7 +128,6 @@ trap "echo 'error: Script failed: see failed command above'" ERR ``` - - В Баш-скриптах подоболочки (subshells) – удобный способ группировать команды. Один из самых распространенных примеров – временно передвинуться в другую рабочую директорию, вот так: ```bash # do something in current dir @@ -197,7 +200,6 @@ - Для работы с YAML используйте [`shyaml`](https://github.com/0k/shyaml). - - Для работы с 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) (последний работает быстрее). Для остальных сервисов Амазона используйте стандартный [`aws`](https://github.com/aws/aws-cli) или улучшенный [`saws`](https://github.com/donnemartin/saws). @@ -231,7 +233,7 @@ 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) удалить большое количество файлов: +- Как говорит 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 ``` @@ -251,7 +253,6 @@ mkdir empty && rsync -r --delete empty/ some-dir && rmdir some-dir - Чтобы посмотреть разницу в бинарниках (дельта-кодирование) используйте `xdelta3`. - Для конвертирования кодировок используйте `iconv`. Для более сложных задач – `uconv`, он поддерживает некоторые сложные фичи Юникода. Например, эта команда переводит строки из файла в нижний регистр и убирает ударения (которые бывают, например, в испанском языке) - ```sh uconv -f utf-8 -t utf-8 -x '::Any-Lower; ::Any-NFD; [:Nonspacing Mark:] >; ::Any-NFC; ' < input.txt > output.txt ``` @@ -262,11 +263,10 @@ mkdir empty && rsync -r --delete empty/ some-dir && rmdir some-dir - Используйте `zless`, `zmore`, `zcat`, и `zgrep` для работы со сжатыми файлами. + ## Отладка системы -- Дле веб-отладки используйте `curl` и `curl -I`, или их альтернативу - `wget`. Также есть более современные альтернативы, например [`httpie`](https://github.com/jakubroztocil/httpie). - - +- Дле веб-отладки используйте `curl` и `curl -I`, или их альтернативу - `wget`. Также есть более современные утилиты, например [`httpie`](https://github.com/jakubroztocil/httpie). - Чтобы узнать текущее состояние процессора/диска можно использовать классический `top` (или улучшенную альтернативу `htop`) и `iostat`, `iotop`. Используйте `iostat -mxz 15` для получения бозовой информации о процессоре и детализированной о каждом разделе жесткого диска. @@ -304,6 +304,7 @@ mkdir empty && rsync -r --delete empty/ some-dir && rmdir some-dir - Используйте `dmesg`, когда что-то ведет себя совсем странно (например, железо или драйвера). + ## В одну строчку Давайте соберем все вместе и напишем несколько команд: @@ -323,17 +324,16 @@ mkdir empty && rsync -r --delete empty/ some-dir && rmdir some-dir awk '{ x += $3 } END { print x }' myfile ``` -- Если вам нужно посмотреть размеры и даты создания дерева файлов используйте: +- Чтобы посмотреть размеры и даты в дереве файлов, есть почти как рекурсивная `ls -l`, но легче читаемая, чем `ls -lR`: ```sh find . -type f -ls ``` -Это почти как рекурсивная `ls -l`, но выглядит более читабельно чем `ls -lR`: - -- Давайте представим, что у нас есть какой-то текстовый файл, например лог какого-то сервера и на каких-то строках появляется значение, строки с которым нам интересны. Например, `acct_id`. Давайте подсчитаем, сколько таких запросов в нашем логе: +- Скажем, у нас есть какой-то текстовый файл, например лог какого-то сервера и на каких-то строках появляется значение, строки с которым нам интересны. Например, `acct_id`. Давайте подсчитаем, сколько таких запросов в нашем логе: ```sh cat access.log | egrep -o 'acct_id=[0-9]+' | cut -d= -f2 | sort | uniq -c | sort -rn ``` + - Для непрерывного мониторинга измененний используйте `watch`, например, проверка измений файлов в директории: `watch -d -n 2 'ls -rtlh | tail'` или сетевых настроек во время устранения проблем с вашей wifi сетью: `watch -d -n 2 ifconfig`. - Запустите этот скрипт, чтобы получить случайный совет из этой инструкции: @@ -412,7 +412,7 @@ mkdir empty && rsync -r --delete empty/ some-dir && rmdir some-dir - `watch`: повторный запуск команды с выводом результата или подсветкой изменений -- `tac`: вывести файл посимвольно наоборот ("ласипан") +- `tac`: вывести файл построчно в обратном порядке - `shuf`: случайная выборка строк из файла @@ -498,7 +498,8 @@ mkdir empty && rsync -r --delete empty/ some-dir && rmdir some-dir - `lsmod` и `modinfo`: информация о модулях ядра. -- `fortune`, `ddate`, и `sl`: хм, не знаю, будут ли вам "полезные" веселые цитатки и поезда, пересекающие ваш терминал :) +- `fortune`, `ddate`, и `sl`: хм, не знаю, будут ли вам "полезны" веселые цитатки и поезда, пересекающие ваш терминал :) + ## OS X only @@ -518,6 +519,7 @@ mkdir empty && rsync -r --delete empty/ some-dir && rmdir some-dir - Чтобы получить информацию о версии OS X используйте `sw_vers`. + ## Больше информации по теме - [awesome-shell](https://github.com/alebcay/awesome-shell): Дополняемый список инструментов и ресурсов для командной строки. @@ -529,9 +531,7 @@ mkdir empty && rsync -r --delete empty/ some-dir && rmdir some-dir ## Дисклеймер -За небольшим исключением, весь код написан так, чтобы другие его смогли прочитать. - -Кому много дано, с того много и спрашивается. Тот факт, что что-то может быть написано на Баше, вовсе не означает, что оно должно быть на нём написано. ;) +За небольшим исключением, весь код написан так, чтобы другие его смогли прочитать. Кому много дано, с того много и спрашивается. Тот факт, что что-то может быть написано на Баше, вовсе не означает, что оно должно быть на нём написано. ;) ## Лицензия From 99e681db865086c761d3af65f3f3a4b6433b3cdd Mon Sep 17 00:00:00 2001 From: mkwardakov Date: Tue, 16 Feb 2016 18:22:32 +0300 Subject: [PATCH 17/19] typo --- README-ru.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README-ru.md b/README-ru.md index 63677d0..8b18db5 100644 --- a/README-ru.md +++ b/README-ru.md @@ -266,7 +266,7 @@ mkdir empty && rsync -r --delete empty/ some-dir && rmdir some-dir ## Отладка системы -- Дле веб-отладки используйте `curl` и `curl -I`, или их альтернативу - `wget`. Также есть более современные утилиты, например [`httpie`](https://github.com/jakubroztocil/httpie). +- Для веб-отладки используйте `curl` и `curl -I`, или их альтернативу - `wget`. Также есть более современные утилиты, например [`httpie`](https://github.com/jakubroztocil/httpie). - Чтобы узнать текущее состояние процессора/диска можно использовать классический `top` (или улучшенную альтернативу `htop`) и `iostat`, `iotop`. Используйте `iostat -mxz 15` для получения бозовой информации о процессоре и детализированной о каждом разделе жесткого диска. From c7d9d1478a62cdd675bf1cf618e695253fae4132 Mon Sep 17 00:00:00 2001 From: Joshua Levy Date: Tue, 16 Feb 2016 22:37:38 -0800 Subject: [PATCH 18/19] Rework ordering on #375 additions. --- README.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index 85bb455..ebe622e 100644 --- a/README.md +++ b/README.md @@ -184,20 +184,14 @@ Notes: - For running a command with privileges, use `sudo` (for root) or `sudo -u` (for another user). Use `su` or `sudo bash` to actually run a shell as that user. Use `su -` to simulate a fresh login as root or another user. +- Know about the [128K limit](https://wiki.debian.org/CommonErrorMessages/ArgumentListTooLong) on command lines. This "Argument list too long" error is common when wildcard matching large numbers of files. (When this happens alternatives like `find` and `xargs` may help.) + - For a basic calculator (and of course access to Python in general), use `python` interpreter. For example, ``` >>> 2+3 5 ``` -- File attributes are settable via `chattr` and offer a lower-level alternative to file permissions. For example, to protect against accidental file deletion the immutable flag: `sudo chattr +i /critical/directory/or/file` - -- Use `getfacl` and `setfacl` to save and restore file permissions. For example: -```sh - getfacl -R /some/path > permissions.txt - setfacl --restore=permissions.txt -``` - ## Processing files and data @@ -279,6 +273,13 @@ Also use `rsync` instead of `scp`, so that after network interruption you resume - Use `zless`, `zmore`, `zcat`, and `zgrep` to operate on compressed files. +- File attributes are settable via `chattr` and offer a lower-level alternative to file permissions. For example, to protect against accidental file deletion the immutable flag: `sudo chattr +i /critical/directory/or/file` + +- Use `getfacl` and `setfacl` to save and restore file permissions. For example: +```sh + getfacl -R /some/path > permissions.txt + setfacl --restore=permissions.txt +``` ## System debugging @@ -323,7 +324,6 @@ Also use `rsync` instead of `scp`, so that after network interruption you resume - If you delete a file and it doesn't free up expected disk space as reported by `du`, check whether the file is in use by a process: `lsof | grep deleted | grep "filename-of-my-big-file"` -- Know about the [128K limit](https://wiki.debian.org/CommonErrorMessages/ArgumentListTooLong) on command lines. This "Argument list too long" error is common when wildcard matching large numbers of files. (When this happens alternatives like `find` and `xargs` may help.) ## One-liners From 7124a1d070761ac6720791306f24a6b093325726 Mon Sep 17 00:00:00 2001 From: Joshua Levy Date: Tue, 16 Feb 2016 22:41:01 -0800 Subject: [PATCH 19/19] Two more small adjustments to #375. --- README.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index ebe622e..12536c5 100644 --- a/README.md +++ b/README.md @@ -186,7 +186,7 @@ Notes: - Know about the [128K limit](https://wiki.debian.org/CommonErrorMessages/ArgumentListTooLong) on command lines. This "Argument list too long" error is common when wildcard matching large numbers of files. (When this happens alternatives like `find` and `xargs` may help.) -- For a basic calculator (and of course access to Python in general), use `python` interpreter. For example, +- For a basic calculator (and of course access to Python in general), use the `python` interpreter. For example, ``` >>> 2+3 5 @@ -242,11 +242,10 @@ Notes: rename 's/\.bak$//' *.bak ``` -- As the man page says, `rsync` really is a fast and extraordinarily versatile file copying tool. It's known for synchronizing between machines but is equally useful locally. It also is among the [fastest ways](https://web.archive.org/web/20130929001850/http://linuxnote.net/jianingy/en/linux/a-fast-way-to-remove-huge-number-of-files.html) to delete large numbers of files: +- As the man page says, `rsync` really is a fast and extraordinarily versatile file copying tool. It's known for synchronizing between machines but is equally useful locally. When security restrictions allow, using `rsync` instead of `scp` allows recovery of a transfer without restarting from scratch. It also is among the [fastest ways](https://web.archive.org/web/20130929001850/http://linuxnote.net/jianingy/en/linux/a-fast-way-to-remove-huge-number-of-files.html) to delete large numbers of files: ```sh mkdir empty && rsync -r --delete empty/ some-dir && rmdir some-dir ``` -Also use `rsync` instead of `scp`, so that after network interruption you resume the file transfer rather than restarting from scratch. - Use `shuf` to shuffle or select random lines from a file.