From 267d0720f6edeaf91fde6a0c6252d20171ec3679 Mon Sep 17 00:00:00 2001 From: Carlos Mantilla Date: Sun, 13 Sep 2015 09:19:01 +0300 Subject: [PATCH 01/33] es: updating translation 'daily use' --- README-es.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README-es.md b/README-es.md index e212b80..e4b348b 100644 --- a/README-es.md +++ b/README-es.md @@ -53,7 +53,7 @@ Notas: - Aprende sobre redirección de salida `>`, entrada `<` y pipes utilizando `|`. Conozca que `>` sobrescribe el archivo de salida y `>>` añade. Aprende sobre stdout y stderr. -- Aprende sobre expansión de archivos glob con `*` (y tal vez `?` y `{`...`}`) y quoting y la diferencia entre comillas dobles `"` y simples `'`. (Ver más en expansión de variables más abajo.) +- Aprende sobre expansión de archivos glob con `*` (y tal vez `?` y `[`...`]`) y quoting y la diferencia entre comillas dobles `"` y simples `'`. (Ver más en expansión de variables más abajo.) - Familiarízate con la administración de trabajo en Bash: `&`, **ctrl-z**, **ctrl-c**, `jobs`, `fg`, `bg`, `kill`, etc. @@ -70,7 +70,7 @@ Notas: ## De uso diario -- En Bash, se usa **Tab** para completar los argumentos y **ctrl-r** para buscar a través del historial de comandos. +- En Bash, se usa **Tab** para completar los argumentos o lista todos los comandos disponibles y **ctrl-r** para buscar a través del historial de comandos (despues de presionar, escribe la búsqueda, presiona **ctrl-r** repetidamente para hacer un ciclo a través de más coincidencias, presiona **Enter** para ejecurar el comando encontrado, o presiona la flecha derecha para poner el resultado en la línea actual y editar). - En Bash, se usa **ctrl-w** para borrar la última palabra, y **ctrl-u** para borrar todo hacia atrás hasta el inicio de la línea. Se usa **alt-b** y **alt-f** para moverse entre palabras, **ctrl-a** para mover el cursor al principio de la línea, **ctrl-e** para mover el cursor al final de la línea, **ctrl-k** para eliminar hasta el final de la línea, **ctrl-l** para limpiar la pantalla. Ver `man readline` para todos los atajos de teclado por defecto en Bash. Son una gran cantidad. Por ejemplo **alt-.** realiza un ciclo a través de los comandos previos, y **alt-*** expande un glob. From 82109bf2a4f7a9d5835866e833ac77e0786abec5 Mon Sep 17 00:00:00 2001 From: Carlos Mantilla Date: Sun, 13 Sep 2015 10:29:36 +0300 Subject: [PATCH 02/33] es: update until line 110. --- README-es.md | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/README-es.md b/README-es.md index e4b348b..b4d4fdd 100644 --- a/README-es.md +++ b/README-es.md @@ -74,7 +74,9 @@ Notas: - En Bash, se usa **ctrl-w** para borrar la última palabra, y **ctrl-u** para borrar todo hacia atrás hasta el inicio de la línea. Se usa **alt-b** y **alt-f** para moverse entre palabras, **ctrl-a** para mover el cursor al principio de la línea, **ctrl-e** para mover el cursor al final de la línea, **ctrl-k** para eliminar hasta el final de la línea, **ctrl-l** para limpiar la pantalla. Ver `man readline` para todos los atajos de teclado por defecto en Bash. Son una gran cantidad. Por ejemplo **alt-.** realiza un ciclo a través de los comandos previos, y **alt-*** expande un glob. -- Alternativamente, si amas los atajos de teclado vi-style, usa `set -o vi`. +- Alternativamente, si amas los atajos de teclado vi-style, usa `set -o vi`. (y `set -o emacs` para regresar a la anterior). + +- Para editar largos comandos, después de configurar to editor (por ejemplo `export EDITOR=vim`), **ctrl-x** **ctrl-e** se abrirá el comando actual en un editor para editar multiples líneas. O en estilo vi, **escape-v**. - Para ver los últimos comandos, `history`. También existen abreviaciones, tales como, `!$` (último argumento) y `!!` último comando, aunque son fácilmente remplazados con **ctrl-r** y **alt-.**. @@ -104,7 +106,11 @@ Notas: - Usa `alias` para crear atajos para comandos comúnmente usados. Por ejemplo, `alias ll="las -latr"` crea el alias `ll` -- En Bash scripts, usa `set -x` para depurar la salida. Usa el modo estricto cuando se posible. Usa `set -e` para abortar en caso de errores. Usa `set -o pipefail` también, para ser estrictos sobre los errores (aunque este tema es un poco delicado). Para scripts más complejos, usa también `trap`. +- En Bash scripts, usa `set -x` (o su variantes `set -v`, que registra las entradas sin procesar, incluyendo variables sin expander y comantarios) para depurar la salida. Usa el modo estricto al menos que tengas una buena razón para no hacerlo: Usa `set -e` para abortar en caso de errores (códigos de salida distintos a cero). Usa `set -u` para detectar uso de variables no definidas. Considera `set -o pipefail` también, para los errores con pipes, también (estudiar mas sobre este como un tema delicado). Para scripts más complejos, usa también `trap`. en EXIT o ERR. Un hábito útil es para comenzar un script como este, el cual detectará y abortará con errores comunes e imprimirá un mensaje: +```bash + set -euo pipefail + trap "echo 'error: Falló del Script: ver arriba comando que falló'" ERR +``` - En Bash scripts, subshells (escritos con paréntesis) son maneras convenientes para agrupar los comandos. Un ejemplo común es temporalmente moverse hacia un directorio de trabajo diferente, Ej. ```bash From c089ca6b3c1556f522ebe33db2e0a8a66a1dfd2c Mon Sep 17 00:00:00 2001 From: Peter Kokot Date: Mon, 5 Oct 2015 17:39:16 +0200 Subject: [PATCH 03/33] sl: update translation --- README-sl.md | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/README-sl.md b/README-sl.md index be6d3c6..655b40f 100644 --- a/README-sl.md +++ b/README-sl.md @@ -21,13 +21,14 @@ ![curl -s 'https://raw.githubusercontent.com/jlevy/the-art-of-command-line/master/README.md' | egrep -o '`\w+`' | tr -d '`' | cowsay -W50](cowsay.png) -Jedrnatost v ukazni vrstici je znanje, ki je pogostokrat zanemarjeno ali smatrano za zastarelo, vendar izboljša vašo fleksibilnost in produktivnost kot inženir na očitne in neočitne načine. To so izbrani zapiski in nasveti glede uporabe ukazne vrstice, ki sem jo našel uporabno pri delu z Linux-om. Nekateri nasveti so elementarni in nekateri so precej določeni, sofisticirani ali nepregledni. Ta stran ni dolga, vendar če lahko uporabite in se spomnite vseh elementov tu, boste vedeli veliko. +Jedrnatost v ukazni vrstici je znanje, ki je pogostokrat zanemarjeno ali smatrano za zastarelo, vendar izboljša vašo fleksibilnost in produktivnost kot inženir na očitne in neočitne načine. To so izbrani zapiski in nasveti glede uporabe ukazne vrstice, ki smo jo našli uporabno pri delu z Linux-om. Nekateri nasveti so elementarni in nekateri so precej določeni, sofisticirani ali nepregledni. Ta stran ni dolga, vendar če lahko uporabite in se spomnite vseh elementov tu, boste vedeli veliko. +To delo je rezultat [mnogih avtorjev in prevajalcev](AUTHORS.md). Veliko tega se [prvotno](http://www.quora.com/What-are-some-lesser-known-but-useful-Unix-commands) [pojavi](http://www.quora.com/What-are-the-most-useful-Swiss-army-knife-one-liners-on-Unix) na [Quori](http://www.quora.com/What-are-some-time-saving-tips-that-every-Linux-user-should-know), -vendar glede na dani interes tu, izgleda vredno uporabe GitHub-a, kjer ljudje bolj talentirani kot jaz lahko bralno predlagajo izboljšave. Če opazite napako ali nekaj, kar je lahko bolje, prosim, pošljite težavo ali zahtevek potega (PR)! (Seveda, prosim preglejte meta sekcijo in obstoječe težave/zahtevke potega najprej.) +vendar glede na dani interes tu, izgleda vredno uporabe GitHub-a, kjer lahko ljudje bolj talentirani od prvotnega avtorja takoj predlagajo izboljšave. Če opazite napako ali nekaj, kar je lahko bolje, prosim, pošljite težavo ali zahtevek potega (PR)! (Seveda, prosim preglejte meta sekcijo in obstoječe težave/zahtevke potega najprej.) ## Meta @@ -224,7 +225,7 @@ Opombe: - Standardna orodja za popravljanje izvorne kode so `diff` in `patch`. Glejte tudi `diffstat` za povzetek statistike diff-a in `sdiff` za diff drug ob drugem. Bodite pozorni, saj `diff -r` deluje za celotne direktorije. Uporabite `diff -r tree1 tree2 | diffstat` za povzetek sprememb. Uporabite `vimdiff` za primerjanje in urejanje datotek. -- Pri binarnih datotekah uporabite `hd` za enostavne heksadecimalne izpise in `bvi` za binarno urejanje. +- Pri binarnih datotekah uporabite `hd`, `hexdump` ali `xxd` za enostavne heksadecimalne izpise in `bvi` ali `biew` za binarno urejanje. - `strings` (plus `grep` itd.) vam omogoča najti bite v tekstu tudi za binarne datoteke. @@ -396,7 +397,7 @@ Nekaj primerov sestavljanja ukazov skupaj: - `pv`: nadzira napredek podatkov skozi cev -- `hd` in `bvi`: izvrže ali uredi binarne datoteke +- `hd`, `hexdump`, `xxd`, `biew` in `bvi`: izvrže ali uredi binarne datoteke - `strings`: izvleče tekst iz binarnih datotek From 015c487f13cc6895a2ffd33e79040a952b7777ab Mon Sep 17 00:00:00 2001 From: Peter Kokot Date: Thu, 8 Oct 2015 18:10:29 +0200 Subject: [PATCH 04/33] sl: update translation up to 7b85fba0 --- README-sl.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/README-sl.md b/README-sl.md index 655b40f..9f60914 100644 --- a/README-sl.md +++ b/README-sl.md @@ -217,6 +217,11 @@ Opombe: repren --full --preserve-case --from foo --to bar . ``` +- Kot pravi stran vodiča, je `rsync` resnično hiter in izredno vsestransko orodje kopiranja datotek. Znano je po sinhronizaciji med napravami vendar je enakovredno uporaben tudi lokalno. Je tudi eden izmed [najhitrejših načinov](https://web.archive.org/web/20130929001850/http://linuxnote.net/jianingy/en/linux/a-fast-way-to-remove-huge-number-of-files.html) za izbris velikega števila datotek: +```sh +mkdir empty && rsync -r --delete empty/ some-dir && rmdir some-dir +``` + - Uporabite `shuf` za naključno mešanje ali izbiro naključnih vrstic iz datoteke. - Poznajte opcije za `sort`. Za številke uporabite `-n` ali `-h` za upravljanje številk človeku prijaznih za branje (npr. iz `du -h`). Vedite, kako delujejo ključi (`-t` in `-k`). Še posebej pazite, da morate zapisati `-k1,1`, da razvrstite samo po prvem polju; `-k1` pomeni razvrščanje glede na celotno vrstico. Stabilno razvrščanje (`sort -s`) je lahko uporabno. Na primer, da sortirate najprej po polju 2 in nato po polju 1, lahko uporabite `sort -k1,1 | sort -s -k2,2`. @@ -295,7 +300,7 @@ Nekaj primerov sestavljanja ukazov skupaj: cat a b b | sort | uniq -u > c # c is set difference a - b ``` -- Uporabite `grep . *`, da vizualno preučite vse vsebine vseh datotek v direktoriju, npr. za direktorije napolnjene s konfiguracijskimi nastavitvami, kot so `/sys`, `/proc`, `/etc`. +- Uporabite `grep . *`, da hitro preučite vsebine vseh datotek v direktoriju (vsaka vrstica ima par z imenom datoteke) ali `head -100 *` (da iima vsaka datoteka glavo). To je lahko uporabno za direktorije napolnjene s konfiguracijskimi nastavitvami, kot so tiste v `/sys`, `/proc`, `/etc`. - Povzetje vseh številk v tretjem stolpcu tekstovne datoteke (to je verjetno 3X hitrejše in 3X manj kode kot Python-ov ekvivalent): From a63c394699c73cfe4633ec566869d67741cf13d6 Mon Sep 17 00:00:00 2001 From: Joshua Levy Date: Thu, 8 Oct 2015 14:08:10 -0700 Subject: [PATCH 05/33] MacOS: sw_vers --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index b50166c..db996db 100644 --- a/README.md +++ b/README.md @@ -499,6 +499,8 @@ These are items relevant *only* on MacOS. - Be aware MacOS is based on BSD Unix, and many commands (for example `ps`, `ls`, `tail`, `awk`, `sed`) have many subtle variations from Linux, which is largely influenced by System V-style Unix and GNU tools. You can often tell the difference by noting a man page has the heading "BSD General Commands Manual." In some cases GNU versions can be installed, too (such as `gawk` and `gsed` for GNU awk and sed). If writing cross-platform Bash scripts, avoid such commands (for example, consider Python or `perl`) or test carefully. +- To get MacOS release information, use `sw_vers`. + ## More resources From 91594b4044741cb621ff3ddf33994db8c5782933 Mon Sep 17 00:00:00 2001 From: Peter Kokot Date: Thu, 8 Oct 2015 23:18:10 +0200 Subject: [PATCH 06/33] sl: sync translation with English version up to fd559e2de47ba9a8a0e46d61ddb7f01380221af9 --- README-sl.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README-sl.md b/README-sl.md index 9f60914..ee114e6 100644 --- a/README-sl.md +++ b/README-sl.md @@ -499,6 +499,8 @@ To so elementi pomembni *samo* za MacOS. - Bodite pozorni, saj je MacOS osnovan na BSD Unix in mnogi ukazi (na primer `ps`, `ls`, `tail`, `awk`, `sed`) imajo mnoge subtilne različice iz Linux-a, na katerega je večinoma vplival System V-style Unix in GNU tools. Pogostokrat lahko poveste razliko tako, da opazite, da ima stran man naslov "BSD General Commands Manual." V nekaterih primerih se lahko namestijo tudi GNU različice (kot so `gawk` in `gsed` za GNU awk in sed). Če pišete skripte Bash za vse platforme, se izogibajte takim ukazom (na primer, z upoštevanjem Python ali `perl`) ali pazljivo testirajte. +- Da dobite informacije o izdaji MacOS, uporabite `sw_vers`. + ## Več virov From 1cacb3c66687aa20e6994e9c297567978cfc1c42 Mon Sep 17 00:00:00 2001 From: Joshua Levy Date: Tue, 20 Oct 2015 18:16:53 -0700 Subject: [PATCH 07/33] Add link to awesome-osx-command-line --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index db996db..61afbe5 100644 --- a/README.md +++ b/README.md @@ -505,6 +505,7 @@ These are items relevant *only* on MacOS. ## More resources - [awesome-shell](https://github.com/alebcay/awesome-shell): A curated list of shell tools and resources. +- [awesome-osx-command-line](https://github.com/herrbischoff/awesome-osx-command-line): A more in-depth guide for the Mac OS command line - [Strict mode](http://redsymbol.net/articles/unofficial-bash-strict-mode/) for writing better shell scripts. - [shellcheck](https://github.com/koalaman/shellcheck): A shell script static analysis tool. Essentially, lint for bash/sh/zsh. - [Filenames and Pathnames in Shell](http://www.dwheeler.com/essays/filenames-in-shell.html): The sadly complex minutiae on how to handle filenames correctly in shell scripts. From c70be7fd702ba44bc80eed63b69e4a0c7f1ea7ee Mon Sep 17 00:00:00 2001 From: Peter Kokot Date: Thu, 22 Oct 2015 21:40:06 +0200 Subject: [PATCH 08/33] sl: update translation --- README-sl.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README-sl.md b/README-sl.md index ee114e6..96cf4f1 100644 --- a/README-sl.md +++ b/README-sl.md @@ -505,6 +505,7 @@ To so elementi pomembni *samo* za MacOS. ## Več virov - [awesome-shell](https://github.com/alebcay/awesome-shell): urejan seznam orodij lupine in virov. +- [awesome-osx-command-line](https://github.com/herrbischoff/awesome-osx-command-line): Bolj poglobljen vodič za Mac OS ukazno vrstico. - [Strict mode](http://redsymbol.net/articles/unofficial-bash-strict-mode/) za pisanje boljših skript lupine. - [shellcheck](https://github.com/koalaman/shellcheck): lupinska skripta orodja statične analize. V osnovi, lint za bash/sh/zsh. - [Filenames and Pathnames in Shell](http://www.dwheeler.com/essays/filenames-in-shell.html): Na žalost kompleksne podrobnosti, kako pravilno ravnati z imeni datotek v lupinskih skriptah. From e350477c9b3c4d5a23dd3dad50f9bb28d092b53c Mon Sep 17 00:00:00 2001 From: Carlos Mantilla Date: Sat, 24 Oct 2015 19:08:39 +0300 Subject: [PATCH 09/33] es: update language translation. --- README-es.md | 62 +++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 47 insertions(+), 15 deletions(-) diff --git a/README-es.md b/README-es.md index b4d4fdd..b5a7b39 100644 --- a/README-es.md +++ b/README-es.md @@ -1,4 +1,4 @@ -[ Languages: [English](README.md), [Español](README-es.md), [한국어](README-ko.md), [Português](README-pt.md), [Русский](README-ru.md), [Slovenščina](README-sl.md), [中文](README-zh.md) ] +[ Languages: [English](README.md), [Español](README-es.md), [日本語](README-ja.md), [한국어](README-ko.md), [Português](README-pt.md), [Русский](README-ru.md), [Slovenščina](README-sl.md), [中文](README-zh.md) ] # El Arte del Terminal @@ -19,13 +19,14 @@ ![curl -s 'https://raw.githubusercontent.com/jlevy/the-art-of-command-line/master/README.md' | egrep -o '`\w+`' | tr -d '`' | cowsay -W50](cowsay.png) -La fluidez en el terminal es una destreza a menudo abandonada y considerada arcaica, pero esta mejora su flexibilidad y productividad como ingeniero en formas obvia y sutil. Esta es una selección de notas y consejos al usar el terminal que encontré útiles al trabajar en Linux. Algunos consejos son elementales y algunos bastante específicos, sofisticados u oscuros. Esta página no es larga, pero si puedes usar y recordar todos los puntos aquí mostrados, sabrás un montón. +La fluidez en el terminal es una destreza a menudo abandonada y considerada arcaica, pero esta mejora su flexibilidad y productividad como ingeniero en formas obvia y sutil. Esta es una selección de notas y consejos al usar el terminal que encontramos útiles al trabajar en Linux. Algunos consejos son elementales y algunos bastante específicos, sofisticados u oscuros. Esta página no es larga, pero si puedes usar y recordar todos los puntos aquí mostrados, sabrás un montón. +Este trabajo es el resultado de [muchos autores y traductores](AUTHORS.md). La mayor parte [originalmente](http://www.quora.com/What-are-some-lesser-known-but-useful-Unix-commands) [apareció](http://www.quora.com/What-are-the-most-useful-Swiss-army-knife-one-liners-on-Unix) en [Quora](http://www.quora.com/What-are-some-time-saving-tips-that-every-Linux-user-should-know), -pero debido al interés mostrado, parece que vale la pena usar Github, donde existen personas más talentosas que fácilmente pueden sugerir mejoras. Si ve un error o algo que podría ser mejor, por favor, crea un issue o PR! (Por supuesto primero revisa la sección meta de PRs/issues.) +pero debido al interés mostrado, parecía valer la pena usar Github, donde personas más talentosas que el author original pudiendo fácilmente sugerir mejoras. Si ve un error o algo que podría ser mejor, por favor, crea un issue o PR! (Por supuesto primero revisa la sección meta de PRs/issues.) ## Meta @@ -59,7 +60,7 @@ Notas: - Conoce `ssh` y lo básico de autenticación sin contraseña, vía `ssh-agent`, `ssh-add`, etc. -- Administración de archivos básica: `ls` y `ls -l` (en particular, aprende el significado de cada columna en `ls -l`), `less`, `head`, `tail` y `tail -f` (o incluso mejor, `less +F`), `ln` y `ln -s` (aprende las diferencias y ventajas entre enlaces hard y soft), `chown`, `chmod`, `du` (para un resumen rápido del uso del disco: `du -hs *`). Para administración de archivos de sistema, `df`, `mount`, `fdisk`, `mkfs`, `lsblk`. +- Administración de archivos básica: `ls` y `ls -l` (en particular, aprende el significado de cada columna en `ls -l`), `less`, `head`, `tail` y `tail -f` (o incluso mejor, `less +F`), `ln` y `ln -s` (aprende las diferencias y ventajas entre enlaces hard y soft), `chown`, `chmod`, `du` (para un resumen rápido del uso del disco: `du -hs *`). Para administración de archivos de sistema, `df`, `mount`, `fdisk`, `mkfs`, `lsblk`. Aprenda que un inode es `ls -i` or `df -i`). - Administración básica de redes: `ip` o `ifconfig`, `dig`. @@ -121,6 +122,8 @@ Notas: - En Bash, considera que hay muchas formas de expansión de variables. Verificar la existencia de una variable: `${name:?error message}`. Por ejemplo, si un script Bash requiere un único argumento, solo escribe `input_file=${1:?usage: $0 input_file}`. Expansión aritmética: `i=$(( (i + 1) % 5 ))`. Secuencias: `{1..10}`. Reducción de cadenas de texto: `${var%suffix}` y `${var#prefix}`. Por ejemplo si `var=foo.pdf`, entonces `echo ${var%.pdf}.txt` imprime `foo.txt`. +- Utilizando la expansión de corchetes `{`...`}` puede reducir el tener que retipear un texto similar y automatizar conbinaciones de elementos. Esto es útil en ejemplos como `mv foo.{txt,pdf} some-dir` (el cual mueve ambos archivos), `cp somefile{,.bak}` (el cual se expandirá a `cp somefile somefile.bak`) o `mkdir -p test-{a,b,c}/subtest-{1,2,3}` (el cual se expandirá en todas las posibles conbinaciones y creará un árbol de directorios). + - La salida de un comando puede ser tratado como un archivo por medio de `<(some command)`. Por ejemplo, comparar el `/etc/hosts` local con uno remoto: ```sh diff /etc/hosts <(ssh somehost cat /etc/hosts) @@ -128,11 +131,11 @@ Notas: - Conocer acerca de "here documents" en Bash, como también de `cat <logfile 2>&1`. Frecuentemente, para garantizar que un comando no haya dejado abierto un archivo para controlar la entrada estándar vinculada al terminal en el que te encuentras y también como buena práctica puedes agregar `logfile 2>&1` o `some-command &>logfile`. Frecuentemente, para garantizar que un comando no haya dejado abierto un archivo para controlar la entrada estándar vinculada al terminal en el que te encuentras y también como buena práctica puedes agregar ` c # c es el conjunto diferencia a - b ``` -- Usa `grep . *` para examinar visualmente todo el contenido de todos los archivos de un directorio, Ej. para directorios llenos con ajustes de configuración, como `/sys`, `/proc`, `/etc`. +- Usa `grep . *` para rápidamente examinar el contenido de todos los archivos de un directorio (para que cada línea este emparejada con con el nombre de archivo), o `head -100 *` (para que cada archivo tenga un encabezado). Esto puede se útil para directorios llenos con ajustes de configuración como aquellos en `/sys`, `/proc`, `/etc`. - Sumar todos los números en la tercera columna de un archivo de texto (esto es probablemente 3 veces más rápido y 3 veces menos código que el equivalente en Python): @@ -299,6 +315,8 @@ Algunos ejemplos de comandos reunidos: cat access.log | egrep -o 'acct_id=[0-9]+' | cut -d= -f2 | sort | uniq -c | sort -rn ``` +- Para monitorear continuamente los cambios, usa `watch`, Ej. verificar los cambios de archivos en un directorio con `watch -d -n 2 'ls -rt1h | tail'` o para configuraciones de red mientras solucionas problemas con la configuración wifi `watch -d -n 2 ifconfig`. + - Ejecuta esta función para obtener un consejo aleatorio desde este documento (analiza el Markdown y extrae un elemento): ```sh function taocl() { @@ -335,7 +353,7 @@ Algunos ejemplos de comandos reunidos: - `fold`: ajusta de líneas de texto -- `column`: formatea el texto en columnas o tablas +- `column`: formatea campos de texto alineados, en columnas de ancho fijo o tablas - `expand` y `unexpand`: conversión entre tabuladores y espacios @@ -367,6 +385,12 @@ Algunos ejemplos de comandos reunidos: - `time`: ejecuta y calcula el tiempo de ejecución de un comando +- `lockfile`: crea un archivo semáforo que puedes solo ser removido con `rm -f` + +- `logrotate`: rota, comprime y registra correos electrónicos. + +- `watch`: ejecuta un comando repetidamente, mostrando resultados y/o resaltando cambios + - `tac`: imprime archivos en forma inversa - `shuf`: selección aleatoria de líneas de un archivo @@ -375,7 +399,7 @@ Algunos ejemplos de comandos reunidos: - `pv`: monitorea el progreso de datos a través de un tubo -- `hd` y `bvi`: descarga o edita archivos binarios +- `hd`, `hexdump`, `xxd`, `bview` y `bvi`: descarga o edita archivos binarios - `strings`: extrae texto desde archivos binarios @@ -389,6 +413,8 @@ Algunos ejemplos de comandos reunidos: - `units`: unidades de conversión y cálculos; convierte furlongs por fortnight a twips por blink (ver también `/usr/share/units/definitions.units`) +- `apg`: genera contraseñas aleatorias. + - `7z`: compresión de archivos de alto nivel - `ldd`: información de librería dinámica @@ -449,7 +475,7 @@ Algunos ejemplos de comandos reunidos: - `lshw`, `lscpu`, `lspci`, `lsusb`, `dmidecode`: información de hardware, incluyendo CPU, BIOS, RAID, gráficos, dispositivos, etc -- `lsmod` y `modifno`: lista y muestra detalles de los módulos del kernel +- `lsmod` y `modinfo`: lista y muestra detalles de los módulos del kernel - `fortune`, `ddate`, y `sl`: um, bien, depende de si considera las locomotoras de vapor y citas Zippy "útiles" @@ -462,17 +488,23 @@ Estos son puntos relevantes *únicamente* para MacOS. - 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 Terminal Mac OS 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`. - Spotlight: Busque archivos con `mdfind` y liste metadata (tal como información de foto EXIF) con `mdls`. - Ten en cuenta que MacOS está basado en BSD Unix, y muchos comandos (por ejemplo `ps`, `ls`, `tail`, `awk`, `sed`) tiene sutiles variaciones en comparación con Linux, que está en gran parte influenciado por el sistema Unix V-style y herramientas GNU. Comunmente se puede diferenciar al notar que una página man tienen el encabezado "BSD General Commands Manual." En algunos casos versiones GNU pueden ser instaladas también (tales como `gawk` y `gsed` para GNU awk y sed). Si escribe Bash scripts multiplataforma, evite tales comandos (por ejemplo, considere Python o `perl`) o prueba cuidadosamente. +- Para obtener la información de la versión del MacOS, usa `sw_vers`. ## Más recursos - [awesome-shell](https://github.com/alebcay/awesome-shell): Una lista curada de herramientas shell y recursos. +- [awesome-osx-command-line](https://github.com/herrbischoff/awesome-osx-command-line): Una guía más detallada para la línea de comandos del Mac OS. - [Strict mode](http://redsymbol.net/articles/unofficial-bash-strict-mode/) para escribir mejores script shell. +- [shellcheck](https://github.com/koalaman/shellcheck): Una herramienta de análisis estadístico del script shell. Esencialmente, lint para bash/sh/zsh. +- [Filenames and Pathnames in Shell](http://www.dwheeler.com/essays/filenames-in-shell.html): Las menudencias tristemente complejas sobre cómo manejar nombres de archivos correctamente en shell scripts. ## Advertencia From d98f4b75e3732e84ef914eb1b65a48d569d3488f Mon Sep 17 00:00:00 2001 From: Carlos Mantilla Date: Sat, 24 Oct 2015 19:17:04 +0300 Subject: [PATCH 10/33] es: check the aligment of the language line. --- README.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/README.md b/README.md index 61afbe5..e7407e1 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,4 @@ -[ Languages: -[English](README.md), [Español](README-es.md), [日本語](README-ja.md), [한국어](README-ko.md), [Português](README-pt.md), [Русский](README-ru.md), [Slovenščina](README-sl.md), [中文](README-zh.md) -] +[ Languages: [English](README.md), [Español](README-es.md), [日本語](README-ja.md), [한국어](README-ko.md), [Português](README-pt.md), [Русский](README-ru.md), [Slovenščina](README-sl.md), [中文](README-zh.md)] # The Art of Command Line From ffbe7bafb65cf623c689c59850876a0d20c6631e Mon Sep 17 00:00:00 2001 From: stepan Date: Thu, 8 Oct 2015 01:33:04 +0300 Subject: [PATCH 11/33] + me to autors --- AUTHORS.md | 1 + admin/authors-info.yml | 1 + 2 files changed, 2 insertions(+) diff --git a/AUTHORS.md b/AUTHORS.md index 17819c4..4522912 100644 --- a/AUTHORS.md +++ b/AUTHORS.md @@ -78,6 +78,7 @@ Contributors are listed in alphabetical order by GitHub login. * [Alex F. (youmee)](https://github.com/youmee) — [1+](https://github.com/jlevy/the-art-of-command-line/commits?author=youmee)/[1+](https://github.com/jlevy/the-art-of-command-line/issues?q=author%3Ayoumee) * [Zack Piper (zackp30)](https://github.com/zackp30) — [2+](https://github.com/jlevy/the-art-of-command-line/commits?author=zackp30)/[1+](https://github.com/jlevy/the-art-of-command-line/issues?q=author%3Azackp30) * [Xudong Zhang (zxdvd)](https://github.com/zxdvd) — [1+](https://github.com/jlevy/the-art-of-command-line/commits?author=zxdvd)/[1+](https://github.com/jlevy/the-art-of-command-line/issues?q=author%3Azxdvd) +* [Stepan Babala (stepan0904)](https://github.com/stepan0904) — [1+](https://github.com/jlevy/the-art-of-command-line/commits?author=stepan0904)/[1+](https://github.com/jlevy/the-art-of-command-line/issues?q=author%3Astepan0904) — _translator (ua)_ Numbers link to commits/issues. For simplicity, this file is maintained only in English. diff --git a/admin/authors-info.yml b/admin/authors-info.yml index 77c54cd..30438d6 100644 --- a/admin/authors-info.yml +++ b/admin/authors-info.yml @@ -36,3 +36,4 @@ roles: xuchunyang: translator (zh) stevenlordiam: translator (zh) Armour: translator (zh) + stepan0904: translator (ua) From 3bb24c522a87dce5c387b60508ef2bc3fbb36fe1 Mon Sep 17 00:00:00 2001 From: stepan Date: Thu, 8 Oct 2015 01:33:52 +0300 Subject: [PATCH 12/33] + ua --- README-es.md | 2 +- README-ja.md | 2 +- README-ko.md | 2 +- README-pt.md | 2 +- README-ru.md | 2 +- README-sl.md | 2 +- README-ua.md | 0 README-zh.md | 2 +- 8 files changed, 7 insertions(+), 7 deletions(-) create mode 100644 README-ua.md diff --git a/README-es.md b/README-es.md index eedd008..00ce770 100644 --- a/README-es.md +++ b/README-es.md @@ -1,5 +1,5 @@ [ Languages: -[English](README.md), [Español](README-es.md), [日本語](README-ja.md), [한국어](README-ko.md), [Português](README-pt.md), [Русский](README-ru.md), [Slovenščina](README-sl.md), [中文](README-zh.md) +[English](README.md), [Español](README-es.md), [日本語](README-ja.md), [한국어](README-ko.md), [Português](README-pt.md), [Русский](README-ru.md), [Slovenščina](README-sl.md), [中文](README-zh.md), [Українська](README-ua.md) ] diff --git a/README-ja.md b/README-ja.md index 2e5a31f..c9fd8ae 100644 --- a/README-ja.md +++ b/README-ja.md @@ -1,5 +1,5 @@ [ Languages: -[English](README.md), [Español](README-es.md), [日本語](README-ja.md), [한국어](README-ko.md), [Português](README-pt.md), [Русский](README-ru.md), [Slovenščina](README-sl.md), [中文](README-zh.md) +[English](README.md), [Español](README-es.md), [日本語](README-ja.md), [한국어](README-ko.md), [Português](README-pt.md), [Русский](README-ru.md), [Slovenščina](README-sl.md), [中文](README-zh.md), [Українська](README-ua.md) ] 原文のコミット [bb0c38c0899339e836c37eead4a9534b06c56662](https://github.com/jlevy/the-art-of-command-line/blob/bb0c38c0899339e836c37eead4a9534b06c56662/README.md) diff --git a/README-ko.md b/README-ko.md index d576ce3..5f78304 100644 --- a/README-ko.md +++ b/README-ko.md @@ -1,5 +1,5 @@ [ Languages: -[English](README.md), [Español](README-es.md), [日本語](README-ja.md), [한국어](README-ko.md), [Português](README-pt.md), [Русский](README-ru.md), [Slovenščina](README-sl.md), [中文](README-zh.md) +[English](README.md), [Español](README-es.md), [日本語](README-ja.md), [한국어](README-ko.md), [Português](README-pt.md), [Русский](README-ru.md), [Slovenščina](README-sl.md), [中文](README-zh.md), [Українська](README-ua.md) ] diff --git a/README-pt.md b/README-pt.md index fc066e0..659586a 100644 --- a/README-pt.md +++ b/README-pt.md @@ -1,5 +1,5 @@ [ Languages: -[English](README.md), [Español](README-es.md), [日本語](README-ja.md), [한국어](README-ko.md), [Português](README-pt.md), [Русский](README-ru.md), [Slovenščina](README-sl.md), [中文](README-zh.md) +[English](README.md), [Español](README-es.md), [日本語](README-ja.md), [한국어](README-ko.md), [Português](README-pt.md), [Русский](README-ru.md), [Slovenščina](README-sl.md), [中文](README-zh.md), [Українська](README-ua.md) ] diff --git a/README-ru.md b/README-ru.md index 644896a..335f7c4 100644 --- a/README-ru.md +++ b/README-ru.md @@ -1,5 +1,5 @@ [ Languages: -[English](README.md), [Español](README-es.md), [日本語](README-ja.md), [한국어](README-ko.md), [Português](README-pt.md), [Русский](README-ru.md), [Slovenščina](README-sl.md), [中文](README-zh.md) +[English](README.md), [Español](README-es.md), [日本語](README-ja.md), [한국어](README-ko.md), [Português](README-pt.md), [Русский](README-ru.md), [Slovenščina](README-sl.md), [中文](README-zh.md), [Українська](README-ua.md) ] diff --git a/README-sl.md b/README-sl.md index 96cf4f1..562c239 100644 --- a/README-sl.md +++ b/README-sl.md @@ -1,5 +1,5 @@ [ Languages: -[English](README.md), [Español](README-es.md), [日本語](README-ja.md), [한국어](README-ko.md), [Português](README-pt.md), [Русский](README-ru.md), [Slovenščina](README-sl.md), [中文](README-zh.md) +[English](README.md), [Español](README-es.md), [日本語](README-ja.md), [한국어](README-ko.md), [Português](README-pt.md), [Русский](README-ru.md), [Slovenščina](README-sl.md), [中文](README-zh.md), [Українська](README-ua.md) ] diff --git a/README-ua.md b/README-ua.md new file mode 100644 index 0000000..e69de29 diff --git a/README-zh.md b/README-zh.md index eb27bae..2d04cf1 100644 --- a/README-zh.md +++ b/README-zh.md @@ -1,5 +1,5 @@ [ Languages: -[English](README.md), [Español](README-es.md), [日本語](README-ja.md), [한국어](README-ko.md), [Português](README-pt.md), [Русский](README-ru.md), [Slovenščina](README-sl.md), [中文](README-zh.md) +[English](README.md), [Español](README-es.md), [日本語](README-ja.md), [한국어](README-ko.md), [Português](README-pt.md), [Русский](README-ru.md), [Slovenščina](README-sl.md), [中文](README-zh.md), [Українська](README-ua.md) ] From 61c3d4220abf193da734a6d54589ca5faf7a7405 Mon Sep 17 00:00:00 2001 From: stepan Date: Thu, 8 Oct 2015 01:34:23 +0300 Subject: [PATCH 13/33] + title --- README-ua.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/README-ua.md b/README-ua.md index e69de29..d79f92b 100644 --- a/README-ua.md +++ b/README-ua.md @@ -0,0 +1,8 @@ +[ Languages: +[English](README.md), [Español](README-es.md), [日本語](README-ja.md), [한국어](README-ko.md), [Português](README-pt.md), [Русский](README-ru.md), [Slovenščina](README-sl.md), [中文](README-zh.md), [Українська](README-ua.md) +] + +# Мистецтво командного рядка + +[![Вступайте в англомовний чат проекту https://gitter.im/jlevy/the-art-of-command-line](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/jlevy/the-art-of-command-line?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) + From fd7f2c1f3a215394fc1ef3f87f6c1a771fc4370d Mon Sep 17 00:00:00 2001 From: stepan Date: Thu, 8 Oct 2015 01:34:47 +0300 Subject: [PATCH 14/33] content list --- README-ua.md | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/README-ua.md b/README-ua.md index d79f92b..7eeca48 100644 --- a/README-ua.md +++ b/README-ua.md @@ -6,3 +6,29 @@ [![Вступайте в англомовний чат проекту 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) + +- [Опис](#Опис) +- [Основи](#Основи) +- [Щоденне використання](#Щоденне-використання) +- [Обробка файлів та інформації](#Обробка-файлів-та-інформації) +- [Дебаггінг](#Дебаггінг) +- [Одним рядком](#Одним-рядком) +- [Складно але корисно](#Складно-але-корисно) +- [Тільки для MacOS X](#Тільки-для-MacOS-X) +- [Інші джерела](#Інші-джерела) +- [Декламація](#Декламація) + + +## Опис + +##Основи +##Щоденне-використання +##Обробка-файлів-та-інформації +##Дебаггінг +##Одним-рядком +##Складно-але-корисно +##Тільки-для-MacOS-X +##Інші-джерела +##Декламація + + From dc301ef5fd2f90c8bd153be51abd66360907ffb3 Mon Sep 17 00:00:00 2001 From: stepan Date: Thu, 8 Oct 2015 01:35:27 +0300 Subject: [PATCH 15/33] introduction --- README-ua.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/README-ua.md b/README-ua.md index 7eeca48..6406185 100644 --- a/README-ua.md +++ b/README-ua.md @@ -19,6 +19,14 @@ - [Декламація](#Декламація) +![curl -s 'https://raw.githubusercontent.com/jlevy/the-art-of-command-line/master/README.md' | egrep -o '`\w+`' | tr -d '`' | cowsay -W50](cowsay.png) + +Використанню командного рядка часто не приділяють достатньої уваги. Про термінал говорять, як про щось містичне. Насправді, ці навики явно (і не явно) збільшує Вашу продуктивність в роботі. Даний документ є підбіркою заміток і порад, які я знайшов для себе корисними, працюючи з командним рядком в Linux. Деякі з них - прості й очевидні, але деякі - досить складні та призначені для вирішення конкретних завдань. Це невелика публікація, але якщо Ви вже все це знаєте, що тут написано, і можете згадати як це все використовувати - Ви знаєте багато! + +Ця робота є результатом [багатьох авторів і перекладачів](AUTHORS.md). +Багато з цього [спочатку](http://www.quora.com/What-are-some-lesser-known-but-useful-Unix-commands) [появилось](http://www.quora.com/What-are-the-most-useful-Swiss-army-knife-one-liners-on-Unix) на [Quora](http://www.quora.com/What-are-some-time-saving-tips-that-every-Linux-user-should-know), почавши там, схоже, що варто розмістити і на Github, де знаходяться дуже талановиті люди і можуть допомогти. Якщо Ви замітили помилки (у всіх варіантах перекладу), будь ласка залиште опис [issue](https://github.com/jlevy/the-art-of-command-line/issues) або зробіть Pull requests (Звичайно перевіривши уже існуючі) + + ## Опис ##Основи From 697a1dd1d7d6f9d2de62a5e04a281bd2e41d70d4 Mon Sep 17 00:00:00 2001 From: stepan Date: Fri, 23 Oct 2015 23:09:58 +0300 Subject: [PATCH 16/33] + description --- README-ua.md | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/README-ua.md b/README-ua.md index 6406185..b768ad6 100644 --- a/README-ua.md +++ b/README-ua.md @@ -29,8 +29,23 @@ ## Опис +Основне: + +- Дана публікація призначена як для недосвідчених, так і для досвідчених користувачів. Цілі: *об'ємість* (зібрати всі важливі аспекти використання командного рядка), *практичність* (надати конкретні приклади для найчастіших задач) та *стислість* (не варто вдаватись у неочевидні речі, про які можна почитати в інших місцях). +- Цей документ написаний для користувачів Linux, із єдиним винятком - розділ "[MacOS only](#macos-only)". Все інше підходить для всі UNIX/MacOS системи (і навіть для Cygwin). +- Сфокусована на інтерактивному Баші, але багато речей також можуть бути використані в інших Шелах; і в застосовні до Баш-скриптів. +- Ця інструкція включає в себе стандартні Unix команди і ті, для яких потрібно встановлювати сторонні пакети. Вони настільки корисні, що варті того, щоб їх встановили. + +Нотатки: + +- Що б все вміщалось на одній сторінці, вся інформація вставлена прямо тут. Ви досить розумні для того, щоб самостійно вивчити питання більш детально в іншому місці. Використовуйте `apt-get`/`yum`/`dnf`/`pacman`/`pip`/`brew` (залежно від вашої системи управління пакетами) для установки нових програм. +- На [Explainshell](http://explainshell.com/) можна знайти просте і докладне пояснення того, що таке команди, їх опції, пайпи(pipes(|)) і т.д. + + ##Основи + ##Щоденне-використання + ##Обробка-файлів-та-інформації ##Дебаггінг ##Одним-рядком From 9290ac30c32676f1a56074e9e5f48c179cb264fe Mon Sep 17 00:00:00 2001 From: stepan Date: Fri, 23 Oct 2015 23:10:18 +0300 Subject: [PATCH 17/33] fix mac os links --- README-ua.md | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/README-ua.md b/README-ua.md index b768ad6..e3332fe 100644 --- a/README-ua.md +++ b/README-ua.md @@ -14,7 +14,7 @@ - [Дебаггінг](#Дебаггінг) - [Одним рядком](#Одним-рядком) - [Складно але корисно](#Складно-але-корисно) -- [Тільки для MacOS X](#Тільки-для-MacOS-X) +- [MacOS only](#Macos-only) - [Інші джерела](#Інші-джерела) - [Декламація](#Декламація) @@ -47,11 +47,17 @@ ##Щоденне-використання ##Обробка-файлів-та-інформації + ##Дебаггінг + ##Одним-рядком + ##Складно-але-корисно -##Тільки-для-MacOS-X + +##Macos-only + ##Інші-джерела + ##Декламація From d72efb6cc37e93903e50afbc3e84da892de96c96 Mon Sep 17 00:00:00 2001 From: stepan Date: Sat, 24 Oct 2015 00:15:22 +0300 Subject: [PATCH 18/33] * --- README-ua.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README-ua.md b/README-ua.md index e3332fe..d08039d 100644 --- a/README-ua.md +++ b/README-ua.md @@ -33,7 +33,7 @@ - Дана публікація призначена як для недосвідчених, так і для досвідчених користувачів. Цілі: *об'ємість* (зібрати всі важливі аспекти використання командного рядка), *практичність* (надати конкретні приклади для найчастіших задач) та *стислість* (не варто вдаватись у неочевидні речі, про які можна почитати в інших місцях). - Цей документ написаний для користувачів Linux, із єдиним винятком - розділ "[MacOS only](#macos-only)". Все інше підходить для всі UNIX/MacOS системи (і навіть для Cygwin). -- Сфокусована на інтерактивному Баші, але багато речей також можуть бути використані в інших Шелах; і в застосовні до Баш-скриптів. +- Сфокусована на інтерактивному Bash, але багато речей також можуть бути використані в інших Шелах; і в застосовні до Bash-скриптів. - Ця інструкція включає в себе стандартні Unix команди і ті, для яких потрібно встановлювати сторонні пакети. Вони настільки корисні, що варті того, щоб їх встановили. Нотатки: From a96648ebd742a9cc767780e150c0b2440a9495a3 Mon Sep 17 00:00:00 2001 From: stepan Date: Sat, 24 Oct 2015 00:16:08 +0300 Subject: [PATCH 19/33] base --- README-ua.md | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/README-ua.md b/README-ua.md index d08039d..75761c4 100644 --- a/README-ua.md +++ b/README-ua.md @@ -44,6 +44,19 @@ ##Основи +- Вивчіть основи Bash. Просто візьміть і наберіть у командному рядку `man bash` в терміналі і хоча б перегляньте; він досить просто читається і він не дуже великий. Інші шелли теж можуть бути хороші, але Bash - потужна програма, і Bash завжди під рукою (використання *виключно* zsh, fish і т.д., які напевно круто виглядають на Вашому лептопі і ні в чому Вас не обмежують, наприклад Ви не зможете використовувати ці можливості Шеллу на вже існуючому сервері). +- Вивчіть як використовувати хоча б один консольний редактор тексту. Найкраще Vim (`vi`), адже у нього немає конкурентів, коли вам потрібно швиденько щось підправити (навіть якщо Ви постійно сидите у Emacs чи, якомусь важкому IDE або на модному хіпстерському редакторі. +- Знайте, як читати документацію через `man` (`man man`; `man` у кутах документа в дужках додає номер, наприклад 1 - для звичайних команд, 5 - для файлів, 8 - для адміністративних команд). Шукайте інформацію через `apropos`, і пам'ятайте, що деякі команди - не виконувані(executables), а вбудовані команди Bash, і допомогу по них можна отримати через команду `help` і `help -d`. +- Можна перенаправляти введення та виведення через `>` і `<` і пайпи `|`. Пам'ятайте, що `>` - переписує вихідний файл, а `>>` додає до нього. Дізнайтеся побільше про stdout і stderr. +- Дізнайтеся побільше про `*` (а також `?` і `[`...`]`), кавички, а також різницю між подвійними `"` і одинарними `'` кавичками. +- Знайте як працювати із процесами в 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 -hk *`). Для менеджменту файлової системи, `df`, `mount`, `fdisk`, `mkfs`, `lsblk`. +- Основи роботи з мережею: `ip` або` ifconfig`, `dig`. +- Добре знайте регулярні вирази і різні опції для `grep`/`egrep`. Такі опції як `-i`, `-o`, `-A`, та `-B` варто знати. +- Навчіться використовувати системами управління пакетами `apt-get`, `yum`, `dnf` та `pacman` (залежно від дистрибутива). Знайте як шукати і встановлювати пакети і обов'язково майте встановленим `pip` для установки командних утиліт, написаних на Python (деякі з тих команд, що ви знайдете нижче, найлегше встановити через` pip`). + + ##Щоденне-використання ##Обробка-файлів-та-інформації From 817e3dbff976101538c340dfe18d9c3a8d92009e Mon Sep 17 00:00:00 2001 From: stepan Date: Sat, 24 Oct 2015 00:19:04 +0300 Subject: [PATCH 20/33] * --- README-ua.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README-ua.md b/README-ua.md index 75761c4..987f517 100644 --- a/README-ua.md +++ b/README-ua.md @@ -14,7 +14,7 @@ - [Дебаггінг](#Дебаггінг) - [Одним рядком](#Одним-рядком) - [Складно але корисно](#Складно-але-корисно) -- [MacOS only](#Macos-only) +- [MacOS only](#macos-only) - [Інші джерела](#Інші-джерела) - [Декламація](#Декламація) From 96a466fbb4b2b449407e466b5d7a53b594c702e3 Mon Sep 17 00:00:00 2001 From: stepan Date: Sat, 24 Oct 2015 00:27:50 +0300 Subject: [PATCH 21/33] * --- README-ua.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README-ua.md b/README-ua.md index 987f517..c087a74 100644 --- a/README-ua.md +++ b/README-ua.md @@ -39,7 +39,7 @@ Нотатки: - Що б все вміщалось на одній сторінці, вся інформація вставлена прямо тут. Ви досить розумні для того, щоб самостійно вивчити питання більш детально в іншому місці. Використовуйте `apt-get`/`yum`/`dnf`/`pacman`/`pip`/`brew` (залежно від вашої системи управління пакетами) для установки нових програм. -- На [Explainshell](http://explainshell.com/) можна знайти просте і докладне пояснення того, що таке команди, їх опції, пайпи(pipes(|)) і т.д. +- На [Explainshell](http://explainshell.com/) можна знайти просте і докладне пояснення того, що таке команди, їх опції, пайпи(pipes(*|*)) і т.д. ##Основи From 5883884864b2d3b344f9be0700abf64200941d69 Mon Sep 17 00:00:00 2001 From: stepan Date: Sat, 24 Oct 2015 02:02:36 +0300 Subject: [PATCH 22/33] for every day usage part 1 --- README-ua.md | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/README-ua.md b/README-ua.md index c087a74..5c529b8 100644 --- a/README-ua.md +++ b/README-ua.md @@ -59,6 +59,42 @@ ##Щоденне-використання +- Використовуйте клавішу таб в Bash для автодоповнення аргументів до командам та **ctrl-r** для пошуку по історії командного рядка. +- Використовуйте **ctrl-w** в Bash для того, щоб видалити останнє слово в команді; **ctrl-u** для того, щоб видалити команду повністю. Використовуйте **alt-b** і **alt-f** для того, щоб переміщатись між словами у команді, **ctrl-k** для того, щоб перейти в кінця рядка, **ctrl-l** для того, щоб очистити екран. Гляньте на `man readline` щоб дізнатися про всі шорткати Bash. Їх багато! Наприклад, **alt-.** переміщається між попередніми аргументам команди, а **alt-*** максимально розширює аргументи. +- Якщо Вам подобаються шорткати vim, виконайте `set -o vi` (`set -o emacs` що б повернути налаштування). +- Для редагування довгих команд після налаштування вашого консольного редактора (наприклад `export EDITOR=vim`), **ctrl-x** **ctrl-e** відкриє поточну команду в редакторі для багаторядкового редагування команди. Або у vi стилі, **escape-v**. +- Для того, щоб переглянути історію, введіть `history`. Також існує безліч абревіатур, наприклад `! $` - Останній аргумент, `!!` - остання команда, хоча ці абревіатури часто заміняються шорткати **ctrl-r** та **alt-.**. +- Для того, щоб стрибнути до останньої робочої директорії, використовуйте `cd -` +- Якщо Ви написали команду наполовину і раптом передумали, натисніть **alt-#** для того, щоб додати `#` на початок команди, та відправте команду як коментар. Потім ви зможете повернутися до неї через історію команд. +- Використовуйти `xargs` (або` parallel`). Це дуже корисно. Зверніть увагу, що Ви можете контролювати кількість команд на кожен рядок (`-L`) також паралельність (`-P`). Якщо Ви не впевнені, що робите щось правильно, почніть з `xargs echo`. Також `-I{}` - корисно. Приклади: +```bash + find . -name '*.py' | xargs grep some_function + cat hosts | xargs -I{} ssh root@{} hostname +``` +- `pstree -p` - допоможе побачити дерево процесів. +- Використовуйте `pgrep` і `pkill` для того, щоб знаходити або слати сигнали до процесів по імені (`-f` корисна опція). +- Знайте різні сигнали, які можна слати процесам. Наприклад, щоб призупинити процес, використовуйте `kill -STOP [pid]`. Для повного списку подивіться `man 7 signal`. +- Використовуйте `nohup` або` disown`, якщо ви хочете запустити фоновий процес що б він постійн виконувався у фоні. +- Дізнайтеся, які процеси слухають порти через `netstat -lntp` або `ss -plat` (для TCP; додайте `-u` для UDP). +- Зверніть увагу на `lsof` щоб подивитися відкриті сокети і файли. +- Команда `uptime` or `w` показує як довго працює система. +- Використовуйте `alias`, щоб створити скорочення для часто використовуємих команд. Наприклад, `alias ll='ls -latr'` створить нове скорочення(alias) `ll`. +- У Bash скриптах використовуйте `set -x` (або `set -v`) щоб дебажити вивід. Використовуйте строгий(strict) режим скрізь, де це можливо. Використовуйте `set -e` для того, щоб припиняти виконання при помилках (не нульовий вихідний код). Використовуйте `set -u` що б визначити невстановленні змінні. Використовуйте `set -o pipefail` щоб при помилках невикористовувати пайпи(вертикальна риска). Для більш складних скриптів також використовуйте `trap` на EXIT or ERR. +Корисний звичка почати використовувати настипний скрипт, який допоможе виявити і перервати на загальних помилоках і вивести повідомлення: +```bash + set -euo pipefail + trap "echo 'error: Script failed: see failed command above'" ERR +``` +- У Bash-скриптах підоболочки(subshells) - зручний спосіб групувати команди. Один із найпоширеніших прикладів - тимчасово пересунутися в іншу робочу директорію: +```bash + # Do something in current dir + (cd / some / other / dir && other-command) + # Continue in original dir +``` +- У Bash багато типів простору змінних. Перевірити, чи існує змінна - `${name:? Error message}`. Наприклад, якщо Bash-скрипту потрібен всього один аргумент, просто напишіть `input_file=${1:?usage: $0 input_file}`. Арифметична область видимості: `i=$(( (i + 1) % 5 ))`. Послідовності: `{1..10}`. Обрізка рядків: `${var%suffix}` і `${var#prefix}`. Наприклад, якщо `var=foo.pdf` тоді `echo ${var%.pdf}.txt` виведе `foo.txt`. +- Фігурні скобки, використовуючи `{`...`}` може зменшити необхідність повторно вводити той самий текст і автоматизувати. Це корисно в такому прикладі як `mv foo.{txt,pdf} some-dir` (який пересуває обидва файла), `cp somefile{,.bak}` (який розширюється у `cp somefile somefile.bak`) або `mkdir -p test-{a,b,c}/subtest-{1,2,3}` (яка розширює всі можливі комбінації і створює дерево деректорій). + + ##Обробка-файлів-та-інформації ##Дебаггінг From 73a29d9571405ce9ac49ac23938e3d333ce1e1e2 Mon Sep 17 00:00:00 2001 From: stepan Date: Sun, 25 Oct 2015 21:07:13 +0200 Subject: [PATCH 23/33] * --- AUTHORS.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AUTHORS.md b/AUTHORS.md index 4522912..727b3a4 100644 --- a/AUTHORS.md +++ b/AUTHORS.md @@ -78,7 +78,7 @@ Contributors are listed in alphabetical order by GitHub login. * [Alex F. (youmee)](https://github.com/youmee) — [1+](https://github.com/jlevy/the-art-of-command-line/commits?author=youmee)/[1+](https://github.com/jlevy/the-art-of-command-line/issues?q=author%3Ayoumee) * [Zack Piper (zackp30)](https://github.com/zackp30) — [2+](https://github.com/jlevy/the-art-of-command-line/commits?author=zackp30)/[1+](https://github.com/jlevy/the-art-of-command-line/issues?q=author%3Azackp30) * [Xudong Zhang (zxdvd)](https://github.com/zxdvd) — [1+](https://github.com/jlevy/the-art-of-command-line/commits?author=zxdvd)/[1+](https://github.com/jlevy/the-art-of-command-line/issues?q=author%3Azxdvd) -* [Stepan Babala (stepan0904)](https://github.com/stepan0904) — [1+](https://github.com/jlevy/the-art-of-command-line/commits?author=stepan0904)/[1+](https://github.com/jlevy/the-art-of-command-line/issues?q=author%3Astepan0904) — _translator (ua)_ +* [Stepan Babala (stepan0904)](https://github.com/stepan0904) — [1+](https://github.com/jlevy/the-art-of-command-line/commits?author=stepan0904)/[0](https://github.com/jlevy/the-art-of-command-line/issues?q=author%3Astepan0904) — _translator (ua)_ Numbers link to commits/issues. For simplicity, this file is maintained only in English. From cd6855ed29dcd1c3b9f7c87ddb06e4ced5020a43 Mon Sep 17 00:00:00 2001 From: stepan Date: Sun, 25 Oct 2015 21:09:18 +0200 Subject: [PATCH 24/33] for every day usage part 2 --- README-ua.md | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/README-ua.md b/README-ua.md index 5c529b8..5333f51 100644 --- a/README-ua.md +++ b/README-ua.md @@ -93,6 +93,36 @@ ``` - У Bash багато типів простору змінних. Перевірити, чи існує змінна - `${name:? Error message}`. Наприклад, якщо Bash-скрипту потрібен всього один аргумент, просто напишіть `input_file=${1:?usage: $0 input_file}`. Арифметична область видимості: `i=$(( (i + 1) % 5 ))`. Послідовності: `{1..10}`. Обрізка рядків: `${var%suffix}` і `${var#prefix}`. Наприклад, якщо `var=foo.pdf` тоді `echo ${var%.pdf}.txt` виведе `foo.txt`. - Фігурні скобки, використовуючи `{`...`}` може зменшити необхідність повторно вводити той самий текст і автоматизувати. Це корисно в такому прикладі як `mv foo.{txt,pdf} some-dir` (який пересуває обидва файла), `cp somefile{,.bak}` (який розширюється у `cp somefile somefile.bak`) або `mkdir -p test-{a,b,c}/subtest-{1,2,3}` (яка розширює всі можливі комбінації і створює дерево деректорій). +- Вивід будь-якої команди можна обробити як файл наступним чином `<(some command)`. Наприклад, порівняння локального файлу `/etc/hosts з віддаленим: +```sh + diff /etc/hosts <(ssh somehost cat /etc/hosts) +``` +- Знайте про *heredoc* -сінтаксис в Bash: `cat << EOF ...`. +- У Bash перенаправляйте стандартні потоки виводу(output) та помилок, ось так: `some-command >logfile 2>&1`. Найчастіше, для того, щоб переконається, що команда не залишить відкритим файл, прив'язавши його до відкритого терміналу, вважається хорошою практикою додавати ` Date: Sun, 25 Oct 2015 22:29:46 +0200 Subject: [PATCH 25/33] + works with files --- README-ua.md | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/README-ua.md b/README-ua.md index 5333f51..e94f0d2 100644 --- a/README-ua.md +++ b/README-ua.md @@ -127,6 +127,52 @@ ##Обробка-файлів-та-інформації +- Для того, щоб знайти файл в поточній директорії, зробіть `find. -iname '*something*'`. Для того, щоб шукати файл по всій системі, використовуйте `locate something` (але не забувайте, що `updatedb` міг ще не проіндексувати нещодавно створені файли). +- Для пошуку по вмісту або фалах (більш детально зробити пошук допоможе `grep -r`) використовуйте [`ag`](https://github.com/ggreer/the_silver_searcher). +- Для конвертації HTML в текст: `lynx -dump -stdin` +- Для конвертації різних типів розмітки (HTML, Markdown та ін.) попроробуйте [`pandoc`](http://pandoc.org/). +- Якщо потрібно працювати з XML, є стара, але хороша утиліта - `xmlstarlet`. +- Для роботи з JSON використовуйте [`jq`](http://stedolan.github.io/jq/). +- Для YAML використовуйте [`shyaml`](https://github.com/0k/shyaml). +- Для Excel і CSV файлів [csvkit](https://github.com/onyxfish/csvkit) надає `in2csv`,` csvcut`, `csvjoin`,` csvgrep` і т.д. +- Для Amazon S3 [`s3cmd`](https://github.com/s3tools/s3cmd) є зручним і [`s4cmd`](https://github.com/bloomreach/s4cmd) є швидшим. Для решти сервісів Амазону використовуйте стандартний [`aws`](https://github.com/aws/aws-cli) і удосконалений [`saws`](https://github.com/donnemartin/saws). +- Знайте про `sort` і `uniq`, включаючи опції `-u` і `-d`, дивіться приклади нижче. Ще спробуйте `comm`. +- Знайте про `cut`, `paste`, і `join` для роботи з текстовими файлами. Багато людей використовують `cut`, забувши про `join`. +- Знайте про `wc`: для підрахунку нових рядків (`-l`), символів (`-m`), слів (`-w`) і для байтового підрахунку (`-c`). +- Знайте про `tee` для копіювання в файл з stdin і stdout, щось типу `ls -al | tee file.txt`. +- Не забувайте, що Ваша місце знаходження (локаль) впливає на багато команд, включаючи порядок сортування, порівняння і продуктивність. Багато дистрибутиви Linux автоматично виставляють `LANG` або будь-яку іншу змінну в підходящу для Вашого регіону. Через це результати функцій сортування можуть працювати непередбачувано. Знайте що `i18n` можуть значно знизити продуктивність сортувань. У деяких випадках можна повністю цього уникати (за винятком рідкісних випадків), сортуючи традиційно побайтово, використовуйте `export LC_ALL = C`. +- Знайте основи `awk` і `sed` для простих маніпуляцій з даними. Наприклад, щоб отримати суму всіх чисел, які знаходяться в третій колонці текстового файлу, можна використати `awk '{ x += $3 } END { print x }'`. Швидше за все, це вийде в рази 3 швидше і рази в 3 простіше, ніж робити це в Пітоні. +- Щоб замінити всі знаходження підрядка в одному або декількох файлах: +```sh + perl -pi.bak -e 's/old-string/new-string/g' my-files-*.txt +``` +- Щоб перейменувати відразу багато файлів за шаблоном, використовуйте `rename`. Для складних перейменувань може допомогти [`repren`](https://github.com/jlevy/repren): +```sh + # Recover backup files foo.bak -> foo: + rename 's/\.bak$//' *.bak + # Full rename of filenames, directories, and contents foo -> bar: + repren --full --preserve-case --from foo --to bar . +``` +- Як говорить man сторінка, `rsync` дійсно є швидким і універсальним інструментом копіювання файлів, для синхронізації між машинами, але в рівній мірі корисні на локальному рівні. Також [швидке рішення](https://web.archive.org/web/20130929001850/http://linuxnote.net/jianingy/en/linux/a-fast-way-to-remove-huge-number-of-files.html) що б видалити велику кількість файлів: +```sh + mkdir empty && rsync -r --delete empty/ some-dir && rmdir some-dir +``` +- Використовуйте `shuf`, щоб перемішати або вибрати випадкові рядки з файлу. +- Знайте опції для команди `sort`. Для чисел використовуйте `-n` або `-h`, для роботи з числами (наприклад `du -h`). Знайте як працюють ключі (`-t` і `-k`). Зокрема, не забувайте, що вам потрібно писати `-k1,1` для того, щоб впорядкувати тільки перше поле; `-k1` - це означає сортування враховуючи цілий рядок. Може бути корисною (`sort -s`). Наприклад для того, щоб відсортувати найважливіше по другому полю, а другорядне по першому, можна використовувати `sort -k1,1 | sort -s -k2,2`. +- Якщо вам коли-небудь доведеться написати код символу табуляції в терміналі, наприклад, для сортування за табуляції з прапором -t, використовуйте скорочення **ctrl-v** **[Tab]** або напишіть `$'\t'`. Останнє краще, тому що його можна скопіювати/вставити. +- Стандартні інструменти для виправлення вихідного коду це `diff` і` patch`. Також зверніть увагу на `diffstat` для перегляду статистики diff і `sdiff` для крок за кроком diff. Запамятайте `diff -r` працює рекурсивно по всій директорії. Використовуйте `diff -r tree1 tree2 | diffstat` для повного зведення змін. Використовуйте `vimdiff` порівняти і редагувати файли. +- Для бінарних файлів використовуйте `hd`, `hexdump` або `xxd` для простих hex-дампом, і` bvi` або `biew` для зміни бінарників. +- Також для бінарних файлів, `strings` (plus `grep`, etc.) дозволить Вам знайти біти тексту. +- Щоб подивитися різницю в бінарниках (дельта-кодування): `xdelta3`. +- Для конвертування кодувань використовуйте `iconv`. Для більш складних завдань - `uconv`, він підтримує деякі складні фічі Юникода. Наприклад, ця команда переводить рядки з файлу в нижній регістр і прибирає наголоси (наприклад в іспанській мові) +```sh + uconv -f utf-8 -t utf-8 -x '::Any-Lower; ::Any-NFD; [:Nonspacing Mark:] >; ::Any-NFC; ' < input.txt > output.txt +``` +- Для того, щоб розбити файл на шматки, використовуйте `split` (розбиває на шматки за розміром), або `csplit` (за шаблоном або по регулярному виразу). +- Для дати і часу використовуйте `dateadd`, `datediff`, `strptime` ще можете знайти на [`dateutils`](http://www.fresse.org/dateutils). +- Використовуйте `zless`,` zmore`, `zcat`, і `zgrep` для роботи зі стиснутими файлами. + + ##Дебаггінг ##Одним-рядком From dae4bce9e89c98afa49a9612dad6ee7ac4100f64 Mon Sep 17 00:00:00 2001 From: stepan Date: Sun, 25 Oct 2015 23:07:53 +0200 Subject: [PATCH 26/33] + debuging --- README-ua.md | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/README-ua.md b/README-ua.md index e94f0d2..3182dbd 100644 --- a/README-ua.md +++ b/README-ua.md @@ -175,6 +175,26 @@ ##Дебаггінг +- Дле веб-дебаггінга використовуйте `curl` і `curl -I`, або альтернативу - `wget` або [`httpie`](https://github.com/jakubroztocil/httpie). +- Щоб отримати інформацію про диск/CPU/мережі використовуйте `iostat`,` netstat`, `top` (краще `htop`) і `dstat`. Використовуйте `iostat -mxz 15` для отримання основної інформації CPU. +- Для інформації про мережу використовуйте `netstat` і `ss`. +- Для більш детальної інформації використовуйте [`glances`](https://github.com/nicolargo/glances). Ця програма показує відразу кілька різних статистик в одному вікні терміналу. Корисно, коли стежите за відразу декількома системами. +- Для того, щоб стежити за пам'яттю вокористовуйте `free` і `vmstat`. Зокрема, не забувайте, що значення кешування ("cached" value) - Це пам'ять, яку тримає ядро і ці значення є частиною `free`. +- Використовуйте `mtr` для кращого трасування(простежити маршрут), щоб знаходити проблеми мережі. +- Для того, щоб дізнатися, чому диск повністю забитий, використовуйте `ncdu`, це зберігає час у порівнянні з тим же `du -sh *`. +- Для того, щоб дізнатися, який сокет або процес використовує інтернет, використовуйте `iftop` або `nethogs`. +- додаток `ab` який поставляється разом з apache, корисний для швидкої і поверхневої перевірки продуктивності веб-сервера. Для більш серйозного лоад-тестінгу використовуйте `siege`. +- Для більш серйозного дебаггінга мережі використовуйте `wireshark`,` tshark`, і `ngrep`. +- Знайте про `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, пам'яті, мережі і т.д. +- Для аналізу більш складних систем і продуктивності використовуйте `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`. +- Використовуйте `dmesg`, коли щось відбувається зовсім дивне (це може бути проблеми із залізом або драйверами). + + ##Одним-рядком ##Складно-але-корисно From d3c966ad5d1dbd505c63327b4d8d5da48c1c528d Mon Sep 17 00:00:00 2001 From: stepan Date: Mon, 26 Oct 2015 00:57:56 +0200 Subject: [PATCH 27/33] one line --- README-ua.md | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/README-ua.md b/README-ua.md index 3182dbd..4fb2f29 100644 --- a/README-ua.md +++ b/README-ua.md @@ -197,6 +197,43 @@ ##Одним-рядком +Кілька прикладів склеювання команд: +- Це досить круто, що можна знайти множинні перетину файлів, з'єднати відсортовані файли і подивитися різницю в декількох файлів через `sort` /`uniq`. Це швидкий підхід і працює на файлах будь-якого розміру (включаючи багатогігабайтними файли). (Сортування не обмежена пам'яттю, але можливо вам доведеться додати `-T`, якщо `/tmp` знаходиться на невеликому логічному диску). Ще подивіться те, що було сказано вище про `LC_ALL`. Прапор сортування `-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`. +- Просумувати всі числа, які знаходяться в третій колонці текстового файлу (це в 3 рази швидше і 3 рази простіше, ніж робити це в Пітоні): +```sh + awk '{ x += $3 } END { print x }' myfile +``` +- Якщо вам потрібно подивитися розміри/дати файлів в дереві, це як рекурсивний `ls -l` але легше прочитати це `ls -lR`: +```sh + find . -type f -ls +``` +- Скажемо що у нас є якийсь текстовий файл, наприклад лог веб сервера і на якихось рядках з'являється значення, рядки з яким нам цікаві. Наприклад, `acct_id`. Давайте підрахуємо, скільки таких запитів в нашому логе: +```sh + cat access.log | egrep -o 'acct_id=[0-9]+' | cut -d= -f2 | sort | uniq -c | sort -rn +``` +- Використовуйте `xargs` (або` parallel`). Зверніть увагу, що Ви можете контролювати кількість команд на кожен рядок, а так само паралельність. Якщо Ви не впевнені, що робите правильно, почніть з `xargs echo`. Ще `-I {}` - корисна штука. Приклади: +```sh + find. -name '* .py' | xargs grep some_function + cat hosts | xargs -I {} ssh root @ {} hostname +``` +- Запустіть цю функцію, щоб отримати випадкову вибірку із цього документа: +```sh + function taocl() { + curl -s https://raw.githubusercontent.com/jlevy/the-art-of-command-line/master/README.md | + pandoc -f markdown -t html | + xmlstarlet fo --html --dropdtd | + xmlstarlet sel -t -v "(html/body/ul/li[count(p)>0])[$RANDOM mod last()+1]" | + xmlstarlet unesc | fmt -80 + } +``` + + ##Складно-але-корисно ##Macos-only From 9658fff9d0c746d798b76748ed102eb7bdd8f3af Mon Sep 17 00:00:00 2001 From: stepan Date: Tue, 27 Oct 2015 23:39:03 +0200 Subject: [PATCH 28/33] + usefull --- README-ua.md | 76 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) diff --git a/README-ua.md b/README-ua.md index 4fb2f29..e35269f 100644 --- a/README-ua.md +++ b/README-ua.md @@ -236,6 +236,82 @@ ##Складно-але-корисно +- `expr`: для виконання арифметичних і булевих операцій, а також регулярних виразів +- `m4`: простий макро-процесор +- `yes`: безкінечно виводить рядок +- `cal`: хороший календар +- `env`: виводить змінні середовища (корисно в Bash-скриптах) +- `printenv`: показати змінні оточення (корисно в скриптах або дебаггінгу) +- `look`: знайде англійські слова (або рядки у файлі) які починаються із рядках +- `cut`, `paste` і` join`: маніпуляції з даними +- `fmt`: форматування параграфів у тексті +- `pr`: відформатовує текст в сторінки/колонки +- `fold`: (обернути) обмежити довжину рядків у файлі +- `column`: форматувати текст в колонки або таблиці +- `expand` і` unexpand`: конвертація між табами і пробілами +- `nl`: додає номери до рядків +- `seq`: вивести послідовність чисел +- `bc`: калькулятор +- `factor`: піднести число в степінь +- [`gpg`](https://gnupg.org/): зашифрувати і підписати файли +- `toe`: таблиця терміналів terminfo з описом +- `nc`: дебаггінг мережі і передачі даних +- `socat`: перемикач сокетів і перенаправлення tcp-портів (схоже на `netcat`) +- [`slurm`](https://github.com/mattthias/slurm): візуалізація трафіку мережі +- `dd`: перенесення інформації між файлами фбо пристроями +- `file`: визначає тип файлу +- `tree`: показує директорії і піддиректорії у вигляді дерева, як `ls`, але рекурсивно +- `stat`: інформація про файл +- `time`: execute and time a commands +- `lockfile`: створює позначку в файлі який може бути видаленим тільки через команду `rm -f` +- `logrotate`: змінити, зжати і відправити лаги. +- `watch`: запустити команду повторно, показуючи результати і/або виділення змін +- `tac`: вивести файли посимвольно навпаки ("тівирп") +- `shuf`: випадкова вибірка рядків з файлу +- `comm`: порядково порівняти відсортовані файли +- `pv`: моніторинг прогресу проходження інформації через пайп +- `hd`, `hexdump`, `xxd`, `biew` і `bvi`: дамп і редагування бінарних файлів +- `strings`: витягнути текст із бінарних файлів +- `tr`: маніпуляція з char (символьним типом) +- `iconv` або `uconv`: конвертація кодувань +- `split` і `csplit`: розбити файли +- `sponge`: прочитати весь інпут перед тим, як його записати. Корисно, коли читаєш з того ж файлу, куди записуєш. Наприклад, ось так: `grep -v something some-file | sponge some-file` +- `units`: конвертер. Метри в кілометри, версти в п'яді (дивіться `/usr/share/units/definitions.units`) +- `apg`: генерація паролів +- `7z`: архіватор з високим ступенем стиснення +- `ldd`: показує залежності програми від системних бібліотек +- `nm`: symbols from object files +- `ab`: бенчмаркінг веб-серверів +- `strace`: дебагінг системних викликів +- `mtr`: трасування для дебаггінга мережі +- `cssh`: графічний конкурент Shel +- `rsync`: синхронізація файлів і папок через SSH або на локальній файловій системі +- `wireshark` і `tshark`: перехоплення пакетів і дебагінг мережі +- `ngrep`: grep для шару мережі (network layer) +- `host` і `dig`: пошук DNS +- `lsof`: процесинг дескрипторів і інформація по сокетах +- `dstat`: корисна статистика ОС +- [`glances`](https://github.com/nicolargo/glances): високорівнева статистика з багатьма підсистемам +- `iostat`: статистика використання жорсткого диска +- `mpstat`: статистика використання CPU +- `vmstat`: статистика використання оперативної пам'яті +- `htop`: вдосконалена версія `top` +- `last`: історія входів у систему +- `w`: хто є залогіненим +- `id`: інформація про користувача/групу +- `sar`: historic system stats +- `iftop` або` nethogs`: використання мережі конкретним сокетом або процесом +- `ss`: статистика сокетів +- `dmesg`: помилки завантаження і помилки системи +- `sysctl`: перегляду і налаштування параметрів ядра Linux коли воно запущене +- `hdparm`: маніпуляція/налаштування SATA/ATA диску +- `lsb_release`: інформація про дистрибутив Linux +- `lsblk`: cписок блокових пристроїв комп'ютера: дерево ваших дисків і логічних дисків +- `lshw`, `lscpu`, `lspci`, `lsusb`, `dmidecode`: інформація про апаратне забезпечення, включає CPU, BIOS, RAID, графічну карту і т.д. +- `lsmod` і `modinfo`: показує список і детальну інформацію модулів ядра. +- `fortune`, `ddate`, and `sl`: um, well, it depends on whether you consider steam locomotives and Zippy quotations "useful" + + ##Macos-only ##Інші-джерела From e4786dee0f0011f434856e9d681791b08c1bbad4 Mon Sep 17 00:00:00 2001 From: stepan Date: Tue, 27 Oct 2015 23:39:13 +0200 Subject: [PATCH 29/33] * --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index e7407e1..86c7c38 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -[ Languages: [English](README.md), [Español](README-es.md), [日本語](README-ja.md), [한국어](README-ko.md), [Português](README-pt.md), [Русский](README-ru.md), [Slovenščina](README-sl.md), [中文](README-zh.md)] +[ Languages: [English](README.md), [Español](README-es.md), [日本語](README-ja.md), [한국어](README-ko.md), [Português](README-pt.md), [Русский](README-ru.md), [Slovenščina](README-sl.md), [中文](README-zh.md)], [Українська](README-ua.md)] # The Art of Command Line From 9bd5c608f3c426e9d2ac77f6930b58f1d8a3bd23 Mon Sep 17 00:00:00 2001 From: stepan Date: Tue, 27 Oct 2015 23:39:33 +0200 Subject: [PATCH 30/33] macos only --- README-ua.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/README-ua.md b/README-ua.md index e35269f..ae51c6b 100644 --- a/README-ua.md +++ b/README-ua.md @@ -314,6 +314,15 @@ ##Macos-only +Деякі речі, які підходять *тільки* для Мака. + +- Система управління пакетами - `brew` (Homebrew) і `port` (MacPorts) можуть бути використані для того, щоб встановити більшість програм, згаданих у цьому документі. +- Копіюйте вивід будь-якої консольної команди до графічної за допомогою `pbcopy` і вставляйте вивід за допомогою `pbpaste`. +- Щоб відкрити файл або десктопну програму, використовуйте `open` або `open -a /Applications/Whatever.app`. +- Spotlight: Шукає файли в консолі, через `mdfind`, і дивиться метадані (наприклад EXIF ​​інформацію із фотографії) із `mdls`. +- Не забувайте, що MacOS створений на основі BSD Unix і багато команд (наприклад `ps`, `ls`, `tail`, `awk`, `sed`) мають невеликі відмінності від лінуксових. Це обумовлено впливом `UNIX System V` і `GNU Tools`. Різницю можна помітити, побачивши заголовок "BSD General Commands Manual." Інколи на MacOS можна поставити GNU-версії програм, наприклад `gawk` і `gsed`. Коли пишете кросплатформені Bash-скрипти, намагайтеся уникати використовувати команди, які можуть відрізнятися (наприклад, краще використовуйте Python або `perl`), або ретельно все перевіряйте. + + ##Інші-джерела ##Декламація From 221098e6e7cb12313d2a38aaf2abac5c8586bd70 Mon Sep 17 00:00:00 2001 From: stepan Date: Tue, 27 Oct 2015 23:39:55 +0200 Subject: [PATCH 31/33] + others source --- README-ua.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/README-ua.md b/README-ua.md index ae51c6b..eb5a489 100644 --- a/README-ua.md +++ b/README-ua.md @@ -325,6 +325,12 @@ ##Інші-джерела +- [awesome-shell](https://github.com/alebcay/awesome-shell): Розширює Shell. +- [Strict mode](http://redsymbol.net/articles/unofficial-bash-strict-mode/) щоб краще писати Shell скрипти. +- [shellcheck](https://github.com/koalaman/shellcheck): A shell script static analysis tool. Essentially, lint for bash/sh/zsh. +- [Filenames and Pathnames in Shell](http://www.dwheeler.com/essays/filenames-in-shell.html): The sadly complex minutiae on how to handle filenames correctly in shell scripts. + + ##Декламація From f410a3b6f9f33fdc5a156c49e4aa97cfaaa0b2d8 Mon Sep 17 00:00:00 2001 From: stepan Date: Tue, 27 Oct 2015 23:40:21 +0200 Subject: [PATCH 32/33] + declamation --- README-ua.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README-ua.md b/README-ua.md index eb5a489..11b91fb 100644 --- a/README-ua.md +++ b/README-ua.md @@ -333,4 +333,7 @@ ##Декламація +За невеликим винятком, весь код написаний так, щоб інші його змогли прочитати. +Той факт, що щось може бути написано на Bash, зовсім не означає, що воно має бути на ньому написано. ;) + From 7c589404109449ad609b4cb27c1131693d67de7d Mon Sep 17 00:00:00 2001 From: stepan Date: Tue, 27 Oct 2015 23:41:18 +0200 Subject: [PATCH 33/33] + license --- README-ua.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/README-ua.md b/README-ua.md index 11b91fb..c20d476 100644 --- a/README-ua.md +++ b/README-ua.md @@ -337,3 +337,8 @@ Той факт, що щось може бути написано на Bash, зовсім не означає, що воно має бути на ньому написано. ;) +## Лицензія + +[![Creative Commons License](https://i.creativecommons.org/l/by-sa/4.0/88x31.png)](http://creativecommons.org/licenses/by-sa/4.0/) + +Ця работа і переклад на Українську мову розповсюджується за ліцензією [Creative Commons Attribution-ShareAlike 4.0 International License](http://creativecommons.org/licenses/by-sa/4.0/).