Bash-parancsok és -kapcsolók

Befejeződött

Minden rendszerhéjnyelv rendelkezik a leggyakrabban használt parancsokkal. Kezdjük a Bash-repertoár kiépítésével a leggyakrabban használt parancsok vizsgálatával.

Bash-parancsok

Nézzük meg az általános Bash-parancsokat és azok használatát.

ls parancs

ls: az aktuális könyvtár vagy a parancs argumentumában megadott könyvtár tartalmának felsorolása. Önmagában az aktuális könyvtár fájljait és könyvtárait sorolja fel:

ls

Azok a fájlok és könyvtárak, amelyeknek a neve egy ponttal kezdődik, alapértelmezés szerint rejtettek. Ha ezeket az elemeket fel szeretné venni egy könyvtárlistára, használja az -a jelölőt:

ls -a

Ha még több információt szeretne kapni az aktuális könyvtár fájljairól és könyvtárairól, használja az -l jelölőt:

ls -l

Íme néhány mintakimenet egy olyan könyvtárból, amely néhány JPEG- és PNG-fájlt tartalmaz, valamint egy gifs nevű alkönyvtárat:

-rw-rw-r-- 1 azureuser azureuser  473774 Jun 13 15:38 0001.png
-rw-rw-r-- 1 azureuser azureuser 1557965 Jun 13 14:43 0002.jpg
-rw-rw-r-- 1 azureuser azureuser  473774 Mar 26 09:21 0003.png
-rw-rw-r-- 1 azureuser azureuser 4193680 Jun 13 09:40 0004.jpg
-rw-rw-r-- 1 azureuser azureuser  423325 Jun 10 12:53 0005.jpg
-rw-rw-r-- 1 azureuser azureuser 2278001 Jun 12 04:21 0006.jpg
-rw-rw-r-- 1 azureuser azureuser 1220517 Jun 13 14:44 0007.jpg
drwxrwxr-x 2 azureuser azureuser    4096 Jun 13 20:16 gifs

Minden sor részletes információt biztosít a megfelelő fájlról vagy könyvtárról. Ezek az adatok magukban foglalják a hozzájuk rendelt engedélyeket, a tulajdonost, a méretet bájtban, a legutóbbi módosítás időpontját és a fájl vagy könyvtár nevét.

cat parancs

Tegyük fel, hogy látni szeretné, mi van egy fájlban. Ehhez használhatja a cat parancsot. A kimenetnek nem lesz sok értelme, kivéve ha a fájl szöveges fájl. A következő parancs az /etc könyvtárban tárolt operációsrendszer-kiadás fájljának tartalmát jeleníti meg:

cat /etc/os-release

Ez egy hasznos parancs, mert megadja, hogy melyik Linux-disztribúciót futtatja:

NAME="Ubuntu"
VERSION="18.04.2 LTS (Bionic Beaver)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 18.04.2 LTS"
VERSION_ID="18.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=bionic
UBUNTU_CODENAME=bionic

Az /etc könyvtár a Linux rendszerben egy speciális könyvtár. Rendszer-konfigurációs fájlokat tartalmaz. Ebből a könyvtárból ne töröljön egyetlen fájlt sem, csak ha pontosan tudja, mit tesz.

sudo parancs

Egyes Bash-parancsokat csak a gyökérfelhasználó futtathat; rendszergazda vagy felügyelő. Ha az alábbi parancsok valamelyikét megfelelő jogosultságok nélkül próbálja ki, a művelet sikertelen lesz. A cat parancsot például csak rendszergazdaként bejelentkezett felhasználók használhatják az /etc/at.deny tartalmának megjelenítésére:

cat /etc/at.deny

Az at.deny egy speciális fájl, amely meghatározza, hogy ki használhat más Bash-parancsokat a feladatok későbbi végrehajtás céljából való elküldésére.

Az idő nagy részében nem szeretne gyökérként futni; Túl veszélyes. Ha rendszergazdai jogosultságot igénylő parancsokat szeretne futtatni anélkül, hogy rendszergazdai jogosultsággal rendelkező felhasználóként jelentkezik be, a parancsokat a következővel fogja előtaggal sudofuttatni:

