Linus elfutna...

Kezdő, Linuxot használó lelki társaim! A célom, hogy megosszam veletek a tapasztalataimat, tippekkel, illetve segítséggel szolgáljak Nektek a kezdeti nehézségek leküzdésében.

Friss topikok

Terminál és a Bash - nem félünk a farkastól

2014.03.11. 11:58 | Spyracs | Szólj hozzá!

Nem esz meg, csak megkóstol. Vajon mi is lehet az, amit hiányolok, amikor egy Windowsos gépet kell helyreráznom vagy egyáltalán használom... A Windows parancssor nevetséges a Linux terminálhoz képest.

Mi az a terminál emulátor?

Miért hívják emulátornak?

Mint tudjuk, egy operációs rendszernek nem feltétlenül van grafikus felülete. Számos disztribúció alap telepítése nem is tartalmaz GUI-t, ilyenek a KISS (Keep It Simple, Stupid - azaz tartsuk egyszerűen, lebutítottan) irányelvet követők: az Arch Linux, Slackware, a Gentoo, de Ubuntu Server és Debian telepítéskor is opcionális a GUI telepítése, aki használt már BackTracket, az pedig tudja, hogy azokon, bár van GUI, de konzolos felületre bootol alapból.

Tehát GUI nélkül konzolos felületre bootolunk. A konzolba írt parancsokat szinte közvetlenül a rendszermagnak, a kernelnek adjuk. Ezáltal elérhető számos olyan funkció, amit a GUI lehet, hogy fel sem kínál. Ez az erőteljes irányítási mód az, amit elérhetünk a terminál emulátorral, ami gyakorlatilag egy emulált konzol, a terminál segítségével teremt közvetlen kapcsolatot a user és a kernel között.

Miért kéne, hogy ez érdekeljen engem?

Aki ismeri a terminálos parancsokat, vagy legalább néhányat közülük, az nagyon meg tudja gyorsítani a saját munkáját. Néhány egyszerű feladat végrehajtása sokkal egyszerűbb, ha az ember ismeri a varázsigéket, ilyen egy fájl vagy mappa megkeresése, a linkek létrehozása, a tömeges átnevezés, a csomagkezelő használata, egyszerű jegyzetek szerkesztése. Van olyan feladat is, amit csak konzolon tudunk elvégezni, mint bizonyos rendszerfájlok szerkesztése, programok forrásból való telepítése és a root jogok megszerzése!

A terminálablak - prompt magyarázata

Ha nyittok egy terminált (általában Ctrl-Alt-T, vagy Alkalmazásindító > Rendszer és ott valamelyik), akkor egy furcsa szöveget és egy villogó kurzort fogtok látni, ami nálam így néz ki:

spyracs@Dstable-01:~$

Ezt nevezzük promptnak, és a következőképpen épül fel:

<felhasználónév>@<gépnév>:<munkamappa elérési útja>$

A "munkamappa elérési útja" az úgynevezett aktuális munkakönyvtár. Ha létrehozunk egy fájlt elérési út megadása nélkül, akkor az itt, az aktuális munkakönyvtárban jön létre. Próbáljuk ki, hozzunk létre egy üres .txt fájlt a touch parancs segítségével, majd listázzuk ki a mappa tartalmát, ott lesz benne a fájl:

touch valami.txt
ls

Az ls parancs kimenetéből kitalálhattátok, hogy a /home/<username> mappában vagytok. A prompt <mappa elérési útja> részét, azaz a /home/<username> mappát itt a ~ jel képviseli az egyszerűség kedvéért.

Navigálás - cd, ls, grep

A mappák között mászkálhatunk a cd paranccsal, melynek használata a következő lehet (tegyük fel, hogy spyracs a bejelentkezett felhasználó):

spyracs@Dstable-01:~$ cd /home/spyracs/Letöltések
spyracs@Dstable-01:~/Letöltések$

Mint láthatjátok, a /home/spyracs része az elérési útnak itt is a ~ karakterrel van helyettesítve. Listázzuk ki, hogy milyen fájlok vannak a letöltések közt!

spyracs@Dstable-01:~/Letöltések$ ls
SteamOSImage.zip
Syslog.txt
teamviewer_linux.deb
Tux.png
vlsub-master.zip
spyracs@Dstable-01:~/Letöltések$

Látható, hogy van itt egy CD képfájl bezippelve a SteamOS-ről, van egy txt naplófájl, egy TeamViewer telepítő bináris, egy kép Tux-ról, a Linux pingvinről, és egy másik másik becsomagolt VLC bővítmény telepítő. Előfordulhat, hogy mondjuk arra vagytok kíváncsiak (például egy ennél SOKKAL nagyobb lista esetén), hogy le van-e töltve például a TeamViewer telepítő. Nem tudjátok a fájl pontos nevét, de az tuti, hogy benne a van a nevébe, hogy "teamviewer". Ekkor használható a grep nevű program, amivel gyakorlatilag kiszűrhetitek az ls kimenetéből azokat a sorokat, amelyek tartalmazzák a "teamviewer" karakterláncot. Ehhez egy "pipe" elnevezésű funkciót használunk. A pipe csövet jelent, gyakorlatilag az ls kimenetét átpumpáljuk a grep programon, ami az ls kimenetét bemenetként kapja meg és elvégzi a fent említett szűrést. A pipe-ot a következő karakter képviseli: | (AltGr-W)

