From 0bf4513e8d8274f7cf993444823baf2feb0e439b Mon Sep 17 00:00:00 2001 From: Oleg Berman Date: Sun, 5 Jul 2015 21:35:47 -0400 Subject: [PATCH 01/12] meta & basics sections are translated into Russian --- README-ru.md | 473 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 473 insertions(+) create mode 100644 README-ru.md diff --git a/README-ru.md b/README-ru.md new file mode 100644 index 0000000..73372e7 --- /dev/null +++ b/README-ru.md @@ -0,0 +1,473 @@ +[ На других языках: [English](README.md), [Español](README-es.md), [Português](README-pt.md), [中文](README-zh.md) ] + +# Искусство командной строки + +[![Вступайте в англоязычный чат проекта https://gitter.im/jlevy/the-art-of-command-line](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/jlevy/the-art-of-command-line?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) + +- [Описание](#meta) +- [Основы](#basics) +- [Ежедневное использование](#everyday-use) +- [Процессинг файлов и информации](#processing-files-and-data) +- [Системный дебаггинг](#system-debugging) +- [Команды в одну строчку](#one-liners) +- [Сложно, но полезно](#obscure-but-useful) +- [Только для Маководов](#macos-only) +- [Больше информации по теме](#more-resources) +- [Disclaimer](#disclaimer) + + +![curl -s 'https://raw.githubusercontent.com/jlevy/the-art-of-command-line/master/README.md' | egrep -o '`\w+`' | tr -d '`' | cowsay -W50](cowsay.png) + +Продвинутому использованию командной строки зачастую не уделяют достаточного внимания, о терминале говорят как о чем-то мистическом; на самом же деле это умение очевидно и не очевидно увеличивает Вашу продуктивность в работе. Данный документ является подборкой заметок и советов, которые я нашел для себя полезными, работая с командной строкой в Linux. Некоторые из их них – простые и очевидные, но некоторые довольно сложные и предназначены для решения конкретных задач. Это небольшая публикация, но если Вы знаете обо всем, что тут написано, и можете вспомнить как это все использовать – вы много знаете! + +Многое из того, что тут написано +[изначально](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), +начав идею там, похоже, что стоит развить ее на Gihub, где обитают люди, которые талантлевее меня и могут предлагать улучения данной подборки. Если Вы заметили ошибки (во всех вариантах перевода), пожалуйста оставьте тикет или киньте пулл-реквест (заранее изучив описание и посмотрев на уже созданнные тикеты и пулл-реквесты). + +## Meta + +Scope: + +- Данная публикация предназначена как для новичков, так и для опытных людей. Цели: *объемность* (собрать все важные аспекты использования командной строки), *практичность* (давать конкретные примеры для самых частых юзкейсов) и *краткость* (не стоит углубляться в неочевидные вещи, о которых можно почитать в другом месте). +- Этот документ написан для пользователей Linux, с единственным исключеним – секцией "[Только для Маководов](#macos-only)". Все остальное подходит и может быть установлено под все UNIX/MacOS системы (и даже Cygwin). +- Фокусируемся на интерактивном Баше, но многие вещи так же могут быть использованы с другими шеллами; и в общем приминимы к Баш-скирптингу +- Эта инструкция включает в себя стандартные Unix комманды и те, для которых нужно устанавливать сторонние пакеты – они настолько полезны, что стоят того, чтобы их установили + +Заметки: + +- Для того, чтобы руководство оставалось одностраничным, вся информация вставлена прямо сюда. Вы достаточно умные для того, чтобы самостоятельно изучить вопрос более детально в другом месте. Используйте `apt-get`/`yum`/`dnf`/`pacman`/`pip`/`brew` (в зависимости от вашей системы управления пакетами) для установки новых програм. + +- На [Explainshell](http://explainshell.com/) можно найти простое и детальное объясение того, что такое команды, флаги, пайпы и т.д. + +## Основы + +- Выучите основы Баша. Просто возьмите и напечатайте `man bash` в терминале и хотя бы просмотрите его; он довольно просто читается и он не очень большой. Другие шеллы тоже могут быть хороши, но Баш – мощная программа и Баш всегда под рукой (использование *исключительно* zsh, fish и т.д., которые наверняка круто выглядят на Вашем ноуте во многом Вас ограничивает, например Вы не сможете использовать возможности этих шеллов на уже существующем сервере). + +- Выучите хотя бы один консольный редактор текста. Идеально Vim (`vi`), ведь у него нет конкурентов, когда вам нужно быстренько что-то подправить (даже если Вы постоянно сидите на Emacs/какой-нибудь тяжелой IDE или на каком-нибудь модном хипстерском редакторе) + +- Знайте как читать документацию через `man` (для любознательных – `man man`; `man` по углам документа в скобках добавляет номер, например 1 – для обычных команд, 5 – для файлов, конвенций, 8 – для администативных команд). Ищите мануалы через `apropos`, и помните, что некоторые команды – не бинарники, а встроенные команды Баша, и помощь по ним можно получить через `help` и `help -d`. + +- Узнайте о том, как перенаправлять ввод и вывод через `>` и `<` и пайпы `|`. Помните, что `>` – переписывает выходной файл, а `>>` добавляет к нему. Узнайте побольше про stdout and stderr. + +- Узнайте побольше про file glob expansion with `*` (and perhaps `?` and `{`...`}`), кавычки а так же разницу между двойными `"` и одинарными `'` кавычками. (Больше о расширении переменных читайте ниже) + +- Будьте знакомы с работой с процессами в 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`) + + +## Everyday use + +- In Bash, use **Tab** to complete arguments and **ctrl-r** to search through command history. + +- In Bash, use **ctrl-w** to delete the last word, and **ctrl-u** to delete all the way back to the start of the line. Use **alt-b** and **alt-f** to move by word, **ctrl-k** to kill to the end of the line, **ctrl-l** to clear the screen. See `man readline` for all the default keybindings in Bash. There are a lot. For example **alt-.** cycles through previous arguments, and **alt-*** expands a glob. + +- Alternatively, if you love vi-style key-bindings, use `set -o vi`. + +- To see recent commands, `history`. There are also many abbreviations such as `!$` (last argument) and `!!` last command, though these are often easily replaced with **ctrl-r** and **alt-.**. + +- To go back to the previous working directory: `cd -` + +- If you are halfway through typing a command but change your mind, hit **alt-#** to add a `#` at the beginning and enter it as a comment (or use **ctrl-a**, **#**, **enter**). You can then return to it later via command history. + +- Use `xargs` (or `parallel`). It's very powerful. Note you can control how many items execute per line (`-L`) as well as parallelism (`-P`). If you're not sure if it'll do the right thing, use `xargs echo` first. Also, `-I{}` is handy. Examples: +```bash + find . -name '*.py' | xargs grep some_function + cat hosts | xargs -I{} ssh root@{} hostname +``` + +- `pstree -p` is a helpful display of the process tree. + +- Use `pgrep` and `pkill` to find or signal processes by name (`-f` is helpful). + +- Know the various signals you can send processes. For example, to suspend a process, use `kill -STOP [pid]`. For the full list, see `man 7 signal` + +- Use `nohup` or `disown` if you want a background process to keep running forever. + +- Check what processes are listening via `netstat -lntp` or `ss -plat` (for TCP; add `-u` for UDP). + +- See also `lsof` for open sockets and files. + +- Use `alias` to create shortcuts for commonly used commands. For example, `alias ll='ls -latr'` creates a new alias `ll`. + +- In Bash scripts, use `set -x` for debugging output. Use strict modes whenever possible. Use `set -e` to abort on errors. Use `set -o pipefail` as well, to be strict about errors (though this topic is a bit subtle). For more involved scripts, also use `trap`. + +- In Bash scripts, subshells (written with parentheses) are convenient ways to group commands. A common example is to temporarily move to a different working directory, e.g. +```bash + # do something in current dir + (cd /some/other/dir && other-command) + # continue in original dir +``` + +- In Bash, note there are lots of kinds of variable expansion. Checking a variable exists: `${name:?error message}`. For example, if a Bash script requires a single argument, just write `input_file=${1:?usage: $0 input_file}`. Arithmetic expansion: `i=$(( (i + 1) % 5 ))`. Sequences: `{1..10}`. Trimming of strings: `${var%suffix}` and `${var#prefix}`. For example if `var=foo.pdf`, then `echo ${var%.pdf}.txt` prints `foo.txt`. + +- The output of a command can be treated like a file via `<(some command)`. For example, compare local `/etc/hosts` with a remote one: +```sh + diff /etc/hosts <(ssh somehost cat /etc/hosts) +``` + +- Know about "here documents" in Bash, as in `cat <logfile 2>&1`. Often, to ensure a command does not leave an open file handle to standard input, tying it to the terminal you are in, it is also good practice to add ` foo: + rename 's/\.bak$//' *.bak + # Full rename of filenames, directories, and contents foo -> bar: + repren --full --preserve-case --from foo --to bar . +``` + +- Use `shuf` to shuffle or select random lines from a file. + +- Know `sort`'s options. For numbers, use `-n`, or `-h` for handling human-readable numbers (e.g. from `du -h`). Know how keys work (`-t` and `-k`). In particular, watch out that you need to write `-k1,1` to sort by only the first field; `-k1` means sort according to the whole line. Stable sort (`sort -s`) can be useful. For example, to sort first by field 2, then secondarily by field 1, you can use `sort -k1,1 | sort -s -k2,2`. + +- If you ever need to write a tab literal in a command line in Bash (e.g. for the -t argument to sort), press **ctrl-v** **[Tab]** or write `$'\t'` (the latter is better as you can copy/paste it). + +- The standard tools for patching source code are `diff` and `patch`. See also `diffstat` for summary statistics of a diff. Note `diff -r` works for entire directories. Use `diff -r tree1 tree2 | diffstat` for a summary of changes. + +- For binary files, use `hd` for simple hex dumps and `bvi` for binary editing. + +- Also for binary files, `strings` (plus `grep`, etc.) lets you find bits of text. + +- For binary diffs (delta compression), use `xdelta3`. + +- To convert text encodings, try `iconv`. Or `uconv` for more advanced use; it supports some advanced Unicode things. For example, this command lowercases and removes all accents (by expanding and dropping them): +```sh + uconv -f utf-8 -t utf-8 -x '::Any-Lower; ::Any-NFD; [:Nonspacing Mark:] >; ::Any-NFC; ' < input.txt > output.txt +``` + +- To split files into pieces, see `split` (to split by size) and `csplit` (to split by a pattern). + +- Use `zless`, `zmore`, `zcat`, and `zgrep` to operate on compressed files. + + +## System debugging + +- For web debugging, `curl` and `curl -I` are handy, or their `wget` equivalents, or the more modern [`httpie`](https://github.com/jakubroztocil/httpie). + +- To know disk/cpu/network status, use `iostat`, `netstat`, `top` (or the better `htop`), and (especially) `dstat`. Good for getting a quick idea of what's happening on a system. + +- For a more in-depth system overview, use [`glances`](https://github.com/nicolargo/glances). It presents you with several system level statistics in one terminal window. Very helpful for quickly checking on various subsystems. + +- To know memory status, run and understand the output of `free` and `vmstat`. In particular, be aware the "cached" value is memory held by the Linux kernel as file cache, so effectively counts toward the "free" value. + +- Java system debugging is a different kettle of fish, but a simple trick on Oracle's and some other JVMs is that you can run `kill -3 ` and a full stack trace and heap summary (including generational garbage collection details, which can be highly informative) will be dumped to stderr/logs. + +- Use `mtr` as a better traceroute, to identify network issues. + +- For looking at why a disk is full, `ncdu` saves time over the usual commands like `du -sh *`. + +- To find which socket or process is using bandwidth, try `iftop` or `nethogs`. + +- The `ab` tool (comes with Apache) is helpful for quick-and-dirty checking of web server performance. For more complex load testing, try `siege`. + +- For more serious network debugging, `wireshark`, `tshark`, or `ngrep`. + +- Know about `strace` and `ltrace`. These can be helpful if a program is failing, hanging, or crashing, and you don't know why, or if you want to get a general idea of performance. Note the profiling option (`-c`), and the ability to attach to a running process (`-p`). + +- Know about `ldd` to check shared libraries etc. + +- Know how to connect to a running process with `gdb` and get its stack traces. + +- Use `/proc`. It's amazingly helpful sometimes when debugging live problems. Examples: `/proc/cpuinfo`, `/proc/xxx/cwd`, `/proc/xxx/exe`, `/proc/xxx/fd/`, `/proc/xxx/smaps`. + +- When debugging why something went wrong in the past, `sar` can be very helpful. It shows historic statistics on CPU, memory, network, etc. + +- For deeper systems and performance analyses, look at `stap` ([SystemTap](https://sourceware.org/systemtap/wiki)), [`perf`](http://en.wikipedia.org/wiki/Perf_(Linux)), and [`sysdig`](https://github.com/draios/sysdig). + +- Check what OS you're on with `uname` or `uname -a` (general Unix/kernel info) or `lsb_release -a` (Linux distro info). + +- Use `dmesg` whenever something's acting really funny (it could be hardware or driver issues). + + +## One-liners + +A few examples of piecing together commands: + +- It is remarkably helpful sometimes that you can do set intersection, union, and difference of text files via `sort`/`uniq`. Suppose `a` and `b` are text files that are already uniqued. This is fast, and works on files of arbitrary size, up to many gigabytes. (Sort is not limited by memory, though you may need to use the `-T` option if `/tmp` is on a small root partition.) See also the note about `LC_ALL` above and `sort`'s `-u` option (left out for clarity below). +```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 +``` + +- Use `grep . *` to visually examine all contents of all files in a directory, e.g. for directories filled with config settings, like `/sys`, `/proc`, `/etc`. + + +- Summing all numbers in the third column of a text file (this is probably 3X faster and 3X less code than equivalent Python): +```sh + awk '{ x += $3 } END { print x }' myfile +``` + +- If want to see sizes/dates on a tree of files, this is like a recursive `ls -l` but is easier to read than `ls -lR`: +```sh + find . -type f -ls +``` + +- Use `xargs` or `parallel` whenever you can. Note you can control how many items execute per line (`-L`) as well as parallelism (`-P`). If you're not sure if it'll do the right thing, use xargs echo first. Also, `-I{}` is handy. Examples: +```sh + find . -name '*.py' | xargs grep some_function + cat hosts | xargs -I{} ssh root@{} hostname +``` + +- Say you have a text file, like a web server log, and a certain value that appears on some lines, such as an `acct_id` parameter that is present in the URL. If you want a tally of how many requests for each `acct_id`: +```sh + cat access.log | egrep -o 'acct_id=[0-9]+' | cut -d= -f2 | sort | uniq -c | sort -rn +``` + +- Run this function to get a random tip from this document (parses Markdown and extracts an item): +```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 + } +``` + + +## Obscure but useful + +- `expr`: perform arithmetic or boolean operations or evaluate regular expressions + +- `m4`: simple macro processor + +- `yes`: print a string a lot + +- `cal`: nice calendar + +- `env`: run a command (useful in scripts) + +- `printenv`: print out environment variables (useful in debugging and scripts) + +- `look`: find English words (or lines in a file) beginning with a string + +- `cut `and `paste` and `join`: data manipulation + +- `fmt`: format text paragraphs + +- `pr`: format text into pages/columns + +- `fold`: wrap lines of text + +- `column`: format text into columns or tables + +- `expand` and `unexpand`: convert between tabs and spaces + +- `nl`: add line numbers + +- `seq`: print numbers + +- `bc`: calculator + +- `factor`: factor integers + +- `gpg`: encrypt and sign files + +- `toe`: table of terminfo entries + +- `nc`: network debugging and data transfer + +- `socat`: socket relay and tcp port forwarder (similar to `netcat`) + +- `slurm`: network trafic visualization + +- `dd`: moving data between files or devices + +- `file`: identify type of a file + +- `tree`: display directories and subdirectories as a nesting tree; like `ls` but recursive + +- `stat`: file info + +- `tac`: print files in reverse + +- `shuf`: random selection of lines from a file + +- `comm`: compare sorted files line by line + +- `pv`: monitor the progress of data through a pipe + +- `hd` and `bvi`: dump or edit binary files + +- `strings`: extract text from binary files + +- `tr`: character translation or manipulation + +- `iconv` or `uconv`: conversion for text encodings + +- `split `and `csplit`: splitting files + +- `sponge`: read all input before writing it, useful for reading from then writing to the same file, e.g., `grep -v something some-file | sponge some-file` + +- `units`: unit conversions and calculations; converts furlongs per fortnight to twips per blink (see also `/usr/share/units/definitions.units`) + +- `7z`: high-ratio file compression + +- `ldd`: dynamic library info + +- `nm`: symbols from object files + +- `ab`: benchmarking web servers + +- `strace`: system call debugging + +- `mtr`: better traceroute for network debugging + +- `cssh`: visual concurrent shell + +- `rsync`: sync files and folders over SSH + +- `wireshark` and `tshark`: packet capture and network debugging + +- `ngrep`: grep for the network layer + +- `host` and `dig`: DNS lookups + +- `lsof`: process file descriptor and socket info + +- `dstat`: useful system stats + +- [`glances`](https://github.com/nicolargo/glances): high level, multi-subsystem overview + +- `iostat`: CPU and disk usage stats + +- `htop`: improved version of top + +- `last`: login history + +- `w`: who's logged on + +- `id`: user/group identity info + +- `sar`: historic system stats + +- `iftop` or `nethogs`: network utilization by socket or process + +- `ss`: socket statistics + +- `dmesg`: boot and system error messages + +- `hdparm`: SATA/ATA disk manipulation/performance + +- `lsb_release`: Linux distribution info + +- `lsblk`: List block devices: a tree view of your disks and disk paritions + +- `lshw`, `lscpu`, `lspci`, `lsusb`, `dmidecode`: hardware information, including CPU, BIOS, RAID, graphics, devices, etc. + +- `fortune`, `ddate`, and `sl`: um, well, it depends on whether you consider steam locomotives and Zippy quotations "useful" + + +## MacOS only + +These are items relevant *only* on MacOS. + +- Package management with `brew` (Homebrew) and/or `port` (MacPorts). These can be used to install on MacOS many of the above commands. + +- Copy output of any command to a desktop app with `pbcopy` and paste input from one with `pbpaste`. + +- To open a file with a desktop app, use `open` or `open -a /Applications/Whatever.app`. + +- Spotlight: Search files with `mdfind` and list metadata (such as photo EXIF info) with `mdls`. + +- 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. + + +## More resources + +- [awesome-shell](https://github.com/alebcay/awesome-shell): A curated list of shell tools and resources. +- [Strict mode](http://redsymbol.net/articles/unofficial-bash-strict-mode/) for writing better shell scripts. + + +## Disclaimer + +With the exception of very small tasks, code is written so others can read it. With power comes responsibility. The fact you *can* do something in Bash doesn't necessarily mean you should! ;) + + +## License + +[![Creative Commons License](https://i.creativecommons.org/l/by-sa/4.0/88x31.png)](http://creativecommons.org/licenses/by-sa/4.0/) + +This work is licensed under a [Creative Commons Attribution-ShareAlike 4.0 International License](http://creativecommons.org/licenses/by-sa/4.0/). From b010227d2c307f7381d3b04c3eafc924c5a833fd Mon Sep 17 00:00:00 2001 From: Oleg Berman Date: Sun, 5 Jul 2015 21:44:45 -0400 Subject: [PATCH 02/12] couple of fixes to first 2 sections --- README-ru.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README-ru.md b/README-ru.md index 73372e7..a8e8a6a 100644 --- a/README-ru.md +++ b/README-ru.md @@ -13,7 +13,7 @@ - [Сложно, но полезно](#obscure-but-useful) - [Только для Маководов](#macos-only) - [Больше информации по теме](#more-resources) -- [Disclaimer](#disclaimer) +- [Дисклеймер](#disclaimer) ![curl -s 'https://raw.githubusercontent.com/jlevy/the-art-of-command-line/master/README.md' | egrep -o '`\w+`' | tr -d '`' | cowsay -W50](cowsay.png) @@ -26,9 +26,9 @@ на [Quora](http://www.quora.com/What-are-some-time-saving-tips-that-every-Linux-user-should-know), начав идею там, похоже, что стоит развить ее на Gihub, где обитают люди, которые талантлевее меня и могут предлагать улучения данной подборки. Если Вы заметили ошибки (во всех вариантах перевода), пожалуйста оставьте тикет или киньте пулл-реквест (заранее изучив описание и посмотрев на уже созданнные тикеты и пулл-реквесты). -## Meta +## Описание -Scope: +Основное: - Данная публикация предназначена как для новичков, так и для опытных людей. Цели: *объемность* (собрать все важные аспекты использования командной строки), *практичность* (давать конкретные примеры для самых частых юзкейсов) и *краткость* (не стоит углубляться в неочевидные вещи, о которых можно почитать в другом месте). - Этот документ написан для пользователей Linux, с единственным исключеним – секцией "[Только для Маководов](#macos-only)". Все остальное подходит и может быть установлено под все UNIX/MacOS системы (и даже Cygwin). From d09925fb40f7401e5d8c6356528289d9725cda74 Mon Sep 17 00:00:00 2001 From: Oleg Berman Date: Sun, 5 Jul 2015 22:41:52 -0400 Subject: [PATCH 03/12] everyday use section is updated --- README-ru.md | 62 ++++++++++++++++++++++++++-------------------------- 1 file changed, 31 insertions(+), 31 deletions(-) diff --git a/README-ru.md b/README-ru.md index a8e8a6a..6d812de 100644 --- a/README-ru.md +++ b/README-ru.md @@ -66,67 +66,67 @@ - Обучитесь использованию системами управления пакетами `apt-get`, `yum`, `dnf` или `pacman` (в зависимости от дистрибутива). Занйте как искать и устанавливать пакеты и обязательно имейте установленым `pip` для установки командных утилит, написаных на Python (некоторые из тех, что вы найдете ниже легче всего установить через `pip`) -## Everyday use +## Ежедневное использование -- In Bash, use **Tab** to complete arguments and **ctrl-r** to search through command history. +- Используйте таб в Баше для автокомплита аргументов к командам и **ctrl-r** для поиска по истории командной строки -- In Bash, use **ctrl-w** to delete the last word, and **ctrl-u** to delete all the way back to the start of the line. Use **alt-b** and **alt-f** to move by word, **ctrl-k** to kill to the end of the line, **ctrl-l** to clear the screen. See `man readline` for all the default keybindings in Bash. There are a lot. For example **alt-.** cycles through previous arguments, and **alt-*** expands a glob. +- Используйте **ctrl-w** в Баше для того, чтобы удалить последнее слово в команде; **ctrl-u** для того, что бы удалить команду полностью. Используйте **alt-b** и **alt-f** для того, чтобы бегать между словами команды, **ctrl-k** для того, чтобы прыгнуть к концу строки, **ctrl-l** для того, чтобы очистить экран. Гляньте на `man readline` чтобы узнать о всех шорткатах Баша. Их много! Например, **alt-.** бежит по предыдущим аргументам команды, а **alt-*** расширяет глоб.?? -- Alternatively, if you love vi-style key-bindings, use `set -o vi`. +– Если Вам нравятся шорткаты Вима сделайте `set -o vi`. -- To see recent commands, `history`. There are also many abbreviations such as `!$` (last argument) and `!!` last command, though these are often easily replaced with **ctrl-r** and **alt-.**. +- Для того, чтобы посмотреть историю введите `history`. Так же существует множество аббривиатур, например `!$` – последний аргумент, `!!` – последняя команда, хотя эти аббривиатуры часто заменяются шорткатами **ctrl-r** и **alt-.**. -- To go back to the previous working directory: `cd -` +- Для того, чтобы прыгнуть к последней рабочей директории – `cd -` -- If you are halfway through typing a command but change your mind, hit **alt-#** to add a `#` at the beginning and enter it as a comment (or use **ctrl-a**, **#**, **enter**). You can then return to it later via command history. +- Если Вы написали команду наполовину и вдруг передумали нажмите **alt-#** для того, чтобы добавить `#` к началу и отправьте комманду как комментарий. Потом вы сможете вернуться к ней через историю. -- Use `xargs` (or `parallel`). It's very powerful. Note you can control how many items execute per line (`-L`) as well as parallelism (`-P`). If you're not sure if it'll do the right thing, use `xargs echo` first. Also, `-I{}` is handy. Examples: +- Не забывайте использовать `xargs` (или `parallel`). Это очень мощная штука. Обратите внимание, что Вы можете контролировать количество команд на каждую строку, а так же параллельность. Если Вы не уверены, что делаете что-то правильно, начните с `xargs echo`. Еще `-I{}` – полезная штука. Примеры: ```bash find . -name '*.py' | xargs grep some_function cat hosts | xargs -I{} ssh root@{} hostname ``` -- `pstree -p` is a helpful display of the process tree. +- `pstree -p` – полезный тип вывода дерева процессов. -- Use `pgrep` and `pkill` to find or signal processes by name (`-f` is helpful). +- Используйте `pgrep` или `pkill` для того чтобы находить/слать сигналы к процессам по имени (`-f` помогает). -- Know the various signals you can send processes. For example, to suspend a process, use `kill -STOP [pid]`. For the full list, see `man 7 signal` +- Знайте разные сигналы, которые можно слать процессам. Например, чтобы приостановить процесс используйте `kill -STOP [pid]`. Для полного списка посмотрите `man 7 signal`. -- Use `nohup` or `disown` if you want a background process to keep running forever. +- Используйте `nohup` или `disown` для того, чтобы процесс в фоне выполнялся бесконечно. -- Check what processes are listening via `netstat -lntp` or `ss -plat` (for TCP; add `-u` for UDP). +- Узнайте какие процессы слушают порты через `netstat -lntp` или `ss -plat` (для TCP; добавьте `-u` для UDP). -- See also `lsof` for open sockets and files. +- Так же `lsof` для того, чтобы посмотреть открытые сокеты и файлы. -- Use `alias` to create shortcuts for commonly used commands. For example, `alias ll='ls -latr'` creates a new alias `ll`. +- Используйте `alias` для того, чтобы алиасить часто используемые команды. Например, `alias ll='ls -latr'` создаст новый алиас `ll`. -- In Bash scripts, use `set -x` for debugging output. Use strict modes whenever possible. Use `set -e` to abort on errors. Use `set -o pipefail` as well, to be strict about errors (though this topic is a bit subtle). For more involved scripts, also use `trap`. +- В Баш скритах используйте `set -x` для того, чтобы дебажить аутпут. Используйте строгие режимы везде, где возможно. Используйте `set -e` для того, чтобы прекращать выполнение при ошибках. Используйте `set -o pipefail` для того, чтобы строго относится к ошибкам (это немного глубокая тема). Для более сложных скриптов так же используйте `trap`. -- In Bash scripts, subshells (written with parentheses) are convenient ways to group commands. A common example is to temporarily move to a different working directory, e.g. +- В Баш скриптах, подоболочки (subshells) – удобный способ группировать команды. Один из самых распространенных примеров – временно передвинуться в другую рабочую директорию, вот так: ```bash # do something in current dir (cd /some/other/dir && other-command) # continue in original dir ``` -- In Bash, note there are lots of kinds of variable expansion. Checking a variable exists: `${name:?error message}`. For example, if a Bash script requires a single argument, just write `input_file=${1:?usage: $0 input_file}`. Arithmetic expansion: `i=$(( (i + 1) % 5 ))`. Sequences: `{1..10}`. Trimming of strings: `${var%suffix}` and `${var#prefix}`. For example if `var=foo.pdf`, then `echo ${var%.pdf}.txt` prints `foo.txt`. +- В Баше много типов пространства переменных. Проверить, существует ли переменная – `${name:?error message}`. Например, если Баш-скрипту нужен всего один аргумент просто напишите `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`. -- The output of a command can be treated like a file via `<(some command)`. For example, compare local `/etc/hosts` with a remote one: +- Вывод любой команды можно обратить в файл через `<(some command)`. Например, сравнение локального файла `/etc/hosts с удаленным: ```sh diff /etc/hosts <(ssh somehost cat /etc/hosts) ``` -- Know about "here documents" in Bash, as in `cat <logfile 2>&1`. Often, to ensure a command does not leave an open file handle to standard input, tying it to the terminal you are in, it is also good practice to add `logfile 2>&1`. Зачастую для того, чтобы убедится, что команда не оставит открытым файл, привязав его к открытому терминалу считается хорошей практикой добавлять ` Date: Sun, 5 Jul 2015 22:50:45 -0400 Subject: [PATCH 04/12] last 3 sections translated --- README-ru.md | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/README-ru.md b/README-ru.md index 6d812de..e1b7a32 100644 --- a/README-ru.md +++ b/README-ru.md @@ -455,19 +455,21 @@ 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. -## More resources +## Больше информации по теме -- [awesome-shell](https://github.com/alebcay/awesome-shell): A curated list of shell tools and resources. -- [Strict mode](http://redsymbol.net/articles/unofficial-bash-strict-mode/) for writing better shell scripts. +- [awesome-shell](https://github.com/alebcay/awesome-shell): Дополняемый список инструментов и ресурсов для командной строки. +- [Strict mode](http://redsymbol.net/articles/unofficial-bash-strict-mode/) Для того, чтобы писать шелл-скрипты лучше. -## Disclaimer +## Дисклеймер -With the exception of very small tasks, code is written so others can read it. With power comes responsibility. The fact you *can* do something in Bash doesn't necessarily mean you should! ;) +За небольшим исключением, весь код написан так, что другие его смогут прочитать. + +With the exception of very small tasks, code is written so others can read it. Кому много дано, с того много и спрашивается. Тот факт, что что-то может быть написано в Баше, вовсе не означает что оно должно быть там написано. ;) -## License +## Лицензия [![Creative Commons License](https://i.creativecommons.org/l/by-sa/4.0/88x31.png)](http://creativecommons.org/licenses/by-sa/4.0/) -This work is licensed under a [Creative Commons Attribution-ShareAlike 4.0 International License](http://creativecommons.org/licenses/by-sa/4.0/). +Оригинальная работа и перевод на русский язык распространяется под лицензией [Creative Commons Attribution-ShareAlike 4.0 International License](http://creativecommons.org/licenses/by-sa/4.0/). From 745036b559e8c89a7e71460266a96d1c17e540da Mon Sep 17 00:00:00 2001 From: Oleg Berman Date: Mon, 6 Jul 2015 22:26:57 -0400 Subject: [PATCH 05/12] halfway through file processing section --- README-ru.md | 55 ++++++++++++++++++++++++++++------------------------ 1 file changed, 30 insertions(+), 25 deletions(-) diff --git a/README-ru.md b/README-ru.md index e1b7a32..e5a4bf8 100644 --- a/README-ru.md +++ b/README-ru.md @@ -11,7 +11,7 @@ - [Системный дебаггинг](#system-debugging) - [Команды в одну строчку](#one-liners) - [Сложно, но полезно](#obscure-but-useful) -- [Только для Маководов](#macos-only) +- [MacOS only](#macos-only) - [Больше информации по теме](#more-resources) - [Дисклеймер](#disclaimer) @@ -31,7 +31,7 @@ Основное: - Данная публикация предназначена как для новичков, так и для опытных людей. Цели: *объемность* (собрать все важные аспекты использования командной строки), *практичность* (давать конкретные примеры для самых частых юзкейсов) и *краткость* (не стоит углубляться в неочевидные вещи, о которых можно почитать в другом месте). -- Этот документ написан для пользователей Linux, с единственным исключеним – секцией "[Только для Маководов](#macos-only)". Все остальное подходит и может быть установлено под все UNIX/MacOS системы (и даже Cygwin). +- Этот документ написан для пользователей Linux, с единственным исключеним – секцией "[MacOS only](#macos-only)". Все остальное подходит и может быть установлено под все UNIX/MacOS системы (и даже Cygwin). - Фокусируемся на интерактивном Баше, но многие вещи так же могут быть использованы с другими шеллами; и в общем приминимы к Баш-скирптингу - Эта инструкция включает в себя стандартные Unix комманды и те, для которых нужно устанавливать сторонние пакеты – они настолько полезны, что стоят того, чтобы их установили @@ -154,54 +154,57 @@ - Для того, чтобы выполнить определенную команду с привилегиями, используйте `sudo` (для рута) и `sudo -u` (для другого пользователя). Используйте `su` или `sudo bash` для того чтобы запустить шелл от имени этого пользователя. Используйте `su -` для того, чтобы симулировать свежий логин от рута или другого пользователя. -## Processing files and data +## Процессинг файлов и информации -- To locate a file by name in the current directory, `find . -iname '*something*'` (or similar). To find a file anywhere by name, use `locate something` (but bear in mind `updatedb` may not have indexed recently created files). +- Для того, чтобы найти файл в текущей директории сделайте `find . -iname '*something*'`. Для того, чтобы искать файл по всей системе используйте `locate something` (но не забывайте, что `updatedb` мог еще не проидексировать недавно созданные файлы). -- For general searching through source or data files (more advanced than `grep -r`), use [`ag`](https://github.com/ggreer/the_silver_searcher). +- Для основого поиска по содержимому файлов (более сложному, чем `grep -r`) используйте [`ag`](https://github.com/ggreer/the_silver_searcher). -- To convert HTML to text: `lynx -dump -stdin` +- Для конвертации HTML в текст: `lynx -dump -stdin` -- For Markdown, HTML, and all kinds of document conversion, try [`pandoc`](http://pandoc.org/). +- Для конвертации разных типов разметки (HTML, маркдаун и т.д.) попробуйте [`pandoc`](http://pandoc.org/). -- If you must handle XML, `xmlstarlet` is old but good. +- Если нужно работать с XML, есть старая но хорошая утилита – `xmlstarlet`. -- For JSON, use `jq`. +- Для работы с JSON используйте `jq`. -- For Excel or CSV files, [csvkit](https://github.com/onyxfish/csvkit) provides `in2csv`, `csvcut`, `csvjoin`, `csvgrep`, etc. +- Для работы с Excel и CSV-файлами используйте [csvkit](https://github.com/onyxfish/csvkit) (программа предоставляет команды `in2csv`, `csvcut`, `csvjoin`, `csvgrep` и т.д.) -- For Amazon S3, [`s3cmd`](https://github.com/s3tools/s3cmd) is convenient and [`s4cmd`](https://github.com/bloomreach/s4cmd) is faster. Amazon's [`aws`](https://github.com/aws/aws-cli) is essential for other AWS-related tasks. +- Для работы с Amazon S3 удобно работать с [`s3cmd`](https://github.com/s3tools/s3cmd) и [`s4cmd`](https://github.com/bloomreach/s4cmd) (последний работает быстрее). Для остальных сервисов Амазона используйте стандартный [`aws`](https://github.com/aws/aws-cli). -- Know about `sort` and `uniq`, including uniq's `-u` and `-d` options -- see one-liners below. See also `comm`. +- Знайте про `sort` и `uniq`, включая флаги `-u` и `-d`, смотрите примеры ниже. Еще гляньте на `comm`. -- Know about `cut`, `paste`, and `join` to manipulate text files. Many people use `cut` but forget about `join`. +- Знайте про `cut`, `paste`, и `join` для работы с текстовыми файлами. Многие люди используют `cut` забыв про `join`. -- Know about `wc` to count newlines (`-l`), characters (`-m`), words (`-w`) and bytes (`-c`). +- Знайте о `wc`: для подсчета переводов строк (`-l`), для символов – (`-m`), для слов – words (`-w`), для байтового подсчета – (`-c`). -- Know about `tee` to copy from stdin to a file and also to stdout, as in `ls -al | tee file.txt`. +- Знайте про `tee`, для копирования в файл из stdin и stdout, что-то типа `ls -al | tee file.txt`. -- Know that locale affects a lot of command line tools in subtle ways, including sorting order (collation) and performance. Most Linux installations will set `LANG` or other locale variables to a local setting like US English. But be aware sorting will change if you change locale. And know i18n routines can make sort or other commands run *many times* slower. In some situations (such as the set operations or uniqueness operations below) you can safely ignore slow i18n routines entirely and use traditional byte-based sort order, using `export LC_ALL=C`. +- Не забывайте, что Ваша локаль влияет на многие команды, включая порядки сортировки, сравнение и производительность. Многие дистрибутивы Linux автоматически выставляют `LANG` или любую другую переменную в подходящую для Вашего региона. Из-за этого результаты функций сортировки могут работать непредсказуемо. Рутины `i18n` могут значительно снизить производительность сортировок. В некоторых случаях можно полностью этого избегать (за исключением редких случаев), сортируя традиционно побайтово, для этого `export LC_ALL=C` -- Know basic `awk` and `sed` for simple data munging. For example, summing all numbers in the third column of a text file: `awk '{ x += $3 } END { print x }'`. This is probably 3X faster and 3X shorter than equivalent Python. +- Знайте основы `awk` и `sed` для простых манипуляций с данными. Например, чтобы получить сумму всех чисел, которые находятся в третьей колонки текстового файла можно использовать `awk '{ x += $3 } END { print x }'`. Скорее всего, это раза в 3 быстрее и раза в 3 проще чем делать это в Питоне. -- To replace all occurrences of a string in place, in one or more files: +- Чтобы заменить все нахождения подстроки в одном или нескольких файлах: ```sh perl -pi.bak -e 's/old-string/new-string/g' my-files-*.txt ``` -- To rename many files at once according to a pattern, use `rename`. For complex renames, [`repren`](https://github.com/jlevy/repren) may help. +Для того, чтобы переименовать сразу много файлов по шаблону, используйте `rename`. Для сложных переименований может помочь [`repren`](https://github.com/jlevy/repren): + ```sh - # Recover backup files foo.bak -> foo: + # Восстановить бекапы из foo.bak в foo: rename 's/\.bak$//' *.bak - # Full rename of filenames, directories, and contents foo -> bar: + # Полное переименование имен файлов, папок и содержимого файлов из foo в bar. repren --full --preserve-case --from foo --to bar . ``` -- Use `shuf` to shuffle or select random lines from a file. +- Используйте `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'`. Последнее лучше, потому что его можно скопировать. -- Know `sort`'s options. For numbers, use `-n`, or `-h` for handling human-readable numbers (e.g. from `du -h`). Know how keys work (`-t` and `-k`). In particular, watch out that you need to write `-k1,1` to sort by only the first field; `-k1` means sort according to the whole line. Stable sort (`sort -s`) can be useful. For example, to sort first by field 2, then secondarily by field 1, you can use `sort -k1,1 | sort -s -k2,2`. -- If you ever need to write a tab literal in a command line in Bash (e.g. for the -t argument to sort), press **ctrl-v** **[Tab]** or write `$'\t'` (the latter is better as you can copy/paste it). - The standard tools for patching source code are `diff` and `patch`. See also `diffstat` for summary statistics of a diff. Note `diff -r` works for entire directories. Use `diff -r tree1 tree2 | diffstat` for a summary of changes. @@ -443,8 +446,10 @@ A few examples of piecing together commands: ## MacOS only These are items relevant *only* on MacOS. +Некоторые вещи релевантны только для Мака. + +- Системы управлением пакетами – `brew` (Homebrew) и `port` (MacPorts). Они могут быть использованы для того, чтобы установить большинство програм, упомянутых в этом документе. -- Package management with `brew` (Homebrew) and/or `port` (MacPorts). These can be used to install on MacOS many of the above commands. - Copy output of any command to a desktop app with `pbcopy` and paste input from one with `pbpaste`. From 14b44e8221a8c84989e502258c1477d1a745734d Mon Sep 17 00:00:00 2001 From: Oleg Berman Date: Mon, 6 Jul 2015 22:46:23 -0400 Subject: [PATCH 06/12] file processing finished & macos section corrected --- README-ru.md | 31 +++++++++++++------------------ 1 file changed, 13 insertions(+), 18 deletions(-) diff --git a/README-ru.md b/README-ru.md index e5a4bf8..cc3b874 100644 --- a/README-ru.md +++ b/README-ru.md @@ -204,25 +204,23 @@ - Если вам когда-нибудь придется написать код таба в терминале, например для сортировки по табу с флагом -t, используйте шорткат **ctrl-v** **[Tab]** или напишите `$'\t'`. Последнее лучше, потому что его можно скопировать. +- Стандартные инструменты для патчинга исходников это `diff` и `patch`. Так же посмотрите на `diffstat` для просмотра статистики диффа. `diff -r` работает для по всей директории. Используйте `diff -r tree1 tree2 | diffstat` для полной сводки изменений. +- Для бинарников используйте `hd` для простых hex-дампом и `bvi` для двоичного изменения бинарников. -- The standard tools for patching source code are `diff` and `patch`. See also `diffstat` for summary statistics of a diff. Note `diff -r` works for entire directories. Use `diff -r tree1 tree2 | diffstat` for a summary of changes. +- `strings` (в связке `grep` или чем-то похожем) помогает найти строки в бинарниках. -- For binary files, use `hd` for simple hex dumps and `bvi` for binary editing. +- Для того, чтобы посмотреть разницу в бинарниках (дельта кодирование) используйте `xdelta3`. -- Also for binary files, `strings` (plus `grep`, etc.) lets you find bits of text. +- Для конвертирования кодировок используйте `iconv`. Для более сложных задач – `uconv`, он поддерживает некоторые сложные фичи Юникода. Например эта команда переводит строки из файла в нижний регистр и убирает ударения (кои бывают, например, в Испанском) -- For binary diffs (delta compression), use `xdelta3`. - -- To convert text encodings, try `iconv`. Or `uconv` for more advanced use; it supports some advanced Unicode things. For example, this command lowercases and removes all accents (by expanding and dropping them): ```sh uconv -f utf-8 -t utf-8 -x '::Any-Lower; ::Any-NFD; [:Nonspacing Mark:] >; ::Any-NFC; ' < input.txt > output.txt ``` -- To split files into pieces, see `split` (to split by size) and `csplit` (to split by a pattern). - -- Use `zless`, `zmore`, `zcat`, and `zgrep` to operate on compressed files. +- Для того, чтобы разбить файл на куски используйте `split` (разбивает на куски по размеру), или `csplit` (по шаблону или регулярному выражению) +- Используйте `zless`, `zmore`, `zcat`, и `zgrep` для работы с сжатыми файлами. ## System debugging @@ -445,20 +443,17 @@ A few examples of piecing together commands: ## MacOS only -These are items relevant *only* on MacOS. -Некоторые вещи релевантны только для Мака. +Некоторые вещи релевантны *только* для Мака. - Системы управлением пакетами – `brew` (Homebrew) и `port` (MacPorts). Они могут быть использованы для того, чтобы установить большинство програм, упомянутых в этом документе. +- Копируйте аутпут консольных программ в десктопные через `pbcopy`, и вставляйте инпут через `pbpaste`. -- Copy output of any command to a desktop app with `pbcopy` and paste input from one with `pbpaste`. +- Для того, чтобы открыть файл или десктопную программу типа Finder используйте `open`, вот так `open -a /Applications/Whatever.app`. -- To open a file with a desktop app, use `open` or `open -a /Applications/Whatever.app`. - -- Spotlight: Search files with `mdfind` and list metadata (such as photo EXIF info) with `mdls`. - -- 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. +- Spotlight: Ищите файлы в консоле через `mdfind` и смотрите метадату (например EXIF информацию фотографий) через `mdls`. +- Не забывайте, что MacOS основан на BSD Uni и многие команды (например `ps`, `ls`, `tail`, `awk`, `sed`) имеют некоторые небольшие различия с линуксовыми. Это обусловлено влянием `UNIX System V` и `GNU Tools`. Разницу можно заметить увидив заголовок "BSD General Commands Manual." к манам програм. В некоторых случаях, на Мак можно поставить GNU-версии программ, например `gawk` и `gsed`. Когда пишите кроссплатформенные Bash-скрипты, старайтесь избегать команды, которые могут различаться (например, лучше используйте Python или `perl`), или тщательно все тестируйте. ## Больше информации по теме @@ -470,7 +465,7 @@ These are items relevant *only* on MacOS. За небольшим исключением, весь код написан так, что другие его смогут прочитать. -With the exception of very small tasks, code is written so others can read it. Кому много дано, с того много и спрашивается. Тот факт, что что-то может быть написано в Баше, вовсе не означает что оно должно быть там написано. ;) +Кому много дано, с того много и спрашивается. Тот факт, что что-то может быть написано в Баше, вовсе не означает что оно должно быть там написано. ;) ## Лицензия From 31c6d4f7dadaf10ee841ce907c0c56b637349e71 Mon Sep 17 00:00:00 2001 From: Oleg Berman Date: Mon, 6 Jul 2015 23:13:53 -0400 Subject: [PATCH 07/12] one liners translated --- README-ru.md | 58 ++++++++++++++++++++++++++-------------------------- 1 file changed, 29 insertions(+), 29 deletions(-) diff --git a/README-ru.md b/README-ru.md index cc3b874..7e32637 100644 --- a/README-ru.md +++ b/README-ru.md @@ -9,7 +9,7 @@ - [Ежедневное использование](#everyday-use) - [Процессинг файлов и информации](#processing-files-and-data) - [Системный дебаггинг](#system-debugging) -- [Команды в одну строчку](#one-liners) +- [В одну строчку](#one-liners) - [Сложно, но полезно](#obscure-but-useful) - [MacOS only](#macos-only) - [Больше информации по теме](#more-resources) @@ -222,48 +222,47 @@ - Используйте `zless`, `zmore`, `zcat`, и `zgrep` для работы с сжатыми файлами. -## System debugging +## Системный дебаггинг -- For web debugging, `curl` and `curl -I` are handy, or their `wget` equivalents, or the more modern [`httpie`](https://github.com/jakubroztocil/httpie). +- Дле веб-дебаггинга используйте `curl` и `curl -I`, или их альтернативу `wget`. Так же есть более современные альтернативы, типа [`httpie`](https://github.com/jakubroztocil/httpie). -- To know disk/cpu/network status, use `iostat`, `netstat`, `top` (or the better `htop`), and (especially) `dstat`. Good for getting a quick idea of what's happening on a system. +- Чтобы получить информацию о диске/CPU/сети используйте `iostat`, `netstat`, `top` (или лучшую альтернатву `htop`) и особенно `dstat`. Хороший старт для того, чтобы понимать что происходит в системе. -- For a more in-depth system overview, use [`glances`](https://github.com/nicolargo/glances). It presents you with several system level statistics in one terminal window. Very helpful for quickly checking on various subsystems. +- Для более детальной информации используйте [`glances`](https://github.com/nicolargo/glances). Эта программа показывает сразу несколько разных статистик в одном окне терминале. Полезно, когда следите за сразу несколькими системами. -- To know memory status, run and understand the output of `free` and `vmstat`. In particular, be aware the "cached" value is memory held by the Linux kernel as file cache, so effectively counts toward the "free" value. +- Для того, чтобы следить за памятью научитесь понимать `free` и `vmstat`. В частности не забывайте, что кешированые значения ("cached" value) – это память, которую держит ядро и эти значения являются частью `free`. -- Java system debugging is a different kettle of fish, but a simple trick on Oracle's and some other JVMs is that you can run `kill -3 ` and a full stack trace and heap summary (including generational garbage collection details, which can be highly informative) will be dumped to stderr/logs. +- Дебаггинг Джавы – совсем другая рыбка, но некоторые манипуляции над виртуальной машиной Оракла или любой другой позволит вам использовать делать `kill -3 ` и трассировать сводки стека и хипа (включая детали работы сборщика мусора, которые бывают очень полезными), и их можно дампнуть в stderr или логи. -- Use `mtr` as a better traceroute, to identify network issues. +- Используйте `mtr` для лучшей трассировки, чтобы находить проблемы сети. -- For looking at why a disk is full, `ncdu` saves time over the usual commands like `du -sh *`. +- Для того, чтобы узнать почему диск полностью забит используйте `ncdu`, это сохраняет время по сравнению с тем же `du -sh *`. -- To find which socket or process is using bandwidth, try `iftop` or `nethogs`. +- Для того, чтобы узнать какой сокет или процесс использует интернет используйте `iftop` или `nethogs`. -- The `ab` tool (comes with Apache) is helpful for quick-and-dirty checking of web server performance. For more complex load testing, try `siege`. +- `ab`, которая поставляется вместе в Апачем полезна для быстрой нетщательной проверки производительности веб-сервера. Для более серьезного лоад-тестинга используйте `siege`. -- For more serious network debugging, `wireshark`, `tshark`, or `ngrep`. +- Для более серьезного дебаггинга сетей используйте `wireshark`, `tshark`, и `ngrep`. -- Know about `strace` and `ltrace`. These can be helpful if a program is failing, hanging, or crashing, and you don't know why, or if you want to get a general idea of performance. Note the profiling option (`-c`), and the ability to attach to a running process (`-p`). +- Знайте про `strace` и `ltrace`. Эти команды могут быть полезны, если программа падает или висит и вы не знаете почему, или если вы хотите протестировать производительность программы. Не забывайте про возможность дебаггинга (`-c`) и возможностью прицепиться к процессу (`-p`). -- Know about `ldd` to check shared libraries etc. +- Не забывайте про `ldd` для проверки системных библиотек. -- Know how to connect to a running process with `gdb` and get its stack traces. +- Знайте как прицепиться к бегущему процессу через `gdb` и получить трассировку стека. -- Use `/proc`. It's amazingly helpful sometimes when debugging live problems. Examples: `/proc/cpuinfo`, `/proc/xxx/cwd`, `/proc/xxx/exe`, `/proc/xxx/fd/`, `/proc/xxx/smaps`. +- Используйте `/proc`. Иногда он невероятно полезен для дебага запущенных программ. Примеры: `/proc/cpuinfo`, `/proc/xxx/cwd`, `/proc/xxx/exe`, `/proc/xxx/fd/`, `/proc/xxx/smaps`. -- When debugging why something went wrong in the past, `sar` can be very helpful. It shows historic statistics on CPU, memory, network, etc. +- Когда дебажете что-то, что сломалось в прошлом используйте `sar` – бывает очень полезно. Показывает историю CPU, памяти, сети и т.д. -- For deeper systems and performance analyses, look at `stap` ([SystemTap](https://sourceware.org/systemtap/wiki)), [`perf`](http://en.wikipedia.org/wiki/Perf_(Linux)), and [`sysdig`](https://github.com/draios/sysdig). +- Для анализа более глубоких систем и производительности посмотрите на `stap` ([SystemTap](https://sourceware.org/systemtap/wiki)), [`perf`](http://en.wikipedia.org/wiki/Perf_(Linux)), и [`sysdig`](https://github.com/draios/sysdig). -- Check what OS you're on with `uname` or `uname -a` (general Unix/kernel info) or `lsb_release -a` (Linux distro info). +- Узнайте какая у вас операционка через `uname` or `uname -a` (основная Unix-информация/информация о ядре) или `lsb_release -a` (информация о дистрибутиве). -- Use `dmesg` whenever something's acting really funny (it could be hardware or driver issues). +- Используйте `dmesg` когда что-то ведет себя совсем странно (например железо или драйвера). +## В одну строчку -## One-liners - -A few examples of piecing together commands: +Давайте соберем все вместе и напишем несколько комманд: - It is remarkably helpful sometimes that you can do set intersection, union, and difference of text files via `sort`/`uniq`. Suppose `a` and `b` are text files that are already uniqued. This is fast, and works on files of arbitrary size, up to many gigabytes. (Sort is not limited by memory, though you may need to use the `-T` option if `/tmp` is on a small root partition.) See also the note about `LC_ALL` above and `sort`'s `-u` option (left out for clarity below). ```sh @@ -272,31 +271,32 @@ A few examples of piecing together commands: cat a b b | sort | uniq -u > c # c is set difference a - b ``` -- Use `grep . *` to visually examine all contents of all files in a directory, e.g. for directories filled with config settings, like `/sys`, `/proc`, `/etc`. +- Используйте `grep . *` для того, чтобы визуально посмотреть что находится в директории, особенно послезно когда у вас много конфигов типа `/sys`, `/proc`, `/etc`. -- Summing all numbers in the third column of a text file (this is probably 3X faster and 3X less code than equivalent Python): +- Получить сумму всех чисел, которые находятся в третьей колонки текстового файла. (Скорее всего, это раза в 3 быстрее и раза в 3 проще чем делать это в Питоне): ```sh awk '{ x += $3 } END { print x }' myfile ``` -- If want to see sizes/dates on a tree of files, this is like a recursive `ls -l` but is easier to read than `ls -lR`: +- Если вам нужно посмотреть размеры и даты создания древа файлов используйте: ```sh find . -type f -ls ``` +Это почти как рекурсивная `ls -l, но более читабельно чем `ls -lR`: -- Use `xargs` or `parallel` whenever you can. Note you can control how many items execute per line (`-L`) as well as parallelism (`-P`). If you're not sure if it'll do the right thing, use xargs echo first. Also, `-I{}` is handy. Examples: +- Используйте `xargs` (или `parallel`). Это очень мощная штука. Обратите внимание, что Вы можете контролировать количество команд на каждую строку, а так же параллельность. Если Вы не уверены, что делаете что-то правильно, начните с `xargs echo`. Еще `-I{}` – полезная штука. Примеры: ```sh find . -name '*.py' | xargs grep some_function cat hosts | xargs -I{} ssh root@{} hostname ``` -- Say you have a text file, like a web server log, and a certain value that appears on some lines, such as an `acct_id` parameter that is present in the URL. If you want a tally of how many requests for each `acct_id`: +- Давайте представим, что у нас есть какой-то текстовый файл, например лог какого-то сервера и на каких-то строках появляется значение, строки с которой нам интересны, например `acct_id`. Давайте подсчитаем сколько таких запросов в нашем логе: ```sh cat access.log | egrep -o 'acct_id=[0-9]+' | cut -d= -f2 | sort | uniq -c | sort -rn ``` -- Run this function to get a random tip from this document (parses Markdown and extracts an item): +- Запустите этот скрипт чтобы получить случайный совет из этой инструкции: ```sh function taocl() { curl -s https://raw.githubusercontent.com/jlevy/the-art-of-command-line/master/README.md | From 3c882424dd2f1227e3a6976ee6c294294ad51888 Mon Sep 17 00:00:00 2001 From: Oleg Berman Date: Tue, 7 Jul 2015 00:00:58 -0400 Subject: [PATCH 08/12] first version of russian translation --- README-ru.md | 141 +++++++++++++++++++++++++-------------------------- 1 file changed, 70 insertions(+), 71 deletions(-) diff --git a/README-ru.md b/README-ru.md index 7e32637..9229936 100644 --- a/README-ru.md +++ b/README-ru.md @@ -72,7 +72,7 @@ - Используйте **ctrl-w** в Баше для того, чтобы удалить последнее слово в команде; **ctrl-u** для того, что бы удалить команду полностью. Используйте **alt-b** и **alt-f** для того, чтобы бегать между словами команды, **ctrl-k** для того, чтобы прыгнуть к концу строки, **ctrl-l** для того, чтобы очистить экран. Гляньте на `man readline` чтобы узнать о всех шорткатах Баша. Их много! Например, **alt-.** бежит по предыдущим аргументам команды, а **alt-*** расширяет глоб.?? -– Если Вам нравятся шорткаты Вима сделайте `set -o vi`. +- Если Вам нравятся шорткаты Вима сделайте `set -o vi`. - Для того, чтобы посмотреть историю введите `history`. Так же существует множество аббривиатур, например `!$` – последний аргумент, `!!` – последняя команда, хотя эти аббривиатуры часто заменяются шорткатами **ctrl-r** и **alt-.**. @@ -264,14 +264,14 @@ Давайте соберем все вместе и напишем несколько комманд: -- It is remarkably helpful sometimes that you can do set intersection, union, and difference of text files via `sort`/`uniq`. Suppose `a` and `b` are text files that are already uniqued. This is fast, and works on files of arbitrary size, up to many gigabytes. (Sort is not limited by memory, though you may need to use the `-T` option if `/tmp` is on a small root partition.) See also the note about `LC_ALL` above and `sort`'s `-u` option (left out for clarity below). +- Это довольно круто, что можно найти множественные пересечения файлов, соединить отсортированные файлы и посмотреть разницу в нескольких файлов через `sort`/`uniq`. Это быстрый подход и работает на файлах любого размера (включая многогигабайтные файлы). (Сортировка не ограничена памятью, но возможно вам придется добавить `-T` если `/tmp` находится на небольшом логическом диске). Еще посмотрите то что было сказано выше о `LC_ALL`. Флаг сорта `-u` option не используется ниже чтобы было понятнее: ```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 | sort | uniq > c # c is a union b + cat a b | sort | uniq -d > c # c is a intersect b cat a b b | sort | uniq -u > c # c is set difference a - b ``` -- Используйте `grep . *` для того, чтобы визуально посмотреть что находится в директории, особенно послезно когда у вас много конфигов типа `/sys`, `/proc`, `/etc`. +- Используйте `grep . *` для того, чтобы посмотреть содержимое всех файлов в директории, особенно послезно когда у вас много конфигов типа `/sys`, `/proc`, `/etc`. - Получить сумму всех чисел, которые находятся в третьей колонки текстового файла. (Скорее всего, это раза в 3 быстрее и раза в 3 проще чем делать это в Питоне): @@ -308,138 +308,137 @@ ``` -## Obscure but useful +## Сложно, но полезно -- `expr`: perform arithmetic or boolean operations or evaluate regular expressions +- `expr`: для выполнения арифметических и булевых операций, а так же регулярных выражений -- `m4`: simple macro processor +- `m4`: простенький макро-процессор -- `yes`: print a string a lot +- `yes`: вывод строки в бесконечном цикле -- `cal`: nice calendar +- `cal`: классный календарь -- `env`: run a command (useful in scripts) +- `env`: для того, чтобы выполнить команду (полезно в Bash-скриптах) - `printenv`: print out environment variables (useful in debugging and scripts) -- `look`: find English words (or lines in a file) beginning with a string +- `look`: найти английские слова (или строки) в файле -- `cut `and `paste` and `join`: data manipulation +- `cut `, `paste` и `join`: манипуляция данными -- `fmt`: format text paragraphs +- `fmt`: форматировка параграфов в тексте -- `pr`: format text into pages/columns +- `pr`: отформатировать текст в страницы/колонки -- `fold`: wrap lines of text +- `fold`: (обернуть) ограничить длину строк в файле -- `column`: format text into columns or tables +- `column`: форматировать текст в колонки или таблицы -- `expand` and `unexpand`: convert between tabs and spaces +- `expand` и `unexpand`: конвертация между табами и пробелами -- `nl`: add line numbers +- `nl`: добавить номера строк -- `seq`: print numbers +- `seq`: вывести числа -- `bc`: calculator +- `bc`: калькулятор -- `factor`: factor integers +- `factor`: возвести числа в степень -- `gpg`: encrypt and sign files +- `gpg`: зашифровать и подписать файлы -- `toe`: table of terminfo entries +- `toe`: таблица терминалов terminfo с описанием -- `nc`: network debugging and data transfer +- `nc`: дебаггинг сети и передачи данных -- `socat`: socket relay and tcp port forwarder (similar to `netcat`) +- `socat`: переключатель сокетов и перенаправление tcp-портов (похоже на `netcat`) -- `slurm`: network trafic visualization +- `slurm`: визуализация трафика сети -- `dd`: moving data between files or devices +- `dd`: перенос информации между файлами и девайсами -- `file`: identify type of a file +- `file`: узнать тип файла -- `tree`: display directories and subdirectories as a nesting tree; like `ls` but recursive +- `tree`: показать директории и сабдиректории в виде дерева; как `ls`, но рекурсивно -- `stat`: file info +- `stat`: информация о файле -- `tac`: print files in reverse +- `tac`: вывести файл наоборот (ласипан) -- `shuf`: random selection of lines from a file +- `shuf`: случайная выборка строк из файла -- `comm`: compare sorted files line by line +- `comm`: построчно сравнить отсортированные файлы -- `pv`: monitor the progress of data through a pipe +- `pv`: мониторинг прогресса прохождения информации через пайп -- `hd` and `bvi`: dump or edit binary files +- `hd` и `bvi`: дамп и редактирование бинарников -- `strings`: extract text from binary files +- `strings`: найти текст в бинарникх -- `tr`: character translation or manipulation +- `tr`: манипуляция с char (символьным типом) -- `iconv` or `uconv`: conversion for text encodings +- `iconv` и `uconv`: конвертация кодировок -- `split `and `csplit`: splitting files +- `split` и `csplit`: разбить файлы -- `sponge`: read all input before writing it, useful for reading from then writing to the same file, e.g., `grep -v something some-file | sponge some-file` +- `sponge`: прочитать весь инпут перед тем, как его записать, полезно когда читаешь из того же файла, куда записываешь, например вот так: `grep -v something some-file | sponge some-file` -- `units`: unit conversions and calculations; converts furlongs per fortnight to twips per blink (see also `/usr/share/units/definitions.units`) +- `units`: конвертер, метры в келометры, версты в пяди (смотрите `/usr/share/units/definitions.units`) -- `7z`: high-ratio file compression +- `7z`: архиватор с высокой степенью сжатия -- `ldd`: dynamic library info +- `ldd`: показывает зависимости программы от системных библиотек -- `nm`: symbols from object files +- `nm`: получаем названия всех функций, которые определены в .o или .a -- `ab`: benchmarking web servers +- `ab`: бенчмаркинг веб-серверов -- `strace`: system call debugging +- `strace`: дебаг системных вызовов -- `mtr`: better traceroute for network debugging +- `mtr`: лучшей трассировка для дебаггинга сети -- `cssh`: visual concurrent shell +- `cssh`: несколько терминалов в одном UI -- `rsync`: sync files and folders over SSH +- `rsync`: синхронизация файлов и папок через SSH -- `wireshark` and `tshark`: packet capture and network debugging +- `wireshark` и `tshark`: перехват пакетов и дебаг сети -- `ngrep`: grep for the network layer +- `ngrep`: grep для слоя сети (network layer) -- `host` and `dig`: DNS lookups +- `host` и `dig`: узнать DNS -- `lsof`: process file descriptor and socket info +- `lsof`: процессинг дискрипторов и информация о сокетах -- `dstat`: useful system stats +- `dstat`: полезная статистика системы -- [`glances`](https://github.com/nicolargo/glances): high level, multi-subsystem overview +- [`glances`](https://github.com/nicolargo/glances): высокоуровневая, многосистемная статистика -- `iostat`: CPU and disk usage stats +- `iostat`: статистика CPU и использования жесткого диска -- `htop`: improved version of top +- `htop`: улучшенная версия top -- `last`: login history +- `last`: история логинов в систему -- `w`: who's logged on +- `w`: под каким пользователем вы сидите -- `id`: user/group identity info +- `id`: информация о пользователе/группе -- `sar`: historic system stats +- `sar`: история системной статистики -- `iftop` or `nethogs`: network utilization by socket or process +- `iftop` или `nethogs`: использование сети конкретным сокетом или процессом -- `ss`: socket statistics +- `ss`: статистика сокетов -- `dmesg`: boot and system error messages +- `dmesg`: ошибки бута и ошибки системы -- `hdparm`: SATA/ATA disk manipulation/performance +- `hdparm`: манипуляция с SATA/ATA -- `lsb_release`: Linux distribution info +- `lsb_release`: информация о дистрибутиве Linux -- `lsblk`: List block devices: a tree view of your disks and disk paritions +- `lsblk`: cписок блочных устройств компьютера: древо ваших дисков и логических дисков -- `lshw`, `lscpu`, `lspci`, `lsusb`, `dmidecode`: hardware information, including CPU, BIOS, RAID, graphics, devices, etc. - -- `fortune`, `ddate`, and `sl`: um, well, it depends on whether you consider steam locomotives and Zippy quotations "useful" +- `lshw`, `lscpu`, `lspci`, `lsusb`, `dmidecode`: информация о железе включая, CPU, BIOS, RAID, графику, девайсы, и т.д. +- `fortune`, `ddate`, и `sl`: хм, не знаю будут ли вам "полезны" веселые цитатки и поезда, пересекающие ваш терминал :) ## MacOS only From a70ba3323e2f25c77f8bd22b286c15f80f375d25 Mon Sep 17 00:00:00 2001 From: Oleg Berman Date: Tue, 7 Jul 2015 00:03:44 -0400 Subject: [PATCH 09/12] add links to russian translation everywhere --- README-es.md | 12 +++--- README-pt.md | 108 +++++++++++++++++++++++++-------------------------- README-zh.md | 2 +- README.md | 6 +-- 4 files changed, 64 insertions(+), 64 deletions(-) diff --git a/README-es.md b/README-es.md index 3014e04..e6ec203 100644 --- a/README-es.md +++ b/README-es.md @@ -1,4 +1,4 @@ -[ Languages: [English](README.md), [Español](README-es.md), [Português](README-pt.md), [中文](README-zh.md) ] +[ Languages: [English](README.md), [Español](README-es.md), [Português](README-pt.md), [中文](README-zh.md), [Русский](README-ru.md) ] # El Arte del Terminal @@ -25,8 +25,8 @@ Gran parte esta [appeared](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 ahí, parece que vale la pena usar Github, donde las personas con mayor talento que facílmente sugerir mejoras. Si yo vez un error o algo que podría ser mejor, por favor, cree un issue o PR! (Por supuesto revise la sección meta de PRs/issues primero.) - - + + ## Meta Alcance: @@ -34,7 +34,7 @@ Alcance: - Esta guía es para ambos el principiante y el experimentado. Los objetivos son *diversidad* (todo importa), *especificidad* (dar ejemplos concretos del caso más común), y *concisión* (evitar cosas que no son esenciales o insignificantes que puedas buscar facilmente en otro lugar). Cada consejo es esencial en alguna situación o significativamente ahorra tiempo comparada con otras alternativas. - Esta escrito para Linux, con excepción de la sección "[Solo para MacOS](#macos-only)". Muchos de los otros puntos aplican o pueden ser instalados en otros Unices o MacOS (o incluso Cygwin). - Se enficá en Bash interactivo, Aunque muchos de los consejos se aplican para otros shells y al Bash scripting por lo general. -- Esta incluye ambos comandos "estándar" Unix commands así como aquellos que requiren la instalación especial de in paquete -- siempre que sea suficientemente importante para ameritar su inclusión. +- Esta incluye ambos comandos "estándar" Unix commands así como aquellos que requiren la instalación especial de in paquete -- siempre que sea suficientemente importante para ameritar su inclusión. Notas: @@ -384,7 +384,7 @@ Algunos ejemplos de comandos reunidos: - `units`: unidades de conversión y calculaciones; convierte furlongs por fortnight para twips por blink (ver también `/usr/share/units/definitions.units`) -- `7z`: conpresión de archivos de alto nivel +- `7z`: conpresión de archivos de alto nivel - `ldd`: información de libreria dinamica @@ -469,6 +469,6 @@ Con excepción de pequeñas tareas, el código está escrito para que otros pued ## Licencia -[![Creative Commons License](https://i.creativecommons.org/l/by-sa/4.0/88x31.png)](http://creativecommons.org/licenses/by-sa/4.0/) +[![Creative Commons License](https://i.creativecommons.org/l/by-sa/4.0/88x31.png)](http://creativecommons.org/licenses/by-sa/4.0/) Este trabajo esta licenciado bajo [Creative Commons Attribution-ShareAlike 4.0 International License](http://creativecommons.org/licenses/by-sa/4.0/). diff --git a/README-pt.md b/README-pt.md index a85c14f..db5f8ea 100644 --- a/README-pt.md +++ b/README-pt.md @@ -1,7 +1,7 @@ -[ Languages: [English](README.md), [Español](README-es.md), [Português](README-pt.md), [中文](README-zh.md) ] +[ Languages: [English](README.md), [Español](README-es.md), [Português](README-pt.md), [中文](README-zh.md), [Русский](README-ru.md) ] -# A arte da linha de comando +# A arte da linha de comando - [Meta](#meta) - [Básico](#básico) @@ -30,15 +30,15 @@ Escopo: - Este guia é destinado tanto aos iniciantes quanto aos usuários mais experientes. Os objetivos são *abrangencia* (tudo que é importante), *especificidade* (dar exemplos concretos dos casos de usos mais comuns), e *brevidade* (evitar coisas que não são tão essenciais ou digressões que você pode facilmente encontrar pela internet). Todas as dicas são essenciais em alguma situação ou trazem uma economia notável de tempo em relação a outras alternativas. - Este guia é escrito para o Linux. Muitos, mas não todos os items, se aplicam igualmente para o MacOS (ou mesmo o Cygwin). - O foco está na interatividade com Bash, embora muitas dicas aqui sejam aplicáveis a outras `shells' e tambem a scripts em Bash, em geral. -- Incluimos tanto comandos no Unix "padrão", quanto comandos que requeiram instalação de pacotes adicionais -- desde que estes sejam importantes o suficiente para merecerem sua inclusão nessa lista. +- Incluimos tanto comandos no Unix "padrão", quanto comandos que requeiram instalação de pacotes adicionais -- desde que estes sejam importantes o suficiente para merecerem sua inclusão nessa lista. Notas: - Para manter este guia em uma única página, o conteúdo implícito será incluído por referência. Você é competente o suficiente para verificar mais detalhes em outros lugares, desde que você já tenha entendido a ideia ou saiba o que procurar no Google. Use `apt-get`/`yum`/`dnf`/`pacman`/`pip`/`brew` (quando adequado) para instalar novos programas. -- Use [Explainshell](http://explainshell.com/) para encontrar informações úteis sobre o que fazem os comandos, as opções, pipes e etc. +- Use [Explainshell](http://explainshell.com/) para encontrar informações úteis sobre o que fazem os comandos, as opções, pipes e etc. -## Básico +## Básico - Aprenda o básico sobre Bash. Na verdade, digite `man bash` e pelo menos entenda superficialmente o seu funcionamento; é bastante simples de ler e nem é tão grande assim. Shells alternativas podem ser legais, mas Bash é a mais poderosa e sempre está disponível (aprender *somente* zsh, fish, etc, é tentador quando você usa o seu próprio notebook, mas restringe você em muitas situações, por exemplo quando você quer usar servidores de outros). @@ -63,11 +63,11 @@ Notas: - Aprenda a usar `apt-get`, `yum`, `dnf` ou `pacman` (dependendo da distribuição) para procurar e instalar pacotes. E garanta que você possui o `pip` para instalar ferramentas baseadas em Python (algumas das abaixo são mais fáceis de instalar através do `pip`). -## Uso diário +## Uso diário - Usando Bash, use **Tab** para completar argumentos e **ctrl-r** para pesquisar através a história dos comandos. -- Em Bash, utilize **ctrl-w** para deletar a última palavra, e **ctrl-u** para deletar tudo e voltar para o início da linha. Use **alt-b** e **alt-f** para se mover por palavras, **ctrl-k** para apagar até o final da linha, **ctrl-l** para limpar a tela. Consulte `man readline` para todos os keybindings padrões do Bash. Existem muitos. Por exemplo **alt-.** circula através dos argumentos anteriores, e **alt-*** expande um glob. +- Em Bash, utilize **ctrl-w** para deletar a última palavra, e **ctrl-u** para deletar tudo e voltar para o início da linha. Use **alt-b** e **alt-f** para se mover por palavras, **ctrl-k** para apagar até o final da linha, **ctrl-l** para limpar a tela. Consulte `man readline` para todos os keybindings padrões do Bash. Existem muitos. Por exemplo **alt-.** circula através dos argumentos anteriores, e **alt-*** expande um glob. - Alternativamente, se você adora os keybinds do vi, use `set -o vi`. @@ -111,7 +111,7 @@ Notas: diff /etc/hosts <(ssh somehost cat /etc/hosts) ``` -- Saiba sobre "documentos aqui" no Bash, como em `cat <logfile 2> $1`. Muitas vezes, para garantir que um comando não deixa um arquivo aberto para manipular a entrada padrão, digitando isso no terminal que você está, é uma boa prática adicionar um `` e um completo rastreamento da pilha(stack trace) e resumo do heap (incluindo detalhes geracionais do garbage collector, os quais podem ser altamente informativos) serão vazados para stderr/logs. @@ -302,19 +302,19 @@ Alguns exemplos de como reunir os comandos. ``` -## Obscuros mas úteis +## Obscuros mas úteis -- `expr`: executa operações boleanas ou aritméticas ou avalia expressões regulares. +- `expr`: executa operações boleanas ou aritméticas ou avalia expressões regulares. -- `m4`: simples processador de macros. +- `m4`: simples processador de macros. -- `yes`: imprime uma string muitas vezes. +- `yes`: imprime uma string muitas vezes. -- `cal`: calendário legal. +- `cal`: calendário legal. - `env`: executa um comando (útil em scripts). -- `printenv`: imprime as variáveis de ambiente (útil em debug e scripts). +- `printenv`: imprime as variáveis de ambiente (útil em debug e scripts). - `look`: procura palavras inglesas (ou linhas em um arquivo) começando com uma string. @@ -328,69 +328,69 @@ Alguns exemplos de como reunir os comandos. - `column`: formata texto em colunas ou tabelas. -- `expand` e `unexpand`: converte entre tabs e espaços. +- `expand` e `unexpand`: converte entre tabs e espaços. -- `nl`: adiciona números as linhas. +- `nl`: adiciona números as linhas. -- `seq`: imprime números. +- `seq`: imprime números. -- `bc`: calculadora. +- `bc`: calculadora. -- `factor`: fatora inteiros. +- `factor`: fatora inteiros. -- `gpg`: criptografa e assina arquivos. +- `gpg`: criptografa e assina arquivos. -- `toe`: tabela de entradas dos tipos de terminais. +- `toe`: tabela de entradas dos tipos de terminais. -- `nc`: ferramenta de debug de rede e transferência de dados. +- `nc`: ferramenta de debug de rede e transferência de dados. - `socat`: socket relay e encaminhamento de portas tcp (similar ao `netcat`) -- `slurm`: visualização do tráfego da rede. +- `slurm`: visualização do tráfego da rede. - `dd`: move os dados entre arquivos ou dispositivos. -- `file`: identifica o tipo do arquivo. +- `file`: identifica o tipo do arquivo. -- `tree`: mostra os diretórios e subdiretórios como um árvore de dependências; como `ls` mas recursivo. +- `tree`: mostra os diretórios e subdiretórios como um árvore de dependências; como `ls` mas recursivo. -- `stat`: informações do arquivo. +- `stat`: informações do arquivo. -- `tac`: imprime arquivos na ordem reversa. +- `tac`: imprime arquivos na ordem reversa. - `shuf`: seleção random de linhas de um arquivo. -- `comm`: compara uma lista de arquivos ordenadas linha por linha. +- `comm`: compara uma lista de arquivos ordenadas linha por linha. -- `pv`: monitora o progresso dos dados através de um pipe. +- `pv`: monitora o progresso dos dados através de um pipe. - `hd` e `bvi`: dump ou edita arquivos binários. - `strings`: extrai texto de arquivos binários. -- `tr`: tradução e manipulação de caracteres. +- `tr`: tradução e manipulação de caracteres. - `iconv` ou `uconv`: conversor de codificações de texto. -- `split ` e `csplit`: divisão de arquivos. +- `split ` e `csplit`: divisão de arquivos. - `units`: conversor de unidades e cálculos; converte furlongs por quinzena para twips per blink (veja também `/usr/share/units/definitions.units`) - `7z`: Compressor de arquivos de alto desempenho. -- `ldd`: informações dinâmicas das bibliotecas. +- `ldd`: informações dinâmicas das bibliotecas. - `nm`: símbolos de arquivos objetos. - `ab`: benchmarking para web servers. -- `strace`: Debug para chamadas de sistema. +- `strace`: Debug para chamadas de sistema. - `mtr`: melhor traceroute para debugar a rede. - `cssh`: Visualização concorrente da shell. -- `rsync`: Sincroniza arquivos e pastas através do SSH. +- `rsync`: Sincroniza arquivos e pastas através do SSH. - `wireshark` e `tshark`: captura de pacotes e debug de rede. @@ -398,25 +398,25 @@ Alguns exemplos de como reunir os comandos. - `host` e `dig`: Consultas DNS. -- `lsof`: Arquivo de descritores dos processos e informações dos sockets. +- `lsof`: Arquivo de descritores dos processos e informações dos sockets. -- `dstat`: Estatísticas úteis do sistema. +- `dstat`: Estatísticas úteis do sistema. -- [`glances`](https://github.com/nicolargo/glances): Resumo de alto nível, de multi subsistemas. +- [`glances`](https://github.com/nicolargo/glances): Resumo de alto nível, de multi subsistemas. -- `iostat`: Estatísticas de uso do CPU e do disco. +- `iostat`: Estatísticas de uso do CPU e do disco. -- `htop`: Versão do top melhorada. +- `htop`: Versão do top melhorada. -- `last`: histórico de logins. +- `last`: histórico de logins. -- `w`: quem está logado. +- `w`: quem está logado. -- `id`: Informações sobre a identidade do user/group. +- `id`: Informações sobre a identidade do user/group. -- `sar`: histórico dos estados do sistema. +- `sar`: histórico dos estados do sistema. -- `iftop` ou `nethogs`: Utilização da rede por sockets ou processos. +- `iftop` ou `nethogs`: Utilização da rede por sockets ou processos. - `ss`: Estatísticas dos sockets. @@ -430,20 +430,20 @@ Alguns exemplos de como reunir os comandos. - `lshw` e `lspci`: informações do hardware, incluindo RAID, gráficos, etc. -- `fortune`, `ddate`, e `sl`: um, bem, isto depende de você considerar locomotivas a vapor e citações Zippy "úteis". +- `fortune`, `ddate`, e `sl`: um, bem, isto depende de você considerar locomotivas a vapor e citações Zippy "úteis". -## Mais conteúdo +## Mais conteúdo - [awesome-shell](https://github.com/alebcay/awesome-shell): Uma lista refinada de ferramentas da shell e outros recursos. -- [Strict mode](http://redsymbol.net/articles/unofficial-bash-strict-mode/) para escrever shell scripts melhores. +- [Strict mode](http://redsymbol.net/articles/unofficial-bash-strict-mode/) para escrever shell scripts melhores. -## Aviso +## Aviso Com a exceção de tarefas muito pequenas, código é normalmente escrito para que outros possam ler. Junto com o poder vem a responsabilidade. O fato de você *poder* fazer algo usando Bash não significa necessariamente que você deve! ;) -## Licença +## Licença -[![Creative Commons License](https://i.creativecommons.org/l/by-sa/4.0/88x31.png)](http://creativecommons.org/licenses/by-sa/4.0/) +[![Creative Commons License](https://i.creativecommons.org/l/by-sa/4.0/88x31.png)](http://creativecommons.org/licenses/by-sa/4.0/) Este trabalho está licenciado com uma [Creative Commons Attribution-ShareAlike 4.0 International License](http://creativecommons.org/licenses/by-sa/4.0/). diff --git a/README-zh.md b/README-zh.md index 41e4fb7..98b2930 100644 --- a/README-zh.md +++ b/README-zh.md @@ -1,4 +1,4 @@ -[ Languages: [English](README.md), [Español](README-es.md), [Português](README-pt.md), [中文](README-zh.md) ] +[ Languages: [English](README.md), [Español](README-es.md), [Português](README-pt.md), [中文](README-zh.md), [Русский](README-ru.md) ] # 命令行的艺术 diff --git a/README.md b/README.md index 13f8e6b..327bdf6 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -[ Languages: [English](README.md), [Español](README-es.md), [Português](README-pt.md), [中文](README-zh.md) ] +[ [English](README.md), [Español](README-es.md), [Português](README-pt.md), [中文](README-zh.md), [Русский](README-ru.md) ] @@ -36,7 +36,7 @@ Scope: - This guide is both for beginners and the experienced. The goals are *breadth* (everything important), *specificity* (give concrete examples of the most common case), and *brevity* (avoid things that aren't essential or digressions you can easily look up elsewhere). Every tip is essential in some situation or significantly saves time over alternatives. - This is written for Linux, with the exception of the "[MacOS only](#macos-only)" section. Many of the other items apply or can be installed on other Unices or MacOS (or even Cygwin). - The focus is on interactive Bash, though many tips apply to other shells and to general Bash scripting. -- It includes both "standard" Unix commands as well as ones that require special package installs -- so long as they are important enough to merit inclusion. +- It includes both "standard" Unix commands as well as ones that require special package installs -- so long as they are important enough to merit inclusion. Notes: @@ -471,6 +471,6 @@ With the exception of very small tasks, code is written so others can read it. W ## License -[![Creative Commons License](https://i.creativecommons.org/l/by-sa/4.0/88x31.png)](http://creativecommons.org/licenses/by-sa/4.0/) +[![Creative Commons License](https://i.creativecommons.org/l/by-sa/4.0/88x31.png)](http://creativecommons.org/licenses/by-sa/4.0/) This work is licensed under a [Creative Commons Attribution-ShareAlike 4.0 International License](http://creativecommons.org/licenses/by-sa/4.0/). From cafe2316a9d5aa9d59b0057e0426c50b32212dac Mon Sep 17 00:00:00 2001 From: Oleg Berman Date: Tue, 7 Jul 2015 00:24:18 -0400 Subject: [PATCH 10/12] fixed anchors in Russian version --- README-ru.md | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/README-ru.md b/README-ru.md index 9229936..5f0102c 100644 --- a/README-ru.md +++ b/README-ru.md @@ -1,19 +1,19 @@ -[ На других языках: [English](README.md), [Español](README-es.md), [Português](README-pt.md), [中文](README-zh.md) ] +[ На других языках: [English](README.md), [Español](README-es.md), [Português](README-pt.md), [中文](README-zh.md), [Русский](README-ru.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) -- [Описание](#meta) -- [Основы](#basics) -- [Ежедневное использование](#everyday-use) -- [Процессинг файлов и информации](#processing-files-and-data) -- [Системный дебаггинг](#system-debugging) -- [В одну строчку](#one-liners) -- [Сложно, но полезно](#obscure-but-useful) +- [Описание](#описание) +- [Основы](#основы) +- [Ежедневное использование](#ежедневное-использование) +- [Процессинг файлов и информации](#процессинг-файлов-и-информации) +- [Системный дебаггинг](#системный-дебаггинг) +- [В одну строчку](#В-одну-строчку) +- [Сложно, но полезно](#Сложно,-но-полезно) - [MacOS only](#macos-only) -- [Больше информации по теме](#more-resources) -- [Дисклеймер](#disclaimer) +- [Больше информации по теме](#больше-информации-по-теме) +- [Дисклеймер](#дисклеймер) ![curl -s 'https://raw.githubusercontent.com/jlevy/the-art-of-command-line/master/README.md' | egrep -o '`\w+`' | tr -d '`' | cowsay -W50](cowsay.png) From 96d7801be716491094e4b6df16149432a6f72390 Mon Sep 17 00:00:00 2001 From: Oleg Berman Date: Tue, 7 Jul 2015 00:26:44 -0400 Subject: [PATCH 11/12] anchor issue resolved --- README-ru.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/README-ru.md b/README-ru.md index 5f0102c..f7f3c8c 100644 --- a/README-ru.md +++ b/README-ru.md @@ -4,16 +4,16 @@ [![Вступайте в англоязычный чат проекта 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 only](#macos-only) -- [Больше информации по теме](#больше-информации-по-теме) -- [Дисклеймер](#дисклеймер) +- [MacOS only](#Macos-only) +- [Больше информации по теме](#Больше-информации-по-теме) +- [Дисклеймер](#Дисклеймер) ![curl -s 'https://raw.githubusercontent.com/jlevy/the-art-of-command-line/master/README.md' | egrep -o '`\w+`' | tr -d '`' | cowsay -W50](cowsay.png) From 4e66f9a313e7e43baddcccfddb5736d0d749713a Mon Sep 17 00:00:00 2001 From: Oleg Berman Date: Tue, 7 Jul 2015 00:29:08 -0400 Subject: [PATCH 12/12] last achor is fixed --- README-ru.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README-ru.md b/README-ru.md index f7f3c8c..ba32ef0 100644 --- a/README-ru.md +++ b/README-ru.md @@ -10,7 +10,7 @@ - [Процессинг файлов и информации](#Процессинг-файлов-и-информации) - [Системный дебаггинг](#Системный-дебаггинг) - [В одну строчку](#В-одну-строчку) -- [Сложно, но полезно](#Сложно,-но-полезно) +- [Сложно, но полезно](#Сложно-но-полезно) - [MacOS only](#Macos-only) - [Больше информации по теме](#Больше-информации-по-теме) - [Дисклеймер](#Дисклеймер)