Labor, 5. hét: parancssor
Pohl László, Czirkos Zoltán · 2024.09.28.
Operációs rendszer, Windows parancssor alapismeretek: fájlok, parancssori argumentumok.
Bár az átlagos felhasználó nem szokta használni, a Windows is rendelkezik egy ún. parancssori felhasználói felülettel, ahogyan a Unix típusú operációs rendszerek is. Ezen a felületen különböző parancsokat begépelve lehet elvégezni az alapvető feladatokat, pl. fájlok létrehozását, listázását és törlését. A mai laboron többek között ezzel is megismerkedünk.
Jelentkeztél NZH-ra? Nézted a nagy házik listáját és választottál feladatot? Ne feledd, ezek határidős feladatok!
A Start menü Futtatás… parancsát választva indítsd el a cmd.exe
programot! (Windows 10 esetén:
a Start gombra jobb klikk, és Futtatás, vagy Windows + R.) A továbbiakban a
megjelenő konzolablakban kell dolgozni. A föl-le billentyűkkel kiválaszthatóak a korábban beírt
parancsok, így nem kell egy dolgot többször begépelni.
Program indítása parancssorból
Egy program indításához csak be kell írni a nevét. Írd be:
notepad.exe
Erre elindul a Jegyzettömb, mintha a Start menüből indítottad volna.
A Windows automatikusan kiegészíti a programok nevét az ahhoz tartozó kiterjesztéssel
(végződéssel, extension, .com
, .exe
, .bat
). Így a programot a
.exe
kiterjesztés beírása nélkül is futtathatod. Zárd be a Jegyzettömböt,
és próbáld ki így is:
notepad
Programok paraméterei
A legtöbb konzolos alkalmazás, de gyakran az ablakokat használó programok is, kaphatnak paramétereket. Próbaképp írd be az alábbi sort. Mit tapasztalsz?
notepad szoveg.txt
Egy programnak tetszőleges számú parancssori paramétere, más néven parancssori argumentuma (command line argument) lehet. Ezeket a program neve után írjuk, és szóközzel választjuk el egymástól.
Ha paraméterként fájlt adunk meg, és az útvonalban vagy a fájlnévben szóköz van, normál esetben a Windows a szóközzel elválasztott elemeket külön paraméternek tekintené. Ezért kell ilyenkor idézőjelek közé tenni azt. Pl.:
notepad "Uj szoveg.txt"
Elérési útvonal – path
Honnan tudta az előbb a Windows, hogy hol van a notepad.exe
? Hiszen az is egy fájl, amit
meg kell keresnie a program elindításához. Onnan, hogy van egy lista azokról a mappákról,
ahol a gyakran használt programok vannak. Így nem kell mindig beírni a mappa teljes nevét. A listát így tudod kiíratni:
path
A kurzor az ún. prompt végén villog. Ez alapesetben az aktuális útvonalból
(mappa nevéből, path) és a >
jelből áll. Ezt figyeld majd, miközben dolgozol!
A mappát (folder) a parancssori parancsok a directory szóból származtatják (a mappák másik neve, magyarul könyvtár). A mappa tartalmának listázása:
dir
Az eredmény a mappa tartalma: itt további mappák, valamint fájlok lehetnek. Ha nem a legfölső
szinten (a gyökérkönyvtárban) vagyunk (C:\
), akkor egy .
és egy
..
nevű mappa (<DIR>
jelzi) is látható. A .
az aktuális
mappát jelenti, a ..
az egy szinttel feljebb lévőt. Navigálj el egy Windows Fájlkezelővel a
parancssori ablakod mappájába, és hasonlítsd össze a listát az Fájlkezelőben látható tartalommal!
A dir
parancsnak számos paramétere (kapcsolója) van, ezekről bővebb információ a
dir /?
paranccsal kapható. A többi parancsnak is van hasonló helpje, ezt a továbbiakban nem jelezzük külön.
Mappa váltása
Mappát váltani a chdir
paranccsal, vagy ennek rövidebb változatával, a
cd
-vel lehet. Lépj egy szinttel feljebb:
cd ..
Lépj a gyökérkönyvtárba:
cd \
vagy
cd /
A mappák neveit a \ (fordított per vagy visszaper (backslash), AltGr+Q) választja el egymástól az elérési útvonalon. A Windows támogatja a UNIX-ból származó /-t is, a két jel bármelyikét bármikor használhatjuk. A Windows hasonlóan rugalmas a kis és nagybetűk kezelésében: a mappák és fájlok és parancsok nevében nem számít, hogy kis- ill. nagybetűről van szó (pl. notepad, Notepad, NOTEPAD, stb. egyaránt használható). Más rendszerek azonban megkülönböztetik ezeket. Informatikusként sokféle rendszerrel dolgoznod kell majd, ezért jobb, ha mindent a tényleges nevén használsz.
Menj most vissza a felhasználód saját mappájába, a lentihez hasonló módon! Az 111111 helyére a felhasználóneved kerül.
cd C:\Users\111111\
Mappa létrehozása és törlése
Mappát létrehozni az mkdir
vagy md
parancsokkal lehet:
md clabor
Mappát törölni az rmdir
vagy rd
paranccsal lehet:
rd clabor
A parancs a mappát csak akkor törli, ha az üres.
Vigyázz! Ha a következő sort írod, két mappa jön létre, egy „c” és egy „labor” nevű: md c labor
.
Ha „c labor” nevű mappát szeretnél, tedd idézőjelbe a nevet: md "c labor"
! (Akkor is szabad idézőjelbe tenni, ha nincs benne szóköz? Próbáld ki!)
Egyes parancsoknak, mint pl. a dir
-nek is, ún. wildcard-okkal megadott
fájlneveket is lehet adni paraméterként. Pl. az alábbi sor csak az .exe
kiterjesztésű fájlokat listázza:
cd c:\Windows dir *.exe
A ?
karakterrel egy, a *
karakterrel több karaktert
helyettesíthetünk a névben. Pl.: dir x*e
kilistázza az x-szel kezdődő, e-re
végződő fájlokat. Akár több *
is lehet: dir x*py*e
. A kérdőjel használata:
dir C_85?.NLS
.
Akár a Helló világ, akár egy saját programod is megfelel ehhez a kísérlethez. Legyen a program futtatható, azaz fordítsuk le a fejlesztőkörnyezetből. Ez biztosítja, hogy létezzen a futtatható állomány, még ha a feltöltés előtt töröltük is azt.
A futtatható program
A fejlesztőkörnyezet által létrehozott saját program ugyanúgy működik, mint a többi parancssori alkalmazás: tartozik hozzá
egy .exe
fájl, és fájlba irányítható ennek is a kimenete. A programodat a fejlesztőkörnyezet nélkül is tudod futtatni, lássuk hogyan.
Keresd meg a lefordított programot a számítógépen! Ez valahol abban a mappában lesz, amelyiket kiválasztottad a projekt létrehozásánál. Keresd ezt meg a fájlkezelőben!
Tipp: ha nem emlékszel a mappa nevére, meg tudod keresni. A Code::Blocks az ablakának bal oldalán sorolja fel a projekthez
rendelt fájlokat, a „Management/Project” sávon. Itt van a main.c
nevű is. Jobb klikk, „Properties…”: a „File name
(absolute)” résznél látod a fájl teljes elérési útját, mappákkal együtt:
C:\Documents and Settings\Név\Dokumentumok...
– Windows XP.C:\Users\Név\...
– Windows 7-től fölfelé. (Vigyázat: nem User, hanem Users!)/home/név/...
– Linux.
Nyiss egy parancssori ablakot! Navigálj el a projektedhez!
C:\> cd C:\Users\111111\projektem\
Írd be itt a dir
parancsot, hogy lásd a fájlokat! Ott kell legyen például a main.c
fájl is.
C:\Users\111111\projektem\> dir
Lépj be a bin\Debug
mappába, és add ki újra a dir
parancsot! Ott kell legyen a lefordított program, az
elso.exe
.
C:\Users\111111\projektem\> cd bin\Debug C:\Users\111111\projektem\bin\Debug> dir
Indítsd el, a nevének beírásával:
C:\Users\111111\projektem\bin\Debug> elso.exe
A lefordított program egy fájl, amely tartalmazza azokat a számítógépnek szóló utasításokat,
amelyek végül kiírják a kívánt szöveget; és még egy sor egyéb dolgot, amelyek az operációs
rendszernek kellenek. Az ilyet futtathatónak szokás nevezni (vagy a szakzsargonban binárisnak,
binary). Ilyen fájlokat tartalmaznak a programok telepítői is (installer). A lefordított program
emberi fogyasztásra már alkalmatlan. Próbáld meg kiíratni a tartalmát a type elso.exe
(Linuxon: cat elso
) paranccsal, látni fogod.
Fájlok törlése
Ha egy fájlra már nincs szükség, a del
paranccsal lehet törölni, paramétere a törlendő fájl neve.
Ennek is lehet wildcard-okkal megadni nevet, de nagyon körültekintően bánjunk vele, mert a törölt fájlokat
nem tudjuk visszanyerni. Töröljük a lefordított programot, hisz azt bármikor újra elő tudjuk állítani:
C:\Users\111111\projektem\bin\Debug> del elso.exe
Egy újabb listázással ellenőrizhetjük, hogy valóban megtörtént-e a törlés.
Megszoktuk, hogy a feladatok leadása előtt a bin
és az obj
mappákat törölni kell, mert azokban generált bináris tartalom van, amit a portál elutasít.
Ezt a feladatot is el tudjuk végezni parancssorból, de ez is nagy körültekintést igényel. A del
parancsnak
átadott /s
kapcsolóval a megadott könyvtár, és annak teljes tartalma törölhető. Itt végképp
nem tanácsos wildcard-okat használni, kis hiba is végzetes következményekkel járhat.
Lépjünk feljebb két szinttel, a projekt mappájába. Töröljük a két szükségtelen mappát:
C:\Users\111111\projektem> del /s bin obj
Azért a törlés előtt még visszakérdez a rendszer minden mappára, hogy biztosan töröljük-e, és csak az igen válasz esetén törli.
Egy további /q
kapcsoló megadásával a törlés "csendben", visszakérdezés nélkül megtörténik. Ezzel nagyon óvatosan bánj!
A more
parancs sok dologra jó. Most a begépelt szöveg ismételt megjelenítésére fogjuk használni. Írd be:
more
Most nem jelent meg a prompt, ami mutatja, hogy a more
program éppen fut, és
várja tőlünk a bemenetét. Írj be tetszőleges szöveget, és nyomd meg az Enter-t. Mi
történik? Ezt többször is megismételheted. A Ctrl+Z billentyűkombinációval léphetsz
ki a more
-ból, vissza a parancssorba.
Jegyezd meg: a more
fájl vége jelig olvas be szöveget. Ha ezzel találkozik,
kilép. Ha billentyűzetről gépelsz, a Windowsban a fájl, vagyis a begépelt szöveg vége jelet a
Ctrl+Z-vel lehet adni; ezt üres sorban kell írni, tehát Enter után.
Írd most be:
more > szoveg.txt
Gépeld be ismét szövegeket! Mit tapasztalsz? Több sor begépelése után lépj ki a
more
-ból a szokásos módon! Listázd ki a mappa tartalmát! Mit tapasztalsz?
C:\WINDOWS> more > szoveg.txt Access denied
Előfordulhat, hogy a mappa, amelyben épp vagy, írásvédett. Ekkor hibaüzenetet fogsz kapni.
(Vajon miért nem engedi a gép, hogy az operációs rendszer fájljai közé írj?)
Ha kell, keress másik mappát, amelyben dolgozni fogsz, pl. C:\Users\xxxxx
.
Kérd a laborvezető segítségét!
Írd be:
more < szoveg.txt
Most mit látsz? Figyeld meg, hogy most nem kellett Ctrl+Z-t írni a kilépéshez, mert a more
a szoveg.txt
fájl tartalmát jelenítette meg.
Magyarázat: A konzolos programok a felhasználókkal a szabványos bemenet (standard input) és a szabványos kimenet (standard output) segítségével kommunikálnak. A szabványos bemenet alapértelmezés szerint a billentyűzet, a szabványos kimenet pedig a képernyő. Ezek azonban, a fenti módon, átirányíthatók. A programok nem is tudják, hogy valójában honnan olvasnak és hová írnak, billentyűzetről/képernyőre, vagy fájlból/fájlba.
Tipp: ha egy régebben beírt parancshoz hasonlót szeretnél újra beírni, akkor a ↑ felfelé nyíl billentyűt használva visszakeresheted a régebben beírt sorokat.
more >> szoveg.txt
A fenti parancsot írva a szoveg.txt
fájl végéhez fűződik az újonnan beírt szöveg (egy
>
esetén kérdezés nélkül(!!) törli a korábbi szoveg.txt
-t, ha volt olyan). Ha nem létezett a
szoveg.txt
, mindkét esetben létrehozza.
A programoknak a szabványos kimenet mellett van egy szabványos hibakimenete is, a
hibaüzeneteket ide szokták írni. Alapértelmezés szerint ez is a képernyőre kerül kiírásra. Ha a
program kimenetét átirányítjuk, pl. more nincsilyen.txt > szoveg.txt
, és a more
valami hibaüzenetet szeretne közölni, akkor a hibaüzenet továbbra is a képernyőn jelenik meg,
nem kerül a fájlba. Ha a hibaüzenetet szeretnénk fájlba írni, akkor azt a 2>
átirányítással adhatod meg:
more 2> hiba.txt
Tipp: ha egy meglévő fájl nevét nem szeretnéd végig begépelni, akkor kezdd el az első
pár betűvel, és utána nyomd meg a Tab billentyűt. Erre a Windows parancssora
ki fogja egészíteni a fájlnevet. Pl. a szo
Tab olyan lesz, mintha
beírtad volna, hogy szoveg.txt
.
Windows pipe
Írd be, hogy
cd c:/Windows/System32 dir
Túl sok fájl neve került kiírásra. A more
parancs igazi funkciója, hogy egy szöveget képernyőnyi részekre osztva
jelenítsen meg. Használd ezt a mappa tartalmának kilistázására (a |
az AltGr+W kombinációval érhető
el):
dir | more
A bemutatott módszer a csővezeték (pipe): az egyik program kimenete adja a másik program bemenetét, vagyis ezúttal is a szabványos kimenet és bemenet átirányításáról van szó.
A more
programban szóköz-t leütve egy képernyőnyivel tovább haladhatsz. Ha csak egy sornyit
akarsz léptetni, üss Enter-t! Kilépni a Q billentyű lenyomásával lehet.