Kérdések és válaszok

Az itteni kérdések vagy elhangzottak (pl. előadás szünetében), vagy elhangozhattak volna.
  1. Mit kezdhetek az oktatási segédanyagként kapott .dvi és .ps fájlokkal?

    V:
    külön lapon
  2. Hogyan töröljem le a véletlenül létrehozott  ' -x '  nevű fájlt? (a fájl neve helyközzel kezdődik és végződik.)

    V:
    Álljon a fájlt tartalmazó directoryra, és adja ki az alábbi utasítást:
        rm "./ -x "
    Ilyen fájlt pl. úgy hozhat létre, hogy az előbbi parancsba az "rm" helyett "vi"-t ír, és eltárolja az editált fájlt.

    Ha az így felírt "rm" paranccsal valamilyen Unixban vagy valamilyen más fájlnév esetén nem boldogulna, akkor használja a következő megoldást:

    A "-i" opciót is tartalmazó "ls" parancs megmondja a fájl i-node számát. Legyen ez pl. 12345. A következő parancs az 12345 i-node számú fájl(oka)t törli (az aktuális directoryból vagy aldirectoryjai valamelyikéből):
        find -inum 12345 -exec rm {} \;
    A fájl mindenképpen törlődik, akkor is, ha egynél több neve van.
  3. Hogyan installáljak modemet Linux alatt?

    V:
    külön lapon
  4. Hogyan lehet egy shell scriptben egyetlen jelet beolvasni a billentyűzetről (anélkül, hogy az ENTER-t le kellene ütnie a felhasználónak)?

    V:
    Az alábbi parancs-sorozatok mindegyike egyetlen jelet olvas - a képernyőre történő írás nélkül - az "xxx" környezetváltozóba:
    stty raw -echo; xxx=`dd bs=1 count=1 2>/dev/null`; stty cooked echo
    stty -icanon min 1 -echo; xxx=`dd bs=1 count=1 2>/dev/null`; stty icanon echo

    Linux esetén a "dd bs=1 count=1 2>/dev/null" utasítás helyett "head -1c" is írható. A két stty-beállítás nem azonosan működik a nem szokványos jelek beadásakor. (Pl. a RETURN billentyű leütése a "raw" esetben "CtrlM"-et, a "-icanon" esetben semmit sem tesz az "xxx"-be.).

  5. Hogyan érhetem el, hogy X-Windows ablakban végrehajtódjon a "login script" ($HOME/.profile, stb)?

    V:
    A "bash -login" hatására olyan (login) shell indul, ami végrehajtja a login scriptet. Így indítja a shellt a "login" parancs is.

    Ha "exec" parancs indítja a shellt, akkor abban adjuk meg a "-" opciót. (Pl. exec - /bin/bash)

    Ha "xterm" parancsot indítunk az X-ablakban, használjuk az xterm-nek a "-ls" (=login-shell) opcióját.

    A fenti célra IBM AIX rendszerben az a - nem pontosan megindokolható - trükk elég volt, hogy a /bin/bash fájlnak ("ln" paranccsal) a /bin/-bash nevet (is) adtuk, és ezt adtuk meg a /etc/passwd-ben a felhasználó login shell-jeként.

    Megjegyzés: A "su" parancsban szintén a "-" opció kezdeményezi a "login script" végrehajtását. Ez azt is jelenti, hogy a "root" elrontott (pl. "exit"-et tartalmazó) login scriptje a su root átjelentkezéssel "megkerülhető" !

  6. Hogyan tilthatom le azt, hogy a rendszergazda már sokszor látott üzenetei minden bejelentkezéskor újra a képernyőre kerüljenek? Hogyan olvashatom el ennek az üzenetnek a kezdetét, ha egy képernyőnél hosszabb az üzenet?

    V:
    A "/etc/motd" fájl tartalmazza a rendszergazda "napi üzenetei"-t. A fájlra van olvasási jogunk, tehát more-ral is megnézhetjük.

    A "/etc/motd" megmutatását letilthatjuk azzal, hogy a $HOME directorynkban létrehozunk egy .hushlogin nevű fájlt (tetszőleges tartalommal). Pl. a ".profile" (ill. ".bash_profile") fájlba tett következő részlet csak akkor mutatja a fájlt, ha megújult tartalmát még nem láttuk:

    if [ ! -e .hushlogin -o /etc/motd -nt .hushlogin ] 2>/dev/null
        then cp /etc/motd .hushlogin; more .hushlogin
    fi

    Egy "bonyolultabb" megoldás a "make" parancs különleges használatát mutatja:

    if [ -f /etc/motd ]
        then make -s -f .hushlogin .hushlogin
    fi

    Ezzel azt mondjuk a make-nek, hogy a .hushlogin fájlban van az, hogy mit kell csinálnia, és egyúttal ez a "frissítendő" fájl. Maga a .hushlogin így néz ki:

    .hushlogin: /etc/motd
    ->   touch .hushlogin
    ->   more /etc/motd

    Ezzel azt mondjuk, hogy a .hushlogin a /etc/motd-től függ, és ha régebbi annál, akkor a touch és more parancsokat kell végrehajtani. (A touch(frissíti a .hushlogin dátumát) és more előtt TABulátor jelnek kell állnia (ezt jelöli a ->), mivel a fájlban több, a fentihez hasonló szerkezet is állhat.) (A make-nek a -s opció miatt ugyan "csendben" kellene dolgoznia, de egyes gépeken (pl. valerie) mégis kiírja, hogy "a .hushlogin már up-to-date", ha nincs egyéb dolga.)

    Megjegyzés: A .hushlogin megléte egyéb hatásokkal is jár. Bejelentkezéskor nem lesz mutatva az utolsó login dátuma, és nem kapunk információt arról, hogy a levélfájlunkba újabb levél érkezett ("You have new mail ...").

  7. Mi az a "named pipe"?

    V:
    A "nevesített" pipe egy olyan speciális fájl, amibe - a pipe-hoz hasonlóan - az egyik process beleír, egy másik pedig ezt kiolvashatja. A következő módo(ko)n hozható létre:

    mknod fájlnév p #
    régebbi Unixban csak ez megy
    mkfifo fájlnév

    Pl. ha a "lajos" nevű user nevesített pipe-ként létrehozza a $HOME/.plan nevű fájlját (ebben szokott lenni a felhasználó pgp-kulcsa) az

    mkfifo $HOME/.plan

    paranccsal, majd (háttérben) elindítja az alábbi parancs-sorozatot:

    i=1
    ( while true
       do
        echo
    Ma te vagy a $i., aki a .plan file-omra kivancsi ! >~/.plan
        i=`expr $i + 1`
       done ) &

    akkor mindazok, akik a ".plan" fájlját olvasni akarják (pl. a

    finger -l lajos

    paranccsal), azok lajos "pgp-kulcsa" helyett az előbbi "echo" parancs soronkövetkező lefutásának outputját kapják.

    Megjegyzés: Egynél több processz is irhat a pipe-fájlba, egynél több is olvashat belőle, az írás-olvasás FIFO algoritmus alapján történik. Minden beleírt információ egyszer olvasható ki belőle.

  8. Hogyan érhető el az, hogy egy parancsfájl vagy parancs-sorozat, aminek a standard outputját elirányítják, bizonyos információkat mégis a képernyőre írjon?

    V:
    Egy lehetőség az, hogy a képernyőre szánt információkat a "standard error"-ra irányítjuk.

    Pl. az alábbi parancs-sorozat a "masodik" szöveget a képernyőre írja:

    ( echo elso
      echo masodik 1>&2
      echo harmadik ) >/dev/null

    Másik lehetőség a /dev/tty-ra írás, ami a "standard output" és "standard error" mindegyikének elirányítása esetén is a képernyőre kerül:

    ( echo elso
      echo masodik >/dev/tty
      echo harmadik ) >/dev/null 2>&1


Csizmazia Albert csa@inf.elte.hu
Maulis Ádám maulis@ludens.elte.hu