From 48c5e178bd87792300dce0e88e0fe16a58143cb2 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 b7a8898a8ec2544bf1017c21e560d76c61ab7ccd 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 d9cf3251f082aeaf460d7379b41ffa3277cb2a5d 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 539313fb5b26ebb5e31f7bda20996b34efe4b274 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 fd559e2de47ba9a8a0e46d61ddb7f01380221af9 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 29dcb0ef2b4c50b0d400e42dd327037fbdd3c726 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 4d81736d74780d38c04beb306fea6a58ef3101f7 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 a3bca687c9e6e87a8c19a48c973d17fcf33708a7 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 f8e645bfc8c5cc8db4d5b5f9916ba9be25fd4dbe 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 ffecca12187e3fd1dbc5e32e574da1c1c646bb17 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 6b59c87ac904cc5e39d9e894210e37474ceeb19b 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 3f3a22dbe5a4f9df3e85411f6fbdba1cc6faeed9 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 b227f199b4d864bd79e514a2f3e7946d9fcd67a9 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 c211dde2994aa2fe13910418e8c8c2d47a0c5a2e 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 0937ce7751f5562735e483288ef3886962a2258a 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 174e91a0b0a3746c33243fc76bc5c66353372c9e 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 2d6eafff867365b98c0540525b366ecfd734127f 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 3169fdb63e853dfd8bcb02553e12d3e92f78a434 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 f05cec378a1263384f158c4b965d006c01b499fb 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 31f106e85c0cb63aff31253dc88914a4ef602c20 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 6c92d100d4a42b654c0fe61e0fbd1a9647ed2d92 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 8c292ed00d8dfff65ca82d8d81a5e4b779423893 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 f03b6ca3f09e7fa5f7fa4da0f117f96b8cd1247b 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 00584d40c71c8ebcefe6926fca38ff92c6bd8d92 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 9e242fbec57dc094f8a36510b8d6533a3483e744 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 a96d61eec22974bdbbd647b0d9ba9484495025a8 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 d5806c6e0ee9a222734cc33caf326c752cac69ee 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 e6d6c730ab691a08cefd7098e71f2cc36ff23634 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 a15102dfd1f5f3671cfcc3f18f39f4287f0a0bd9 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 52bd821a2f161b01a05f1d5287f83435dcff235b 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 67f92e80f68069f6db57d28849fa29e0780a21ac 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 7c58e983383ab089687c37b75dee516477743d90 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/).