Šiandien teko dalyvauti diskusijoje su vienu pažįstamu. Žmogui atrodė visiškai nesuprantama, kaip ir kodėl gali būti patogu naudoti komandinę eilutę. Žinoma galvoje turiu Linux šeimos komandinę eilutę, nes kalbant apie Windows’us, aš ir pats nežinau atsakymo. Klausimas yra tikrai suprantamas ir logiškas. Operacinių sistemų progresas vyko nuo komandinės eilutės perėjus prie grafinės vartotojo sąsajos, o ne atvirkščiai. Tad grįžimą atgal prie juodo lango su baltos spalvos tekstu galbūt kažkas sieja su mobilaus telefono keitimu į laidinį arba automobilių keitimą į arkliais pakinkytus vežimus.
Tačiau tai klaidingas įspūdis! Komandinės eilutės pagalba galima atlikti praktiškai viską. Nesiruošiu jūsų mokinti kopijuoti failų ar kurti katalogų, nes tikriausiai tą ir taip puikiai mokate. Visa komandinės eilutės jėga slypi ne kur nors anapus, o kelių komandų (programų) jungime bendram rezultatui gauti. Tai reiškia, kad vienos programos pateiteiktas rezultatas gali būti panaudotas kaip kitos programos duomenys. Pavyzdžiui komandos ls pateiktą failų ir katalogų sąrašą galima surikiuoti su komanda sort:
ls | sort
Nelabai praktiškas pavyzdys, tiesa? Na, ls ir be sort pateikia rezultatus išrikiuotus pagal abėcėlę, tačiau ne į tai norėjau atkreipti dėmesį. Tokiu būdu galima jungti daugiau nei dvi komandas ir pasiekti dangų stulbinamų rezultatų. Pabandysiu pateikti kiek praktiškesnį pavyzdį. Daugelis mūsų siunčiamės fimus ir TV serialus, naudodamiesi Torrent protokolu. Daugelis siunčiamų filmų (ar kitų didelių failų) būna suskaldyti į nedidelio dydžio rar archyvus po 14,xx Mb. Norint žiūrėti filmą, reikia pirmiausiai jį išsipakuoti iš archyvų. Jei tai vienas filmas – problemų nekyla. Tačiau jei parsisiuntėte TV serialo sezoną, kurį sudaro keliolika epizodų, išpakavimas naudojantis grafine vartotojo sąsaja nebus patogus: reiks landžiot po subkatalogus ir iš kiekvieno išpakuoti po failą. Čia mums gali padėti komandinė eilutė:
find ~/video/The.Shield.S01/ -name "*.rar" -exec unrar x {} ~/Desktop/shield/ \;
Čia kataloge ~/video/The.Shield.S01 ieškome archyvų, kurie pasibaigia plėtiniu .rar. Kaip žinia, kitos suskaldyto rar archyvo dalys žymimos plėtiniais .r01, .r02 ir t.t. Suradę reikiamus archyvus juos išpakuojame į katalogą ~/Desktop/shield. Įvykdę šią komandą einame gerti arbatos ar užsiimti kitais darbais kol išpakavimas bus atliktas. Jaučiat jėgą?! :-) Čia panaudojome dvi programas: find ir unrar. Tai akivaizdus pavyzdys, rodantis, kaip kelių programų kombinavimas gali padėti atlikti užduotis.
Norintiems įvaldyti komandinę eilutę galiu duoti vieną patarimą. Turėdami kažkokią užduotį, nedirbkite juodo darbo – nedarykite visko paprastai. Geriau paieškokite informacijos kaip parašyti gudresnę komandinę eilutę kuri visą darbą atliks už jus. Juodas darbas, pvz. tų pačių veiksmų kartojimas kiekviename kataloge atskirai užims tiek pat laiko, keik informacijos susiradimas kaip atlikti tą darbą automatizuotai. Be to gausit +1 tašką prie savo “hacking” skill’o. Nežinantiems nuo ko pradėti, galiu rekomenduoti LinuxCommand.org tinklapį.
{ 1 trackback }
{ 24 comments… read them below or add one }
Iš esmės – visiškai pritariu, tačiau nereikia pamiršti, kad ne visi kaupia tą hakinimo skill’ą :) Terminalas vistiek yra skirtas “drąsesniems”, o Linux, manau sutiksi, dabar gali naudoti ir močiutės :D
Prisipažinsiu: komandinę eilutę naudoju vien dėl to, kad taip jaučiuosiu g33k’iškesnis :) O už tą antrą tip, tai didelis dėkui – palengvinai gyvenimą ;)
Armandai, negaliu su tavim nesutikti – kiekvieno poreikiai skirtingi. Tačiau yra žmonių, kurie lyg ir norėtų naudotis terminalu, tačiau galvoja, kad geriau atliks juodą darbą įprastai, o išmoks vėliau. Tas vėliau dažniausiai neateina :-)
Karoli, aš komandinę eilutę naudojau kai reikėdavo atlikt neįprastus darbus. Dabar žiūriu, kad kuo toliau tuo labiau ji man “limpa”.
Windows’ų cmd.exe irgi galingas.
(for /f “usebackq delims=” %%F in (`dir/s/b/a/a-d %Root%:`) do echo %%~zF %%F) > “%List%”
Kaip Windows’ų vartotojui šitie pavyzdžiai atrodo kažkaip labai jau menkai. :) Turiu omeny, kad ir tai antrajai užduočiai atlikti, kuri čia vaizduojama kaip hakeriškas triukas :), Windows grafinėje aplinkoje užtenka kelių pelės spragtelėjimų:
Start -> Search -> For files and folders -> All files and folders.
Įvesti “*.rar” ieškomo failo vardo lauke ir “Look in” nurodyti parsiųstų serialų katalogą. Paieška trunka akimirką, tada pažymim paieškos rezultatus ir kontekstiniame meniu pasirenkame “Extract to…”
Ir aš nežinau, kaip Linux grafinėse aplinkose yra įgyvendinta failų paieška. Bet tik norėjau išsakyti nuomonę, jog
1) tinkamai įgyvendinti grafinėje aplinkoje įrankiai panašioms užduotims atlikti visada bus pranašesni už komandinę eilutę. Juk rašyti komandą – tai kurti, o pasirinkti iš matomų galimybių yra lengviau nei kurti;
2) daugumai panašių užduočių jau yra sukurta patogių grafinių įrankių; retai kada jų neužtenka ir pasijaučia komandinės eilutės privalumai;
3) galbūt Linuxuose komandinę eilutę naudoti ir yra daug patogiau, bet tada reiktų kitokių pavyzdžių. :)
Ir aš ne prieš komandinę eilutę, kaip apskritai priemonę lyginant su pelės tampymu ir maigymu. Aš kaip tik labai mėgstu pvz. Ubiquity pluginą Mozillai, nes tai labai pagreitina darbą. Bet vėlgi, Ubiquity duoda spėjimus komandai užbaigti – leidžia pasirinkti, o tai yra kiekvieno vartotojo svajonė. Kuo mažiau žinoti ir kuo daugiau padaryti. Tad pagrindinis komandinių eilučių minusas bet kokioje platformoje, mano manymu, yra tai, kad reikia daug atsiminti ir daug susikaupimo sueikvoti formuojant teisingą sintaksiškai komandą.
Labai jau į lankas nuklydau, sorry, bet norėjau pasakyti, kad su failais įprastus kasdienius veiksmus šiais laikais galima atlikti daug patogiau. :)
Einam varžybų iš dėžės alaus, kas greičiau padarys 100 pakatalogių direktorijų medį, ar aš su cmd ar tu su pelyte ir create folder ;]
@Paulius: „tinkamai įgyvendinti grafinėje aplinkoje įrankiai panašioms užduotims atlikti visada bus pranašesni už komandinę eilutę“
Grafiniai įrankiai visada turi ribotas galimybes. Kad juos sukurti, programuotojas turi iš anksto atspėti ką vartotojas norės daryti ir tada tam reikalui surašyti programines instrukcijas.
Žingsnelis į šoną ir vartotojas jau ieško kaip sukurti skriptą nestandartiniam savo norui. O juk skriptas ir komandinė eilutė tikri „pusbroliai“ :)
Komandinė eilutė daug lankstesnė už grafinę sąsają. Tinka net paprastoms užduotims :)
pipes’ai – tikrai galingas dalykelis. Teko rasyti mini shell’a, kuris pipes’us apdoroja pats, is esmes tai tikrai nera sudetingas dalykelis, o suteikia tiek galios. Neblogas irasas ;)
Paulis (ar Paulius?), nesakiau, kad be komandinės eilutės to padadryti negalima. Tiesą sakant galvojau ir apie tavo pasiūlytą būdą. Tačiau pavyzdžio esmė buvo parodyti kaip galima naudoti kelias komandas užduočiai atlikti. Nemanau, kad geresnis pavyzdys būtų keliasdešimties eilučių skriptas. Nepatinka archyvų išpakavimas? Galim imti kitą veiksmą: paveiksliukų dydžio keitimą, duombazių eksportavimą ir t.t. O kas jei kontekstiniam meniu nėra tavo norimos komandos (kaip Extract here)? Kaip kiras ir sakė, grafinė sąsaja vartotojui leidžia atlikti tik tai, kas realizuota. O tai jau apribojimas.
Ne Paulius, teisingai aš savo vardą rašau, nors gal ir neįprastai atrodo. :)
to Evil:
tu tikrai laimėtum ir tarkim tavo pavyzdys vaizdžiau parodo komandinės eilutės galią nei pateiktieji straipsnyje. +
to kiras:
aš rašiau “panašioms užduotims atlikti”, taigi turėjau omeny kasdienius nesudėtingus veiksmus. Ir, kaip žinia, programuotojai jau atspėjo labai daug vartotojų norų. O žingsnelių į šoną ne taip jau dažnai ir būna tūlo namų vartotojo gyvenime tvarkant failus. Ko nepaneigsiu – atsiradus nestandartiniam norui labai sveika scriptą ar net programėlę susikurpti, jei ateityje dažnai reiks tai daryti. :)
to Pawka:
Paveiksliukų dydžio keitimui yra labai patogių grafinių įrankių ir jie jau iškart yra geresni už komandinę eilutę vien dėl to, kad yra grafiniai, o dirbam juk su grafiniais objektais, nenoriu plėstis įrodinėdamas akivaizdų dalyką.
Duombazių neeksportavau niekada, tad sakykim sutinku, tu sakai – tu žinai, gal taip ir patogiau. :)
Aš norėjau pasakyti, kad grafinė sąsaja yra progresas, juk niekas vim’e sudėtingų programų nerašo, o naudoja IDE, niekas nekoreguoja nuotraukų rašydami komandas, nenaršo interneto terminalinėmis naršyklėmis, nors tai ir yra visai fun tarp kitko :D. Žmonės tiesiog renkasi patogumą, jeigu įmanoma. Kuo daugiau įrankių suprogramuota bus, tuo mažiau ji bus ribota. Juk komandų irgi yra ribotas kiekis ir jų galimybės taip pat ribotos, nors ir daugiau laisvės nestandartinių uždavinių sprendimui.
Tavo pavyzdžių esmė buvo parodyti, koks geras dalykas yra tai, kad galima vienos programos rezultatus panaudoti kaip kitos argumentus. Su tuo sutinku 100 procentų, bet to nereiktų tapatint su komandine eilute. :) Aš norėjau įrodyti, kad grafinė aplinka yra patrauklesnis būdas nei komandinė eilutė žmogaus-kompiuterio sąveikoje. Taigi vienas apie ratus, kitas apie batus labiau, bet diskusija įdomi. :D
Štai kas gaunasi, kai bandai kuo daugiau įrankių suprogramuoti. Grafinę sąsają perprasti tampa taip pat sunku, kaip išmokti visas komandas mintinai :)
Kas geriau, grafinė ar komandinė aplinkos, trivialus klausimas. Tarkim, AutoCAD-e gali spaudyti mygtukus arba viską valdyti komandomis. Spėk, ką naudoja pradinukai o ką profesionalai?
Norėdami nemaišyti batų su ratais, turėtume susitarti, kokiai situacijai / kokiam vartotojui taikom savo teiginius.
„Paveiksliukų dydžio keitimui … yra geresni už komandinę eilutę … nenoriu plėstis įrodinėdamas akivaizdų dalyką.“
Ne toks jau akivaizdus dalykas kaip gali pasirodyti. ImageMagic, turbūt dažniausiai naudojamas grafikos apdorojimui internete įrankis, būtu bevertis jei neturėtu komandinės sąsajos. Paprastutis pavyzdys, „stikliniai“ rėmeliai paveiksliukui:
convert thumbnail.gif -raise 8 raised_button.gif
Jei reikia kaip nors apdoroti/ konvertuoti/ kopijuoti/ pervardinti šimtus paveiksliukų, grafinė sąsaja bus didžiausias stabdis :)
Bet tuo pačiu būtu kvaila teigti, kad dizaineris gali kurti naudodamas vien komandas.
Reik stengtis dažniau rašyt įrašus, kurių turinys iššaukia dvi opozicines grupuotes ginti savas pozicijas :-) Šiaip kalbant apie įrašo tikslą – jį taikiau ne žmones nuo Windowsų atmušt, o siekiau paskatint pradedančius Linux vartotojus išmokti naudotis komandine eilute. Pauli, dėl VIM’o naudojimo tai tu smarkiai klysti, bet čia jau atskira tema. O resizinant (ar kitaip standartiškai apdorojant) didelį kiekį paveiksliukų tikrai nėra būtina jų visų peržiūrėt – čia gi automatinis darbas. Tad tokiam darbui grafiniai įrankiai nėra būtini. Pasirodo tai visgi nėra taip akivaizdu, kaip tau pasirodė, ar ne? :-)
Neteigiu, kad grafinė sąsaja yra niekam nereikalinga. Ji puikiai tinka atlikti veiksmus. Tačiau šis būdas tikrai nėra pats greičiausias.
Labai pompastiškas rašinėlis :) Na šiaip aš irgi pritariu, kad komandinė eilutė dažnai prideda patogumo ypač, kai moki ja naudotis ir turi kokią dažnai pasikartojančią užduotį, kurią nori automatizuoti. Nors pats asmeniškai, jei tik žinau kokį patikimą įrankį, tai stengiuos naudoti grafinį interfeisą.
Neseniai teko Linux aplinkoje sumažinti daugiau nei 400 knygos puslapių ir viska sudėti į e-book`a pdf formato. Manau be komandinės eilutės būtų tekę užtrukti tikrai daugiau laiko. Tiesiog reikia žinoti, kada naudoti kokį “įrankį” užduočiai atlikti. Šiuo atveju su grafinė aplinka būtų užtrukę žymiai ilgiau.
Pirmiausia reikėtų sutarti apie kokį vartotoją čia šnekam. ar apie profesionalą, dirbantį su 2-3 programom 8 valandas per dieną, ar apie paprastą žmogelį, kuriam kiekvieną dieną atsiranda vis kiti poreikiai. Pirmasis žinoma darbui spartinti naudoja komandas, bet antrąjam išmokti ir prisiminti daugybę komandų yra nesamonė ir bereikalingas laiko gaišimas. Žinoma galima kiekvieną kartą prireikus padaryti didesnį darbą eiti į netą ir ieškoti info apie tai ką gi reikėtų sumaigyt, bet ar ne paprasčiau yra per tą patį laiką susirasti specializuotą programėlę, kuri atliks už mus visą juodą darbą ir kitą kartą neapkrauti sau galvos? Nereikia kimšti sau į makaulę nereikalingos informacijos už mus tai daro progresas (pagalvokit kiek kartų mažiau telefono nr atsimenam atsiradus mobiliam tel. su užrašų knyga:) Tarp kitko neribotą kiekį nuotraukų sumažinti-padidinti su spec įrankiu vos keliais paspaudimais galėtų net mano bobutė :)
egi2ks, savaime suprantama, kad kiekvienas kompiuterio vartotojas neprivalo mokėti naudotis terminalu. Lygiai tai pat, kaip ir neprivalo naudotis Linux operacine sistema. Jei žmogus nenori mokintis naudotis komandine eilute – aš jį pilnai suprantu. Jam to tiesiog nereikia, jam neįdomu, jis turi kitų užsiemimų ir t.t.. Lygiai taip pat man nereikia mokėti kiniečių kalbos, nes man tai neaktualu. Tad net neverta diskutuoti šia tema apie vartotojus, kuriems tai neaktualu. O tavo bobutė tai šūstra, manau netrukčiau ją pripratinti prie terminalo :-)
Švelniai tariant, komandinė eilutė čiulpia.. Dabar naudojam SimpleScalar ant Linux ir ji neturi GUI.. tai reik parašyti 5 eilučių komandą, kad įvydyti paprasčiausia moduliaciją.. kas dar labiau užknisa, tai reik rašyti pilnus adresus arba įsivesti kažkokius kintamuosius.. tarkim paleist paprasčiausiai moduliacijai reik nurodyt patį simplescalar, tada kelia iki config bylos, tada kelia iki rez bylos ir tada kelia iki apkrovos programos ir tada papildomus parametrus.. praleisi kokią raidę, ir pz..
Dabar įsivaizduokim, kad turėtume GUI, kur su kokiu import susikrautume visus config, pasirinktume moduliaciją, išmestų save lentelę, kur išsaugoti rezultatus, ir viskas. :)
Tai interfeisą galima gi pasirašyt, o vat jau sukurtam interfeisui papildomo funkcionalumo nebepridėsi jei neturi sourco.
Kiekvienas useris neturi ką veikt, tik pats pasidaryt GUI. :DD Maniau, čia diskusija buvo terminalo programos vs programos su GUI.
Čia diskusija buvo apie terminalo pliusą – kelių komandų naudojimą vienam uždaviniui spręsti jungiant jas per pipes’us arba per parametrus. Tavo problemoje to nėra. Be to ir Linuxas, o tuo labiau ir SimpleScalar yra ne kiekvienam useriui. Aš ne kartą esu rašęsis interfeisus. Be to interfeisas nebūtinai turi būti tik GUI, galima ir command line.
Komandinę eilutę tikriausiai naudoju daugiau nei kokius nors GUI.
Gerai įvaldžius vieną ar kitą komandą ilgai nesukant galvos galima labai paprastai atlikti visą eilę bet kokių užduočių, apjungiant kelias reikiamas komandas. Tuo tarpu su GUI, nuolat reikia ieškoti padarytų įrankių. Todėl kartą pasimokyti dažnai užima mažiau laiko, nei nuolat ieškoti.
@Originalas
Ar bandei kada nors paspausti TAB klavišą? Būtent TAB klavišo pagalba, labai greitai galima išraityti ilgiausias komandas, kuriose joks simbolis nebus paleistas, nes visi keliai ir kintamieji bus patvirtinti TAB klavišo paspaudimu. Aš pats naudoju zsh shellą, tai jis TAB klavišo pagalba užbaigia praktiškai viską… :)
Pabaigai dar nektodas iš asmeninės patirties.
Mano bendradarbis, užkietėjęs GUI naudotojas kartą pastebėjo, kad viename kataloge prisikupė labai daug failų, keliolika tūkstančių. Tai jis atsidarė Windows Explorer, atidarė tą katalogą su daugybe failų. Kol visi failai buvo atvaizduoti, teko palaukti kelias minutes. Toliau jis paspaudė Ctrl+A, kad pažymėtų visus failus, vėl teko palaukti kelias minutes, kol vizuliai bus sužymėti visi failai. Ir galiausiai jis paspaudė Del, kad ištrintų visus failus, tas vėl truko kelias minutes.
Tuo tarpu naudojantis Linux komandine eilute užtektų įrašyti vieną komandą: rm -rf *
Nors rašinys apie dviejų komandų sujungimą, bet paskutinis sirex komentaras ir pavyzdys jame – geriausias čia išsakytas komandinės eilutės privalumas prieš grafinį interface’ą.
100 katalogų dažniausiai neprireikia. 1000 nuotraukų sumažinti, o po to viską sudėti į pdf su grafine programa galima taip pat greitai (iki 10 pelės paspaudimų), kaip ir su komandine eilute (su sąlyga, kad iš pradžių niekas nežino kokią komandą ir kokią programą reikia naudoti)..
True! True!