1
0
mirror of https://github.com/jlevy/the-art-of-command-line.git synced 2025-02-07 13:31:38 +02:00

Merge remote-tracking branch 'jlevy/master'

This commit is contained in:
Chujie Zeng 2016-08-17 17:38:29 +08:00
commit efdb1843c2
11 changed files with 228 additions and 121 deletions

View File

@ -11,20 +11,22 @@ They have kindly agreed to review and help update future contributions for the t
* [Adrian Abreu Gonzalez (aabreuglez)](https://github.com/aabreuglez) — [6+](https://github.com/jlevy/the-art-of-command-line/commits?author=aabreuglez)/[1+](https://github.com/jlevy/the-art-of-command-line/issues?q=author%3Aaabreuglez)
* [Antonio Ossa (aaossa)](https://github.com/aaossa) — [5+](https://github.com/jlevy/the-art-of-command-line/commits?author=aaossa)/[1+](https://github.com/jlevy/the-art-of-command-line/issues?q=author%3Aaaossa) — _translator (es)_
* [Ahmet Alp Balkan (ahmetalpbalkan)](https://github.com/ahmetalpbalkan) — [1+](https://github.com/jlevy/the-art-of-command-line/commits?author=ahmetalpbalkan)/[1+](https://github.com/jlevy/the-art-of-command-line/issues?q=author%3Aahmetalpbalkan)
* [Semir Patel (analogue)](https://github.com/analogue) — [1+](https://github.com/jlevy/the-art-of-command-line/commits?author=analogue)/[1+](https://github.com/jlevy/the-art-of-command-line/issues?q=author%3Aanalogue)
* [Semir Patel (analogue)](https://github.com/analogue) — [0+](https://github.com/jlevy/the-art-of-command-line/commits?author=analogue)/[1+](https://github.com/jlevy/the-art-of-command-line/issues?q=author%3Aanalogue)
* [Desmond Stonie (aneasystone)](https://github.com/aneasystone) — [3+](https://github.com/jlevy/the-art-of-command-line/commits?author=aneasystone)/[8+](https://github.com/jlevy/the-art-of-command-line/issues?q=author%3Aaneasystone)
* [Haoxuan Li (angel1a)](https://github.com/angel1a) — [1+](https://github.com/jlevy/the-art-of-command-line/commits?author=angel1a)/[1+](https://github.com/jlevy/the-art-of-command-line/issues?q=author%3Aangel1a)
* [anna-d (anna-d)](https://github.com/anna-d) — [19+](https://github.com/jlevy/the-art-of-command-line/commits?author=anna-d)/[4+](https://github.com/jlevy/the-art-of-command-line/issues?q=author%3Aanna-d) — _translation maintainer (el)_
* [Chong Guo (Armour)](https://github.com/Armour) — [2+](https://github.com/jlevy/the-art-of-command-line/commits?author=Armour)/[0+](https://github.com/jlevy/the-art-of-command-line/issues?q=author%3AArmour) — _translator (zh)_
* [Brad Beyenhof (augmentedfourth)](https://github.com/augmentedfourth) — [1+](https://github.com/jlevy/the-art-of-command-line/commits?author=augmentedfourth)/[1+](https://github.com/jlevy/the-art-of-command-line/issues?q=author%3Aaugmentedfourth)
* [b-jazz (b-jazz)](https://github.com/b-jazz) — [1+](https://github.com/jlevy/the-art-of-command-line/commits?author=b-jazz)/[1+](https://github.com/jlevy/the-art-of-command-line/issues?q=author%3Ab-jazz)
* [bafoed](https://github.com/bafoed) — [0+](https://github.com/jlevy/the-art-of-command-line/commits?author=bafoed)/[1+](https://github.com/jlevy/the-art-of-command-line/issues?q=author%3Abafoed)
* [Alex Vergara Gil (BishopWolf)](https://github.com/BishopWolf) — [4+](https://github.com/jlevy/the-art-of-command-line/commits?author=BishopWolf)/[3+](https://github.com/jlevy/the-art-of-command-line/issues?q=author%3ABishopWolf) — _translator (es)_
* [Arturo Fernandez (bsnux)](https://github.com/bsnux) — [1+](https://github.com/jlevy/the-art-of-command-line/commits?author=bsnux)/[1+](https://github.com/jlevy/the-art-of-command-line/issues?q=author%3Absnux)
* [Alex Cabrera (cabreraalex)](https://github.com/cabreraalex) — [0+](https://github.com/jlevy/the-art-of-command-line/commits?author=cabreraalex)/[1+](https://github.com/jlevy/the-art-of-command-line/issues?q=author%3Acabreraalex)
* [Carlos Mantilla (ceoaliongroo)](https://github.com/ceoaliongroo) — [28+](https://github.com/jlevy/the-art-of-command-line/commits?author=ceoaliongroo)/[15+](https://github.com/jlevy/the-art-of-command-line/issues?q=author%3Aceoaliongroo) — _translation maintainer (es)_
* [Carlos Mantilla (ceoaliongroo)](https://github.com/ceoaliongroo) — [29+](https://github.com/jlevy/the-art-of-command-line/commits?author=ceoaliongroo)/[16+](https://github.com/jlevy/the-art-of-command-line/issues?q=author%3Aceoaliongroo) — _translation maintainer (es)_
* [Chris Kuehl (chriskuehl)](https://github.com/chriskuehl) — [1+](https://github.com/jlevy/the-art-of-command-line/commits?author=chriskuehl)/[1+](https://github.com/jlevy/the-art-of-command-line/issues?q=author%3Achriskuehl)
* [Corey "See More" Richardson (cmr)](https://github.com/cmr) — [0+](https://github.com/jlevy/the-art-of-command-line/commits?author=cmr)/[3+](https://github.com/jlevy/the-art-of-command-line/issues?q=author%3Acmr)
* [Corey "See More" Richardson (cmr)](https://github.com/cmr) — [1+](https://github.com/jlevy/the-art-of-command-line/commits?author=cmr)/[3+](https://github.com/jlevy/the-art-of-command-line/issues?q=author%3Acmr)
* [Colas BROUX (ColasBroux)](https://github.com/ColasBroux) — [0+](https://github.com/jlevy/the-art-of-command-line/commits?author=ColasBroux)/[2+](https://github.com/jlevy/the-art-of-command-line/issues?q=author%3AColasBroux)
* [Colin Wang (colinwjd)](https://github.com/colinwjd) — [0+](https://github.com/jlevy/the-art-of-command-line/commits?author=colinwjd)/[2+](https://github.com/jlevy/the-art-of-command-line/issues?q=author%3Acolinwjd)
* [Chris Rhodes (crr0004)](https://github.com/crr0004) — [1+](https://github.com/jlevy/the-art-of-command-line/commits?author=crr0004)/[4+](https://github.com/jlevy/the-art-of-command-line/issues?q=author%3Acrr0004)
* [Chelsea Voss (csvoss)](https://github.com/csvoss) — [1+](https://github.com/jlevy/the-art-of-command-line/commits?author=csvoss)/[1+](https://github.com/jlevy/the-art-of-command-line/issues?q=author%3Acsvoss)
* [Daniel t. (danasmera)](https://github.com/danasmera) — [1+](https://github.com/jlevy/the-art-of-command-line/commits?author=danasmera)/[3+](https://github.com/jlevy/the-art-of-command-line/issues?q=author%3Adanasmera)
@ -34,11 +36,11 @@ They have kindly agreed to review and help update future contributions for the t
* [Jamie Luck (delucks)](https://github.com/delucks) — [2+](https://github.com/jlevy/the-art-of-command-line/commits?author=delucks)/[1+](https://github.com/jlevy/the-art-of-command-line/issues?q=author%3Adelucks)
* [Dima Paloskin (dimapaloskin)](https://github.com/dimapaloskin) — [1+](https://github.com/jlevy/the-art-of-command-line/commits?author=dimapaloskin)/[0+](https://github.com/jlevy/the-art-of-command-line/issues?q=author%3Adimapaloskin)
* [Michael Diamond (dimo414)](https://github.com/dimo414) — [1+](https://github.com/jlevy/the-art-of-command-line/commits?author=dimo414)/[4+](https://github.com/jlevy/the-art-of-command-line/issues?q=author%3Adimo414)
* [Dmytro Kovalov (uk: Дмитро Ковальов) (dmytro)](https://github.com/dmytro) — [5+](https://github.com/jlevy/the-art-of-command-line/commits?author=dmytro)/[3+](https://github.com/jlevy/the-art-of-command-line/issues?q=author%3Admytro) — _translation maintainer (uk)_
* [Hayato Matsuura (doublemarket)](https://github.com/doublemarket) — [2+](https://github.com/jlevy/the-art-of-command-line/commits?author=doublemarket)/[1+](https://github.com/jlevy/the-art-of-command-line/issues?q=author%3Adoublemarket) — _translation maintainer (ja)_
* [Diomidis Spinellis (dspinellis)](https://github.com/dspinellis) — [12+](https://github.com/jlevy/the-art-of-command-line/commits?author=dspinellis)/[5+](https://github.com/jlevy/the-art-of-command-line/issues?q=author%3Adspinellis) — _section maintainer (Windows)_
* [Vincent Wong (EaterOA)](https://github.com/EaterOA) — [1+](https://github.com/jlevy/the-art-of-command-line/commits?author=EaterOA)/[1+](https://github.com/jlevy/the-art-of-command-line/issues?q=author%3AEaterOA)
* [Éric Guirbal (ericguirbal)](https://github.com/ericguirbal) — [21+](https://github.com/jlevy/the-art-of-command-line/commits?author=ericguirbal)/[5+](https://github.com/jlevy/the-art-of-command-line/issues?q=author%3Aericguirbal) — _translation maintainer (fr)_
* [Fazle Arefin (fazlearefin)](https://github.com/fazlearefin) — [1+](https://github.com/jlevy/the-art-of-command-line/commits?author=fazlearefin)/[2+](https://github.com/jlevy/the-art-of-command-line/issues?q=author%3Afazlearefin)
* [Éric Guirbal (ericguirbal)](https://github.com/ericguirbal) — [22+](https://github.com/jlevy/the-art-of-command-line/commits?author=ericguirbal)/[6+](https://github.com/jlevy/the-art-of-command-line/issues?q=author%3Aericguirbal) — _translation maintainer (fr)_
* [Yessou Sami (fnzv)](https://github.com/fnzv) — [1+](https://github.com/jlevy/the-art-of-command-line/commits?author=fnzv)/[1+](https://github.com/jlevy/the-art-of-command-line/issues?q=author%3Afnzv)
* [Francesco Malatesta (francescomalatesta)](https://github.com/francescomalatesta) — [0+](https://github.com/jlevy/the-art-of-command-line/commits?author=francescomalatesta)/[3+](https://github.com/jlevy/the-art-of-command-line/issues?q=author%3Afrancescomalatesta) — _translation maintainer (it)_
* [githubashto](https://github.com/githubashto) — [1+](https://github.com/jlevy/the-art-of-command-line/commits?author=githubashto)/[0+](https://github.com/jlevy/the-art-of-command-line/issues?q=author%3Agithubashto) — _translator (ru)_
@ -46,17 +48,19 @@ They have kindly agreed to review and help update future contributions for the t
* [Konstantin Gribov (grossws)](https://github.com/grossws) — [3+](https://github.com/jlevy/the-art-of-command-line/commits?author=grossws)/[6+](https://github.com/jlevy/the-art-of-command-line/issues?q=author%3Agrossws)
* [Beau Hastings (hastinbe)](https://github.com/hastinbe) — [0+](https://github.com/jlevy/the-art-of-command-line/commits?author=hastinbe)/[4+](https://github.com/jlevy/the-art-of-command-line/issues?q=author%3Ahastinbe)
* [Sung Kim (hunkim)](https://github.com/hunkim) — [1+](https://github.com/jlevy/the-art-of-command-line/commits?author=hunkim)/[1+](https://github.com/jlevy/the-art-of-command-line/issues?q=author%3Ahunkim) — _translator (ko)_
* [Hunter-Github](https://github.com/Hunter-Github) — [1+](https://github.com/jlevy/the-art-of-command-line/commits?author=Hunter-Github)/[4+](https://github.com/jlevy/the-art-of-command-line/issues?q=author%3AHunter-Github)
* [Hunter-Github](https://github.com/Hunter-Github) — [1+](https://github.com/jlevy/the-art-of-command-line/commits?author=Hunter-Github)/[5+](https://github.com/jlevy/the-art-of-command-line/issues?q=author%3AHunter-Github)
* [Hyojin Kwak (hyojin)](https://github.com/hyojin) — [1+](https://github.com/jlevy/the-art-of-command-line/commits?author=hyojin)/[1+](https://github.com/jlevy/the-art-of-command-line/issues?q=author%3Ahyojin)
* [Ihor Dvoretskyi (idvoretskyi)](https://github.com/idvoretskyi) — [2+](https://github.com/jlevy/the-art-of-command-line/commits?author=idvoretskyi)/[1+](https://github.com/jlevy/the-art-of-command-line/issues?q=author%3Aidvoretskyi)
* [Ivgeni "Iv" Segal (isegal)](https://github.com/isegal) — [1+](https://github.com/jlevy/the-art-of-command-line/commits?author=isegal)/[1+](https://github.com/jlevy/the-art-of-command-line/issues?q=author%3Aisegal)
* [Igor Veksler (iveksl2)](https://github.com/iveksl2) — [0+](https://github.com/jlevy/the-art-of-command-line/commits?author=iveksl2)/[1+](https://github.com/jlevy/the-art-of-command-line/issues?q=author%3Aiveksl2)
* [J Alan Brogan (jalanb)](https://github.com/jalanb) — [2+](https://github.com/jlevy/the-art-of-command-line/commits?author=jalanb)/[3+](https://github.com/jlevy/the-art-of-command-line/issues?q=author%3Ajalanb)
* [James Kolce (jameskolce)](https://github.com/jameskolce) — [1+](https://github.com/jlevy/the-art-of-command-line/commits?author=jameskolce)/[1+](https://github.com/jlevy/the-art-of-command-line/issues?q=author%3Ajameskolce)
* [Joshua Levy (jlevy)](https://github.com/jlevy) — [133+](https://github.com/jlevy/the-art-of-command-line/commits?author=jlevy)/[25+](https://github.com/jlevy/the-art-of-command-line/issues?q=author%3Ajlevy) — _orignal author and project maintainer_
* [Jesse Sightler (jsight)](https://github.com/jsight) — [1+](https://github.com/jlevy/the-art-of-command-line/commits?author=jsight)/[1+](https://github.com/jlevy/the-art-of-command-line/issues?q=author%3Ajsight)
* [Konstantin Mikhaylov (jtraub)](https://github.com/jtraub) — [0+](https://github.com/jlevy/the-art-of-command-line/commits?author=jtraub)/[1+](https://github.com/jlevy/the-art-of-command-line/issues?q=author%3Ajtraub)
* [Jᴀᴍᴇs Kᴏʟᴄᴇ (jameskolce)](https://github.com/jameskolce) — [1+](https://github.com/jlevy/the-art-of-command-line/commits?author=jameskolce)/[1+](https://github.com/jlevy/the-art-of-command-line/issues?q=author%3Ajameskolce)
* [Joshua Levy (jlevy)](https://github.com/jlevy) — [137+](https://github.com/jlevy/the-art-of-command-line/commits?author=jlevy)/[26+](https://github.com/jlevy/the-art-of-command-line/issues?q=author%3Ajlevy) — _orignal author and project maintainer_
* [Jesse Sightler (jsight)](https://github.com/jsight) — [0+](https://github.com/jlevy/the-art-of-command-line/commits?author=jsight)/[1+](https://github.com/jlevy/the-art-of-command-line/issues?q=author%3Ajsight)
* [Konstantin Mikhaylov (jtraub)](https://github.com/jtraub) — [1+](https://github.com/jlevy/the-art-of-command-line/commits?author=jtraub)/[1+](https://github.com/jlevy/the-art-of-command-line/issues?q=author%3Ajtraub)
* [Wael M. Nasreddine (kalbasit)](https://github.com/kalbasit) — [1+](https://github.com/jlevy/the-art-of-command-line/commits?author=kalbasit)/[1+](https://github.com/jlevy/the-art-of-command-line/issues?q=author%3Akalbasit)
* [Colin Chan (kalgynirae)](https://github.com/kalgynirae) — [1+](https://github.com/jlevy/the-art-of-command-line/commits?author=kalgynirae)/[1+](https://github.com/jlevy/the-art-of-command-line/issues?q=author%3Akalgynirae)
* [Michail Kargakis (kargakis)](https://github.com/kargakis) — [1+](https://github.com/jlevy/the-art-of-command-line/commits?author=kargakis)/[1+](https://github.com/jlevy/the-art-of-command-line/issues?q=author%3Akargakis)
* [Michail Kargakis (kargakis)](https://github.com/kargakis) — [0+](https://github.com/jlevy/the-art-of-command-line/commits?author=kargakis)/[1+](https://github.com/jlevy/the-art-of-command-line/issues?q=author%3Akargakis)
* [kstn (kastian)](https://github.com/kastian) — [1+](https://github.com/jlevy/the-art-of-command-line/commits?author=kastian)/[0+](https://github.com/jlevy/the-art-of-command-line/issues?q=author%3Akastian) — _translator (ru)_
* [Kesu J (kesu)](https://github.com/kesu) — [2+](https://github.com/jlevy/the-art-of-command-line/commits?author=kesu)/[3+](https://github.com/jlevy/the-art-of-command-line/issues?q=author%3Akesu)
* [kevingo (kevingo)](https://github.com/kevingo) — [1+](https://github.com/jlevy/the-art-of-command-line/commits?author=kevingo)/[2+](https://github.com/jlevy/the-art-of-command-line/issues?q=author%3Akevingo) — _translation maintainer (zh-Hant)_
@ -64,6 +68,7 @@ They have kindly agreed to review and help update future contributions for the t
* [Takuma Yamaguchi (kumon)](https://github.com/kumon) — [1+](https://github.com/jlevy/the-art-of-command-line/commits?author=kumon)/[1+](https://github.com/jlevy/the-art-of-command-line/issues?q=author%3Akumon)
* [Lakshmipathi (Lakshmipathi)](https://github.com/Lakshmipathi) — [10+](https://github.com/jlevy/the-art-of-command-line/commits?author=Lakshmipathi)/[1+](https://github.com/jlevy/the-art-of-command-line/issues?q=author%3ALakshmipathi)
* [Pavel Zhukov (landgraf)](https://github.com/landgraf) — [1+](https://github.com/jlevy/the-art-of-command-line/commits?author=landgraf)/[0+](https://github.com/jlevy/the-art-of-command-line/issues?q=author%3Alandgraf)
* [Lampros Mountrakis (lmount)](https://github.com/lmount) — [1+](https://github.com/jlevy/the-art-of-command-line/commits?author=lmount)/[1+](https://github.com/jlevy/the-art-of-command-line/issues?q=author%3Almount)
* [lsrom](https://github.com/lsrom) — [14+](https://github.com/jlevy/the-art-of-command-line/commits?author=lsrom)/[2+](https://github.com/jlevy/the-art-of-command-line/issues?q=author%3Alsrom) — _translation maintainer (cs)_
* [Luke Yeager (lukeyeager)](https://github.com/lukeyeager) — [1+](https://github.com/jlevy/the-art-of-command-line/commits?author=lukeyeager)/[1+](https://github.com/jlevy/the-art-of-command-line/issues?q=author%3Alukeyeager)
* [TAKAGI Masahiro (m-takagi)](https://github.com/m-takagi) — [1+](https://github.com/jlevy/the-art-of-command-line/commits?author=m-takagi)/[1+](https://github.com/jlevy/the-art-of-command-line/issues?q=author%3Am-takagi)
@ -72,31 +77,31 @@ They have kindly agreed to review and help update future contributions for the t
* [Michael Barlow (michaelbarlow7)](https://github.com/michaelbarlow7) — [2+](https://github.com/jlevy/the-art-of-command-line/commits?author=michaelbarlow7)/[1+](https://github.com/jlevy/the-art-of-command-line/issues?q=author%3Amichaelbarlow7)
* [Crisoforo Gaspar Hernández (mitogh)](https://github.com/mitogh) — [3+](https://github.com/jlevy/the-art-of-command-line/commits?author=mitogh)/[1+](https://github.com/jlevy/the-art-of-command-line/issues?q=author%3Amitogh)
* [miuc (miuc)](https://github.com/miuc) — [1+](https://github.com/jlevy/the-art-of-command-line/commits?author=miuc)/[2+](https://github.com/jlevy/the-art-of-command-line/issues?q=author%3Amiuc)
* [Michael Kwardakov (mkwardakov)](https://github.com/mkwardakov) — [2+](https://github.com/jlevy/the-art-of-command-line/commits?author=mkwardakov)/[2+](https://github.com/jlevy/the-art-of-command-line/issues?q=author%3Amkwardakov)
* [Michael Kwardakov (mkwardakov)](https://github.com/mkwardakov) — [5+](https://github.com/jlevy/the-art-of-command-line/commits?author=mkwardakov)/[4+](https://github.com/jlevy/the-art-of-command-line/issues?q=author%3Amkwardakov)
* [Harry Moreno (morenoh149)](https://github.com/morenoh149) — [0+](https://github.com/jlevy/the-art-of-command-line/commits?author=morenoh149)/[1+](https://github.com/jlevy/the-art-of-command-line/issues?q=author%3Amorenoh149)
* [慕冬亮 (mudongliang)](https://github.com/mudongliang) — [2+](https://github.com/jlevy/the-art-of-command-line/commits?author=mudongliang)/[6+](https://github.com/jlevy/the-art-of-command-line/issues?q=author%3Amudongliang)
* [Dongliang Mu (mudongliang)](https://github.com/mudongliang) — [3+](https://github.com/jlevy/the-art-of-command-line/commits?author=mudongliang)/[7+](https://github.com/jlevy/the-art-of-command-line/issues?q=author%3Amudongliang)
* [Nilton Vasques (niltonvasques)](https://github.com/niltonvasques) — [24+](https://github.com/jlevy/the-art-of-command-line/commits?author=niltonvasques)/[2+](https://github.com/jlevy/the-art-of-command-line/issues?q=author%3Aniltonvasques) — _translation maintainer (pt)_
* [Oleg Berman (olegberman)](https://github.com/olegberman) — [15+](https://github.com/jlevy/the-art-of-command-line/commits?author=olegberman)/[2+](https://github.com/jlevy/the-art-of-command-line/issues?q=author%3Aolegberman) — _translation maintainer (ru)_
* [osmero](https://github.com/osmero) — [1+](https://github.com/jlevy/the-art-of-command-line/commits?author=osmero)/[1+](https://github.com/jlevy/the-art-of-command-line/issues?q=author%3Aosmero) — _translator (ru)_
* [Serg Petrov (p12se)](https://github.com/p12se) — [1+](https://github.com/jlevy/the-art-of-command-line/commits?author=p12se)/[0+](https://github.com/jlevy/the-art-of-command-line/issues?q=author%3Ap12se)
* [Peter Kokot (peterkokot)](https://github.com/peterkokot) — [36+](https://github.com/jlevy/the-art-of-command-line/commits?author=peterkokot)/[27+](https://github.com/jlevy/the-art-of-command-line/issues?q=author%3Apeterkokot) — _translation maintainer (sl)_
* [Peter Kokot (peterkokot)](https://github.com/peterkokot) — [37+](https://github.com/jlevy/the-art-of-command-line/commits?author=peterkokot)/[29+](https://github.com/jlevy/the-art-of-command-line/issues?q=author%3Apeterkokot) — _translation maintainer (sl)_
* [Ryan (picasso250)](https://github.com/picasso250) — [1+](https://github.com/jlevy/the-art-of-command-line/commits?author=picasso250)/[1+](https://github.com/jlevy/the-art-of-command-line/issues?q=author%3Apicasso250)
* [Chujie Zeng (Psycho7)](https://github.com/Psycho7) — [19+](https://github.com/jlevy/the-art-of-command-line/commits?author=Psycho7)/[8+](https://github.com/jlevy/the-art-of-command-line/issues?q=author%3APsycho7) — _translation maintainer (zh)_
* [Rahul Kavale (rahulkavale)](https://github.com/rahulkavale) — [1+](https://github.com/jlevy/the-art-of-command-line/commits?author=rahulkavale)/[1+](https://github.com/jlevy/the-art-of-command-line/issues?q=author%3Arahulkavale)
* [Raju Devidas Vindane (rajuvindane)](https://github.com/rajuvindane) — [1+](https://github.com/jlevy/the-art-of-command-line/commits?author=rajuvindane)/[1+](https://github.com/jlevy/the-art-of-command-line/issues?q=author%3Arajuvindane)
* [Rasmus Wriedt Larsen (RasmusWL)](https://github.com/RasmusWL) — [1+](https://github.com/jlevy/the-art-of-command-line/commits?author=RasmusWL)/[1+](https://github.com/jlevy/the-art-of-command-line/issues?q=author%3ARasmusWL)
* [Rasmus Wriedt Larsen (RasmusWL)](https://github.com/RasmusWL) — [0+](https://github.com/jlevy/the-art-of-command-line/commits?author=RasmusWL)/[1+](https://github.com/jlevy/the-art-of-command-line/issues?q=author%3ARasmusWL)
* [Riley Shaw (rileyjshaw)](https://github.com/rileyjshaw) — [1+](https://github.com/jlevy/the-art-of-command-line/commits?author=rileyjshaw)/[1+](https://github.com/jlevy/the-art-of-command-line/issues?q=author%3Arileyjshaw)
* [Remi Verchere (rverchere)](https://github.com/rverchere) — [0+](https://github.com/jlevy/the-art-of-command-line/commits?author=rverchere)/[0+](https://github.com/jlevy/the-art-of-command-line/issues?q=author%3Arverchere) — _translator (fr)_
* [Saksham Sharma (sakshamsharma)](https://github.com/sakshamsharma) — [1+](https://github.com/jlevy/the-art-of-command-line/commits?author=sakshamsharma)/[3+](https://github.com/jlevy/the-art-of-command-line/issues?q=author%3Asakshamsharma)
* [Kit Chan (shukitchan)](https://github.com/shukitchan) — [2+](https://github.com/jlevy/the-art-of-command-line/commits?author=shukitchan)/[2+](https://github.com/jlevy/the-art-of-command-line/issues?q=author%3Ashukitchan)
* [Simarpreet Singh (simar7)](https://github.com/simar7) — [1+](https://github.com/jlevy/the-art-of-command-line/commits?author=simar7)/[2+](https://github.com/jlevy/the-art-of-command-line/issues?q=author%3Asimar7)
* [Simarpreet Singh (simar7)](https://github.com/simar7) — [0+](https://github.com/jlevy/the-art-of-command-line/commits?author=simar7)/[2+](https://github.com/jlevy/the-art-of-command-line/issues?q=author%3Asimar7)
* [Scott Griffin (sirsgriffin)](https://github.com/sirsgriffin) — [1+](https://github.com/jlevy/the-art-of-command-line/commits?author=sirsgriffin)/[1+](https://github.com/jlevy/the-art-of-command-line/issues?q=author%3Asirsgriffin)
* [Snowcat8436 (Snowcat8436)](https://github.com/Snowcat8436) — [4+](https://github.com/jlevy/the-art-of-command-line/commits?author=Snowcat8436)/[0+](https://github.com/jlevy/the-art-of-command-line/issues?q=author%3ASnowcat8436) — _translator (ko)_
* [Soham Chakraborty (SohamChakraborty)](https://github.com/SohamChakraborty) — [1+](https://github.com/jlevy/the-art-of-command-line/commits?author=SohamChakraborty)/[3+](https://github.com/jlevy/the-art-of-command-line/issues?q=author%3ASohamChakraborty)
* [spmbt (spmbt)](https://github.com/spmbt) — [13+](https://github.com/jlevy/the-art-of-command-line/commits?author=spmbt)/[0+](https://github.com/jlevy/the-art-of-command-line/issues?q=author%3Aspmbt) — _translator (ru)_
* [Stepan Babala (stepan0904)](https://github.com/stepan0904) — [33+](https://github.com/jlevy/the-art-of-command-line/commits?author=stepan0904)/[5+](https://github.com/jlevy/the-art-of-command-line/issues?q=author%3Astepan0904) — _translation maintainer (uk)_
* [Stepan Babala (stepan0904)](https://github.com/stepan0904) — [33+](https://github.com/jlevy/the-art-of-command-line/commits?author=stepan0904)/[5+](https://github.com/jlevy/the-art-of-command-line/issues?q=author%3Astepan0904) — _translation (uk)_
* [Steven Liu (stevenlordiam)](https://github.com/stevenlordiam) — [2+](https://github.com/jlevy/the-art-of-command-line/commits?author=stevenlordiam)/[1+](https://github.com/jlevy/the-art-of-command-line/issues?q=author%3Astevenlordiam) — _translator (zh)_
* [Fabien Dubosson (StreakyCobra)](https://github.com/StreakyCobra) — [1+](https://github.com/jlevy/the-art-of-command-line/commits?author=StreakyCobra)/[1+](https://github.com/jlevy/the-art-of-command-line/issues?q=author%3AStreakyCobra)
* [Fabien Dubosson (StreakyCobra)](https://github.com/StreakyCobra) — [0+](https://github.com/jlevy/the-art-of-command-line/commits?author=StreakyCobra)/[1+](https://github.com/jlevy/the-art-of-command-line/issues?q=author%3AStreakyCobra)
* [taxusyew](https://github.com/taxusyew) — [1+](https://github.com/jlevy/the-art-of-command-line/commits?author=taxusyew)/[2+](https://github.com/jlevy/the-art-of-command-line/issues?q=author%3Ataxusyew)
* [Thomas Lee (ThomasLee969)](https://github.com/ThomasLee969) — [12+](https://github.com/jlevy/the-art-of-command-line/commits?author=ThomasLee969)/[1+](https://github.com/jlevy/the-art-of-command-line/issues?q=author%3AThomasLee969)
* [Timur (tim-teufel)](https://github.com/tim-teufel) — [4+](https://github.com/jlevy/the-art-of-command-line/commits?author=tim-teufel)/[3+](https://github.com/jlevy/the-art-of-command-line/issues?q=author%3Atim-teufel)
@ -106,6 +111,8 @@ They have kindly agreed to review and help update future contributions for the t
* [Joe Block (unixorn)](https://github.com/unixorn) — [1+](https://github.com/jlevy/the-art-of-command-line/commits?author=unixorn)/[1+](https://github.com/jlevy/the-art-of-command-line/issues?q=author%3Aunixorn)
* [Valeria de Paiva (vcvpaiva)](https://github.com/vcvpaiva) — [2+](https://github.com/jlevy/the-art-of-command-line/commits?author=vcvpaiva)/[0+](https://github.com/jlevy/the-art-of-command-line/issues?q=author%3Avcvpaiva) — _translator (pt)_
* [Eduardo Rolim (vndmtrx)](https://github.com/vndmtrx) — [1+](https://github.com/jlevy/the-art-of-command-line/commits?author=vndmtrx)/[1+](https://github.com/jlevy/the-art-of-command-line/issues?q=author%3Avndmtrx)
* [senhtry (w169q169)](https://github.com/w169q169) — [3+](https://github.com/jlevy/the-art-of-command-line/commits?author=w169q169)/[1+](https://github.com/jlevy/the-art-of-command-line/issues?q=author%3Aw169q169)
* [Evan Wong (wyf88)](https://github.com/wyf88) — [2+](https://github.com/jlevy/the-art-of-command-line/commits?author=wyf88)/[2+](https://github.com/jlevy/the-art-of-command-line/issues?q=author%3Awyf88)
* [Okunev Yu Dmitry (xaionaro)](https://github.com/xaionaro) — [1+](https://github.com/jlevy/the-art-of-command-line/commits?author=xaionaro)/[1+](https://github.com/jlevy/the-art-of-command-line/issues?q=author%3Axaionaro)
* [Chunyang Xu (xuchunyang)](https://github.com/xuchunyang) — [13+](https://github.com/jlevy/the-art-of-command-line/commits?author=xuchunyang)/[7+](https://github.com/jlevy/the-art-of-command-line/issues?q=author%3Axuchunyang) — _translator (zh)_
* [Yasuhiroki (yasuhiroki)](https://github.com/yasuhiroki) — [1+](https://github.com/jlevy/the-art-of-command-line/commits?author=yasuhiroki)/[1+](https://github.com/jlevy/the-art-of-command-line/issues?q=author%3Ayasuhiroki)

View File

@ -42,7 +42,7 @@ Translations to new languages are always welcome, especially if you can maintain
- Check existing issues to see if a translation is in progress or stalled. If so, offer to help.
- If it is not in progress, file an issue for your language so people know you are working on it and we can arrange. Confirm you are native level in the language and are willing to maintain the translation, so it's not orphaned.
- To get it started, fork the repo, then submit a PR with the single file README-xx.md added, where xx is the language code. Use standard [IETF language tags](https://www.w3.org/International/articles/language-tags/), i.e. the same as is used by Wikipedia, *not* the code for a single country. These are usually just the two-letter lowercase code, for example, `fr` for French and `uk` for Ukrainian (not `ua`, which is for the country). For langauges that have variations, use the shortest tag, such as `zh-Hant`.
- To get it started, fork the repo, then submit a PR with the single file README-xx.md added, where xx is the language code. Use standard [IETF language tags](https://www.w3.org/International/articles/language-tags/), i.e. the same as is used by Wikipedia, *not* the code for a single country. These are usually just the two-letter lowercase code, for example, `fr` for French and `uk` for Ukrainian (not `ua`, which is for the country). For languages that have variations, use the shortest tag, such as `zh-Hant`.
- Invite friends to review if possible. If desired, feel free to invite friends to help your original translation by letting them fork your repo, then merging their PRs.
- Add links to your translation at the top of every README*.md file. (For consistency, the link should be added in alphabetical order by ISO code, and the anchor text should be in the native language.)
- When done, indicate on the PR that it's ready to be merged into the main repo.

View File

@ -21,7 +21,7 @@
![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. Κάποιες συμβουλές είναι εισαγωγικές και μερικές πιο συγκρεκριμένες, εξειδικευμένες και εις βάθος. Αυτή η σελίδα δεν είναι μεγάλη, αλλά αν μπορείτε να τα θυμάστε όλα, τότε γνωρίζετε πολλά.
Όμως η ευχέρια αυτή βελτιώνει την ευελιξία και την παραγωγικότητά σας ως μηχανικός τόσο με προφανείς όσο και με λιγότερο ευδιάκριτους τρόπους. Αυτή είναι μία συλλογή από σημειώσεις και συμβουλές που αφορούν τη χρήση της γραμμής εντολών και τις οποίες βρήκαμε χρήσιμες, ενώ εργαζόμασταν σε Linux. Κάποιες συμβουλές είναι εισαγωγικές και μερικές πιο συγκρεκριμένες, εξειδικευμένες ή εις βάθος. Αυτή η σελίδα δεν είναι μεγάλη, αλλά αν μπορείτε να τα θυμάστε όλα, τότε γνωρίζετε πολλά.
Αυτή η εργασία είναι αποτέλεσμα [πολλών συγγραφέων και μεταφραστών](AUTHORS.md).
@ -52,7 +52,7 @@
- Μάθετε τουλάχιστον έναν text-based επεξεργαστή κειμένου καλά. Ιδανικά τον Vim (`vi`), καθώς στην πραγματικότητα δεν υπάρχει ανταγωνισμός όσον αφορά την τυχαία επεξεργασία κειμένου σε τερματικό (ακόμη κι αν χρησιμοποιείτε Emacs, ένα μεγάλο IDE ή κάποιον σύγχρονο μοδάτο επεξεργαστή κειμένου τον περισσότερο χρόνο).
- Να γνωρίζετε πώς να διαβάζετε τεκμηρίωση με την εντολή `man` (για τον περίεργο, η εντολή `man man` εμφανίζει σε λίστα τους αριθμούς των ενοτήτων, π.χ. η 1 περιέχει τις εντολές του φλοιού, η 5 αρχεία/συμβάσεις και η 8 είναι για διαχείριση). Αναζητήστε σελίδες man με την εντολή `apropos`. Να γνωρίζετε ότι μερικές εντολές δεν είναι εκτελέσιμες αλλά ενσωματωμένες στον Bash και μπορείτε να ζητήσετε βοήθεια σχετικά με αυτές με `help` και `help -d`.
- Να γνωρίζετε πώς να διαβάζετε τεκμηρίωση με την εντολή `man` (για τον περίεργο, η εντολή `man man` εμφανίζει σε λίστα τους αριθμούς των ενοτήτων, π.χ. η 1 περιέχει τις εντολές του φλοιού, η 5 αρχεία/συμβάσεις και η 8 είναι για διαχείριση). Αναζητήστε σελίδες man με την εντολή `apropos`. Να γνωρίζετε ότι μερικές εντολές δεν είναι εκτελέσιμα προγράμματα αλλά ενσωματωμένες στον φλοιό και μπορείτε να ζητήσετε βοήθεια σχετικά με αυτές με `help` και `help -d`. Μπορείτε να βρείτε αν μια εντολή είναι εκτελέσιμο πρόγραμμα, ή ενσωματωμένη στον φλοιό ή ένα ακόμη όνομα (συντόμευση) που έχει αντιστοιχηθεί στην εντολή αυτή χρησιμοποιώντας την εντολή `type command`.
- Μάθετε για την ανακατεύθυνση της εξόδου και της εισόδου με χρήση των τελεστών `>` και `<` και για τις σωληνώσεις εντολών με χρήση του `|`. Να γνωρίζετε ότι ο τελεστής `>` αντικαθιστά το αρχείο εξόδου και ο `>>` προσθέτει στο τέλος του αρχείου. Μάθετε για τα stdout και stderr.
@ -82,7 +82,7 @@
- Για την επεξεργασία μεγάλων εντολών, αφού ορίσετε τις ρυθμίσεις του επεξεργαστή κειμένου σας (για παράδειγμα `export EDITOR=vim`), με **ctrl-x** **ctrl-e** θα ανοίξει η τρέχουσα εντολή σε έναν επεξεργαστή κειμένου για επεξεργασία πολλών γραμμών. Ή αν έχετε ορίσει συντομεύσεις τύπου vi, **escape-v**.
- Για να δείτε πρόσφατες εντολές, `history`. Επίσης, υπάρχουν πολλές συντομεύσεις όπως `!$` (τελευταίο όρισμα) και `!!` (τελευταία εντολή), αν και συχνά αντικαθίστανται από **ctrl-r** και **alt-.**.
- Για να δείτε πρόσφατες εντολές χρησιμοποιήστε την εντολή `history`. Ακολουθήστε την με την εντολή `!n` (όπου `n` είναι ο αριθμός της εντολής) για να την εκτελέσετε ξανά. Υπάρχουν πάρα πολλές συντομεύσεις που μπορείτε να χρησιμοποιήσετε. Από αυτές οι πιο χρήσιμες μάλλον είναι η `!$` για την τελευταία παράμετρο και η `!!` για την τελευταία εντολή (δείτε το "HISTORY EXPANSION" στην τεκμηρίωση του φλοιού). Όμως, αυτές συχνά εύκολα αντικαθίστανται από **ctrl-r** και **alt-.**.
- Πηγαίνετε στον προσωπικό σας κατάλογο (home) με `cd`. Αποκτήστε πρόσβαση σε αρχεία που βρίσκονται σε σχετική θέση με τον προσωπικό κατάλογό σας με το πρόθεμα `~` (π.χ. `~/.bashrc`). Σε `sh` script μπορείτε να αναφέρεστε στον προσωπικό σας κατάλογο ως `$HOME`.
@ -149,7 +149,7 @@
- Χρησιμοποιήστε `man ascii` για έναν καλό πίνακα ASCII, με δεξαεξαδικές και δεκαδικές τιμές. Για γενικές πληροφορίες που αφορούν την κωδικοποίηση, οι `man unicode`, `man utf-8` και `man latin1`είναι χρήσιμες.
- Χρησιμοποιήστε `screen` ή [`tmux`](https://tmux.github.io/) για να ενεργοποιήσετε την πολυπλεξία της οθόνης. Αυτό ιδιαίτερα χρήσιμο σε απομακρυσμένες συνεδρίες ssh και για να διακόψετε ή να επαναφέρετε μια συνεδρία. H `byobu` μπορεί να βελτιώσει την οθόνη ή tmux παρέχοντας περισσότερες πληροφορίες και πιο εύκολη διαχείριση. Μία πιο απλή εναλλακτική μόνο για τη διατήρηση συνεδριών είναι η `dtach`.
- Χρησιμοποιήστε `screen` ή [`tmux`](https://tmux.github.io/) για να ενεργοποιήσετε την πολυπλεξία της οθόνης. Αυτό είναι ιδιαίτερα χρήσιμο σε απομακρυσμένες συνεδρίες ssh και για να διακόψετε ή να επαναφέρετε μια συνεδρία. H εντολή `byobu` ή `tmux` μπορεί να βελτιώσει την οθόνη παρέχοντας περισσότερες πληροφορίες και πιο εύκολη διαχείριση. Μία πιο απλή εναλλακτική μόνο για τη διατήρηση συνεδριών είναι η [`dtach`](https://github.com/bogner/dtach).
- Με ssh, το να γνωρίζετε πώς να προωθήσετε μία θύρα με τις επιλογές `-L` ή `-D` (και καμιά φορά με την `-R`) είναι χρήσιμο, π.χ. για να έχετε πρόσβαση σε ιστοσελίδες από έναν απομακρυσμένο server.
@ -218,6 +218,8 @@
- Να γνωρίζετε για την `tee` για να αντιγράφετε από το stdin σε ένα αρχείο κι επίσης στο stdout, όπως στην `ls -al | tee file.txt`.
- Για πιο πολύπλοκους υπολογισμούς, όπως ομαδοποίηση, αναστροφή πεδίων και στατιστικούς υπολογισμούς, έχετε υπόψη σας την εντολή [`datamash`](https://www.gnu.org/software/datamash/).
- Να γνωρίζετε ότι η τοπική διαμόρφωση του συστήματος (locale, π.χ. ελληνικό) επηρεάζει πολλά εργαλεία γραμμής εντολών με λιγότερο προφανείς τρόπους, συμπεριλαμβανομένων της σειράς ταξινόμησης (collation) και της απόδοσης. Οι περισσότερες εγκαταστάσεις Linux θα έχουν αναθέσει στη μεταβλητή `LANG` ή σε άλλες σχετικές με locale μεταβλητές τιμή μιας τοπική ρύθμισης όπως η Αγγλική ΗΠΑ. Αλλά να έχετε υπόψη ότι η ταξινόμηση μπορεί να αλλάξει, αν θέσετε άλλο locale. Και να γνωρίζετε ότι οι διεθνοποιημένες ρουτίνες μπορούν να κάνουν την ταξινόμηση ή άλλες εντολές να εκτελούνται *πολλές φορές* πιο αργά. Σε μερικές περιπτώσεις (όπως στον ορισμό διεργασιών ή της μοναδικότητας διεργασιών παρακάτω) μπορείτε με ασφάλεια να αγνοήσετε εντελώς αργές διεθνοποιημένες ρουτίνες και να χρησιμοποιήσετε παραδοσιακή ταξινόμηση με βάση bytes, χρησιμοποιώντας `export LC_ALL=C`.
- Μπορείτε να ορίσετε ένα συγκεκριμένο περιβάλλον για μία εντολή προσθέτοντάς της ως πρόθεμα τις ρυθμίσεις της μεταβλητής περιβάλλοντος, όπως στην `TZ=Pacific/Fiji date`.
@ -532,6 +534,7 @@ mkdir empty && rsync -r --delete empty/ some-dir && rmdir some-dir
- [Strict mode](http://redsymbol.net/articles/unofficial-bash-strict-mode/) για να γράφετε καλύτερα scripts φλοιού.
- [shellcheck](https://github.com/koalaman/shellcheck): Ένα εργαλείο στατικής ανάλυσης για scripts για φλοιό. Στην ουσία, lint για bash/sh/zsh.
- [Filenames and Pathnames in Shell](http://www.dwheeler.com/essays/filenames-in-shell.html): Οι δυστυχώς περίπλοκες μικρολεπτομέρειες του πώς να διαχειριστεί κανείς σωστά ονόματα αρχείων σε scripts για φλοιό.
- [Data Science at the Command Line](http://datascienceatthecommandline.com/#tools): Περισσότερες εντολές και εργαλεία χρήσιμα για την άσκηση της επιστήμης δεδομένων, από το βιβλίο με το ίδιο όνομα.
## Αποποίηση ευθύνης

View File

@ -62,6 +62,7 @@ Idéalement Vim (`vi`), car il n'a pas vraiment de concurrent lorsqu'il s'agit d
- Sachez comment lire une documentation avec `man` (pour les curieux, `man man` liste les sections avec leur numéro, par exemple 1 pour les commandes «&nbsp;normales&nbsp;» , 5 pour les formats des fichiers et les conventions, et 8 pour tout ce qui concerne l'administration système).
Trouvez les pages de manuel avec `apropos`.
Sachez que certaines commandes ne sont pas des exécutables, mais des commandes internes de Bash et que vous pouvez obtenir de l'aide à leur sujet avec `help` et `help -d`.
Utilisez `type command` pour déterminer si une commande est un exécutable, une commande interne du shell ou un alias.
- Apprenez à rediriger les entrées et sorties au moyen de `>` et `<`, et à créer des tubes avec `|`.
Sachez que `>` écrase le fichier de sortie et `>>` sert à ajouter.
@ -102,8 +103,10 @@ Par exemple **alt-.** fait défiler les arguments précédents et **alt-*** dév
- Pour éditer de longues commandes, après avoir configuré votre éditeur (par exemple `export EDITOR=vim`), **ctrl-x** **ctrl-e** (**escape-v** dans le style vi) ouvre l'éditeur pour éditer la commande courante.
- Pour voir les commandes récentes, `history`.
Il y a aussi beaucoup d'abréviations telles que `!$` (dernier argument) et `!!` (dernière commande), bien que celles-ci soient souvent remplacées par **ctrl-r** et **alt-.**.
- Consultez les commandes récentes avec `history`.
Faites `!n` pour rappeler la commande numéro `n`.
Il y a aussi beaucoup d'autres abréviations, les plus utiles étant probalement `!$` pour le dernier argument et `!!` pour la dernière commande (voir la section « HISTORY EXPANSION » de la page de manuel).
Cependant, celles-ci peuvent être aisément remplacées par **ctrl-r** et **alt-.**.
- Placez-vous dans votre répertoire personnel avec `cd`.
Accédez aux fichiers à partir de leurs chemins relatifs par rapport à votre répertoire personnel en préfixant ceux-ci avec `~` (p.&nbsp;ex. `~/.bashrc`).
@ -200,7 +203,7 @@ Pour des informations générales sur l'encodage, `man unicode`, `man utf-8` et
- Utilisez `screen` ou [`tmux`](https://tmux.github.io/) pour multiplexer une fenêtre de terminal, particulièrement utile pour des sessions SSH distantes, et pour détacher et rattacher une session.
`byobu` peut améliorer screen ou tmux en fournissant plus d'informations et une gestion plus facile.
Une alternative plus légère pour la persistance des sessions seulement est `dtach`.
Une alternative plus légère pour la persistance des sessions seulement est [`dtach`](https://github.com/bogner/dtach/).
- Il est utile de savoir comment créer un tunnel SSH avec `-L` ou `-D` (et occasionnellement `-R`), par exemple pour accéder à des sites web à partir d'un serveur distant.
@ -275,6 +278,8 @@ Beaucoup de personnes utilisent `cut` mais oublient `join`.
- Connaissez `tee` pour copier depuis stdin vers un fichier ou vers stdout, comme dans `ls -al | tee file.txt`.
- Pour des calculs plus complexes, incluant les regroupements, les inversions de champs et des calculs statistiques, considérez [`datamash`](https://www.gnu.org/software/datamash/).
- Sachez que la locale affecte de nombreux outils en ligne de commande de manière subtile, comme l'ordre pour les tris (collation) et les performances.
La plupart des installateurs Linux définissent la variable `LANG` ou d'autres variables locales d'environnement pour configurer une locale telle que US English.
Mais ayez à l'esprit que le tri sera modifié si vous changez la locale.
@ -633,6 +638,12 @@ Pour écrire des scripts Bash multi-plateformes évitez d'utiliser de telles com
## Uniquement Windows
Ce qui suit ne concerne que Windows.
- Sur Windows 10, [Bash sous Ubuntu sur Windows](https://msdn.microsoft.com/commandline/wsl/about) fournit un environnement Bash avec les utilitaires en ligne de commande d'Unix.
Du côté positif, cela permet à des programmes Linux de s'exécuter sous Windows.
En revanche, il n'est pas possible de lancer des programmes Windows depuis le *prompt* de Bash.
- Installez [Cygwin](http://cygwin.com) pour bénéficier de la puissance du shell Unix sous Microsoft Windows.
La majorité de ce qui est décrit dans ce document fonctionnera *out of the box*.
@ -652,6 +663,12 @@ C'est particulièrement utile pour invoquer des programmes Windows dans les scri
- Vous pouvez accomplir et scripter la plupart des tâches d'administration système de Windows depuis la ligne de commande en apprenant et en utilisant `wmic`.
- Une autre possibilité pour avoir le *look and feel* Unix sous Windows est d'utiliser [Cash](https://github.com/dthree/cash).
Notez que très peu de commandes Unix et d'options de ligne de commande sont disponibles dans cet environnement.
- Une solution alternative pour se procurer les outils de développement GNU sous Windows, tels que GCC, est [MinGW](http://www.mingw.org/) et son package [MSYS](http://www.mingw.org/wiki/msys) qui fournit des utilitaires comme bash, gawk, make et grep.
MSYS ne dispose pas de toutes les fonctionnalités de Cygwin.
MinGW est particulièrement utile pour porter sous Windows des outils Unix.
## Autres ressources
@ -660,7 +677,7 @@ C'est particulièrement utile pour invoquer des programmes Windows dans les scri
- [Strict mode](http://redsymbol.net/articles/unofficial-bash-strict-mode/)&nbsp;: pour écrire de meilleurs scripts shell.
- [shellcheck](https://github.com/koalaman/shellcheck)&nbsp;: un outil d'analyse statique des scripts shell. L'équivalent de lint pour bash, sh et zsh.
- [Filenames and Pathnames in Shell](http://www.dwheeler.com/essays/filenames-in-shell.html)&nbsp;: les points de détail, malheureusement compliqués, sur la manière de manipuler correctement les noms de fichiers dans les scripts shell.
- [Data Science at the Command Line](http://datascienceatthecommandline.com/#tools)&nbsp;: d'autres outils en ligne de commande, utiles en science des données et discutés dans le livre du même nom.
## Avertissement

View File

@ -80,7 +80,7 @@
- Используйте **ctrl-w** в Баше для того, чтобы удалить последнее слово в команде; **ctrl-u** для того, чтобы удалить команду полностью. Используйте **alt-b** и **alt-f** для того, чтобы бегать между словами команды, **ctrl-a** и **ctrl-e** для того, чтобы переместиться к началу и концу строки соответственно, **ctrl-k** для того, чтобы удалить часть команды от текущей позиции до конца строки, **ctrl-l** для того, чтобы очистить экран. Гляньте на `man readline` чтобы узнать о всех клавиатурных сочетаниях Баша. Их много! Например, **alt-.** бежит по предыдущим аргументам команды, а **alt-*** раскрывает глоб (globbing).
- Если Вам нравятся кравиатурных сочетаниях vim, сделайте `set -o vi``set -o emacs` чтобы вернуться обратно).
- Если Вам нравятся клавиатурные сочетания vim, сделайте `set -o vi``set -o emacs` чтобы вернуться обратно).
- Для редактирования длинных команд после установки другого редактора (например `export EDITOR=vim`), нажатие **ctrl-x** **ctrl-e** откроет текущую команду в редакторе для многострочного редактирования. Или, как в vi, **escape-v**.
@ -558,10 +558,10 @@ mkdir empty && rsync -r --delete empty/ some-dir && rmdir some-dir
- [awesome-shell](https://github.com/alebcay/awesome-shell): Дополняемый список инструментов и ресурсов для командной строки.
- [awesome-osx-command-line](https://github.com/herrbischoff/awesome-osx-command-line): Более детальные гайды по терминалу в OS X.
- [Strict mode](http://redsymbol.net/articles/unofficial-bash-strict-mode/) Для того, чтобы писать шелл-скрипты лучше.
- [Strict mode](http://redsymbol.net/articles/unofficial-bash-strict-mode/): Для того, чтобы писать шелл-скрипты лучше.
- [shellcheck](https://github.com/koalaman/shellcheck): Статический анализатор скриптов.
- [Filenames and Pathnames in Shell](http://www.dwheeler.com/essays/filenames-in-shell.html): Сборник мелочей о правильной обработке имен файлов в скриптах.
- [Data Science at the Command Line](http://datascienceatthecommandline.com/#tools): Обзор команд и утилит, используемых для обработки данных, из одноименной книги
## Дисклеймер

View File

@ -1,6 +1,7 @@
🌍
*[Čeština](README-cs.md) ∙ [Ελληνικά](README-el.md) ∙ [English](README.md) ∙ [Español](README-es.md) ∙ [Français](README-fr.md) ∙ [Italiano](README-it.md) ∙ [日本語](README-ja.md) ∙ [한국어](README-ko.md) ∙ [Português](README-pt.md) ∙ [Русский](README-ru.md) ∙ [Slovenščina](README-sl.md) ∙ [Українська](README-uk.md) ∙ [简体中文](README-zh.md) ∙ [繁體中文](README-zh-Hant.md)*
# Umetnost ukazne vrstice
[![Join the chat at https://gitter.im/jlevy/the-art-of-command-line](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/jlevy/the-art-of-command-line?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
@ -13,6 +14,7 @@
- [V eni vrstici](#v-eni-vrstici)
- [Nepregledno vendar uporabno](#nepregledno-vendar-uporabno)
- [Samo za OS X](#samo-za-os-x)
- [Samo za Windows](#samo-za-windows)
- [Več virov](#več-virov)
- [Pogoji uporabe](#pogoji-uporabe)
@ -34,7 +36,7 @@ vendar se je premaknilo na GitHub, kjer so ljudje bolj talentirani od prvotnega
Obseg:
- Ta vodič je tako za začetnike kot za poznavalce. Cilji so *širina* (vse pomembno), *specifičnost* (podaja konkretne primere najpogostejših primerov uporabe) in *kratkost* (izogiba se stvarem, ki niso bistvene ali se odmikajo, kar lahko enostavno pogledate drugje). Vsak nasvet je bistven v določeni situaciji ali bistveno prihrani čas pred alternativami.
- To je napisano za Linux z izjemo sekcije "[Samo za OS X](#samo-za-os-x)". Mnogi ostali elementi veljajo ali pa so lahko nameščeni na drugih Unix-ih ali OS X (ali celo Cygwin).
- To je napisano za Linux z izjemo sekcij "[Samo za OS X](#samo-za-os-x)" in "[Samo za Windows](#samo-za-windows)". Mnogi ostali elementi veljajo ali pa so lahko nameščeni na drugih Unix-ih ali OS X (ali celo Cygwin).
- Poudarek je na interaktivnosti Bash-a, čeprav mnogo nasvetov velja za ostale lupine in splošno skriptanje Bash-a.
- Vključuje tako "standardne" ukaze Unix-a kot tudi tiste, ki zahtevajo namestitev posebnih paketov -- dokler so dovolj pomembni, da zaslužijo vključitev.
@ -50,7 +52,7 @@ Opombe:
- Naučite se tudi vsaj enega tekstovno osnovanega urejevalnika. Idealno Vim (`vi`) saj v realnosti ni konkurence za naključno urejanje v terminalu (tudi, če uporabljate Emacs, velik IDE, ali moderni hipsterski urejevalnik večino časa).
- Spoznajte, kako brati dokumentacijo z `man` (za radovedne, `man man` izpiše številke sekcij, npr. 1 so "splošni" ukazi, 5 so datoteke/konvencije in 8 je za administracijo). Najdite strani man z `apropos`. Vedite, da nekateri ukazi niso izvršljivi, vendar vgrajeni v Bash in pomoč zanje lahko dobite s `help` in `help -d`.
- Spoznajte, kako brati dokumentacijo z `man` (za radovedne, `man man` izpiše številke sekcij, npr. 1 so "splošni" ukazi, 5 so datoteke/konvencije in 8 je za administracijo). Najdite strani man z `apropos`. Vedite, da nekateri ukazi niso izvršljivi, vendar vgrajeni v Bash in pomoč zanje lahko dobite s `help` in `help -d`. Z uporabo `type command` lahko izvedete, ali je ukaz izvršljiv, vgrajen v lupino ali pa je alias.
- Naučite se o preusmeritvi izpisa in vnosa z uporabo `>` in `<` ter uporabo cevi `|`. Vedite, da `>` prepiše izpis datoteke in `>>` ga pripne. Naučite se o stdout in stderr.
@ -82,7 +84,7 @@ Opombe:
- Za urejanje dolgih ukazov, po nastavitvi vašega urejevalnika (na primer `export EDITOR=vim`), **ctrl-x** **ctrl-e** bo odprlo trenutni ukaz v urejevalniku za več vrstično urejanje. Ali v stilu vi, **escape-v**.
- Da vidite nedavne ukaze, `history`. Na voljo je tudi veliko okrajšav, kot je `!$` (zadnji argument) in `!!` zadnji ukaz, čeprav so te pogostokrat enostavno zamenjani s **ctrl-r** in **alt-.**.
- Če si želite ogledati nedavne ukaze, uporabite `history`. Nadalje `!n` (kjer je `n` številka ukaza), da ga ponovno izvedete. Na voljo je tudi veliko okrajšav, najuporabnejša verjetno `!$` za zadnji argument in `!!` za zadnji ukaz (glejte "HISTORY EXPANSION" na man straneh). Vendar so le-te pogostokrat enostavno zamenjane s **ctrl-r** in **alt-.**.
- Pojdite v vaš domači direktorij s `cd`. Dostopajte do datotek relativno glede na vaš domači direktorij s predpono `~` (npr. `~/.bashrc`). V `sh` skriptah se sklicujte na domači direktorij kot `$HOME`.
@ -149,7 +151,7 @@ Opombe:
- Uporabite `man ascii` za dobro tabelo ASCII s heksadecimalnimi in decimalnimi vrednostmi. Za splošne informacije enkodiranja so priročni `man unicode`, `man utf-8` in `man latin1`.
- Uporabite `screen` ali [`tmux`](https://tmux.github.io/), da muliplicirate zaslon, posebej uporabno na oddaljenih sejah ssh in da odstranite in se ponovno pripnete k seji. `byobu` lahko poveča t.i. screen ali tmux s ponujanjem več informacij in enostavnejšim upravljanjem. Bolj minimalna alternativa za samo obstojnost sej je `dtach`.
- Uporabite `screen` ali [`tmux`](https://tmux.github.io/), da muliplicirate zaslon, posebej uporabno na oddaljenih sejah ssh in da odstranite in se ponovno pripnete k seji. `byobu` lahko poveča t.i. screen ali tmux s ponujanjem več informacij in enostavnejšim upravljanjem. Bolj minimalna alternativa za samo obstojnost sej je [`dtach`](https://github.com/bogner/dtach).
- V ssh je poznavanje, kako usmeriti tunel z `-L` ali `-D` (in občasno `-R`) je uporaben, npr. za dostopanje do spletnih strani iz oddaljenega strežnika.
@ -182,6 +184,14 @@ Opombe:
- Za pogon ukaza s privilegiji, uporabite `sudo` (za root) ali `sudo -u` (za drugega uporabnika). Uporabite `su` ali `sudo bash`, da dejansko poženete lupino kot ta uporabnik. Uporabite `su -`, da simulirate svežo prijavo kot root ali drug uporabnik.
- Spoznajte [omejitev 128K](https://wiki.debian.org/CommonErrorMessages/ArgumentListTooLong) v ukaznih vrsticah. Ta napaka "Argument list too long" je pogosta, ko se nadomestni znak ujema z velikim številom datotek. (Ko se to zgodi, lahko pomagajo alternative kot sta `find` in `xargs`.)
- Za osnovni kalkulator (in seveda splošni dostop do Python-a) uporabite interpreter `python`. Na primer,
```
>>> 2+3
5
```
## Procesiranje datotek in podatkov
@ -211,6 +221,8 @@ Opombe:
- Naučite se o `tee`, da prekopirate iz stdin v datoteko in tudi v stdout, kot pri `ls -al | tee file.txt`.
- Za kompleksnejše kalkulacije, vključno z združevanjem, obračanjem polj in statističnimi izračuni, razmislite o [`datamash`](https://www.gnu.org/software/datamash/).
- Vedite, da lokalizacija vpliva na veliko orodij ukazne vrstice na subtilne načine, vključno z vrstnim redom (kolokacijo) in uspešnostjo. Večina namestitev Linux-a bo nastavila `LANG` ali druge spremenljivke lokalizacije na lokalne nastavitve kot je US English. Vendar bodite pozorni, saj se bo vrstni red spremenil, če spremenite lokalizacijo. In vedite, da rutine i18n lahko naredijo sortiranje ali poganjanje drugih ukazov *nekajkrat* počasnejše. V nekaterih situacijah (kot je skupek operacij ali unikatnih operacij spodaj) lahko v celoti varno ignorirate počasne rutine i18n in uporabite tradicionalne vrstne rede na osnovi bajtov z uporabo `export LC_ALL=C`.
- Nastavite lahko določeno okolje ukaza s predpono njegovega sklicevanja na nastavitve spremenljivk okolja, kot pri `TZ=Pacific/Fiji date`.
@ -232,7 +244,7 @@ Opombe:
rename 's/\.bak$//' *.bak
```
- Kot pravi stran vodiča, je `rsync` resnično hiter in izredno vsestransko orodje kopiranja datotek. Znano je po sinhronizaciji med napravami vendar je enakovredno uporaben tudi lokalno. Je tudi eden izmed [najhitrejših načinov](https://web.archive.org/web/20130929001850/http://linuxnote.net/jianingy/en/linux/a-fast-way-to-remove-huge-number-of-files.html) za izbris velikega števila datotek:
- Kot pravi stran vodiča, je `rsync` resnično hiter in izredno vsestransko orodje kopiranja datotek. Znano je po sinhronizaciji med napravami vendar je enakovredno uporaben tudi lokalno. Ko omejitve varnosti omogočajo, uporaba `rsync` namesto `scp` omogoča povrnitev prenosa brez ponovnega zagona od začetka. Je tudi eden izmed [najhitrejših načinov](https://web.archive.org/web/20130929001850/http://linuxnote.net/jianingy/en/linux/a-fast-way-to-remove-huge-number-of-files.html) za izbris velikega števila datotek:
```sh
mkdir empty && rsync -r --delete empty/ some-dir && rmdir some-dir
```
@ -262,6 +274,14 @@ mkdir empty && rsync -r --delete empty/ some-dir && rmdir some-dir
- Uporabite `zless`, `zmore`, `zcat` in `zgrep` za operiranje na kompresiranih datotekah.
- Atributi datotek so nastavljivi preko `chattr` in ponujajo nizko nivojsko alternativo pravicam datotek. Na primer za zaščito pred ponesrečenim brisanjem datoteke se uporabi nespremenljiva zastavica: `sudo chattr +i /critical/directory/or/file`
- Uporabite `getfacl` in `setfacl`, da shranite in povrnete pravice datotek. Na primer:
```sh
getfacl -R /some/path > permissions.txt
setfacl --restore=permissions.txt
```
## Sistemsko razhroščevanje
@ -293,7 +313,7 @@ mkdir empty && rsync -r --delete empty/ some-dir && rmdir some-dir
- Vedite, kako se povezati k procesu v pogonu z `gdb` in dobiti njegove sledi skladovnice.
- Uporabite `/proc`. Včasih je izjemno v pomoč, ko se razhroščuje probleme v živo. Primeri: `/proc/cpuinfo`, `/proc/meminfo`, `/proc/cmdline`, ``/proc/xxx/cwd`, `/proc/xxx/exe`, `/proc/xxx/fd/`, `/proc/xxx/smaps` (kjer je `xxx` id procesa ali pid).
- Uporabite `/proc`. Včasih je izjemno v pomoč, ko se razhroščuje probleme v živo. Primeri: `/proc/cpuinfo`, `/proc/meminfo`, `/proc/cmdline`, ``/proc/xxx/cwd`,asdf `/proc/xxx/exe`, `/proc/xxx/fd/`, `/proc/xxx/smaps` (kjer je `xxx` id procesa ali pid).
- Ko se razhroščuje, zakaj je šlo nekaj narobe v preteklosti, je lahko zelo uporaben `sar`. Prikazuje statistiko zgodovine na procesorju, spominu, omrežju itd.
@ -303,6 +323,8 @@ mkdir empty && rsync -r --delete empty/ some-dir && rmdir some-dir
- Uporabite `dmesg` kadarkoli gre nekaj dejansko čudno (lahko je težava strojne opreme ali gonilnika).
- Če izbrišete datoteko in se prostor na voljo ne poveča, kot je pričakovano s poročilom `du`, preverite ali datoteko uporablja proces:
`lsof | grep deleted | grep "filename-of-my-big-file"`
## V eni vrstici
@ -516,6 +538,23 @@ To so elementi pomembni *samo* za OS X.
- Da dobite informacije o izdaji OS X, uporabite `sw_vers`.
## Samo za Windows
- Dostopajte do moči lupine Unix na Microsoft Windows z namestitvijo [Cygwin](https://cygwin.com/). Večina stvari opisanih v tem dokumentu bo delala "Out of the Box".
- Namestite dodatne programe Unix z upraviteljem paketov Cygwin.
- Uporabite `mintty` za vaše okno ukazne vrstice.
- Do odložišča Windows dostopajte preko `/dev/clipboard`.
- Poženite `cygstart`, da odprete poljubno datoteko preko njene registrirane aplikacije.
- Do registra Windows dostopajte z `regtool`.
- Upoštevajte, da pot diska Windows `C:\` postane v Cygwin `/cygdrive/c` in Cigwin-ov `/` se na Windows pojavi pod `C:\cygwin`. Pretvorite med Cygwin in Windows stilom poti datotek s `cygpath`. To je najbolj uporabno v skriptah, ki se sklicujejo na programe Windows.
- Večino opravil sistemske administracije Windows iz ukazne vrstice lahko izvajate tako, da se naučite uporabljati `wmic`.
## Več virov
@ -524,7 +563,7 @@ To so elementi pomembni *samo* za OS X.
- [Strict mode](http://redsymbol.net/articles/unofficial-bash-strict-mode/) za pisanje boljših skript lupine.
- [shellcheck](https://github.com/koalaman/shellcheck): lupinska skripta orodja statične analize. V osnovi, lint za bash/sh/zsh.
- [Filenames and Pathnames in Shell](http://www.dwheeler.com/essays/filenames-in-shell.html): Na žalost kompleksne podrobnosti, kako pravilno ravnati z imeni datotek v lupinskih skriptah.
- [Data Science at the Command Line](http://datascienceatthecommandline.com/#tools): Več koristnih ukazov in orodij za uporabo v znanosti podatkov iz knjige z enakim imenom.
## Pogoji uporabe

View File

@ -10,65 +10,76 @@
- [Основи](#Основи)
- [Щоденне використання](#Щоденне-використання)
- [Обробка файлів та інформації](#Обробка-файлів-та-інформації)
- [Дебаггінг](#Дебаггінг)
- [Відладка](#Відладка)
- [Одним рядком](#Одним-рядком)
- [Складно але корисно](#Складно-але-корисно)
- [Тільки для OS X](#Тільки-для-os-x)
- [Інші джерела](#Інші-джерела)
- [Декламація](#Декламація)
- [Відмова від відповідальності](#Відмова-від-відповідальності)
![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. Деякі з них - прості та очевидні, але деякі - досить складні та призначені для вирішення конкретних завдань. Це невелика публікація, але якщо Ви вже все знаєте, що тут написано, і можете згадати як це все використовувати - Ви знаєте багато!
Використанню командного рядка часто не приділяють достатньої уваги. Про термінал говорять, як про щось містичне. Насправді, ці навики явно (і не явно) збільшують вашу продуктивність у роботі. Даний документ є підбіркою на наш погляд корисних при роботі з командним рядком в Linux заміток і порад. Деякі з них - прості та очевидні, але інші - або призначені для вирішення конкретних завдань, або досить складні чи широко невідомі. Це невелика публікація, але якщо ви вже все знаєте, що тут написано, і можете згадати як це все використовувати - ви знаєте багато!
Ця робота є результатом [багатьох авторів і перекладачів](AUTHORS.md).
Дещо з цього [спочатку](http://www.quora.com/What-are-some-lesser-known-but-useful-Unix-commands) [появилось](http://www.quora.com/What-are-the-most-useful-Swiss-army-knife-one-liners-on-Unix) на [Quora](http://www.quora.com/What-are-some-time-saving-tips-that-every-Linux-user-should-know), але потім переїхала на Github, де знаходяться дуже талановиті люди які зробили багато удосконалень.
[**Будь-ласка, зробіть свій внесок**](/CONTRIBUTING.md) якщо Ви замітили помилку або можете щось покращити!
Це -- результат роботи [багатьох авторів і перекладачів](AUTHORS.md).
Дещо з цього [спочатку](http://www.quora.com/What-are-some-lesser-known-but-useful-Unix-commands) [з'явилось](http://www.quora.com/What-are-the-most-useful-Swiss-army-knife-one-liners-on-Unix) на [Quora](http://www.quora.com/What-are-some-time-saving-tips-that-every-Linux-user-should-know), але потім переїхало на Github, де багато людей талановитіших за початкового автора, внесли багато удосконалень.
[**Будь-ласка, зробіть свій внесок**](/CONTRIBUTING.md) якщо ви знайшли помилку або можете щось покращити!
## Опис
Основне:
Охоплення:
- Дана публікація призначена як для недосвідчених, так і для досвідчених користувачів. Цілі: *об'ємість* (зібрати всі важливі аспекти використання командного рядка), *практичність* (надати конкретні приклади для найчастіших задач) та *стислість* (не варто вдаватись у неочевидні речі, про які можна прочитати в інших місцях).
- Цей документ написаний для користувачів Linux, із єдиним винятком - розділ "[Тільки для OS X](#Тільки-для-os-x)". Все інше підходить для всіх UNIX/MacOS систем (і навіть для Cygwin).
- Сфокусована на інтерактивному Bash, але багато речей також можуть бути використані в інших Шелах; і в застосовані до Bash-скриптів.
- Ця інструкція включає в себе стандартні Unix команди і ті, для яких потрібно встановлювати сторонні пакети. Вони настільки корисні, що варті того, щоб їх встановили.
- Дана публікація призначена як для початківців, так і для досвідчених користувачів. Цілі: *наповнення* (зібрати всі важливі аспекти використання командного рядка), *практичність* (надати конкретні приклади для найпоширеніших ситуацій) та *стислість* (не варто вдаватись у несуттєві деталі, про які можна прочитати деінде).
- Цей документ написаний для користувачів Linux, за винятком розділів "[Тільки для OS X](#Тільки-для-os-x)" та "[Тільки для Windows(#Тільки-для-Windows)]". Все інше підходить для всіх UNIX чи OS X систем (і навіть для Cygwin).
- Сфокусована на інтерактивному Bash, але багато порад також можуть застосовуватися в інших командних оболонках чи загалом до Bash-скриптів.
- Ця інструкція включає в себе як стандартні Unix команди, так і ті, для використання яких потрібно встановлювати додаткові пакети, якщо користь від застосування команди виправдовує установку пакету.
Нотатки:
- Що б все вміщалось на одній сторінці, вся інформація вставлена прямо тут. Ви досить розумні для того, щоб самостійно вивчити питання більш детально в іншому місці. Використовуйте `apt-get`, `yum`, `dnf`, `pacman`, `pip` та `brew` (залежно від вашої системи управління пакетами) для установки нових програм.
- Щоб все вміщалось на одній сторінці, вся інформація вставлена прямо тут. У вас вистачить вмінь, щоб самостійно вивчити питання більш детально з інших джерел. Використовуйте `apt-get`, `yum`, `dnf`, `pacman`, `pip` та `brew` (залежно від вашої системи управління пакетами) для установки нових програм.
- На [Explainshell](http://explainshell.com/) можна знайти просте і докладне пояснення того, що таке команди, їх опції, пайпи(pipes(*|*)) і т.д.
## Основи
- Вивчіть основи Bash. Просто візьміть і наберіть у командному рядку термінала `man bash` і хоча б перегляньте; він досить просто читається і він не дуже великий. Інші шелли теж можуть бути хороші, але Bash - потужна програма, і Bash завжди під рукою (використання *виключно* zsh, fish і т.д., які напевно круто виглядають на Вашому лептопі і ні в чому Вас не обмежують, наприклад Ви не зможете використовувати ці можливості Шеллу на вже існуючому сервері).
- Вивчіть як використовувати хоча б один консольний редактор тексту. Найкраще Vim (`vi`), адже у нього немає конкурентів, коли вам потрібно швидко щось правити (навіть якщо Ви постійно використовуєте Emacs чи якийсь важкий IDE або модний хіпстерський редактор).
- Знайте, як читати документацію через `man` (`man man`; `man` у кутах документа в дужках додає номер, наприклад 1 - для звичайних команд, 5 - для файлів, 8 - для адміністративних команд). Шукайте інформацію через `apropos`, і пам'ятайте, що деякі команди - не виконувані(executables), а вбудовані команди Bash, і допомогу по них можна отримати через команду `help` і `help -d`.
- Можна перенаправляти введення та виведення через `>` і `<` і пайпи `|`. Пам'ятайте, що `>` - переписує вихідний файл, а `>>` додає до нього. Дізнайтеся побільше про stdout і stderr.
- Дізнайтеся побільше про `*` (а також `?` і `[`...`]`), кавички, а також різницю між подвійними `"` і одинарними `'` кавичками.
- Знайте як працювати із процесами в Bash: `&`, **ctrl-z**, **ctrl-c**, `jobs`, `fg`, `bg`, `kill`, і т.д.
- Знайте `ssh` та основи беспарольної аутентифікації через `ssh-agent`, `ssh-add`, і т.д.
- Основи роботи з файлами: `ls` і `ls -l` (зокрема, дізнайтеся, що значить кожен стовпець в `ls -l`), `less`, `head`,` tail` і `tail -f` (або навіть краще - `less + F`), `ln` і `ln -s` (дізнайтеся різницю між символьними посиланнями і жорсткими посиланнями, і чому жорсткі посилання краще), `chown`, `chmod`, `du` (для отримання швидкої інформації по використанню диска: `du -hk *`). Для менеджменту файлової системи, `df`, `mount`, `fdisk`, `mkfs`, `lsblk`.
- Основи роботи з мережею: `ip` або `ifconfig`, `dig`.
- Вивчіть і використовуйте систему управління версіями, наприклад таку як `git`.
- Добре знайте регулярні вирази і різні опції для `grep`/`egrep`. Такі опції як `-i`, `-o`, `-A`, та `-B` варто знати.
- Навчіться використовувати системами управління пакетами `apt-get`, `yum`, `dnf` та `pacman` (залежно від дистрибутива). Знайте як шукати і встановлювати пакети і обов'язково майте встановленим `pip` для установки командних утиліт, написаних на Python (деякі з тих команд, що ви знайдете нижче, найлегше встановити через `pip`).
- Вивчіть основи Bash. Просто візьміть і наберіть у командному рядку термінала `man bash` і хоча б перегляньте; він досить просто читається і він не дуже великий. Інші шелли теж можуть бути хороші, але Bash - потужна програма, і Bash завжди під рукою (вивчення *виключно* zsh, fish і т.д., хоч і привабливо на вашому особистому комп'ютері, насправді обмежує в багатьох випадках, наприклад при використанні існуючих серверів).
- Вивчіть використання хоча б одного консольного редактора тексту. Найкраще Vim (`vi`), адже у нього немає конкурентів, коли вам потрібно швидко щось правити (навіть якщо ви постійно використовуєте Emacs чи якийсь важкий IDE або модний хіпстерський редактор).
- Знайте, як читати документацію командою `man` (для допитливих: `man man` пояснює номери розділів документації, наприклад 1 - для звичайних команд, 5 - для файлів, 8 - для адміністративних команд). Шукайте інформацію через `apropos`, і пам'ятайте, що деякі команди - не виконувані (executables), а внутрішні команди Bash, і допомогу по них можна отримати через команду `help` і `help -d`.
- Можна перенаправляти ввід та вивід користуючися `>`, `<` та каналами `|`. Пам'ятайте, що `>` - переписує вихідний файл, а `>>` додає до нього. Дізнайтеся побільше про stdout і stderr.
- Дізнайтеся побільше про розширення шаблонів `*` (а також `?` і `[`...`]`), про вживанняя лапок та про відмінності між подвійними `"` та одинарними `'` лапками.
- Ознайомтеся, як працювати із процесами в Bash: `&`, **ctrl-z**, **ctrl-c**, `jobs`, `fg`, `bg`, `kill`, і т.д.
- Знайте `ssh` та основи безпарольної аутентифікації через `ssh-agent`, `ssh-add`, і т.д.
- Основи роботи з файлами: `ls` і `ls -l` (зокрема, дізнайтеся, що значить кожен стовпець в `ls -l`), `less`, `head`,` tail` і `tail -f` (або навіть краще - `less +F`), `ln` і `ln -s` (дізнайтеся про відмінності та переваги символьних і жорстких посилань), `chown`, `chmod`, `du` (для отримання швидкої інформації по використанню диска: `du -hk *`). Для керування файловою системою: `df`, `mount`, `fdisk`, `mkfs`, `lsblk`. Дізнайтеся, що таке inode (`ls -i` чи `df -i`).
- Основи роботи з мережею: `ip`, `ifconfig` або `dig`.
- Вивчіть і використовуйте систему управління версіями, наприклад таку, як `git`.
- Добре знайте регулярні вирази і різні опції для `grep`/`egrep`. Такі опції як `-i`, `-o`, `-v`, `-A`, `-B` та `-C` варто знати.
- Навчіться використовувати системи управління пакетами та встановлювати пакети `apt-get`, `yum`, `dnf` та `pacman` (залежно від дистрибутива). Обов'язково майте встановленим `pip` для установки командних утиліт, написаних на Python (деякі з тих команд, що ви знайдете нижче, найлегше встановити через `pip`).
## Щоденне використання
- Використовуйте клавішу таб в Bash для автодоповнення аргументів до команд та **ctrl-r** для пошуку по історії командного рядка.
- Використовуйте **ctrl-w** в Bash для того, щоб видалити останнє слово в команді; **ctrl-u** для того, щоб видалити команду повністю. Використовуйте **alt-b** і **alt-f** для того, щоб переміщатись між словами у команді, **ctrl-k** для того, щоб перейти в кінець рядка, **ctrl-l** для того, щоб очистити екран. Гляньте на `man readline` щоб дізнатися про всі шорткати Bash. Їх багато! Наприклад, **alt-.** переміщається між попередніми аргументам команди, а **alt-*** максимально розширює аргументи.
- Якщо Вам подобаються шорткати vim, виконайте `set -o vi` (`set -o emacs` що б повернути налаштування).
- Використовуйте клавішу табуляції (**Tab**) в Bash для автодоповнення аргументів до команд та **ctrl-r** для пошуку по історії командного рядка.
- Використовуйте **ctrl-w** в Bash для того, щоб видалити останнє слово в команді; **ctrl-u** для того, щоб видалити команду повністю. Використовуйте **alt-b** і **alt-f** для того, щоб переміщатись між словами у команді, **ctrl-k** для того, щоб перейти в кінець рядка, **ctrl-l** для того, щоб очистити екран. Гляньте на `man readline` щоб дізнатися про всі комбінації клавіш Bash. Їх багато! Наприклад, **alt-.** переміщається між попередніми аргументам команди, а **alt-*** максимально розширює аргументи.
- Якщо вам подобаються клавішні комбінації vim, виконайте `set -o vi` (`set -o emacs` що б повернути налаштування).
- Для редагування довгих команд після налаштування вашого консольного редактора (наприклад `export EDITOR=vim`), **ctrl-x** **ctrl-e** відкриє поточну команду в редакторі для багаторядкового редагування команди. Або у vi стилі, **escape-v**.
- Для того, щоб переглянути історію, введіть `history`. Також існує безліч абревіатур, наприклад `! $` - Останній аргумент, `!!` - остання команда, хоча ці абревіатури часто заміняються шорткати **ctrl-r** та **alt-.**.
- Перейти в домашню директорию можна за допомогою `cd`. Щоб вказати шлях до файлів із домашньої директорії можна скористатися префіксом `~` (наприклад: `~/.bashrc`). У `sh` скриптах для звернення до домашньої директорії можна використовувати змінну `$HOME`.
- Для того, щоб переглянути історію, введіть `history`. Також існує безліч абревіатур, наприклад `! $` - Останній аргумент, `!!` - остання команда, хоча ці абревіатури часто заміняються комбінаціями **ctrl-r** та **alt-.**.
- Перейти в домашню директорію можна за допомогою `cd`. Щоб вказати шлях до файлів із домашньої директорії можна скористатися префіксом `~` (наприклад: `~/.bashrc`). У `sh` скриптах для звернення до домашньої директорії можна використовувати змінну `$HOME`.
- Для того, щоб стрибнути до останньої робочої директорії, використовуйте `cd -`
- Якщо Ви написали команду наполовину і раптом передумали, натисніть **alt-#** для того, щоб додати `#` на початок команди, та відправте команду як коментар. Потім ви зможете повернутися до неї через історію команд.
- Використовуйти `xargs` (або `parallel`). Це дуже корисно. Зверніть увагу, що Ви можете контролювати кількість команд на кожен рядок (`-L`) також паралельність (`-P`). Якщо Ви не впевнені, що робите щось правильно, почніть з `xargs echo`. Також `-I{}` - корисно. Приклади:
- Якщо ви написали команду наполовину і раптом передумали, натисніть **alt-#** для того, щоб додати `#` на початок команди, та відправте команду як коментар. Потім ви зможете повернутися до неї через історію команд.
- Використовуйти `xargs` (або `parallel`). Це дуже корисно. Зверніть увагу, що ви можете контролювати кількість команд на кожен рядок (`-L`) також паралельність (`-P`). Якщо ви не впевнені, що робите щось правильно, почніть з `xargs echo`. Також `-I{}` - корисно. Приклади:
```bash
find . -name '*.py' | xargs grep some_function
cat hosts | xargs -I{} ssh root@{} hostname
@ -81,10 +92,10 @@
- Зверніть увагу на `lsof` щоб подивитися відкриті сокети і файли.
- Команда `uptime` or `w` показує як довго працює система.
- Використовуйте `alias`, щоб створити скорочення для часто використовуємих команд. Наприклад, `alias ll='ls -latr'` створить нове скорочення(alias) `ll`.
- Збережіть свої синоніми (aliases), налаштування і фунції які Ви часто використовуєте у `~/.bashrc`, більш детально [тут](http://superuser.com/a/183980/7106). Це зробить їх доступними в усіх Ваших сесіях shell.
- Синхронізуйте Ваші конфігураційні файли (наприклад `.bashrc` та `.bash_profile`) між різними комп'ютерами за допомогою Git.
- Збережіть свої синоніми (aliases), налаштування і фунції які ви часто використовуєте у `~/.bashrc`, більш детально [тут](http://superuser.com/a/183980/7106). Це зробить їх доступними в усіх ваших сесіях shell.
- Синхронізуйте ваші конфігураційні файли (наприклад `.bashrc` та `.bash_profile`) між різними комп'ютерами за допомогою Git.
- Вставте настройки змінних середовища і команди, які повинні бути виконані при вході у систему в файл `~/.bash_profile`. Окремі налаштування будуть потрібні для оболонок, які запускаються із під графічного інтерфейсу та з під `cron` задач.
- Необхідно розуміти, що потрібна обережність коли змінні та імена файлів включають пробіли. Окружіть Ваші Bash змінні в подвійні кавички: `"$FOO"`. Використовуйте `-0` або `-print0` опції щоб дозволити розмежувати імена файлів за допомогою нульових(null) символів. Наприклад: `locate -0 pattern | xargs -0 ls -al` або `find / -print0 -type d | xargs -0 ls -al`. Щоб перебрати імена файлів які містять пробільні символи для циклу встановіть Ваш IFS(API файлової системи) використовувати тільки '\n' для цього використовуйте - `IFS=$'\n'`.
- Необхідно розуміти, що потрібна обережність коли змінні та імена файлів включають пробіли. Окружіть ваші Bash змінні в подвійні лапки: `"$FOO"`. Використовуйте `-0` або `-print0` опції щоб дозволити розмежувати імена файлів за допомогою нульових(null) символів. Наприклад: `locate -0 pattern | xargs -0 ls -al` або `find / -print0 -type d | xargs -0 ls -al`. Щоб перебрати імена файлів які містять пробільні символи для циклу встановіть ваш IFS(API файлової системи) використовувати тільки '\n' для цього використовуйте - `IFS=$'\n'`.
- У Bash скриптах використовуйте `set -x` (або `set -v`) щоб дебажити вивід. Використовуйте строгий(strict) режим скрізь, де це можливо. Використовуйте `set -e` для того, щоб припиняти виконання при помилках (не нульовий вихідний код). Використовуйте `set -u` що б визначити невстановленні змінні. Використовуйте `set -o pipefail` щоб при помилках невикористовувати пайпи(вертикальна риска). Для більш складних скриптів також використовуйте `trap` на EXIT or ERR.
Корисною буде звичка почати використовувати настипний скрипт, який допоможе виявити і перервати на загальних помилках і вивести повідомлення:
```bash
@ -146,8 +157,8 @@
- Знайте про `cut`, `paste`, і `join` для роботи з текстовими файлами. Багато людей використовують `cut`, забувши про `join`.
- Знайте про `wc`: для підрахунку нових рядків (`-l`), символів (`-m`), слів (`-w`) і для байтового підрахунку (`-c`).
- Знайте про `tee` для копіювання в файл з stdin і stdout, щось типу `ls -al | tee file.txt`.
- Не забувайте, що Ваше місце знаходження (локаль) впливає на багато команд, включаючи порядок сортування, порівняння і продуктивність. Багато дистрибутиви Linux автоматично виставляють `LANG` або будь-яку іншу змінну в підходящу для Вашого регіону. Через це результати функцій сортування можуть працювати непередбачувано. Знайте що `i18n` можуть значно знизити продуктивність сортувань. У деяких випадках можна повністю цього уникати (за винятком рідкісних випадків), сортуючи традиційно побайтово, використовуйте `export LC_ALL = C`.
- Вb можете встановити спецефічне середовище для команди за допомогогю префікса, а саме: `TZ=Pacific/Fiji date`.
- Не забувайте, що ваше місце знаходження (локаль) впливає на багато команд, включаючи порядок сортування, порівняння і продуктивність. Багато дистрибутиви Linux автоматично виставляють `LANG` або будь-яку іншу змінну в підходящу для вашого регіону. Через це результати функцій сортування можуть працювати непередбачувано. Знайте що `i18n` можуть значно знизити продуктивність сортувань. У деяких випадках можна повністю цього уникати (за винятком рідкісних випадків), сортуючи традиційно побайтово, використовуйте `export LC_ALL = C`.
- Ви можете встановити спецефічне середовище для команди за допомогогю префікса, а саме: `TZ=Pacific/Fiji date`.
- Знайте основи `awk` і `sed` для простих маніпуляцій з даними. Наприклад, щоб отримати суму всіх чисел, які знаходяться в третій колонці текстового файлу, можна використати `awk '{ x += $3 } END { print x }'`. Швидше за все, це вийде в рази 3 швидше і рази в 3 простіше, ніж робити це в Пітоні.
- Щоб замінити всі знаходження підрядка в одному або декількох файлах:
```sh
@ -169,7 +180,7 @@
- Якщо вам коли-небудь доведеться написати код символу табуляції в терміналі, наприклад, для сортування за табуляції з прапором -t, використовуйте скорочення **ctrl-v** **[Tab]** або напишіть `$'\t'`. Останнє краще, тому що його можна скопіювати/вставити.
- Стандартні інструменти для виправлення вихідного коду це `diff` і `patch`. Також зверніть увагу на `diffstat` для перегляду статистики diff і `sdiff` для крок за кроком diff. Запамятайте `diff -r` працює рекурсивно по всій директорії. Використовуйте `diff -r tree1 tree2 | diffstat` для повного зведення змін. Використовуйте `vimdiff` порівняти і редагувати файли.
- Для бінарних файлів використовуйте `hd`, `hexdump` або `xxd` для простих hex-дампом, і `bvi` або `biew` для зміни бінарників.
- Також для бінарних файлів, `strings` (плюс `grep`, і т.п.) дозволить Вам знайти біти тексту.
- Також для бінарних файлів, `strings` (плюс `grep`, і т.п.) дозволить вам знайти біти тексту.
- Щоб подивитися різницю в бінарниках (дельта-кодування): `xdelta3`.
- Для конвертування кодувань використовуйте `iconv`. Для більш складних завдань - `uconv`, він підтримує деякі складні фічі Юникода. Наприклад, ця команда переводить рядки з файлу в нижній регістр і прибирає наголоси (наприклад в іспанській мові)
```sh
@ -180,9 +191,9 @@
- Використовуйте `zless`, `zmore`, `zcat`, і `zgrep` для роботи зі стиснутими файлами.
## Дебаггінг
## Відладка
- Для веб-дебаггінга використовуйте `curl` і `curl -I`, або альтернативу - `wget` або [`httpie`](https://github.com/jakubroztocil/httpie).
- Для відладки веб сторінок використовуйте `curl` і `curl -I`, або альтернативу - `wget` або [`httpie`](https://github.com/jakubroztocil/httpie).
- Щоб отримати інформацію про диск/CPU/мережі використовуйте `iostat`, `netstat`, `top` (краще `htop`) і `dstat`. Використовуйте `iostat -mxz 15` для отримання основної інформації CPU.
- Для інформації про мережу використовуйте `netstat` і `ss`.
- Для більш детальної інформації використовуйте [`glances`](https://github.com/nicolargo/glances). Ця програма показує відразу кілька різних статистик в одному вікні терміналу. Корисно, коли стежите за відразу декількома системами.
@ -191,8 +202,8 @@
- Для того, щоб дізнатися, чому диск повністю забитий, використовуйте `ncdu`, це зберігає час у порівнянні з тим же `du -sh *`.
- Для того, щоб дізнатися, який сокет або процес використовує інтернет, використовуйте `iftop` або `nethogs`.
- Додаток `ab` який поставляється разом з apache, корисний для швидкої і поверхневої перевірки продуктивності веб-сервера. Для більш серйозного лоад-тестінгу використовуйте `siege`.
- Для більш серйозного дебаггінга мережі використовуйте `wireshark`, `tshark`, і `ngrep`.
- Знайте про `strace` та `ltrace`. Ці команди можуть бути корисні, якщо програма падає або висить, і ви не знаєте чому або якщо ви хочете протестувати продуктивність програми. Не забувайте про можливість дебаггінга (`-c`) і можливість причепитися до процесу по pid (` -p`).
- Для більш серйозної відладки мережі використовуйте `wireshark`, `tshark`, і `ngrep`.
- Знайте про `strace` та `ltrace`. Ці команди можуть бути корисні, якщо програма падає або висить, і ви не знаєте чому або якщо ви хочете протестувати продуктивність програми. Не забувайте про можливість відладки (`-c`) і можливість причепитися до процесу по pid (` -p`).
- `ldd` для перевірки системних бібліотек.
- Знайте як причепитися до працюючого процесу через `gdb` і отримати трасування стека.
- Використовуйте `/proc`. Іноді він неймовірно корисний для налагодження запущених програм. Приклади: `/proc/cpuinfo`, `/proc/xxx/cwd`, ​​`/proc/xxx/exe`, `/proc/xxx/fd/`, `/proc/xxx/smaps` (де `xxx` id or pid процесу).
@ -224,7 +235,7 @@
```sh
cat access.log | egrep -o 'acct_id=[0-9]+' | cut -d= -f2 | sort | uniq -c | sort -rn
```
- Використовуйте `xargs` (або `parallel`). Зверніть увагу, що Ви можете контролювати кількість команд на кожен рядок, а так само паралельність. Якщо Ви не впевнені, що робите правильно, почніть з `xargs echo`. Ще `-I {}` - корисна штука. Приклади:
- Використовуйте `xargs` (або `parallel`). Зверніть увагу, що ви можете контролювати кількість команд на кожен рядок, а так само паралельність. Якщо ви не впевнені, що робите правильно, почніть з `xargs echo`. Ще `-I {}` - корисна штука. Приклади:
```sh
find. -name '* .py' | xargs grep some_function
cat hosts | xargs -I {} ssh root @ {} hostname
@ -248,7 +259,7 @@
- `yes`: безкінечно виводить рядок
- `cal`: хороший календар
- `env`: виводить змінні середовища (корисно в Bash-скриптах)
- `printenv`: показати змінні оточення (корисно в скриптах або дебаггінгу)
- `printenv`: показати змінні оточення (корисно в скриптах або при відладці)
- `look`: знайде англійські слова (або рядки у файлі) які починаються із рядках
- `cut`, `paste` і `join`: маніпуляції з даними
- `fmt`: форматування параграфів у тексті
@ -262,7 +273,7 @@
- `factor`: піднести число в степінь
- [`gpg`](https://gnupg.org/): зашифрувати і підписати файли
- `toe`: таблиця терміналів terminfo з описом
- `nc`: дебаггінг мережі і передачі даних
- `nc`: відладка мережі і передачі даних
- `socat`: перемикач сокетів і перенаправлення tcp-портів (схоже на `netcat`)
- [`slurm`](https://github.com/mattthias/slurm): візуалізація трафіку мережі
- `dd`: перенесення інформації між файлами або пристроями
@ -290,17 +301,17 @@
- `ldd`: показує залежності програми від системних бібліотек
- `nm`: symbols from object files
- `ab`: бенчмаркінг веб-серверів
- `strace`: дебагінг системних викликів
- `mtr`: трасування для дебаггінга мережі
- `cssh`: графічний конкурент Shel
- `strace`: відладка системних викликів
- `mtr`: трасування для відладки мережі
- `cssh`: паралельне виконання команд в графічному інтерфейсі
- `rsync`: синхронізація файлів і папок через SSH або на локальній файловій системі
- `wireshark` і `tshark`: перехоплення пакетів і дебагінг мережі
- `ngrep`: grep для шару мережі (network layer)
- `host` і `dig`: пошук DNS
- `lsof`: процесинг дескрипторів та інформація по сокетах
- `wireshark` і `tshark`: перехоплення пакетів і відладка мережі
- `ngrep`: grep мережевого рівня
- `host` і `dig`: пошук в DNS
- `lsof`: інформація про файлові дескриптори та сокети
- `dstat`: корисна статистика ОС
- [`glances`](https://github.com/nicolargo/glances): високорівнева статистика з багатьма підсистемам
- `iostat`: статистика використання жорсткого диска
- [`glances`](https://github.com/nicolargo/glances): сумарна статистика багатьох підсистем
- `iostat`: статистика системи вводу/виводу жорстких дисків
- `mpstat`: статистика використання CPU
- `vmstat`: статистика використання оперативної пам'яті
- `htop`: вдосконалена версія `top`
@ -333,13 +344,13 @@
## Інші джерела
- [awesome-shell](https://github.com/alebcay/awesome-shell): Розширює Shell.
- [awesome-osx-command-line](https://github.com/herrbischoff/awesome-osx-command-line): A more in-depth guide for the Mac OS command line.
- [awesome-osx-command-line](https://github.com/herrbischoff/awesome-osx-command-line): Поглиблений посібник до командного рядка OS X.
- [Strict mode](http://redsymbol.net/articles/unofficial-bash-strict-mode/) щоб краще писати Shell скрипти.
- [shellcheck](https://github.com/koalaman/shellcheck): A shell script static analysis tool. Essentially, lint for bash/sh/zsh.
- [Filenames and Pathnames in Shell](http://www.dwheeler.com/essays/filenames-in-shell.html): The sadly complex minutiae on how to handle filenames correctly in shell scripts.
## Декламація
## Відмова від відповідальності
За невеликим винятком, весь код написаний так, щоб інші його змогли прочитати.
Той факт, що щось може бути написано на Bash, зовсім не означає, що воно має бути на ньому написано. ;)

View File

@ -13,6 +13,7 @@
- [單行指令碼](#單行指令碼)
- [冷門但有用](#冷門但有用)
- [僅限 OS X 系統](#僅限-os-x-系統)
- [僅限 Windows 系統](#僅限-windows-系统)
- [更多資源](#更多資源)
- [免責聲明](#免責聲明)
- [授權條款](#授權條款)
@ -33,7 +34,7 @@
涵蓋範圍:
- 這篇文章對剛接觸命令列的新手以及具有命令列使用經驗的人都有用處。本文致力於做到*覆蓋面廣*(盡量包括一切重要的內容),*具體*(給出最常見的具體的例子)以及*簡潔*(避免不必要的,或是可以在其他地方輕鬆查到的細枝末節)。每個技巧都是在特定情境下必備的,或是能顯著減省時間的。
- 本文為 Linux 所寫,除​​了 [僅限OS X 系統](#僅限-os-x-系統) 章節外,其它章節中的大部分內容都適用於其它 Unix 系統或 MacOS 系統,甚至 Cygwin。
- 本文為 Linux 所寫,除了 [僅限OS X 系統](#僅限-os-x-系統) 和 [僅限 Windows 系統](#僅限-windows-系统) 章節外,其它章節中的大部分內容都適用於其它 Unix 系統或 MacOS 系統,甚至 Cygwin。
- 本文關注於互動式 Bash,儘管很多技巧也適用於其他 shell 或 Bash 指令碼。
- 本文包括了“標準的” Unix 命令和需要安裝特定套件的命令,只要它們足夠重要。
@ -492,6 +493,23 @@ mkdir empty && rsync -r --delete empty/ some-dir && rmdir some-dir
- 用 `sw_vers` 獲取 MacOS 的版本資訊。
## 僅限 Windows 系统
- 要在 Microsoft Windows 中使用 Unix shell,可以安装 [Cygwin](https://cygwin.com/)。本文件中介绍的大多數内容都將適用。
- 透過 Cygwin 的套件管理器來安裝額外的 Unix 指令。
- 使用 `mintty` 作為你的命令列視窗。
- 要訪問 Windows 剪貼簿,可以透過 `/dev/clipboard`
- 執行 `cygstart` 以透過預設程式打開一個文件。
- 要訪問 Windows 登錄檔,可以使用 `regtool`
- 注意 Windows 磁碟機路徑 `C:\` 在 Cygwin 中用 `/cygdrive/c` 代表,而 Cygwin 的 `/` 在 Windows 中顯示在 `C:\cygwin`。要轉換 Cygwin 和 Windows 風格的路徑可以用 `cygpath`。這在需要使用 Windows 指令的脚本裡很有用。
- 學會使用 `wmic`,你就可以從命令列執行大多數 Windows 系統管理任務,並編成腳本。
## 更多資源

View File

@ -29,30 +29,31 @@
[出现](http://www.quora.com/What-are-the-most-useful-Swiss-army-knife-one-liners-on-Unix)
于 [Quora](http://www.quora.com/What-are-some-time-saving-tips-that-every-Linux-user-should-know),
但已经迁移到了 Github,并由众多高手做出了许多改进。
如果你在本文中发现了错误或者存在可以改善的地方,请[**贡献你的一份力**](/CONTRIBUTING.md)。
如果你在本文中发现了错误或者存在可以改善的地方,请[**贡献你的一份力**](/CONTRIBUTING.md)。
## 前言
涵盖范围:
- 这篇文章对刚接触命令行的新手以及具有命令行使用经验的人都有用处。本文致力于做到*覆盖面广*(尽量包括一切重要的内容),*具体*(给出最常见的具体的例子)以及*简洁*(避免不必要的,或是可以在其他地方轻松查到的细枝末节)。每个技巧在特定情境下或是基本的,或是能显著节约时间。
- 本文为 Linux 所写,除了[仅限 OS X 系统](#仅限-os-x-系统)和[仅限 Windows 系统](#仅限windows系统)的部分。其它节中的大部分内容都适用于其它 Unix 系统或 OS X,甚至 Cygwin。
- 这篇文章对刚接触命令行的新手以及具有命令行使用经验的人都有用处。本文致力于做到*覆盖面广*(尽量包括一切重要的内容),*具体*(给出最常见的具体的例子)以及*简洁*(避免不必要的,或是可以在其他地方轻松查到的细枝末节)。每个技巧在特定情境下或是基本的,或是能显著节约时间。
- 本文为 Linux 所写,除了[仅限 OS X 系统](#仅限-os-x-系统)和[仅限 Windows 系统](#仅限-windows-系统)的部分。其它节中的大部分内容都适用于其它 Unix 系统或 OS X,甚至 Cygwin。
- 本文关注于交互式 Bash,尽管很多技巧也适用于其他 shell 或 Bash 脚本。
- 本文包括了“标准的”Unix 命令和需要安装特定包的命令,只要它们足够重要。
注意事项:
- 为了能在一页内展示尽量多的东西,一些具体的信息会被间接的包含在引用页里。聪明机智的你如果掌握了使用 Google 搜索引擎的基本思路与命令,那么你将可以查阅到更多的详细信息。使用 `apt-get``yum``dnf``pacman``pip``brew`(以及其它合适的包管理器)来安装新程序。
- 为了能在一页内展示尽量多的东西,一些具体的信息会被间接地包含在引用页里。聪明机智的你,如果掌握了使用 Google 搜索引擎的基本思路与命令,那么你将可以查阅到更多的详细信息。使用 `apt-get``yum``dnf``pacman`
`pip``brew`(以及其它合适的包管理器)来安装新程序。
- 使用 [Explainshell](http://explainshell.com/) 去获取相关命令、参数、管道等内容的解释。
## 基础
- 学习 Bash 的基础知识。具体来说,输入 `man bash` 并至少全文浏览一遍; 它很简单并且不长。其他的 shell 可能很好用,但 Bash 功能强大几乎所有情况下都是可用的 ( *只*学习 zsh,fish 或其他的 shell 的话,在你自己的电脑上会显得很方便,但在很多情况下会限制你,比如当你需要在服务器上工作时)。
- 学习 Bash 的基础知识。具体来说,输入 `man bash` 并至少全文浏览一遍; 它很简单并且不长。其他的 shell 可能很好用,但 Bash 功能强大几乎所有情况下都是可用的 ( *只*学习 zsh,fish 或其他的 shell 的话,在你自己的电脑上会显得很方便,但在很多情况下会限制你,比如当你需要在服务器上工作时)。
- 学习并掌握至少一个基于文本的编辑器。通常 Vim (`vi`) 会是你最好的选择,因为在终端里进行随机编辑 Vim 真的毫无敌手,哪怕是 Emacs、某大型 IDE 甚至时下非常流行的编辑器。
- 学习并掌握至少一个基于文本的编辑器。通常 Vim (`vi`) 会是你最好的选择,因为在终端里进行随机编辑Vim 真的毫无敌手,哪怕是 Emacs、某大型 IDE 甚至时下非常流行的编辑器。
- 学会如何使用 `man` 命令去阅读文档。学会使用 `apropos` 去查找文档。了解有些命令并不对应可执行文件,而是Bash内置的,可以使用 `help``help -d` 命令获取帮助信息。
- 学会如何使用 `man` 命令去阅读文档。学会使用 `apropos` 去查找文档。了解有些命令并不对应可执行文件,而是Bash内置的,可以使用 `help``help -d` 命令获取帮助信息。你可以用 `type 命令` 来判断它到底是可执行文件、shell 内置命令、还是别名。
- 学会使用 `>``<` 来重定向输出和输入,学会使用 `|` 来重定向管道。明白 `>` 会覆盖了输出文件而 `>>` 是在文件末添加。了解标准输出 stdout 和标准错误 stderr。
@ -84,13 +85,13 @@
- 为了方便地键入长命令,在设置你的编辑器后(例如 `export EDITOR=vim`),键入 **ctrl-x** **ctrl-e** 会打开一个编辑器来编辑当前命令。在 vi 模式下则键入 **escape-v** 实现相同的功能。
- 键入 `history` 查看命令行历史记录。其中有许多缩写,例如 `!$`(最后键入的参数)和 `!!`(最后键入的命令),尽管通常被 **ctrl-r****alt-.** 取代。
- 键入 `history` 查看命令行历史记录,再用 `!n``n` 是命令编号)就可以再次执行。其中有许多缩写,最有用的大概就是用 `!$` 指代上次键入的参数,以及用 `!!` 指代上次键入的命令了(参考 man 页面中的“HISTORY EXPANSION”)。不过这些通常被 **ctrl-r****alt-.** 取代。
- 要进入家目录可以用 `cd`。要访问你的家目录中的文件,可以使用前缀 `~`(例如 `~/.bashrc`)。在 `sh` 脚本里则用 `$HOME` 指代目录。
- 要进入 home 目录可以用 `cd`。要访问你的 home 目录中的文件,可以使用前缀 `~`(例如 `~/.bashrc`)。在 `sh` 脚本里则用 `$HOME` 指代 home 目录。
- 回到上一个工作路径:`cd -`
- 如果你输入命令的时候改变了主意,按下 **alt-#** 在行首添加 `#`,或者依次按下 **ctrl-a****#**, **enter**。这样做的话,之后你可以很方便的利用命令行历史回到你刚才输入到一半的命令。
- 如果你输入命令的时候改变了主意,按下 **alt-#** 在行首添加 `#`,或者依次按下 **ctrl-a****#**, **enter**。这样做的话,之后你可以很方便的利用命令行历史回到你刚才输入到一半的命令。
- 使用 `xargs` ( 或 `parallel`)。他们非常给力。注意到你可以控制每行参数个数(`-L`)和最大并行数(`-P`)。如果你不确定它们是否会按你想的那样工作,先使用 `xargs echo` 查看一下。此外,使用 `-I{}` 会很方便。例如:
```bash
@ -123,7 +124,7 @@
- 当变量和文件名中包含空格的时候要格外小心。Bash 变量要用引号括起来,比如 `"FOO"`。尽量使用 `-0``-print0` 选项以便用空字符来分隔文件名,例如 `locate -0 pattern | xargs -0 ls -al``find / -print0 -type d | xargs -0 ls -al`。如果 for 循环中循环访问的文件名含有空格,只需用 `IFS=$'\n'` 把内部字段分隔符设为换行符。
- 在 Bash 脚本中,使用 `set -x` 去调试输出,尽可能使用严格模式,使用 `set -e` 令脚本在发生错误时退出而不是继续运行,使用 `set -u` 来检查是否使用了未赋值的变量,使用 `set -o pipefail` 严谨地对待错误(尽管问题可能很微妙)。当牵扯到很多脚本时,使用 `trap`。一个好的习惯是在脚本文件开头这样写,这会使它检测一些错误,并在错误发生时中断程序并输出信息:
- 在 Bash 脚本中,使用 `set -x` 去调试输出,尽可能使用严格模式,使用 `set -e` 令脚本在发生错误时退出而不是继续运行,使用 `set -u` 来检查是否使用了未赋值的变量,使用 `set -o pipefail` 严谨地对待错误(尽管问题可能很微妙)。当牵扯到很多脚本时,使用 `trap`。一个好的习惯是在脚本文件开头这样写,这会使它检测一些错误,并在错误发生时中断程序并输出信息:
```bash
set -euo pipefail
trap "echo 'error: Script failed: see failed command above'" ERR
@ -151,7 +152,7 @@
- 使用 `man ascii` 查看具有十六进制和十进制值的ASCII表。`man unicode``man utf-8`,以及 `man latin1` 有助于你去了解通用的编码信息。
- 使用 `screen` 或 [`tmux`](https://tmux.github.io/) 来使用多个屏幕,当你在使用 ssh 时(保存 session 信息)将尤为有用。另一个轻量级的解决方案是 `dtach`
- 使用 `screen` 或 [`tmux`](https://tmux.github.io/) 来使用多个屏幕,当你在使用 ssh 时(保存 session 信息)将尤为有用。另一个轻量级的解决方案是 [`dtach`](https://github.com/bogner/dtach)
- ssh 中,了解如何使用 `-L``-D`(偶尔需要用 `-R`)去开启隧道是非常有用的,例如当你需要从一台远程服务器上访问 web。
@ -166,7 +167,7 @@
ControlPersist yes
```
- 部分其他的关于 ssh 的选项是安全敏感且应当小心启用。例如在可信任的网络中:`StrictHostKeyChecking=no``ForwardAgent=yes`
- 部分其他的关于 ssh 的选项是安全敏感的,而且应当小心启用。例如在可信任的网络中:`StrictHostKeyChecking=no``ForwardAgent=yes`
- 考虑使用 [`mosh`](https://mosh.mit.edu/) 作为 ssh 的替代品,它使用 UDP 协议。
@ -268,9 +269,9 @@ mkdir empty && rsync -r --delete empty/ some-dir && rmdir some-dir
- 拆分文件,查看 `split`(按大小拆分)和 `csplit`(按模式拆分)。
- 用 [`dateutils`](http://www.fresse.org/dateutils/) 中的 `dateadd`, `datediff`, `strptime` 等工具操作日期和时间表达式。
- 用 [`dateutils`](http://www.fresse.org/dateutils/) 中的 `dateadd``datediff``strptime` 等工具操作日期和时间表达式。
- 使用 `zless``zmore``zcat``zgrep` 对压缩过的文件进行操作。
- 使用 `zless``zmore``zcat``zgrep` 对压缩过的文件进行操作。
- 文件属性可以通过 `chattr` 进行设置,它比文件权限更加底层。例如,为了保护文件不被意外删除,可以使用不可修改标记:`sudo chattr +i /critical/directory/or/file`
@ -427,7 +428,7 @@ mkdir empty && rsync -r --delete empty/ some-dir && rmdir some-dir
- `lockfile`:使文件只能通过 `rm -f` 移除
- `logrotate`: 切换、压缩以及发送日志文件
- `logrotate` 切换、压缩以及发送日志文件
- `watch`:重复运行同一个命令,展示结果并高亮有更改的部分
@ -485,9 +486,9 @@ mkdir empty && rsync -r --delete empty/ some-dir && rmdir some-dir
- `iostat`:硬盘使用状态
- `mpstat`: CPU 使用状态
- `mpstat` CPU 使用状态
- `vmstat`: 内存使用状态
- `vmstat` 内存使用状态
- `htop`:top 的加强版
@ -505,7 +506,7 @@ mkdir empty && rsync -r --delete empty/ some-dir && rmdir some-dir
- `dmesg`:引导及系统错误信息
- `sysctl`: 在内核运行时动态地查看和修改内核的运行参数
- `sysctl` 在内核运行时动态地查看和修改内核的运行参数
- `hdparm`:SATA/ATA 磁盘更改及性能分析
@ -526,7 +527,7 @@ mkdir empty && rsync -r --delete empty/ some-dir && rmdir some-dir
- 用 `pbcopy` 复制任何命令的输出到桌面应用,用 `pbpaste` 粘贴输入。
- 若要在 OS X 终端中将 Option 键视为 alt 键(例如在上面介绍的 **alt-b**, **alt-f** 等命令中用到),打开 偏好设置 -> 描述文件 -> 键盘 并勾选“使用 Option 键作为 Meta 键”。
- 若要在 OS X 终端中将 Option 键视为 alt 键(例如在上面介绍的 **alt-b**、**alt-f** 等命令中用到),打开 偏好设置 -> 描述文件 -> 键盘 并勾选“使用 Option 键作为 Meta 键”。
- 用 `open` 或者 `open -a /Applications/Whatever.app` 使用桌面应用打开文件。

View File

@ -52,7 +52,7 @@ Notes:
- Learn at least one text-based editor well. Ideally Vim (`vi`), as there's really no competition for random editing in a terminal (even if you use Emacs, a big IDE, or a modern hipster editor most of the time).
- Know how to read documentation with `man` (for the inquisitive, `man man` lists the section numbers, e.g. 1 is "regular" commands, 5 is files/conventions, and 8 are for administration). Find man pages with `apropos`. Know that some commands are not executables, but Bash builtins, and that you can get help on them with `help` and `help -d`.
- Know how to read documentation with `man` (for the inquisitive, `man man` lists the section numbers, e.g. 1 is "regular" commands, 5 is files/conventions, and 8 are for administration). Find man pages with `apropos`. Know that some commands are not executables, but Bash builtins, and that you can get help on them with `help` and `help -d`. You can find out whether a command is an executable, shell builtin or an alias by using `type command`.
- Learn about redirection of output and input using `>` and `<` and pipes using `|`. Know `>` overwrites the output file and `>>` appends. Learn about stdout and stderr.
@ -84,7 +84,7 @@ Notes:
- For editing long commands, after setting your editor (for example `export EDITOR=vim`), **ctrl-x** **ctrl-e** will open the current command in an editor for multi-line editing. Or in vi style, **escape-v**.
- 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 see recent commands, use `history`. Follow with `!n` (where `n` is the command number) to execute again. There are also many abbreviations you can use, the most useful probably being `!$` for last argument and `!!` for last command (see "HISTORY EXPANSION" in the man page). However, these are often easily replaced with **ctrl-r** and **alt-.**.
- Go to your home directory with `cd`. Access files relative to your home directory with the `~` prefix (e.g. `~/.bashrc`). In `sh` scripts refer to the home directory as `$HOME`.
@ -119,9 +119,9 @@ Notes:
- Put the settings of environment variables as well as commands that should be executed when you login in `~/.bash_profile`. Separate configuration will be needed for shells you launch from graphical environment logins and `cron` jobs.
- Synchronize your configuration files (e.g `.bashrc` and `.bash_profile`) among various computers with Git.
- Synchronize your configuration files (e.g. `.bashrc` and `.bash_profile`) among various computers with Git.
- Understand that care is needed when variables and filenames include whitespace. Surround your Bash variables with quotes, e.g. `"$FOO"`. Prefer the `-0` or `-print0` options to enable null characters to delimit filenames, e.g. `locate -0 pattern | xargs -0 ls -al` or `find / -print0 -type d | xargs -0 ls -al`. To iterate on filenames containing whitespace in a for loop, set your IFS to to be a newline only using `IFS=$'\n'`.
- Understand that care is needed when variables and filenames include whitespace. Surround your Bash variables with quotes, e.g. `"$FOO"`. Prefer the `-0` or `-print0` options to enable null characters to delimit filenames, e.g. `locate -0 pattern | xargs -0 ls -al` or `find / -print0 -type d | xargs -0 ls -al`. To iterate on filenames containing whitespace in a for loop, set your IFS to be a newline only using `IFS=$'\n'`.
- In Bash scripts, use `set -x` (or the variant `set -v`, which logs raw input, including unexpanded variables and comments) for debugging output. Use strict modes unless you have a good reason not to: Use `set -e` to abort on errors (nonzero exit code). Use `set -u` to detect unset variable usages. Consider `set -o pipefail` too, to on errors within pipes, too (though read up on it more if you do, as this topic is a bit subtle). For more involved scripts, also use `trap` on EXIT or ERR. A useful habit is to start a script like this, which will make it detect and abort on common errors and print a message:
```bash
@ -151,7 +151,7 @@ Notes:
- Use `man ascii` for a good ASCII table, with hex and decimal values. For general encoding info, `man unicode`, `man utf-8`, and `man latin1` are helpful.
- Use `screen` or [`tmux`](https://tmux.github.io/) to multiplex the screen, especially useful on remote ssh sessions and to detach and re-attach to a session. `byobu` can enhance screen or tmux providing more information and easier management. A more minimal alternative for session persistence only is `dtach`.
- Use `screen` or [`tmux`](https://tmux.github.io/) to multiplex the screen, especially useful on remote ssh sessions and to detach and re-attach to a session. `byobu` can enhance screen or tmux providing more information and easier management. A more minimal alternative for session persistence only is [`dtach`](https://github.com/bogner/dtach).
- In ssh, knowing how to port tunnel with `-L` or `-D` (and occasionally `-R`) is useful, e.g. to access web sites from a remote server.
@ -221,6 +221,8 @@ Notes:
- Know about `tee` to copy from stdin to a file and also to stdout, as in `ls -al | tee file.txt`.
- For more complex calculations, including grouping, reversing fields, and statistical calculations, consider [`datamash`](https://www.gnu.org/software/datamash/).
- 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`.
- You can set a specific command's environment by prefixing its invocation with the environment variable settings, as in `TZ=Pacific/Fiji date`.
@ -274,7 +276,7 @@ mkdir empty && rsync -r --delete empty/ some-dir && rmdir some-dir
- File attributes are settable via `chattr` and offer a lower-level alternative to file permissions. For example, to protect against accidental file deletion the immutable flag: `sudo chattr +i /critical/directory/or/file`
- Use `getfacl` and `setfacl` to save and restore file permissions. For example:
- Use `getfacl` and `setfacl` to save and restore file permissions. For example:
```sh
getfacl -R /some/path > permissions.txt
setfacl --restore=permissions.txt
@ -320,7 +322,7 @@ mkdir empty && rsync -r --delete empty/ some-dir && rmdir some-dir
- Use `dmesg` whenever something's acting really funny (it could be hardware or driver issues).
- If you delete a file and it doesn't free up expected disk space as reported by `du`, check whether the file is in use by a process:
- If you delete a file and it doesn't free up expected disk space as reported by `du`, check whether the file is in use by a process:
`lsof | grep deleted | grep "filename-of-my-big-file"`
@ -538,6 +540,10 @@ These are items relevant *only* on OS X.
## Windows only
These items are relevant *only* on Windows.
- On Windows 10, you can use [Bash on Ubuntu on Windows](https://msdn.microsoft.com/commandline/wsl/about), which provides a familiar Bash environment with Unix command line utilities. On the plus side, this allows Linux programs to run on Windows. On the other hand this does not support the running of Windows programs from the Bash prompt.
- Access the power of the Unix shell under Microsoft Windows by installing [Cygwin](https://cygwin.com/). Most of the things described in this document will work out of the box.
- Install additional Unix programs with the Cygwin's package manager.
@ -554,6 +560,10 @@ These are items relevant *only* on OS X.
- You can perform and script most Windows system administration tasks from the command line by learning and using `wmic`.
- Another option to get Unix look and feel under Windows is [Cash](https://github.com/dthree/cash). Note that only very few Unix commands and command-line options are available in this environment.
- An alternative option to get GNU developer tools (such as GCC) on Windows is [MinGW](http://www.mingw.org/) and its [MSYS](http://www.mingw.org/wiki/msys) package, which provides utilities such as bash, gawk, make and grep. MSYS doesn't have all the features compared to Cygwin. MinGW is particularly useful for creating native Windows ports of Unix tools.
## More resources
- [awesome-shell](https://github.com/alebcay/awesome-shell): A curated list of shell tools and resources.

View File

@ -43,7 +43,8 @@ roles:
xuchunyang: translator (zh)
stevenlordiam: translator (zh)
Armour: translator (zh)
stepan0904: translation maintainer (uk)
stepan0904: translation (uk)
dmytro: translation maintainer (uk)
francescomalatesta: translation maintainer (it)
lsrom: translation maintainer (cs)
ericguirbal: translation maintainer (fr)