CLI - Hasznos parancsok 2

Már volt több olyan cikk, amiben a telepítéseket parancssorból végeztük és egy olyan, amiben egyszerű, de hasznos parancsokat ismertünk meg.

Ma ismét vegyes témával foglalkozunk, így érdemes a neked hasznos információkat lementeni, mondjuk az ismertetett Zim-be, ahol rendszerezetten tudjuk tárolni őket.

Én nagyon lusta vagyok, vagyis nagyon nem szeretem az ismétlődő, ciklikusan elvégezendő munkát. Azért van a számítógép, hogy ezeket levegye a vállamról. Ilyen az adatmentési, a szemét purgálási feladat, de egy tucat más rutinfeladatot is lehetne mondani. Ideális lenne ha ezt időzíteni tudnánk és ciklikusan le lehetne futtatni egy-egy adott feladatot. Erre van lehetőség, és pontosan két dolog kell az időzített feladatok elvégzésére.

Cron és egy script, ami a feladatot leírja a gépnek.

Ez a kettő így együtt biztosan sok kezdőt menekülésre késztet, de ha van tíz perced elolvasni, akkor már meglátod, hogy ez a világ legegyszerűbb feladata MX Linux alatt.

Script írás MX Linux alatt

És természetesen más Linux alatt is pont így megy, de az elérési utak stb., lehetnek mások.

Nagyon egyszerűen megfogalmazva a script egy futtatható parancsállomány, egy kis program. Gyakorlatilag egy sima, egyszerű szövegfájl.

Első lépésben létre kell hozni egy üres szövegfájlt, amit bármely egyszerű szövegszerkesztővel megtehetsz. Én MX Linux alapértelmezett geany programját használom grafikus feleleten, mcedit vagy nano megy a konzolban. Majd adj neki egy értelmes nevet, hogy tudd a későbbiekben, hogy mit is fog ez a script csinálni. Praktikus, ha olyan rövid, de megjegyezhető névvel mentesz, amit egyszerűen be tudsz gépelni és így különösebb gondolkodás nélkül futtatni tudod. Legyen most a ment.sh. Ne adj meg olyan nevet, amelyen már van „gyári” MX Linuxos parancs! Ne használj ékezeteket és különleges karaktereket, jobb a békesség!

Elérési út a MX Linux alatt

Majd az üres fájlt be kell rakni az elérési útvonalba. Ez első olvasatra nagyon bonyolultnak hangzik, de csak az első lesz nehéz, a többi rutin.

Én erre egy szabvány megoldást használok.

A saját könyvtárban (home/laci) létrehoztam egy /bin könyvtárat és minden olyan futtatható állományt ide teszek, amit bárhonnét el akarok érni és nem szeretném megadni neki az egész elérési utat MX Linux alatt. A név maga lényegtelen, de itt sem használnék ékezeteket és különleges karaktereket.

Ez kisebb magyarázatot igényel: az MX Linux csak azokat a parancsokat tudja a parancsnok beírásával futtatni, melyeket olyan könyvtárban vannak, amiket ő is ismer. A szabványosan (apt-get install stb.) telepítetteket ilyen könyvtárba teszi, automatikusan. Ezért nem volt eddig a parancsokkal gond. Ha nem ezekben a könyvtárakban található egy parancs, akkor három megoldásunk van MX Linux alatt:

Megadjuk a teljes elérési utat: /home/laci/hovaraktad/ment.sh Belépünk a könyvtárba cd /home/laci/hovaraktad/ majd ./ment.sh helyben futtatjuk Megmagyarázzuk a rendszernek, hogy ezentúl a /home/laci/bin/ -ben is legyen szíves keresni parancsokat A harmadik megoldást szeretem, hiszen, ha ezt megteszem, akkor már oda bármennyi saját scriptet, programot rakhatok. Így, ha mentem ezt a könyvtárat, akkor az összes saját parancsom mentésre kerül, és nem vész el semmi.

Ezt nagyon egyszerűen lehet megtenni.

geany /home/laci/.bashrc

