Szerző: surmo

2000. május 22. 00:00

A parancsértelmező

Minden tendencia és látszat ellenére, általános célra még mindig a billentyűzet a leghatékonyabb beviteli eszköz, nem az egér. Míg Windows-ban másodlagos (vagy huszadlagos..) a command prompt, egy Unix vagy Linux elképzelhetetlen a parancssor nélkül. A shell annyira sokat tud, hogy mindenképpen érdemes megismerkedni vele, mert jó kezekben nagyon hatékony eszköz.

A leggyakrabban használt shell a bash/bash2 és a zsh. Képtelenség lenne felsorolni a funkcióikat, erre ott van a többszáz kilobyte-os manual, néhány általános és gyakran használt tulajdonságot azonban illik ismernie minden linuxosnak, mert pár egyszerű aprósággal már nagyon sokmindent lehet kezdeni. Alapértelmezés szerint minden felhasználó bejelentkezésekor a shell indul el. A szabványos kimenete a képernyő, tehát ide írja az üzeneteit, szabványos bemenete pedig a billentyűzet. Egy egyénileg is beállítható promptot jelenít meg, jelezve, hogy készen áll a parancsok fogadására. Ha elindítunk valamit belőle, a shell azt egy gyermekprocesszként szüli meg, és - ha nem küldjük háttérbe - annak a befejeződésére vár. Ha ez megtörtént, a shell újra megjeleníti a promptot.

[oldal:Kimenet-bemenet]

A shell egyik legnagyobb erőssége, hogy több programot tud egymással párhuzamosan elindítani egyetlen parancsból. Ez akkor nyer értelmet, ha az egyes programok kimeneteit és bemeneteit átirányítjuk úgy, hogy a processzek egymással kommunikáljanak. Hogy ez picit érthetőbb legyen, nézzük meg egy példán:

ls -1 kt*zip | rev | sort | rev

Ebben a sorban a "|" jelek választják el a független parancsokat egymástól, de egyben ezek is kötik össze őket. A | (pipe) funkciója, hogy az előtte álló program szabványos kimenetét (általában a képernyő) átirányítja az utána álló program szabványos bemenetére. Nézzük sorra a parancsokat:
  • "ls -1 kt*zip": kilistázza a kt-vel kezdődő és zip-re végződő állományok nevét, soronként egyet. A -1 kapcsoló biztosítja ezt, különben alapértelmezés szerint az ls tabulátorokkal elválasztva listáz. Rögtön megfigyelhetjük a csillag szerepét: tetszőleges számú, tetszőleges karaktert helyettesít, de mindenfajta kötöttség nélkül. Az utána írt karaktereket is figyelembe veszi a shell, sőt, akár több *-ot is használhatunk, például su*13*zip. A . (pont) karakternek olyanformán nincs szerepe a filenevekben, mint dos/windows alatt: linuxban "kiterjesztés", mint fogalom, nem létezik. A pont is ugyanolyan karakter egy filenévben, mint bármelyik másik, azt leszámítva, hogy a név elején álló pont hidden file-t jelöl.
  • rev: A bemenetére érkező szöveg minden sorát kiadja a kimenetére, a karaktereket fordított sorrendben írva. Például, a "pista"-ból "atsip"-t csinál, minden sort külön megfordítva.
  • sort: a bemenetére érkező sorokat abc sorrendbe rendezve kiadja a kimenetén.
A shell ebben az esetben 4 független processzt fog indítani: egy ls-t, egy sort-ot és két rev-et. Az egyik rev vár az ls kimenetére, a sort az első rev kimenetére, és a másik rev a sort-éra. Így kvázi egy láncon át halad a szöveg, mire végül az utolsó rev - átirányítás híján - a képernyőre írja az adatait. A sor eredményeképpen a filelistát láthatjuk, de hátulról olvasva abc-be rendezve.

A kimenet és a bemenet nem csak másik programnak adható át, hanem file-ba is irányítható: A "> filenév" a file-ba írást jelent, a "< filenév" pedig a file-ból olvasást. Ennek segítségével bármely kimenet eredményét tárolhatjuk egy file-ban, a >> jellel pedig hozzáfűzhetünk bármit (a > felülírja a file-t, ha már létezik).