spyracs@Dstable-01:~/Letöltések$ ls | grep teamviewer
teamviewer_linux.deb
spyracs@Dstable-01:~/Letöltések$

Szerintem teljesen logikus: az ls kimenete a |-on keresztül bemenetként átadódik a grep-nek, ami kiszűri azokat a sorokat belőle (1 db van), amelyek a "teamviewer" karakterláncot tartalmazzák. Most szűrjünk ki minden zip fájlt az ls kimenetéből:

spyracs@Dstable-01:~/Letöltések$ ls | grep ".deb"
SteamOSImage.zip
vlsub-master.zip
spyracs@Dstable-01:~/Letöltések$

Látható, hogy ha a szűrendő karakterlánc tartalmaz ilyen huncut karaktereket is (pl pont, vessző, pipe-jel, perjel, backslash, space), akkor érdemesebb idézőjelbe tenni.

Mi az, hogy root?

A Windowsos "Rendszergazda" analógiája Linuxon a root vagy más néven superuser felhasználó. Linux/UNIX alapú rendszereknél minden fájlnak van egy tulajdonosa és diszkréten elhatárolt jogok szabják meg, hogy ki olvashatja/írhatja/törölheti az adott fájlt. A rendszerfájlok tulajdonosa a root, de nagy részük olvasható a nem-root felhasználók által is. Maga a user csupán a saját mappájának a tulajdonosa, ami a /home könyvtárban található. Maga a /home már a root tulajdona, ezért új felhasználót is csak a root hozhat létre, mivel ez a /home mappába való írással jár.

Érdekes, hogy Androidon is a helyzet: az Android kernel, aki nem tudná, Linux alapú, de ő maga nem Linux kernelt futtat, tehát nem nevezhető Android Linux-nak :D

De mind Androidon, mind bármelyik Linuxon vagy UNIX alapú rendszeren, azért mi szeretnénk hozzáférni a rendszerfájlokhoz. Erre többféle módszer létezik (az Android rootolással itt nem foglalkozunk):

su, sudo, gksu, kdesudo

Ezek már terminál-parancsok, illetve programok, melyeket root jogok szerzésére használhatunk. Az első a terítéken a su. Használata:

su
<root jelszava>

Próbáljátok ki egy terminálablakban, hogy mi történik, ha ezt lefuttatjátok! Először is a prompt megváltozik, nálam ilyen lesz:

root@Dstable-01:/home/spyracs#

de Ubuntu alapú OS-eken, ahol biztonsági okokból eltávolították a root-ot, más is lehet a prompt. Láthatjátok, hogy a <username> rész helyére most a root kerül, illetve a prompt végén a $ jel megváltozott # jellé, ami szintén a root jogot hivatott szimbolizálni.

sudo

Egy ilyen folyamatos root terminál használata biztonsági kockázatta jár, ezért találták ki a sudo-t, ami arra való, hogy egyetlen parancsot root jogokkal hajtsunk végre. Ráadásul sudo esetén nem is a root jelszavát kell megadnunk, hanem a sajátunkat. Tehát nálam:

spyracs@Dstable-01:~$ sudo apt-get update
<spyracs jelszava>

Ezzel az APT csomagkezelőt frissítjük, amihez root jogosultság kell. Itt írok le egy jó kis UNIX-os trükköt, amit általában sudo-val fogtok együtt használni. Ha kiadtok egy parancsot és sír, hogy nincs jogotok végrehajtani, akkor használhatjátok a

sudo !!

parancsot, ahol a !! (bang-bang) automatikusan kiegészül az előző paranccsal. Tehát ha beírnám, hogy "apt-get update", akkor sírna, hogy nem tudja zárolni az adminisztrációs könyvtárat. Ezután elég csak a "sudo !!" parancsot kiadni és újra végrehajtja sudo-val az apt-get update-et. sudo-val is átléphettek godmode-ba (root-ba), ha kiadjátok ezt a parancsot:

sudo -i
<júzer jelszava>

vagy ezt:

sudo su
<júzer jelszava>

gksu, kdesudo

GUI-s (azaz nem konzolos, hanem grafikus) programok használatakor jó megszokni, hogy sudo helyett az adott OS-nek megfelelő grafikus sudo-frontendet használjuk, tehát KDE esetén a kdesudo-t, minden más esetén a gksu-t. Ubuntu alapú disztróknál (általában) nem jelent problémát, ha sudo-val indítjátok a grafikus programot, de pl Debianon nem tudnak elindulni, csak a grafikus sudo frontend használatával. Ha például grafikus szövegszerkesztővel akartok egy rendszerfájlt buherálni, azt nem-KDE disztró esetén így kell:

