Bevezető
A Linux - abszolút kezdőknek! topikban volt néhány linuxos paranccsal, programmal kapcsolatos magyarázatom, amit az egyszerűség kedvéért itt most össze is gyűjtök, s tervezem, hogy amennyiben a későbbiekben feljön egy-egy kisebb téma, ami ott kerül kifejtésre, az itt is le lesz írva vagy linkelve lesz, hogy egy helyen megtalálható legyen.
Igyekszem egyszerű, érthető magyarázatokat, példákat adni, direkt kezdők számára, de a teljesség igénye nélkül, mert akit bővebben érdekel a téma, az bőven talál segítséget a különböző wikikben, tutorial oldalakon is (némi anyagot összegyűjtöttem már régebben: Link gyűjtemény a Linuxszal ismerkedőknek ). Továbbá íródott egy fogalomtár is colomb2 fórumtárs által: Fogalomtár Linux kezdőknek
Fontos!
A bejegyzés alatt engedélyezve lesznek a kommentek, de kizárólag arra a célra, hogy tudjatok kérdezni, ha a leírtakkal kapcsolatban valami nem világos, nem egyértelmű. Egyéb kezdő kérdésekkel, problémákkal, továbbra is a Linux - abszolút kezdőknek! topikba írjatok!
---------------------------------------------------------------------------------------------------------------------------------------------------------
Hirdetés
Tartalom
Ha valami frissebb írás bekerül ide, akkor dátummal ellátva itt fogom jelezni.
Jelenlegi témák:
- Terminál prompt és a shell
- Gyakran használt alapparancsok és a kapcsolók rövid áttekintése
- sudo, gksu, kdesu, beesu, gnomesu , na de mikor-melyiket?
- Biztonsági másolat készítése (cp paranccsal)
- Alias - avagy a parancsok rövidítése, álneve
- Az előzőleg bevitt parancsok listázása, keresése (history)
- Visszajelzések a(z alap)parancsok sikeres végrehajtása után (verbose kapcsoló)
---------------------------------------------------------------------------------------------------------------------------------------------------------
A Terminál a barátod
Az alábbi magyarázatok terminál-orientáltak, azaz igen, meg kell nyitnod a parancssort, de ne félj, nem harap. Kezdőknek riasztó lehet, ósdinak tűnhet, de elhihetitek, hogy nagyon sok dolog egyszerűen megoldható, gyakran egyszerűbben is, mintha grafikus felületen kellene végigkattintgatni. Továbbá, míg a grafikus felületek eltérőek (ezért nehéz lenne mindenre példát írni), addig a linuxos alapparancsok lényegében mindenhol működnek.
Gyors tipp: A parancsok, elérési utak begépelésénél segítségedre van az automatikus kiegészítés. Kezdj el gépelni és nyomj egy TAB gombot ehhez.
---------------------------------------------------------------------------------------------------------------------------------------------------------
Terminál prompt és a shell
Prompt
A terminál prompt sokféleképpen formázható, de valószínű, hogy a népszerűbb disztrókban (Ubuntu alapúakban legalábbis) valami ilyesmit látsz:
felhasználóneved@gépedneve ~ $
Sok magyarázatra nem szorul, azt kell tudni, hogy a ~ jel a home könyvtáradat jelenti, a $ jel pedig azt, hogy felhasználóként vagy bejelentkezve a terminálba. Rendszergazdaként (root) bejelentkezés esetén a $ jel helyett # jelet fogsz látni (persze ilyenkor a felhasználóneved helyett is root-ot fog írni).
Amikor valahol egy leírásban egy egysoros parancs előtt $ jelet látsz, akkor azt jelenti, hogy felhasználóként adod ki a parancsot, míg # esetén azt, hogy rendszergazdaként (root).
Sok weboldal olyan leírásokat tesz közzé, amelyekben a $ és a # jel nincs elkülönítve a parancsoktól, az óvatlan kezdő pedig egyben bemásolja az adott sort a terminálba, és persze hogy ilyenkor a parancs nem működik (mert odakerül az elejére a $ vagy a # jel is, amire nincs szükség).
Tehát ha egy leírásban például ilyesmit látsz:
$ cp ~/valami.txt ~/Documents
Akkor a parancs előtti $ jelet nem kell kimásolni (vagy elé írni).
Shell
Az alapértelmezett shell a legnépszerűbb disztrók esetén nagyjából tuti biztos, hogy a bash lesz. A felhasználódhoz tartozó bash konfigurációs fájl a home könyvtáradban található meg .bashrc néven (tehát rejtett fájl!). Bővebben majd az egyes fejezeteknél fogok hivatkozni a .bashrc-re, részletesen most nem megyek bele.
---------------------------------------------------------------------------------------------------------------------------------------------------------
Gyakran használt alapparancsok és a kapcsolók rövid áttekintése:
Rövidre fogom, mert ezer helyen le vannak írva, de elfér itt is pár gyakran használt parancs:
cd (change directory - könyvtárváltás)
cp (copy - másolás)
mv (move - áthelyezés/átnevezés)
rm (remove - fájl törlése)
rm -r (könyvtár törlése, rekurzív törlés)
touch fájlnév (fájl létrehozása)
mkdir (make directory - könyvtár létrehozása)
ls (listázás)
echo "szöveg" (szöveg kiíratása a terminál képernyőjére)
Kapcsolók:
Mik azok a kötőjelek, meg dupla kötőjelek egyes parancsoknál? Azok a kapcsolók, amik az adott parancs működését befolyásolják (módosítják, bővítik stb.). Például az ls parancs esetén:
ls -a azt jelenti, hogy minden fájlt, azaz a rejtett fájlokat is listázza ki (a rejtett fájlok neve ponttal ( . ) kezdődik).
ls --all ez a parancs ugyanaz, mint az előző.
Tehát az ls -a parancs megegyezik az ls --all paranccsal, a különbség annyi, hogy az utóbbi "bőbeszédű", könnyebben érthető, míg a rövid változatnál nem biztos, hogy az egy darab betűből kitaláljuk, hogy az adott kapcsoló mire szolgál. Ha olyan kapcsolóval találkozol egy adott parancsnál, amiről nem tudod, hogy mire szolgál, akkor nézd meg az adott parancs man oldalát (manual), azaz kézikönyvét:
man ls
A man parancs az utána írt parancs leírását mutatja meg. Tehát ha mondjuk a cp (copy - másolás) parancsról szeretnél olvasgatni, akkor a man cp parancsot kell kiadnod, az felhozza a man oldalt ahol a használható kapcsolók is fel vannak sorolva.
Tehát van rövid és hosszú kapcsoló is. Alapesetben:
- a szimpla kötőjel után egy betű áll. (rövid kapcsoló)
- a dupla kötőjel után egy vagy több (kötőjellel kapcsolódó) szó áll. (hosszú kapcsoló)
Fontos, hogy a rövid kapcsolók egyes betűjeleit egymás mellé is lehet írni, nem muszáj külön felsorolni őket. Továbbá az is mindegy, milyen sorrendben adod meg őket (bár kivételek lehetnek, a bővebb információkért olvasd el az adott parancs/program man oldalát vagy dokumentációját a neten!)
Például az alábbiak mind ugyanazt eredményezik (hosszú listázás, rejtett fájlokat is mutatva):
ls -l -a
ls -a -l
ls -la
ls -al
Mint láthatod egy darab kötőjel van megadva, tehát ezek rövid kapcsolók, csak az egyes betűjeleket "össze is lehet vonni".
---------------------------------------------------------------------------------------------------------------------------------------------------------
sudo, gksu, kdesu, beesu, gnomesu , na de mikor-melyiket?
Hogy ne legyen kavarodás, tisztázni kell egy alapvető dolgot:
A home könyvtáradban te vagy az úr, azt csinálsz, amit akarsz, ezért oda nem kell emelt jogosultság.
Viszont a fájlrendszer többi részén (ami a home könyvtáradon kívül van) egyszerű felhasználóként nem végezhetsz műveleteket, azaz nem tudsz szerkeszteni, törölni, létrehozni fájlokat/könyvtárakat. Vannak kivételek, lehet jogosultságokat beállítani, de a lényeg alapvetően az, hogy ott nem piszkálhatsz bele a dolgokba. Ott a rendszergazda (root) az úr.
Amikor emelt jogosultságra van szükség, választhatsz:
Vagy bejelentkezel rendszergazdaként (root) a terminálba és akkor nem kell sudo-t használni.
Vagy eleve rendszergazda terminált indítasz (ilyen opció szokott lenni egyes disztróknál készen)
Vagy sudo-t használsz, ami az adott művelet idejére emelt jogosultságot ad.
Most maradjunk a sudo-nál, például egy GRUB konfigurációs fájl szerkesztése (nano-val):
sudo nano /etc/default/grub
Amennyiben nem terminálos, hanem grafikus (GUI) programmal akarunk szerkeszteni egy konfigurációs fájlt, akkor a sudo parancs helyett egy "grafikus sudo" (vagy "grafikus su") parancsot használunk, ami lehet többféle, disztrótól, grafikus felülettől függően, például:
gksu (vagy gksudo)
kdesu (KDE alatt)
beesu (Fedora)
gnomesu (OpenSuse Gnome)
A példák esetében maradok a gksu-nál:
gksu leafpad /etc/default/grub
A leafpad ugye egy grafikus szövegszerkesztő, ezért nem ajánlott sudo-val indítani. Igen, működik sudo-val indítva is (a legtöbbször működnek is) de előfordulhat, hogy problémát okoz, ezért nem ajánlott a grafikus programok indítása sudo-val.
Mi a helyzet a home könyvtárunkban lévő fájlokkal?
Azoknál nem kell sudo, sem egyéb grafikus sudo parancs, hiszen a home könyvtárunkban lévő cuccok a mieink, nem kell hozzájuk emelt jogosultság.
Tehát például ezek közül bármelyik jó (akár terminálos nano, akár grafikus leafpad)
nano ~/.bashrc
leafpad ~/.bashrc
---------------------------------------------------------------------------------------------------------------------------------------------------------
Biztonsági másolat készítése (cp paranccsal)
Nagyon sok backup módszer létezik, az egészen egyszerű megoldásoktól, a komplex, komplett rendszermentésekig. Utóbbi esetekre mindjárt itt van Kendek fórumtársunk által készített Systemback. De mi most nem ezzel fogunk foglalkozni, hanem csak egy nagyon szimpla megoldással, ha csak bizonyos fájlokról szeretnénk másolatot készíteni biztonsági okokból, egy-egy művelet előtt:
Amennyiben a rendszer konfigurációs fájljait szerkeszted és nem vagy biztos a dolgodban, érdemes csinálni róluk egy másolatot, arra az esetre, ha netán gebasz lenne. Ez annyit jelent, hogy elmásolod valahova szerkesztés előtt. Ez megint variálható:
1. módszer: csinálsz mondjuk egy ~/backup könyvtárt és oda gyűjtöd (másolod) a mentéseket, így egy helyen lesznek, gyorsan eléred őket. (a ~ jel a home könyvtáradat jelenti) Alapból nem szokott backup könyvtár lenni a home könyvtáradban, és valójában mindegy, hogy milyen néven hozod létre a könyvtárt, hívhatod "Mentések"-nek, ha magyar nyelven használod a rendszert, de bármi más is lehet, a lényeg, hogy tudd, hogy oda gyűjtöd a fontosabb mentéseket.
példa: másolat készítése az eredeti forráslistáról (Debian/Ubuntu/Mint alapú rendszereken):
cp /etc/apt/sources.list ~/backup
magyarázat:
A cp ugye copy-t, azaz másolást jelent.
Utána megadod neki a fájlt, amit másolni akarsz.
Utána pedig azt, hogy hova/milyen néven másolod (jelen példában a home könyvtáradban található backup könyvtárba).
visszaállítás:
Ha probléma lenne, és szükséges lenne az eredeti fájl visszaállítása, akkor lényegében az előző parancs fordítottja történik (csak most már a backup könyvtár után a fájlnevet is oda kell írnod, hogy tudja a rendszer, hogy melyiket is akarod a mentéseid közül visszamásolni):
cp ~/backup/sources.list /etc/apt/sources.list
2. módszer: csinálsz ugyanabba a könyvtárba (ahol az eredeti fájlt van) egy másolatot más néven:
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
magyarázat:
A sudo az emelt jogosultságot jelenti, ami most szükséges, mert nem a home könyvtáradba másolod, hanem ugyanoda, ahol az eredeti is található, csak más néven. Mivel ez már a home könyvtáradon kívül esik, szükséged van az emelt jogosultságra.
A cp ugye copy-t, azaz másolást jelent.
Utána megadod neki a fájlt, amit másolni akarsz.
Utána pedig azt, hogy hova/milyen néven másolod.
Egyszerű módszer, ha ugyanazon a néven másolod, csak a végére írsz egy .bak kiterjesztést. Ez amolyan szokás, igazából nagyjából lényegtelen mit írsz mögé, a .bak csupán a backup rövidítése, így tudod, hogy a .bak-ra végződő egy mentés az eredeti fájlról.
visszaállítás:
Ha probléma lenne, és szükséges lenne az eredeti fájl visszaállítása, akkor lényegében az előző másolás fordítottja történik:
sudo cp /etc/apt/sources.list.bak /etc/apt/sources.list
---------------------------------------------------------------------------------------------------------------------------------------------------------
Alias - avagy a parancsok rövidítése, álneve
Az aliasok lényegében álnevek vagy rövidítések. Egy-egy parancsot lerövidíthetünk, vagy akár több parancsot összefűzhetünk és eltárolhatunk egy rövidebb parancsként.
Aliasok tárolása:
Az aliasok tárolására több megoldás van, például az alábbi fájlok valamelyikében:
~/.bash_aliases
~/.bashrc
~/.bash_profile
De akár másik, tetszőleges fájlban is tárolhatjuk őket (amit aztán be tudunk tölteni), de én most a ~/.bashrc-nél maradok.
Ha szeretnél aliast készíteni, nyisd meg a ~/.bashrc fájlt és írd be mondjuk a legaljára őket.
Fontos: Az aliasok elkészítése és mentése után azokat "be kell tölteni", ezért ha már közben nyitva van a terminálod, akkor:
vagy bezárod és újra megnyitod a terminált.
vagy beolvasod/betöltöd a .bashrc-t és akkor nem kell bezárni és újra megnyitni a terminált.
ez utóbbira a source ~/.bashrc parancs szolgál.
Aliasok formátuma:
Az aliasokat mindig egy alias szóval kezdjük, majd szóköz, utána a használni kívánt nevet írjuk, ami tetszőleges, de arra ügyeljünk, hogy másik (funkciójú) paranccsal ne ütközzön, tehát például ne csináljunk gimp nevű aliast, mert az Gimp képszerkesztő indítására van.
A használni kívánt név után (szóköz nélkül!) jön egy egyenlőségjel, aztán a használni kívánt parancs idézőjelek között (lehet szimpla vagy dupla).
Az aliasok neveiben ne legyen szóköz vagy speciális karakter, maradj az egyszerű szavaknál! Ha több szóból álló aliast akarsz írni, akkor kötőjellel kösd össze a szavakat vagy írd egybe az egészet. Tehát:
alias hello message='echo hello' Nem megfelelő! (nem lehet szóköz)
alias hello-message='echo hello' Megfelelő! (kötőjel lehet)
alias hellomessage='echo hello' Megfelelő! (egybeírva lehet)
Példák:
A free parancs kiírja a memóriára vonatkozó információkat byte-ban. Számunkra viszont átláthatóbb, ha megabyte-ban mutatja ezeket, erre szolgál a -m kapcsoló, tehát a parancs így néz ki: free -m
Nagyon egyszerű alias, amivel elérhetjük, hogy a free parancs mindig megabyte-ban írja ki az értékeket:
alias free='free -m'
Ennek még ugyan sok haszna nincs, hiszen nem megterhelő egy -m begépelése, amikor a free parancsot használjuk, de direkt egy egyszerű példával akartam kezdeni.
Mutatok egy másik példát, de olvasd végig, mert nem kell végigcsinálni minden lépést, csak a példa kedvéért több lépcsőben vezetem le!
Debian/Ubuntu/Mint alapú rendszereken minden egyes frissítéskor be kell gépelnünk a sudo apt-get update parancsot. Rövidítsük le!
alias update='sudo apt-get update'
Ezek után elég annyit beírni, hogy update és már frissíti is a csomaglistát (persze a jelszavadat kérheti előtte, hiszen a parancs sudo-val kezdődik).
Ha a rendszert is akarjuk frissíteni, akkor erre a sudo apt-get upgrade parancsot használjuk. Rövidítsük le ezt is!
alias upgrade='sudo apt-get upgrade'
Ezek után elég annyit beírni, hogy upgrade és lefut a rendszerfrissítés.
Mivel a rendszer frissítése (upgrade) előtt a csomaglistát is ajánlatos frissíteni (update) ezért kombinálhatjuk a 2 parancsot egybe:
alias upgrade='sudo apt-get update && sudo apt-get upgrade'
Ezek után elég annyit beírni, hogy upgrade és a komplett frissítés végigmegy. Az && a parancsok összefűzéshez kell, azt jelenti, hogy amikor az első parancs (update) véget ért, akkor kezdje el a másodikat (upgrade).
Magyar nyelven szeretnéd kiadni a parancsot? Az sem probléma:
alias frissítés='sudo apt-get update && sudo apt-get upgrade'
vagy írhatod ékezetek nélkül is:
alias frissites='sudo apt-get update && sudo apt-get upgrade'
megjegyzés: termináltól függ, hogy támogatja-e az ékezetes karaktereket, de a legnépszerűbb terminálok és disztrók is támogatni szokták.
Másik példa: PPA (külső tároló) hozzáadása:
alias ppa='sudo add-apt-repository'
Ezek után annyi lesz a parancs, hogy ppa (és utána a PPA címe), például:
ppa ppa:nemh/systemback
---------------------------------------------------------------------------------------------------------------------------------------------------------
Az előzőleg bevitt parancsok listázása, keresése (history)
Előzőleg bevitt parancsok listázására a history parancs szolgál.
A listázott parancsok előtt látni fogsz egy számot, ezt használhatod arra, hogy válassz és meghívj egyet a listázott parancsok közül. Ezt úgy tudod megtenni, hogy egy felkiáltójelet és a számot beírod, majd ütsz egy Entert, és ekkor be fogja neked írni a listából választott parancsot.
Például:
history ezt listázza:
111 man cp
112 sudo nano /etc/default/grub
113 leafpad jegyzet.txt
Ha a 112-es számú parancsot akarod újra futtatni, akkor ennyit írsz be:
!112 (majd Entert ütsz, ekkor beírja neked, aztán még egy Entert kell ütnöd ugye, hogy be is vidd a parancsot)
Ez jól jöhet olyan esetben, amikor régebben írtál már valami hosszabb parancsot és nem akarod újra begépelni, vagy nem akarsz sokat a kurzor gombokkal (nyilakkal) lapozni köztük egyesével.
De főképp jól jön a következő esetben, amikor keresel köztük:
history | grep "keresendő kifejezés"
magyarázat:
A history parancs ugye listázna, de mi azt mondjuk neki, hogy még ne jelenítse meg, hanem előbb válogassa ki (grep) azokat, amelyek tartalmazzák a keresendő kifejezést és csak azokat jelenítse meg nekünk.
A | (pipe) karakter arra szolgál, hogy az első parancs (history) kimenetét (tehát jelen esetben a listát) megkapja a második (grep) parancs bemenetként, így a második parancs tud vele dolgozni (azaz ki tudja szűrni azt, amire rákerestünk).
Ha megvan a találat, mellette lesz egy szám is, ha használni akarjuk a parancsot, akkor a már fentebb ismertetett felkiáltójeles módszerrel ( !szám ) be tudjuk íratni a parancsot.
Már volt szó az aliasokról, így akár ezt a history-ban keresést is lerövidíthetjük egy alias-szal:
alias keresés='history | grep $1'
Utána elég lesz ennyit beírni: keresés "keresendő kifejezés" (a keresendő kifejezést tegyünk mindig idézőjelbe, ha több szóból áll.)
A $1 ne zavarjon össze, ez lényegében itt annyit jelent, hogy ennek a helyére fog kerülni a keresendő kifejezés, amit majd beírsz. Talán fogalmazhatok úgy egyszerűen, hogy "az foglalja neki ott a helyet".
Update (2015.06.02): Másik módszer, gyors keresésre:
Az előzményekben a Ctrl+R kombinációval is lehet keresni, ami mindig a legutolsó találatra ugrik. Ha nem megfelelő a találat, akkor újra nyomd meg a gombokat, ami újabb találatot fog adni (egyel korábbi), és így tovább.
---------------------------------------------------------------------------------------------------------------------------------------------------------
Visszajelzések a(z alap)parancsok sikeres végrehajtása után (verbose kapcsoló)
Sok (alap)parancs csak akkor ad visszajelzést a terminálban, ha valami hiba történt. Amennyiben sikeres volt a parancs végrehajtása, akkor nincs visszajelzés. Ha szeretnél visszajelzést kapni sikeres műveletek esetén is, akkor a -v kapcsolót kell használnod, ami verbose-t, azaz bőbeszédűt jelent. Az, hogy melyik parancsnál elérhető a verbose kapcsoló, azt az adott parancs manual oldalán tudod megnézni.
Például: man rm , majd lapozol lefele (nyilakkal) és látod felsorolva majd az elérhető kapcsolókat (hosszú és rövid kapcsolókat is).
De ugye nem biztos, hogy végig akarunk nézni mindent és mazsolázni köztük, ha csak gyorsan le szeretnénk csekkolni valamit, ezért használhatjuk a grep parancsot, hogy kiszűrjük, ami nekünk kell.
man rm | grep verbose
Ezt fogjuk kapni:
-v, --verbose
Tehát megtalálta az rm manual oldalán a verbose kapcsolót, így tudjuk, hogy ennél a parancsnál elérhető.
Ha szeretnéd, hogy minden esetben (alapból, kapcsoló nélkül) verbose módban működjön az adott parancs, akkor írhatsz rá egy aliast:
alias rm='rm -v'
Ugyanígy megtehed mondjuk a cp vagy akár az mkdir parancsokkal is:
alias cp='cp -v'
alias mkdir='mkdir -v'
Viszont egy tipp, hogy ne kelljen minden egyes (alap)parancsra külön aliast írnod ilyen esetre, másold be az alábbit a .bashrc-be:
# Visszajelzés a parancsok sikeres végrehajtása esetén is (verbose kapcsolóval)
for command in cp rm mv mkdir chmod chown; do
alias $command="$command -v"
done
magyarázat:
Az első sor csak egy komment, azaz egy megjegyzés/jegyzet. A kommentek mindig # jellel kezdődnek a bash scriptek/parancsok esetén, és ezeket a bash nem veszi figyelembe. A kommenteket mindig arra használjuk, hogy jegyzeteket, magyarázatot írjunk az adott parancsokhoz, hogy ha netán később elfelejtenénk miről is van szó, akkor a komment tud segíteni.
A folytatás már egy úgy nevezett "for ciklus". Leegyszerűsítve arról van szó, hogy (jelen esetben) pár alapparancsot (cp, rm, mv, mkdir, chmod, chown) összegyűjtünk, és ezeket egy command nevű változóban tárolunk, majd azt mondjuk, hogy mindegyik felsorolt parancsra készítsen egy olyan aliast, ami tartalmazza a -v (verbose) kapcsolót.
Tehát, lényegében a fenti for ciklus ezt fogja megcsinálni nekünk automatikusan:
alias cp='cp -v'
alias rm='rm -v'
alias mv='mv -v'
alias mdkir='mkdir -v'
alias chmod='chmod -v
alias chown='chown -v'
Így ezeket az aliasokat nem kell kell beírnod a .bashrc-be, ha a fenti for ciklussal oldod meg. Továbbá, ha egyéb parancsot is szeretnél még verbose kapcsolóval használni, akkor azt a parancsot is hozzáadhatod a for ciklus listájához, csak be kell írnod monduk az utolsó parancs után:
for command in cp rm mv mkdir chmod chown ide_írd_az_újabb_parancsot; do
Ismétlem: nem minden parancsnak van verbose kapcsolója, ezért mielőtt újabb parancsot adsz hozzá, ellenőrizd, hogy az adott parancsnál elérhető-e a verbose kapcsoló!
Ha nem szimpatikus a fenti for ciklusos megoldás, akkor írd be nyugodtan a neked kellő parancsok aliasait egyenként a .bashrc-be, az is teljesen megfelelő módszer.