sudo cat /etc/at.deny

sudo jelentése "superuser do". Amikor használja, azt fogja mondani a rendszerhéjnak, hogy ehhez az egyetlen parancshoz a gyökérfelhasználói engedélyszinttel jár el.

cd, mkdir és rmdir parancs

A cd a „change directory” (könyvtár módosítása) parancs, amely pontosan azt hajtja végre, amit a neve sugall: megváltoztatja az aktuális könyvtárat egy másik könyvtárra. Lehetővé teszi az egyik könyvtárról a másikra való váltást, pontosan úgy, min a megfelelője a Windowsban. A következő parancs az orders nevű aktuális könyvtár alkönyvtárára vált:

cd orders

A könyvtárban egy szinttel feljebb léphet a .. könyvtárnévként való megadásával:

cd ..

Ez a parancs a kezdőkönyvtárra változik; az, amelyikbe az első bejelentkezéskor be kell jelentkeznie:

cd ~

Könyvtárakat a mkdir parancs használatával hozhat létre. A következő parancs a jelenlegi munkakönyvtárban az orders nevű alkönyvtárat hozza létre:

mkdir orders

Ha egy alkönyvtárat és az alatt egy másik alkönyvtárat is létre szeretne hozni egy paranccsal, használja a --parents jelölőt:

mkdir --parents orders/2019

A rmdir parancs töröl (eltávolít) egy könyvtárat, de csak akkor, ha üres. Ha nem üres, figyelmeztetést kap. Szerencsére a paranccsal törölheti a rm nem üres könyvtárakat a -r (rekurzív) jelzővel kombinálva. A parancs így fog kinézni. rm -r

rm parancs

A rm parancs rövid az "eltávolítás" kifejezéshez. Ahogy várta, rm törli a fájlokat. Tehát ez a parancs véget vet a 0001.jpg fájlnak:

rm 0001.jpg

Ez a parancs törli az aktuális könyvtárban lévő összes fájlt:

rm *

Legyen óvatos az rm paranccsal. Ez egy veszélyes parancs.

Az rm-i jelölővel való futtatása lehetővé teszi, hogy a törlés előtt átgondolja, mit töröl:

rm -i *

Tegye szokásává, hogy az -i jelölőt belefoglalja minden rm parancsba, és elkerülheti, hogy a Linux egyik legnagyobb melléfogásának csapdájába essen. A rettegett rm -rf / parancs az összes fájlt törli a teljes meghajtón. Úgy működik, hogy rekurzív módon törli a gyökér összes alkönyvtárát és azok alkönyvtárait. Az -f („Force” – kényszerítés) jelölő a promptok letiltásával súlyosbítja a problémát. Ne tegye ezt.

Ha törölni szeretne egy orders nevű alkönyvtárat, amely nem üres, akkor az rm parancsot a következő módon használhatja:

rm -r orders

Ezzel törli az orders alkönyvtárat és mindent, ami abban található, többek között a többi alkönyvtárat.

cp parancs

A cp parancs nem csak fájlokat másol, de teljes könyvtárakat (és alkönyvtárakat), ha kívánja. Ha a 0001.jpg fájlról 0002.jpg nevű másolatot szeretne készíteni, használja a következő parancsot:

cp 0001.jpg 0002.jpg

Ha a 0002.jpg már létezik, a Bash csendesen lecseréli. Ez nagyszerű, ha ezt szerette volna, de nem annyira csodálatos, ha nem vette észre, hogy felül fogja írni a régi verziót.

Szerencsére, ha az -i („interactive”) jelölőt használja, a Bash figyelmezteti, mielőtt a meglévő fájlokat törölné. Ez sokkal biztonságosabb:

cp -i 0001.jpg 0002.jpg

Természetesen helyettesítő karakterek használatával egyszerre több fájlt is lemásolhat. Ha az aktuális könyvtárban lévő összes fájlt át szeretné másolni a photos nevű alkönyvtárba, tegye a következőket:

cp * photos

Ha a photos nevű alkönyvtárban lévő összes fájlt át szeretné másolni az images nevű alkönyvtárba, tegye a következőt:

cp photos/* images

Ez azt feltételezi, hogy az images könyvtár már létezik. Ha nem, akkor létrehozhatja és átmásolhatja a photos könyvtár tartalmát a következő paranccsal:

cp -r photos images

A -r "rekurzív" szó jelentése. A jelölő további előnye, hogy ha a -r fényképek saját alkönyvtárakat tartalmaznak, azokat is átmásolja a rendszer a képek könyvtárába.

ps parancs

A ps parancs egy pillanatképet ad a jelenleg futó összes folyamatról. Önmagában, argumentumok nélkül, az összes rendszerhéjfolyamatot megjeleníti; más szóval, nem sok. De az egy másik történet, ha az -e jelölőt is belefoglalja:

ps -e

Az -e felsorolja az összes futó folyamatot, és általában sok van belőlük.

Ha átfogóbban meg kívánja vizsgálni, hogy a rendszer milyen folyamatokat futtat, használja az -ef jelölőt:

ps -ef 

Ez a jelölő megjeleníti az összes futó folyamat nevét, a folyamatazonosító számukat (PID-k), a szüleik PID-it (PPID-k), és hogy mikor kezdődtek (STIME). Azt is megjeleníti, hogy melyik terminálhoz vannak csatlakoztatva, (TTY) ha van ilyen, mennyi CPU-időt fogyasztottak (TIME), és a teljes elérési utak nevét. Íme egy rövidített példa:

UID         PID   PPID  C STIME TTY          TIME CMD
root          1      0  0 13:35 ?        00:00:03 /sbin/init
root          2      0  0 13:35 ?        00:00:00 [kthreadd]
root          3      2  0 13:35 ?        00:00:00 [rcu_gp]
root          4      2  0 13:35 ?        00:00:00 [rcu_par_gp]
root          5      2  0 13:35 ?        00:00:00 [kworker/0:0-cgr]
root          6      2  0 13:35 ?        00:00:00 [kworker/0:0H-kb]
root          8      2  0 13:35 ?        00:00:00 [mm_percpu_wq]
root          9      2  0 13:35 ?        00:00:01 [ksoftirqd/0]
root         10      2  0 13:35 ?        00:00:02 [rcu_sched]

Mellékesen előfordulhat, hogy egy olyan dokumentációt talál, amelyben a ps parancsot így használják:

ps aux

A ps aux és a ps -ef azonosak. Ez a kettősség a POSIX UNIX rendszerek (amelyek közül a Linux az egyik) és a BSD UNIX rendszerek (a leggyakoribb a macOS) közötti korábbi különbségekre vezethető vissza. Eleinte a POSIX az -ef jelölőt használta, míg a BSD-nek az aux jelölőre volt szüksége. Napjainkban mindkét operációsrendszer-család elfogadja mindkét formátumot.

Ez kiválóan emlékeztet arra, hogy miért érdemes alaposan megtekinteni az összes Linux-parancs kézikönyvét. A Bash elsajátítása olyan, mint az angol nyelv megtanulása idegen nyelvként. A szabályoknak számos kivétele van.

w parancs

A felhasználók jönnek és mennek, de néha előfordulnak olyan felhasználók, akikre egyáltalán nincs szüksége. Ha egy felhasználó elhagyja a vállalatot, hogy más lehetőségeket keressen, a rendszergazda feladata, hogy a munkavállaló többé ne tudjon bejelentkezni a vállalat számítógépes rendszereibe. A sysadminok várhatóan azt is tudni fogják, hogy ki jelentkezett be, és ki nem.

Ha meg szeretné tudni, hogy kik vannak a kiszolgálóin, a Linuxban ez a w („who” – ki) paranccsal lehetséges. A jelenleg a számítógéprendszerben található felhasználókra és a tevékenységeikre vonatkozó információkat jeleníti meg. A w megjeleníti a felhasználóneveket, azok IP-címeit, a bejelentkezésük idejét, az éppen futó folyamataikat, és hogy mennyi időt vesznek igénybe ezek a folyamatok. Rendszergazdák esetében ez egy értékes eszköz.

Bash I/O-operátorok

A Linuxban sok mindent tehet csupán a Bash-parancsok és a hozzájuk tartozó nagy számú kapcsoló végrehajtásával. De igazán akkor tud belelendülni a munkába, ha a parancsokat I/O-operátorokkal egyesíti.

  • <: átirányíthatja a bemenetet a billentyűzeten kívüli forrásra
  • >: átirányíthatja a kimenetet a képernyő helyett egy másik célra
  • >>: ugyanezt a műveletet hajtja végre, de felülírás helyett hozzáfűzéssel
  • |: az egyik parancs kimenetét egy másik bemenetére irányítja át

Tegyük fel, hogy szeretne mindent listázni a jelenlegi könyvtárban, de a kimenetet egy listing.txt fájlban szeretné rögzíteni. A következő parancs éppen erre alkalmas:

ls > listing.txt

Ha a listing.txt már létezik, felülírja. Ha ehelyett a >> operátort használja, a parancs hozzáfűzi az ls kimenetét a listings.txt fájlban találhatóakhoz:

ls >> listing.txt

A függőleges vonal operátor különösen hatékony (és gyakran használatos). Átirányítja az első parancs kimenetét egy második parancs bemenetére. Tegyük fel, hogy a cat parancsot használja egy nagyméretű fájl tartalmának megjelenítésére, de a tartalom görgetése túl gyors ahhoz, hogy elolvassa. A kimenetet hatékonyabban kezelheti, ha az eredményeket átirányítja egy másik parancsra, például a more parancsra. A következő parancs felsorolja az aktuálisan futó összes folyamatot. Ha azonban a képernyő megtelt, a kimenet szünetel, amíg az Enter billentyűt le nem nyomja a következő sor megjelenítéséhez:

ps -ef | more

Azt is megteheti, hogy a kimenetet átirányítja a head parancsra, hogy csak az első néhány sort jelenítse meg.

ps -ef | head

Vagy tegyük fel, hogy a kimenetet úgy szeretné szűrni, hogy csak a "démon" szót tartalmazó sorokat tartalmazza. Ennek egyik módja, ha a kimenetet ps a Linux hasznos grep eszközére állítja:

ps -ef | grep daemon

A kimenet a következőhöz hasonló lehet:

azureus+  52463  50702  0 23:28 pts/0    00:00:00 grep --color=auto deamon
azureuser@bash-vm:~$ ps -ef | grep daemon
root        449      1  0 13:35 ?        00:00:17 /usr/lib/linux-tools/4.18.0-1018-azure/hv_kvp_daemon -n
root        988      1  0 13:35 ?        00:00:00 /usr/lib/accountsservice/accounts-daemon
message+   1002      1  0 13:35 ?        00:00:00 /usr/bin/dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation --syslog-only
daemon     1035      1  0 13:35 ?        00:00:00 /usr/sbin/atd -f
root       1037      1  0 13:35 ?        00:00:00 /usr/bin/python3 -u /usr/sbin/waagent -daemon
root       1039      1  0 13:35 ?        00:00:00 /usr/lib/linux-tools/4.18.0-1018-azure/hv_vss_daemon -n
azureus+  52477  50702  0 23:28 pts/0    00:00:00 grep --color=auto daemon

A fájlokat bemenetként is használhatja. Alapértelmezés szerint a normál bemenet a billentyűzetről származik, de át is lehet irányítani. Ha a billentyűzet helyett egy fájlból szeretne adatokat beolvasni, használja a < operátort. A rendszergazda egyik gyakori feladata egy fájl tartalmának rendezése. Ahogy a neve is sugallja, a sort betűrendbe rendezi a szöveget:

sort < file.txt

Ha a rendezett eredményeket új fájlba szeretné menteni, átirányíthatja a bemenetet és a kimenetet:

sort < file.txt > sorted_file.txt

Az I/O-operátorokkal igény szerint láncra fűzheti a Linux-parancsokat. Tekintse meg az alábbi parancsot:

cat file.txt | fmt | pr | lpr

A cat kimenete az fmt, az fmt kimenete pedig a pr parancsba kerül. Az fmt az eredményeket egy rendezett bekezdéssé formázza. A pr oldalakra tördeli az eredményeket. Az lpr pedig elküldi a többoldalas kimenetet a nyomtatónak. Mindez egyetlen sorban!