commit
25eb72c265
|
@ -0,0 +1,525 @@
|
|||
[ Languages:
|
||||
[English](README.md), [Español](README-es.md), [Italiano](README-it.md), [日本語](README-ja.md), [한국어](README-ko.md), [Português](README-pt.md), [Русский](README-ru.md), [Slovenščina](README-sl.md), [Українська](README-uk.md), [中文](README-zh.md), [Czech](README-cs.md)
|
||||
]
|
||||
|
||||
|
||||
# Umění příkazové řádky
|
||||
|
||||
[](https://gitter.im/jlevy/the-art-of-command-line?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
|
||||
|
||||
- [Meta](#meta)
|
||||
- [Základy](#zaklady)
|
||||
- [Každodenní použití](#kazdodenni-pouziti)
|
||||
- [Zpracování souborů a dat](#zpracovani-souboru-a-dat)
|
||||
- [Ladění systému](#ladeni-systemu)
|
||||
- [Jednořádkové příkazy](#jednoradkove-prikazy)
|
||||
- [Neobvyklé ale užitečné](#neobvykle-ale-uzitecne)
|
||||
- [Pouze pro OS X](#pouze-pro-os-x)
|
||||
- [Další zdroje](#dalsi-zdroje)
|
||||
- [Zřeknutí se odpovědnosti](#zreknuti-se-odpovednosti)
|
||||
|
||||
|
||||

|
||||
|
||||
Plynulost práce na příkazové řádce je umění často opomíjené nebo považované za překonané, ale zlepšuje vaši flexibilitu a produktivitu jako inženýr jak očividně tak nenápadně. Toto je výběr poznámek a tipů pro použití příkazové řádky které shledáváme užitečnými při práci na Linuxu. Některé tipy jsou základní a některé jsou velmi specifické, komplikované či nejasné. Tato stránka není dlouhá, ale pokud dokážete použít a vybavit si všechny věci zde zmíněné, máte dostatečně rozsáhlé vědomosti.
|
||||
|
||||
Tato práce je výsledkem [mnoha autorů a překladatelů](AUTHORS.md).
|
||||
Mnoho se
|
||||
[původně](http://www.quora.com/What-are-some-lesser-known-but-useful-Unix-commands)
|
||||
[objevilo](http://www.quora.com/What-are-the-most-useful-Swiss-army-knife-one-liners-on-Unix)
|
||||
na webu [Quora](http://www.quora.com/What-are-some-time-saving-tips-that-every-Linux-user-should-know),
|
||||
ale s ohledem na zájem, který tam panoval, se zdálo vhodné použít GitHub, kde lidé více talentovaní než původní autor mohli okamžitě navrhovat zlepšení. Pokud najdete chybu či něco, co by mohlo být vylepšeno, prosím vytvořte issue nebo pull request! (Samozřejmě nejdříve zkontrolujte meta sekci a existující pull requesty a issues.)
|
||||
|
||||
|
||||
## Meta
|
||||
|
||||
Rozsah:
|
||||
|
||||
- Tento průvodce je pro začátečníky i pro pokročilé. Cílem je *široký záběr* (vše důležité), *specifičnost* (poskytnout konkrétní příklady nejčastějšího použití) a *stručnost* (vyhnout se věcem, které nejsou nezbytné nebo podobným tématům, které lze vyhledat jinde). Každý tip je v některých případech nenahraditelný nebo značně šetří čas oproti alternativám.
|
||||
- Tento dokument je napsán pro Linux s vyjímkou sekcí označených jako "[Pouze pro OS X](#os-x-only)". Mnoho ostatních položek lze použít nebo je lze nainstalovat na jiných Unixových systémech nebo MacOS (dokonce i na Cygwin).
|
||||
- Zaměření dokumentu je na inteaktivní Bash ačkoli mnoho tipů lze aplikovat na jiné shelly a obecné bashové scriptování.
|
||||
. Jsou zahrnuty jak "standardní" Unixové příkazy tak příkazy vyžadující instalaci extra balíčků -- pokud jsou dost důležité aby zasloužily zmínku.
|
||||
|
||||
Poznámky:
|
||||
|
||||
- Pro udržení délky textu na jednu stranu, obsah je implicitně obsažen v odkazech. Jste dostatečně inteligentní aby jste si vyhledali více detailů z jiných zdrojů jakmile znáte příkaz či myšlenku na Googlu. Použijte `apt-get`/`yum`/`dnf`/`pacman`/`pip`/`brew` podle distribuce k instalaci nových progamů.
|
||||
- Použijte [Explainshell](http://explainshell.com/) pro užitečné vysvětlení co příkazy, možnosti, roury a jiné dělají.
|
||||
|
||||
|
||||
## Zaklady
|
||||
|
||||
- Naučte se základy Bashe. Vlastně, napište `man bash` a alespoň si to proleťte; je to celkem jednoduché a ne tak dlouhé. Jiné shelly mohou být dobré, ale Bash je mocný a vždy dostupný (znalost *pouze* zsh, fish a jiných ačkoli lákavá na vlastním notebooku omezuje v mnoha situacích, jako například při použití existujících serverů).
|
||||
|
||||
- Poznejte alespoň jeden textový editor dobře. Nejlépe Vim (`vi`) jelikož opravdu nemá pro občasné úpravy v terminálu nemá konkurenci (ani pokud většinu času používáte Emacs, velké IDE nebo moderní okenní editor).
|
||||
|
||||
- Naučte se číst dokumentaci pomocí `man` (pro zvědavce, `man man` vypíše čísla sekcí, například 1 jsou "obvyklé" příkazy, 5 jsou soubory/konvence a 8 je administrace). Hledejte manuálové stránky pomocí `apropos`. Vězte, že některé příkazy nejsou spustitelné programy, ale funkce zabudované v Bashi a nápovědu k nim můžete zobrazit příkazem `help` a `help-d`.
|
||||
|
||||
- Naučte se přesměrování výstupu a vstupu pomocí `>` a `<` a roury pomocí `|`. Pamatujte, že `>` přepíše obsah výstupního souboru a `>>` přidá na jeho konec. Nezapomeňte na stdout (stndardní výstup) a stderr (standardní chybový výstup).
|
||||
|
||||
- Poznejte souborovou hromadnou expanzi za pomoci `*` (případně `?` a `[`...`]`) a úvozovkách a rozdílu mezi dvojitými uvozovkami `"` a jednoduchými `'`. (Více na expanzi proměných níže.)
|
||||
|
||||
- Seznamte se se správou činností v Bashi: `&`, **ctrl-z**, ctrl-c**, `jobs`, `fg`, `bg`, `kill`, atd.
|
||||
|
||||
- Seznamte se s `ssh` a základy bezheslové autentizace pomocí `ssh-agent`, `ssh-add`, atd.
|
||||
|
||||
- Základní správa souborů: `ls` a `ls -l` (zejména co který sloupec v `ls -l` znamená), `less`, `head`, `tail` a `tail -f` (nebo ještě lépe `less +F`), `ln` a `ln -s` (pochopte rozdíly a výhody pevného odkazu a symoblického odkazu), `chown`, `chmod`, `du` (pro krátký souhrn využití disku: `du -hs *`). Pro správu souborového systému, `df`, `mount`, `fdisk`, `mkfs`, `lsblk`. Pochopte co je inode (`ls -i` nebo `df -i`).
|
||||
|
||||
- základní správa síťí: `ip` nebo `ifconfig`, `dig`.
|
||||
|
||||
- Dobře se naučte regulárních výrazů a rozličné příznaky pro `grep`/`egrep`. Přepínače `-i`, `-o`, `-v`, `-A`, `-B` a `-C` je také vhodné znát.
|
||||
|
||||
- Naučte se používat `apt-get`, `yum`, `dnf` nebo `pacman` (podle vaší distribuce) k hledání a instalaci balíků. A ujistěte se, že máte `pip` k instalace Pythonových terminálových nástrojů (některé je nejjednodušší nainstalovat pomocí `pip`).
|
||||
|
||||
|
||||
## Kazdodenni pouziti
|
||||
|
||||
- V Bashi používejte **Tab** k dokončení argumentů nebo vylistování všech dostupných příkazů a **ctrl-r** k vyhledávání v historii příkazů (po stisknutí pište pro hledání a poté mačkejte opakovaně **ctrl-r** k procházení více shod, **Enter** k provedení nalezeného příkazu nebo šipku vpravo pro vložení výsledku hledání do terminálu a následnou editaci).
|
||||
|
||||
- V Bashi používejte **ctrl-w** pro smazní posledního slova a **ctrl-u** pro smazání všeho od současné pozice kurzoru až po začátek řádku. Používejte **alt-b** a **alt-f** k procházení řádku po slovech, **ctrl-a** pro skok na začátek řádku, **ctrl-e** pro skok kurzoru na konec řádku, **ctrl-k** pro smazání všeho od současné pozice až ke konci řádku, **ctrl-l** pro vyčištění obrazovky. Prohlédněte si `man readline` pro všechny defaultní klávesové zkratky v Bashi. Je jich hodně. Například **alt-.** projíždí předchozí argumenty a **alt-*** rozšíří řetězec.
|
||||
|
||||
- Pokud milujete klávesové zkratky ve stylu *vi*, použijte `set -o vi` (a `set -o emacs` pro návrat ke standardnímu rozložení).
|
||||
|
||||
- Pro úpravu dlouhých příkazů, po nastavení vašeho editoru (například `export EDITOR=vim`), **ctrl-x** **ctrl-e** v něm otevře stávající příkaz pro víceřádkovou úpravu. Nebo ve *vi* stylu, **escape-v**.
|
||||
|
||||
- Zobrazení nedávných příkazů se provádí pomocí `history`. Existuje spousta zkratek jako `!$` (poslední argument) a `!!` (poslední příkaz), ale tyto jsou jednoduše nahraditelné pomocí **ctrl-r** a **alt-.**.
|
||||
|
||||
- Pro přechod do předchozího pracovního adresáře: `cd -`.
|
||||
|
||||
- Pokud máte zpola napsaný příkaz, ale rozmyslíte si to, stiskněte **alt-#** pro přidání `#` na začátek řádku a vložte ho jako komentář (nebo použijte **ctrl-a**, **#**, **enter**). Takto se k němu můžete později vrátit v historii příkazů.
|
||||
|
||||
- Používejte `xargs` (nebo `parallel`). Jde o mocný příkaz. Nezapomeňte, že můžete ovládat kolik položek se má vykonat na řádku (`-L`) stejně jako paralelismus (`-P`). Pokud si nejste jisti zda to udělá co má, zkuste nejdříve `xargs echo`. Hodí se také `-I{}`.
|
||||
Příklady:
|
||||
```bash
|
||||
find . -name '*.py' | xargs grep nejaka_funkce
|
||||
cat hosts | xargs -I{} ssh root@{} hostname
|
||||
```
|
||||
|
||||
- `pstree -p` je užitečné zobrazení stromu procesů.
|
||||
|
||||
- Používejte `pgrep` a `pkill` k hledání nebo posílání signálů procesům podle jména. (`-f` je také užitečné).
|
||||
|
||||
- Pamatujte si rozličné signály, které lze posílat procesům. Například, k pozastavení procesu, použijte `kill -STOP [pid]`. Celý seznam signálů v `man 7 signal`.
|
||||
|
||||
- Používejte `nohup` nebo `disown` pokud chcete, aby proces na pozadí běžel navždy.
|
||||
|
||||
- Kontrolujte, které procesy naslouchají pomocí `netstat -lntp` nebo `ss -plat` (pro TCP; přidejte `-u` pro UDP).
|
||||
|
||||
- Podívejte se také na `lsof` pro otevřené sockety a soubory.
|
||||
|
||||
- Jak dlouho systém běží poznáte díky `uptime` nebo `w`.
|
||||
|
||||
- Pomocí `alias` si nastavte zkratky pro často používané příkazy. Například `alias ll='ls -latr'` vytvoří novou zkratku `ll`.
|
||||
|
||||
- V Bashových scriptech používejte `set -x` (nebo jeho variantu `set -v`, která zaznamenává nezpracovaný vstup včetně nečekaných proměnných a komentářů) pro ladící výstup. Používejte striktní módy pokud nemáte dobrý důvod proč to tak nedělat: Příkazem `set -e` nastavíte přerušení při chybě (nenulový návratový kód). Použijte `set -u` pro zjištění použití neinicializovaných proměnných. Zvažte také `set -o pipefail` pro chyby v rourách (přečtěte si na tohle téma více pokud tuto možnost využijete, jelikož jde o citlivé téma). Pro více zapojených scriptů použijte `trap` na EXIT nebo ERR. Dobrým zvykem bývá začínat scripty takto, což zachytí a ukončí běh na běžných chybách a vypíše zprávu:
|
||||
```bash
|
||||
set -euo pipefail
|
||||
trap "echo 'error: Script selhal: neuspesny prikaz vyse'" ERR
|
||||
```
|
||||
|
||||
- V Bash scriptech jsou subshelly (psané s kulatými závorkami) vhodným způsobem shlukování příkazů. Běžným příkladem budiž dočasný přesun do jiného pracovního adresáře, například:
|
||||
```bash
|
||||
# udelej neco v soucasnem pracovnim adresari
|
||||
(cd /nejaky/jiny/adresar && jiny-prikaz)
|
||||
# pokracuj v puvodnim adresari
|
||||
```
|
||||
|
||||
- Nezapomeňte, že v Bashi je mnoho druhů expanze proměnných. KOntrola, že proměnná existuje `${jmeno:?chybova hlaska}`. například, pokud script vyžaduje jediný argument, napište `vstupni_soubor=${1:?pouziti: $0 vstupni_soubor}`. Aritmetická expanze: `i=$(( (i + 1) % 5 ))`. Sekvence: `{1..10}`. Ořezání (trimming) řetězců: `${var%suffix}` a `${var#prefix}`. Pokud například `var=foo.pdf`, pak `echo ${var%.pdf}.txt` zobrazí `foo.txt`.
|
||||
|
||||
- Expanze složených závorek použitím `{`...`}` může snížit potřebu přepisovat podobné texty a zautomatizovat kombinaci položek. Toto může být užitečné například v `mv foo.{txt,pdf} nejaky-adresar` (což přesune oba soubory), `cp nejakysoubor{,.bak}` (což se rozšíří do `cp nejakysoubor nejakysoubor.bak`) nebo `mkdir -p test-{a,b,c}/subtest-{1,2,3}` (což se rozšíří do všech možných kombinací a vytvoří příslušný adresářový strom).
|
||||
|
||||
- S výstupem některých příkazů lze zacházet jako se souborem pomocí `<(nejaky prikaz)`. Například porovnání lokálního `/etc/hosts` se vzdáleným:
|
||||
```sh
|
||||
diff /etc/hosts <(ssh nejakyhost cat /etc/hosts)
|
||||
```
|
||||
|
||||
- Poznejte "zdejší dokumenty" v Bashi, míněno `cat <<EOF ...`.
|
||||
|
||||
- -Přesměrujte jak standardní výstup tak standardní chybový výstup v Bashi pomocí: `nejaky-prikaz > logsoubor 2>&1` nebo `nejaky-prikaz &>logsoubor`. Častokrát, k zajištění, že příkaz nezanechá otevřený souborový držák (handle), navázání ho na terminál ve kterém jste, je dobrá praktika také přidat `</dev/null`.
|
||||
|
||||
- Používejte `man ascii` pro dobrou ASCII tabulku se šestnáctkovými i dekadickými hodnotami. Pro obecné kódovací informace jsou užitečné `man unicode`, `man utf-8` a `man latin1`.
|
||||
|
||||
- Používejte `screen` nebo [`tmux`](https://tmux.github.io/) k rozšíření obrazovky, což je užitečné zejména na vzdálených ssh připojeních a k odpojení a znovu-připojení k sezení. `byobu` dokáže vylepšit obrazovku nebo tmux a poskytovat více informací a jednodušší správu. Více minimalistická varianta pouze pro přetrvání sezení je `dtach`.
|
||||
|
||||
- v ssh je důležité vědět, jak tunelovat porty s pomocí `-L` nebo `-D` (a příležitostně `-R`) například k přístupu na webovou stránku ze vzdáleného serveru.
|
||||
|
||||
- Může být užitečné udělat trochu optimalizačních úprav vašeho ssh připojení; například v `~/.ssh/config` je nastavení pro vyhýbání se odhozeným spojením v jistých sítích, používá kompresi (což je užitečné se scp přeš síť s malou šířkou pásma připojení) a multiplexové kanály ke stejnému serveru v lokálním souboru.
|
||||
```
|
||||
TCPKeepAlive=yes
|
||||
ServerAliveInterval=15
|
||||
ServerAliveCountMax=6
|
||||
Compression=yes
|
||||
ControlMaster auto
|
||||
ControlPath /tmp/%r@%h:%p
|
||||
ControlPersist yes
|
||||
```
|
||||
|
||||
- Některé další možnosti vstahující se k ssh jsou bezpečnostně citlivé a měli by být povoleny s opatrností, například pro jednotlivé podsítě nebo hosty v důvěryhodných sítích: `StrictHostKeyChecking=no`, `ForwardAgent=yes`
|
||||
|
||||
- Zvažte [`mosh`](https://mosh.mit.edu/) jako alternativu k ssh, která používá UDP, vyhýbá se padlým spojením a přidává pohodlí na cestách (vyžaduje nastavení na serveru).
|
||||
|
||||
- K získání oprávnění k souboru v osmičkové formě, což je užitečné pro systémovou konfiguraci, ale nedostupné v `ls` a lehko zpackatelné, použijte něco jako
|
||||
```sh
|
||||
stat -c '%A %a %n' /etc/timezone
|
||||
```
|
||||
|
||||
- Pro interaktivní výběr hodnot ze vstupu jiného příkazu použijte [`percol`](https://github.com/mooz/percol) nebo [`fzf`](https://github.com/junegunn/fzf).
|
||||
|
||||
- Pro interakci se soubory v závislosti na vstupu jiného příkazu (třeba `git`), použijte `fpp` ([PathPicker](https://github.com/facebook/PathPicker)).
|
||||
|
||||
- Po zpřístupnění jednoduchého webového serveru pro všechny soubory v současném adresáři (a podadresářích), přístupného každému na vaší síti použijte:
|
||||
`python -m SimpleHTTPServer 7777` (pro port 7777 a Python 2) a `python -m http.server 7777` (pro port 7777 a Python 3).
|
||||
|
||||
- Pro spuštění příkazu s právy použijte `sudo` (pro roota) nebo `sudo -u` (pro jiného uživatele). Používejte `su` nebo `sudo bash` pokud chcete aby shell běžel skutečně pod daným uživatelem. Použitím `su -` simulujte čerstvé přihlášení jako root nebo jiný uživatel.
|
||||
|
||||
|
||||
## Zpracovani souboru a dat
|
||||
|
||||
- K nalezení souboru podle jména v pracovním adresáři: `find . -iname '*something*'` (nebo podobně). K nalezení souboru podle jména kdekoliv na disku, použijte `locate jmeno` (pamatujte, že `updatedb` nemuselo nutně zaindexovat nedávno vytvořené soubory).
|
||||
|
||||
- Pro obecné prohledávání zdrojů nebo datových souborů (více sofistikované než `grep -r`), použijte [`ag`](https://github.com/ggreer/the_silver_searcher).
|
||||
|
||||
- Převeďte HTML na text pomocí `lynx -dump -stdin`.
|
||||
|
||||
- Vyzkoušejte [`pandoc`](http://pandoc.org/) pro Markdown, HTML a všechny druhy převodu dokumentů.
|
||||
|
||||
- Pokud musíte pracovat s XML `xmlstarlet` je starý, ale dobrý.
|
||||
|
||||
- Pro JSON použijte [`jq`](http://stedolan.github.io/jq/).
|
||||
|
||||
- Pro YAML, použijte [`shyaml`](https://github.com/0k/shyaml).
|
||||
|
||||
- Pro Excel nebo CSV suobory, [csvkit](https://github.com/onyxfish/csvkit) poskytuje `in2csv`, `csvcut`, `csvjoin`, `csvgrep`, atd.
|
||||
|
||||
- Pro Amazon S3, [`s3cmd`](https://github.com/s3tools/s3cmd) je pohodlnější a [`s4cmd`](https://github.com/bloomreach/s4cmd) je rychlejší. [`aws`](https://github.com/aws/aws-cli) od Amazonu a vylepšený [`saws`](https://github.com/donnemartin/saws) jsou nezbytné pro ostatní AWS úkoly.
|
||||
|
||||
- Mějte přehled o `sort` a `uniq`, včetně přepínače `-u` pro `uniq` a `-d` -- shlédněte jednořádkové příklady níže. A také `comm`.
|
||||
|
||||
- Mějte přehled také o `cut`, `paste` a `join` pro manipulaci s textovými soubory. Mnoho lidí používá `cut`, ale zapomínají na `join`.
|
||||
|
||||
- Udržujte přehled také o `wc` na počítání nových řádků (`-l`), znaků (`-m`), slov (`-w`) a bytů (`-c`).
|
||||
|
||||
- A přehled je dobré mít také o `tee` pro kopírování ze stdin do souboru a na stdout, podobně jako za použití `ls -la | tee soubor.txt`.
|
||||
|
||||
- Mějte na paměti, že nastavení lokalizace ovlivňuje mnoho příkazů v shellu mnoha způsoby včetně pořadí při třídění a výkonu. Většina Linuxových instalací nastaví `LANG` nebo jinou lokalizační proměnnou na lokální nastavení jako americká angličtina. Nezapomínejte však, že vaše třídění se změní změníte-li lokalizaci. A myslete na to, že i18n rutiny mohou způsobit, že třídění nebo jiné příkazy mohou běžet **mnohokrát** pomaleji. V některých situacích (při nastavování nebo testu unikátnost jako níže) lze bezpečně ignorovat pomalé i18n rutiny úplně a použít tradiční bytový pořádek pří třídění s `export LC_ALL=C`.
|
||||
|
||||
- Měli byste znát základní `awk` a `sed` pro jednoduché operace s daty. Například sčítání všech čísel ve třetím sloupci textového souboru: `awk '{ x += $3 } END { print x }'`. Tento příkaz je pravděpodobně 3x rychlejší a obsahuje 3x méně kódu než jeho ekvivalent v Pythonu.
|
||||
|
||||
- K nahrazení všech výskytů řetězce v jedno místě nebo ve více souborech:
|
||||
```sh
|
||||
perl -pi.bak -e 's/stary-retezec/novy-retezec/g' moje-soubory-*.txt
|
||||
```
|
||||
|
||||
- K přejmenování více souborů a/nebo vyhledávání a nahrazení uvnitř těchto souborů zkuste [`repren`](https://github.com/jlevy/repren). (V některých případech příkazech `rename` také dovoluje vícenásobné přejmenování, ale buďte opatrní neboť není stejný na všech Linuxových distribucích).
|
||||
```sh
|
||||
# Plne jméno souboru, adresaru a obsahu foo -> bar:
|
||||
repren --full --preserve-case --from foo --to bar .
|
||||
# Obnov zalozni soubory cokoliv.bak -> cokoli:
|
||||
repren --renames --from '(.*)\.bak' --to '\1' *.bak
|
||||
# Stejne jako vyse za pouziti jmena pokud mozne:
|
||||
rename 's/\.bak$//' *.bak
|
||||
```
|
||||
|
||||
- Jak říká manuálová stránka, `rsync` je skutečně rychlý a neobyčejně univerzální nástroj na kopírování souborů. Je znám pro synchronizaci mezi stroji, ale je stejně užitečný lokálně. Jde také o jednu z [nejrychlejších cest](https://web.archive.org/web/20130929001850/http://linuxnote.net/jianingy/en/linux/a-fast-way-to-remove-huge-number-of-files.html) k odstranění velkého množství souborů:
|
||||
```sh
|
||||
mkdir prazdny && rsync -r --delete prazdny/ nejaky-adr && rmdir nejaky-adr
|
||||
```
|
||||
|
||||
- Použijte `shuf` k zamíchání nebo vybrání náhodných řádek ze souboru.
|
||||
|
||||
- Mějte přehled v `sort` možnostech. Pro čísla, použijte `-n` nebo `-h` pro práci s lidsky čitelnými čísly (například z `du -h`). Pochopte jak fungují klíče (`-t` a `-k`). Zejména mějte na paměti, že musíte psát `-k,1` pro třídění za použití pouze prvního pole; `-k1` znamená třídění podle celého řádku. Stabilní třídění (`sort -s`) může být užitečné. Například k setřídění primárně podle druhého pole a sekundárně podle druhého pole můžete použít `sort -k1,1 | sort -s -k2,2`.
|
||||
|
||||
- Pokud někdy potřebujete zapsat znak tabulátor do příkazové řádky v Bashi (například pro -t argument pro třídění), stiskněte press **ctrl-v** **[Tab]** nebo napište $'\t'` (druhá možnost je lepší, protože výsledek můžete zkopírovat/vložit).
|
||||
|
||||
- Standardní nástroje pro porovnávání zdrojového kódu jsou `diff` a `patch`. Za zmínku stojí také `diffstat` zobrazující statistiky z diffu a `sdiff` pro rozdíly bok po boku. Nezapomeňte, že `diff -r` funguje pro celé adresáře. Použijte `diff -r strom1 strom2 | diffstat` pro shrnutí změn. A `vimdiff` pro porovnání a úpravu souborů.
|
||||
|
||||
- Pro binární soubory použijte `hd`, `hexdump` nebo `xxd` pro jednoduché hex dumpy a `bvi` nebo `biew` pro editaci binárek.
|
||||
|
||||
- Pro binární soubory můžete také použít `strings` (například spolu s `grep`, atd), což je nástroj pro hledání částí textu.
|
||||
|
||||
- Pro binární rozdíly (delta komprese) použijte `xdelta3`.
|
||||
|
||||
- Pro konverzi testových kódování zkuste `iconv`. Nebo `uconv` pro pokročilejší použití; podporuje některé pokročilé Unicode věci. Například tento příkaz mění text na malé znaky a odstraňuje akcenty (jejich rozvinutím a zahozením):
|
||||
```sh
|
||||
uconv -f utf-8 -t utf-8 -x '::Any-Lower; ::Any-NFD; [:Nonspacing Mark:] >; ::Any-NFC; ' < input.txt > output.txt
|
||||
```
|
||||
|
||||
- Na rozdělení souborů do částí zkuste `split` (na rozdělení podle velikosti) a `csplit` (na rozdělení podle řetězce).
|
||||
|
||||
- K manipulaci s datem a časem použijte `dateadd`, `datediff`, `strptime` atd. z [`dateutils`](http://www.fresse.org/dateutils/).
|
||||
|
||||
- Použijte `zless`, `zmore`, `zcat`, a `zgrep` k operacím s komprimovanými soubory.
|
||||
|
||||
|
||||
## Ladeni systemu
|
||||
|
||||
- Pro webové ladění jsou vhodn0 `curl` a `curl /I` nebo jejich `wget` ekvivalenty nebo více moderní [`httpie`](https://github.com/jkbrzt/httpie).
|
||||
|
||||
- Pro zjištění současného procesorového/diskového stavu, klasické nástroje jako `top` (nebo lépe `htop`). Použijte `iostat -mxz 15` pro základní CPU a detailní diskové stavy pro každý diskový oddíl a výkonostní statistiky.
|
||||
|
||||
- Pro detaily ohledně síťové konektivity použijte `netstat` a `ss`.
|
||||
|
||||
- Rychlý přehled co se děje v systému získáte pomocí užitečného `dstat`. Pro širší přehled s detaily použijte [`glances`](https://github.com/nicolargo/glances).
|
||||
|
||||
- Na zjištění stavu paměti spusťte `free` a `vmstat` a pokuste se porozumět jejich výstupům. Zejména dbejte na "cached" hodnotu což je paměť držená Linuxovým kernelem jako souborová cache, tudíž se počítá do "volné" paměťi.
|
||||
|
||||
- Ladění Javy je odlišný šálek čaje, ale jednoduchý trik na Javu od Oraclu a některé jiné JVM je, že stále můžete použít `kill -3 <pid>` a výpis zásobníku a haldy (včetně obecnějších detailů z **garbage collectoru**, které mohou být nesmírně informativní) bude zapsán do stderr/logs. Nástroje JDK jako `jps`, `jstat`, `jstack` a `jmap` jsou také užitečné, avšak [SJK tools](https://github.com/aragozin/jvm-tools) jsou více pokročilé.
|
||||
|
||||
- Použijte `mtr` jako lepší `traceroute` pro identifikování potíží se sítí.
|
||||
|
||||
- Při zjištování proč je disk plný, `ncdu` šetří čas oproti obvyklým příkazům jako `du /sh *`.
|
||||
|
||||
- Ke zjištění, který socket nebo proces zahlcuje pásmo, zkuste `iftop` nebo `nethogs`.
|
||||
|
||||
- Nástroj `ab` (přibalený k Apachi) je užitečný pro rychlé a hrubé zkontrolování výkonosti webového serveru. Komplexnější měření umožňuje `siege`.
|
||||
|
||||
- Pro důslednější síťové ladění, `wireshark`, `tshark` nebo `ngrep` jsou to pravé.
|
||||
|
||||
- Nezapomínejte na `strace` a `ltrace`. Mohou být nápomocné zejména pokud některý program selhává, zasekává se nebo padá a nevíte proč nebo pokud chcete mít obecnou představu o výkonu. Myslete na přepínač profilingu (`-c`) a schopnost připnout se k běžícímu procesu (`-p`).
|
||||
|
||||
- Dynamické knihovny vám umožní zkontrolovat `ldd`.
|
||||
|
||||
- Je důležité umět se připojit k běžícímu procesu za pomoci `gdb` a získat výpis jeho chodu.
|
||||
|
||||
- Používejte `/proc`. Je úžasně nápomocný v okamžicích, kdy ladíte živé problémy. Příklady: /proc/cpuinfo`, `/proc/meminfo`, `/proc/cmdline`, `/proc/xxx/cwd`, `/proc/xxx/exe`, `/proc/xxx/fd/`, `/proc/xxx/smaps` (kde `xxx` je id nebo pid procesu.).
|
||||
|
||||
- Když zjišťujete proč se něco v minulosti pokazilo, `sar` může být nedocenitelný. Ukazuje historické statistiky CPU, paměti, sítě, atd.
|
||||
|
||||
- Pro hlubší systémovou a výkonostní analýzu se podívejte na `stap`([SystemTap](https://sourceware.org/systemtap/wiki)), [`perf`](https://en.wikipedia.org/wiki/Perf_(Linux)), a [`sysdig`](https://github.com/draios/sysdig).
|
||||
|
||||
- Zkontrolujte na jakém jste OS za pomoci `uname` nebo `uname -a` (obecné Unix/kernel informace) nebo `lsb_release -a` (v Linuxových distribucích).
|
||||
|
||||
- Použijte `dmesg` kdykoli se něco chová neočekávaně (může jít o hardwarový nebo driverový problém).
|
||||
|
||||
|
||||
## Jednoradkove prikazy
|
||||
|
||||
Pár příkladů na spojování příkazů:
|
||||
|
||||
- Někdy je pozoruhodně užitečné dělat průnik, sjednocení a rozdíl textových souborů pomocí `sort`/`uniq`. Předpokládejte, že `a` a `b` jsou unikátní textové soubory. Toto je rychlé a funguje na souborech libovolné velikosti až do mnoha gigabytů. (Třídění pomocí `sort` není omezené pamětí, ale je možné, že budete muset použít `-T` přepínač, pokud se `/tmp` nachází na malém diskovém oddílu). Podívejte se také na poznámku o LC_ALL výše a přepínač `sortu` `-u` (vynechaný pro přehlednost).
|
||||
```sh
|
||||
cat a b | sort | uniq > c # c je sjednocení b
|
||||
cat a b | sort | uniq -d > c # c je průnik b
|
||||
cat a b b | sort | uniq -u > c # c je rozdíl a - b
|
||||
```
|
||||
|
||||
- Použijte `grep .*` pro rychlé prošetření obsahu všech souborů v adresáři (každý soubor je spojen s názvem souboru) nebo `head -100 *` (aby každý soubor měl záhlaví). Může být užitečné pro adresáře s konfiguračními soubory jako jsou například `/sys`, `/proc` a `/etc`.
|
||||
|
||||
- Součet všech čísel ve třetím sloupci textového souboru (pravděpodobně 3x rychlejší a 3x méně kódu než ekvivalentní funkce v Pythonu):
|
||||
```sh
|
||||
awk '{ x += $3 } END { print x }' mujsoubor
|
||||
```
|
||||
|
||||
- Pokud chcete zobrazit velikosti/datumy na souborovém stromu, následující příkaz je jako rekurzivní `ls -l`, ale jedodušší na čtení než `ls -lR`:
|
||||
```sh
|
||||
find . -type f -ls
|
||||
```
|
||||
|
||||
- Řekněme, že máte textový soubor, jako log webového serveru, a jisté hodnoty, které se objevují na některých řádcích, jako například `acct_id` parametr, který se vyskytuje v URL. Pokud chcete záznam kolik požadavků pro každý `acct_id`:
|
||||
```sh
|
||||
cat access.log | egrep -o 'acct_id=[0-9]+' | cut -d= -f2 | sort | uniq -c | sort -rn
|
||||
```
|
||||
|
||||
- K průběžnému monitorování změn použijte `watch`, například změn souborů v adresáři pomocí `watch -d -n 2 'ls -rth | tail'` nebo síťových nastavení při řešení potíží nastavení wifi: `watch -d -n 2 ifconfig`.
|
||||
|
||||
- Spusťte tuto funkci k získání náhodného tipu z tohoto dokumentu (parsuje Markdown a vyextrahuje jednu položku):
|
||||
```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
|
||||
}
|
||||
```
|
||||
|
||||
## Neobvykle ale uzitecne
|
||||
|
||||
- `expr`: provede aritmetické nebo logické operace nebo vyhodnotí regulární výrazy
|
||||
|
||||
- `m4`: jednoduchý procesor maker
|
||||
|
||||
- `yes`: tiskne řetězec vícekrát
|
||||
|
||||
- `cal`: hezký kalendář
|
||||
|
||||
- `env`: provede příkaz (užitečné ve scriptech)
|
||||
|
||||
- `printenv`: vypíše proměnné prostředí (užitečné při ladění a ve scriptech)
|
||||
|
||||
- `look`: najde anglická slova (nebo řádky v souboru) začínající řetězcem
|
||||
|
||||
- `cut`, `paste` a `join`: manipulace s daty
|
||||
|
||||
- `fmt`: formátuje text do odstavců
|
||||
|
||||
- `pr`: formátuje text do stránek/sloupců
|
||||
|
||||
- `fold`: zalamuje řádky textu
|
||||
|
||||
- `column`: formátuje textová pole do zarovnaných sloupců nebo tabulek s danou šířkou
|
||||
|
||||
- `expand` a `unexpand`: převádí tabulátory a mezery
|
||||
|
||||
- `nl`: přidá čísla řádků
|
||||
|
||||
- `seq`: tiskne čísla
|
||||
|
||||
- `bc`: kalkulačka
|
||||
|
||||
- `factor`: provádí faktorizaci celých čísel (15 = 5 a 3)
|
||||
|
||||
- [`gpg`](https://gnupg.org/): šifruje a podepisuje soubory
|
||||
|
||||
- `toe`: tabulka informací o dostupných terminálech
|
||||
|
||||
- `nc`: síťové ladění a přenos dat
|
||||
|
||||
- `socat`: socketové relé a tcp port přesměrování (podobné `netcat`)
|
||||
|
||||
- [`slurm`](https://github.com/mattthias/slurm): visualizace síťového provozu
|
||||
|
||||
- `dd`: přesun dat mezi soubory nebo zařízeními
|
||||
|
||||
- `file`: identifikuje typ souboru
|
||||
|
||||
- `tree`: zobrazí adresáře a podadresáře jako vnořený strom; podobně jako `ls` ale rekurzivně
|
||||
|
||||
- `stat`: informace o souboru
|
||||
|
||||
- `time`: provede a načasuje příkaz
|
||||
|
||||
- `timeout`: provádí příkaz po specifikovanou dobu a zastaví proces když daná doba uplyne
|
||||
|
||||
- `lockfile`: vytvoří semaforový soubor, který lze odstranit pouze pomocí `rm -f`
|
||||
|
||||
- `logrotate`: rotuje, komprimuje a posílá logy emailem
|
||||
|
||||
- `watch`: spouští opakovaně příkaz a zobrazuje výsledky a/nebo zvýrazňuje změny
|
||||
|
||||
- `tac`: tiskne soubory pozpátku (po řádcích)
|
||||
|
||||
- `shuf`: náhodně vybere řádky ze souboru
|
||||
|
||||
- `comm`: porovná seřazení soubory řádek po řádku
|
||||
|
||||
- `pv`: monitoruje postup dat skrz rouru
|
||||
|
||||
- `hd`, `hexdump`, `xxd`, `biew` a `bvi`: vypíše nebo edituje binární soubory
|
||||
|
||||
- `strings`: vypreparuje textové řetězce z binárních souborů
|
||||
|
||||
- `tr`: překládá znaky nebo s nimi manipuluje
|
||||
|
||||
- `iconv` nebo `uconv`: převod pro kódování textu
|
||||
|
||||
- `split` a `csplit`: dělí soubory
|
||||
|
||||
- `sponge`: čte všechen vstup před tím než ho zapíše, užitečné pro čtení a následný zápis do téhož souboru, např. `grep -v neco nejaky-soubor | sponge nejaky-soubor`
|
||||
|
||||
- `units`: převody jednotek a výpočty; převádí jednotky mezi sebou, (viz. `/usr/share/units/definitions.units`)
|
||||
|
||||
- `apg`: generuje náhodná hesla
|
||||
|
||||
- `7z`: vysoko-poměrová datová komprese
|
||||
|
||||
- `ldd`: informace o dynamických knihovnách
|
||||
|
||||
- `nm`: vypíše symboly z objektových souborů
|
||||
|
||||
- `ab`: zátěžové testy webserverů
|
||||
|
||||
- `strace`: ladění systému
|
||||
|
||||
- `mtr`: vylepšení traceroute pro síťové ladění
|
||||
|
||||
- `cssh`: vizuální souběžný shell
|
||||
|
||||
- `rsync`: synchronizuje soubory a adresáře přes SSH nebo v lokálním systému souborů
|
||||
|
||||
- `wireshark` a `tshark`: zachytávání packetů a síťové ladění
|
||||
|
||||
- `ngrep`: grep pro síťovou vrstvu
|
||||
|
||||
- `host` a `dig`: DNS vyhledávání
|
||||
|
||||
- `lsof`: zpracovává souborové popisovače (descriptory) a informace o socketech
|
||||
|
||||
- `dstat`: užitečné systémové informace
|
||||
|
||||
- [`glances`](https://github.com/nicolargo/glances): vysoko úrovňový, multi-systémový přehled
|
||||
|
||||
- `iostat`: statistiky využití disku
|
||||
|
||||
- `mpstat`: statistiky využití CPU
|
||||
|
||||
- `vmstat`: statistiky využití paměti
|
||||
|
||||
- `htop`: vylepšená verze top (správa procesů)
|
||||
|
||||
- `last`: historie přihlášení
|
||||
|
||||
- `w`: kdo je přihlášen
|
||||
|
||||
- `id`: informace o identitě uživatele/skupiny
|
||||
|
||||
- `sar`: historické systémové statistiky
|
||||
|
||||
- `iftop` nebo `nethogs`: využití sítě pro proces nebo socket
|
||||
|
||||
- `ss`: statistika socketů
|
||||
|
||||
- `dmesg`: bootovací a systémové chybové zprávy
|
||||
|
||||
- `sysctl`: zobrazení a konfigurace parametrů Linuxového kernelu za běhu
|
||||
|
||||
- `hdparm`: SATA/ATA disková manipulace/výkon
|
||||
|
||||
- `lsb_release`: informace o Linuxové distribuci
|
||||
|
||||
- `lsblk`: seznam blokových zařízení: stromové zobrazení disků a diskových oddílů
|
||||
|
||||
- `lshw`, `lscpu`, `lspci`, `lsusb`, `dmidecode`: informace o hardwaru zahrnující CPU, BIOS, RAID, grafiku, zařízení, atd.
|
||||
|
||||
- `lsmod` a `modinfo`: seznam a detaily kernelových modulů
|
||||
|
||||
- `fortune`, `ddate`, a `sl`: hm, no, záleží jestli považujete parní lokomotivy a Zippyho citáty za "užitečné"
|
||||
|
||||
|
||||
## Pouze pro OS X
|
||||
|
||||
Tyto věci jsou relevantní pouze pro MacOS.
|
||||
|
||||
- Balíčky spravované pomocí `brew` (Homebrew) a/nebo `port` (MacPorts). Mohou být použity k instalaci mnoha předešlých příkazů na MacOS.
|
||||
|
||||
- Kopírujte výstup jakéhokoli příkazu do desktopové aplikace pomocí `pbcopy` a vložte vstup z nějaké pomocí `pbpaste`.
|
||||
|
||||
- K povolení klávesy Option v Terminálu Mac OS jako klávesu Alt (pro použití v příkazech jako **alt-b**, **alt-f**, atd.), otevřete Předvolby -> Profily -> Klávesnice a zvolte "Použít Option jako Meta klávesu".
|
||||
|
||||
- K otevření souboru za pomoci desktopové aplikace použijte `open` nebo `open -a /Aplikace/Cokoli.app`.
|
||||
|
||||
- Spotlight: Prohledávejte soubory s `mdfind` a vypište metadata (například EXIF informace fotografie) pomocí `mdls`.
|
||||
|
||||
- Nezapomínejte, že MacOS je založen na BSD Unixu a mnoho příkazů (například `ps`, `ls`, `tail`, `awk`, `sed`) mají spoustu jemných odlišností od Linuxu, což je z velké části ovlivněno System V (System Five) stylem Unixu a GNU nástroji. Mnohokrát mmůžete rozdíl poznat podle manuálové stránky mající v nadpise "BSD General Commands Manual". V některých případech mohou být GNU verze instalovány také (třeba `gawk` a `gsed` pro GNU awk a sed). Pokud píšete multi-platformní Bashové scripty, vyhýbejte se takovým příkazům (například, zvažte Python či `perl`) nebo pečlivě testujte.
|
||||
|
||||
- K získání informací o verzi vydání MacOS použijte `sw_vers`.
|
||||
|
||||
|
||||
## Dalsi zdroje
|
||||
|
||||
- [awesome-shell](https://github.com/alebcay/awesome-shell): Organizovaný seznam shellových nástrojů a zdrojů.
|
||||
- [awesome-osx-command-line](https://github.com/herrbischoff/awesome-osx-command-line): Průvodce Mac OS příkazovou řádkou více do hloubky.
|
||||
- [Striktní mód](http://redsymbol.net/articles/unofficial-bash-strict-mode/) pro psaní lepších shellových scriptů.
|
||||
- [shellcheck](https://github.com/koalaman/shellcheck): Nástroj pro statickou analýzu shellových scriptů. V podstatě lint pro bash/sh/zsh.
|
||||
- [Souborové názvy a cesty v shellu](http://www.dwheeler.com/essays/filenames-in-shell.html): Bohužel velmi komplexní drobnosti o korektní práci se souborovými jmény v shellových scriptech.
|
||||
|
||||
|
||||
## Zřeknutí se odpovědnosti
|
||||
|
||||
S vyjímkou velmi malých úkolů je kód psán tak, aby ho ostatní mohli přečíst. S mocí přichází zodpovědnost. Skutečnost, že něco *můžete* v Bashi udělat nemusí nutně znamenat, že byste měli! ;)
|
||||
|
||||
|
||||
## License
|
||||
|
||||
[](http://creativecommons.org/licenses/by-sa/4.0/)
|
||||
|
||||
Tato práce je licencována pod [Creative Commons Attribution-ShareAlike 4.0 International License](http://creativecommons.org/licenses/by-sa/4.0/).
|
|
@ -1,5 +1,5 @@
|
|||
[ Languages:
|
||||
[English](README.md), [Español](README-es.md), [Italiano](README-it.md), [日本語](README-ja.md), [한국어](README-ko.md), [Português](README-pt.md), [Русский](README-ru.md), [Slovenščina](README-sl.md), [Українська](README-uk.md), [中文](README-zh.md)
|
||||
[English](README.md), [Español](README-es.md), [Italiano](README-it.md), [日本語](README-ja.md), [한국어](README-ko.md), [Português](README-pt.md), [Русский](README-ru.md), [Slovenščina](README-sl.md), [Українська](README-uk.md), [中文](README-zh.md), [Czech](README-cs.md)
|
||||
]
|
||||
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
[ Languages:
|
||||
[English](README.md), [Español](README-es.md), [Italiano](README-it.md), [日本語](README-ja.md), [한국어](README-ko.md), [Português](README-pt.md), [Русский](README-ru.md), [Slovenščina](README-sl.md), [Українська](README-uk.md), [中文](README-zh.md)
|
||||
[English](README.md), [Español](README-es.md), [Italiano](README-it.md), [日本語](README-ja.md), [한국어](README-ko.md), [Português](README-pt.md), [Русский](README-ru.md), [Slovenščina](README-sl.md), [Українська](README-uk.md), [中文](README-zh.md), [Czech](README-cs.md)
|
||||
]
|
||||
|
||||
|
||||
|
@ -206,7 +206,7 @@ Note:
|
|||
|
||||
- Ricorda che le impostazioni riguardo la localizzazione influiscono un sacco su alcuni tool da linea di comando, in molti modi. Ad esempio sugli ordinamenti (collation) e performance. Molte installazioni Linux impostano `LANG` ed altre variabili correlate automaticamente su US English (inglese americano). Se decidi di cambiare lingua, non è detto quindi che le cose rimangano così come sono. Alcuni comandi, addirittura, potrebbero diventare immediatamente molto più lenti.
|
||||
|
||||
- Impara le basi di `awk` e `sed` per manipolare dati. Ad esempio, per sommare tutti i numeri nella terza colonna di un file di testo, usa `awk '{ x += $3 } END { print x }'`. Probabilmente tre volte più veloce e tre volt epiù corto del suo equivalente in Python.
|
||||
- Impara le basi di `awk` e `sed` per manipolare dati. Ad esempio, per sommare tutti i numeri nella terza colonna di un file di testo, usa `awk '{ x += $3 } END { print x }'`. Probabilmente tre volte più veloce e tre volte più corto del suo equivalente in Python.
|
||||
|
||||
- Per rimpiazzare tutte le occorrenze di una stringa, in uno o più file:
|
||||
|
||||
|
|
164
README-ja.md
164
README-ja.md
|
@ -1,8 +1,8 @@
|
|||
[ Languages:
|
||||
[English](README.md), [Español](README-es.md), [Italiano](README-it.md), [日本語](README-ja.md), [한국어](README-ko.md), [Português](README-pt.md), [Русский](README-ru.md), [Slovenščina](README-sl.md), [Українська](README-uk.md), [中文](README-zh.md)
|
||||
[English](README.md), [Español](README-es.md), [Italiano](README-it.md), [日本語](README-ja.md), [한국어](README-ko.md), [Português](README-pt.md), [Русский](README-ru.md), [Slovenščina](README-sl.md), [Українська](README-uk.md), [中文](README-zh.md), [Czech](README-cs.md)
|
||||
]
|
||||
|
||||
原文のコミット [bb0c38c0899339e836c37eead4a9534b06c56662](https://github.com/jlevy/the-art-of-command-line/blob/bb0c38c0899339e836c37eead4a9534b06c56662/README.md)
|
||||
原文のコミット [ee4b00bc396087d27231f60512aeb77b19ce734e](https://github.com/jlevy/the-art-of-command-line/blob/ee4b00bc396087d27231f60512aeb77b19ce734e/README.md)
|
||||
|
||||
# The Art of Command Line
|
||||
|
||||
|
@ -15,6 +15,7 @@
|
|||
- [システムのデバッグ](#system-debugging)
|
||||
- [ワンライナー](#one-liners)
|
||||
- [目立たないが便利なもの](#obscure-but-useful)
|
||||
- [OS X用のもの](#os-x-only)
|
||||
- [さらなるリソース](#more-resources)
|
||||
- [免責事項](#disclaimer)
|
||||
|
||||
|
@ -22,14 +23,14 @@
|
|||
|
||||
コマンドラインで流れるように操作ができるということは、軽く見られたり他人から理解されないスキルだとみなされることもあるだろう。しかしそのスキルは、明らかにかすぐ分かるようかは問わず、エンジニアとしてのあなたの柔軟性や生産性を改善してくれるものだ。ここでは、Linuxでコマンドラインを使う上で便利だと思ったメモやTipsの数々を挙げてみる。あるものは基礎的だが、非常に詳しいもの、洗練されたもの、曖昧なものもある。このページはそんなに長いものではないが、ここに書いてあることの全てを使ったり思い出すことができれば、かなり詳しくなれるだろう。
|
||||
|
||||
ここに書いてあることの多くは、[元々](http://www.quora.com/What-are-some-lesser-known-but-useful-Unix-commands)[Quora](http://www.quora.com/What-are-some-time-saving-tips-that-every-Linux-user-should-know)に[書かれて](http://www.quora.com/What-are-the-most-useful-Swiss-army-knife-one-liners-on-Unix)いたものが多いが、私よりももっと優れた人たちがすぐに改善案を出すことができるGithubに置くのがよいのではと思った(訳注 : 原文はGithub上にある)。間違いやもっとこうした方がよいという点があれば、イシューを登録するかプルリクエストを送ってほしい!(もちろん、メタ情報の項や既存のプルリクエスト、イシューをまず確認しよう)
|
||||
このドキュメントは[多くの執筆者と翻訳者](AUTHORS.md)による成果である。ここに書いてあることの多くは、[元々](http://www.quora.com/What-are-some-lesser-known-but-useful-Unix-commands)[Quora](http://www.quora.com/What-are-some-time-saving-tips-that-every-Linux-user-should-know)に[書かれて](http://www.quora.com/What-are-the-most-useful-Swiss-army-knife-one-liners-on-Unix)いたものが多いが、より優れた人たちがすぐに改善案を出すことができるGitHubに置くのがよいのではと思った。間違いやもっとこうした方がよいという点があれば、issueを登録するかpull requestを送ってほしい!(もちろん、メタ情報の項や既存のpull requestsやissuesをまず確認しよう)
|
||||
|
||||
## メタ情報
|
||||
|
||||
対象 :
|
||||
|
||||
- このガイドは、初心者向けでも経験者向きでもある。幅広く(書いてあることは全て重要)、かつ明確で(多くのケースに対して具体的な例を付ける)、そして簡潔(他の場所で見つけられるような重要でないことや脱線したことは省く)であることをゴールにしている。各項目は、多くの場面において必須であるか、他の方法に比べて劇的に時間を節約してくれるだろう。
|
||||
- Linux向けに書いている。多くはMacOS(あるいはCygwin)でも使えるが、全部ではない。
|
||||
- [OS X用のもの](#os-x-only)を除き、Linux向けの内容となっており、その多くは各種LinuxおよびMacOS(あるいはCygwin)でも使えるだろう。
|
||||
- インタラクティブなBashを使うことを想定しているが、多くの項目は他のシェルやBashのスクリプトでも使えるだろう。
|
||||
|
||||
注意 :
|
||||
|
@ -45,30 +46,32 @@
|
|||
|
||||
- `man`でのドキュメントの読み方を知ろう(知りたがりのために書くと、`man man`でセクション番号が分かる。例えば1は「一般的な」コマンド、5はファイルやそのお作法、8は管理についてといった具合)。`apropos`でmanページを探そう。コマンドによっては実行可能ファイルではなくBashのビルトインコマンドであることを理解し、`help`や`help -d`でヘルプが見られることを知ろう。
|
||||
|
||||
- `>`や`<`、`|`を使ったパイプによる入出力のリダイレクションを学ぼう。stdout(標準出力)とstderr(標準エラー出力)を学ぼう。
|
||||
- `>`や`<`、`|`を使ったパイプによる入出力のリダイレクションを学ぼう。`>`は出力ファイルを上書き、`>>`は追記となる。stdout(標準出力)とstderr(標準エラー出力)を学ぼう。
|
||||
|
||||
- `*`(または`?`や`{`...`}`)を使ったファイルグロブ展開、クォーテーション、ダブルクォート`"`とシングルクォート`'`の違いを学ぼう(詳しくはこの後の変数展開の項を参照)。
|
||||
- `*`(または`?`や`[`...`]`)を使ったファイルグロブ展開、クォーテーション、ダブルクォート`"`とシングルクォート`'`の違いを学ぼう(詳しくはこの後の変数展開の項を参照)。
|
||||
|
||||
- `&`、**ctrl-z**、**ctrl-c**、`jobs`、`fg`、`bg`、`kill`など、Bashのジョブ管理について詳しくなろう。
|
||||
|
||||
- `ssh`について知るとともに、`ssh-agent`や`ssh-add`を使ったパスワードなしの認証の基本について理解しよう。
|
||||
|
||||
- ファイル管理について。`ls`や`ls -l`(特に、`ls -l`の各列が何を意味するか理解)、`less`、`head`、`tail`、`tail -f`(または`less +F`)、`ln`と`ln -s`(ハードリンクとソフトリンクの違いとそれぞれの利点の理解)、`chown`と`chmod`、`du`(ディスク使用量まとめを簡単に見るなら`du -sk *`)。ファイルシステム管理については、`df`、`mount`、`fdisk`、`mkfs`、`lsblk`。
|
||||
- ファイル管理について。`ls`や`ls -l`(特に、`ls -l`の各列が何を意味するか理解)、`less`、`head`、`tail`、`tail -f`(または`less +F`)、`ln`と`ln -s`(ハードリンクとソフトリンクの違いとそれぞれの利点の理解)、`chown`と`chmod`、`du`(ディスク使用量まとめを簡単に見るなら`du -hs *`)。ファイルシステム管理については、`df`、`mount`、`fdisk`、`mkfs`、`lsblk`。inodeについては、`ls -i`(または `df -i`)。
|
||||
|
||||
- 基本的なネットワーク管理について。`ip`あるいは`ifconfig`、`dig`。
|
||||
|
||||
- 正規表現について詳しく知ろう。`grep`や`egrep`の色々なフラグも合わせて。`-i`、`-o`、`-A`、`-B`といったオプションは知っておいて損はない。
|
||||
- 正規表現について詳しく知ろう。`grep`や`egrep`の色々なフラグも合わせて。`-i`、`-o`、`-v`、`-A`、`-B`、`-C`といったオプションは知っておいて損はない。
|
||||
|
||||
- `apt-get`、`yum`、`dnf`、`pacman`(ディストリビューションによって違う)といったコマンドでパッケージを探したりインストールする方法を学ぼう。Pythonベースのコマンドラインツールをインストールするのに、`pip`も必要だ(後に出てくるいくつかのコマンドは`pip`でインストールするのが一番簡単)。
|
||||
|
||||
|
||||
## 日常的に使うもの
|
||||
|
||||
- Bashでは、引数を補完するのに**タブ**を使い、コマンド履歴から検索するのに**ctrl-r**を使う。
|
||||
- Bashでは、引数を補完、または利用可能なコマンドを列挙するのに**タブ**を使い、コマンド履歴から検索するのに**ctrl-r**を使う。(検索キーを入力した後、**ctrl-r**を繰り返し入力することで次から次へと検索結果を送ることができる。**Enter**で見つかったコマンドの実行となり、**Enter**ではなく右カーソルキーを押した場合は見つかったコマンドが入力された状態になる。)
|
||||
|
||||
- Bashでは、最後の単語を削除するのには**ctrl-w**、行頭まで全て削除するには**ctrl-u**を使う。単語ごとに移動するには**alt-b**または**alt-f**、行末まで削除するには**ctrl-k**、画面のクリアは**ctrl-l**。Bashにおけるデフォルトのキー割り当てを全て見るには``man readline`を参照。たくさん出てくる。例えば、**alt-.**は前の引数を順番に表示し、**alt-***はグロブを展開する。
|
||||
- Bashでは、最後の単語を削除するのには**ctrl-w**、行頭まで全て削除するには**ctrl-u**を使う。単語ごとに移動するには**alt-b**または**alt-f**、行頭に移動するには**ctrl-a**、行末に移動するには**ctrl-e**、行末まで削除するには**ctrl-k**、画面のクリアは**ctrl-l**である。Bashにおけるデフォルトのキー割り当てを全て見るには`man readline`を参照。たくさん出てくる。例えば、**alt-.**は前の引数を順番に表示し、**alt-***はグロブを展開する。
|
||||
|
||||
- vi風のキー割り当てが好きなら、`set -o vi`を実行しよう。
|
||||
- vi風のキー割り当てが好きなら、`set -o vi`を実行しよう。(元に戻したいときは`set -o emacs`)
|
||||
|
||||
- 長いコマンドを編集するときに、エディタを設定した後で(例えば`export EDITOR=vim`)、**ctrl-x** **ctrl-e**によって編集中のコマンドが複数行の編集のために指定したエディタで開かれる。vi風の場合は、**escape-v**。
|
||||
|
||||
- 最近実行したコマンドを確認するなら`history`。**ctrl-r**や**alt-.**で用は足りるだろうが、`!$`(直前の引数)や`!!`(直前のコマンド)といった省略形もたくさんある。
|
||||
|
||||
|
@ -95,7 +98,16 @@
|
|||
|
||||
- 開かれているソケットやファイルを見るには`lsof`も参照。
|
||||
|
||||
- Bashスクリプトでは、`set -x`でデバッグ出力を出せる。可能なら厳格モードを使い、エラーが起きたら強制終了するよう`set -e`する。パイプのエラーも厳格に扱うために`set -o pipefail`も使おう(これはちょっと微妙かも)。より複雑なスクリプトなら、`trap`も使おう。
|
||||
- `uptime`や`w`によってシステムの稼働時間を調べられる。
|
||||
|
||||
- `alias`によってよく利用するコマンドのエイリアス(ショートカット)を作成できる。例えば、`alias ll='ls -latr'`では新しいエイリアスである`ll`が作成される.
|
||||
|
||||
- Bashスクリプトでは、`set -x`でデバッグ出力を出せる(`set -v`は、実行されるコマンドや変数名やコメントなどをそのまま出力する)。特別な理由がない限り厳格モード(strict mode)を使い、`set -e`でエラー時(0以外の終了コード時)に強制終了するように。`set -u`によって未定義の変数の利用を検知、パイプのエラーも厳格に扱うために`set -o pipefail`も使おう(これはちょっと微妙かも)。より複雑なスクリプトなら、EXITまたはERRシグナルに対して`trap`も使おう。使う場面としては以下の場合のようにエラーを検知してメッセージを出力するとき:
|
||||
|
||||
```bash
|
||||
set -euo pipefail
|
||||
trap "echo 'error: Script failed: see failed command above'" ERR
|
||||
```
|
||||
|
||||
- Bashスクリプトでは、コマンドのグループを作るのにサブシェル(丸括弧で囲まれた部分)が便利。一時的にワーキングディレクトリを移動するというよくある例。
|
||||
|
||||
|
@ -107,6 +119,8 @@
|
|||
|
||||
- Bashでは、たくさんの変数展開の種類があることを覚えておこう。変数が存在するかチェックするなら、`${name:?error message}`。例えば、Bashスクリプトが1つの引数を取る必要があるなら、`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
|
||||
|
@ -115,11 +129,11 @@
|
|||
|
||||
- `cat <<EOF ...`のような、Bashの「ヒアドキュメント」を理解しよう。
|
||||
|
||||
- Bashでは、`some-command >logfile 2>&1`で標準出力と標準エラー出力の両方をリダイレクトできる。コマンドが標準入力に対してファイルハンドルを開きっぱなしにせず、ログインしているターミナルにひもづけておくため、`</dev/null`するのもよい習慣。
|
||||
- Bashでは、`some-command >logfile 2>&1`または`some-command &>logfile`で標準出力と標準エラー出力の両方をリダイレクトできる。コマンドが標準入力に対してファイルハンドルを開きっぱなしにせず、ログインしているターミナルにひもづけておくため、`</dev/null`するのもよい習慣。
|
||||
|
||||
- 16進と10進のASCIIテーブルを見るのに`man ascii`を使おう。一般的なエンコードに関する情報は、`man unicode`や`man utf-8`、`man latin1`が便利。
|
||||
|
||||
- スクリーンの分割に`screen`や[`tmux`](https://tmux.github.io/)を使おう。特に、リモートのSSHセッションをデタッチしたりアタッチし直したりするのに有効。セッション永続化だけの簡単なものなら`dtach`。
|
||||
- スクリーンの分割に`screen`や[`tmux`](https://tmux.github.io/)を使おう。特に、リモートのSSHセッションをデタッチしたりアタッチし直したりするのに有効。`byobu`はscreenやtmuxの情報をより多く提供してくれ、管理が容易になる。セッション永続化だけの簡単なものなら`dtach`。
|
||||
|
||||
- SSHで`-L`あるいは`-D`(まれに`-R`)を使ったポートトンネルのやり方を覚えておくと便利。例えばリモートのサーバからウェブサイトにアクセスする時など。
|
||||
|
||||
|
@ -137,18 +151,22 @@
|
|||
|
||||
- これ以外のSSHオプションはセキュリティ上の問題がある可能性があるため、有効にするには、サブネットごとやホストごとに指定したり、信頼できるネットワーク内でのみ使用するなど注意が必要。`StrictHostKeyChecking=no`、`ForwardAgent=yes`など。
|
||||
|
||||
- [`mosh`](https://mosh.mit.edu/)はUDPを使ったsshの代替で、(サーバー側での設定は必要であるが) 断続的な接続時に便利。
|
||||
|
||||
- 8進数表現のファイルパーミッションは、システム設定の際に便利だが`ls`の結果にも出てこず、間違いやすい。以下のようにして取得できる。
|
||||
|
||||
```sh
|
||||
stat -c '%A %a %n' /etc/timezone
|
||||
```
|
||||
|
||||
- 何らかのコマンドの出力から、インタラクティブに値を選択したい場合は、 [`percol`](https://github.com/mooz/percol)を使おう。
|
||||
- 何らかのコマンドの出力から、インタラクティブに値を選択したい場合は、 [`percol`](https://github.com/mooz/percol) または [`fzf`](https://github.com/junegunn/fzf)を使おう。
|
||||
|
||||
- (gitを使うなど)何らかのコマンドの出力からファイルに関するやり取りをする場合は、`fpp` ([PathPicker](https://github.com/facebook/PathPicker))を使おう。
|
||||
|
||||
- カレントディレクトリ(とサブディレクトリ)全体を、ネットワーク内に公開されたWebサーバにするなら、`python -m SimpleHTTPServer 7777` (ポート7777で公開。Python 2の場合)あるいは`python -m http.server 7777` (Python 3の場合)。
|
||||
|
||||
- 特権レベルでコマンドを実行するとき、rootでの実行には`sudo`、他のユーザの場合は`sudo -u`を利用。`su` または `sudo bash`で、シェルがそのユーザで起動する。`su -`でrootまたは他のユーザで新たにログインした状態がシミュレートされる。
|
||||
|
||||
## ファイルとデータの処理
|
||||
|
||||
- カレントディレクトリ以下のファイルをファイル名で探したいなら、`find . -iname '*something*'`。場所を指定せずにファイル名で検索したいなら、`locate something`をつかおう(ただし`updatedb`は最近作られたファイルはインデックスしていないであろうことに注意)。
|
||||
|
@ -161,11 +179,13 @@
|
|||
|
||||
- XMLを扱わなくてはならないなら、`xmlstartlet`は古いがいいツールだ。
|
||||
|
||||
- JSONには`jq`を使おう。
|
||||
- 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関連の処理にはAmazon公式の[`aws`](https://github.com/aws/aws-cli)が欠かせない。
|
||||
- Amazon S3には、[`s3cmd`](https://github.com/s3tools/s3cmd)が便利で、[`s4cmd`](https://github.com/bloomreach/s4cmd)はさらに高速。AWS関連の処理にはAmazon公式の[`aws`](https://github.com/aws/aws-cli)と改善版の[`saws`](https://github.com/donnemartin/saws)が欠かせない。
|
||||
|
||||
- `sort`や`uniq`、さらにuniqの`-u`や`-d`オプションを知っておこう。後に出てくるワンライナーも参照。`comm`も確認しておこう。
|
||||
|
||||
|
@ -185,24 +205,32 @@
|
|||
perl -pi.bak -e 's/old-string/new-string/g' my-files-*.txt
|
||||
```
|
||||
|
||||
- パターンにしたがってたくさんのファイル名を書き換えるには`rename`を使おう。複雑なファイル名変更なら [`repren`](https://github.com/jlevy/repren)も便利だ。
|
||||
- 複数のファイル名の変更やファイル内の検索や置換には、[`repren`](https://github.com/jlevy/repren)を使ってみよう。(場合によっては`rename`コマンドでも複数のファイル名変更ができるが、すべてのLinuxディストリビューションで挙動が同じであるわけではないので注意が必要。)
|
||||
|
||||
```sh
|
||||
# バックアップファイルfoo.bakをfooに戻す
|
||||
rename 's/\.bak$//' *.bak
|
||||
# ファイル名、ディレクトリ名、ファイルの中身全てのfooをbarに置き換える
|
||||
# foo -> barへとファイル名、ディレクトリ名、ファイルの中身を変更する:
|
||||
repren --full --preserve-case --from foo --to bar .
|
||||
# バックアップファイルを元に戻す whatever.bak -> whatever:
|
||||
repren --renames --from '(.*)\.bak' --to '\1' *.bak
|
||||
# 上記と同じものをrenameを使って:
|
||||
rename 's/\.bak$//' *.bak
|
||||
```
|
||||
|
||||
- マニュアルページにあるように `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`のオプションを理解しよう。キーがどのように処理されるのか(`-t`や`-k`)を知ろう。特に、最初の列だけでソートするには`-k1,1`とかく必要があり、`-k1`だと全行を見てソートされるという点に注意。
|
||||
- `sort`のオプションを理解しよう。数値に対しては`-n`を使い、人間にとって読みやすい形式の数値の場合(例えば、`du -h`の出力)は`-h`を使おう。キーがどのように処理されるのか(`-t`や`-k`)を知ろう。特に、最初の列だけでソートするには`-k1,1`と書く必要があり、`-k1`だと全行を見てソートされるという点に注意。
|
||||
|
||||
- stableな(安定した)ソート(`sort -s`)は便利。例えば、始めに1列目でソートし、それから2列目でソートするなら、`sort -k1,1 | sort -s -k2,2`とすればよい。
|
||||
|
||||
- Bashのコマンドライン上でタブを表現する必要がある場合、**ctrl-v** **[Tab]**を入力するか`$'\t'` (コピペするなら後者の方がいいかも)。
|
||||
|
||||
- ソースコードにパッチを当てる基本のツールは`diff`と`patch`。diffの統計情報を見るなら`diffstat`も参照しよう。`diff -r`だと、ディレクトリ全体に対して実行される。変更点の概要を見るなら`diff -r tree1 tree2 | diffstat`。
|
||||
- ソースコードにパッチを当てる基本のツールは`diff`と`patch`。`diff`や横並びの`sdiff`の統計情報を見るなら`diffstat`も参照しよう。`diff -r`だと、ディレクトリ全体に対して実行される。変更点の概要を見るなら`diff -r tree1 tree2 | diffstat`。`vimdiff`ではファイルの比較と編集が可能。
|
||||
|
||||
- バイナリファイルなら、単純な16進ダンプを見るのに`hd`、バイナリエディタには`bvi`。
|
||||
|
||||
|
@ -218,19 +246,23 @@
|
|||
|
||||
- ファイルを分割するなら`split`(サイズで分割)と`csplit`(パターンで分割)。
|
||||
|
||||
- 日付や時間の表現を扱うには、[`dateutils`](http://www.fresse.org/dateutils/)にあるように、`dateadd`、 `datediff`、 `strptime` などを使いましょう。
|
||||
|
||||
- 圧縮ファイルの操作は`zless`、`zmore`、`zcat`、`zgrep`。
|
||||
|
||||
## システムのデバッグ
|
||||
|
||||
- Webのデバッグなら`curl`や`curl -l`が便利で、`wget`も同様、よりモダンなのは[`httpie`](https://github.com/jakubroztocil/httpie)。
|
||||
- Webのデバッグなら`curl`や`curl -l`が便利で、`wget`も同様、よりモダンなのは[`httpie`](https://github.com/jkbrzt/httpie)。
|
||||
|
||||
- ディスクやCPU、ネットワークのステータスを知るには`iostat`、`netstat`、`top`(あるいは`htop`の方がよい)、(一番は)`dstat`。システムで何が起きているのか素早く知るにはよい。
|
||||
- CPUやディスクのステータスを知るには、標準的なツールは`top` (または、より良い`htop`)、 `iostat`、 `iotop`。`iostat -mxz 15`を使って、基本的なCPUの情報やパーティッション単位でのディスクの詳細情報やパフォーマンスについて調べましょう。
|
||||
|
||||
- 更に詳しいシステムの全体像を見るには、[`glances`](https://github.com/nicolargo/glances)を使おう。ひとつのターミナル内で、いくつかのシステムレベルの統計情報を表示してくれる。複数のサブシステムを素早くチェックするのに非常に便利。
|
||||
- ネットワークの状態の監視には、`netstat`や`ss`。
|
||||
|
||||
- 手早くシステムで何が起きているのかを調べるには、`dstat`が便利。より詳しく見るには、[`glances`](https://github.com/nicolargo/glances)。
|
||||
|
||||
- メモリのステータスを知るには、`free`あるいは`vmstat`を実行し、その出力の意味を理解しよう。特に、"cached"の値はLinuxカーネルにファイルキャッシュとして保持されているメモリ量であり、"free"の値を見る際に考慮すべきであることに注意しよう。
|
||||
|
||||
- Javaのシステムのデバッグはまた違う困ったところがあるが、Oracleあるいは他のJVMにも共通しているシンプルなトリックは、`kill -3 <pid>`でフルスタックトレースとヒープの概要が標準出力あるいはログにダンプされる(世代別GCの詳細も参考程度だが含まれている)。
|
||||
- Javaのシステムのデバッグはまた違う困ったところがあるが、Oracleあるいは他のJVMにも共通しているシンプルなトリックは、`kill -3 <pid>`でフルスタックトレースとヒープの概要が標準出力あるいはログにダンプされる(世代別GCの詳細も参考程度だが含まれている)。JDKの `jps`、 `jstat`、 `jstack`、 `jmap` も便利で、[SJK tools](https://github.com/aragozin/jvm-tools)はより高度なツールである。
|
||||
|
||||
- 改良版tracerouteとして`mtr`を使ってネットワークの問題を調査しよう。
|
||||
|
||||
|
@ -248,14 +280,14 @@
|
|||
|
||||
- 起動中のプロセスに`gdb`で接続し、そのスタックトレースを取る方法を知ろう。
|
||||
|
||||
- `/proc`以下のファイルを使おう。今起こっている問題をデバッグするのには素晴らしく便利だ。例えば、`/proc/cpuinfo`、`/proc/xxx/cwd`、`/proc/xxx/ece`、`/proc/xxx/fd/`、`/proc/xxx/smaps`。
|
||||
- `/proc`以下のファイルを使おう。今起こっている問題をデバッグするのには素晴らしく便利だ。例えば、`/proc/cpuinfo`、`/proc/meminfo`、`/proc/cmdline`、`/proc/xxx/cwd`、`/proc/xxx/ece`、`/proc/xxx/fd/`、`/proc/xxx/smaps` (ここで、`xxx`はプロセスIDまたはPIDを意味する)。
|
||||
|
||||
- 過去に何か問題が起きたことの原因を探るなら、`sar`がとても便利。CPUやメモリ、ネットワークなどの過去の統計情報を見られる。
|
||||
|
||||
- さらに深いシステムとパフォーマンスの分析には、`stap` ([SystemTap](https://sourceware.org/systemtap/wiki))、[`perf`](http://en.wikipedia.org/wiki/Perf_(Linux))、
|
||||
- さらに深いシステムとパフォーマンスの分析には、`stap` ([SystemTap](https://sourceware.org/systemtap/wiki))、[`perf`](https://en.wikipedia.org/wiki/Perf_(Linux))、
|
||||
[`sysdig`](https://github.com/draios/sysdig)。
|
||||
|
||||
- どのディストリビューションを使っているか確認しよう。多くのディストリビューションでは`lsb_release -a`
|
||||
- どのOSを利用しているかを`uname`や`uname -a` (Unixカーネル情報)で確認しよう。どのディストリビューションを使っているかは`lsb_release -a` (ディストリビューション情報)。
|
||||
|
||||
- 何かいつもと違うおかしなこと(大抵ハードウェアかドライバ関連の問題だ)が起きていたら、`dmesg`を実行しよう。
|
||||
|
||||
|
@ -271,7 +303,7 @@
|
|||
cat a b b | sort | uniq -u > c # cはaとbの差異
|
||||
```
|
||||
|
||||
- コンフィグが含まれている`/sys`や`/proc`や`/etc/`のようなディレクトリ内の全てのファイルの中身全部を確認するには`grep . *`を使おう。
|
||||
- `grep . *`(各行にファイル名が付く)や、`head -100 *` (ファイル毎にヘッダーが付く)を使って手軽にディレクトリ内の全てのファイルの中身を確認できる。設定ファイルが含まれるような`/sys`や`/proc`や`/etc/`に対して非常に便利である。
|
||||
|
||||
- テキストファイルの3列目を全て足し合わせるには以下で(Pythonで同じことをやるに比べて3倍速く3分の1の長さで書ける)。
|
||||
|
||||
|
@ -285,19 +317,14 @@
|
|||
find . -type f -ls
|
||||
```
|
||||
|
||||
- 事情が許すなら`xargs`や`parallel`を使おう。行あたりいくつのアイテムを実行するか(`-L`)や並列度(`-P`)は制御できるのにも注意。正しく使えているか心配な時には、xargs echoをまずやってみよう。また、`-I{}`も便利だ。以下の例をみてみよう。
|
||||
|
||||
```sh
|
||||
find . -name '*.py' | xargs grep some_function
|
||||
cat hosts | xargs -I{} ssh root@{} hostname
|
||||
```
|
||||
|
||||
- Webサーバのログのようなテキストファイルがあり、各行には例えばURLの中に出てくる`acct_id`のような特定の値が現れるとしよう。`acct_id`が何回リクエストされているかを集計するには、
|
||||
|
||||
```sh
|
||||
cat access.log | egrep -o 'acct_id=[0-9]+' | cut -d= -f2 | sort | uniq -c | sort -rn
|
||||
```
|
||||
|
||||
- 継続的に変更を監視する場合 `watch`を使う。例えば、ディレクトリのファイルの変更を確認するには `watch -d -n 2 'ls -rtlh | tail'` となり、wifi設定などのネットワーク設定関係のトラブルシューティングでは `watch -d -n 2 ifconfig`。
|
||||
|
||||
- このドキュメントからランダムに項目を抜き出すには以下の関数を実行しよう(Markdownをパースし、アイテムを抽出する)。
|
||||
|
||||
```sh
|
||||
|
@ -326,7 +353,7 @@
|
|||
|
||||
- `look`: 文字列で始まる英単語(またはファイル内の行)を見つける
|
||||
|
||||
- `cut `、 `paste`、 `join`: データの操作
|
||||
- `cut `、 `paste`、`join`: データの操作
|
||||
|
||||
- `fmt`: テキストの段落をフォーマットする
|
||||
|
||||
|
@ -346,7 +373,7 @@
|
|||
|
||||
- `factor`: 整数を因数分解
|
||||
|
||||
- `gpg`: 暗号化とファイルのサイニング
|
||||
- [`gpg`](https://gnupg.org/): ファイルの暗号化と署名
|
||||
|
||||
- `toe`: terminfoのエントリのテーブルを表示
|
||||
|
||||
|
@ -354,7 +381,7 @@
|
|||
|
||||
- `socat`: ソケットリレーとTCPポートのフォワーダ(`netcat`と同等)
|
||||
|
||||
- `slurm`: ネットワークトラフィックの可視化
|
||||
- [`slurm`](https://github.com/mattthias/slurm): ネットワークトラフィックの可視化
|
||||
|
||||
- `dd`: データをファイルあるいはデバイス間で移動
|
||||
|
||||
|
@ -364,6 +391,16 @@
|
|||
|
||||
- `stat`: ファイルの情報
|
||||
|
||||
- `time`: コマンドを実行して処理時間を計測
|
||||
|
||||
- `timeout`: コマンドを実行し、指定時間経過後にプロセスを停止する
|
||||
|
||||
- `lockfile`: セマフォファイルを生成する。これは`rm -f`のみで削除可能。
|
||||
|
||||
- `logrotate`: ログをローテート、圧縮、メール送信
|
||||
|
||||
- `watch`: コマンドを繰り返し実行する。変更部分の強調表示もできる。
|
||||
|
||||
- `tac`: ファイルを逆から表示
|
||||
|
||||
- `shuf`: ファイルからランダムに選んだ行を表示
|
||||
|
@ -372,7 +409,9 @@
|
|||
|
||||
- `pv`: パイプ経由でデータの進行状況をモニタリング
|
||||
|
||||
- `hd` および `bvi`: バイナリファイルのダンプと編集
|
||||
- `sponge`: 書き込み前に全ての入力を読み込む。例えば、`grep -v something some-file | sponge some-file` のように、入力と同じファイルに書き込む際に便利。
|
||||
|
||||
- `hd`、`hexdump`、`xxd`、`biew`、`bvi`: バイナリファイルのダンプと編集
|
||||
|
||||
- `strings`: バイナリファイルからテキストを抽出
|
||||
|
||||
|
@ -380,10 +419,12 @@
|
|||
|
||||
- `iconv` あるいは `uconv`: 文字エンコーディングの変換
|
||||
|
||||
- `split ` と `csplit`: ファイルを分割
|
||||
- `split` と `csplit`: ファイルを分割
|
||||
|
||||
- `units`: 単位の変換と計算。2週間あたりのハロン(訳注 : 長さの単位)からまばたきごとのトゥウィップまで( `/usr/share/units/definitions.units`も参照のこと)
|
||||
|
||||
- `apg`: ランダムなパスワードを生成
|
||||
|
||||
- `7z`: 圧縮率の高いファイル圧縮
|
||||
|
||||
- `ldd`: 動的ライブラリの情報
|
||||
|
@ -398,7 +439,7 @@
|
|||
|
||||
- `cssh`: ビジュアルな並列シェル
|
||||
|
||||
- `rsync`: ファイルやフォルダをSSH経由で同期
|
||||
- `rsync`: ファイルやフォルダをSSH経由またはローカルファイルシステム内で同期
|
||||
|
||||
- `wireshark` と `tshark`: パケットキャプチャとネットワークデバッギング
|
||||
|
||||
|
@ -412,7 +453,11 @@
|
|||
|
||||
- [`glances`](https://github.com/nicolargo/glances): 高レベルに複数のサブシステムの概要を把握
|
||||
|
||||
- `iostat`: CPUとディスクの使用状況
|
||||
- `iostat`: ディスクの使用状況
|
||||
|
||||
- `mpstat`: CPUの使用状況
|
||||
|
||||
- `vmstat`: メモリの使用状況
|
||||
|
||||
- `htop`: topの改良版
|
||||
|
||||
|
@ -430,20 +475,45 @@
|
|||
|
||||
- `dmesg`: 起動時とシステムのエラーメッセージ
|
||||
|
||||
- `sysctl`: Linuxカーネルパラメータの確認および設定
|
||||
|
||||
- `hdparm`: SATA/ATAディスクの操作やパフォーマンス確認
|
||||
|
||||
- `lsb_release`: Linuxディストリビューション情報
|
||||
|
||||
- `lsblk`: ブロックデバイスの一覧。ディスクとディスクパーティションのツリービュー
|
||||
|
||||
- `lshw` と `lspci`: RAIDやグラフィックなどを含めたハードウェア情報
|
||||
- `lshw`、`lscpu`、`lspci`、`lsusb`、`dmidecode`: CPUやBIOS、RAID、グラフィック、その他デバイスなどのハードウェア情報
|
||||
|
||||
- `lsmod`、`modinfo`: カーネルのモジュールリストとモジュール情報
|
||||
|
||||
- `fortune`、 `ddate`、`sl`: んー、あー、これは蒸気機関車やZippyの引用句が「便利」だと思うかどうかによる
|
||||
|
||||
## OS X用のもの
|
||||
|
||||
これらは*MacOS用*の項目です。
|
||||
|
||||
- パッケージ管理は`brew` (Homebrew)や`port` (MacPorts)を使う。上記の多くのコマンドをMacOSにインストールできる。
|
||||
|
||||
- コマンドの出力をクリップボードにコピーする`pbcopy`とクリップボードから出力する`pbpaste`。
|
||||
|
||||
- OptionキーをaltキーとしてMac OSのターミナルで使う(上述の**alt-b**、**alt-f**などを使う場合)には、環境設定 -> 設定 -> キーボード で、"メタキーとしてoptionキーを使用"を選択。
|
||||
|
||||
- デスクトップアプリケーションでファイルを開くには、`open`、`open -a /Applications/Whatever.app`。
|
||||
|
||||
- Spotlight: `mdfind`でファイルを検索し、メタデータ(画像ファイルのEXIFの情報など)を`mdls`で表示。
|
||||
|
||||
- Mac OSはBSD Unixベースであるため、多くのコマンド(例えば、`ps`、`ls`、`tail`、`awk`、`sed`)では、Unix System VとGNUツールの違いに影響されて、Linuxのものと比べて微妙な違いが多く含まれている。違いがあるかについては、マニュアルページのタイトルに"BSD General Commands Manual"と書かれているかどうかで判断できる。場合によっては、GNUバージョンをインストール可能である(例えば、`gawk`や`gsed`で、GNUのawkとsedに対応)。クロスプラットフォームのbashスクリプトを書く場合には、そのようなコマンドは避ける(Pythonや`perl`の利用を検討)か十分なテストが必要である。
|
||||
|
||||
- Mac OSのリリース情報を取得するには、`sw_vers`。
|
||||
|
||||
## さらなるリソース
|
||||
|
||||
- [awesome-shell](https://github.com/alebcay/awesome-shell): シェルのツールやリソースのまとめ
|
||||
- よりよいシェルスクリプトを書くには[Strict mode](http://redsymbol.net/articles/unofficial-bash-strict-mode/)
|
||||
- [awesome-osx-command-line](https://github.com/herrbischoff/awesome-osx-command-line): より詳しいMac OSのコマンドラインガイド
|
||||
- [Strict mode](http://redsymbol.net/articles/unofficial-bash-strict-mode/): よりよいシェルスクリプトを書くために
|
||||
- [shellcheck](https://github.com/koalaman/shellcheck): シェルスクリプト(本来、bash/sh/zsh用)の静的解析ツール
|
||||
- [Filenames and Pathnames in Shell](http://www.dwheeler.com/essays/filenames-in-shell.html): シェルスクリプトでファイル名を正しく扱うために
|
||||
|
||||
## 免責事項
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
[ Languages:
|
||||
[English](README.md), [Español](README-es.md), [Italiano](README-it.md), [日本語](README-ja.md), [한국어](README-ko.md), [Português](README-pt.md), [Русский](README-ru.md), [Slovenščina](README-sl.md), [Українська](README-uk.md), [中文](README-zh.md)
|
||||
[English](README.md), [Español](README-es.md), [Italiano](README-it.md), [日本語](README-ja.md), [한국어](README-ko.md), [Português](README-pt.md), [Русский](README-ru.md), [Slovenščina](README-sl.md), [Українська](README-uk.md), [中文](README-zh.md), [Czech](README-cs.md)
|
||||
]
|
||||
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
[ Languages:
|
||||
[English](README.md), [Español](README-es.md), [Italiano](README-it.md), [日本語](README-ja.md), [한국어](README-ko.md), [Português](README-pt.md), [Русский](README-ru.md), [Slovenščina](README-sl.md), [Українська](README-uk.md), [中文](README-zh.md)
|
||||
[English](README.md), [Español](README-es.md), [Italiano](README-it.md), [日本語](README-ja.md), [한국어](README-ko.md), [Português](README-pt.md), [Русский](README-ru.md), [Slovenščina](README-sl.md), [Українська](README-uk.md), [中文](README-zh.md), [Czech](README-cs.md)
|
||||
]
|
||||
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
[ Languages:
|
||||
[English](README.md), [Español](README-es.md), [Italiano](README-it.md), [日本語](README-ja.md), [한국어](README-ko.md), [Português](README-pt.md), [Русский](README-ru.md), [Slovenščina](README-sl.md), [Українська](README-uk.md), [中文](README-zh.md)
|
||||
[English](README.md), [Español](README-es.md), [Italiano](README-it.md), [日本語](README-ja.md), [한국어](README-ko.md), [Português](README-pt.md), [Русский](README-ru.md), [Slovenščina](README-sl.md), [Українська](README-uk.md), [中文](README-zh.md), [Czech](README-cs.md)
|
||||
]
|
||||
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
[ Languages:
|
||||
[English](README.md), [Español](README-es.md), [Italiano](README-it.md), [日本語](README-ja.md), [한국어](README-ko.md), [Português](README-pt.md), [Русский](README-ru.md), [Slovenščina](README-sl.md), [Українська](README-uk.md), [中文](README-zh.md)
|
||||
[English](README.md), [Español](README-es.md), [Italiano](README-it.md), [日本語](README-ja.md), [한국어](README-ko.md), [Português](README-pt.md), [Русский](README-ru.md), [Slovenščina](README-sl.md), [Українська](README-uk.md), [中文](README-zh.md), [Czech](README-cs.md)
|
||||
]
|
||||
|
||||
|
||||
|
|
10
README-uk.md
10
README-uk.md
|
@ -1,5 +1,5 @@
|
|||
[ Languages:
|
||||
[English](README.md), [Español](README-es.md), [Italiano](README-it.md), [日本語](README-ja.md), [한국어](README-ko.md), [Português](README-pt.md), [Русский](README-ru.md), [Slovenščina](README-sl.md), [Українська](README-uk.md), [中文](README-zh.md)
|
||||
[English](README.md), [Español](README-es.md), [Italiano](README-it.md), [日本語](README-ja.md), [한국어](README-ko.md), [Português](README-pt.md), [Русский](README-ru.md), [Slovenščina](README-sl.md), [Українська](README-uk.md), [中文](README-zh.md), [Czech](README-cs.md)
|
||||
]
|
||||
# Мистецтво командного рядка
|
||||
|
||||
|
@ -13,7 +13,7 @@
|
|||
- [Дебаггінг](#Дебаггінг)
|
||||
- [Одним рядком](#Одним-рядком)
|
||||
- [Складно але корисно](#Складно-але-корисно)
|
||||
- [MacOS only](#macos-only)
|
||||
- [Тільки для OS X](#os-x-only)
|
||||
- [Інші джерела](#Інші-джерела)
|
||||
- [Декламація](#Декламація)
|
||||
|
||||
|
@ -31,7 +31,7 @@
|
|||
Основне:
|
||||
|
||||
- Дана публікація призначена як для недосвідчених, так і для досвідчених користувачів. Цілі: *об'ємість* (зібрати всі важливі аспекти використання командного рядка), *практичність* (надати конкретні приклади для найчастіших задач) та *стислість* (не варто вдаватись у неочевидні речі, про які можна прочитати в інших місцях).
|
||||
- Цей документ написаний для користувачів Linux, із єдиним винятком - розділ "[MacOS only](#macos-only)". Все інше підходить для всіх UNIX/MacOS систем (і навіть для Cygwin).
|
||||
- Цей документ написаний для користувачів Linux, із єдиним винятком - розділ "[Тільки для OS X](#os-x-only)". Все інше підходить для всіх UNIX/MacOS систем (і навіть для Cygwin).
|
||||
- Сфокусована на інтерактивному Bash, але багато речей також можуть бути використані в інших Шелах; і в застосовані до Bash-скриптів.
|
||||
- Ця інструкція включає в себе стандартні Unix команди і ті, для яких потрібно встановлювати сторонні пакети. Вони настільки корисні, що варті того, щоб їх встановили.
|
||||
|
||||
|
@ -208,7 +208,7 @@
|
|||
```sh
|
||||
awk '{ x += $3 } END { print x }' myfile
|
||||
```
|
||||
- Якщо вам потрібно подивитися розміри/дати файлів в дереві, це як рекурсивний `ls -l` але легше прочитати це `ls -lR`:
|
||||
- Щоб побачити розмір/дату файлів в дереві, це як рекурсивний `ls -l` але легше `ls -lR`:
|
||||
```sh
|
||||
find . -type f -ls
|
||||
```
|
||||
|
@ -312,7 +312,7 @@
|
|||
- `fortune`, `ddate`, and `sl`: um, well, it depends on whether you consider steam locomotives and Zippy quotations "useful"
|
||||
|
||||
|
||||
##Macos-only
|
||||
##os-x-only
|
||||
|
||||
Деякі речі, які підходять *тільки* для Мака.
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
[ Languages:
|
||||
[English](README.md), [Español](README-es.md), [Italiano](README-it.md), [日本語](README-ja.md), [한국어](README-ko.md), [Português](README-pt.md), [Русский](README-ru.md), [Slovenščina](README-sl.md), [Українська](README-uk.md), [中文](README-zh.md)
|
||||
[English](README.md), [Español](README-es.md), [Italiano](README-it.md), [日本語](README-ja.md), [한국어](README-ko.md), [Português](README-pt.md), [Русский](README-ru.md), [Slovenščina](README-sl.md), [Українська](README-uk.md), [中文](README-zh.md), [Czech](README-cs.md)
|
||||
]
|
||||
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
[ Languages:
|
||||
[English](README.md), [Español](README-es.md), [Italiano](README-it.md), [日本語](README-ja.md), [한국어](README-ko.md), [Português](README-pt.md), [Русский](README-ru.md), [Slovenščina](README-sl.md), [Українська](README-uk.md), [中文](README-zh.md)
|
||||
[English](README.md), [Español](README-es.md), [Italiano](README-it.md), [日本語](README-ja.md), [한국어](README-ko.md), [Português](README-pt.md), [Русский](README-ru.md), [Slovenščina](README-sl.md), [Українська](README-uk.md), [中文](README-zh.md), [Czech](README-cs.md)
|
||||
]
|
||||
|
||||
|
||||
|
@ -310,7 +310,7 @@ A few examples of piecing together commands:
|
|||
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`:
|
||||
- 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
|
||||
```
|
||||
|
|
Loading…
Reference in New Issue