[oldal:Változók és 'parancs a parancsban']

A shell nem csak egyszerű, beírt parancsok értelmezésére képes, de egy egyszerűsített mini-programnyelv is a rendelkezésünkre áll. Írhatunk egyszerű scripteket, amelyek néha igen bonyolult feladatokat tudnak elvégezni, gyakran olyanokat, ami az embernek kulimunka lenne. Egy gyakori eset, amikor egy könyvtárban levő állományokat kellene szisztematikusan átnevezni, például 20 mp3-nak valami egységes, sorszámozott nevet adni. Ekkor egyetlen félsoros ciklussal megoldhatjuk a problémát.

Egy shell script egy egyszerű szöveges file, aminek az első sorában illik tartalmaznia, hogy melyik shell futtassa őt. Ennek a szintaxisa például "#!/bin/sh", ekkor a régi és elavult, de minden rendszeren megtalálható sh fogja a scriptet kezelésbe venni. Ettől az egy sortól eltekintve, a shell a #-kal (hashmark) kezdődő sorokat megjegyzésnek tekinti és nem foglalkozik velük.

A shell a változókat nagyon szabadon és rugalmasan kezeli. Változónak tetszőleges sztringet használhatunk, de a könnyebb megkülönböztetés végett ezeket szokás csupa nagybetűvel írni. (A Unix és Linux világában a kis- és nagybetű mindig különbözik.) A shell maga definiál és használ néhány változót, akad köztük pár nagyon hasznos is, például:
  • HOME: a felhasználó home könyvtára
  • SHELL: maga a shell típusa (bash, bash2, sh, ksh, zsh, ...)
  • PATH: a dos-ban már megszokott elérési út, azonban itt nincs 512 byte-os korlát
  • PWD: az aktuális könyvtár, ahol éppen vagyunk
  • PPID: a shell szülőjének processz ID-je
  • TERM: a terminálemuláció típusa (kompatibilitási okokból)
  • PS1: az elsődleges prompt sztring (van még három)
A változóknak = jellel adhatunk értéket, az értékükre pedig $név formában hivatkozhatunk. A változók típusa sztring lesz, de a shell számként értelmezi, ha $[...] vagy $((...)) jelek között szerepel. Parancsot hajtathatunk végre egy másik paranccsal, ha a beágyazottat `..` (visszafelé aposztróf) jelek közé tesszük: ekkor a belső parancs kimenetét fogja a külső parancs visszakapni. Nézzünk végül a változók és az egymásba ágyazott parancsok használatára egy példát, a sorban a lépéseket:
  • echo 1234 > szam.txt
    Létrehoz egy szam.txt nevű file-t, és beleírja az "1234" karaktersorozatot.
  • SZAM=`cat szam.txt`
    Végrehajtja a cat parancsot, azaz visszaadja a szam.txt tartalmát, és ezt értékül adja a SZAM nevű változónak.
  • echo $[$SZAM+2]
    Aritmetikai kifejezésként értelmezi a szögletes zárójelben foglaltakat, tehát a SZAM értékéhez hozzáad kettőt, és ezt kiírja a szabványos kimenetre. Egy "> szam.txt" sor végére toldásával az értéket visszaírhatjuk a file-ba.
A lehetőségek száma szinte végtelen, és kiegészítve a disztribúciókhoz tartozó textutils csomaggal, amelyben a legkülönfélébb szövegformázó és átalakító programok szerepelnek, parancssorból akár hatalmas mennyiségű adatot, nagyméretű szöveges állományokat is lehet hatékonyan kezelni. A későbbiekben ezekről a segédprogramokról is ejtünk majd szót.

Nagyon széles az a skála, amin az állásinterjú visszajelzések tartalmi minősége mozog: túl rövid, túl hosszú, semmitmondó, értelmetlen vagy semmi. A friss heti kraftie hírlevélben ezt jártuk körül. Ha tetszett a cikk, iratkozz fel, és minden héten elküldjük emailben a legfrissebbet!

a címlapról

AKROBATA

5

Elrajtolt az Adobe AI asszisztense

2024. április 17. 12:40

Előfizetéses modellben használható az AI Assistant, ami a cég PDF-szerkesztőjébe és olvasójába épül be.