diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index ab748b3..2a22622 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -2,6 +2,16 @@ This guide is a [collaborative effort](AUTHORS.md), based on the generous work of many contributors. +## Questions + +[![Ask a Question](https://img.shields.io/badge/%3f-Ask%20a%20Question-ff69b4.svg)](https://airtable.com/shrzMhx00YiIVAWJg) + +The simplest thing you can do to help is [**submit any questions you might have**](https://airtable.com/shrzMhx00YiIVAWJg). +The more the better. Questions help identify where the guide needs to be improved. + + +## Contributions + Contributions of all kinds, including corrections, additions, improvements, and translations, are welcome! We hope you'll join and help, in small ways or large. diff --git a/README-cs.md b/README-cs.md index e677f6e..070b559 100644 --- a/README-cs.md +++ b/README-cs.md @@ -262,15 +262,15 @@ Příklady: - Ladění Javy je odlišný šálek čaje, ale jednoduchý trik na Javu od Oraclu a některé jiné JVM je, že stále můžete použít `kill -3 ` a výpis zásobníku a haldy (včetně obecnějších detailů z **garbage collectoru**, které mohou být nesmírně informativní) bude zapsán do stderr/logs. Nástroje JDK jako `jps`, `jstat`, `jstack` a `jmap` jsou také užitečné, avšak [SJK tools](https://github.com/aragozin/jvm-tools) jsou více pokročilé. -- Použijte `mtr` jako lepší `traceroute` pro identifikování potíží se sítí. +- Použijte [`mtr`](http://www.bitwizard.nl/mtr/) jako lepší `traceroute` pro identifikování potíží se sítí. -- Při zjištování proč je disk plný, `ncdu` šetří čas oproti obvyklým příkazům jako `du /sh *`. +- Při zjištování proč je disk plný, [`ncdu`](https://dev.yorhel.nl/ncdu) šetří čas oproti obvyklým příkazům jako `du /sh *`. -- Ke zjištění, který socket nebo proces zahlcuje pásmo, zkuste `iftop` nebo `nethogs`. +- Ke zjištění, který socket nebo proces zahlcuje pásmo, zkuste [`iftop`](http://www.ex-parrot.com/~pdw/iftop/) nebo [`nethogs`](https://github.com/raboof/nethogs). - Nástroj `ab` (přibalený k Apachi) je užitečný pro rychlé a hrubé zkontrolování výkonosti webového serveru. Komplexnější měření umožňuje `siege`. -- Pro důslednější síťové ladění, `wireshark`, `tshark` nebo `ngrep` jsou to pravé. +- Pro důslednější síťové ladění, [`wireshark`](https://wireshark.org/), [`tshark`](https://www.wireshark.org/docs/wsug_html_chunked/AppToolstshark.html) nebo [`ngrep`](http://ngrep.sourceforge.net/) jsou to pravé. - Nezapomínejte na `strace` a `ltrace`. Mohou být nápomocné zejména pokud některý program selhává, zasekává se nebo padá a nevíte proč nebo pokud chcete mít obecnou představu o výkonu. Myslete na přepínač profilingu (`-c`) a schopnost připnout se k běžícímu procesu (`-p`). @@ -280,7 +280,7 @@ Příklady: - Používejte `/proc`. Je úžasně nápomocný v okamžicích, kdy ladíte živé problémy. Příklady: /proc/cpuinfo`, `/proc/meminfo`, `/proc/cmdline`, `/proc/xxx/cwd`, `/proc/xxx/exe`, `/proc/xxx/fd/`, `/proc/xxx/smaps` (kde `xxx` je id nebo pid procesu.). -- Když zjišťujete proč se něco v minulosti pokazilo, `sar` může být nedocenitelný. Ukazuje historické statistiky CPU, paměti, sítě, atd. +- Když zjišťujete proč se něco v minulosti pokazilo, [`sar`](http://sebastien.godard.pagesperso-orange.fr/) může být nedocenitelný. Ukazuje historické statistiky CPU, paměti, sítě, atd. - Pro hlubší systémovou a výkonostní analýzu se podívejte na `stap`([SystemTap](https://sourceware.org/systemtap/wiki)), [`perf`](https://en.wikipedia.org/wiki/Perf_(Linux)), a [`sysdig`](https://github.com/draios/sysdig). @@ -428,15 +428,15 @@ Pár příkladů na spojování příkazů: - `strace`: ladění systému -- `mtr`: vylepšení traceroute pro síťové ladění +- [`mtr`](http://www.bitwizard.nl/mtr/): vylepšení traceroute pro síťové ladění - `cssh`: vizuální souběžný shell - `rsync`: synchronizuje soubory a adresáře přes SSH nebo v lokálním systému souborů -- `wireshark` a `tshark`: zachytávání packetů a síťové ladění +- [`wireshark`](https://wireshark.org/) a [`tshark`](https://www.wireshark.org/docs/wsug_html_chunked/AppToolstshark.html): zachytávání packetů a síťové ladění -- `ngrep`: grep pro síťovou vrstvu +- [`ngrep`](http://ngrep.sourceforge.net/): grep pro síťovou vrstvu - `host` a `dig`: DNS vyhledávání @@ -460,9 +460,9 @@ Pár příkladů na spojování příkazů: - `id`: informace o identitě uživatele/skupiny -- `sar`: historické systémové statistiky +- [`sar`](http://sebastien.godard.pagesperso-orange.fr/): historické systémové statistiky -- `iftop` nebo `nethogs`: využití sítě pro proces nebo socket +- [`iftop`](http://www.ex-parrot.com/~pdw/iftop/) nebo [`nethogs`](https://github.com/raboof/nethogs): využití sítě pro proces nebo socket - `ss`: statistika socketů diff --git a/README-el.md b/README-el.md index 06bbff1..7fab5d3 100644 --- a/README-el.md +++ b/README-el.md @@ -273,7 +273,7 @@ mkdir empty && rsync -r --delete empty/ some-dir && rmdir some-dir - Ιδιότητες αρχείων μπορούν να οριστούν με την `chattr` και προσφέρει μία εναλλακτική για τα δικαιώματα των αρχείων σε χαμηλό επίπεδο. Για παράδειγμα, για να προστατευτείτε από κατά λάθος διαγραφή αρχείου χρησιμοποιήστε την επιλογή immutable: `sudo chattr +i /critical/directory/or/file` -- Χρησιμοποιήστε τις `getfacl` και `setfacl` για να αποθηκεύσετε και να επαναφέρετε δικαιώματα αρχείων. Για παράδειγμα: +- Χρησιμοποιήστε τις `getfacl` και `setfacl` για να αποθηκεύσετε και να επαναφέρετε δικαιώματα αρχείων. Για παράδειγμα: ```sh getfacl -R /some/path > permissions.txt setfacl --restore=permissions.txt @@ -293,15 +293,15 @@ mkdir empty && rsync -r --delete empty/ some-dir && rmdir some-dir - Η αποσφαλμάτωση συστημάτων Java είναι άλλη ιστορία, αλλά ένα απλό κόλπο για το JVM της Oracle και άλλων είναι να τρέξετε την εντολή `kill -3 ` και ένα πλήρες ίχνος στοίβας και περίληψη σωρού (συμπεριλαμβανομένων και λεπτομερειών που αφορούν τη συλλογή απορριμάτων σε γενιές, που μπορεί να είναι πολύ κατατοπιστικές) θα εμφανιστούν στο stderr/logs. Οι εντολές του JDK `jps`, `jstat`, `jstack`, `jmap` είναι χρήσιμες. [Τα εργαλεία SJK](https://github.com/aragozin/jvm-tools) είναι για πιο προχωρημένους. -- Χρησιμοποιήστε την `mtr` ως μια βελτίωση της traceroute για να ανιχνεύετε ζητήματα του δικτύου. +- Χρησιμοποιήστε την [`mtr`](http://www.bitwizard.nl/mtr/) ως μια βελτίωση της traceroute για να ανιχνεύετε ζητήματα του δικτύου. -- Για να δείτε γιατί ένας δίσκος είναι γεμάτος, η `ncdu` εξοικονομεί χρόνο σε σύγκριση με τις συνήθεις εντολές όπως `du -sh *`. +- Για να δείτε γιατί ένας δίσκος είναι γεμάτος, η [`ncdu`](https://dev.yorhel.nl/ncdu) εξοικονομεί χρόνο σε σύγκριση με τις συνήθεις εντολές όπως `du -sh *`. -- Για να βρείτε ποια δικτυακή σύνδεση ή διεργασία χρησιμοποιεί εύρος ζώνης, δοκιμάστε `iftop` ή `nethogs`. +- Για να βρείτε ποια δικτυακή σύνδεση ή διεργασία χρησιμοποιεί εύρος ζώνης, δοκιμάστε [`iftop`](http://www.ex-parrot.com/~pdw/iftop/) ή [`nethogs`](https://github.com/raboof/nethogs). - Το εργαλείο `ab` (έρχεται μαζί με Apache) βοηθά στον πρόχειρο έλεγχο της απόδοσης web server. Για πιο σύνθετο έλεγχο φόρτου, δοκιμάστε `siege`. -- Για πιο σοβαρή αποσφαλμάτωση δικτύου, `wireshark`, `tshark`, ή `ngrep`. +- Για πιο σοβαρή αποσφαλμάτωση δικτύου, [`wireshark`](https://wireshark.org/), [`tshark`](https://www.wireshark.org/docs/wsug_html_chunked/AppToolstshark.html), ή [`ngrep`](http://ngrep.sourceforge.net/). - Να γνωρίζετε για τις `strace` και `ltrace`. Αυτές μπορεί να φανούν χρήσιμες, όταν ένα πρόγραμμα αποτυγχάνει, κρεμάει ή σκάει και δε γνωρίζετε γιατί ή αν θέλετε να έχετε μία γενική ιδέα της απόδοσης. Σημειώστε την επιλογή μέτρησης (`-c`) και τη δυνατότητα να συνδέσετε σε μία διεργασία που εκτελείται (`-p`). @@ -311,7 +311,7 @@ mkdir empty && rsync -r --delete empty/ some-dir && rmdir some-dir - Χρησιμοποιήστε τον κατάλογο `/proc`. Είναι εκπληκτικά χρήσιμος ορισμένες φορές, όταν αποσφαλματώνετε ζωντανά προβλήματα. Παραδείγματα: `/proc/cpuinfo`, `/proc/meminfo`, `/proc/cmdline`, `/proc/xxx/cwd`, `/proc/xxx/exe`, `/proc/xxx/fd/`, `/proc/xxx/smaps` (όπου `xxx` είναι το id της διεργασίας ή pid). -- Όταν αποσφαλματώνετε κάτι που ήταν λάθος στο παρελθόν, η `sar` μπορεί να είναι πολύ χρήσιμη. Δείχνει ιστορικά στατιστικά για επεξεργαστή, μνήμη, δίκτυο κλπ. +- Όταν αποσφαλματώνετε κάτι που ήταν λάθος στο παρελθόν, η [`sar`](http://sebastien.godard.pagesperso-orange.fr/) μπορεί να είναι πολύ χρήσιμη. Δείχνει ιστορικά στατιστικά για επεξεργαστή, μνήμη, δίκτυο κλπ. - Για πιο εις βάθος ανάλυση συστήματος και απόδοσης, δείτε τις `stap` ([SystemTap](https://sourceware.org/systemtap/wiki)), [`perf`](https://en.wikipedia.org/wiki/Perf_(Linux))και [`sysdig`](https://github.com/draios/sysdig). @@ -319,7 +319,7 @@ mkdir empty && rsync -r --delete empty/ some-dir && rmdir some-dir - Χρησιμοποιήστε την `dmesg`, όποτε κάτι συμπεριφέρεται πραγματικά παράξενα (μπορεί να έχει να κάνει με υλικό ή με οδηγούς). -- Αν διαγράψετε ένα αρχείο και δεν απελευθερωθεί ο σύμφωνα με την `du` αναμενομένος χώρος στον δίσκο, ελέξτε αν το αρχείο χρησιμοποιείται από κάποια διεργασία: +- Αν διαγράψετε ένα αρχείο και δεν απελευθερωθεί ο σύμφωνα με την `du` αναμενομένος χώρος στον δίσκο, ελέξτε αν το αρχείο χρησιμοποιείται από κάποια διεργασία: `lsof | grep deleted | grep "filename-of-my-big-file"` @@ -439,15 +439,15 @@ mkdir empty && rsync -r --delete empty/ some-dir && rmdir some-dir - `strace`: αποσφαλμάτωση κλήσης συστήματος -- `mtr`: καλύτερο εργαλείο traceroute για αποσφαλμάτωση δικτύου +- [`mtr`](http://www.bitwizard.nl/mtr/): καλύτερο εργαλείο traceroute για αποσφαλμάτωση δικτύου - `cssh`: visual concurrent shell - `rsync`: συγχρονισμός αρχείων και καταλόγων μέσω SSH ή σε τοπικό σύστημα αρχείων -- `wireshark` και `tshark`: συλλογή πακέτων και αποσφαλμάτωση συστήματος +- [`wireshark`](https://wireshark.org/) και [`tshark`](https://www.wireshark.org/docs/wsug_html_chunked/AppToolstshark.html): συλλογή πακέτων και αποσφαλμάτωση συστήματος -- `ngrep`: grep για το επίπεδο δικτύου +- [`ngrep`](http://ngrep.sourceforge.net/): grep για το επίπεδο δικτύου - `host` και `dig`: αναζητήσεις DNS @@ -471,9 +471,9 @@ mkdir empty && rsync -r --delete empty/ some-dir && rmdir some-dir - `id`: πληροφορίες ταυτότητας χρήστη/ομάδας -- `sar`: ιστορικά στατιστικά συστήματος +- [`sar`](http://sebastien.godard.pagesperso-orange.fr/): ιστορικά στατιστικά συστήματος -- `iftop` ή `nethogs`: χρήση δικτύου ανά δικτυακή σύνδεση ή διεργασία +- [`iftop`](http://www.ex-parrot.com/~pdw/iftop/) ή [`nethogs`](https://github.com/raboof/nethogs): χρήση δικτύου ανά δικτυακή σύνδεση ή διεργασία - `ss`: στατιστικά ανά δικτυακή σύνδεση diff --git a/README-es.md b/README-es.md index d3e4dab..39281cf 100644 --- a/README-es.md +++ b/README-es.md @@ -267,15 +267,15 @@ mkdir empty && rsync -r --delete empty/ some-dir && rmdir some-dir - El sistema de depuración de Java es harina de otro costal, pero un truco simple en las JSM de Oracle y otros consta en que puedes ejecutar `kill -3 ` y una traza completa y un resumen del montículo "heap summary" (incluyendo del detalle de la colección de basura generacional, la cual puede ser altamente informativa) serán descargados al stderr/logs. Las herramientas `jps`, `jstat`, `jstack`, `jmap` del JDK son útiles. [SJK tools](https://github.com/aragozin/jvm-tools) son más avanzadas. -- Usa `mtr` como un mejor traceroute para identificar los problemas en la red. +- Usa [`mtr`](http://www.bitwizard.nl/mtr/) como un mejor traceroute para identificar los problemas en la red. -- Para examinar por qué el disco está lleno, `ncdu` ahorra tiempo en comparación con los comandos usuales como `du -sh *`. +- Para examinar por qué el disco está lleno, [`ncdu`](https://dev.yorhel.nl/ncdu) ahorra tiempo en comparación con los comandos usuales como `du -sh *`. -- Para encontrar cual socket o proceso está utilizando el ancho de banda, prueba `iftop` o `nethogs`. +- Para encontrar cual socket o proceso está utilizando el ancho de banda, prueba [`iftop`](http://www.ex-parrot.com/~pdw/iftop/) o [`nethogs`](https://github.com/raboof/nethogs). - La herramienta `ab` (viene con Apache) es útil para una verificación rápida del rendimiento de un servidor web. Para pruebas de carga más complejas prueba `siege`. -- Para una depuración mas seria de redes, `wireshark`, `tshark`, o `ngrep`. +- Para una depuración mas seria de redes, [`wireshark`](https://wireshark.org/), [`tshark`](https://www.wireshark.org/docs/wsug_html_chunked/AppToolstshark.html), o [`ngrep`](http://ngrep.sourceforge.net/). - Conoce acerca de `strace` y `ltrace`. Estas puede ser de utilidad si un programa está fallando, suspendido, o colgado, y no sabe por qué, o si quieres tener una idea general del rendimiento. Considera la opción de elaboración de perfiles (`-c`), y la habilidad de adjuntar a un proceso en ejecución (`-p`). @@ -285,7 +285,7 @@ mkdir empty && rsync -r --delete empty/ some-dir && rmdir some-dir - Usa `/proc`. Es extraordinariamente útil algunas veces cuando se depuran problemas en vivo. Ejemplos: `/proc/cpuinfo`, `/proc/xxx/cwd`, `/proc/meminfo`, `/proc/cmdline`, `/proc/xxx/exe`, `/proc/xxx/fd/`, `/proc/xxx/smaps` (donde `xxx` es el id o pid del proceso). -- Cuando se depura porque algo salió mal en el pasado, `sar` puede ser muy útil. Este muestra la estadística histórica en CPU, memoria, red, etc. +- Cuando se depura porque algo salió mal en el pasado, [`sar`](http://sebastien.godard.pagesperso-orange.fr/) puede ser muy útil. Este muestra la estadística histórica en CPU, memoria, red, etc. - Para sistemas y análisis de rendimiento de mayor profundidad, examina `stap` ([SystemTap](https://sourceware.org/systemtap/wiki)), [`perf`](https://en.wikipedia.org/wiki/Perf_(Linux)), y [`sysdig`](https://github.com/draios/sysdig). @@ -435,15 +435,15 @@ Algunos ejemplos de comandos reunidos: - `strace`: depuración de llamadas del sistema -- `mtr`: mejor traceroute para la depuración de la red +- [`mtr`](http://www.bitwizard.nl/mtr/): mejor traceroute para la depuración de la red - `cssh`: shell concurrente visual - `rsync`: sincronización de archivos y carpetas sobre SSH o en sistema de archivos locales -- `wireshark` y `tshark`: captura de paquetes y depuración de la red +- [`wireshark`](https://wireshark.org/) y [`tshark`](https://www.wireshark.org/docs/wsug_html_chunked/AppToolstshark.html): captura de paquetes y depuración de la red -- `ngrep`: grep para la capa de la red +- [`ngrep`](http://ngrep.sourceforge.net/): grep para la capa de la red - `host` y `dig`: consultas DNS @@ -467,9 +467,9 @@ Algunos ejemplos de comandos reunidos: - `id`: información de identidad de usuario/grupo -- `sar`: estadísticas históricas del sistema +- [`sar`](http://sebastien.godard.pagesperso-orange.fr/): estadísticas históricas del sistema -- `iftop` o `nethogs`: utilización de la red por un socket o proceso +- [`iftop`](http://www.ex-parrot.com/~pdw/iftop/) o [`nethogs`](https://github.com/raboof/nethogs): utilización de la red por un socket o proceso - `ss`: estadísticas de socket @@ -496,7 +496,7 @@ Estos son puntos relevantes *únicamente* para OS X. - Copie la salida de cualquier comando en una aplicación de escritorio con `pbcopy` y pegue una entrada con `pbpaste`. -- Para activar la teacla Option en un OS X Terminal como una tecla alt (tal como se usan en los comandos más arriba como **alt-b**, **alt-f**, etc.), abre Preferencias -> Perfiles -> Teclado y selecciona "Usa Option como tecla Meta". +- Para activar la tecla Option en un OS X Terminal como una tecla alt (tal como se usan en los comandos más arriba como **alt-b**, **alt-f**, etc.), abre Preferencias -> Perfiles -> Teclado y selecciona "Usa Option como tecla Meta". - Para abrir un archivo con una aplicación de escritorio, use `open` o `open -a /Applications/Whatever.app`. @@ -527,7 +527,7 @@ Estos son puntos relevantes *únicamente* para Windows. - Puedes ejecutar y hacer scripts de la mayoría de las tareas administrativas del sistema de Windows desde la línea de comandos aprendiendo y usando `wmic`. -- Otra opción para obtener la apariencia y sensación de Unix en Windows es [Cash](ttps://github.com/dthree/cash). Ten en cuenta que muy pocos comandos de Unix y opciones de la línea de comandos están disponibles en este entorno. +- Otra opción para obtener la apariencia y sensación de Unix en Windows es [Cash](ttps://github.com/dthree/cash). Ten en cuenta que muy pocos comandos de Unix y opciones de la línea de comandos están disponibles en este entorno. - Una opción alternativa para tener herramientas de desarrollo GNU (algo como GCC) en windows es [MinGW](http://www.mingw.org/) y [MSYS](http://www.mingw.org/wiki/msys) su paquete, que proporciona utilidades tales como bash, gawk, make y grep. MSYS no tiene todas las características al compararse con Cygwin. MinGW es particularmente útil para crear ejecutables nativos de Windows de las herramientas Unix. diff --git a/README-fr.md b/README-fr.md index db17f49..26c227f 100644 --- a/README-fr.md +++ b/README-fr.md @@ -103,12 +103,12 @@ Par exemple **alt-.** fait défiler les arguments précédents et **alt-*** dév - Pour éditer de longues commandes, après avoir configuré votre éditeur (par exemple `export EDITOR=vim`), **ctrl-x** **ctrl-e** (**escape-v** dans le style vi) ouvre l'éditeur pour éditer la commande courante. -- Consultez les commandes récentes avec `history`. +- Consultez les commandes récentes avec `history`. Faites `!n` pour rappeler la commande numéro `n`. Il y a aussi beaucoup d'autres abréviations, les plus utiles étant probalement `!$` pour le dernier argument et `!!` pour la dernière commande (voir la section « HISTORY EXPANSION » de la page de manuel). Cependant, celles-ci peuvent être aisément remplacées par **ctrl-r** et **alt-.**. -- Placez-vous dans votre répertoire personnel avec `cd`. +- Placez-vous dans votre répertoire personnel avec `cd`. Accédez aux fichiers à partir de leurs chemins relatifs par rapport à votre répertoire personnel en préfixant ceux-ci avec `~` (p. ex. `~/.bashrc`). Dans les scripts shell, désignez le répertoire personnel par `$HOME`. @@ -380,16 +380,16 @@ En particulier, ayez à l'esprit que la valeur du « cache » est la mémoire ut - Le système de debogage de Java est une autre paire de manche, cependant un truc simple sur la JVM d'Oracle et quelques autres JVMs consiste à exécuter `kill -3 ` pour obtenir une trace complète des appels et une empreinte de la mémoire (y compris des détails sur le ramasse-miettes qui peuvent être hautement instructifs) dans stderr ou des fichiers journaux. Les commandes `jps`, `jstat`, `jstack` et `jmap` de la JDK sont utiles. L'[outil SJK](https://github.com/aragozin/jvm-tools) est plus avancé. -- Utilisez `mtr` comme un `traceroute` amélioré pour identifier les problèmes de réseau. +- Utilisez [`mtr`](http://www.bitwizard.nl/mtr/) comme un `traceroute` amélioré pour identifier les problèmes de réseau. -- Pour déterminer les raisons pour lesquelles un disque est plein, `ncdu` permet de gagner du temps par rapport aux commandes habituelles telles que `du -sh *`. +- Pour déterminer les raisons pour lesquelles un disque est plein, [`ncdu`](https://dev.yorhel.nl/ncdu) permet de gagner du temps par rapport aux commandes habituelles telles que `du -sh *`. -- Pour trouver quel socket ou processus utilise la bande passante, essayez `iftop` ou `nethogs`. +- Pour trouver quel socket ou processus utilise la bande passante, essayez [`iftop`](http://www.ex-parrot.com/~pdw/iftop/) ou [`nethogs`](https://github.com/raboof/nethogs). - L'outil `ab` (fourni avec Apache) est utile pour une vérification rapide et grossière des performances d'un serveur web. Pour des tests de charge plus complexes, essayez `siege`. -- Pour du debogage réseau plus sérieux : `wireshark`, `tshark` ou `ngrep`. +- Pour du debogage réseau plus sérieux : [`wireshark`](https://wireshark.org/), [`tshark`](https://www.wireshark.org/docs/wsug_html_chunked/AppToolstshark.html) ou [`ngrep`](http://ngrep.sourceforge.net/). - Sachez utiliser `strace` et `ltrace`. Ces commandes peuvent être utiles si un programme fonctionne mal ou plante et que vous n'en connaissez pas la raison, ou si vous voulez vous faire une idée des performances. @@ -402,7 +402,7 @@ Remarquez l'option de profilage (`-c`) et la possibilité de les attacher à un - Utilisez `/proc`. C'est parfois incroyablement utile pour résoudre des problèmes en live. Exemples : `/proc/cpuinfo`, `/proc/meminfo`, `/proc/cmdline`, `/proc/xxx/cwd`, `/proc/xxx/exe`, `/proc/xxx/fd`, `/proc/xxx/smaps` (où `xxx` est l'identifiant du processus ou pid). -- Pour comprendre pourquoi quelque chose a mal tourné antérieurement, `sar` peut-être très utile. +- Pour comprendre pourquoi quelque chose a mal tourné antérieurement, [`sar`](http://sebastien.godard.pagesperso-orange.fr/) peut-être très utile. Elle fournit un historique concernant l'usage du CPU, de la mémoire, du réseau, etc. - Pour une analyse plus approfondie du système et de ses performances, regardez `stap` ([SystemTap](https://sourceware.org/systemtap/wiki)), [`perf`](https://en.wikipedia.org/wiki/Perf_(Linux) et [`sysdig`](https://github.com/draios/sysdig). @@ -560,15 +560,15 @@ Si vous voulez un décompte du nombre de requêtes pour chaque valeur de `acct_i - `strace`: trace les appels système. -- `mtr`: un traceroute amélioré pour débugguer un réseau. +- [`mtr`](http://www.bitwizard.nl/mtr/): un traceroute amélioré pour débugguer un réseau. - `cssh` : visual concurrent shell - `rsync` : synchronise des fichiers et des dossiers via SSH ou localement. -- `wireshark` et `tshark`: capture de paquets et dépannage réseau. +- [`wireshark`](https://wireshark.org/) et [`tshark`](https://www.wireshark.org/docs/wsug_html_chunked/AppToolstshark.html): capture de paquets et dépannage réseau. -- `ngrep` : grep pour les couches réseaux. +- [`ngrep`](http://ngrep.sourceforge.net/) : grep pour les couches réseaux. - `host` et `dig`: interroge les serveurs DNS. @@ -592,9 +592,9 @@ Si vous voulez un décompte du nombre de requêtes pour chaque valeur de `acct_i - `id` : affiche les informations sur un utilisateur et ses groupes. -- `sar` : statistiques sur l'activité du système +- [`sar`](http://sebastien.godard.pagesperso-orange.fr/) : statistiques sur l'activité du système -- `iftop` ou `nethogs` : utilisation du réseau par un socket ou un processus. +- [`iftop`](http://www.ex-parrot.com/~pdw/iftop/) ou [`nethogs`](https://github.com/raboof/nethogs) : utilisation du réseau par un socket ou un processus. - `ss` : statistiques relatives aux sockets. @@ -647,7 +647,7 @@ En revanche, il n'est pas possible de lancer des programmes Windows depuis le *p - Installez [Cygwin](http://cygwin.com) pour bénéficier de la puissance du shell Unix sous Microsoft Windows. La majorité de ce qui est décrit dans ce document fonctionnera *out of the box*. -- Installez des programmes Unix supplémentaires à l'aide du gestionnaire de paquets de Cygwin. +- Installez des programmes Unix supplémentaires à l'aide du gestionnaire de paquets de Cygwin. - Utilisez `mintty` comme fenêtre de ligne de commande. diff --git a/README-it.md b/README-it.md index 221f4dd..313a3cc 100644 --- a/README-it.md +++ b/README-it.md @@ -270,15 +270,15 @@ mkdir empty && rsync -r --delete empty/ some-dir && rmdir some-dir - 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. +- Usa [`mtr`](http://www.bitwizard.nl/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 perché un disco viene visto pieno, [`ncdu`](https://dev.yorhel.nl/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`. +- Per capire quale socket o processo sta usando troppa banda prova [`iftop`](http://www.ex-parrot.com/~pdw/iftop/) o [`nethogs`](https://github.com/raboof/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`. +- Per un debug di rete più avanzato, dai uno sguardo a [`wireshark`](https://wireshark.org/), [`tshark`](https://www.wireshark.org/docs/wsug_html_chunked/AppToolstshark.html) o [`ngrep`](http://ngrep.sourceforge.net/). - 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`). @@ -288,7 +288,7 @@ mkdir empty && rsync -r --delete empty/ some-dir && rmdir some-dir - 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. +- Quando vuoi debuggare qualcosa che è andato storto in passato, [`sar`](http://sebastien.godard.pagesperso-orange.fr/) 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). @@ -443,15 +443,15 @@ Qualche esempio di combinazione di più comandi comandi: - `strace`: debug delle chiamate di sistema. -- `mtr`: un traceroute migliore per il debug di rete. +- [`mtr`](http://www.bitwizard.nl/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. +- [`wireshark`](https://wireshark.org/) e [`tshark`](https://www.wireshark.org/docs/wsug_html_chunked/AppToolstshark.html): packet capturing e debug di rete. -- `ngrep`: come grep... ma per il traffico di rete. +- [`ngrep`](http://ngrep.sourceforge.net/): come grep... ma per il traffico di rete. - `host` e `dig`: DNS lookup. @@ -475,9 +475,9 @@ Qualche esempio di combinazione di più comandi comandi: - `id`: user/group identity info. -- `sar`: cronologia di alcune statistiche del sistema. +- [`sar`](http://sebastien.godard.pagesperso-orange.fr/): cronologia di alcune statistiche del sistema. -- `iftop` o `nethogs`: uso della rete da parte di socket e processi. +- [`iftop`](http://www.ex-parrot.com/~pdw/iftop/) o [`nethogs`](https://github.com/raboof/nethogs): uso della rete da parte di socket e processi. - `ss`: statistiche sui socket. diff --git a/README-ja.md b/README-ja.md index 9dee638..3270eca 100644 --- a/README-ja.md +++ b/README-ja.md @@ -263,15 +263,15 @@ mkdir empty && rsync -r --delete empty/ some-dir && rmdir some-dir - Javaのシステムのデバッグはまた違う困ったところがあるが、Oracleあるいは他のJVMにも共通しているシンプルなトリックは、`kill -3 `でフルスタックトレースとヒープの概要が標準出力あるいはログにダンプされる(世代別GCの詳細も参考程度だが含まれている)。JDKの `jps`、 `jstat`、 `jstack`、 `jmap` も便利で、[SJK tools](https://github.com/aragozin/jvm-tools)はより高度なツールである。 -- 改良版tracerouteとして`mtr`を使ってネットワークの問題を調査しよう。 +- 改良版tracerouteとして[`mtr`](http://www.bitwizard.nl/mtr/)を使ってネットワークの問題を調査しよう。 -- ディスクがいっぱいになっている理由を調べるには、`ncdu`を使うと`du -sh *`より時間が節約できる。 +- ディスクがいっぱいになっている理由を調べるには、[`ncdu`](https://dev.yorhel.nl/ncdu)を使うと`du -sh *`より時間が節約できる。 -- 帯域を使っているのがどのソケットやプロセスなのかを見つけるには、`iftop`あるいは`nethogs`を試そう。 +- 帯域を使っているのがどのソケットやプロセスなのかを見つけるには、[`iftop`](http://www.ex-parrot.com/~pdw/iftop/)あるいは[`nethogs`](https://github.com/raboof/nethogs)を試そう。 - `ab`(Apacheに付属)は、Webサーバのパフォーマンスをざっくりチェックするのに便利。より複雑なテストには`siege`を試そう。 -- より確実なネットワークのデバッグは`wireshark`、`tshark`、`ngrep`。 +- より確実なネットワークのデバッグは[`wireshark`](https://wireshark.org/)、[`tshark`](https://www.wireshark.org/docs/wsug_html_chunked/AppToolstshark.html)、[`ngrep`](http://ngrep.sourceforge.net/)。 - `strace`と`ltrace`について知っておこう。プログラムの実行に失敗したりハングしたりクラッシュしたりして、その理由が分からない、あるいはパフォーマンスに関する一般的情報を知りたいなら、このツールが役立つはずだ。プロファイリングのオプション(`-c`)や起動中のプロセスにアタッチする機能(`-p`)も覚えておこう。 @@ -281,7 +281,7 @@ mkdir empty && rsync -r --delete empty/ some-dir && rmdir some-dir - `/proc`以下のファイルを使おう。今起こっている問題をデバッグするのには素晴らしく便利だ。例えば、`/proc/cpuinfo`、`/proc/meminfo`、`/proc/cmdline`、`/proc/xxx/cwd`、`/proc/xxx/ece`、`/proc/xxx/fd/`、`/proc/xxx/smaps` (ここで、`xxx`はプロセスIDまたはPIDを意味する)。 -- 過去に何か問題が起きたことの原因を探るなら、`sar`がとても便利。CPUやメモリ、ネットワークなどの過去の統計情報を見られる。 +- 過去に何か問題が起きたことの原因を探るなら、[`sar`](http://sebastien.godard.pagesperso-orange.fr/)がとても便利。CPUやメモリ、ネットワークなどの過去の統計情報を見られる。 - さらに深いシステムとパフォーマンスの分析には、`stap` ([SystemTap](https://sourceware.org/systemtap/wiki))、[`perf`](https://en.wikipedia.org/wiki/Perf_(Linux))、 [`sysdig`](https://github.com/draios/sysdig)。 @@ -434,15 +434,15 @@ mkdir empty && rsync -r --delete empty/ some-dir && rmdir some-dir - `strace`: システムコールのデバッグ -- `mtr`: ネットワークデバッグのためのより高機能なtraceroute +- [`mtr`](http://www.bitwizard.nl/mtr/): ネットワークデバッグのためのより高機能なtraceroute - `cssh`: ビジュアルな並列シェル - `rsync`: ファイルやフォルダをSSH経由またはローカルファイルシステム内で同期 -- `wireshark` と `tshark`: パケットキャプチャとネットワークデバッギング +- [`wireshark`](https://wireshark.org/) と [`tshark`](https://www.wireshark.org/docs/wsug_html_chunked/AppToolstshark.html): パケットキャプチャとネットワークデバッギング -- `ngrep`: ネットワーク層のgrep +- [`ngrep`](http://ngrep.sourceforge.net/): ネットワーク層のgrep - `host` と `dig`: DNS名前解決 @@ -466,9 +466,9 @@ mkdir empty && rsync -r --delete empty/ some-dir && rmdir some-dir - `id`: ユーザやグループの情報 -- `sar`: システム統計情報の履歴 +- [`sar`](http://sebastien.godard.pagesperso-orange.fr/): システム統計情報の履歴 -- `iftop` または `nethogs`: ソケットあるいはプロセスごとのネットワーク使用量 +- [`iftop`](http://www.ex-parrot.com/~pdw/iftop/) または [`nethogs`](https://github.com/raboof/nethogs): ソケットあるいはプロセスごとのネットワーク使用量 - `ss`: ソケットの統計情報 diff --git a/README-ko.md b/README-ko.md index c9af783..6566944 100644 --- a/README-ko.md +++ b/README-ko.md @@ -1,10 +1,14 @@ 🌍 *[Č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)* + # The Art of Command Line +[![Ask a Question](https://img.shields.io/badge/%3f-Ask%20a%20Question-ff69b4.svg)](https://airtable.com/shrzMhx00YiIVAWJg) + [![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) - [Basics](#basics) - [Everyday use](#everyday-use) @@ -13,75 +17,85 @@ - [One-liners](#one-liners) - [Obscure but useful](#obscure-but-useful) - [OS X only](#os-x-only) +- [Windows only](#windows-only) - [More resources](#more-resources) - [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) -커맨드라인을 능숙하게 다루는것은 도외시되거나 신비스럽게 여겨집니다. 하지만 커맨드라인은 명백하고도 미묘한 방법으로 엔지니어가 하는 작업의 유연성과 생산성을 향상시킵니다. 이 문서는 리눅스에서 작업을 하면서 찾은 노트와 팁들의 모음입니다. 몇 가지는 기초적이고, 몇가지는 상당히 구체적이며, 세련되고, 잘 알려지지 않은 것입니다. 이 문서는 그리 길지 않지만, 여기 있는 모든것을 사용할 수 있게 되고, 기억해낼 수 있게 된다면, 많은 것을 알게되는 것입니다. +커맨드 라인을 능숙하게 다루는 것은 도외시되거나 신비스럽게 여겨집니다. 하지만 커맨드 라인은 명백하고도 미묘한 방법으로 엔지니어가 하는 작업의 유연성과 생산성을 향상시킵니다. 이 문서는 리눅스에서 작업을 하면서 찾은 노트와 팁들의 모음입니다. 몇 가지는 기초적이고, 몇 가지는 상당히 구체적이며, 세련되고, 잘 알려지지 않은 것입니다. 이 문서는 그리 길지 않지만, 여기 있는 모든 것을 사용할 수 있게 되고, 기억해낼 수 있게 된다면, 많은 것을 알게 되는 것입니다. -여기있는 대부분의 것은 +이 문서는 [많은 작가와 번역가](AUTHORS.md)가 참여했습니다. +여기 중 일부 것은 [원래](http://www.quora.com/What-are-some-lesser-known-but-useful-Unix-commands) [Quora에](http://www.quora.com/What-are-the-most-useful-Swiss-army-knife-one-liners-on-Unix) [올라온](http://www.quora.com/What-are-some-time-saving-tips-that-every-Linux-user-should-know) 것입니다. -하지만 거기에 관심을 가지기보다, Github를 이용하는 것이 더 가치있는 것처럼 보입니다. 여기엔 더 재능있는 사람들이 손쉽게 개선안을 제안할 수 있는 곳이죠. 만약 문제가 있거나, 더 나아질 수 있는 내용이 보인다면, 이슈를 제출하거나 풀 리퀘스트를 보내주세요! (물론 meta 섹션과 이미 존재하는 풀 리퀘스트와 이슈를 봐주기를 바랍니다.) +하지만 거기에 관심을 가지기보다, Github를 이용하는 것이 더 가치 있는 것처럼 보입니다. 여기엔 더 재능 있는 사람들이 손쉽게 개선안을 제안할 수 있는 곳이죠. +맨드 란이에 관한 질문이 있으면 [**질문해 주세요**.](https://airtable.com/shrzMhx00YiIVAWJg) 오류가 있거나, 더 나아질 수 있는 내용이 보인다면, [**기여 해 주세요**!](/CONTRIBUTING.md) ## Meta 범위: -- 이 가이드는 초보자와 경험자 모두를 위한 것입니다. 목표는 범위(전부 다 중요합니다!), 구체성(대부분의 일반적인 케이스에 대한 구체적인 예제), 그리고 간결함(쉽게 마주치지 않는, 중요하지 않고, 지엽적인 것을 피함) 입니다. 모든 팁은 특정 상황에서 매우 중요하거나, 여러 대안들 사이에서의 시간을 확연하게 절약합니다. -- 이 문서는 리눅스를 위한것입니다. "[OS X only](#os-x-only)"세션을 제외하고 말이죠. 일부는 MacOS에서 똑같이 적용되지 않습니다(Cygwin에서 조차 말이죠). +- 이 가이드는 초보자와 경험자 모두를 위한 것 입니다. 목표는 범위(전부 다 중요합니다!), 구체성(대부분의 일반적인 케이스에 대한 구체적인 예제), 그리고 간결함(쉽게 마주치지 않는, 중요하지 않고, 지엽적인 것을 피함)입니다. 모든 팁은 특정 상황에서 매우 중요하거나, 여러 대안들 사이에서의 시간을 확연하게 절약합니다. +- 이 문서는 리눅스를 위한것입니다. "[OS X only](#os-x-only)", "[Windows only](#windows-only)" 섹션을 제외하고 말이죠. 그 밖의 대부분은 유닉스, OS X(심지어 Cygwin)에서도 적용하거나 설치할 수 있습니다. - 인터랙티브 Bash에 초점이 맞추어져있습니다만, 대부분의 팁은 다른 쉘이나, general Bash 스크립트에서도 동작합니다. -- 이 문서는 "스탠다드" 유닉스 커맨드와 특정 패키지 설치를 필요로 하는 것 둘 다 포함하고 있습니다. 여기서 다루는 스탠다드 커맨드와 특정 패키지에 대한 것은 포함될만큼 충분히 중요합니다. +- 이 문서는 "표준" 유닉스 커맨드와 특정 패키지 설치를 필요로 하는 것 둘 다 포함하고 있습니다. 여기서 다루는 표준 커맨드와 특정 패키지에 대한 것은 포함될 만큼 충분히 중요합니다. 노트: -- 이 문서를 한 파일로 유지하기 위해서, 컨텐츠들은 암시적인 레퍼런스 형태로 포함되어있습니다. 한 개념이나 명령어에 대해 알게 된 후에, 다른곳에서 그에대한 좀 더 자세한 정보를 찾을 수 있을만큼 당신은 똑똑할것입니다. `apt-get`, `yum`, `dnf`, `pacman`, `pip`, `brew` (혹은 적절한 다른 것)을 이용해 새 프로그램을 설치하세요. -- [Explainshell](http://explainshell.com/)을 이용해서 각각의 커맨드, 옵션, 파이프나 그 외 등등이 어떤것인지 알아보십시오. +- 이 문서를 한 파일로 유지하기 위해서, 콘텐츠들은 암시적인 레퍼런스 형태로 포함되어있습니다. 한 개념이나 명령어에 대해 알게 된 후에, 구글에서 그에 대한 좀 더 자세한 정보를 찾을 수 있을 만큼 당신은 똑똑할 것입니다. `apt-get`, `yum`, `dnf`, `pacman`, `pip`, `brew` (혹은 적절한 다른 것)을 이용해 새 프로그램을 설치하세요. +- [Explainshell](http://explainshell.com/)을 이용해서 각각의 커맨드, 옵션, 파이프나 그 외 등등이 어떤 것인지 알아보십시오. ## Basics -- 기본 Bash를 배우세요. 말하자면, 최소한 `man bash`를 실행하고, 전부를 훑어 보세요. 매뉴얼의 내용은 따라가기 쉬우며 그리 길지 않습니다. 다른 쉘들 또한 좋습니다만, Bash는 강력하고 언제나 사용가능합니다( *오직* zsh, fish, 그 외의 쉘만을 당신의 노트북에서 시도하면서 배우는 경우에는, 많은 경우 제한이 생길것입니다. 이미 존재하는 서버를 사용하는 것등의 일에서 말이죠). +- 기본 Bash를 배우세요. 말하자면, 최소한 `man bash`를 실행하고, 전부를 훑어보세요. 매뉴얼의 내용은 따라가기 쉬우며 그리 길지 않습니다. 다른 쉘들 또한 좋습니다만, Bash는 강력하고 언제나 사용 가능합니다(zsh, fish, 그 외의 쉘*만*을 배우는 것은, 노트북에서는 좋겠지만, 많은 경우 제한이 생길 것입니다. 이미 존재하는 서버를 사용하는 것등의 일에서 말이죠). -- 텍스트 기반 에디터를 최소한 하나정도 다룰 수 있게 배우세요. Vim(`Vi`)가 이상적입니다. 터미널에서 온갖 작업을 하는데 다른 실질적인 경쟁자가 없기 때문이죠(Emacs, 대형 IDE 또는 모던 힙스터스러운 에디터를 대부분의 작업에 사용한다고 해도 말이죠). +- 텍스트 기반 에디터를 최소한 하나 정도 다룰 수 있게 배우세요. Vim(`Vi`)가 이상적입니다. 터미널에서 온갖 작업을 하는데 다른 실질적인 경쟁자가 없기 때문이죠(Emacs, 대형 IDE 또는 모던 힙스터스러운 에디터를 대부분의 작업에 사용한다고 해도 말이죠). -- `man`을 이용해서 문서를 읽는 법을 배우세요(호기심 많은 사람을 위해서 하는 얘기입니다만, `man man`은 섹션 번호들의 목록을 표시합니다. 예를 들어 1은 "regular" 커맨드, 5는 files/conventions, 그리고 8은 administration이죠). `apropos`를 히용해서 man 페이지를 찾으세요. 몇몇 커맨드는 실행가능한 커맨드가 아니라는 것을 알아두세요. 하지만 Bash 빌트인 함수들은 `help`와 `help -d`를 이용해서 도움말을 볼 수 있습니다. +- `man`을 이용해서 문서를 읽는 법을 배우세요(호기심 많은 사람을 위해서 하는 얘기입니다만, `man man`은 섹션 번호들의 목록을 표시합니다. 예를 들어 1은 "regular" 커맨드, 5는 files/conventions, 그리고 8은 administration이죠). `apropos`를 이용해서 man 페이지를 찾으세요. 몇몇 커맨드는 실행 가능한 커맨드가 아니라는 것을 알아두세요. 하지만 Bash 빌트인 함수들은 `help`와 `help -d`를 이용해서 도움말을 볼 수 있습니다. -- `>`와 `<`, `|`를 이용한 파이프를 사용해서 입력과 출력의 리다이렉션을 배우세요. `>`는 출력 파일을 덮어 씌우고, `>>`는 덧붙이는걸 알아두세요. stdout(역주: 표준 출력)과 stderr(역주: 표준 에러 출력)에 대해서 배우세요. +- `>`와 `<`, `|`를 이용한 파이프를 사용해서 입력과 출력의 리다이렉션을 배우세요. `>`는 출력 파일을 덮어 씌우고, `>>`는 덧붙이는 걸 알아두세요. stdout(역주: 표준 출력)과 stderr(역주: 표준 에러 출력)에 대해서 배우세요. -- `*`(그리고 아마도 `?`과 `{`...`}`)을 이용하는 파일 글롭(glob) 확장을 배우세요. 그리고 쌍따옴표`"`와 홑따옴표`'`의 차이를 배우세요. (변수 확장에 대해서 더 보려면 아래를 참조하세요) +- `*`(그리고 아마도 `?`과 `[`...`]`)을 이용하는 파일 글롭(glob) 확장을 배우세요. 그리고 쌍따옴표`"`와 홑따옴표`'`의 차이를 배우세요. (변수 확장에 대해서 더 보려면 아래를 참조하세요) - Bash 작업 관리에 익숙해지세요. `&`, **ctrl-z**, **ctrl-c**, `jobs`, `fg`, `bg`, `kill` 등등. - `ssh`를 배우고, `ssh-agent`, `ssh-add`를 통해서 비밀번호 없는 인증 방식의 기본을 배우세요. -- 기본 파일 관리: `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`. +- 기본 파일 관리: `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`. -- 정규표현식(regular expression)을 잘 알아두세요. 그리고 `grep`/`egrep`의 다양한 플래그도 알아두세요. `-i`, `-o`, `-v`,`-A`, `-B`와 `-C` 옵션은 알아둘 가치가 있습니다. +- `git` 같은 버전 관리 시스템을 배우고 사용하세요. -- `apt-get`, `yum`, `dnf` 또는 `pacman`을 이용하여 패키지를 찾고 설치하는 법을 배우세요. 그리고 `pip`가 설치되어있는지 확인해서, 파이선 기반의 커맨드 라인 도구를 설치할 수 있도록 하세요(밑에 설명된 것중 몇가지는 `pip`를 이용해 설치하는게 제일 쉽습니다. +- 정규 표현식(regular expression)을 잘 알아두세요. 그리고 `grep`/`egrep`의 다양한 플래그도 알아두세요. `-i`, `-o`, `-v`,`-A`, `-B`와 `-C` 옵션은 알아둘 가치가 있습니다. + +- `apt-get`, `yum`, `dnf` 또는 `pacman`(배포판마다 다릅니다)을 이용하여 패키지를 찾고 설치하는 법을 배우세요. 그리고 `pip`가 설치되어 있는지 확인해서, 파이선 기반의 커맨드 라인 도구를 설치할 수 있도록 하세요(밑에 설명된 것 중 몇 가지는 `pip`를 이용해 설치하는 게 제일 쉽습니다. ## Everyday use -- Bash 에서 **Tab**을 쓰면 argument를 완성하고, **ctrl-r**을 쓰면 커맨드 히스토리에서 검색합니다. +- Bash 에서 **Tab**을 쓰면 argument를 완성하고, **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-.**같은 경우, 이건 argument를 돌아가면서 나타내고 **alt-***는 글롭을 확장합니다. -- vi 스타일의 키 조합을 사랑한다면, `set -o vi`를 사용할수도 있습니다. -- 최근 사용한 커맨드를 보려면 `history`를 입력하세요. `!$`(마지막 argument), `!!`(마지막 커맨드)와 같은 약어들이 매우 많습니다. 비록 이런 것들이 **ctrl-r**이나 **alt-.**명령어로 자주 대체되기 쉽지만요. +- vi 스타일의 키 조합을 사랑한다면, `set -o vi`를 사용할 수도 있습니다(`set -o emacs`로 되돌릴 수 있습니다). -- 이전에 작업하던 디렉토리로 돌아가려면 `cd -`를 사용하세요. +- 긴 명령을 수정하려면 에디터를 설정한 다음(예를 들면, `export EDITOR=vim`) **ctrl-x** **ctrl-e**를 눌러 현재 명령을 에디터에서 열어 여러줄 편집을 할 수 있습니다. vi 스타일에서는 **escape-v**를 사용합니다. -- 커맨드를 타이핑 하던 도중에 마음이 바뀌었다면, **alt-#**을 쳐서 시작점에 `#`을 삽입하고, 엔터를 쳐서 코멘트로 여겨지게 하세요(또는 **ctrl-a**, **#**, **enter**). 나중에 커맨드 히스토리에서 찾아서 타이핑 중이었던 커맨드로 돌아올 수 있습니다. +- 최근 사용한 커맨드를 보려면 `history`를 입력하세요. 그 후 `!n`으로(여기서 `n`은 커맨드 번호를 뜻합니다) 다시 실행할 수 있습니다. `!$`(마지막 argument), `!!`(마지막 커맨드)와 같은 약어들이 매우 많습니다. 비록 이런 것들이 **ctrl-r**이나 **alt-.**명령어로 자주 대체되기 쉽지만요. -- `xargs`(혹은 `parallel`)를 사용하세요. 매우 강력합니다. 라인당 몇개의 아이템이 실행되게 할 것인지(`-L`) 그걸 병렬로 할 것인지(`-P`)를 제어할 수 있다는걸 기억하세요. 제대로 하고있는지 확신할 수 없다면 `xargs echo`를 먼저 실행해보세요. 또 `-I{}`도 간편합니다. 예시: +- `cd`로 홈 디렉터리로 갈 수 있습니다. 홈 디렉터리에서 상대적으로 파일을 접근하려면 `~` 접두사를 사용합니다(예: `~/.bashrc`). `sh` 스크립트에서는 `$HOME`로 홈 디렉터리를 참조합니다. + +- 이전에 작업하던 디렉터리로 돌아가려면 `cd -`를 사용하세요. + +- 커맨드를 타이핑하던 도중에 마음이 바뀌었다면, **alt-#**을 쳐서 시작점에 `#`을 삽입하고, 엔터를 쳐서 코멘트로 여겨지게 하세요(또는 **ctrl-a**, **#**, **enter**). 나중에 커맨드 히스토리에서 찾아서 타이핑 중이었던 커맨드로 돌아올 수 있습니다. + +- `xargs`(혹은 `parallel`)를 사용하세요. 매우 강력합니다. 라인당 몇 개의 아이템이 실행되게 할 것인지(`-L`) 그걸 병렬로 할 것인지(`-P`)를 제어할 수 있다는 걸 기억하세요. 제대로 하고 있는지 확신할 수 없다면 `xargs echo`를 먼저 실행해보세요. 또 `-I{}`도 편리합니다. 예시: ```bash find . -name '*.py' | xargs grep some_function cat hosts | xargs -I{} ssh root@{} hostname @@ -91,46 +105,66 @@ - `pgrep`과 `pkill`을 사용해서 프로세스를 찾거나 시그널을 보내세요(`-f`가 유용합니다). -- 프로세스에 보낼 수 있는 다양한 시그널을 알아두세요. 예를 들어, 프로세스를 일시중지 할 때는 `kill -STOP [pid]`를 사용합니다. 전체 목록은 `man 7 signal`에서 볼 수 있습니다. +- 프로세스에 보낼 수 있는 다양한 시그널을 알아두세요. 예를 들어, 프로세스를 일시 중지 할 때는 `kill -STOP [pid]`를 사용합니다. 전체 목록은 `man 7 signal`에서 볼 수 있습니다. - 백그라운드 프로세스를 영원히 돌아가게 만들고 싶다면, `nohup`이나 `disown`을 사용하세요. -- 어떤 프로세스가 리스닝(역주: 특정 포트로 들어오는 패킷 리스닝)을 하고 있는지 알려면 `netstat -lntp`나 `ss -plat`을 사용해서 알 수 있습니다(TCP일 경우입니다. UDP의 경우 `-u`옵션을 추가하세요). +- 어떤 프로세스가 리스닝(역주: 특정 포트로 들어오는 패킷 리스닝)을 하고 있는지 알려면 `netstat -lntp`나 `ss -plat`을 사용해서 알 수 있습니다(TCP 일 경우입니다. UDP의 경우 `-u`옵션을 추가하세요). - `lsof`를 이용해서 열려있는 소켓과 파일을 볼 수 있습니다. -- Bash 스크립트에서 `set -x`를 사용하면 디버깅용 출력을 사용하게 됩니다. 스트릭트 모드(strict mode)가 가능할때면 사용하세요. `set -e`를 사용하면 에러가 났을때 중단시키게됩니다. `set -o pipefail`을 사용하면 에러에 대해서 강경한 기준을 적용합니다(이 주제가 조금 미묘하지만 말이죠). 더 복잡한 스크립트의 경우 `trap`또한 사용합니다. +- `uptime`이나 `w`를 이용해서 시스템이 얼마나 오래 실행 중인지 알 수 있습니다. -- `uptime`이나 `w`를 이용해서 시스템이 얼마나 오래 실행중인지 알 수 있습니다. +- 자주 사용되는 커맨드에 대해서 `alias`를 이용해서 숏컷을 만드세요. 예를들어, `alias ll='ls -latr'`은 새 단축 명령 `ll`을 만듭니다. -- 자주 사용되는 커맨드에 대해서 `alias`를 이용해서 숏컷을 만드세요. 예를들어, `alias ll='las -latr'`은 새 단축명령 `ll`을 만듭니다. +- 자주 사용하는 단축, 설정, 함수는 `~/.bashrc`에 저장하고, [그것을 참조하는 로그인 셸을 고쳐보세요](http://superuser.com/a/183980/7106). 이렇게 하면 설정을 모든 셸 세션에서 사용할 수 있습니다. -- Bash 스크립트에서 (괄호로 둘러쌓여 작성된) 서브쉘은 커맨드를 그룹으로 묶는 편리한 방법입니다. 일반적인 예로, 임시로 다른 디렉토리로 이동하여 작업하는 것이 있습니다. +- 환경 변수 설정이나 로그인할 때 실행해야 할 명령은 `~/.bash_profile`에 넣으세요. 그래픽 환경의 로그인의 셸과 `cron` 잡의 셸을 분리하기 위해 설정을 분리할 필요가 있습니다. + +- Git으로 여러 컴퓨터에서 같은 설정 파일을 사용하세요(예 `.bashrc`, `.bash_profile`). + +- 공백이 들어간 변수명이나 파일명은 주의할 필요가 있습니다. Bash 변수를 따옴표로 감싸세요(예: `"$FOO"`). 파일 이름의 경계에 공백 문자를 허용하려면 `-0`이나 `-print0` 옵션을 사용하세요. 예를 들면, `locate -0 pattern | xargs -0 ls -al`, `find / -print0 -type d | xargs -0 ls -al`. for 문에서 공백문자가 포함된 파일 이름을 반복하려면, `IFS=$'\n'`로 IFS를 개행 문자만으로 설정하시면 됩니다. + +- Bash 스크립트에서 `set -x`를 사용하면 디버깅용 출력을 사용하게 됩니다(아니면 다른 옵션 `set -v`가 있습니다. 확장되지 않은 변수와 주석을 포함한 로우 입력을 로깅합니다). 스트릭트 모드(strict mode)가 가능할 때면 사용하세요. `set -e`를 사용하면 에러가 났을 때 중단시키게 됩니다. `set -u`을 사용하면 설정되지 않은 변수를 찾아 줍니다. `set -o pipefail`을 사용하면 에러에 대해서 강경한 기준을 적용합니다(이 주제가 조금 미묘하지만 말이죠). 더 복잡한 스크립트의 경우 EXIT나 ERR에 `trap`도 사용합니다. 이렇게 스크립트를 시작하는 습관은 유용합니다. 이렇게 하면, 일반적인 에러를 찾고 중단하고, 메시지를 출력해 줍니다. +```bash + set -euo pipefail + trap "echo 'error: Script failed: see failed command above'" ERR +``` + +- Bash 스크립트에서 (괄호로 둘러싸여 작성된) 서브 셸은 커맨드를 그룹으로 묶는 편리한 방법입니다. 일반적인 예로, 임시로 다른 디렉터리로 이동하여 작업하는 것이 있습니다. ```bash # do something in current dir (cd /some/other/dir && other-command) # continue in original dir ``` -- Bash 에는 여러가지 다양한 변수 확장이 있다는 것을 알아두세요. 변수가 존재하는지 확인하려면 `${name:?error message}`를 사용하세요. 예를 들어 Bash 스크립트가 하나의 argument를 요구한다면, `input_file=${1:?usage: $0 input_file}`를 사용하세요. 산술 확장은 `i=$(( (i + 1) % 5 ))` 처럼 사용합니다. 순열은 `{1...10}`처럼 사용합니다. 문자열 트리밍(trimmin)은 `${var%suffix}`이나 `${var#prefix}`처럼 사용할 수 있습니다. 예를들어 `var=foo.pdf`라면, `echo ${var$.pdf}.txt`는 `foo.txt`를 출력합니다. +- Bash 에는 다양한 변수 확장이 있다는 것을 알아두세요. 변수가 존재하는지 확인하려면 `${name:?error message}`를 사용하세요. 예를 들어 Bash 스크립트가 하나의 argument를 요구한다면, `input_file=${1:?usage: $0 input_file}`를 사용하세요. 변수가 비어있을 때를 대비해 기본 값을 사용하세요. `${name:-default}` 이전 예제에 선택적인 파라미터를 추가하길 원한다면 `output_file=${2:-logfile}`로 할 수 있습니다. $2가 생략되어 비어있다면, `output_file`은 `logfile`로 설정됩니다. 산술 확장은 `i=$(( (i + 1) % 5 ))` 처럼 사용합니다. 순열은 `{1...10}`처럼 사용합니다. 문자열 트리밍(trimmin)은 `${var%suffix}`이나 `${var#prefix}`처럼 사용할 수 있습니다. 예를 들어 `var=foo.pdf`라면, `echo ${var$.pdf}.txt`는 `foo.txt`를 출력합니다. -- 커맨드의 실행 결과 출력물은 `<(some command)`처럼 이용해서 파일처럼 다뤄질 수 있습니다. 예를들어 로컬의 `/etc/hosts`를 리모트의 것과 비교하려면 다음처럼 하면 됩니다. -```sh +- `{`...`}`를 사용한 괄호 확장은 비슷한 텍스트의 재입력을 줄이고, 아이템의 조합을 자동화할 수 있습니다. `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`를 리모트의 것과 비교하려면 다음처럼 하면 됩니다. +```bash diff /etc/hosts <(ssh somehost cat /etc/hosts) ``` +- 스크립트를 적을 때 모든 코드를 대괄호 안에 넣을 수 있습니다. 닫는 괄호가 없으면 스크립트는 구문 에러가 되어 실행이 방지됩니다. 이는 스크립트가 웹으로부터 다운로드할 예정이라 할 때 도중까지만 다운로드된 파일이 실행 되는 걸 예방해 줍니다. +```sh +{ + # 여기에 코드를 넣으세요 +} +``` + - `cat << EOF...`같은 "here documents"에 대해서 알아두세요. -- Bash에서 표준 출력(standard output)과 표준 에러(standard error) 둘 다 `some-command > logfile 2>&1`같은 명령어로 리다이렉트할 수 있습니다. 종종, 커맨드가 열린 파일 핸들을 남기지 않는 것을 확실히 하기 위해, 현재 작업중인 터미널에서 명령어에 ` logfile 2>&1`같은 명령어로 리다이렉트할 수 있습니다. 종종, 커맨드가 열린 파일 핸들을 남기지 않는 것을 확실히 하기 위해, 현재 작업 중인 터미널에서 명령어에 `>> 2+3 +5 +``` ## Processing files and data -- 현재 디렉토리에서 파일을 이름으로 찾으려면 `find . -iname '*something*'` (또는 비슷하게)를 사용하면 됩니다. 어느곳에 있든 파일을 이름으로 찾으려면 `locate something`을 사용하세요(하지만 인내를 가져야합니다. `updatedb`가 최근에 생성된 파일을 인덱싱하지 않았을 수 있습니다). +- 현재 디렉터리에서 파일을 이름으로 찾으려면 `find . -iname '*something*'` (또는 비슷하게)를 사용하면 됩니다. 어느 곳에 있든 파일을 이름으로 찾으려면 `locate something`을 사용하세요(하지만 인내를 가져야 합니다. `updatedb`가 최근에 생성된 파일을 인덱싱하지 않았을 수 있습니다). -- 소스나 데이터 파일들에서 일반적인 검색을 할때는(`grep -r`보다 더 복잡할때), [`ag`](https://github.com/ggreer/the_silver_searcher)를 사용하세요. +- 소스나 데이터 파일들에서 일반적인 검색을 할 때는(`grep -r`보다 더 복잡할 때), [`ag`](https://github.com/ggreer/the_silver_searcher)를 사용하세요. -- HTML을 텍스트로 변환할때는 `lynx -dump -stdin`를 사용하세요. +- HTML을 텍스트로 변환할 때는 `lynx -dump -stdin`를 사용하세요. - 마크다운, HTML, 그리고 모든 종류의 문서 변환에는 [`pandoc`](http://pandoc.org/)을 시도해보세요. @@ -172,9 +218,11 @@ - JSON에는 [`jq`](http://stedolan.github.io/jq/)를 사용하세요. -- Excel이나 CSV파일에는 [csvkit](https://github.com/onyxfish/csvkit)가 `in2csv`, `csvcut`, `csvjoin`, `csvgrep`외 다른 도구들을 제공합니다.. +- YAML에는 [`shyaml`](https://github.com/0k/shyaml)를 사용하세요. -- Amazon S3를 다룰때는 [`s3cmd`](https://github.com/s3tools/s3cmd)가 편리합니다. 그리고 [`s4cmd`](https://github.com/bloomreach/s4cmd)는 빠릅니다. Amazon의 [`aws`](https://github.com/aws/aws-cli)는 다른 AWS 관련 작업에 핵심적인 도구입니다. +- 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)는 다른 AWS 관련 작업에 핵심적인 도구입니다. - `sort`와 `uniq`에 대해서 알아두세요. uniq의 `-u`, `-d`옵션을 포함해서 말이죠. 하단의 one-liner를 보세요. 그리고 `comm`도 보세요. @@ -182,102 +230,128 @@ - `wc`를 이용해서 행(`-l`), 캐릭터(`-m`), 단어(`-w`) 그리고 바이트(`-c`)를 세는 것을 알아두세요. -- `tee`를 이용해서 `ls -al | tee file.txt`처럼, 표준입력(stdin)에서 복사해서 파일로 보내거나, 표준 출력(stdout)으로 보내는 것을 알아두세요. +- `tee`를 이용해서 `ls -al | tee file.txt`처럼, 표준 입력(stdin)에서 복사해서 파일로 보내거나, 표준 출력(stdout)으로 보내는 것을 알아두세요. -- 로케일이 커맨드라인 도구에 정렬 순서(collation)와 퍼포먼스를 포함해서 미묘하게 영향을 끼치는 것을 알아두세요. 대부분의 리눅스 설치는 `LANG`이나 다른 로케일 변수를 US English와 같은 로컬 세팅으로 설정합니다. 하지만 로케일을 바꿀 경우 정렬도 바뀔 것이라는 것에 주의하세요. 그리고 i18n 루틴들도 정렬이나 다른 커맨드들을 *몇 배* 느리게 할 수 있습니다. `export LC_ALL=C`를 사용하여, 어떤 상황에서는( 밑에 있는 집합(set) 작업이나, 유일성 작업등) i18n의 느린 루틴들을 통채로 안전하게 무시할 수 있습니다. 그리고 전통적인 바이트 기반의 정렬 순서를 사용할 수 있습니다. +- 그룹, 필드 뒤집기, 통계적인 계산 같은 좀 더 복잡한 계산은 [`datamash`](https://www.gnu.org/software/datamash/)를 고려해보세요. -- 간단한 데이터 조작을 할때 `awk`와 `sed`를 이용하는 것을 알아두세요. 예를 들어 텍스트 파일의 세번째 열의 숫자들의 모든 값을 더하는 것은 이렇게 합니다: `awk '{ x += $3 } END { print x }'`. 이 방법은 같은 일을 하는 파이썬 코드보다 3배정도 빠르고, 1/3정도의 길이밖에 안됩니다. +- 로케일이 커맨드 라인 도구에 정렬 순서(collation)와 퍼포먼스를 포함해서 미묘하게 영향을 끼치는 것을 알아두세요. 대부분의 리눅스 설치는 `LANG`이나 다른 로케일 변수를 US English와 같은 로컬 세팅으로 설정합니다. 하지만 로케일을 바꿀 경우 정렬도 바뀔 것이라는 것에 주의하세요. 그리고 i18n 루틴들도 정렬이나 다른 커맨드들을 *몇 배* 느리게 할 수 있습니다. `export LC_ALL=C`를 사용하여, 어떤 상황에서는( 밑에 있는 집합(set) 작업이나, 유일성 작업등) i18n의 느린 루틴들을 통째로 안전하게 무시할 수 있습니다. 그리고 전통적인 바이트 기반의 정렬 순서를 사용할 수 있습니다. -- 하나 이상의 파일에서 추가적인 파일을 생성하지 않고 문자열 바꾸려면 다음과 같이 하세요. +- `TZ=Pacific/Fiji date`처럼 특정 명령의 환경 변수를 실행 앞에 붙여 설정할 수 있습니다. + +- 간단한 데이터 조작을 할 때 `awk`와 `sed`를 이용하는 것을 알아두세요. 예를 들어 텍스트 파일의 세 번째 열의 숫자들의 모든 값을 더하는 것은 이렇게 합니다: `awk '{ x += $3 } END { print x }'`. 이 방법은 같은 일을 하는 파이썬 코드보다 3배 정도 빠르고, 1/3 정도의 길이밖에 안됩니다. + +- 여러 파일 안의 문자열을 바꾸려면 다음과 같이 하세요. ```sh 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` 명령을 사용해서 여러 파일의 이름을 바꿀 수도 있습니다. 하지만, 모든 리눅스 배포판에서 같은 동작을 하지 않는 것에 주의하세요.) ```sh - # Recover backup files foo.bak -> foo: - rename 's/\.bak$//' *.bak - # Full rename of filenames, directories, and contents foo -> bar: + # 파일 이름, 디렉터, 컨텐츠 모두 foo에서 bar로 변경 repren --full --preserve-case --from foo --to bar . + # 백업 파일을 whatever.bak에서 whatever로 복원 + repren --renames --from '(.*)\.bak' --to '\1' *.bak + # 가능하다면 rename으로 위와 같은 일을 할 수 있음 + rename 's/\.bak$//' *.bak ``` -`shuf`를 사용해서 파일안의 임의의 행을 선택하거나, 섞을 수 있습니다. +- man 페이지가 이야기하듯, `rsync`는 정말 빠르고 다재다능한 파일 복사 도구입니다. 기기 간의 동기화에 사용하는 것으로 알려져 있지만, 로컬에서도 충분히 유용합니다. 보안 규정이 허용한다면, `scp` 대신 `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 +``` -- `sort`의 옵션들을 알아두세요. `-n`은 숫자를 정렬할 때, `-h`는 사람이 읽을 수 있게 작성한 숫자의 경우(`du -h`와 같은 형태). 키가 어떻게 작동하는지 알아두세요(`-t`와 `-k`). 특별히, 첫번째 필드로만 정렬해야 한다면 `-k1,1`을 적어야 한다는걸 주의하세요. `-k1`은 모든 행에 대해서 정렬하라는 뜻입니다. 안정적인 정렬(`sort -s`)도 유용합니다. 예를들어, 먼저 2번 필드로 정렬하고, 그 다음에 1번 필드로 정렬할 경우, `sort -k1,1 | sort -s -k2,2`처럼 할 수 있습니다. +- `shuf`를 사용해서 파일 안의 임의의 행을 선택하거나, 섞을 수 있습니다. + +- `sort`의 옵션을 알아두세요. `-n`은 숫자를 정렬할 때, `-h`는 사람이 읽을 수 있게 작성한 숫자의 경우(`du -h`와 같은 형태). 키가 어떻게 작동하는지 알아두세요(`-t`와 `-k`). 특별히, 첫 번째 필드로만 정렬해야 한다면 `-k1,1`을 적어야 한다는 걸 주의하세요. `-k1`은 모든 행에 대해서 정렬하라는 뜻입니다. 안정적인 정렬(`sort -s`)도 유용합니다. 예를 들어, 먼저 2번 필드로 정렬하고, 그다음에 1번 필드로 정렬할 경우, `sort -k1,1 | sort -s -k2,2`처럼 할 수 있습니다. - 만약 탭(tab)문자를 Bash 커맨드 라인에 사용해야 할 필요가 생길 경우(예를 들면 -t argument를 이용해 정렬 할 때), **ctrl-v** **[Tab]**키를 누르거나, `$'\t'`를 쓰세요(문자쪽이 복사나 붙여넣기를 할 수 있어 더 낫습니다.). -- 소스코드를 패치하는 기본 도구는 `diff`와 `patch`입니다. diff의 통계 요약을 보려면 `diffstat`를 보세요. `diff -r`은 모든 디렉토리에 대해 작업을 수행하는걸 알아두세요. `diff -r tree1 tree2 | diffstat`으로 변경 내역의 요약을 볼 수 있습니다. +- 소스 코드를 패치하는 기본 도구는 `diff`와 `patch`입니다. diff와 `sdiff`(새로 diff)의 통계 요약을 보려면 `diffstat`를 보세요. `diff -r`은 모든 디렉터리에 대해 작업을 수행하는 걸 알아두세요. `diff -r tree1 tree2 | diffstat`으로 변경 내역의 요약을 볼 수 있습니다. -- 바이너리 파일을 간단하게 hex 덤프를 뜨고 싶을 때는 `hd`를 쓰세요. 바이너리 파일을 수정할때는 `bvi`를 사용하세요. +- 바이너리 파일을 간단하게 hex 덤프를 뜨고 싶을 때는 `hd`, `hexdump`, `xxd`를 쓰세요. 바이너리 파일을 수정할 때는 `bvi`, `biew`를 사용하세요. -- `strings` (그리고 `grep`, 등) 을 사용해서 바이너리 파일 안에서 문자열 비트를 찾을 수 있습니다. +- `strings` (그리고 `grep`, 등) 을 사용해서 바이너리 파일 안에서 문자열 비트를 찾을 수 있습니다. - 바이너리 파일을 diff하려면(델타 압축), `xdelta3`를 사용하세요. -- 텍스트 파일 인코딩을 변경하려면 `iconv`를 시도해보세요. 또는 `uconv`는 더 복잡한 목적에 사용할 수 있습니다. `uconv`는 몇가지 복잡한 유니코드를 지원합니다. 예를들어, 소문자화하고 모든 악센트를 제거하는(확장하고, 떨어트리는 것을 이용해서) 커맨드는 다음과 같습니다. +- 텍스트 파일 인코딩을 변경하려면 `iconv`를 시도해보세요. 또는 `uconv`는 더 복잡한 목적에 사용할 수 있습니다. `uconv`는 몇 가지 복잡한 유니코드를 지원합니다. 예를 들어, 소문자화하고 모든 악센트를 제거하는(확장하고, 떨어트리는 것을 이용해서) 커맨드는 다음과 같습니다. ```sh uconv -f utf-8 -t utf-8 -x '::Any-Lower; ::Any-NFD; [:Nonspacing Mark:] >; ::Any-NFC; ' < input.txt > output.txt ``` - 파일을 여러 조각으로 나누려면 `split`(파일을 사이즈로 나눔)이나 `csplit`(파일을 패턴으로 나눔)을 보세요. -- `zless`, `zmore`, `zcat` 그리고`zgrep`을 이용해서 압축된 파일에 대해 작업하세요. +- 날짜 시간 표현식을 제어하려면 [`dateutils`](http://www.fresse.org/dateutils/)의 `dateadd`, `datediff`, `strptime`등을 사용하세요. +- `zless`, `zmore`, `zcat` 그리고`zgrep`을 이용해서 압축된 파일에 대해 작업하세요. + +- 파일 속성은 `chattr`로 설정할 수 있습니다. 이는 파일 권한에 대한 저레벨 대안입니다. 예를 들어 `sudo chattr +i /critical/directory/or/file`로 불변 플래그를 붙여 실수로 파일을 지우는 것을 방지할 수 있습니다. + +- `getfacl`, `setfacl`를 사용해 파일 권한을 저장하고 복원할 수 있습니다. 예를 들어, +```sh + getfacl -R /some/path > permissions.txt + setfacl --restore=permissions.txt +``` ## System debugging -- 웹 디버깅을 위해서는 `curl` 와 `curl -I` 가 도움이 되고, `wget`도 꽤 도움이 됩니다. 그외에 보다 현대적인 방식으로는 [`httpie`](https://github.com/jakubroztocil/httpie)이 있습니다. +- 웹 디버깅을 위해서는 `curl` 와 `curl -I` 가 도움이 되고, `wget`도 꽤 도움이 됩니다. 그 외에 보다 현대적인 방식으로는 [`httpie`](https://github.com/jakubroztocil/httpie)이 있습니다. -- 디스크/cpu/네트워크의 상태를 알기 위해서는 각각 `iostat`, `netstat`, `top` (혹은 더 나은 명령어인 `htop`), 그리고 특히 `dstat`을 사용하세요. 시스템에 어떠한일이 일어났는지를 빠르게 알아내는데 매우 좋습니다. +- cpu/디스크의 상태를 알기 위해서는 `top` (혹은 더 나은 명령어인 `htop`), `iostat`, `iotop`을 사용하세요. `iostat -mxz 15`를 사용해 기본 CPU와 파티션 디스크별 정보와 성능 정보를 알 수 있습니다. -- 보다 시스템의 심층적인 면들을 보려면 [`glances`](https://github.com/nicolargo/glances)를 사용해보세요. 이 커맨드는 한 터미널에서 여러 시스템 수준의 통계자료들을 보여줍니다. 빠르게 여러 서브시스템들을 체크하는데 매우 큰 도움이 될 것입니다. +- 네트워크 상태를 자세히 알려면 `netstat`, `ss`를 사용하세요. + +- 시스템에 어떤 일이 일어났는지 보려면 `dstat`가 특히 유용합니다. 보다 시스템의 심층적인 면들을 보려면 [`glances`](https://github.com/nicolargo/glances)를 사용해보세요. - 메모리의 상태를 알아보려면 `free` 와 `vmstat`를 실행하고 그 결과를 해석해보세요. 특히, "cached" 값은 Linux kernel에 의해 file cache로 잡혀있는 메모리 라는 것을 알고 있어야 하고 그래서 "free"값에 대해서 보다 효율적으로 계산할 수 있습니다. -- Java 시스템의 디버깅은 조금 다른상황입니다. 하지만 Oracle과 그 외의 회사에서 만든 다른 JVM들에서는 `kill -3 `를 실행하면 전체 stack trace정보와 heap의 정보(시기별로 가비지 콜렉터의 세부적인 내용같은 매우 유용한 정보)를 요약하여 stderr나 로그로 출력해주므로 간단하게 정보를 얻어올 수 있습니다. JDK의 `jps`, `jstat`, `jstack`, `jmap` 명령은 유용합니다. [SJK tools](https://github.com/aragozin/jvm-tools)은 더 고급 정보를 다룰 수 있습니다. +- Java 시스템의 디버깅은 조금 다른 상황입니다. 하지만 Oracle과 그 외의 회사에서 만든 다른 JVM들에서는 `kill -3 `를 실행하면 전체 stack trace 정보와 heap의 정보(시기별로 가비지 컬렉터의 세부적인 내용 같은 매우 유용한 정보)를 요약하여 stderr나 로그로 출력해주므로 간단하게 정보를 얻어올 수 있습니다. JDK의 `jps`, `jstat`, `jstack`, `jmap` 명령은 유용합니다. [SJK tools](https://github.com/aragozin/jvm-tools)은 더 고급 정보를 다룰 수 있습니다. -- 네트워크 이슈들을 알아보기 위해서는 traceroute를 사용할수도 있지만 이보다 더 좋은 `mtr`를 사용하세요. +- 네트워크 이슈들을 알아보기 위해서는 traceroute를 사용할 수도 있지만 더 좋은 [`mtr`](http://www.bitwizard.nl/mtr/)를 사용하세요. -- 디스크가 왜 가득찼는지 알아보기 위해서 `ncdu`를 사용해보세요. 일반적으로 사용하는 `du -sh *`와 같은 커멘드를 사용하는 것보다는 시간을 줄일 수 있습니다. +- 디스크가 왜 가득 찼는지 알아보기 위해서 [`ncdu`](https://dev.yorhel.nl/ncdu)를 사용해보세요. 일반적으로 사용하는 `du -sh *`와 같은 커맨드를 사용하는 것보다는 시간을 줄일 수 있습니다. -- 어떠한 소켓이나 프로세스가 사용하는 대역폭(bandwidth)를 찾아보려면 `iftop`나 `nethogs`를 사용하세요. +- 어떠한 소켓이나 프로세스가 사용하는 대역폭(bandwidth)를 찾아보려면 [`iftop`](http://www.ex-parrot.com/~pdw/iftop/)나 [`nethogs`](https://github.com/raboof/nethogs)를 사용하세요. -- `ab`라는 툴(Apache에 딸려있는)은 신속하고 간단하게(quick-and-dirty) 웹서버의 성능을 체크하는데 유용합니다. 보다 복잡한 부하 테스트를 할때는 `siege`를 사용해보세요. +- `ab`라는 툴(Apache에 딸려있는)은 신속하고 간단하게(quick-and-dirty) 웹서버의 성능을 체크하는데 유용합니다. 보다 복잡한 부하 테스트를 할 때는 `siege`를 사용해보세요. -- 보다 심각한 경우의 네트워크 디버깅을 위해서는 `wireshark`, `tshark` 또는 `ngrep`를 사용하세요. +- 보다 심각한 경우의 네트워크 디버깅을 위해서는 [`wireshark`](https://wireshark.org/), [`tshark`](https://www.wireshark.org/docs/wsug_html_chunked/AppToolstshark.html), [`ngrep`](http://ngrep.sourceforge.net/)를 사용하세요. -- `strace` 와 `ltrace`에 대해서 알아보세요. 이 커맨드들은 만일 어떤 프로그램에서 failing, hanging 혹은 crashing이 일어나거나 그 외에 여러분이 무슨이유인지 알지 못하는 상황이나 성능에 대한 대략적인 내용을 얻고자 할때 유용할 것입니다. 특히 프로파일링을 위한 옵션(`-c`)과 현재 실행중인 프로세스에 붙이기 위한 옵션(`-p`)을 기억하세요. +- `strace` 와 `ltrace`에 대해서 알아보세요. 이 커맨드들은 만일 어떤 프로그램에서 failing, hanging 혹은 crashing이 일어나거나 그 외에 여러분이 무슨 이유인지 알지 못하는 상황이나 성능에 대한 대략적인 내용을 얻고자 할 때 유용할 것입니다. 특히 프로파일링을 위한 옵션(`-c`)과 현재 실행 중인 프로세스에 붙이기 위한 옵션(`-p`)을 기억하세요. - 공유 라이브러리(shared libraries) 등을 체크하기 위해서는 `ldd`에 대해 알아보세요. -- `gdb`를 가지고 현재 실행중인 프로세스에 연결하고 그 프로세스의 stack trace들을 얻는 방법을 알아보세요. +- `gdb`를 가지고 현재 실행 중인 프로세스에 연결하고 그 프로세스의 stack trace들을 얻는 방법을 알아보세요. -- `/proc`를 사용하세요. 이것은 현재 발생하고 있는 문제를 디버깅할때 종종 놀랍도록 큰 도움이 될것입니다. 예시:`/proc/cpuinfo`, `/proc/meminfo`, `/proc/cmdline`, `/proc/xxx/cwd`, `/proc/xxx/exe`, `/proc/xxx/fd/`, `/proc/xxx/smaps` (`xxx`는 프로세스 id나 pid입니다). +- `/proc`를 사용하세요. 이것은 현재 발생하고 있는 문제를 디버깅할 때 종종 놀랍도록 큰 도움이 될 것입니다. 예시:`/proc/cpuinfo`, `/proc/meminfo`, `/proc/cmdline`, `/proc/xxx/cwd`, `/proc/xxx/exe`, `/proc/xxx/fd/`, `/proc/xxx/smaps` (`xxx`는 프로세스 id나 pid입니다). -- 과거에 왜 무엇인가가 잘못되었는지를 디버깅할때에는 `sar`가 매우 유용할 것입니다. 이 커맨드는 CPU, memory, network 등의 통계 내역을 보여줍니다. +- 과거에 왜 무엇인가가 잘못되었는지를 디버깅할 때에는 [`sar`](http://sebastien.godard.pagesperso-orange.fr/)가 매우 유용할 것입니다. 이 커맨드는 CPU, memory, network 등의 통계 내역을 보여줍니다. -- 시스템의 보다 깊은곳을 보거나 퍼포먼스를 분석하기 위해서는, `stap` ([SystemTap](https://sourceware.org/systemtap/wiki)),나 [`perf`](http://en.wikipedia.org/wiki/Perf_(Linux)), 그리고 [`sysdig`](https://github.com/draios/sysdig)를 사용해보세요. +- 시스템의 보다 깊은 곳을 보거나 퍼포먼스를 분석하기 위해서는, `stap` ([SystemTap](https://sourceware.org/systemtap/wiki)), [`perf`](http://en.wikipedia.org/wiki/Perf_(Linux)), [`sysdig`](https://github.com/draios/sysdig)를 사용해보세요. - 여러분이 사용하는 Linux의 배포판이 무엇인지 확인(대부분의 배포판에서 작동합니다)하려면 `uname`이나 `uname -a` 또는 `lsb_release -a`를 사용하세요. -- 언제든지 무언가가 정말로 재미있는 반응을 보인다면 `dmesg`를 사용해보세요 (아마도 하드웨어나 드라이버의 문제일 것입니다). +- 언제든지 무언가가 정말로 재미있는 반응을 보인다면 `dmesg`를 사용해보세요(아마도 하드웨어나 드라이버의 문제일 것입니다). + +- 파일을 삭제했는데 `du`로 확인해 예상한 디스크 공간을 확보하지 못했다면, 파일이 프로세스에 의해 사용 중인지 확인해보세요. +`lsof | grep deleted | grep "filename-of-my-big-file"` ## One-liners 커맨드들을 한데 묶어서 사용하는 예제들 -- `sort`/`uniq`를 사용하여 텍스트 파일의 교차점, 조합, 차이점을 확인이 필요할때 상당한 도움이 될겁니다. 가령 `a`와 `b`가 유일한 값들만을 가진 텍스트 파일이라합시다. 이것이 임의의 크기인 파일을(그게 기가바이트라고 해도) 빠르게 작업할 수 있습니다. (Sort는 메모리 제한에 걸리지 않습니다만, 만약 루트 파티션이 작은 경우, `/tmp`를 사용하기위해 `-T`옵션을 사용하면됩니다.) 위의 `LC_ALL`에대한 내용은 `sort`의 `-u`옵션을 확인하십시오. (아래 예제에 집중하기 위해서 생략) +- `sort`/`uniq`를 사용하여 텍스트 파일의 교차점, 조합, 차이점을 확인이 필요할 때 상당한 도움이 될 겁니다. 가령 `a`와 `b`가 유일한 값들만을 가진 텍스트 파일이라 합시다. 이것이 임의의 크기인 파일을(그게 기가바이트라고 해도) 빠르게 작업할 수 있습니다. (Sort는 메모리 제한에 걸리지 않습니다만, 만약 루트 파티션이 작은 경우, `/tmp`를 사용하기 위해 `-T`옵션을 사용하면 됩니다.) 위의 `LC_ALL`에대한 내용은 `sort`의 `-u`옵션을 확인하십시오. (아래 예제에 집중하기 위해서 생략) ```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 ``` -- `grep . *`을 사용해서 디렉토리 안의 모든 파일을 비주얼하게 살펴 볼 수 있습니다. 예를들어 `/sys`, `/proc`, `/etc` 같이 설정 값들로 가득한 디렉토리에 말이죠. +- `grep . *`을 사용해서 디렉터리 안의 모든 파일을 비주얼하게 살펴볼 수 있습니다.(r각 줄은 파일 이름과 같이 나옵니다) 아니면 `head -100 *`를 이용할 수도 있습니다.(각 파일의 해더만 볼 수 있습니다.) 이는 `/sys`, `/proc`, `/etc` 같이 설정값들로 가득한 디렉터리에서 유용합니다. -- 텍스트 파일의 세번째 열의 숫자들의 모든 값을 더하는 것은 이렇게 합니다. 이 방법은 같은 일을 하는 파이썬 코드보다 3배정도 빠르고, 1/3정도의 길이밖에 안됩니다. + +- 텍스트 파일의 세 번째 열의 숫자들의 모든 값을 더하는 것은 이렇게 합니다. 이 방법은 같은 일을 하는 파이썬 코드보다 3배 정도 빠르고, 1/3 정도의 길이밖에 안됩니다. ```sh awk '{ x += $3 } END { print x }' myfile ``` @@ -287,11 +361,13 @@ find . -type f -ls ``` -- 웹서버 로그같은 텍스트 파일이 있다고 합시다. 그리고 URL 파라메터에 나타나는 `acct_id`같은 특정 값이 몇몇 행에 나타난다고 해보죠. 각각의 `acct_id`에 대해 얼마나 많은 요청이 있었는지 알고 싶다면 다음처럼 할 수 있습니다. +- 웹서버 로그 같은 텍스트 파일이 있다고 합시다. 그리고 URL 파라미터에 나타나는 `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'`로 한 디렉터리 내의 파일 변경을 확인하거나, `watch -d -n 2 ifconfig`로 와이파이 설정을 고칠 때 네트워크 설정 변경을 확인할 수 있습니다. + - 다음 함수를 실행하면 이 문서에 있는 팁 중 임의의 것을 얻을 수 있습니다(마크다운을 파싱하고 항목을 추출합니다). ```sh function taocl() { @@ -304,8 +380,6 @@ ``` - - ## Obscure but useful - `expr`: 산술적이거나 논리적인 작업을 수행하거나 정규표현식을 검증할때 사용합니다 @@ -322,7 +396,7 @@ - `look`: 어떤 문자열로 시작하는 영단어(혹은 파일의 어떤 한 줄)을 찾습니다 -- `cut `, `paste` 그리고 `join`: 데이터를 수정할때 사용합니다 +- `cut `, `paste`, `join`: 데이터를 수정할때 사용합니다 - `fmt`: 문단의 서식을 지정합니다 @@ -332,7 +406,7 @@ - `column`: 문서의 컬럼이나 테이블의 서식을 지정합니다 -- `expand` and `unexpand`: 탭을 공백으로 바꾸어주거나 공백을 탭으로 바꾸어줍니다 +- `expand`, `unexpand`: 탭을 공백으로 바꾸어주거나 공백을 탭으로 바꾸어줍니다 - `nl`: 줄 번호를 추가해줍니다 @@ -346,9 +420,9 @@ - `toe`: terminfo 엔트리들의 테이블(table of terminfo entries) -- `nc`: 네트워크를 디버깅하거나 데이터를 전송할때 사용합니다 +- `nc`: 네트워크를 디버깅하거나 데이터를 전송할 때 사용합니다 -- `socat`: 소켓 릴레이나 TCP 포트로 내용을 전달할때 사용합니다(`netcat`과 비슷합니다) +- `socat`: 소켓 릴레이나 TCP 포트로 내용을 전달할 때 사용합니다(`netcat`과 비슷합니다) - [`slurm`](https://github.com/mattthias/slurm): 네트워크 상황을 시각화하여 보여줍니다 @@ -356,11 +430,19 @@ - `file`: 파일의 종류를 알아내는데 사용합니다 -- `tree`: 디렉토리들과 그 하위 디렉토리를 마치 ls를 반복적으로 입력한 것처럼 트리의 형태로 보여줍니다 +- `tree`: 디렉터리들과 그 하위 디렉터리를 마치 ls를 반복적으로 입력한 것처럼 트리의 형태로 보여줍니다 - `stat`: 파일의 정보를 보여줍니다 -- `time`: execute and time a command +- `time`: 명령을 실행하고 시간을 잽니다 + +- `timeout`: 특정 시간만큼 명령을 실행하고 시간이 끝나면 프로세스를 종료합니다. + +- `lockfile`: `rm -f`로만 지울 수 있는 세마포어 파일을 생성합니다 + +- `logrotate`: 로그를 로테이트, 압축, 메일로 보냅니다 + +- `watch`: 명령을 반복적으로 실행해 결과를 보여주거나 변경을 하일라이트합니다 - `tac`: 파일의 내용을 역순으로 출력합니다 @@ -384,7 +466,9 @@ - `units`: 단위를 변환하거나 계산하는데 사용합니다 예를들어 furlongs/fortnight 단위를 twips/blink로 변환합니다 (`/usr/share/units/definitions.units`를 참고하세요) -- `7z`: 고효율의 파일 압축프로그램입니다 +- `apg`: 렌덤 패스워드를 생성합니다 + +- `xz`: 고효율의 파일 압축프로그램입니다 - `ldd`: 동적 라이브러리들의 정보를 보여줍니다 @@ -394,17 +478,17 @@ - `strace`: 시스템 콜을 디버깅할때 사용합니다 -- `mtr`: 네트워크 디버깅시에 traceroute보다 더 낫습니다 +- [`mtr`](http://www.bitwizard.nl/mtr/): 네트워크 디버깅시에 traceroute보다 더 낫습니다 - `cssh`: 쉘을 동시에 여러개 사용할때 사용합니다 - `rsync`: SSH를 이용해 원격 파일 시스템이나, 로컬 파일시스템의 파일과 폴더들을 동기화 할때 사용합니다 -- `wireshark` and `tshark`: 패킷정보를 가져오며 네트워킹을 디버깅하는데 사용합니다 +- [`wireshark`](https://wireshark.org/), [`tshark`](https://www.wireshark.org/docs/wsug_html_chunked/AppToolstshark.html): 패킷정보를 가져오며 네트워킹을 디버깅하는데 사용합니다 -- `ngrep`: 네트워크 환경에서 grep과 같은 역할을 합니다 +- [`ngrep`](http://ngrep.sourceforge.net/): 네트워크 환경에서 grep과 같은 역할을 합니다 -- `host` and `dig`: DNS 정보를 보여줍니다 +- `host`, `dig`: DNS 정보를 보여줍니다 - `lsof`: 프로세스 파일 디스크립터와 소켓의 정보를 보여줍니다 @@ -426,49 +510,84 @@ - `id`: 현재 유저나 그룹에 대한 식별 정보를 보여줍니다 -- `sar`: 시스템 상태에 대한 정보를 보여줍니다 +- [`sar`](http://sebastien.godard.pagesperso-orange.fr/): 시스템 상태에 대한 정보를 보여줍니다 -- `iftop` or `nethogs`: 소켓 또는 프로세스를 이용하여 네트워크를 정보를 보여줍니다 +- [`iftop`](http://www.ex-parrot.com/~pdw/iftop/), [`nethogs`](https://github.com/raboof/nethogs): 소켓 또는 프로세스를 이용하여 네트워크를 정보를 보여줍니다 - `ss`: 소켓에 관한 통계자료들을 보여줍니다 - `dmesg`: 부팅 메시지와 시스템 에러 메시지들을 보여줍니다 -- `hdparm`: SATA/ATA disk들의 정보를 수정하거나 그것들이 작동하도록 합니다. +- `sysctl`: 실행 시에 리눅스 커널 파라미터를 보여주거나 설정합니다 + +- `hdparm`: SATA/ATA disk들의 정보를 수정하거나 그것들이 작동하도록 합니다 - `lsblk`: 블록 디바이스들의 목록을 보여줍니다 : 여러분의 디스크들이나 디스크파티션들을 트리의 형태로 보여줍니다 - `lshw`, `lscpu`, `lspci`, `lsusb`, `dmidecode`: CPU, BIOS, RAID, graphics, devices 등의 하드웨어 정보를 보여줍니다 -- `lsmod`와 `modifno`: 커널 모듈의 상세정보를 목록으로 보여줍니다. +- `lsmod`, `modifno`: 커널 모듈의 상세정보를 목록으로 보여줍니다. -- `fortune`, `ddate`, 그리고 `sl`: 에... 증기기관차를 생각하고있고 그것을 인용하고 싶다면 이것은 "유용"합니다 +- `fortune`, `ddate`, `sl`: 에... 증기기관차를 생각하고있고 그것을 인용하고 싶다면 이것은 "유용"합니다 ## OS X only -*MacOS에서만* 해당되는 항목입니다. +*OS X에서만* 해당되는 항목입니다. -- `brew` (Homebrew)나 `port` (MacPorts)를 패키지 메니저로 사용합니다. 보다 많은 명령어를 MacOS에 설치하여 사용할 수 있습니다. +- `brew` (Homebrew)나 `port` (MacPorts)를 패키지 매니저로 사용합니다. 위의 많은 명령어를 OS X에 설치하여 사용할 수 있습니다. -- `pbcopy`를 이용하여 데스크탑 어플리케이션에 명령어 출력물을 복사하거나 `pbpaste`를 이용해 붙여넣기를 할 수 있습니다. +- `pbcopy`를 이용하여 데스크톱 애플리케이션에 명령어 출력물을 복사하거나 `pbpaste`를 이용해 붙여넣기를 할 수 있습니다. -- 데스크탑 어플리케이션에서 파일을 열기위해, `open` 또는 `open -a /Applications/Whatever.app`을 사용하면 됩니다. +- OS X 터미널에서 옵션 키를 알트 키(**alt-b**, **alt-f** 같은 위에 나온 명령)로 사용하려면 Preferences -> Profiles -> Keyboard를 열어 "Use Option as Meta key"를 선택하세요. + +- 데스크톱 애플리케이션에서 파일을 열기위해, `open` 또는 `open -a /Applications/Whatever.app`을 사용하면 됩니다. - Spotlight: `mdfind`를 이용해 파일을 찾고, `mdls`를 이용해 메타데이타 (사진 EXIF 정보와 같은) 목록을 볼 수 있습니다. -- MacOS는 BSD Unix 기반이며 많은 명령어들을 (예로 `ps`, `ls`, `tail`, `awk`, `sed`) 사용할 수 있으며, 이것들은 Linux 버전들과 미묘한 차이가 있습니다. 그리고 크게는 System V-style Unix와 GNU 도구들에 많은 영향을 받았습니다. 이런 내용들을 man 페이지 상단의 "BSD General Commands Manual." 라는 문구를 통해 알 수 있습니다. 가끔은 GNU 버전이 설치되기도합니다. (예로, GNU awk와 sed인 `gawk`와 `gsed`에서). 만약 이종 플랫폼간 Bash 스크립트를 작성하려면, 동일한 명령어 (예로, 파이썬이나 `perl`과 같은)나 테스트시 주의해야합니다. +- OS X는 BSD Unix 기반이며 많은 명령어들을 (예로 `ps`, `ls`, `tail`, `awk`, `sed`) 사용할 수 있으며, 이것들은 Linux 버전들과 미묘한 차이가 있습니다. 그리고 크게는 System V-style Unix와 GNU 도구들에 많은 영향을 받았습니다. 이런 내용들을 man 페이지 상단의 "BSD General Commands Manual." 라는 문구를 통해 알 수 있습니다. 가끔은 GNU 버전이 설치되기도 합니다. (예로, GNU awk와 sed인 `gawk`와 `gsed`에서). 만약 이종 플랫폼 간 Bash 스크립트를 작성하려면, 동일한 명령어 (예로, 파이썬이나 `perl`과 같은)나 테스트시 주의해야 합니다. +- OS X 릴리스 정보를 얻으시려면, `sw_vers`를 사용하세요. + +## Windows only + +Windows*에서만* 해당되는 항목입니다. + +- Windows 10에서는 [Bash on Ubuntu on Windows](https://msdn.microsoft.com/commandline/wsl/about)를 사용할 수 있습니다. 이는 유닉스 커맨드 라인 도구와 함께 친숙한 Bash 환경을 제공합니다. 좋은 점은, 리눅스 프로그램을 Windows에서 사용할 수있게 합니다. 하지만 Bash에서 Windows 프로그램을 사용할 수는 없습니다. + +- [Cygwin](https://cygwin.com/)를 설치해 Microsoft Windows에서 유닉스 셸을 사용할 수 있습니다. 이 문서에 기술된 대부분의 것들은 그대로 동작할 것입니다. + +- Cygwin의 패키지 매니저로 유닉스 프로그램을 더 설치할 수 있습니다. + +- 커맨드 라인 창으로 `mintty`를 사용하세요. + +- Windows의 클립보드를 `/dev/clipboard`로 접근할 수 있습니다. + +- `cygstart`을 실행해 등록된 애플리케이션을 사용해 임의의 파일을 열 수 있습니다. + +- Windows 레지스트리는 `regtool`로 접근할 수 있습니다. + +- `C:\\` Windows 드라이브 경로는 Cygwin에서는 `/cygdrive/c`가 되고, Cygwin의 `/` Windows에서 `C:\cygwin`가 되는것을 알아 두세요. Cygwin과 Windows 스타일의 파일 패스는 `cygpath`로 변환할 수 있습니다. 이는 Windows 프로그램을 실행하는 프로그램에서 유용하게 사용됩니다. + +- You can perform and script most Windows system administration tasks from the command line by learning and using `wmic`. + +- Windows에서 유닉스 룩엔필을 얻는 다른 대안은 [Cash](https://github.com/dthree/cash)입니다. 이 환경에는 매우 적은 유닉스 명령과 커맨드 라인 옵션만 사용가능하니 주의하세요. + +- Windows에서 GNU 개발자 툴(GCC같은)을 얻는 다른 대안으로 [MinGW](http://www.mingw.org/)와 거기에 포함된 [MSYS](http://www.mingw.org/wiki/msys) 패키지가 있습니다. 여기에는 bash, gawk, make, grep같은 도구가 포함됩니다. MSYS는 Cygwin에 비교하면 모든 기능은 없습니다. MinGW는 유닉스 툴을 네이티브 Windows로 포팅할 때 부분적으로 유용합니다. ## More resources -- [awesome-shell](https://github.com/alebcay/awesome-shell): 쉘에 대한 툴과 리소스들이 잘 정리되어 있는 리스트입니다. -- [Strict mode](http://redsymbol.net/articles/unofficial-bash-strict-mode/): 보다 나은 쉘스크립트를 작성하기 위한 정보글입니다. +- [awesome-shell](https://github.com/alebcay/awesome-shell): 셸에 대한 툴과 리소스들이 잘 정리되어 있는 리스트입니다. +- [awesome-osx-command-line](https://github.com/herrbischoff/awesome-osx-command-line): OS X 커맨드 라인에 관해 더 깊이 알수 있는 가이드 입니다. +- [Strict mode](http://redsymbol.net/articles/unofficial-bash-strict-mode/): 보다 나은 셸 스크립트를 작성하기 위한 정보글입니다. +- [shellcheck](https://github.com/koalaman/shellcheck): 셸 스크립트 정적 분석 도구 입니다. 특히, bash/sh/zsh에 대한 린트입니다. +- [Filenames and Pathnames in Shell](http://www.dwheeler.com/essays/filenames-in-shell.html): 셸 스크립트에서 파일 이름을 처리하는 법을 다루는 슬프도록 복잡한 미니츄어입니다. +- [Data Science at the Command Line](http://datascienceatthecommandline.com/#tools): 같은 이름의 책에서 나온, 데이터 사이언스를 위한 더 나은 명령과 도구들 입니다. ## Disclaimer -매우 작은 작업을 제외한 코드들은 다른 사람이 읽을 수 있도록 작성됩니다. 그러니 이 내용은 작성자 전원에게 책임이 있습니다. Bash에서 뭔가를 *할 수 있다는* 것이 당신이 뭔가를 해야된다는 것을 강요하는 것이 아니다! ;) +매우 작은 작업을 제외한 코드들은 다른 사람이 읽을 수 있도록 작성됩니다. 큰 힘에는 책임이 따릅니다. Bash에서 뭔가를 *할 수 있다는* 것은 Bash로 해야 된다는 의미가 아닙니다! ;) ## License diff --git a/README-pt.md b/README-pt.md index 4659937..c5d4676 100644 --- a/README-pt.md +++ b/README-pt.md @@ -228,15 +228,15 @@ Use `zsless`, `zmore`, `zcat`, and `zgrep` para manipular arquivos comprimidos. - Debugar um sistema java é uma outra historia, mas um simples truque nas máquinas virtuais Oracle ou algum outro tipo de JVM é que você pode executar `kill -3 ` e um completo rastreamento da pilha(stack trace) e resumo do heap (incluindo detalhes geracionais do garbage collector, os quais podem ser altamente informativos) serão vazados para stderr/logs. -- Use `mtr` como uma melhor alternativa ao traceroute, para identificar problemas na rede. +- Use [`mtr`](http://www.bitwizard.nl/mtr/) como uma melhor alternativa ao traceroute, para identificar problemas na rede. -- Para verificar o porque de um disco estar cheio, `ncdu` economiza bastante tempo em comparação aos comandos usuais como `du -sh *`. +- Para verificar o porque de um disco estar cheio, [`ncdu`](https://dev.yorhel.nl/ncdu) economiza bastante tempo em comparação aos comandos usuais como `du -sh *`. -- Para procurar qual socket ou processo está utilizando a banda de rede, tente `iftop` ou `nethogs`. +- Para procurar qual socket ou processo está utilizando a banda de rede, tente [`iftop`](http://www.ex-parrot.com/~pdw/iftop/) ou [`nethogs`](https://github.com/raboof/nethogs). - A ferramenta `ab` (que vem com o Apache) é muito útil para verificação rápida da performance do servidor web. Para mais complexos testes de carga, tente `siege`. -- Para debugs mais sérios da rede, `wireshark`, `tshark`, ou `ngrep`. +- Para debugs mais sérios da rede, [`wireshark`](https://wireshark.org/), [`tshark`](https://www.wireshark.org/docs/wsug_html_chunked/AppToolstshark.html), ou [`ngrep`](http://ngrep.sourceforge.net/). - Aprenda a respeito do `strace`e `ltrace`. Estes podem ser úteis se um programa está falhando, travado, ou quebrando, e você não sabe o por que, ou se você quer obter uma ideia geral da performance. Note que a opção de perfil (`-c`), e a habilidade de se plugar a um processo em execução (`-p`). @@ -246,7 +246,7 @@ Use `zsless`, `zmore`, `zcat`, and `zgrep` para manipular arquivos comprimidos. - Utilize `/proc`. Este é incrivelmente útil em algumas vezes quando se deseja debugar problemas ao vivo. Exemplos: `/proc/cpuinfo`, `/proc/xxx/cwd`, `/proc/xxx/exe`, `/proc/xxx/fd/`, `/proc/xxx/smaps`. -- Quando estiver debugando o porque de algo ter dado errado no passado, `sar` pode ser de muita utilidade. Ele exibe as estatísticas históricas da CPU, memória, rede e etc. +- Quando estiver debugando o porque de algo ter dado errado no passado, [`sar`](http://sebastien.godard.pagesperso-orange.fr/) pode ser de muita utilidade. Ele exibe as estatísticas históricas da CPU, memória, rede e etc. - Para análises de performance mais profundas do sistema, dê uma olhada em `stap` ([SystemTap](https://sourceware.org/systemtap/wiki)), [`perf`](http://en.wikipedia.org/wiki/Perf_(Linux)), e [`sysdig`](https://github.com/draios/sysdig). @@ -386,15 +386,15 @@ Alguns exemplos de como reunir os comandos. - `strace`: Debug para chamadas de sistema. -- `mtr`: melhor traceroute para debugar a rede. +- [`mtr`](http://www.bitwizard.nl/mtr/): melhor traceroute para debugar a rede. - `cssh`: Visualização concorrente da shell. - `rsync`: Sincroniza arquivos e pastas através do SSH. -- `wireshark` e `tshark`: captura de pacotes e debug de rede. +- [`wireshark`](https://wireshark.org/) e [`tshark`](https://www.wireshark.org/docs/wsug_html_chunked/AppToolstshark.html): captura de pacotes e debug de rede. -- `ngrep`: grep para a camada de rede. +- [`ngrep`](http://ngrep.sourceforge.net/): grep para a camada de rede. - `host` e `dig`: Consultas DNS. @@ -414,9 +414,9 @@ Alguns exemplos de como reunir os comandos. - `id`: Informações sobre a identidade do user/group. -- `sar`: histórico dos estados do sistema. +- [`sar`](http://sebastien.godard.pagesperso-orange.fr/): histórico dos estados do sistema. -- `iftop` ou `nethogs`: Utilização da rede por sockets ou processos. +- [`iftop`](http://www.ex-parrot.com/~pdw/iftop/) ou [`nethogs`](https://github.com/raboof/nethogs): Utilização da rede por sockets ou processos. - `ss`: Estatísticas dos sockets. diff --git a/README-ru.md b/README-ru.md index ec1e69e..2173c80 100644 --- a/README-ru.md +++ b/README-ru.md @@ -13,8 +13,8 @@ - [Отладка системы](#Отладка-системы) - [В одну строчку](#В-одну-строчку) - [Сложно, но полезно](#Сложно-но-полезно) -- [Windows only](#windows-only) - [OS X only](#os-x-only) +- [Windows only](#windows-only) - [Больше информации по теме](#Больше-информации-по-теме) - [Дисклеймер](#Дисклеймер) @@ -28,7 +28,7 @@ [изначально](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, где обитают люди, которые талантливее меня и могут предлагать улучшения данной подборки. Если Вы заметили ошибки (во всех вариантах перевода), пожалуйста +начав идею там, похоже, что стоит развить ее на Github, где обитают люди, которые талантливее меня и могут предлагать улучшения данной подборки. Если Вы заметили ошибки (во всех вариантах перевода), пожалуйста [**оставьте тикет или добавьте пулл-реквест**](CONTRIBUTING.md) (заранее изучив описание и посмотрев на уже созданнные тикеты и пулл-реквесты). ## Описание @@ -52,7 +52,7 @@ - Выучите как использовать хотя бы один консольный редактор текста. Идеально Vim (`vi`), ведь у него нет конкурентов, когда вам нужно быстренько что-то подправить (даже если Вы постоянно сидите на Emacs/какой-нибудь тяжелой IDE или на каком-нибудь модном хипстерском редакторе) -- Знайте как читать документацию через `man` (для любознательных – `man man`; `man` по углам документа в скобках добавляет номер, например 1 – для обычных команд, 5 – для файлов, конвенций, 8 – для административных команд). Ищите мануалы через `apropos`, и помните, что некоторые команды – не бинарники, а встроенные команды Баша, и помощь по ним можно получить через `help` и `help -d`. +- Знайте как читать документацию через `man` (для любознательных – `man man`; `man` по углам документа в скобках добавляет номер, например 1 – для обычных команд, 5 – для файлов, конвенций, 8 – для административных команд). Ищите мануалы через `apropos`, и помните, что некоторые команды – не бинарники, а встроенные команды Баша, и помощь по ним можно получить через `help` и `help -d`. С помощью `type command` можно определить, чем является команда - исполняемым файлом, алиасом или встроенной командой шелла. - Узнайте о том, как перенаправлять ввод и вывод через `>` и `<` и пайпы `|`. Помните, что `>` – переписывает выходной файл, а `>>` дописывает в конец. Узнайте побольше про stdout и stderr. @@ -84,7 +84,7 @@ - Для редактирования длинных команд после установки другого редактора (например `export EDITOR=vim`), нажатие **ctrl-x** **ctrl-e** откроет текущую команду в редакторе для многострочного редактирования. Или, как в vi, **escape-v**. -- Для просмотра последних команд используйте `history`. Также есть много сокращений, например, `!$` (последний аргумент) и `!!` последняя команда, хотя их часто можно заменить с помощью **ctrl-r** и **alt-.**. +- Для просмотра последних команд используйте `history`. Повторить команду: `!n` (где `n` - порядковый номер истории). Также есть много сокращений, например, `!$` (последний аргумент) и `!!` последняя команда (свертесь со страницей man "HISTORY EXPANSION"). Впрочем, их часто проще заменить с помощью **ctrl-r** и **alt-.**. - Перейти в домашнюю директорию можно с помощью `cd`. Для указания пути к файлам из домашней директории можно воспользоваться префиксом `~` (например, `~/.bashrc`). В `sh` скриптах для обращения к домашней директории можно использовать переменную `$HOME` @@ -151,7 +151,7 @@ - Используйте `man ascii` для просмотра хорошей ASCII таблицы, с шестнадцатеричными и десятичными значениями. Для информации по основным кодировкам полезны: `man unicode`, `man utf-8` и `man latin1`. -- Используйте `screen` или [`tmux`](https://tmux.github.io/) для того, чтобы иметь несколько экранов в одном терминале. Это особенно полезно, когда вы работаете с удаленным сервером по ssh, тогда вы можете подключаться/отключаться от сессий. `byobu` can enhance screen or tmux providing more information and easier management. Более минималистичный подход для этого – использование `dtach`. +- Используйте `screen` или [`tmux`](https://tmux.github.io/) для того, чтобы иметь несколько экранов в одном терминале. Это особенно полезно, когда вы работаете с удаленным сервером по ssh, тогда вы можете подключаться/отключаться от сессий. `byobu` can enhance screen or tmux providing more information and easier management. Более минималистичный подход для этого – использование [`dtach`](https://github.com/bogner/dtach). - В SSH полезно знать как сделать port tunnel с ключами `-L` и `-D` (и иногда `-R`). Например для того, чтобы зайти на сайт с удаленного сервера. @@ -221,6 +221,8 @@ - Знайте про `tee` для копирования из stdin и в stdout, и в файл, например `ls -al | tee file.txt`. +- Для более сложных вычислений, включающих групповые операции с данными, преобразование матриц и статистические функции, имейте в виду [`datamash`](https://www.gnu.org/software/datamash/). + - Не забывайте, что локализация вашей системы влияет на многие команды, включая порядки сортировки, сравнение и производительность. Многие дистрибутивы Linux автоматически выставляют `LANG` или любую другую переменную в подходящую для Вашего региона. Из-за этого результаты функций сортировки могут работать непредсказуемо. Рутины `i18n` могут *значительно* снизить производительность сортировок. В некоторых случаях можно полностью этого избегать (за исключением редких случаев), сортируя традиционно побайтово, для этого `export LC_ALL=C`. - Вы можете установить специфическое окружение для команды с помощью префикса перед ее вызовом, например `TZ=Pacific/Fiji date`. @@ -268,7 +270,7 @@ mkdir empty && rsync -r --delete empty/ some-dir && rmdir some-dir - Для того, чтобы разбить файл на куски, используйте `split` (разбивает на куски по размеру), или `csplit` (по шаблону или регулярному выражению). -- Для использования значений даты-времени используйте `dateadd`, `datediff`, `strptime` и т.д. из [`dateutils`](http://www.fresse.org/dateutils/). +- Для операций с датами и временем используйте `dateadd`, `datediff`, `strptime` и т.д. из [`dateutils`](http://www.fresse.org/dateutils/). - Используйте `zless`, `zmore`, `zcat`, и `zgrep` для работы со сжатыми файлами. @@ -294,25 +296,25 @@ mkdir empty && rsync -r --delete empty/ some-dir && rmdir some-dir - Отладка Java – совсем другая рыбка, но некоторые манипуляции над виртуальной машиной Оракла, или любой другой, позволят вам использовать `kill -3 ` и трассировать сводки стека и хипа (включая детали работы сборщика мусора, которые бывают очень полезными), и их можно сдампить в stderr или логи. `jps`, `jstat`, `jstack`, `jmap` также полезны. [SJK tools](https://github.com/aragozin/jvm-tools) более продвинуты. -- Используйте `mtr` для лучшей трассировки, чтобы находить проблемы сети. +- Используйте [`mtr`](http://www.bitwizard.nl/mtr/) для лучшей трассировки, чтобы находить проблемы сети. -- Для того, чтобы узнать, почему диск полностью забит, используйте `ncdu`, это сохраняет время по сравнению с тем же `du -sh *`. +- Для того, чтобы узнать, почему диск полностью забит, используйте [`ncdu`](https://dev.yorhel.nl/ncdu), это сохраняет время по сравнению с тем же `du -sh *`. -- Для того, чтобы узнать, какой сокет или процесс использует интернет, используйте `iftop` или `nethogs`. +- Для того, чтобы узнать, какой сокет или процесс использует интернет, используйте [`iftop`](http://www.ex-parrot.com/~pdw/iftop/) или [`nethogs`](https://github.com/raboof/nethogs). - `ab`, которая поставляется вместе с apache, полезна для быстрой и поверхностной проверки производительности веб-сервера. Для более серьезного нагрузочного тестирования используйте `siege`. -- Для более серьёзной отладки сетей используйте `wireshark`, `tshark` и `ngrep`. +- Для более серьёзной отладки сетей используйте [`wireshark`](https://wireshark.org/), [`tshark`](https://www.wireshark.org/docs/wsug_html_chunked/AppToolstshark.html) и [`ngrep`](http://ngrep.sourceforge.net/). - Знайте про `strace` и `ltrace`. Эти команды могут быть полезны, если программа падает или висит, и вы не знаете почему Или если вы хотите протестировать производительность программы. Не забывайте про возможность отладки (`-c`) и возможность прицепиться к процессу по pid (`-p`). -- Не забывайте про `ldd` для проверки системных библиотек. +- Не забывайте про `ldd` для проверки используемых библиотек. - Знайте как прицепиться к работающему процессу через `gdb` и получить трассировку стека. - Используйте `/proc`. Иногда он невероятно полезен для отладки запущенных программ. Примеры: `/proc/cpuinfo`, `/proc/meminfo`, `/proc/cmdline`, `/proc/xxx/cwd`, `/proc/xxx/exe`, `/proc/xxx/fd/`, `/proc/xxx/smaps` (где `xxx` это pid). -- Когда отлаживаете что-то, что сломалось в прошлом, используйте `sar` – бывает очень полезно. Показывает историю CPU, памяти, сети и т.д. +- Когда отлаживаете что-то, что сломалось в прошлом, используйте [`sar`](http://sebastien.godard.pagesperso-orange.fr/) – бывает очень полезно. Показывает историю CPU, памяти, сети и т.д. - Для анализа более сложных систем и производительности посмотрите на `stap` ([SystemTap](https://sourceware.org/systemtap/wiki)), [`perf`](http://en.wikipedia.org/wiki/Perf_(Linux)), и [`sysdig`](https://github.com/draios/sysdig). @@ -465,15 +467,15 @@ mkdir empty && rsync -r --delete empty/ some-dir && rmdir some-dir - `strace`: отладка системных вызовов -- `mtr`: лучшая трассировка для отладки сети +- [`mtr`](http://www.bitwizard.nl/mtr/): лучшая трассировка для отладки сети - `cssh`: несколько терминалов в одном UI - `rsync`: синхронизация файлов и папок через SSH -- `wireshark` и `tshark`: перехват пакетов и отладка сети +- [`wireshark`](https://wireshark.org/) и [`tshark`](https://www.wireshark.org/docs/wsug_html_chunked/AppToolstshark.html): перехват пакетов и отладка сети -- `ngrep`: grep для слоя сети (network layer). Перехват пакетов по заданной маске. +- [`ngrep`](http://ngrep.sourceforge.net/): grep для слоя сети (network layer). Перехват пакетов по заданной маске. - `host` и `dig`: узнать DNS @@ -497,9 +499,9 @@ mkdir empty && rsync -r --delete empty/ some-dir && rmdir some-dir - `id`: информация о пользователе/группе -- `sar`: история системной статистики +- [`sar`](http://sebastien.godard.pagesperso-orange.fr/): история системной статистики -- `iftop` или `nethogs`: использование сети конкретным сокетом или процессом +- [`iftop`](http://www.ex-parrot.com/~pdw/iftop/) или [`nethogs`](https://github.com/raboof/nethogs): использование сети конкретным сокетом или процессом - `ss`: статистика сокетов diff --git a/README-sl.md b/README-sl.md index 5974925..824c5e9 100644 --- a/README-sl.md +++ b/README-sl.md @@ -297,15 +297,15 @@ mkdir empty && rsync -r --delete empty/ some-dir && rmdir some-dir - Sistemsko razhroščevanje Java je drugačen tip, vendar enostaven trik na JVM-jih Oracle-a in nekaterih ostalih je, da lahko poženete `kill -3 ` in sledite celotnemu stack-u in povzetku kopic (vključno s podrobnostmi zbirke splošnih smeti, ki so lahko zelo informativne), ki bodo oddane v stderr/logs. JDK-jevi `jps`, `jstat`, `jstack`, `jmap` so uporabni. [SJK Tools](https://github.com/aragozin/jvm-tools) so bolj napredni. -- Uporabite `mtr` kot boljši usmerjevalnik sledenja za identifikacijo težav omrežja. +- Uporabite [`mtr`](http://www.bitwizard.nl/mtr/) kot boljši usmerjevalnik sledenja za identifikacijo težav omrežja. -- Za iskanje, zakaj je disk poln, vam `ncdu` prihrani čas preko običajnih ukazov kot je `du -sh *`. +- Za iskanje, zakaj je disk poln, vam [`ncdu`](https://dev.yorhel.nl/ncdu) prihrani čas preko običajnih ukazov kot je `du -sh *`. -- Da najdete katera vtičnica ali proces uporablja pasovno širino, poskusite `iftop` ali `nethogs`. +- Da najdete katera vtičnica ali proces uporablja pasovno širino, poskusite [`iftop`](http://www.ex-parrot.com/~pdw/iftop/) ali [`nethogs`](https://github.com/raboof/nethogs). - Orodje `ab` (prihaja z Apache-jem) je v pomoč za hitro in nečisto preverjanje uspešnosti spletnega strežnika. Za bolj kompleksno testiranje nalaganja poskusite `siege`. -- Za bolj resno razhroščevanje omrežja, `wireshark`, `tshark` ali `ngrep`. +- Za bolj resno razhroščevanje omrežja, [`wireshark`](https://wireshark.org/), [`tshark`](https://www.wireshark.org/docs/wsug_html_chunked/AppToolstshark.html) ali [`ngrep`](http://ngrep.sourceforge.net/). - Poznajte `strace` in `ltrace`. Ta sta v pomoč, če program ni uspešen, se ustavlja ali poruši in ne veste zakaj, ali če želite dobiti splošno idejo o uspešnosti. Bodite pozorni na opcijo profiliranja (`-c`) in zmožnost dodajanja k procesu, ki se poganja (`-p`). @@ -315,7 +315,7 @@ mkdir empty && rsync -r --delete empty/ some-dir && rmdir some-dir - Uporabite `/proc`. Včasih je izjemno v pomoč, ko se razhroščuje probleme v živo. Primeri: `/proc/cpuinfo`, `/proc/meminfo`, `/proc/cmdline`, ``/proc/xxx/cwd`,asdf `/proc/xxx/exe`, `/proc/xxx/fd/`, `/proc/xxx/smaps` (kjer je `xxx` id procesa ali pid). -- Ko se razhroščuje, zakaj je šlo nekaj narobe v preteklosti, je lahko zelo uporaben `sar`. Prikazuje statistiko zgodovine na procesorju, spominu, omrežju itd. +- Ko se razhroščuje, zakaj je šlo nekaj narobe v preteklosti, je lahko zelo uporaben [`sar`](http://sebastien.godard.pagesperso-orange.fr/). Prikazuje statistiko zgodovine na procesorju, spominu, omrežju itd. - Za globlje analize sistema in uspešnosti, poglejte `stap` ([SystemTap](https://sourceware.org/systemtap/wiki)), [`perf`](https://en.wikipedia.org/wiki/Perf_(Linux)) in [`sysdig`](https://github.com/draios/sysdig). @@ -467,15 +467,15 @@ Nekaj primerov sestavljanja ukazov skupaj: - `strace`: razhroščevanje sistemskega klica -- `mtr`: boljše sledenje usmerjanja za razhroščevanje omrežja +- [`mtr`](http://www.bitwizard.nl/mtr/): boljše sledenje usmerjanja za razhroščevanje omrežja - `cssh`: vizualna sočasna lupina - `rsync`: sinhronizacija datotek in map preko SSH ali v lokalnem datotečnem sistemu -- `wireshark` in `tshark`: zajem paketov in razhroščevanje omrežja +- [`wireshark`](https://wireshark.org/) in [`tshark`](https://www.wireshark.org/docs/wsug_html_chunked/AppToolstshark.html): zajem paketov in razhroščevanje omrežja -- `ngrep`: grep za nivo omrežja +- [`ngrep`](http://ngrep.sourceforge.net/): grep za nivo omrežja - `host` in `dig`: pogled DNS @@ -499,9 +499,9 @@ Nekaj primerov sestavljanja ukazov skupaj: - `id`: informacije identifikacije uporabnika/skupine -- `sar`: statistika zgodovine sistema +- [`sar`](http://sebastien.godard.pagesperso-orange.fr/): statistika zgodovine sistema -- `iftop` ali `nethogs`: izkoriščenost omrežja po vtičnici ali procesu +- [`iftop`](http://www.ex-parrot.com/~pdw/iftop/) ali [`nethogs`](https://github.com/raboof/nethogs): izkoriščenost omrežja po vtičnici ali procesu - `ss`: statistika vtičnice @@ -562,7 +562,7 @@ Sledeče velja *samo* za Windows. - Druga opcija, da dobite izgled in občutek Unix-a na Windows-u, je [Cash](https://github.com/dthree/cash). Upoštevajte, da so v tem okolju na voljo le nekateri ukazi Unix in opcije ukazne vrstice. -- Alternativna možnost, da dobite GNU razvojna orodja (kot je GCC) na Windows, je [MinGW](http://www.mingw.org) in njegov [MSYS](http://www.mingw.org/wiki/msys) paket, ki ponuja orodja, kot je bash, gawk, make in grep. MSYS nima na voljo vseh lastnosti v primerjavi s Cygwin. MinGW je posebej uporaben za izdelavo izvornih Windows prenosov orodij Unix. +- Alternativna možnost, da dobite GNU razvojna orodja (kot je GCC) na Windows, je [MinGW](http://www.mingw.org) in njegov [MSYS](http://www.mingw.org/wiki/msys) paket, ki ponuja orodja, kot je bash, gawk, make in grep. MSYS nima na voljo vseh lastnosti v primerjavi s Cygwin. MinGW je posebej uporaben za izdelavo izvornih Windows prenosov orodij Unix. ## Več virov diff --git a/README-uk.md b/README-uk.md index 4012c31..c2adc05 100644 --- a/README-uk.md +++ b/README-uk.md @@ -203,16 +203,16 @@ - Для інформації про мережу використовуйте `netstat` і `ss`. - Для більш детальної інформації використовуйте [`glances`](https://github.com/nicolargo/glances). Ця програма показує відразу кілька різних статистик в одному вікні терміналу. Корисно, коли стежите за відразу декількома системами. - Для того, щоб стежити за пам'яттю вокористовуйте `free` і `vmstat`. Зокрема, не забувайте, що значення кешування ("cached" value) - Це пам'ять, яку тримає ядро і ці значення є частиною `free`. -- Використовуйте `mtr` для збору статистики трасування(простежити маршрут до віддаленого сервера), щоб знаходити проблеми мережі. -- Для того, щоб дізнатися, чому диск повністю забитий, використовуйте `ncdu`, це зберігає час у порівнянні з тим же `du -sh *`. -- Для того, щоб дізнатися, який сокет або процес використовує інтернет, використовуйте `iftop` або `nethogs`. +- Використовуйте [`mtr`](http://www.bitwizard.nl/mtr/) для збору статистики трасування(простежити маршрут до віддаленого сервера), щоб знаходити проблеми мережі. +- Для того, щоб дізнатися, чому диск повністю забитий, використовуйте [`ncdu`](https://dev.yorhel.nl/ncdu), це зберігає час у порівнянні з тим же `du -sh *`. +- Для того, щоб дізнатися, який сокет або процес використовує інтернет, використовуйте [`iftop`](http://www.ex-parrot.com/~pdw/iftop/) або [`nethogs`](https://github.com/raboof/nethogs). - Додаток `ab` який поставляється разом з apache, корисний для швидкої і поверхневої перевірки продуктивності веб-сервера. Для більш серйозного лоад-тестінгу використовуйте `siege`. -- Для більш серйозної відладки мережі використовуйте `wireshark`, `tshark`, і `ngrep`. +- Для більш серйозної відладки мережі використовуйте [`wireshark`](https://wireshark.org/), [`tshark`](https://www.wireshark.org/docs/wsug_html_chunked/AppToolstshark.html), і [`ngrep`](http://ngrep.sourceforge.net/). - Знайте про `strace` та `ltrace`. Ці команди можуть бути корисні, якщо програма падає або висить, і ви не знаєте чому або якщо ви хочете протестувати продуктивність програми. Не забувайте про можливість відладки (`-c`) і можливість причепитися до процесу по pid (` -p`). - `ldd` для перевірки системних бібліотек. - Знайте як причепитися до працюючого процесу через `gdb` і отримати трасування стека. - Використовуйте `/proc`. Іноді він неймовірно корисний для налагодження запущених програм. Приклади: `/proc/cpuinfo`, `/proc/xxx/cwd`, ​​`/proc/xxx/exe`, `/proc/xxx/fd/`, `/proc/xxx/smaps` (де `xxx` id or pid процесу). -- Коли дебажите щось, що зламалося в минулому, використовуйте `sar` буває дуже корисно. Показує історію та статистику CPU, пам'яті, мережі і т.д. +- Коли дебажите щось, що зламалося в минулому, використовуйте [`sar`](http://sebastien.godard.pagesperso-orange.fr/) буває дуже корисно. Показує історію та статистику CPU, пам'яті, мережі і т.д. - Для аналізу більш складних систем і продуктивності використовуйте `stap` ([SystemTap](https://sourceware.org/systemtap/wiki)), [`perf`](http://en.wikipedia.org/wiki/ Perf_(Linux)) і [`sysdig`](https://github.com/draios/sysdig). - Дізнайтеся, яка у вас операційна система, через `uname` або `uname -a` (інформація про ядро) або `lsb_release -a` (інформація про дистрибутив Linux). - Використовуйте `dmesg`, коли щось відбувається зовсім дивне (це можуть бути проблеми із залізом, драйверами, тощо). @@ -307,11 +307,11 @@ - `nm`: symbols from object files - `ab`: вбудований в Apache бенчмарк веб-серверів - `strace`: відладка системних викликів -- `mtr`: трасування для відладки мережі +- [`mtr`](http://www.bitwizard.nl/mtr/): трасування для відладки мережі - `cssh`: паралельне виконання команд в графічному інтерфейсі - `rsync`: синхронізація файлів і папок через SSH або на локальній файловій системі -- `wireshark` і `tshark`: перехоплення пакетів і відладка мережі -- `ngrep`: grep мережевого рівня +- [`wireshark`](https://wireshark.org/) і [`tshark`](https://www.wireshark.org/docs/wsug_html_chunked/AppToolstshark.html): перехоплення пакетів і відладка мережі +- [`ngrep`](http://ngrep.sourceforge.net/): grep мережевого рівня - `host` і `dig`: пошук в DNS - `lsof`: інформація про файлові дескриптори та сокети - `dstat`: корисна статистика ОС @@ -323,8 +323,8 @@ - `last`: історія входів у систему - `w`: хто є залогіненим - `id`: інформація про користувача/групу -- `sar`: historic system stats -- `iftop` або `nethogs`: використання мережі конкретним сокетом або процесом +- [`sar`](http://sebastien.godard.pagesperso-orange.fr/): historic system stats +- [`iftop`](http://www.ex-parrot.com/~pdw/iftop/) або [`nethogs`](https://github.com/raboof/nethogs): використання мережі конкретним сокетом або процесом - `ss`: статистика сокетів - `dmesg`: помилки завантаження і помилки системи - `sysctl`: перегляду і налаштування параметрів ядра Linux коли воно запущене diff --git a/README-zh-Hant.md b/README-zh-Hant.md index a214578..5d9e512 100644 --- a/README-zh-Hant.md +++ b/README-zh-Hant.md @@ -11,7 +11,7 @@ - [檔案及資料處理](#檔案及資料處理) - [系統偵錯](#系統偵錯) - [單行指令碼](#單行指令碼) -- [冷門但有用](#冷門但有用) +- [冷門但有用的指令](#冷門但有用的指令) - [僅限 OS X 系統](#僅限-os-x-系統) - [僅限 Windows 系統](#僅限-windows-系统) - [更多資源](#更多資源) @@ -259,15 +259,15 @@ mkdir empty && rsync -r --delete empty/ some-dir && rmdir some-dir - Java 系統偵錯則是一件截然不同的事,一個可以用於 Oracle 的 JVM 或其他 JVM 上的偵錯的技巧是你可以運行`kill -3 ` 同時一個完整的棧軌跡和堆概述(包括 GC 的細節)會被儲存到標準輸出/日誌檔案。 JDK 中的`jps`,`jstat`,`jstack`,`jmap` 很有用。 [SJK tools](https://github.com/aragozin/jvm-tools) 更高階. -- 使用`mtr` ​​去跟蹤路由,用於確定網路問題。 +- 使用[`mtr`](http://www.bitwizard.nl/mtr/) ​​去跟蹤路由,用於確定網路問題。 -- 用`ncdu` 來檢視磁碟使用情況,它比常用的命令,如`du -sh *`,更節省時間。 +- 用[`ncdu`](https://dev.yorhel.nl/ncdu) 來檢視磁碟使用情況,它比常用的命令,如`du -sh *`,更節省時間。 -- 查詢正在使用頻寬的 socket 連線或程序,使用`iftop` 或`nethogs`。 +- 查詢正在使用頻寬的 socket 連線或程序,使用[`iftop`](http://www.ex-parrot.com/~pdw/iftop/) 或[`nethogs`](https://github.com/raboof/nethogs)。 - `ab` 工具(內建於Apache)可以簡單粗暴地檢查 web 伺服器的效能。對於更複雜的負載測試,使用`siege`。 -- `wireshark`,`tshark` 和`ngrep` 可用於復雜的網路偵錯。 +- [`wireshark`](https://wireshark.org/),[`tshark`](https://www.wireshark.org/docs/wsug_html_chunked/AppToolstshark.html) 和[`ngrep`](http://ngrep.sourceforge.net/) 可用於復雜的網路偵錯。 - 瞭解 `strace` 和 `ltrace`。這倆工具在你的程式運行失敗、掛起甚至崩潰,而你卻不知道為什麼或你想對效能有個總體的認識的時候是非常有用的。注意 profile 參數(`-c`)和附加到一個運行的程序參數(`-p`)。 @@ -277,7 +277,7 @@ mkdir empty && rsync -r --delete empty/ some-dir && rmdir some-dir - 學會使用 `/proc`。它在偵錯正在出現的問題的時候有時會效果驚人。比如:`/proc/cpuinfo`,`/proc/meminfo`,`/proc/cmdline`,`/proc/xxx/cwd`,`/proc/xxx/exe`,`/proc/xxx/fd/` ,`/proc/xxx/smaps`(這裡的`xxx` 表示程序的 id 或 pid)。 -- 當偵錯一些之前出現的問題的時候,`sar` 非常有用。它展示了 cpu、記憶體以及網路等的歷史資料。 +- 當偵錯一些之前出現的問題的時候,[`sar`](http://sebastien.godard.pagesperso-orange.fr/) 非常有用。它展示了 cpu、記憶體以及網路等的歷史資料。 - 關於更深層次的系統分析以及效能分析,看看`stap`([SystemTap](https://sourceware.org/systemtap/wiki)),[`perf`](http://en.wikipedia.org /wiki/Perf_(Linux)),以及[`sysdig`](https://github.com/draios/sysdig)。 @@ -422,15 +422,15 @@ mkdir empty && rsync -r --delete empty/ some-dir && rmdir some-dir - `strace`:系統呼叫偵錯 -- `mtr`:更好的網路偵錯跟蹤工具 +- [`mtr`](http://www.bitwizard.nl/mtr/):更好的網路偵錯跟蹤工具 - `cssh`:視覺化的並發 shell - `rsync`:通過ssh 或本地檔案系統同步檔案和資料夾 -- `wireshark` 和`tshark`:抓包和網路偵錯工具 +- [`wireshark`](https://wireshark.org/) 和[`tshark`](https://www.wireshark.org/docs/wsug_html_chunked/AppToolstshark.html):抓包和網路偵錯工具 -- `ngrep`:網路層的 grep +- [`ngrep`](http://ngrep.sourceforge.net/):網路層的 grep - `host` 和 `dig`:DNS 查詢 @@ -454,9 +454,9 @@ mkdir empty && rsync -r --delete empty/ some-dir && rmdir some-dir - `id`:使用者/組 ID 資訊 -- `sar`:系統歷史資料 +- [`sar`](http://sebastien.godard.pagesperso-orange.fr/):系統歷史資料 -- `iftop` 或`nethogs`:套接字及程序的網路利用 +- [`iftop`](http://www.ex-parrot.com/~pdw/iftop/) 或[`nethogs`](https://github.com/raboof/nethogs):套接字及程序的網路利用 - `ss`:socket 資料 diff --git a/README-zh.md b/README-zh.md index 77214bb..bfbfce8 100644 --- a/README-zh.md +++ b/README-zh.md @@ -295,15 +295,15 @@ mkdir empty && rsync -r --delete empty/ some-dir && rmdir some-dir - Java 系统调试则是一件截然不同的事,一个可以用于 Oracle 的 JVM 或其他 JVM 上的调试的技巧是你可以运行 `kill -3 ` 同时一个完整的栈轨迹和堆概述(包括 GC 的细节)会被保存到标准输出/日志文件。JDK 中的 `jps`,`jstat`,`jstack`,`jmap` 很有用。[SJK tools](https://github.com/aragozin/jvm-tools) 更高级. -- 使用 `mtr` 去跟踪路由,用于确定网络问题。 +- 使用 [`mtr`](http://www.bitwizard.nl/mtr/) 去跟踪路由,用于确定网络问题。 -- 用 `ncdu` 来查看磁盘使用情况,它比常用的命令,如 `du -sh *`,更节省时间。 +- 用 [`ncdu`](https://dev.yorhel.nl/ncdu) 来查看磁盘使用情况,它比常用的命令,如 `du -sh *`,更节省时间。 -- 查找正在使用带宽的套接字连接或进程,使用 `iftop` 或 `nethogs`。 +- 查找正在使用带宽的套接字连接或进程,使用 [`iftop`](http://www.ex-parrot.com/~pdw/iftop/) 或 [`nethogs`](https://github.com/raboof/nethogs)。 - `ab` 工具(捆绑于 Apache)可以简单粗暴地检查 web 服务器的性能。对于更复杂的负载测试,使用 `siege`。 -- `wireshark`,`tshark` 和 `ngrep` 可用于复杂的网络调试。 +- [`wireshark`](https://wireshark.org/),[`tshark`](https://www.wireshark.org/docs/wsug_html_chunked/AppToolstshark.html) 和 [`ngrep`](http://ngrep.sourceforge.net/) 可用于复杂的网络调试。 - 了解 `strace` 和 `ltrace`。这俩工具在你的程序运行失败、挂起甚至崩溃,而你却不知道为什么或你想对性能有个总体的认识的时候是非常有用的。注意 profile 参数(`-c`)和附加到一个运行的进程参数 (`-p`)。 @@ -313,7 +313,7 @@ mkdir empty && rsync -r --delete empty/ some-dir && rmdir some-dir - 学会使用 `/proc`。它在调试正在出现的问题的时候有时会效果惊人。比如:`/proc/cpuinfo`,`/proc/meminfo`,`/proc/cmdline`,`/proc/xxx/cwd`,`/proc/xxx/exe`,`/proc/xxx/fd/`,`/proc/xxx/smaps`(这里的 `xxx` 表示进程的 id 或 pid)。 -- 当调试一些之前出现的问题的时候,`sar` 非常有用。它展示了 cpu、内存以及网络等的历史数据。 +- 当调试一些之前出现的问题的时候,[`sar`](http://sebastien.godard.pagesperso-orange.fr/) 非常有用。它展示了 cpu、内存以及网络等的历史数据。 - 关于更深层次的系统分析以及性能分析,看看 `stap`([SystemTap](https://sourceware.org/systemtap/wiki)),[`perf`](https://en.wikipedia.org/wiki/Perf_(Linux)),以及[`sysdig`](https://github.com/draios/sysdig)。 @@ -466,15 +466,15 @@ mkdir empty && rsync -r --delete empty/ some-dir && rmdir some-dir - `strace`:系统调用调试 -- `mtr`:更好的网络调试跟踪工具 +- [`mtr`](http://www.bitwizard.nl/mtr/):更好的网络调试跟踪工具 - `cssh`:可视化的并发 shell - `rsync`:通过 ssh 或本地文件系统同步文件和文件夹 -- `wireshark` 和 `tshark`:抓包和网络调试工具 +- [`wireshark`](https://wireshark.org/) 和 [`tshark`](https://www.wireshark.org/docs/wsug_html_chunked/AppToolstshark.html):抓包和网络调试工具 -- `ngrep`:网络层的 grep +- [`ngrep`](http://ngrep.sourceforge.net/):网络层的 grep - `host` 和 `dig`:DNS 查找 @@ -498,9 +498,9 @@ mkdir empty && rsync -r --delete empty/ some-dir && rmdir some-dir - `id`:用户/组 ID 信息 -- `sar`:系统历史数据 +- [`sar`](http://sebastien.godard.pagesperso-orange.fr/):系统历史数据 -- `iftop` 或 `nethogs`:套接字及进程的网络利用 +- [`iftop`](http://www.ex-parrot.com/~pdw/iftop/) 或 [`nethogs`](https://github.com/raboof/nethogs):套接字及进程的网络利用 - `ss`:套接字数据 diff --git a/README.md b/README.md index 4b41e91..85d7db6 100644 --- a/README.md +++ b/README.md @@ -4,8 +4,11 @@ # The Art of Command Line +[![Ask a Question](https://img.shields.io/badge/%3f-Ask%20a%20Question-ff69b4.svg)](https://airtable.com/shrzMhx00YiIVAWJg) + [![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) - [Basics](#basics) - [Everyday use](#everyday-use) @@ -29,7 +32,7 @@ Some of this [appeared](http://www.quora.com/What-are-the-most-useful-Swiss-army-knife-one-liners-on-Unix) on [Quora](http://www.quora.com/What-are-some-time-saving-tips-that-every-Linux-user-should-know), but it has since moved to GitHub, where people more talented than the original author have made numerous improvements. -[**Please contribute**](/CONTRIBUTING.md) if you see an error or something that could be better! +[**Please submit a question**](https://airtable.com/shrzMhx00YiIVAWJg) if you have a question related to the command line. [**Please contribute**](/CONTRIBUTING.md) if you see an error or something that could be better! ## Meta @@ -98,7 +101,6 @@ Notes: cat hosts | xargs -I{} ssh root@{} hostname ``` - - `pstree -p` is a helpful display of the process tree. - Use `pgrep` and `pkill` to find or signal processes by name (`-f` is helpful). @@ -136,7 +138,7 @@ Notes: # continue in original dir ``` -- In Bash, note there are lots of kinds of variable expansion. Checking a variable exists: `${name:?error message}`. For example, if a Bash script requires a single argument, just write `input_file=${1:?usage: $0 input_file}`. Arithmetic expansion: `i=$(( (i + 1) % 5 ))`. Sequences: `{1..10}`. Trimming of strings: `${var%suffix}` and `${var#prefix}`. For example if `var=foo.pdf`, then `echo ${var%.pdf}.txt` prints `foo.txt`. +- In Bash, note there are lots of kinds of variable expansion. Checking a variable exists: `${name:?error message}`. For example, if a Bash script requires a single argument, just write `input_file=${1:?usage: $0 input_file}`. Using a default value if a variable is empty: `${name:-default}`. If you want to have an additional (optional) parameter added to the previous example, you can use something like `output_file=${2:-logfile}`. If $2 is omitted and thus empty, `output_file` will be set to `logfile`. Arithmetic expansion: `i=$(( (i + 1) % 5 ))`. Sequences: `{1..10}`. Trimming of strings: `${var%suffix}` and `${var#prefix}`. For example if `var=foo.pdf`, then `echo ${var%.pdf}.txt` prints `foo.txt`. - Brace expansion using `{`...`}` can reduce having to re-type similar text and automate combinations of items. This is helpful in examples like `mv foo.{txt,pdf} some-dir` (which moves both files), `cp somefile{,.bak}` (which expands to `cp somefile somefile.bak`) or `mkdir -p test-{a,b,c}/subtest-{1,2,3}` (which expands all possible combinations and creates a directory tree). @@ -145,6 +147,13 @@ Notes: diff /etc/hosts <(ssh somehost cat /etc/hosts) ``` +- When writing scripts you may want to put all of your code in curly braces. If the closing brace is missing, your script will be prevented from executing due to a syntax error. This makes sense when your script is going to be downloaded from the web, since it prevents partially downloaded scripts from executing: +```bash +{ + # Your code here +} +``` + - Know about "here documents" in Bash, as in `cat <logfile 2>&1` or `some-command &>logfile`. Often, to ensure a command does not leave an open file handle to standard input, tying it to the terminal you are in, it is also good practice to add `` and a full stack trace and heap summary (including generational garbage collection details, which can be highly informative) will be dumped to stderr/logs. The JDK's `jps`, `jstat`, `jstack`, `jmap` are useful. [SJK tools](https://github.com/aragozin/jvm-tools) are more advanced. -- Use `mtr` as a better traceroute, to identify network issues. +- Use [`mtr`](http://www.bitwizard.nl/mtr/) as a better traceroute, to identify network issues. -- For looking at why a disk is full, `ncdu` saves time over the usual commands like `du -sh *`. +- For looking at why a disk is full, [`ncdu`](https://dev.yorhel.nl/ncdu) saves time over the usual commands like `du -sh *`. -- To find which socket or process is using bandwidth, try `iftop` or `nethogs`. +- To find which socket or process is using bandwidth, try [`iftop`](http://www.ex-parrot.com/~pdw/iftop/) or [`nethogs`](https://github.com/raboof/nethogs). - The `ab` tool (comes with Apache) is helpful for quick-and-dirty checking of web server performance. For more complex load testing, try `siege`. -- For more serious network debugging, `wireshark`, `tshark`, or `ngrep`. +- For more serious network debugging, [`wireshark`](https://wireshark.org/), [`tshark`](https://www.wireshark.org/docs/wsug_html_chunked/AppToolstshark.html), or [`ngrep`](http://ngrep.sourceforge.net/). - Know about `strace` and `ltrace`. These can be helpful if a program is failing, hanging, or crashing, and you don't know why, or if you want to get a general idea of performance. Note the profiling option (`-c`), and the ability to attach to a running process (`-p`). @@ -314,7 +325,7 @@ mkdir empty && rsync -r --delete empty/ some-dir && rmdir some-dir - Use `/proc`. It's amazingly helpful sometimes when debugging live problems. Examples: `/proc/cpuinfo`, `/proc/meminfo`, `/proc/cmdline`, `/proc/xxx/cwd`, `/proc/xxx/exe`, `/proc/xxx/fd/`, `/proc/xxx/smaps` (where `xxx` is the process id or pid). -- When debugging why something went wrong in the past, `sar` can be very helpful. It shows historic statistics on CPU, memory, network, etc. +- When debugging why something went wrong in the past, [`sar`](http://sebastien.godard.pagesperso-orange.fr/) can be very helpful. It shows historic statistics on CPU, memory, network, etc. - For deeper systems and performance analyses, look at `stap` ([SystemTap](https://sourceware.org/systemtap/wiki)), [`perf`](https://en.wikipedia.org/wiki/Perf_(Linux)), and [`sysdig`](https://github.com/draios/sysdig). @@ -457,7 +468,7 @@ A few examples of piecing together commands: - `apg`: generates random passwords -- `7z`: high-ratio file compression +- `xz`: high-ratio file compression - `ldd`: dynamic library info @@ -467,15 +478,15 @@ A few examples of piecing together commands: - `strace`: system call debugging -- `mtr`: better traceroute for network debugging +- [`mtr`](http://www.bitwizard.nl/mtr/): better traceroute for network debugging - `cssh`: visual concurrent shell - `rsync`: sync files and folders over SSH or in local file system -- `wireshark` and `tshark`: packet capture and network debugging +- [`wireshark`](https://wireshark.org/) and [`tshark`](https://www.wireshark.org/docs/wsug_html_chunked/AppToolstshark.html): packet capture and network debugging -- `ngrep`: grep for the network layer +- [`ngrep`](http://ngrep.sourceforge.net/): grep for the network layer - `host` and `dig`: DNS lookups @@ -499,9 +510,9 @@ A few examples of piecing together commands: - `id`: user/group identity info -- `sar`: historic system stats +- [`sar`](http://sebastien.godard.pagesperso-orange.fr/): historic system stats -- `iftop` or `nethogs`: network utilization by socket or process +- [`iftop`](http://www.ex-parrot.com/~pdw/iftop/) or [`nethogs`](https://github.com/raboof/nethogs): network utilization by socket or process - `ss`: socket statistics