Dažniausiai naudojamos komandos

2013 Birželio 6 d  •  Remigijus Jarmalavičius  •  Atviras kodas

Jau kelintą kartą manęs klausia kaip gauti dažniausiai naudojamų
komandinėje eilutėje komandų sąrašą. Nors tokių skriptukų galima tikrai
rasti daugybę internete ir nieko čia naujo, tačiau surasti tų komandų
paaiškinimus būna sunku. Todėl šį straipsnį skiriu tiems, kas ne tik
nori pažiūrėti populiariausių komandų sąrašą, bet ir suprasti kaip tai
daroma.

Kaip minėjau, skriptų galite rasti internete daugybę. Laimei, kad
dauguma jų bus panašios į šią, todėl supratus mano pavyzdinę eilutę -
tikrai suprasite ir kitas. Taigi turime tokią komandinę eilutę kuri
duoda rezultatą visų komandų pagal panaudojimų kiekį sąrašą. Norint
atrinkti tik 10 populiariausių, užtektų prirašyti gale: | head -n 10.

Gauname išvestį (pavyzdys):

26 ls -alh
20 cd Parsiuntimai
17 ssh localhost 'mysqldump'

Kaip jau akivaizdu, pirmiausiai gauname visą istoriją su komandomis
komandos history dėka. Ši istorija yra pagal datą (paskutinis įrašas
išvestas šios komandos rodo paskutinę vykdytą komandą). Tačiau visos
šios komandos yra prefiksuotos numeriu. Šis numeris reiškia komandos
panaudojimo numerį. 3 ls reikštų, kad komanda ls buvo trečia istorijoje
(trečia komanda kurią rašėte). Tačiau mums numerių nereikia. Kadangi
history nepateikia jokių pagalbinių argumentų, kurie leistų matyti tik
komandų sąrašą, tai tokį komandų filtravimą padarysime patys su
awk {print $2} komanda.

Taigi jau turėsime tokį sąrašą (pavyzdys):

cd Parsiuntimai
ls -alh
ls -alh
[..]

Komandos mūsų istorijoje gali būti sudėtinės. T.y. galime turėti komandą
kuri susideda iš kitokių komandų, pavyzdžiui:

Kaip matote, komanda pavykdo mysqldump komandą nutolusiame serveryje ir
rezultatą perduoda į vietinę komandą mysql. Taigi, mūsų trečioji komanda
awk ‘BEGIN {FS=”|”}{print $1}’ leidžia atfiltruoti tokias sudėtines
komandas ir palikti tik pirmąsias (jų „pradžias“). Jeigu žiūrėti tik į
pavyzdį, tai būtų prisijungimas prie nutolusio serverio ir mysqldump
pavykdymas. Jeigu savo TOP’e norite matyti pilną komandą (su visomis
sudėtinėmis logikomis), tai tiesiog pašalinkite šio filtravimo komandos
dalį.

Vėliau atfiltruotą komandų sąrašą išrikiuojame pagal pavadinimą sort
pagalba. Norėdami sužinoti kiek komanda kartų buvo minėta išrikiuotame
pagal pavadinimą sąraše, pavykdome uniq -c komandą. Ji duos komandos
pakartojimų skaičių ir komandos pavadinimą. Rezultatas kurį turėsime
(pavyzdys):

17 ssh localhost 'mysqldump'
26 ls -alh
20 cd Parsisiuntimai

Kadangi toks sąrašas bus išrikiuotas pagal pavadinimą, bet ne pagal
skaičių kiek kartų jis pasikartojo, tai jis mums jokios naudos neduos.
Taigi, sąrašą galime dabar išrikiuoti komandos sort -rn pagalba.
Argumentas -n nurodo, kad rikiuojama bus ne abėcėlės, bet skaičių
tvarka. Kadangi mūsų visa išvestis prefiksuota skaičiais, tai komanda
pagal tą skaičių išrikiuos visas eilutes. Rikiavimas bus atliktas
didėjimo tvarka (viršuje bus rečiausiai pasikartojančios operacijos, o
apačioje dažniausiai), o pridėjus argumentą -r šį sąrašą apversime
aukštyn kojomis.

Mano dažniausiai naudojamos komandos

Galbūt žinote paprastesnį ir trumpesnį komandos užrašą? Jeigu taip, tai
pasidalinkite su kitais!