Reddit – linux – Mi a legjobb módja a bash megtanulásának?

Az a módszer, amivel én bármilyen nyelvet megtanultam, nem az, hogy leülök és elolvasok egy könyvet róla csak azért, hogy megtanuljam, hanem hogy legyen egy cél a fejemben:

Automatizálni akarom X-et.

Ezután elkezdem kigondolni a problémát, majd az internet segítségével kitalálom a szintaxist, hogy eljussak A-tól B-ig.

Egyszer például évekkel ezelőtt nyomon akartam követni a rendszerem üzemidejét, amikor épp akkor váltottam át a Windowsról, amelyet 48 óránként újra kellett indítani, és azért is, mert nagy kocka voltam. Egy online barátomat gúnyoltam vele, ezért akartam frissíteni a rendszerem uptime-ját itthon, egy weboldalon, ami kint volt az interneten, egy másik államban lévő szerveren.

Hogyan csináljam ezt?

Hát, először is, hogyan kezdjek el készíteni egy szkriptet, ami valóban futni fog.

#!/bin/bash <- Oh, specifies the script interpreter. LEARNED.

Hm, még mindig nem fog futni…

# chmod +x <- Oh, needs execute bit set. LEARNED.

Most, hogyan szerezzem meg az uptime-ot? Nos, szétszedhetném az uptime parancsot, de az egyik funkció, amit szerettem volna, az a “rekord uptime” nyomon követése volt. A Linux uptime parancsa emberileg olvasható formában jeleníti meg az üzemidőket:

13:23:54 up 32 days, 4:19

Nocsak, ezt egy kicsit durva úgy elemezni, hogy nagyobb vagy kisebb, mint. Meg lehet csinálni, de kell lennie egy egyszerűbb módnak. Vajon honnan veszi az “uptime” program ezeket az adatokat? Egy kis guglizással megismerem a /proc rendszert:

/proc/uptime

Hogyan olvassam ki? Van néhány módszer. A mód, amit megszokásból használtam (és valószínűleg rossz, mivel a cat parancs nem igazán erre való:)

cat /proc/uptime

Ami visszaadja:

2780345.41 5546896.19

OK, most már vannak szép tizedesjegyek, ami megkönnyíti annak kitalálását, hogy ez egy rekord uptime. De hogyan ragadhatom meg ezt egy változóban? Olvastam még egy kicsit a neten a visszautalásokról:

UPTIME=`cat /proc/uptime`

Klassz, most már megvan egy változóban. Mentális megjegyzés, mindenféle érdekes dolgot beolvashatsz így a változókba. Ezt a jövőben nem szabad elfelejtenem. MEGTANULTAM. És mi ez a /proc dolog? Ooh, mindenféle jó dolog van benne, mint például:

cat /proc/cpuinfo

OK, szóval most már van ez a nagy tizedes szám. Hogyan konvertálhatom át napokra, hogy olyan idők legyenek, mint “23.8 nap”? A cat /proc/cpuinfo is két számot ad vissza. Melyiket akarom? És hogyan szedjem szét, hogy csak ezt a számot kapjam meg? Kicsit tovább olvastam. Most már van néhány módja annak, hogy széthúzzuk a stringet, de az első dolog, amivel találkozom, a cut parancs. Hogyan használhatom ezt egy karakterlánccal? Olvastam egy cikket a pipingről és az átirányításról. Látom, hogy a két számot egy szóköz választja el elválasztójelként, tehát:

NUMBERIWANT=`echo ${uptime} | cut -d " " -f 1`

Cool. Ezt meg kell jegyeznem. Érdekes dolgokat tudok csinálni azzal a pipával. Ezt mentálisan elrakom, a cut paranccsal együtt, ami az egyik leghasznosabb parancssori eszköz lesz, amivel valaha találkoztam.

Most, hogyan lehet ezt napokra váltani… hm, kiábrándító, a bashnek szar a matematika támogatása. Hm, ez a cikk a bc-ről beszél. Egy kis kísérletezés és:

uptime=`echo "scale=2; $uptime/86400" | bc`

A bc tehát a számoláshoz használt program. Ezt meg kell jegyeznem. Az előző lépésekben tanultam a backquotesról és a pipe-ról, így nyilvánvaló volt, hogyan kell ezt itt használni.

Most hogyan echózom ki ezt egy szöveges fájlba, amit PHP include-ként használhatok a weboldalon (a PHP-t nagyjából ugyanígy tanultam)?

Ah, átirányítás!

echo $uptime > ./uptime.txt

És így tovább. Ha megnézem a régi szkriptjeimet (ezt is beleértve), a kódolás nem hatékony, és nem feltétlenül úgy, ahogy most csinálnám. De ahogy az évek során követem ezt a folyamatot, a készségeim és a tudáskészletem fejlődik, és azáltal, hogy rossz gyakorlatokkal sarokba festem magam, megtanulom, hogyan ne csináljak dolgokat. A módszertanaim fejlődnek, így a szkriptek karbantarthatóbbak lesznek — nem úgy, hogy egy tanteremben ülök vagy könyvet olvasok, hanem úgy, hogy átverem magam, és tanulok belőle.

MEGJEGYZÉS: Nem vagyok profi fejlesztő. Elsősorban saját (hobbi) céljaimra írok szkripteket. Tudom, hogy az informatikai háttérrel rendelkező embereknek ellenvetéseik lehetnek ezzel a tanulási módszerrel szemben, de nekem eddig jól bevált. És nagyon szórakoztató, mert ahelyett, hogy csak egyfajta hétköznapi olvasási és memorizálási gyakorlat lenne, menet közben kapok valamit “belőle” — hasznos szkripteket.

Apropó — ezt könyvjelzőbe teszed, ha még nem tetted volna. Ez fantasztikus:

Advanced Bash Scripting Guide — a legtöbb, amit a bash-ről tudok, innen származik.

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.