Azaz szerkeszteni kezdem az adott fájlt. Természetesen azzal szerkeszted, amivel akarod, én a nano vagy geany használom. Disztribúciótól függően elég eltérő tartalommal, de létezik ez a fájl. MX Linux alatt biztosan megtalálható! Ne piszkálj benne semmi olyant, amit nem tudsz, hogy az mi lehet.

Olyan sort keress, hogy PATH= ebben adod meg az elérési utakat.

Nekem ilyen:

PATH=$PATH:/sbin:/usr/sbin:/home/laci/bin

Azaz már megadtam neki, hogy a

/sbin /usr/sbin /home/laci/bin

mappákba keresse a parancsokat. Majd mentsd is le. Bár felesleges itt is elismétlem: mielőtt rendszerfájl írsz át, azt mentsd le, vagy másold át, vagy nevezz át egy másolatot, de legyen olyan, amihez visszatérhetsz, ha nagyon nem az jön ki, amit akartál.

OK, már bemásoltad, majd adj neki futtatási vagyis végrehajtási jogot. Bármely fájlkezelőben a fájl tulajdonságnál megadhatod. Aki a SpaceFM-et használja nézze meg a teljes lehetőséget, mert igencsak kényelemesen adhatunk meg mindenféle jogokat, akár rekurzív is, vagy root-ként is, ha éppen nem a saját fájljainkat állogatjuk át.

Vagy a /bin könyvtárban add ki ezt:

chmod +r ment.sh

Ha nem tudod mit csináltál, akkor chmod man oldala, vagy a -helpje... Majd nyisd meg ezt a ment.sh-t és írd be az első sorba pontosan ezt:

#!/bin/bash

Ezzel elmondjuk az MX Linux rendszerünknek, hogy bizony ezt a bash parancsértelmezőben legyen szíves futtatni. Fontos, ha nem abban akarod (pld. egy python program) akkor mást kell beírni, de nekünk most ez kell.

Ezután már nincs más feladatunk, mint szépen, egymás után felsorolni, mit is kellene csinálni a gépnek. Most a mintában előbb kitöröljük a szemetest az adott meghajtón, majd mentést csinálunk róla. Mindegyikről volt szó (mentés, kuka purgálás), ha ez idegen, akkor olvasd el.

#!/bin/bash

rm -rf /media/laci/30Mentes/Adatok/.Trash-1000
rdiff-backup /media/laci/30Mentes/Adatok/ /media/laci/120Mentes/Adatok/

Természetesen neked az elérési utak mások lesznek! Illetve itt is kihangsúlyozom: az rm ilyen paraméteresével vigyázz, mert kérdezés nélkül kitöröl mindent!

Majd le kell menteni.

Ahogy látni a script nagyon egyszerű, de azért pár rutint feladatunk van előtte. Minden parancsot előbb ki kell próbálni parancssorban. Írd be a terminálba, futtasd le, majd győződj meg arról, hogy azt teszi amit akarsz és nem mást. Ha nincs hibaüzenet és az történik, amit akarsz, akkor másod be a ment.sh-ba. Most gyakorlatilag semmi olyan megoldást nem tettünk a scriptbe, amivel kontrollálhatnánk a futását. Nincs benne hibakezelés sem. Így kifejezetten fontos a precíz munka.

A felsorolt feladatokat a script egymás után hajtja végre, így a sorrendre figyelj, ha van annak jelentősége. Itt van: előbb kell a szemetet törölni, majd azután menteni a többit. Ezután ha kiadjuk a ment.sh parancsot, elvégzi a feladatot. Most két egyszerű lépést, de ugyanígy készül el egy olyan is, ami sok lépésből áll és egyesével begépelni unalmas lenne a sok parancsot.

Időzített feladatok az MX Linux alatt

Cron és a crontab. Ezeket lehet(ne) használni, de én egy másik, de ezekre épülő megoldást mutatok. A cron egy időzítő programocska, amiben meg tudod adni a programot és azt, hogy mikor futtassa le. Nagyon jól lehet kalibrálni, de kell egy kis gyakorlat hozzá. Ha érdekel a téma a cron-ról itt olvashatsz egy nagyszerű leírást.