gksu gedit /etc/apt/sources.list

Itt a gedit programmal szerkesztjük meg a azt APT internetes csomagforrásainak listáját, és ehhez root jogokra van szükségünk.

alias

Az egyik legjobb parancs a UNIX rendszerekben, egyszerűen imádnivalóan rugalmassá teszi a rendszert. Gyakorlatilag egy terminál parancsot hoz létre, amihez egy másik parancsot kapcsolhatunk. Mindjárt írok egy saját kedvenc példát, csak előbb a szintaxist mutatom meg:

alias újparancs="régiparancs"
alias update-all="sudo apt-get update; sudo apt-get upgrade -y"

Tehát az általam leírt alias egymás után lefuttatja az apt-get update-et és apt-get upgrade-et. Elég kényelmes, nem? Ahogy látjátok, több parancs is összefűzhető a pontosvessző használatával. A már létező aliasokat kilistázhatjátok az

alias

paranccsal, így meztelenül. Eltávolítani így lehet például az update-all aliast, illetve minden alias-bejegyzést:

unalias update-all
unalias -a

FONTOS: ezek az aliasok csak az aktuális munkamenetben maradnak meg.

Ha véglegesíteni akartok egy aliast, ahhoz meg kell szerkesztenetek a ~/.bashrc fájlt. A fájl végéhez odaírhatjátok a saját aliasaitokat, csak írjatok egy kommentet elé (olyan sort, ami #-tel kezdődik), hogy később tudjátok, melyik volt az, ha ki akarnátok venni:

# saját aliasok
alias újparancs1="régiparancs1"
alias újparancs2="régiparancs2"
... satöbbi satöbbi ...

Scriptelés

Ha gyakran ismételgetitek ugyanazokat a parancsokat, vagy például gyakran telepítitek újra a rendszert, akkor érdemes lescriptelni pl. a gyakran használt programjaitok telepítését. Egy bash scriptet szövegszerkesztővel hozhattok létre, üres fájlt kell létrehoznotok, vagy a fent említett touch parancs vagy simán a nano konzolos szövegszerkesztő segítségével. Ahhoz, hogy a Linux felismerje, hogy egy fájl bash script, ezt közölni kell vele a script első sorában, aminek minden esetben így kell kezdődnie:

#! /bin/bash

Ez a sor megmondja, az oprendszernek, hogy a /bin/bash program segítségével kell futtatni ezt a fájlt. A #! kiolvasva lehet she-bang, sha-bang, hash-bang, crunch-bang, ahogy tetszik...

Én általában fő rendszerként Debiant használok, az pedig elég kevés alapból telepített programmal van felszerelve, ezért nálam mindig van egy ilyesmi script, amit le tudok futtatni friss telepítés után (és a sudo telepítése és konfigurálása után, ugyanis sudo alapból nincs Debianon :D):

#! /bin/bash
sudo apt-get update
sudo apt-get install -y vlc libreoffice chromium-browser clementine qbittorrent wine flashplugin-nonfree icedtea-plugin virtualbox pidgin (stb... stb... ide folytathatjátok a felsorolást)
sudo apt-get upgrade -y

Az install és az upgrade után tett -y kapcsoló azt jelenti, hogy a telepítő, illetve frissítő feltételezi, hogy minden eldöntendően feltett kérdésre igennel válaszolunk. Bash scriptbe bármilyen parancsot beírhatunk egymás után, amit terminálban ki tudunk adni, így jelentősen megkönnyíthetjük, automatizálhatjuk a friss telepítés utáni teendőket. Persze ennél sokkal többet tud a bash, de most mélyen nem folyunk bele a programozásba.

Ahhoz, hogy a scriptet futtatni lehessen, futási jogot kell adni neki a következőképpen (tegyük fel, hogy a ~/scriptek könyvtárban van és friss-telepites a script neve):

sudo chmod +x ~/scriptek/friss-telepites

Ezután simán az elérési útja kiadásával futtathatjuk a drágát terminálból:

~/scriptek/friss-telepites

Pápá

Ennyit szántam egyelőre a terminál használatáról és a scriptelésről. Elég sok hasznos dolog van még, előfordulhat, hogy csinálok még egy posztot ebben a témában, de mindenképpen ezek a leghasznosabb parancsok.

A legközelebbi viszontlátásig:
Üdv: Spyracs

Címkék: konzol script root bash terminál Linux Ubuntu scriptelés Debian Linux Mint terminál emulátor bash script

A bejegyzés trackback címe:

https://linuselfutna.blog.hu/api/trackback/id/tr125852372

Kommentek:

A hozzászólások a vonatkozó jogszabályok  értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai  üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a  Felhasználási feltételekben és az adatvédelmi tájékoztatóban.

Nincsenek hozzászólások.
süti beállítások módosítása