Bash-parancsok és -kapcsolók
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 sudo
futtatni:
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!