Ízelítőül két példa a fenti oldalról.

Szeretnénk egy alfa nevű programot óránként lefuttatni a cron segítségével a háttérben: 1 * * * * /usr/local/bin/alfa (magyarázat: minden megkezdett óra első percében, a hónap minden napján fusson le az alfa)

Minden hónapban háromszor futtassuk a beta nevű programot: 40 10 2,12,22 * * /usr/local/bin/beta (magyarázat: 10 óra 40 perckor, a hónap minden második, tizenkettedik és huszonkettedik napján)

Látható, hogy nagyon jól beállítható a crontab-ba a feladatok ütemezése. De nekem ez nem kell! Természetesen megoldható így is, de én egy egyszerűbb megoldást használok.

Van az MX Linux alatt a gyökérben a

/etc/cron.hourly /etc/cron.daily /etc/cron.weekly /etc/cron.monthly

könyvtár, amibe ha bemásolsz egy scriptet, akkor a megfelelő időben lefuttatja őket. Így egyszerűbb, mint minden scriptet a crontab-ba beírogatni. Nincs hibázás, elírás.

A megfelelő könyvtár egyértelmű, a neve is mutatja

hourly - óránként daily - naponta weekly - hetente monthly – havonta fut le egyszer.

A másolást természeten emelt joggal tudod megtenni, rendszergazdaként. Így vagy su vagy a sudo parancsot használd, vagy kövesd az én módszeremet ctr+sift+F2 (vagy bármelyik F1-F6 közt) és belépek root-ként, így nem egy grafikus felületű terminál programjában dolgozom. Így biztosan tudatosul bennem, hogy most adminisztratív munkát végzek, emelt kockázattal. Én az ilyen másoláshoz az örök klasszikust a mc–t használom. Nagyon kezes, gyors és átlátható. Ha nincs a gépeden fenn, akkor telepítsd és ismerd meg!

Ha mindent jól csináltál ezentúl az adott periódus szerint helyetted megteszi a MX Linux magától a dolgodat. Illetve ezentúl is indíthatod a ment.sh-t manuálisan is, ha az időzített indításon kívül is kell.

Mikor futtatja le az MX Linux a bemásolt scripteket?

Adjuk ki a

grep run-parts /etc/crontab

parancsot és ezt a kimenetet kapjuk:

17 * * * * root cd / && run-parts --report /etc/cron.hourly
25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )

Ezt már nagyjából értjük, ha a linket oldalt elolvastuk, de azért jó lenne pontosan is tudni az időpontokat. Mint mindenre erre is van megoldás.

A crontab időpont adatokat vissza tudjuk fejteni ezen az oldalon.

Így már tudjuk, hogy a 17 * * * * az minden óra 17. percében fut le; a havi (monthly) pedig minden hó elsején, hajnali hét előtt nyolc perccel.

Ha nem felel meg az időpont akkor (root-ként) szerkesztheted is a /etc/crontab-ot. Haladó megoldás, ha saját könyvtárat (cron.laci) hozol létre és saját sorodat illeszted be a /etc/crontab-ba. Így nem csak az órás/napi/heti/havi periódust tudjuk használni. Az MX Linuxban engedi, de nem látok akadályát (elvileg) más rendszerek alatt sem.

Bonyolult volt? Nem! Egyszerű szövegfájlt szerkesztettünk, felsoroltuk a parancsokat, melyeket amúgy is egymás után beírnánk a parancssorba, majd átmásoltuk a szövegfájlt egy könyvtárba root-ként.

Ami fontos: a fenti script egy faék egyszerűségű kis akármi, nem a végrehajtandó két feladata a lényeg és nem is az, hogy ki milyen hibát talál benne és oldaná meg profibban. A lényeg a folyamat, ahogy egy scriptet megírtunk és a cronba beraktuk – ha ennek az egyszerűségét átlátja egy kezdő, nem fog ezentúl idegenkedni a scriptektől és a cron-tól.

Ennyi.

Az eredeti bejegyzés a blogomban jelent meg

Hozzászólások