Fodor Zsuzsa
HP OpenVMS operációs rendszer
Felhasználói tanfolyam
Egyetemi jegyzet
PTE TTK Informatikai és Általános Technika Tanszék
Pécs, 2003.
Tartalomjegyzék
Jelölési konvenciók 5
Előszó 6
1. OpenVMS áttekintés 8
1.1. Hardver környezet 8
1.2. Az OpenVMS szerkezete 9
1.3. A processz 10
1.4. Hálózati eszközök 11
1.5. A rendelkezésre álló dokumentáció 12
2. Bejelentkezés, kijelentkezés, elemi műveletek 13
2.1. Bejelentkezés 13
2.2. Kijelentkezés 14
2.3. A terminál és billentyűzete 14
2.4. Parancsok használata 15
2.5. A Help 15
3. Az adatkezelő rendszer 17
3.2. A Files-11 directory szerkezet 17
3.3. A filedefiníció 18
3.3.1. A filespecifikáció formája 18
3.3.2. Alapértelmezések a filespecifikációkban 20
3.3.3. A csillag (wildcard) konvenciók 21
3.4. Az RMS 23
3.4.1. File attribútumok 24
3.4.2. Rekord attribútumok 24
3.4.3. Fileműveletek 25
3.4.4. RMS makrók és rendszerszolgáltatások 27
4. A védelmi rendszer 28
4.1. Az objektumok védelme, az UIC 28
4.2. ACL szerinti védelem 31
4.3. Privilégiumok 32
4.4. Erőforráskvóták 34
4.5. Lemezkvóta 36
5. A DCL alapjai 37
5.1. A DCL parancsok elemei 37
5.1.1. A parancssor 37
5.1.2. A hibaüzenetek 40
5.1.3. Terminálhasználat 40
5.2. Logikai nevek 43
5.2.1. A logikai nevek kiértékelése 44
5.2.2. Precedencia és elérési mód 44
5.2.3. A default logikai nevek és logikai név táblák 45
5.3. Szimbólumok és kifejezések 49
5.3.1. A szimbólumok definiálása 50
5.3.2. A szimbólumok behelyettesítése 52
5.3.3. A kifejezések 54
5.4. A dátum és idő kezelése 57
5.4.1. Az abszolút időpont 57
5.4.2. A delta időpont 58
5.4.3. Az összetett időpont 59
6. A szövegszerkesztők 61
6.1. A DECTPU 62
6.1.1. Az EVE használata 62
6.1.2. Az EVE billentyűdefiníciói 64
6.1.3. Néhány további EVE parancs 68
6.2. Az EDT 72
6.2.1. Az EDT üzemmódjai 72
6.2.2. A keypad billentyűzet parancsok 74
6.2.3. További parancsok 78
7. A Mail utility 82
7.1. A legfontosabb üzenetkezelő parancsok 82
7.2. Az irattartók 86
7.3. Címzési módok 87
7.4. Egyéb hasznos parancsok 89
8. A Phone 93
9. Rendezés: a Sort és Merge 95
9.1. Rendezési kulcsok 95
9.2. Kollatálási sorrend 97
10. A DCL 99
10.1. Néhány gyakran használt DCL parancs 99
10.1.1. Filekezelő parancsok 99
10.1.2. File tartalmával foglalkozó parancsok 114
10.2. A könyvtári függvények 119
10.3. Programozás DCL-ben: a parancsfileok 128
10.3.1. A parancseljárások formája és végrehajtása 129
10.3.2. I/O egyszerűen: paraméterek, adatok a parancsfileban, szimbólumok
és logikai nevek 131
10.3.3. Terminál I/O DCL parancsokkal 134
10.3.4. Filekezelés 136
10.3.5. Vezérlésátadás és megszakításkezelés 141
10.3.6. A LOGIN.COM 144
11. A várakozási sorok 147
11.1. A queue menedzsment elemei 147
11.2. A nyomtatás 150
11.3. Kötegelt feldolgozás 153
11.4. A jobok kezelése 157
12. Mentés, helyreállítás 161
12.1. Mentési technikák 161
12.2. A BACKUP segédprogram 162
12.2.1. A BACKUP formái 162
12.2.2. A fontosabb módosítók 167
12.2.3. Mentési és visszatöltési megoldások 169
Irodalomjegyzék 171
Internetes hivatkozások, hasznos oldalak 172
Jelölési konvenciók
1. Szintaktikus leírások
kisbetűs szöveg Egy fogalmat jelöl egy definícióban (be kell helyettesíteni).
NAGYBETŰS SZÖVEG Olyan szintaktikus elem a definícióban, amit változtatás nélkül kell használni.
[] A [] között lévő elemek elhagyhatók.
<> A <> közötti szöveg valamilyen fogalmat ír le.
CTRL/x Billentyűkombináció: A CTRL és a megadott betű egyidejű lenyomásával hozzuk létre.
... Az utolsó elem tetszőleges számú ismétlése megengedett.
2. Szöveges részek
Mivel a számítástechnika dokumentációinak többsége angol nyelvű, ezért a magyar fogalmak mellett zárójelben az angol megfelelőt is feltüntetem, illetve ha nincs elterjedt magyar elnevezés, akkor az angolt használom.
A könyvben szereplő minták esetén a $ jel jelzi a DCL parancssor kezdetét. Szerepelhet esetleg a segédprogram promptja, ha annak szóló parancs szerepel. A képernyőre írható parancsok és az outputok – hasonlóan a VMS dokumentációs CD tartalmához – kék színűek. Például
$ SHOW PROCESS
MAIL>
A példák – ugyanúgy, mint a szöveg többi része – általában 12 pont nagyságúak. Ha valamely példa sorai túl hosszúak, és a termináltól eltérően tördelve jelennének meg a szövegben, akkor kisebb karaktereket használok, de ennek semmi egyéb jelentősége nincs.
Előszó
Ez a jegyzet a PTE TTK Informatika és Általános Technika Tanszékének felkérésére készült, azzal a céllal, hogy a számítástechnika, programozó matematikus, technika és műszaki informatika szakos hallgatók nagyobb betekintést nyerjenek a nagyszámítógépek világába.
Az utóbbi évtizedben a PC, a hálózat, az Internet a mindennapi élet részévé vált. Nagyon sok, számítástechnikához minimális mértékben értő ember is használja őket munkaeszközként anélkül, hogy foglalkozna a működésükkel. S ez így helyes: Autózunk anélkül, hogy pontosan le tudnánk írni a robbanómotor működését, felkapcsoljuk a villanyt, és nem foglalkozunk az elektronokkal, tévézünk, telefonálunk a hullámok terjedésének ismerete nélkül – a példák vég nélkül sorolhatók.
Célszerű viszont, ha a számítástechnikával a diploma megszerzése után bármilyen formában foglalkozók minél szélesebb alapokat kapjanak, és a Linux és Windows mellett egy kimondottan nagyszámítógépes rendszerrel is megismerkedjenek – esetleg egy sorozat első elemeként.
A VMS operációs rendszert 1975-77-ben fejlesztette a Digital Equipment Corporation (DEC), és 1978-ban publikálta a VAX családon futó1.0 verzióját, majd folyamatosan új funkciókkal bővítette.. 1992-ben létrehozták VMS Alpha processzoron működő változatát. 1998-ban a Compaq megvásárolta a DEC-et, de a termékek jelentős részét – köztük a VMS-t – továbbvitte. 2002-ben a Hewlett-Packard Corporation magába olvasztotta a Compaq-ot, s ezzel a világ egyik legjelentősebb IT gyártója és szolgáltatója lett. Az immár HP OpenVMS nevű rendszer fejlesztése változatlanul folytatódik: A Compaq által eltervezett és megkezdett, Itánium II-ön futó VMS az eredeti tervek szerint megjelent és 2004-ben már kereskedelmi forgalomba kerül, miközben folyamatosan fejlesztik hozzá a - HP és mások által gyártott - szoftvereket is. Ezenkívül a HP és jogelődjei által kötött szerződések több mint tizenöt év további fejlesztést ígérnek. (DII COE, USA Védelmi Minisztérium fejlesztési programja egységesen kezelhető IT eszközök létrehozására.)
Miért éppen a HP OpenVMS-t ismerteti ez a tanfolyam? Néhány indokot könnyű felsorolni.
Először is ez a 25 éve élő rendszert a számítógépek harmadik generációján fejlesztik már, és hosszan látható jövője van: A VAX-ok 32 bites, CISC processzorú gépek voltak, az Alpha 64 bites RISC; az Itánium ismét új technológiát jelent (EPIC, Explicitly Parallel Instruction Computing). A teljesítményskála is igen széles, a néhány felhasználót kiszolgáló gépektől a mainframekig terjed; az alkalmazások változtatás nélkül vihetők át egy új konfigurációra.
Továbbá a VMS a cluster technológiával, stabilan megépített rendszerével egyedülállóan alkalmas a folyamatos és gazdaságos működésre: Megfelelően tervezett rendszereken leállás nélkül végezhető mentés, szoftverinstallálás, karbantartás vagy módosítás (upgrade), valamint a konfiguráció lényeges változtatásai (új gépek, perifériák ki- vagy beléptetése, hálózati eszközök és technológiák változása, fizikai helyváltoztatás). Létezik 2000 napnál hosszabb ideje folyamatosan működő élő alkalmazás is. Mindehhez nem szükséges kihasználatlan tartalékeszközök jelenléte.
A rendszer biztonságát részben a beépített technikák (automatikus biztonsági beállítások, kifinomult felhasználói paraméter rendszer, ACL), részben a más rendszerekben is használt eszközök biztosítják (ssh, ssl, Kerberos stb.). (A 2001. DEFCON konferencia véleménye a VMS-ről: cool and unbreakable.)
A VMS rendkívül összetett, sok szolgáltatást nyújtó operációs rendszer: A felhasználói parancsnyelv, a DCL 220-nál több parancsból áll és saját fejlesztésekkel is bővíthető. A napi igényeket szinte teljesen lefedi a 40 segédprogram (mindegyik saját parancsnyelvvel): többek között kommunikáció, mentés, rendezés, szövegszerkesztés, biztonsági szolgáltatások, rendszerelemzés és -változtatás, fileok kezelése lehetséges velük. A filekezelő rendszer akár adatbázis nélkül is alkalmas összetett adatrendszerek kezelésére; a közel 5000, bármely nyelvből hívható rendszerrutin nagyban meggyorsítja a saját fejlesztéseket.
A szokásos 3. és 4. generációs fejlesztői eszközök (programnyelvek, SQL, Java), adatbáziskezelők (Oracle), hálózati szoftverek (TCP/IP, Apache) használhatók a VMS-sel. Több, mint 300 szoftverfejlesztő cég termékei installálhatók a VMS alá (például Oracle, BEA, Legato, Cerner, IDX, Brooks Automation, Sanchez, Wall Street Systems, TECsys Development, MVP, BMC, Computer Associates, Ericom, Logica-CMG, Schlumberger)
VMS-t alkalmaz a biztonságot, megbízhatóságot, gyorsaságot és hatékonyságot igénylő cégek tekintélyes része az államigazgatásban, a pénzügyi szektorban (bankok, tőzsde, szerencsjáték), az egészségügyben; nagy szerepet kap a folyamat- és gyártásirányításban valamint a közlekedésben is. Például VMS-t – is – használ az US Air Force, US Postal Service, Bank Austria, Deutsche Börse, American Stock Exchange, Credit Lyonaise, OMV, SEMA Group, Nokia, Motorola, Indian Railways, INTEL (processzor gyártásirányítás). Magyarországon az APEH, MEH, TÁK, Honvédelmi Minisztérium, Vám és Pénzügyőrség, OTP, Postabank, MKB, Tőzsde, Szerencsjáték RT, MÁV, MATÁV, Westel, Gyógyinfok, MOL Rt, Budapesti Vízmű, Elcoteq, Paksi Atomerőmű, MTI, RTL Klub, Artisjus futtat többek között VMS-t a nagygépes rendszerein.
A HP folytatta a DEC oktatást, tanulást támogató programját: ingyenes hobby vagy oktatási licenc kérhető nem kereskedelmi célú tevékenységhez a VMS-re és további 100 szoftverre. A kisebb teljesítményű VAX-okat, régi Alphákat mostanában selejtezik a cégek – könnyű egy otthoni rendszert nagyon kevés pénzből felépíteni.
A fentieken túl még egy előnyt jelenthet a VMS megismerése: Megnőnek az igényeink a biztonság, a stabilitás, a sok szolgáltatást áttekinthetően nyújtó, hatékony rendszerek iránt.
Nem szabad azonban elfelejtkezni arról, hogy a VMS robusztus rendszer. Rövid idő alatt csak az alapokat vagy egy-egy részrendszer elemeit lehet megtanulni, nem kevés munkával. Ez a tanfolyam is csak ennyit ígér: Olyan alaptudást, amivel már lényegesen könnyebb az önálló tanulás, és áttekintést egy sok tekintetben egyedülálló operációs rendszerről.
Ezért is fontos, hogy a leendő fejlesztők, döntés-előkészítők és döntéshozók – avagy az őket tanítók – reális ismeretekkel rendelkezzenek.
A jegyzetet én írtam, de hálás köszönet illeti mindazokat, akik segítettek, biztattak.
Fodor Zsuzsa
fodor31@gamma.ttk.pte.hu
1. OpenVMS áttekintés
Az OpenVMS többfelhasználós (multiuser), általános célú operációs rendszer, amely lehetővé teszi a rendelkezésre álló erőforrások szabályozott, párhuzamos, egyidőben több feladat között megosztott használatát (multitasking).
A VMS igen sokrétű, összetett szolgáltatásokat nyújt a felhasználók számára, robusztus védelmi rendszere biztosítja, hogy minden processz csak a pontosan körülhatárolt erőforrásokat érheti el, lehetőséget ad az egy gépen belüli és hálózati kommunikációra. Megbízható működése, a különböző platformokon azonos módon futtathatósága lehetővé teszi, hogy igen széles skálán alkalmazzák.
A VMS a Virtual Memory System rövidítése, az Open előtag pedig a nyílt rendszer tulajdonságra utal. A VMS-t a Digital Equipment Corporation, DEC (USA) hozta létre 1977-ben. A DEC-et megvásárolta a Compaq, majd a Compaq-ot a Hewlett-Packard Company, így az operációs rendszer teljes neve: HP OpenVMS. A fejlesztésről és fejlődésről bővebbet a
http://h71000.www7.hp.com/openvms
címen olvashatunk.
1.1. Hardver környezet
Platform (CPU szerint):
.VAX – 32 bit, CISC processzor
.AXP, Alpha – 64 bit, RISC processzor
.IPF, Itanium – 64 bit, EPIC processzor – jelenleg fejlesztés alatt.
A VMS kezel egy vagy több processzoros rendszert (de egy gépen belül csak egyik fajta CPU lehet).
Perifériák
A VMS alatt minden perifériának egységes neve van. Alapelv: két perifériának az egész clusterben nem lehet azonos neve, ezért formájuk:
-.node$device: egy adott cluster-taghoz tartozó eszköz neve
-.$allocation-class$device: több úton elérhető eszköz esetén
A normál felhasználó ezeket a neveket nem tudja változtatni. Úgy kell használnia őket, ahogy a SHOW DEVICE utasításban megjelennek.
Terminál
A rendszer interaktív használata esetén valamilyen végberendezésre van szükségünk, amelyen bejelentkezhetünk. Ez lehet közvetlenül a gépre kapcsolt vagy a hálózaton lévő alfamunerikus vagy grafikus terminál, illetve bármilyen más számítógép, amely képes terminálkapcsolatot létrehozni. A továbbiakban – ha nem félreérthető - terminálnak nevezek minden eszközt, amelyen keresztül megvalósul a bejelentkezés.
Cluster
.Önállóan gépek részben vagy teljesen közös operációs rendszerrel működnek, és fizikailag többféle módon lehetnek hálózatba kapcsolva (10/100/1000 Mb ethernet, fddi, ci, dssi, memory channel, scsi, fibre channel).
.Kialakítható olyan rendszer, melyben a felhasználó bármely clustertagon ugyanazt a felhasználói környezetet használja.
.Lehet VAX és AXP vegyesen is; az AXP/IPF cluster 2004-től elérhető.
.Az operációs rendszer egyes elemeit közösen használják (felhasználói adatbázis, processzing, queue management, mágneses perifériák).
.A közösen használt lemezeken lévő fileok egyenrangúan és egyidőben használhatók minden clustertagról.
.A hálózaton a tagok egyenként és közösen is láthatók (alias name).
.A cluster gépei (majdnem) függetlenül tudják indítani és leállítani az operációs rendszert.
.Kétféle cluster tag van:
-.boot node – elsőként tud boot-olni;
-.satelite node – csak egy boot node segítségével boot-olhat.
1.2. Az OpenVMS szerkezete
A rendszer elemei
.VMS mag (kernel, VMS szakzsargonban: the executive): CPU- és memória megosztás, a prioritások, a vezérlők (driver) kezelése, a processzek kiszolgálása
.DCL (Digital Command Language): parancsnyelv, melyen keresztül a felhasználó a rendszerrel kommunikál
.RMS (Record Management System): filekezelő rendszer
.assembly nyelv (Macro-32, Macro-64)
.segédprogramok (utility): önálló funkciókkal rendelkező rendszerprogramok egy-egy szolgáltatás megvalósítására (például levelezés, szövegszerkesztés, mentés, stb.)
.hálózati alapszolgáltatások (DECnet és TCP/IP funkciók egyaránt)
Az operációs rendszerre épülő szoftverek
.hálózati elemek: DECnet (VMS-t futtató gépek közötti kommunikációra), TCP/IP (tetszőleges számítógépek közti kommunikációra)
.layered products (programnyelvek, adatbázis-kezelők, 4. generációs eszközök fejlesztésre, web szolgáltatásokra, stb.)
Mindez konzisztens formában van egybeépítve: közösen használható, egységes felületű rendszerelemek, azonos formájú és jelentésben is konzisztens felhasználói felületek a VMS minden szolgáltatásánál.
1.3. A processz
A VMS bármely erőforrásához csak úgy férhetünk hozzá, rendelkezünk érvényes bejelentkezési joggal (account): egy felhasználói névvel (username) és a hozzá tartozó jelszóval (password). Ezután be kell jelentkeznünk egy terminálról. Bejelentkezéskor az operációs rendszer létrehoz egy környezetet, amely tartalmazza mindazt az információt, amelyre szükség van a rendszer szolgáltatásainak igénybevételekor és a programjaink futtatásához – ezt hívjuk processznek (process). Processz jön létre akkor is, ha egy másik alkalmazás (esetleg egy másik gépről) használja az accountot az erőforrások elérésére.
Az aktuális processzről információk a
$ SHOW PROCESS
paranccsal (esetleg az /ALL módosítóval bővítve) lekérdezhetők és – részben – különböző DCL parancsokkal módosíthatók. A rendszerben élő összes processz a
$ SHOW SYSTEM
parancs outputjaként látható.
Fontos processz paraméterek:
.a processzhez rendelt terminál neve
.a bejelentkezett felhasználó neve (username)
.processz azonosító szám (process identification number, PID) - egyedi az operációs rendszer futása alatt
.a processz neve - a felhasználó nevéből, vagy ha olyan nevű processz már fut, akkor a terminál nevéből képezi a rendszer; a létrehozó is megadhatja a
$ SET PROCESS/NAME
paranccsal
.a felhasználó azonosító kódja (User Identification Code, UIC)
.a processz aktuális és alapprioritása
.az alapértelmezett (default) eszköz és directory (a SET DEFAULT paranccsal változtatható)
.a processz által lefoglalt eszköz(ök)
.az engedélyezett privilégiumok és erőforrás-kvóták
.a számlázáshoz, statisztikához szükséges információk: például CPU idő, memóriahasználat, terminál idő, I/O műveletek száma
.a processz által használt fizikai és virtuális memória
.a processzben indított alprocesszek fája.
Processz típusok:
.Függetlenség szerint:
o.önálló (detached) - a többi processztől teljesen függetlenek
o.alprocessz (subprocess) – az őt létrehozó processztől függnek a paraméterei és az élettartama; a SPAWN paranccsal vagy egy alkalmazással jön létre
.Végrehajtás szerint:
o.interaktív (interactive) – terminálon történő bejelentkezéskor jön létre
o.batch – a SUBMIT parancs hozza létre, és gyakran kevesebb erőforrást igényel
o.network – valamely hálózati alkalmazás hozza létre
.A kapcsolat fajtája szerint:
o.helyi (local) – helyi bejelentkezéssel jött létre
o.távoli (remote) – egy másik számítógépről történő bejelentkezés hozta létre
A rendszerben lévő processzek és fajtáik a
$ SHOW SYSTEM
$ SHOW USER
$ SHOW USER /FULL
$ SHOW USER /NETWORK
parancsokkal kérdezhetők le.
1.4. Hálózati eszközök
Az OpenVMS nem tartalmaz az operációs rendszerek közötti kommunikációra alkalmas elemeket, de az alábbi hálózati szoftverek beilleszkednek a rendszerbe, hálózati funkciókkal egészítik ki az erőforrások kezelését:
.DECnet-Plus for OpenVMS: A VMS installálásakor rendelkezésre álló hálózati szoftver, amely a Digital Network Architecture (DNA) Phase V implementációja. Lehetővé teszi a DECnet vagy IP alkalmazások futtatását és tartalmazza a DECnet Phase IV funkcióit a kompatibilitás érdekében.
.DECnet Phase IV: VMS-t (esetleg RSX-et) futtató gépek közötti kommunikációra alkalmas; (már nem támogatott, a támogatást is külön kell megvenni)
.TCP/IP szolgáltatások megvalósítása VMS környezetben: UCX (Digital TCP/IP), Multinet vagy más termék – külön kell megvenni és installálni, bár általában az alap operációs rendszerhez adnak TCP/IP licencet.
Mindhárom hálózati szoftver lehet ugyanabban a hálózatban, és ugyanazon a gépen lehet TCP/IP és Decnet Phase IV vagy Phase V.
Hálózati szolgáltatások:
.beépítve a VMS-be
o.távoli file elérés (kibővített filespecifikáció)
o.COPY, DELETE, PRINT, DELETE DCL parancsok ugyanolyan formában használhatók
o.BACKUP, PHONE, MAIL segédprogramok
.adatbázis-kezelés hálózaton
.print és batch job futtatása távoli gépen
.távoli parancsvégrehajtás
.hálózati nyomtatók kezelése
.hálózat menedzsment: routing, DNS, NTP, FTAM, ARP, TFTP
1.5.A rendelkezésre álló dokumentáció
A dokumentációs CD része az installáló kitnek. A fileok ISO9660 Level 2 CD-ROM-on, HTML, PDF, PostScript, ASCII text formában találhatók meg. (Tehát nem csak VMS, hanem például Windows alatt is olvashatók.)
Tartalma:
*OpenVMS Operating System
*Availability Manager
*DECnet-Plus for OpenVMS
*Advanced Server for OpenVMS
*PATHWORKS for OpenVMS
*DIGITAL TCP/IP Services for OpenVMS
*DECwindows Motif for OpenVMS
*DIGITAL DCE for OpenVMS
*DECdfs for OpenVMS
*Netscape FastTrack Web Server for OpenVMS Alpha
OpenVMS Operating System csomag csoportosítása:
-.General User
-.System Management
-.Programming
Ha általános ismereteket akarunk a VMS-ről szerezni, akkor célszerű az OpenVMS User's Manual kézikönyvvel kezdeni. A DCL-t az OpenVMS DCL Dictionary írja le, a segédprogramokat több könyvben találjuk meg, funkció szerint csoportosítva. A lemezen van Master index is, de csak PDF formában.
Az Overview of OpenVMS Documentation könyvben hasznos lehet a Where to Find Information fejezet, ha a régi dokumentációt jól ismerjük.
A legfrissebb dokumentáció megtalálható a
http://h71000.www7.hp.com/doc/
honlapon.
2.Processz létrehozása, elemi műveletek
2.1.Bejelentkezés
A következőkben leírtak csak az interaktív processz létrehozására vonatkoznak teljes egészében.
A bejelentkezés előtt a felhasználónak (user) rendelkeznie kell a Felhasználói Névjegyzékben (User Authorization File, UAF) egy érvényes (nem letiltott, lejárt) bejegyzéssel (account) és egy, a bejelentkezésekor elérhető lemezen lennie kell egy hozzá rendelt directorynak. Ezeket az operációs rendszer felelősének (system manager) kell előkészíteni. A bejelentkezéshez szükséges egy, az operációs rendszerben ismert sebességre beállított terminál vagy terminálemuláció egy másik gépen. A termináltól függő módon kell kezdeményezni a bejelentkezést. (Terminálon CTRL/C, <Return> billentyű, másik gépen Telnet, SET HOST parancs vagy terminálemuláció elindítása után tudunk kapcsolatot létesíteni a rendszerrel.)
A rendszer a rendszergazda által beállított azonosító szöveget ír ki, majd kéri a felhasználó nevét és jelszavát:
Pécsi Tudományegyetem, TTK
Username: FODOR
Password: <PASSWORD>
A jelszó nem jelenik meg a képernyőn.
Ha az account érvényes és a jelszó helyes, akkor a rendszer néhány információs sort ír ki:
.üdvözlő szöveget
.az utolsó interaktív és nem interaktív bejelentkezés idejét
.a sikertelen bejelentkezések számát a legutolsó bejelentkezés óta
.esetleg a jelszó érvényességének lejártát
.esetleg a rendszergazda üzeneteit
.az el nem olvasott levelek számát (mail message)
A processz létrejöttekor végrehajtódik – ha létezik – a rendszer közös és a felhasználó saját bejelentkezési parancsfileja. Végül megjelenik a DCL prompt, jelezve, hogy a rendszer parancsra vár:
Welcome to OpenVMS VAX Version 7.3 on node PTEAX1
Last interactive login on Tuesday, 03-AUG-2003 09:16:47.08
Last non-interactive login on Monday, 31-JUL-2003 11:32:34.27
1 failure since last successful login.
$
2.2.Kijelentkezés
A legtöbb processzfajta nem fejeződik be automatikusan, hanem ki kell lépni belőlük: például nem elég bezárni a terminálemuláció ablakát, hanem előtte ki kell lépni a VMS-ből. A kilépés szabaddá teszi a processz által lefoglalt erőforrásokat. Az interaktív processz esetén a LOGOUT parancs szükséges:
$ LOGOUT
SYSTEM logged out at 03-AUG-2003 17:48:56.73
Ha a parancsot a /FULL módosítóval használjuk, akkor a processz által használt erőforrásokról is információt kapunk:
$ LOGOUT/FULL
SYSTEM logged out at 03-AUG-2003 14:23:45.30
Accounting information:
Buffered I/O count: 22 Peak working set size: 90
Direct I/O count: 10 Peak virtual size: 69
Page faults: 68 Mounted volumes: 0
Charged CPU time: 0 00:01:30.50 Elapsed time: 0 04:59:02.63
2.3.A terminál és billentyűzete
A terminál bizonyos billentyűit vagy billentyűcsoportjait a rendszer vezérlő információként értelmezi – használatuk és meglétük függhet a terminálemulációtól is.
Ezek közül azonnal szükség lehet az alábbiakra:
.RETURN, ENTER (Szokás <CR>-rel is jelölni.) - lezárja az éppen gépelt sort, és újat nyit.
.DELETE (vagy DEL vagy ) - az aktuális sorban a kurzortól balra álló karaktert törli, és a kurzort a helyére lépteti.
.CTRL/A – a beszúrás és felülírás módot változtatja egy soron belül.
.CTRL/B vagy felfelé nyíl - az előzőleg begépelt parancsot írja a képernyőre, így az szerkeszthető és újra kiadható. A CTRL/B vagy felfelé nyíl és lefelé nyíl ismételt lenyomásával a korábbi parancsok is ugyanígy előhívhatók.
.Jobbra nyíl, balra nyíl - az éppen begépelt (és <CR>-rel még le nem zárt) vagy a CTRL/B-vel előhívott sorban jobbra és balra léphetünk, a sor tartalmának megváltoztatása nélkül.
.CTRL/U - az aktuális sor kurzortól balra eső részét törli.
.CTRL/C, CTRL/Y
o.Törli az egész, éppen begépelt parancsot, függetlenül attól, az hogy hány soros volt.
o.Ha a rendszer éppen végrehajt egy parancsot, az a CTRL/C vagy CTRL/Y leütésével általában megszakítható.
.CTRL/T - Ha meg akarunk győződni, hogy a terminálunkon aktív a rendszer - és tudni akarjuk, hogy mi fut rajta -, akkor a CTLR/T hatására a rendszer az aktuális processzről információkat ír ki egy sorban. (Are-you-there karakter) A sorban a csomópont és a processz neve, az aktuális időpont, a futó program neve, a felhasznált CPU idő, a page faultok száma, az I/O aktivitás és a memória használat szerepel. A CTRL/T a futó program állapotát nem befolyásolja. Ha a CTRL/T nem hatásos, és a rendszer biztosan "él", úgy a
$ SET CONTROL=T
paranccsal lehet beállítani a terminált.
.CTRL/Z- általában kilépést jelent minden interaktív rendszerprogram vagy segédprogram használatából. (EOF karakter)
2.4.Parancsok használata
A VMS operációs rendszerrel való kommunikációt a Digital Command Language, a DCL biztosítja. A terminálon begépelt parancsokat a DCL parancsértelmezője olvassa be, és aktivizálja a rendszer megfelelő funkcióit. A DCL parancs egy vagy több angol szóból áll, és tartalmazhat paraméter(eke)t is: mind a parancsszónak, mind a paraméternek lehetnek / jellel kezdődő minősítő szavai (qualifier), a további szóhasználat szerint: módosítói.
Például a
$ SHOW TIME
parancs hatására a rendszer kiírja az aktuális dátumot és időt; a
$ PRINT/COPIES=2 LOGIN.COM
pedig két példányban nyomtatja a LOGIN.COM nevű filet. Az első parancsban sem paraméter, sem módosító nem szerepel; a másodikban a LOGIN.COM a paraméter, a /COPIES=2 pedig módosító. Ha a parancsnak kötelező paraméterei vannak, és ezek nem szerepelnek az általunk beírt sorban, akkor a DCL ezeket külön kérheti, utalva a paraméter szerepére:
$ COPY
_From: FILE1.DAT
_To: FILE2.DAT
Fontos szerepet játszik az alapértelmezés (default) abban, hogy ne kelljen minden esetben a parancsok összes paraméterét és módosítóját feltüntetni. A default olyan eleme a parancsnak (módosító vagy paraméter), amelyet a rendszer feltételez, ha az nem szerepel a parancssorban. Például a PRINT parancs egy példányban nyomtat a /COPIES=n módosító hiányában.
2.5.A Help
Ha már bejelentkeztünk a rendszerbe, nem szükséges mindig a dokumentációt használni, ha nem tudunk valamit. A HELP parancs interaktív segítséget nyújt, ha nem tudjuk egy parancs szintaxisát, vagy nem jut eszünkbe egy parancs neve. A dokumentációs CD nem is tartalmazza minden esetben a teljes lexikális leírást (az összes parancs összes változatát és azok szintaxisát), hanem a kézikönyvben csak utalnak arra, hogy ezeket az online Help segítségével lehet lekérdezni.
A HELP parancs paraméter(ek)kel vagy anélkül is használható. A HELP begépelése után a rendszer tájékoztató szöveget ír ki (a HELP használatáról), majd felsorolja a lehetséges témák (topic) nevét; ezek bármelyikével tovább kérdezhetünk:
$ HELP
<help tájékoztató szöveg>
Topic? COPY
<help tájékoztató szöveg>
COPY Subtopic?
<help tájékoztató szöveg>
A témákon belül - általában több szinten – altémákról (subtopic) is kaphatunk információt. Ha nem tudjuk, hogy mi a szükséges parancs vagy téma neve, akkor a
$ HELP HINTS
paranccsal a funkció körülírásával juthatunk el - szintén több szinten keresztül - a megfelelő információhoz.
Ha a HELP bármely szintjén kérdőjelet gépelünk be, akkor ismét az adott szint választási lehetőségei jelennek meg a képernyőn.
Kilépni a Topic?, Subtopic? kérdésekre adott RETURN válaszokkal vagy CTRL/Z-vel lehet.
A segédprogramok rendelkeznek belső help funkcióval: Ezek is a HELP parancsot használják, és a saját működésükről adnak információt.
Saját help könyvtár is létrehozható a rendszerben – ez ugyanúgy használható, mint az eredetiek.
3.Az adatkezelő rendszer
A VMS rendszerben a mágneslemezek önállóan kezelhetők: speciális esettől eltekintve minden lemez önálló vezérlő információkkal rendelkezik, amelyek a lemez inicializálásakor jönnek létre, és a fileműveletek ebből kiindulva végezhetők el. Ez a Files-11 forma; jellemzője, hogy a fileokra vonatkozó információk az adatoktól elkülönítve, a lemez különleges filejaiban vannak elhelyezve. A vezérlő fileok közül az alábbiak a fontosabbak (bár normál file műveletek esetén ezeket sem kell ismernünk):
.000000.DIR;1 - A lemez directory struktúra gyökere, a Master File Directory (MFD). Az összes vezérlő file ebben a directoryban van, és itt jönnek létre a felhasználók által használt directory-struktúrák gyökerei is.
.INDEXF.SYS;1 - Ez a file tartalmazza a lemez legfontosabb vezérlő blokkjait és az összes file vezérlő információit (a file header-eket).
.BITMAP.SYS - A lemez foglaltsági térképe.
.SECURITY.SYS - A lemez biztonsági információit tartalmazza.
3.2.A Files-11 directory szerkezet
A lemezeken a fileokat felhasználói tartalomjegyzékekben, directorykban helyezzük el. A directory egy file-katalógust tartalmazó file, amely egyaránt tartalmazhat normál fileokat és újabb directorykat. A struktúra a régebbi VMS-eken maximum 8 szintű a Master File Directory-t nem beleszámítva. Az újabb VMS-eken lényegében limit nélküli, azonban a 255 karakternél hosszabb specifikációkat igen nehézkes kezelni. A directory struktúra gyökere minden lemezen az inicializáláskor létrejövő Master File Directory (MFD). Ebbe kerülnek az első szintű directoryk (User File Directory, UFD), majd ezekbe az aldirectoryk (subdirectory). A directory struktúra bármely szintjén levő tartalomjegyzék file a felette levő directoryban szerepel directorynév.DIR;1 néven. Az MDF az MDF-ben jön létre: [000000]000000.DIR;1. (A directory verziószáma mindig 1, nagyobb verziójú directory filet nem is enged létrehozni a rendszer.) A directory specifikáció [] között szerepel, az egyes szintek ponttal (.) vannak elválasztva.
Például az MFD-ben lehet egy
MUNKA.DIR;1
file, és erre [MUNKA] néven hivatkozhatunk a filespecifikációkban; az [MUNKA] directory tartalmazhat egy
ALDIR.DIR;1
filet, s erre az [MUNKA.ALDIR] néven hivatkozhatunk.
A directoryk létrehozását, listázását, törlését az alábbi DCL parancsok teszik lehetővé:
.A CREATE/DIRECTORY paranccsal hozhatunk létre új directoryt.
.A DIRECTORY a tartalomjegyzékben szereplő fileok nevét, típusát, verzióját és esetleg egyéb attribútumait listázza.
.A directoryk törlése a fileok törlésére is használható DELETE paranccsal történik, de ilyenkor a rendszer először ellenőrzi, hogy a törlendő tartalomjegyzék üres-e. Mivel a directory fileok default védelme általában nem engedi meg a törlést, ezért előbb azt a SET PROTECTION paranccsal módosítani kell.
Például:
$ CREATE/DIRECTORY [USER.UJDIR]
$ SET DEFAULT [USER.UJDIR]
$ CREATE UJFILE.TXT
.
.
.
$ DIRECTORY [USER.UJDIR]
$ DELETE UJFILE.TXT;*
$ SET DEFAULT [USER]
$ SET PROTECTION=OWNER:D UJDIR.DIR
$ DELETE UJDIR.DIR;1
3.3.A filedefiníció
3.3.1.A filespecifikáció formája
A directory egy-egy bejegyzése a file nevét, típusát, verzióját és egyedi azonosítóját tartalmazza. Ez az azonosító a file-ID (FID). A file-ID egy számhármas, amelyet a file létrejöttekor kap meg, és a Files-11 kötet életében egyedi azonosító (inicializálástól inicializálásig).
A FID formája: (n,m,o). A számhármas elemei:
.file-szám (file number, NUM): Arra utal, hogy a file header a lemez indexfilejának (INDEXF.SYS file) hányadik blokkját foglalja el.
.szekvencia szám (file sequence number, SEQ): A file header hányadszor íródott felül az inicializálás óta.
.relatív kötetszám (relative volume number, RVN): Többlemezes struktúra esetén megmondja, hogy melyik lemezen van a file.
A File-ID biztosítja a file adatainak elérését, de a normál alkalmazások inkább az alfanumerikus filemeghatározást használják (és a filekezelő rendszerre bízzák az adatelérés lépéseit).
A teljes alfanumerikus file specifikáció az alábbi formájú:
node::device:[directory]file-name.file-type;version
vagy magyar elnevezésekkel:
csomópont::periféria:[directory]filenév.típus;verzió
A : [ ] . ; írásjelek kötelezőek, a különböző mezőket választják el.
A mezők:
.Csomópont - A hálózati csomópont (node) neve; DECnet hálózati név bárhol használható, TCP/IP hálózat esetén használata erősen korlátozott, csak néhány speciális segédprogram tudja kezelni. A DECnet név 1-6 alfanumerikus karakter lehet, és legalább egy betűt kell tartalmaznia. Az 5. megjegyzés leírja az elérést vezérlő string (access control string) használatát a csomópont specifikációban.
.Periféria - A filet tartalmazó periféria (device) neve, fizikai vagy logikai névvel; a fizikai név formai szabályai az 1.1 fejezetben, a logikai névé a 5.2.-ben vannak leírva.
.Directory - directory specifikáció. A directory és aldirectory(k) nevét a filenév képzési szabályai szerint alakíthatjuk ki. Megengedett az UIC formájú directory használata: [g,m] ahol g 1 és 37776, m 1 és 177776 közötti oktális szám. (Ez utóbbi forma csak kompatibilitási okokból maradt meg, manapság nem használják.)
.Filenév - 0-39 karakteres string, amely betűt, számot, kötőjelet (-), aláhúzást (_) és dollárjelet ($) tartalmazhat, és alfanumerikus karakterrel kell kezdődnie.
.Típus - 0-39 karakteres string, amely betűt, számot, kötőjelet (-), aláhúzást (_) és dollárjelet ($) tartalmazhat, és alfanumerikus karakterrel kell kezdődnie.
.Verzió - 1 és 32767 közötti decimális szám, azonos nevű és típusú file verzióit különböztethetjük meg vele egy directoryn belül.
Megjegyzések:
1. A filenévben és filetípusban szereplő dollárjelet ($) a Digital saját használatára lefoglalja.
2. Alphán, 7.2. vagy magasabb verzió esetén, ODS-5 lemezt használva a filenév és típus együtt maximum 255 karakter lehet.
3. A verziószámokra relatív módon is hivatkozhatunk:
-.0: a directoryban azonos nevű és típusú fileok között létező legnagyobb verzió
-.-1: a második legnagyobb verzió a directoryban
-.-2: a létező 3. legnagyobb verzió stb.
-.-0: a directoryban azonos nevű és típusú fileok között létező legkisebb verzió
4. A filespecifikációban szereplő kis- és nagybetűk egyenértékűek: nem jelent különböző specifikációt két string, ha csak a kis- és nagybetűk használatában térnek el egymástól. (kivéve a 7. megjegyzésben leírtakat).
5. A teljes filespecifikációban (amely a csomópont nevet is tartalmazza) szerepelhet egy elérést vezérlő string (access control string). Ekkor a távoli (remote) filet nem a default hálózati felhasználó (DECnet default user) nevében, hanem a megadott felhasználó jogai alapján érhetjük el. Formája:
node"username password"::device:[directory]name.type;version
Ha el akarjuk kerülni, hogy a jelszavunk ilyen módon megjelenjen a képernyőn, akkor proxy accountot kell használni. A proxy adatbázis kezelése a rendszergazda (system manager) feladata.
6. A teljes filespecifikáció maximum 255 karakteres lehet.
7. Az OpenVMS 7.2. verziótól kezdődően Alphán, ODS-5 file struktúra esetén megengedett a kiterjesztett filespecifikáció használata (extended file specification), amely lehetővé teszi a Unix vagy Windows típusú filespecifikáció használatát (kis- és nagybetű megkülönböztetés, 8 bites kódok, speciális karakterek, 255 karakternél hosszabb filespecifikáció használata stb.).
3.3.2.Alapértelmezések a filespecifikációkban
A filespecifikációban nem kötelező mindig minden mezőt kiírni, ilyenkor a rendszer a default értékeket helyettesíti be. A default értékek a filespecifikáció elemeire:
.csomópont: A saját csomópont neve.
.periféria: A bejelentkezéskor vagy a SET DEFAULT utasítással utoljára beállított eszköz.
.directory: A bejelentkezéskor vagy a SET DEFAULT utasítással utoljára beállított directory.
.filenév: Általában nincs default, de sok parancs az output filenévre defaultnak tekinti az input file nevét.
.típus: Parancsonként változó, lásd az alábbi táblázatban
.verzió:
o.Input filera a létező legmagasabb verzió;
o.Output filera a létező legmagasabb + 1
Néhány default filetípus:
CLD Parancsleíró file
COM Parancs eljárás file
DAT Adatfile
DIF A DIFFERENCES parancs outputja
DIR Directory file
DIS A MAIL utility disztribuciós listája
EDT Az EDT szövegszerkesztő inicializáló fileja
EXE A Linker által készített image file
FDL File definiciós nyelv file
HLB Help könyvtár
HLP Help szövegfile
INI Inicializáló file
JOU Az EDT és az ACL Editor napló fileja
LIS Listafile; a TYPE és a PRINT parancs default input fileja
LOG Batch job output file; napló file
MAI Mail üzenetfile
MEM A DIGITAL Standard Runoff (DSR) utility outputja
PS Postscript formátum file
PAR A SYSGEN paraméter fileja
RNO A DIGITAL Standard Runoff (DSR) utility inputja
SYS System image
TLB Szöveg könyvtár
TMP Ideiglenes file
TPU Az EVE editor parancsfileja
TPU$JOURNAL Az EVE editor naplófileja
TXT A szövegkönyvtár inputja, vagy a MAIL parancs outputja
A programnyelvekkel kapcsolatos default filetípusok:
ADA ADA forrásprogram
BAS BASIC forrásprogram
B32 Bliss-32 forrásprogram
C C forrásprogram
COB COBOL forrásprogram
FOR FORTRAN forrásprogram
MAR MACRO-32 (VAX) assembly forrásprogram
M64 MACRO-64 (Alpha) forrásprogram
MAP A linker memóriatérkép outputja
MLB MACRO-32 assembly forráskönyvtár
MSG Üzenetfile
OBJ Tárgyprogram, a fordítók és az assembler outputja
OLB Tárgymodulok könyvtára
OPT A Linker segédprogram opció input fileja
PAS Pascal forrásprogram
PLI PL/I forrásprogram
STB A Linker segédprogram szimbólumtábla output fileja
UPD Update file a VAX MACRO-32 forrásprogramok változtatásához, vagy a SUMSLP editor inputja
3.3.3.A csillag (wildcard) konvenciók
Egyes DCL parancsokban - amelyek több file felsorolását, használatát teszik lehetővé - a filespecifikációkban "bármely" jelentésű jelek is szerepelhetnek. Ezek segítségével lényegesen rövidebben írhatunk le olyan filecsoportokat, amelyek specifikációiban azonos elemek szerepelnek.
A "bármely" jelek két csoportra oszthatók: minta (matching) és kereső (searching) jelek. A minta jel a csillag (*) és a százalékjel (%). Mindkét jel használható a directorynévben, filenévben, filetípusban és csak a csillag használható a verziónál; az UIC formájú directory névben csak a csillag szerepelhet mind a g mind az m helyén.
A csillag karaktert akkor használjuk egy mező vagy részmező helyén, ha arra a helyre tetszőleges hosszú stringet akarunk illeszteni - 0 és a mező maximális hossza között. Például a
$ TYPE *A. DAT
parancs hatására az A.DAT, ALFA.DAT, BETA.DAT stb. íródik ki. A
$ DIRECTORY [USER.*]*.BAS;*
hatására az [USER] directorynál egy szinttel lejjebb lévő, összes BASIC program összes verziójáról kapunk tartalomjegyzéket.
A százalékjel egy tetszőleges karaktert jelent; a directory-névben, filenévben és filetípusban használható. A csillag és a százalékjel együtt is használható egy mezőn belül. Például:
$ PRINT [MA%%]A*B%.DAT
parancs kinyomtatja mindazon a fileok legmagasabb verzióját, amelyek négy karakterből álló, MA-val kezdődő directory-ban vannak, A-val kezdődik a filenév, B-re és egy tetszőleges karakterre végződik, és típusuk DAT.
Eltérő a csillag használata az output specifikációkban: itt a csillag ideiglenes defaultot jelent, a mező értékét az input megfelelő mezője adja.
Meg kell említeni, hogy a minta típusú wildcard jelek nem csak filespecifikációban, hanem például logikai nevek, szimbólumok, könyvtári modulok esetén is szerepelhetnek.
A kereső jelek a directory specifikációban szerepelhetnek; lehetővé teszik, hogy a directory struktúra egyes részfáira vagy szintjeire hivatkozzunk.
A kihagyásjelet (...) akkor használhatjuk, ha a directory hierarchiában egy adott directory szinttől lefelé vagy felfelé akarunk keresni. Például a
$ DIRECTORY [ALFA...DELTA]AAA.DAT
parancs tartalomjegyzéket készít mindazokról az AAA.DAT nevű fileokról, amelyek az olyan DELTA nevü aldirectory(k)ban vannak, amelyek a directory hierarchiában az ALFA directory alatt találhatók.(Pl: [ALFA.BETA.DELTA], [ALFA.A.A.A.DELTA],
[ALFA.DELTA]).
Ha a default directorytól kiindulva akarunk keresni egy aldirectoryt, akkor kezdhetjük ponttal vagy kihagyásjellel az aldirectory nevét. A
$ DIRECTORY [...SUB]
jelenthet [FO.SUB], [FOFO.FO.SUB] directoryt, de a
$ DIRECTORY [.SUB]
azt a SUB nevű aldirectoryt jelenti, amely pontosan eggyel alacsonyabb szintű a jelenlegi default directorynknál.
Ha a directory struktúra legalacsonyabb szintjéig akarunk keresni, akkor kihagyásjellel kell befejezni a directory specifikációt. Például ha az aktuális default directoryt és annak összes aldirectoryját akarjuk látni, akkor:
$ DIRECTORY [...]
parancs szükséges.
A kihagyásjel többször is előfordulhat a specifikációban.
A mínuszjel a felfelé keresést teszi lehetővé a directory hierarchiában. Az egyedülálló mínuszjel eggyel a Master File Directory felé lépést jelent a jelenlegi default szintről: A
$ SET DEFAULT [-]
hatására az előző default directoryt tartalmazó directory lesz a default. (Például ha [ALFA.BETA.GAMMA] volt, akkor [ALFA.BETA] lesz a default.) Ha a default az [ALFA.BETA.GAMMA], akkor az [ALFA.BETA.DELTA]A.LIS filet a
$ TYPE [-.DELTA]A.LIS
paranccsal is kiírathatjuk a terminálra. A mínuszjelből is lehet többet írni egy directory specifikációban: A
$ TYPE [-.-.M]A.LIS
az előző példa szerint az [ALFA.M]A.LIS file listázását jelenti.
3.4.Az RMS
A VMS standard filekezelő rendszere az RMS (Record Management Service); ezt használják a rendszer kész szolgáltatásai, a vásárolt szoftverek és a saját programok is. A DCL-ben egyaránt megtalálhatók a file manipulációs parancsok és a rekord műveleteket lehetővé tevők. A szolgáltatások közvetlenül is hívhatók mind a Macro mind a magasszintű nyelvek esetén, a SYS$LIBRARY:STARLET.MLB rendszerkönyvtár makróit használva.
Az RMS lehetővé teszi a biztonságos és hatékony filemegosztást:
.Egyidőben több processz hozzáférhet a fileokhoz.
.A rekordok automatikus zárolásával biztosítva van az adatok integritása.
.A processzek közötti puffer megosztással minimalizálni lehet a diszkhez fordulások számát.
.A műveletek naplózása (RMS Journaling) véd a struktúra sérülésétől.
A teljes leírás az OpenVMS Record Management Services Reference Manual-ban, az RMS-sel kapcsolatos segédprogramok pedig az OpenVMS Record Management Utilities Reference Manual-ban találhatók.
3.4.1.File attribútumok
Az RMS háromféle fileszerkezetet ismer:
.Szekvenciális - A file rekordjai olyan sorrendben helyezkednek el a fileban, ahogyan felírtuk őket; azaz a rekordok fizikai és logikai sorrendje megegyezik. A rekordok a file elejétől olvashatók vagy módosíthatók, a file végére írhatunk új rekordot; kizárólag a file valahány utolsó rekordja törölhető. Szekvenciális fileok használata minden eszközön megengedett.
.Relatív - Minden rekord azonos nagyságú cellát foglal el. A cellák 1-től növekvő sorszámot kapnak, ez a relatív rekordszám; ez mutatja a rekord relatív helyzetét a file elejéhez képest. Minden cella vagy egy rekordot tartalmaz vagy üres. A rekordok olvashatók/írhatók/módosíthatók szekvenciálisan – cellaszám szerint növekvő sorrendben -, vagy cellaszám szerint random módon elérhetők a fenti műveletekre. Bármely rekord törölhető.
.Indexelt - Az indexelt file két vagy több részből áll: egy rész tartalmazza az adatokat, a többi az indextáblá(ka)t. A rekordok egy vagy több mezője kulcsként használatos, s annak értéke az indextáblában foglalt információ alapján határozza meg a rekord helyét. Egy elsődleges és maximum 254 másodlagos kulcs lehetséges. A kulcsmező típusa lehet a VMS-ben megengedett bármely adattípus (például string, 2, 4, 8 byteos integer, pakolt decimális string vagy a multinacionális karakterkészlet szerinti kollatálási sorú string). A rekordok elérhetők szekvenciálisan is, bármely kulcsmező szerint növekvő vagy csökkenő sorrendben. A random elérés lehetséges a teljes kulcsmezővel megegyező, annál kisebb vagy egyenlő, nagyobb vagy egyenlő, kisebb vagy nagyobb értékű kereső mezővel (a kulcsmező értéke szerint értelmezve a hasonlítást), de használhatjuk a mező prefixét is.
A relatív és indexelt file csak lemezen használható.
3.4.2.Rekord attribútumok
Az RMS négy rekordformátumot támogat:
.Fix hosszú - minden rekord azonos hosszúságú.
.Változó hosszú - a rekord hossza egy meghatározott maximumig bármekkora lehet.
.Változó fix hosszú kontrollal (VFC) - a rekordok nem azonos hosszúak, de mindegyik tartalmaz egy fix hosszú kontrollmezőt. Indexelt fileban nem használható.
.Stream - A rekordok speciális karakterrel vagy karaktersorozattal vannak elválasztva (terminátor). A terminátor lehet
.FF, VT, LF vagy CR-LF (STREAM),
.csak carriage return (STREAM_CR)
.csak line feed (STREAM_LF).
Csak szekvenciális fileban használható. A Unix filefogalomnak leginkább a STREAM_LF felel meg. Emiatt a standard C programok (Unix alól portoltak) a legkönnyebben STREAM_LF fileokkal tudnak dolgozni.
A file karakterisztikájába tartozik a carriage control rekord attribútum is. Ez határozza meg, hogy a file rekord orientált eszközre (terminál, nyomtató) való konvertálásakor milyen kocsivezérlés történjen. Az RMS háromféle rekord attribútumot ismer:
.Carriage return - minden rekord előtt egy LF, utána egy CR íródik ki.
.Fortran - a rekordok 1. byteja FORTRAN típusú vezérlő kódot tartalmaz.
.Print - a rekordok 2 byteos fix része (VFC rekordforma) tartalmazza a carriage kódot.
Ha ezek egyike sem szerepel rekord attribútumként, akkor semmilyen kocsivezérlés nem történik.
A rekordokat az alábbi módokon érhetjük el:
-.Szekvenciális elérés – A szekvenciális vagy relatív fileoknál ez a fizikai elhelyezkedés szerinti elérést jelenti. Indexelt fileok esetén valamelyik kulcs értéke szerinti növekvő vagy csökkenő sorrendet adhatunk meg.
-.Direkt (random) elérés – A relatív fileoknál a rekordszám szerinti elérést jelenti. Alkalmazható fix rekordhosszú szekvenciális fileokra is, ekkor a rekord sorszámát kell megadni.
-.Kulcsos (random) elérés – Az indexelt fileok bármely kulcsa szerinti elérést jelenti. Az RMS lehetővé teszi a kulcsértékkel pontosan megegyező, a kulcsértéknél nagyobb vagy egyenlő vagy nagyobb, illetve kisebb vagy egyenlő vagy kisebb kulcsmező értékű rekord megkeresését. Lehetséges a kulcsmező hosszánál rövidebb kulccsal is keresni (generic key).
-.RFA - Random elérés a rekord filebeli címe szerint (record file address, RFA). Ha már valamilyen más módon elértünk egy rekordot, akkor megkapjuk az RFA-ját, amit későbbi használatra elmenthetünk. Minden file szervezettségnél és rekordtípusnál alkalmazható, és ez a leggyorsabb.
Blokk I/O: Figyelmen kívül hagyhatjuk a file rekord szerkezetét, és a file egy vagy több blokkját olvassuk vagy írjuk - ekkor azonban megsérthetjük a rekord szerkezetet.
3.4.3.Fileműveletek
Az RMS a szokásos file- és rekord műveleteket ismeri:
.open, close – file megnyitása, lezárása
.display, parse – file attribútumainak megjelenítése
.create – file, directory létrehozása
.delete, erase – file törlése; csak a hely felszabadítása vagy biztonsági törlés
.enter, remove – másodlagos bejegyzés létrehozása/törlése a directoryban
.rename – átnevezés (egy lemezen belül)
.directory – directory tartalmának megjelenítése; keresés filenév alapján
.search – keresés file tartalom alapján (directory struktúrában)
.get – rekord olvasása
.put - rekord létrehozása
.find – rekord pointer mozgatása olvasás nélkül (szekvenciális művelet)
.update – rekord tartalmának változtatása
.delete – rekord törlése
.scratch – szekvenciális file utolsó rekordjainak törlése
A fileok létrehozása kétféle módon történhet:
.Felhasználói programmal vagy DCL segítségével lehet létrehozni közvetlenül - ekkor a file attribútumok az OPEN utasításban szerepelnek, vagy az alapértelmezéseket használják (és csak olyan paramétereket használhatunk, melyeket az illető nyelv megenged).
.Először csak egy, a file attribútumait leíró filet hozunk létre, s utána ennek alapján a filet. A file attribútumainak leírására szolgáló célnyelv a File Description Language, az FDL. Az FDL filet az EDIT/FDL paranccsal hozhatjuk létre vagy módosíthatjuk. (A VMS utilityk és könyvtári rutinok is használhatják az FDL-t fileok létrehozására vagy elérésére.) Ezután a CREATE/FDL és a CONVERT/FDL segédprogramokkal hozhatunk létre olyan filet, amely megfelel az FDL fileban leírt attribútumoknak:
$ EDIT /FDL fdl-filespecifikáció
$ CREATE /FDL=fdl-filespecifikáció [filespecifikáció]
File létrehozása adott attribútumokkal:
.CREATE – DCL parancs, csak szekvenciális, változó hosszú rekordú filet tud létrehozni.
.CONVERT – FDL file segítségével bármilyen fileformát használhat a Convert utility
.CREATE/FDL - FDL file segítségével bármilyen fileformát létrehoz
.Felhasználói program segítségével – olyan paraméterekkel hoz létre filet, amit az illető nyelv megenged.
Fileattribútumok lekérdezése:
.DIRECTORY/FULL - Az egész file kezeléséhez szükséges összes információt jeleníti meg.
.ANALYZE/RMS
.A file belső szerkezetéről is ad információkat (rekord szerkezet, egészen a tartalomig, file struktúra stb.), valamint ellenőrzi is a file konzisztenciáját.
.A megadott filehoz létrehozza az őt leíró FDL filet.
.EDIT/FDL – az FDL filet kezelő szövegszerkesztővel át tudjuk tekinteni a benne leírt paramétereket.
3.4.4.RMS makrók és rendszerszolgáltatások
Az RMS lényeges tulajdonsága, hogy bármely nyelven írt felhasználói programból közvetlenül is el lehet érni a szolgáltatásait. Ezt az teszi lehetővé, hogy a fileműveletekhez tartozó információs blokkok beépíthetők a programokba, mezőikre szimbolikus nevekkel hivatkozhatunk; maguk a műveletek pedig függvényként vagy szubrutinként hívhatók. (A magas szintű nyelveknek megvannak a saját filekezelő utasításaik is, ez csak további lehetőséget jelent.)
4.A védelmi rendszer
Az OpenVMS összetett védelmi rendszerrel rendelkezik. Az első lépcsőt a rendszerhez való hozzáférés szabályozása jelenti: Csak akkor tudunk bejelentkezni, ha a rendszer gazdája
.létrehozott egy bejegyzést a felhasználói adatbázisban (UAF rekord)
.érvényessé tette
.ellátta jelszóval
.definiálta mindazokat a paramétereket, amelyek meghatározzák, hogy a rendszer mely és mekkora mértékű szolgáltatásait veheti igénybe a felhasználó által létrehozott processz.
A védelmi rendszer elemeinek egy része automatikusan létrejön, és ha nem is állítunk semmit, a default védelmet biztosítja (UIC szerinti védelem, privilégiumok és erőforráskvóták rendszere). Mások csak külön eljárással jönnek létre, és az előbbi lehetőségek bővítését, finomítását teszik lehetővé (ACL, lemezkvóta).
A teljes rendszer leírását az OpenVMS Guide to System Security kézikönyvben találhatjuk meg.
4.1.Az objektumok védelme, az UIC
A VMS minden olyan objektuma, amely esetén fontos a hozzáférés szabályozása alapértelmezésben rendelkezik egy tulajdonossal (UIC vagy identifier), és egy védelmi mezővel. A gyakran használt védett objektumok a következők:
.Eszköz (device) – periféria.
.Files-11 On-Disk Structure Level 2 (ODS-2) file
.Files-11 On-Disk Structure Level 2 (ODS-2) directory
.Group global section - közös (egy csoportba tartozó processzek által osztottan használható) memória szekció
.Logikai név tábla (logical name table)
.Várakozási sor (queue)
.System global section - közös (a rendszer minden processze által osztottan használható) memória szekció
.Kötet (volume) – a rendszerben ismert (mountolt) mágneses periféria
.Security Profile (template) – kevésbé ismert
A VMS rendszerben minden felhasználónak van egy azonosító kódja (User Identification Code), az UIC. Ez egy 32 biten tárolt érték, amely numerikus vagy alfanumerikus formában jeleníthető meg. A numerikus UIC [g,m] alakú, ahol a [] része a szintaxisnak, a g a csoport (group) azonosító, értéke 1 és 37776 (oktális) között lehet; az m pedig a tag (member) azonosító, értéke 1 és 177776 (oktális) között lehet. (Vagyis a 32 bites mezőből csak 30 bitet lehet UIC céljára használni.) Az alfanumerikus UIC a member értékből és opcionálisan a csoport-névből áll. Az UIC-ok kiosztása, a kétfajta UIC összerendelése a rendszergazda joga és feladata, a felhasználó készen kapja őket.
A védett objektumhoz tartozó tulajdonos UIC és az objektumot elérni kívánó processz UIC-a közötti kapcsolat szerint a processzek 4 csoportba oszthatók:
.SYSTEM - azok a processzek, amelyek
o.UIC-ának csoportszáma 1 és MAXSYSGROUP rendszerparaméter (default: oktális 10) közötti
o.SYSPRV privilégiummal rendelkeznek
o.az objektum tulajdonosával azonos csoportba tartoznak, és GRPPRV privilégiumok van
o.UIC-a megegyezik a filet tartalmazó kötet (volume) tulajdonosának UIC-ával, ha az objektum egy file.
.OWNER - azon processzek, ahol a felhasználó UIC-a megegyezik az objektum tulajdonos UIC-ával.
.GROUP - a felhasználó UIC csoportszáma megegyezik a tulajdonos UIC csoportszámával.
.WORLD - a rendszerben levő összes felhasználó processze. A WORLD típusú kapcsolat mindig fennáll.
Az UIC alapú védelem egy 16 bites védelmi mezőt jelent (protection mask), amely a fenti csoportok mindegyikére négyféle hozzáférést engedélyezhet vagy tilthat meg. A hozzáférés fajtája függ a védett objektum típusától, itt csak a leggyakrabban használtak szerepelnek:
.Fileok esetén:
o.READ - olvasás, másolás, nyomtatás.
o.WRITE - írás; rekordmódosítás.
o.EXECUTE - ha a file végrehajtható programot vagy egy parancseljárást tartalmaz, akkor elindítható.
o.DELETE – törlés.
(Ha a felhasználó READ joggal rendelkezik, akkor az EXECUTE elérési mód is engedélyezett számára.)
.Directory hozzáférési módjai:
o.READ - a directory tartalmának vizsgálata és listázása.
o.WRITE - írás vagy módosítás - azaz a directoryba bejegyzett fileok létrehozása és törlése.
o.EXECUTE - explicit módon (wildcard karakterek nélkül) megadott file megkereshető a directoryban és attribútumai listázhatók.
o.DELETE - a directory file törölhető
(Ha a felhasználó READ joggal rendelkezik, akkor az EXECUTE elérési mód is engedélyezett számára.)
.Kötet (lemez, szalag) hozzáférési módok:
o.READ - a kötet filejai olvashatók, nyomtathatók és másolhatók
o.WRITE - a kötet filejai módosíthatók és írhatók a rekordjaik – mágnesszalagon magában foglalja a READ jogot is
o.EXECUTE - létrehozhatók új fileok a köteten (csak lemezen), és azokba lehet írni
o.DELETE - fileok törölhetők a kötetről (csak lemezen)
(Ha a felhasználó READ joggal rendelkezik, akkor az EXECUTE elérési mód is engedélyezett számára.)
A CONTROL elérési jog az UIC alapú védelmi táblában nem szerepel. Ez az elérési jog a tulajdonossal azonos lehetőséget jelent, valamint lehetővé teszi a védelem és a karakterisztika megváltoztatását. A System és az Owner csoportba tartozó felhasználók mindegyike rendelkezik a CONTROL joggal, a Group és World kategóriák tagjai viszont nem.
Az UIC szerinti védelmi mező automatikusan létrejön, de a
$ SET SECURITY object-name
paranccsal módosíthatjuk a beállításokat, illetve az objektum tulajdonosát is meg tudjuk változtatni. A
$ SHOW SECURITY
paranccsal mindenféle objektum védelmi beállításait lekérdezhetjük, de a fileok és directoryk esetén a
$ DIRECTORY/SECURITY
parancs is használható.
Például
$ DIRECTORY/SECURITY *.LIS
Directory DKA200:[DATA]
LISTA.LIS;1 [SYSTEM] (RWED,RWED,RE,)
Total of 1 file.
$ SET SECURITY/CLASS=FILE -
_$ /PROTECTION=(GROUP:RWE,WORLD:RE)/LOG -
_$ LISTA.LIS
%SET-I-MODIFIED, DKA200:[DATA]LISTA.LIS;1 modified
$
$ DIRECTORY/SECURITY
Directory DKA200:[DATA]
LISTA.LIS;1 [SYSTEM] (RWED,RWED,RWE,RE)
Total of 1 file.
$
A SET SECURITY parancsban nem szereplő mezők értéke nem változik.
Ha egy filehoz hozzá akar férni egy processz, akkor a rendszer először azt ellenőrzi, hogy a kötethez van-e jogunk hozzáférni. Utána a directory struktúra elemeit vizsgálja sorra: legalább EXECUTE jog kell a gyökér directoryhoz és az aldirectorykhoz. Ezután következik a file védelmi mezőjének ellenőrzése.
Bizonyos privilégiumok esetén (GRPPRV, SYSPRV, READALL, BYPASS, VOLPRO) nem a védelmi mező, hanem a privilégium miatt engedélyezett a hozzáférés.
Az UIC-on kívül az operációs rendszer gazdája definiálhat nem UIC-hoz kötődő azonosítókat is (general identifier). Ezek az azonosítók különböző felhasználókhoz tartozhatnak, objektumok tulajdonosai lehetnek stb. Erről az OpenVMS Guide to System Security kézikönyvből tudhatunk meg többet.
4.2. ACL szerinti védelem
Az ACL (Access Control List) általában az UIC alapú védelem pontosítását szolgálja. Az ACL mindig egy objektumhoz kapcsolódik, egy-egy bejegyzése egy UIC vagy UIC sorozat (ez nem feltétlen jelent azonos csoportszámú UIC-okat, hanem tetszőleges UIC-ok felsorolását), vagy identifier számára biztosít, vagy tilt meg hozzáférési jogokat. Az ACL szabályozhatja azt is, hogy a védelem öröklődjön-e az objektum másolatára vagy az ilyen módon védett directoryban létrehozott új filera, illetve lehetőséget nyújt arra, hogy a védett objektumhoz való hozzáférést (a sikeres és a sikertelen hozzáférés esetén is) üzenet jelezze az operátori terminálon (security alarm) és a védelmi napló fileban (security audit).
Az ACL az objektumhoz kapcsolódó lista, melynek minden sora (Access Control Entry, ACE) valamilyen védelmi beállítást tartalmaz. A sorok sorrendje is fontos, mert az ACL kiértékelésekor az első, a hozzáférésnek megfelelő ACE a döntő. (Azaz először a speciálisabb, aztán az általánosabb beállításoknak kell következnie.)
Az ACL-t létrehozni, módosítani és törölni is lehet a
$ SET SECURITY/ACL object-name
paranccsal. A
$ SHOW SECURITY object-name
vagy
$ DIRECTORY/SECURITY
segítségével pedig lekérdezhető. Ezenkívül van egy speciális szövegszerkesztő, az ACL editor, amelyik az ACL szintaktikus szabályait is magában foglalja, és megkönnyíti a ACL létrehozását (szenzitív editor):
$ EDIT/ACL objektum
Általában az ACL létrehozásakor kényelmesebb az ACL editort használni, módosításkor, sok file kezelésekor pedig gyorsabb a SET SECURITY. Ez utóbbinak van egy /LIKE módosítója is, amellyel egyetlen parancssorral átörökíthetjük egy adott objektum ACL-jét további objektum(ok)ra.
A hozzáférés engedélyezése vagy megtiltása a következő módon történik:
.Ha az objektumnak van ACL-je, akkor azt vizsgálja először a rendszer. Ha az ACL egyetlen bejegyzése (ACE) sem tiltja vagy engedi meg explicit módon a kért hozzáférést, akkor az UIC alapú védelem határozza meg jogokat.
.Ha az ACL valamely bejegyzése megengedi a hozzáférést, akkor a felhasználó hozzáférhet az objektumhoz, nincs további ellenőrzés.
.Ha az ACL megtiltja a hozzáférést, akkor a rendszer az UIC alapú védelem SYSTEM és OWNER mezője alapján dönt, a GROUP és WORLD mezők nem ekkor nem játszanak szerepet.
.Ha az objektum nem rendelkezik ACL-lel, akkor az UIC alapú védelmet veszi figyelembe a rendszer.
.A GRPPRV, SYSPRV, READALL, BYPASS, VOLPRO privilégiumokkal rendelkező felhasználók bizonyos vagy minden esetben (privilégiumtól függően) áthághatják mindkét típusú védelmet.
4.3. Privilégiumok
A rendszerben élő processzek rendelkezhetnek bizonyos jogokkal, melyek alapján elérhetnek különleges rendszerfunkciókat, változásokat okozhatnak az erőforrások állapotában, vagy más processzeket befolyásolhatnak - ezek a privilégiumok. A privilégiumokat az operációs rendszer gazdája állítja be permanensen az UAF-ban. A processz élete alatt az aktuális privilégiumok DCL paranccsal beállíthatók és letilthatók (megfelelő jogosultság esetén.)
A privilégiumokat 7 kategóriába soroljuk, aszerint, hogy a felhasználó milyen jogosultságokat kap általuk:
.NONE - Nincs privilégium.
.NORMAL - Minimális privilégium a rendszer hatékony használatára.
.GROUP - Ezekkel a jogokkal az UIC szerint azonos csoportszámú felhasználók egymás erőforrásait a sajátjukéhoz hasonlóan használhatják.
.DEVOUR - Lehetőség a rendszer nem kritikus erőforrásainak használatára.
.SYSTEM - Beavatkozási lehetőség a normál rendszerműveletekbe.
.OBJECTS - Lehetőséget biztosít az objektum védelem átlépésére.
.ALL - A teljes rendszer ellenőrzése.
A normál felhasználóknak szükséges privilégiumok (zárójelben a csoport neve):
.NETMBX (NORMAL) - Hálózati kapcsolat létesíthető (hálózati postaláda létrehozható). E privilégium nélkül nem használhatók a hálózati műveletek.
.TMPMBX (NORMAL) - Ideiglenes postaláda (temporary mailbox) létesíthető: interprocess communication device, semmi köze sincs a levelezéshez. Számos DCL parancs – például PRINT, SPAWN – is használja.
.GROUP (GROUP) – A privilégiummal rendelkező processz az azonos csoportszámú UIC-ok processzeit vezérelheti, illetve információt kérhet róluk. A csoportjába tartozó processzekre kiadhatja a
o.SET PROCESS
o.SHOW PROCESS
o.STOP
DCL parancsokat.
.GRPPRV (GROUP) - A csoport tagjainak objektumait SYSTEM elérési joggal érheti el.
.EXQUOTA (DEVOUR) - Átlépheti a diszk kvótát.
.GRPNAM (DEVOUR) - Csoport szintű logikai nevet helyezhet el a logikai név táblában vagy törölhet onnan.
.PRMMBX (DEVOUR) - Létrehozhat/törölhet permanens postaládát (permanent mailbox).
.PRMCEB (DEVOUR) - Létrehozhat/törölhet permanens közös eseményjelző (event flag) clustert (taskok szinkronizálásakor szükséges lehet).
.PRMGBL (DEVOUR) - Létrehozhat permanens globális szekciót. Ezeket a globális szekciókat egyidőben több processz képezheti le a saját virtuális címterületére és használhatja az ott levő adatokat vagy kódot.
.SHMEM (DEVOUR) - Létrehozhat/törölhet struktúrákat az osztott memóriában.
.ALTPRI (SYSTEM) – A processz növelheti a saját alapprioritását (base priority), vagy GROUP, WORLD privilégium birtokában más processzekét is.
.OPER (SYSTEM) - Operátori funkciók hajthatók végre (például a felhasználó kérésére válaszolni, üzenetet küldeni a bejelentkezett terminálokra, vezérelni az operátori naplózást – a REPLY DCL parancs funkciói).
.WORLD (SYSTEM) – A rendszerben lévő bármely processz ellenőrizhető, a privilégiummal rendelkező processz minden processzre kiadhatja a
o.SET PROCESS
o.SHOW PROCESS
o.STOP
DCL parancsokat.
.SYSGBL (OBJECTS) - Rendszer-szintű globális szekciókat hozhat létre a memóriában.
.VOLPRO (OBJECTS) - Felülbírálhatja a kötetvédelmet.
.READALL (OBJECTS) - Olvasásra minden objektumot elérhet a processz, valamint képes a Backup dátumot megváltoztatni. Illetéktelen kézben veszélyes lehet!
.BYPASS (ALL) - Eltekinthet a rendszer objektumainak UIC és ACL alapú védelmétől, valamint CONTROL jogot biztosít a processznek. Illetéktelen kézben veszélyes lehet!
.CMKRNL (ALL) – Közvetlen (programozói) hozzaférés a kernelhez. Implicit SETPRV. Hozzá nem értő kézben a használata instabillá teheti a rendszert!
.IMPERSONATE (ALL) - Tetszőleges UIC nevében létrehozhat processzt. Illetéktelen kézben veszélyes lehet!
.SETPRV (ALL) - Bármilyen privilégiumot tud engedélyezni a processz magának. Illetéktelen kézben nagyon veszélyes lehet!
.SYSNAM (ALL) - Írhat a rendszer logikai név táblába, azaz létrehozhat, módosíthat és törölhet rendszer szintű logikai neveket. Illetéktelen kézben veszélyes lehet!
.SYSPRV (ALL) - Minden objektumot a SYSTEM védelmi mező alapján érhet el.
A processz aktuális privilégiumai a
$ SHOW PROCESS/PRIVILEGES
14-AUG-2003 14:59:28.53 User: PAPA Process ID: 28200364
Node: FZAXP Process name: "PAPA"
Process privileges:
GROUP may affect other processes in same group
TMPMBX may create temporary mailbox
NETMBX may create network device
Process rights identifiers:
INTERACTIVE
DIALUP
paranccsal kérdezhetők le, és a
$ SET PROCESS/PRIVILEGES=(privilege [,...])
paranccsal módosíthatók az UAF-ban meghatározott keretek között.
4.4. Erőforráskvóták
A felhasználók által használható erőforrások mennyiségét a processz számára érvényes erőforrás kvóták is szabályozzák. A kvóták az UAF rekordban szerepelnek (az operációs rendszer gazdája állítja be őket), és a processz létrejöttekor ezekkel a kvótákkal kezd el működni. Ha a processz elfogyasztja valamely kvótáját, akkor a rendszer általában erőszakosan megszünteti a processzt.
Az UAF-ban van default érték a kvótákra, de ettől néha el kell térni:
1. Ha valamely alkalmazás processzei rendre erőforrás túllépés miatt nem tudnak szabályosan befejeződni, akkor meg kell növelni a hibát okozó kvótá(ka)t a felhasználónál, és esetleg a kvótát befolyásoló rendszerparamétereket is módosítani kell.
2. A VMS alá installálható szoftverek leírása gyakran tartalmaz ajánlásokat a szoftvert használó felhasználó erőforrás kvótáira. Célszerű ezeket betartani! (Különösen az adatbázis-kezelőknél okozhat sok problémát, ha eltérünk az ajánlásoktól.)
Fontos tudni, hogy a már élő processzre nem hatnak az UAF-beli módosítások. Tehát ha egy felhasználó paraméterei változnak, akkor újra be kell jelentkeznie ezek érvényesítéséhez.
A leggyakrabban felmerülő (esetleg "problémás") erőforrás kvóták neve és jelentése:
.ASTLM - Az AST (Asyncronous System Trap) várakozási sor hossza; az egyidejűleg függőben lévő AST-k számának korlátja. Halasztott írás, lassú periféria esetén esetleg növelni kell.
.BIOLM - Az egyidejűleg függőben lévő pufferelt I/O-k száma (terminál, mailbox, hálózati I/O kérések).
.BYTLM - A pufferelt I/O és ideiglenes postaláda (temporary mailbox) létrehozásakor használható pufferek együttes mérete (byteban)
.CPUTIME - CPU idő limit (0:nincs korlát)
.DIOLM - Az egyidejűleg függőben lévő direkt I/O-k száma (mágneslemezes, szalagos I/O).
.ENQLM - Processz zárolási (lock) kvóta: egyidejűleg zárolt erőforrások száma. Adatbázis kezelő programok esetén általában a rendszer default sokszorosára van szükség.
.FILLM - Az egyidőben megnyitott fileok száma.
.MAXJOBS - Egy felhasználó aktív processzeinek száma (0: nincs korlát).
.PGFLQUOTA - A processz által lefoglalható lapok száma a rendszer lap (page) fileban.
.PRCLM - A processz és alprocesszei által indított, egyidejűleg létező alprocesszek száma.
.WSDEFAULT - A processz kezdeti working set mérete (memória lapban).
.WSEXTENT - Working set maximális kiterjesztése (memória lapban), ha van szabad memória terület.
.WSQUOTA - Working set maximális mérete (memória lapban), ameddig mindig kiterjeszthető a processz.
A processz kvótái a
$ SHOW PROCESS/QUOTAS
14-AUG-2001 15:12:28.32 User: PAPA Process ID: 28200364
Node: FZAXP Process name: "PAPA"
Process Quotas:
Account name: VMS
CPU limit: Infinite Direct I/O limit: 6
Buffered I/O byte count quota: 6704 Buffered I/O limit: 6
Timer queue entry quota: 10 Open file quota: 31
Paging file quota: 24945 Subprocess quota: 8
Default page fault cluster: 64 AST limit: 14
Enqueue quota: 30 Shared file limit: 5
Max detached processes: 10 Max active jobs: 12
paranccsal kérdezhetők le.
4.5. Lemezkvóta
A VMS lehetővé teszi, hogy a felhasználók által használt lemezterületeket korlátozzuk – ez a kvóta nem tartozik az erőforrás kvóták közé. A lemezkvótát lemezenként definiáljuk és engedélyezzük, és vagy UIC-ra vagy RESOURCE attribútumú azonosítóra (identifier) adhatjuk meg. Ha egy lemezen működik a kvótázás, akkor diszk-kvóta nélkül csak EXQUOTA privilégiumú processz foglalhat le lemezterületet.
A kvóta file minden lemezen a [000000]QUOTA.SYS. Létrehozása és beállítás minden felhasználóra a rendszergazda vagy a lemez tulajdonosának a feladata. A kvóta két paraméterből áll:
.A normál értékig (authorized quota) a processz mindig helyet foglalhat a lemezen (amennyiben egyáltalán van szabad terület).
.A túlcsordulási területet (permitted overdraft ) a processz csak a kvóta-túllépés előtt megnyitott file továbbnövelésére használhatja fel.
User [1010,1010] has 1320 blocks used, 3680 available,
of 5000 authorized and permitted overdraft of 500 blocks on DISK$MUNKA
5.A DCL alapjai
A Digital Command Language (DCL) biztosítja az OpenVMS felhasználók számára az operációs rendszerrel való kommunikációt.
A teljes DCL parancskészlet, paramétereik és példák az OpenVMS DCL Dictionary kézikönyvben és a HELP-ben szerepelnek. DCL parancsok a VMS segédprogramokat meghívó parancsok is.
A DCL parancsok lehetővé teszik
-.a rendszer bizonyos jellemzőinek megváltoztatását
-.információkérést a rendszerről
-.a processzek vezérlését
-.az aktuális processz környezet módosításának lehetőségét
-.processz információk lekérdezését
-.a fileokkal végezhető műveleteket
-.a lemez, mágnesszalag és egyéb periféria műveleteket
-.parancseljárások létrehozását és végrehajtását
-.a szimbólum és logikai név műveleteket
-.a várakozási sorok (queue) kezelését
-.a rendszer és a felhasználók védelmét
-.a programfejlesztést és végrehajtást
-.az erőforrások gazdaságos kihasználását
A DCL két módon használható: interaktív vagy nem interaktív módban.
.Interaktív módban a parancsokat a terminálon begépelve adjuk meg, vagy előzőleg egy fileba letett parancsokat hajtatunk végre. Ilyenkor meg kell várni a parancs végrehajtását, mielőtt új parancsot adhatunk ki.
.A nem interaktív mód esetén a rendszer egy másik processzt hoz létre, amely végrehajtja a parancsokat. A kötegelt (batch) és a hálózati (network) processz ezt a módot használja.
5.1. A DCL parancsok elemei
5.1.1.A parancssor
A DCL parancs angol szavakból áll, amelyek jelzik a rendszer teendőit. A parancssor formája (a [] között álló elem opcionális):
[$][címke:]parancs[/parancsmódosító…][paraméter…[/paramétermódosító…]] [!megjegyzés]
A dollárjelet (vagy más promptot) az előző interaktív parancs végrehajtása után a rendszer automatikusan kiírja; parancsfileban azonban mindig ezzel kell kezdeni a parancssort.
A címke csak az első mező lehet a $ után, és csak parancseljárásban van értelme használni.
A parancsnevet a paraméterektől legalább egy szóközzel (space) el kell választani. A teljes parancsra érvényes, hogy egy szóköz helyett tetszőleges számú szóköz vagy tabulátor karakter is megengedett. A parancsban kis és nagy betűk egyaránt szerepelhetnek, ezek egyenértékűek, kivéve, ha idézőjelek közé zárjuk őket. A módosítók (qualifiers) mindig per jellel (/) kezdődnek; ez elhatárolójelként is szolgál, ezért a parancsnév vagy paraméter és módosítója közé nem kötelező szóköz vagy tabulátor karaktert írni.
Folytathatjuk a parancssort, ha kötőjellel (-) és <RETURN>-nel zárjuk Ilyenkor a DCL promptja
_$
lesz.
A végrehajtandó parancs nem tartalmazhat 127 elemnél többet, egyetlen elem nem lehet 255 karakternél hosszabb, és a teljes hossz 1024 karakter lehet.
Ha a promptot a SET PROMPT paranccsal megváltoztattuk, akkor interaktív módban mindig az új prompt jelenik meg - a folytatósorban is - de parancsfileban akkor is a $ jelet kell használni.
Például a
$ TYPE NEVSOR.TXT
parancsban a TYPE a parancsszó és a NEVSOR.TXT az egyetlen paraméter. A
$ MONITOR
parancsnak nincs paramétere, és a Monitor segédprogramot hívja meg.
A parancssorban - felkiáltójellel kezdve - megjegyzés helyezhető el. A megjegyzés lehet a parancssor egyetlen eleme is a prompt után.
A DCL parancsnevek és módosítók rövidíthetők. Általában az első négy karakter szükséges, de vannak parancsok, amelyeknél ennél kevesebb is elegendő: minden parancs addig rövidíthető, amíg egyedi marad. Ugyanez érvényes a módosítókra és egyéb kulcsszavakra is. (Általában hasonlóan működnek a rendszerprogramok és a segédprogramok is.) Ha nem írtunk be elegendő betűt valamely parancs felismeréséhez, ezt a rendszer hibaüzenettel jelzi. Az interaktív módban a gyorsabb gépelés miatt célszerű a rövidítéseket használni, de a parancsfileokban írjuk ki a teljes kulcsszavakat a félreértések elkerülése és a könnyebb olvashatóság végett.
A paraméter(ek)nek lehet(nek) értéke(i), ezek előtt egyenlőségjel áll, s ha több van, zárójelben (), vesszővel elválasztva soroljuk fel őket.
A módosítók (qualifier) állhatnak egy kulcsszóból, vagy egy kulcsszóból és a hozzátartozó érték(ek)ből. Az értékek előtt egyenlőségjel (=) áll, bár legtöbbször a kettőspontot is elfogadja a DCL; ha több értéket adunk meg, akkor azokat zárójelek között, vesszővel elválasztva kell felsorolni. A módosító lehet
-.parancsmódosító - ekkor a teljes parancsra vonatkozik
-.helytől függő (positional) módosító - ha a parancsnév után áll, akkor az egész parancsra vonatkozik; ha egyik paramétere után, akkor csak arra
-.paramétermódosító - csak az illető paraméter értelmét befolyásolja.
A módosítók, paraméterek egy részét tagadni is lehet: ekkor a NO szócskával kell kezdeni a módosítót.
Legtöbb módosító rendelkezik default értékkel, ezeket csak akkor kell kiírni, ha ettől eltérően akarjuk használni.
Például a
$ PRINT/COPIES=2 SZOVEG.TXT, LOGIN.COM
$ PRINT ELSO.FOR/COPIES=2, MASOD.BAS
parancsok közül az elsőben a /COPIES parancsmódosító, hatására mindkét filet két példányban nyomtatjuk ki. A második parancsban a pozícionális módosító miatt az ELSO.FOR két példányban, a MASOD.BAS egy példányban nyomtatódik.
Ha a DCL parancsnév sorában nem adjuk meg a kötelező paramétereket, akkor a parancsértelmező szöveges prompttal kérheti azokat.
Például:
$ COPY
_From:
_To:
A COPY parancs input és output paraméterét a promptok után beírva a
$ COPY input output
paranccsal egyenértékű parancsot kapunk.
A bizonyos parancsoknak lehet egysoros és interaktív végrehajtása is (főleg a segédprogramoknak). Ez azt jelenti, hogy begépelve és <RETURN>-nel zárva a parancs nevét az a saját promptjával válaszol és kilépésig egy vagy több belső parancsot adhatunk meg. Egyéb DCL parancs viszont ebben az interaktív módban nem adható ki. A kilépés általában az EXIT paranccsal vagy CTRL/Z-vel történhet. Például
MAIL> SEND
.
.
.
MAIL> EXIT
$
A kiadott parancsok végrehajtásuk közben CTRL/Y, CTRL/C, CTRL/T billentyűkkel megszakíthatók; leírásukat lásd az 5.1.3. fejezetben.
A DCL parancsok általunk meghatározott elemeinél (címke, szimbólum, logikai név, filenév stb.) célszerű ékezet nélküli magyar elnevezéseket használni. A magyar szavak utalhatnak a funkcióra, kényelmesebben olvashatóvá teszik a parancsokat, és főképpen tisztán elkülönítik az általunk megadott elemeket a rendszer kulcsszavaitól.
Az ékezetes betűk használata nem mindig tilos, de a DCL nem minden környezetben értelmezi őket korrektül, ezért célszerű elkerülni. További problémát okozhatnak a terminálemulációk eltérő karakterkészletei. (Kivétel a karakteres konstans, ahol mindig használhatjuk a magyar nyelv szabályainak megfelelő formát.)
5.1.2.A hibaüzenetek
A DCL a parancsok sikeres végrehajtásakor általában explicit kérésre, hiba esetén pedig mindig (ha nem tiltottuk le) üzenetet küld. Az üzenetek általános formája:
%facility-s-identification, text
Ezt esetleg követi egy másodlagos üzenet:
-facility-s-identification, text
A facility az üzenetet küldő rendszerelemet nevezi meg.
Az s (severity) a jelleg:
.I – információs üzenet
.S – sikeres végrehajtás
.W – figyelmeztető üzenet
.E – hiba
.F – súlyos hiba
Az identification az üzenet mnemonikus kódja, amely alapján a hiba részletes leírása (és esetleg tanácsok a kiküszöbölésére) megtalálható az OpenVMS System Messages kézikönyvben, vagy interaktívan lekérdezhető a HELP/MESSAGE paranccsal.
A text az üzenet rövid leírása, sok esetben elegendő segítséget nyújt a hiba kijavításához.
Például
$ COPZ NEVSOR.TXT NEVSOR.DAT
%DCL-W-IVVERB, unrecognized command verb – check validity and spelling
/COPZ/
A COPY parancs helyett beírt COPZ-t a rendszer nem tudta értelmezni, és javasolta a szöveg ellenőrzését.
5.1.3.Terminálhasználat
A terminál bizonyos billentyűit vagy billentyűcsoportjait a DCL vezérlő információként értelmezi. Bizonyos funkciók a CTRL és egy másik billentyű egyidejű lenyomásával érhetők el, ezeket CTRL/billentyűnév módon jelöljük. A különböző terminálemulációk nem feltétlenül biztosítják automatikusan az összes lehetőséget.
A leggyakrabban használt billentyűk:
.RETURN (Szokás CR-ként is jelölni.)
Lezárja a sort, és újat nyit.
.CTRL/B vagy felfelé nyíl
Kiírja az előzőleg beírt parancso(ka)t. Ismételt lenyomásával VAX-on a legutolsó 20, Alphá-n a legutolsó 254 parancs hívható vissza a képernyőre. (Recall puffer használata.)
.CTRL/C vagy F6
o.Törli az aktuális parancs végrehajtását, és kiírja a Cancel szót.
o.Futó program esetén általában a CTRL/Y-nal azonos hatású, de bizonyos programok más jelentéssel használják.
.CTRL/K
Vertikális tabulálás.
.CTRL/O
Elnyomja vagy engedélyezi a terminál outputot (kikapcsolja vagy bekapcsolja). A közben outputra kerülő szöveg elvész. A CTRL/O lenyomásakor az Output Off illetve Output On szöveg jelenik meg.
.CTRL/S vagy F1 (XOFF karakter)
Felfüggeszti a terminál outputot (ebben az esetben nem vész el a terminál output).
.CTRL/Q vagy F1 (XON karakter)
Folytatja a CTRL/S-sel felfüggesztett terminál outputot.
.CTRL/T
Rövid időre megszakítja a terminál outputot, hogy statisztikai információt írjon ki az aktuális processzről: csomópont név, processz név, időpont, futó program neve, a felhasznált CPU idő, a page faultok, a direkt és pufferes I/O-k száma és a használt fizikai memória lapok száma. A CTRL/T felismerését a SET CONTROL=T DCL parancs teszi lehetővé, a SET NOCONTROL=T pedig letiltja.
.CTRL/U
Törli a kurrens input sort a kurzortól balra.
.CTRL/X
Törli a kurrens sor és a typeahead puffer tartalmát.
.CTRL/Y
o.Megszakítja a parancs végrehajtását és visszatér a DCL parancsszinthez anélkül, hogy befejezné a parancsot. Ezután tetszőleges built-in parancs(ok) kiadható(k), majd a CONTINUE-val folytatható a megszakított parancs.
o.Ha tetszőleges olyan parancsot adunk ki, amely egy programot aktivizál (azaz nem built-in parancs), vagy az EXIT-et, akkor a megszakított parancs befejeződik ott, ahol megszakítottuk A CTRL/Y megszakítás a SET NOCONTROL=Y paranccsal letiltható, de ennek alkalmazását a Digital nem ajánlja.
.CTRL/Z vagy F10
Jelzi az adatfile (standard input) végét. A képernyőn Exit jelenik meg.
.DELETE
Törli az utoljára begépelt karaktert. Néhány terminálemulációnál a Backspace es a DELETE gomb jelentése felcserélt, kevert, illetve rossz.
.CTRL/I vagy TAB
A következő tabulálási pontra lépteti a kurzort.
.Lefelé nyíl
A legutolsó 20 vagy 254 parancsot őrző pufferben, a legkorábban kiadott parancstól halad a legutoljára beírtig.
A sorszerkesztő billentyűk az éppen begépelt vagy az utolsó 20 vagy 254 parancs valamelyikének változtatására szolgálnak:
.CTRL/A vagy F14
Átkapcsol a felülíró (overwrite) és beszúró (insert) mód között. A default mód (amit a SET TERMINAL határoz meg), minden sor elején visszaáll.
.CTRL/D vagy balra nyíl
Egy karakterrel balra lépteti a kurzort.
.CTRL/E
A sor végére állítja a kurzort.
.CTRL/F vagy jobbra nyíl
Egy karakterrel jobbra lépteti a kurzort.
.CTRL/H vagy F12 (Backspace)
A sor elejére állítja a kurzort.
.CTRL/J vagy F13 (LF)
Egy szót töröl a kurzor bal oldalán.
.CTRL/U
Törli a karaktereket a sor elejétől a kurzorig.
5.2. Logikai nevek
A logikai név (logical name) általában a teljes filespecifikációt vagy annak egy részét helyettesítő név, amely egyenlő egy vagy több ekvivalencia-stringgel: A logikai nevet a rendszer a hivatkozás végrehajtásakor helyettesíti az ekvivalencia-stringgel, így annak változó értéke más és más hivatkozást tesz lehetővé. A több ekvivalencia-stringgel rendelkező logikai nevet kereső listásnak (search list) is nevezzük; az ilyen logikai név wildcardot megengedő fileműveletek esetén az összes értéket használja, a többi esetben pedig az első megfelelőt. A logikai neveket a rendszer logikai név táblákban tárolja. Ilyen táblákat a rendszer létrehoz az összes felhasználó számára elérhetően (system-wide logical names), minden egyes processznek saját használatra és processz-csoportoknak közösen. Ezenkívül az alkalmazások is definiálhatnak további a táblákat.
Logikai nevet eszközfüggetlen programozás, titkosság vagy rövidítés céljából használunk. A gyakran használt fileok, directoryk vagy perifériák könnyebben kezelhetők, ha helyettük rövid, jobban olvasható logikai nevet használunk. Logikai névvel elkerülhetjük a jelszó megjelenítését akkor, amikor távoli gépen akarunk filet elérni (logical node name). A gyakran használt logikai nevek definíciója bekerülhet a LOGIN.COM parancseljárásba, így nem kell azokat minden bejelentkezéskor külön definiálni. A logikai név mindenütt használható, ahol fizikai specifikáció állhat. A logikai nevet a kernel értékeli ki, nem a DCL. Így nem csak interaktív használat vagy parancseljárás során használhatók, hanem tetszőleges programnyelvben is.
A logikai neveket a felhasználó az ASSIGN, DEFINE, ALLOCATE, MOUNT és OPEN paranccsal definiálhatja, s azok a rendszer valamely logikai név táblájába kerülnek (lásd az 5.2.3. fejezetet). A logikai név, és az ekvivalencia-string vagy ekvivalencia-stringek külön-külön nem lehetnek hosszabbak 255 karakternél. A logikai név betűvel, aláhúzásjellel, kötőjellel, dollárjellel kezdődhet, alfanumerikus karakterrel, dollárjellel, kötőjellel vagy aláhúzásjellel folytatódhat. A logikai név végén lehet kettőspont, ezt az ASSIGN parancs elhagyja, a DEFINE parancs megtartja, amikor a név bekerül a logikai név táblába:
$ ASSIGN equivalence-name[,...] logical-name[:]
$ DEFINE logical-name equivalence-name[,...]
A logikai nevek a SHOW LOGICAL paranccsal jeleníthetők meg, a
$ SHOW LOGICAL logikai név
egy logikai név összes előfordulását képernyőre írja.
A logikai név törlése a DEASSIGN paranccsal lehetséges, illetve a DEALLOCATE, DISMOUNT, CLOSE automatikusan törli az ALLOCATE, MOUNT, OPEN paranccsal létrehozott logikai nevet:
$ DEASSIGN [logical-name[:]]
A filekezelő (OPEN, CLOSE) DCL parancsok a 10.3.4. fejezetben szerepelnek.
5.2.1.A logikai nevek kiértékelése
A filespecifikáció legbaloldalibb része lehet logikai név, ilyenkor a specifikáció többi részétől kettősponttal kell elválasztani. A rendszer a file hivatkozás elemzésekor megvizsgálja a filespecifikáció bal oldali első elemét, hogy logikai név-e. Ha kettősponttal, szóközzel, vesszővel végződik ez az elem, vagy egyetlen a sorban, akkor megkísérli logikai névként kiértékelni, különben nem. (A rendszer a logikai nevet először a processz, majd a job, csoport, rendszer, végül a cluster logikai név táblában keresi. Ha ettől el akarunk térni, akkor az LNM$FILE_DEV logikai nevet kell változtatni a system directory táblában, vagy ilyen logikai nevet definiálni a saját processz táblában.) Ha a rendszer filespecifikációt vagy eszköznevet vizsgál logikai névként, a kiértékelés lehet iteratív; a logikai név helyettesítése után megismétli a bal oldali első elemre az eljárást. Az iteráció megengedett szintje a rendszerben szabályozható, de legalább 9.
A kiértékelés szabályozható a
$ DEFINE /TRANSLATION_ATTRIBUTES=opció
paranccsal. Az opció lehet CONCEALED - ez egy specialis logikai név típus, a rooted directory logical name esetén lehet hasznos, és ekkor a rendszer üzeneteiben nem használja az ekvivalencia-stringet –, vagy TERMINAL, ami megtiltja az iteratív kiértékelést.
Például
$ DEFINE ADATLEMEZ DUA2:
$ DIRECTORY ADATLEMEZ:[USER]*.FOR
esetén a DUA2: lemezről kapunk tartalomjegyzéket; a
$ DEFINE INPUTFILE ADATLEMEZ:[USER]PROBA.DAT
példa az iteratív logikai név definícióra.
5.2.2.Precedencia és elérési mód
Azonos logikai nevek egynél több táblában is szerepelhetnek. A logikai név kiértékelésekor a keresés sorrendje a következő: processz tábla, job tábla, csoport tábla, rendszer tábla, cluster tábla. Ezt a precedenciát a DCL parancsok módosítói felülírhatják.
Ha definiálunk egy logikai nevet, elérési módot (access mode) is rendelünk hozzá – ez határozza meg, hogy az illető logikai nevet mely parancsok használhatják.. Az elérési mód lehet user, supervisor, executive vagy kernel. A default a supervisor mód. Az elérési módok között user, supervisor, executive, kernel a precedencia. A user módú logikai nevek ideiglenesek: ha az aktuális image (vagy a következő, ha nincs aktuális aktív) befejeződik, a user módú logikai nevek törlődnek. A supervisor módú logikai neveket használjuk a szokványos műveletekhez, ezek a processz végéig vagy törlésükig léteznek. A rendszer műveletek, privilegizált programok (például a LOGINOUT) csak executive vagy kernel módú logikai neveket használnak. Az executive módú logikai nevek létrehozásához SYSNAM privilégium szükséges; ennek hiányában akkor is supervisor módú logikai név jön létre, ha megadjuk a /EXECUTIVE módosítót. Kernel módú logikai neveket csak az operációs rendszer és a privilegizált programok hozhatnak létre.
Például a
$ DEFINE MAGNO MSA0:
$ DEFINE/EXECUTIVE_MODE MAGNO MSA0:
parancsok esetén a MAGNO logikai név a processz logikai név táblába kerül, de az első esetben supervisor, a második esetben executive módban. (Ez utóbbihoz SYSNAM privilégium szükséges.)
5.2.3.A default logikai nevek és logikai név táblák
A logikai nevek definiáláskor egy logikai név táblába kerülnek. A logikai név táblákat pedig a logikai név tábla directory tartalmazza. Alapértelmezésben öt logikai név táblát használhatunk: processz-tábla, job-tábla, csoport-tábla, rendszer-tábla, cluster-tábla. A táblákat és a köztük lévő összefüggéseket le is kérdezhetjük:
$ SHOW LOGICAL/STRUCTURE
(LNM$PROCESS_DIRECTORY)
(LNM$PROCESS_TABLE)
(LNM$SYSTEM_DIRECTORY)
(LNM$SYSTEM_TABLE)
(LMF$LICENSE_TABLE)
(LNM$CLUSTER_TABLE)
(LNM$SYSCLUSTER_TABLE)
(LNM$GROUP_004231)
(LNM$JOB_224E9FE0)
.
.
.
(Csak a processz számára olvasható logaikai név táblákat listázza ki a rendszer.)
A job ebben az esetben a processzt és a hozzá tartozó összes alprocesszt jelenti, azaz a job-tábla tartalmát ezek a processzek együttesen használják.
A processz-tábla neve: LNM$PROCESS_TABLE, ez a saját processzhez kapcsolódik. Logikai név létrehozásakor és használatakor ez az alapértelmezés szerinti tábla – kivéve, ha átírjuk a hozzáférési sorrendet. Bejelentkezéskor a rendszer létrehozza, és a következő logikai neveket helyezi el:
.SYS$COMMAND
Az elsődleges file, ahonnan a DCL az inputot olvassa (input stream).
.SYS$DISK
A bejelentkezés során vagy SET DEFAULT paranccsal beállított default lemez.
.SYS$ERROR
A rendszerüzenetek default eszköze vagy fileja.
.SYS$INPUT
A DCL default inputja.
.SYS$NET
DECnet task-task kommunikáció vagy TCP/IP InetACP esetén a partnerhez irányuló logikai kapcsolat.
.SYS$OUTPUT
A DCL default outputja.
.TT
A default terminál neve.
A SYS$INPUT, SYS$OUTPUT, SYS$COMMAND, SYS$ERROR logikai nevek által definiált fileok a processz teljes időtartama alatt nyitva vannak (processz permanens fileok). Ha új értéket adunk nekik, akkor a régi érték EXECUTIVE módban ott marad a logikai név táblában, tehát az új érték törlésekor újra az eredeti lesz az aktív.
A job-tábla neve LNM$JOB_xxxxxxxx (az xxxxxxxx az egyedi – nyolcjegyű, hexadecimális - jobszám); az ebben levő neveket a saját processz és annak valamennyi alprocessze elérheti. A saját processzünk job-tábla nevére LNM$JOB névvel is hivatkozhatunk. Bejelentkezéskor a VMS létrehozza és elhelyezi benne az alábbi logikai neveket:
.SYS$LOGIN
A bejelentkezéskor érvényes default eszköz és directory.
.SYS$LOGIN_DEVICE
A SYS$LOGIN eszköz része.
.SYS$REM_ID
DECnet hálózaton keresztül indított job esetén a processz azonosítója az indító távoli csomóponton.
.SYS$REM_NODE
DECnet hálózaton keresztül indított job esetén az indító távoli csomópont neve.
.SYS$SCRATCH
A default eszköz és directory az ideiglenes fileok számára.
A csoport-tábla neve LNM$GROUP_xxxxxx (ahol xxxxxx a processz UIC csoportszámából képezett hatjegyű oktális szám); a saját csoport-tábla nevére LNM$GROUP logikai névvel is hivatkozhatunk. A táblát az összes azonos csoportszámú felhasználó együtt használja, beleírni a GRPNAM vagy SYSPRV privilégiummal lehet. Ebbe a táblába a rendszer automatikusan nem ír be egyetlen logikai nevet sem.
A rendszer-tábla neve LNM$SYSTEM_TABLE, a benne lévő neveket az összes felhasználó elérheti. A rendszer-táblába SYSNAM vagy SYSPRV privilégiummal lehet írni.
A rendszer indításakor elhelyezi a táblában azokat a logikai neveket, amelyek a működéséhez szükségesek, és a felhasználók ezekre tudnak hivatkozni. (A rendszer alatt futó szoftverek szintén hozhatnak létre itt bejegyzéseket, de az is lehet, hogy saját logikai név táblát használnak.)
A felhasználóknak leggyakrabban szükséges rendszer szintű logikai nevek:
.DBG$INPUT
Az OpenVMS Debugger default inputja, processz szinten azonos a SYS$INPUT-tal.
.DBG$OUTPUT
Az OpenVMS Debugger default outputja, processz szinten azonos a SYS$OUTPUT-tal.
.SYS$COMMON
A SYS$SYSROOT-nak a clusterben közösen használt része. (eszköz és directory). Default értéke SYS$SYSDEVICE:[SYSn.SYSCOMMON.], ahol n az illető gépen futó rendszer gyökér directoryjának a sorszáma.
.SYS$ERRORLOG
A hibanapló file helye (eszköz és directory). Default értéke SYS$SYSROOT:[SYSERR]
.SYS$EXAMPLES
A rendszer példák helye (eszköz és directory). Default értéke SYS$SYSROOT:[SYSHLP.EXAMPLES]
.SYS$HELP
A rendszer help filejainak helye (eszköz és directory). Default értéke SYS$SYSROOT:[SYSHLP]
.SYS$INSTRUCTION
A rendszer utasítás adatfilejainak helye (eszköz és directory). Default értéke SYS$SYSROOT:[SYSCBI]
.SYS$LIBRARY
A rendszerkönyvtárok helye (eszköz és directory). Default értéke SYS$SYSROOT:[SYSLIB]
.SYS$LOADABLE_IMAGES
A boot alatt betöltendő programok helye, lényegében a kernel található itt. Default értéke SYS$SYSROOT:[SYS$LDR]
.SYS$MAINTENANCE
A rendszer karbantartó fileok helye (eszköz és directory). Default értéke SYS$SYSROOT:[SYSMAINT]
.SYS$MANAGER
A rendszer felügyelet (system management) fileok helye (eszköz és directory). Ezenkívül sok, a system manager munkájával kapcsolatos adat- és definíciós file is itt található. Default értéke SYS$SYSROOT:[SYSMGR]
.SYS$MESSAGE
A rendszer üzenet filejainak helye (eszköz és directory). Default értéke SYS$SYSROOT:[SYSMSG]
.SYS$NODE
A csomópont neve, ha a DECnet for OpenVMS aktív és van kapcsolatunk a hálózattal.
.SYS$PROCDMP
Az image dump file helye (a felhasználónak kell létrehoznia).
.SYS$SHARE
A rendszer megosztható imagek helye (eszköz és directory). Default értéke SYS$SYSROOT:[SYSLIB]
.SYS$SPECIFIC
A SYS$SYSROOT logikai névnek a csomópont specifikus része (eszköz és directory). Default értéke SYS$SYSDEVICE:[SYSn..], ahol n az illető gépen futó rendszer gyökér directoryjának a sorszáma.
.SYS$STARTUP
A rendszerindításkor (boot) végrehajtandó parancseljárások helye (eszköz és directory). Default értéke egy kereső lista a SYS$SYSROOT:[SYS$STARTUP], SYS$MANAGER ekvivalencia-stringekkel.
.SYS$SYSDEVICE
A rendszer directorykat tartalmazó lemez.
.SYS$SYSROOT
A rendszer directoryk eszköze és gyökér (root) directoryja. Default értéke egy kereső lista: az első ekvivalencia-string a csomópont-specifikus directory (SYS$SYSDEVICE:[SYSn..], ahol n az illető gép gyökér directoryjának a sorszáma), a második a SYS$COMMON.
.SYS$SYSTEM
A rendszerprogramok és eljárások helye (eszköz és directory). Default értéke SYS$SYSROOT:[SYSEXE]
.SYS$TEST
Az UETP (User Environment Test Package) helye (eszköz és directory). Default értéke SYS$SYSROOT:[SYSTEST].
.SYS$UPDATE
Az update fileok helye (eszköz és directory). Default értéke SYS$SYSROOT:[SYSUPD].
A cluster tábla (Clusterwide System Table) neve LNM$SYSCLUSTER_TABLE, ebben vannak a cluster összes felhasználója által elérhető logikai nevek. Erre a táblára indirekt módon a LNM$SYSCLUSTER névvel is hivatkozhatunk.
Ezenkívül létezik egy Clusterwide Parent Table, LNM$CLUSTER_TABLE névvel, amely az összes, clusterben látható logikai név tábla szülőtáblája, beleértve a LNM$SYSCLUSTER_TABLE-t is.
A rendszer két logikai név directory táblát biztosít a logikai név táblák katalógusba vételére. A saját processzünk által kizárólagosan használható (process-private) táblák az LNM$PROCESS_DIRECTORY-ban, a rendszer összes felhasználója által megosztott táblák az LNM$SYSTEM_DIRECTORY táblában vannak.
Az LNM$PROCESS_DIRECTORY a következő default bejegyzéseket tartalmazza:
.LNM$GROUP
Az LNM$GROUP_xxxxxx ekvivalencia-stringjével egyenlő logikai név; az xxxxxx a csoportszám. (Az LNM$GROUP_xxxxxx a rendszer directory táblájában van).
.LNM$JOB
Az LNM$JOB_xxxxxxxx logikai név ekvivalencia-stringjével egyenlő logikai név; xxxxxxxx a saját job egyedi száma. (Az LNM$JOB_xxxxxxxx a rendszer directory táblájában van).
.LNM$PROCESS
Az LNM$PROCESS_TABLE logikai név ekvivalencia-stringjével egyenlő logikai név.
.LNM$PROCESS_DIRECTORY
A processz directory logikai név tábla neve.
.LNM$PROCESS_TABLE
A processz logikai név tábla neve.
Az LNM$SYSTEM_DIRECTORY default bejegyzéseiből a normál felhasználó számára az alábbiak a legfontosabbak:
.LNM$CLUSTER
A cluster szülő táblájára (clusterwide parent table, LNM$CLUSTER_TABLE) mutató logikai név.
.LNM$DIRECTORIES
Directory logikai név, az LNM$PROCESS_DIRECTORY és LNM$SYSTEM_DIRECTORY értékekkel.
.LNM$FILE_DEV
Ez a logikai név határozza meg, hogy milyen sorrendben keresi a rendszer a logikai nevet a különböző táblákban. Kereső lista, default értékei: LNM$PROCESS, LNM$JOB, LNM$GROUP, LNM$SYSTEM, azaz a rendszer a processz, job, group, system, és clusterwide logikai név táblákban keres, ebben a sorrendben.
5.3. Szimbólumok és kifejezések
Az OpenVMS operációs rendszer lehetővé teszi, hogy a DCL parancsokban karakteres vagy numerikus (egész) adatokat használjunk: Szimbólumokat definiálhatunk, amelyekben ezeket az adatokat tárolhatjuk, és velük műveleteket végezhetünk. Ha a DCL kifejezésekben egy szimbólum szerepel, a DCL helyettesíti az értékével. A szimbólumokat és kifejezéseket sok helyen alkalmazhatjuk:
-.A szimbólum értéke egy parancssor vagy annak egy részlete, s a szimbólumot használjuk a parancssor szinonimájaként.
-.A szimbólumokat változókként használjuk a DCL kifejezésekben.
-.Szimbólumokkal hivatkozhatunk az adatrekordokra a READ és INQUIRE utasításokban; a WRITE utasításban kifejezések is szerepelhetnek.
-.Szimbólumok paraméterátadásra használhatók a parancseljárásokban.
-.Szimbólumokkal lehet külső parancsot (foreign command) definiálni, azaz tetszőleges futtatható program elindítható a nevével ebben az esetben.
A szimbólumnév 1-255 karaktert tartalmazhat; betűvel, aláhúzásjellel (_), dollárjellel ($) kell kezdődnie; alfanumerikus karakterrel, aláhúzásjellel vagy dollárjellel folytatódhat. A kis- és nagybetűk használata egyaránt megengedett, a DCL a nevet csupa nagybetűssé konvertálja.
5.3.1.A szimbólumok definiálása
A szimbólumok az Assignment (=) utasítással definiálhatók; a definíció formája meghatározza a szimbólum elérhetőségét is: A
$ szimbólumnév = kifejezés !(lokális szimbólum)
$ szimbólumnév == kifejezés !(globális szimbólum)
tetszőleges értékű szimbólumot definiál vagy ad egy létezőnek új értéket. Például
$ REKORDSZAM = 12
$ HAZA == "SET DEFAULT SYS$LOGIN"
Az első parancs egy lokális numerikus, a második egy globális karakteres szimbólumot definiál. A lokális szimbólum a kurrens parancsszinten vagy parancseljárás szintjén érvényes, a globális az összes szinten, azaz függetlenül a definiálás helyétől, minden parancseljárás tudja használni (hasonlóan a programok lokális és globális változóihoz). A
$ SET SYMBOL
parancs segítségével ettől eltérően is szabályozhatjuk a szimbólumok érvényességi körét.
A szimbólumnak adott első jobboldali kifejezés értéke határozza meg, hogy a szimbólum integer vagy karakteres lesz (automatikus típusdeklarálás).
A szimbólum definiálásának van még egy speciális formája:
$ szimbólumnév := kifejezés !(lokális string szimbólum)
$ szimbólumnév :== kifejezés !(globális string szimbólum)
Ezzel a formával csak karakter-szimbólumot definiálhatunk. Ilyenkor a karakterstringet nem kötelező idézőjelek közé zárni, de ekkor a kisbetűk nagybetűkké konvertálódnak, és a több, egymás melletti szóköz és tabulátor karakter egy szóközre redukálódik, a string elején és végén levő szóközök és tabulátor karakterek pedig törlődnek idézőjel hiányában.
A READ és INQUIRE DCL parancsok is definiálják a paraméterként szereplő szimbólumokat. (10. fejezet)
A szimbólum definíciójakor megadhatjuk, hogy rövidíthető. Például a
$ DIR*ECTORY == "DIRECTORY /SIZE /DATE"
esetén a DIR, DIRE, ..., DIRECTORY egyformán használható.
A szimbólumok értékét a
$ SHOW SYMBOL
paranccsal írathatjuk a képernyőre. Például
$ SHOW SYMBOL HAZA
HAZA = "SET DEFAULT SYS$LOGIN"
vagy
$ SHOW SYMBOL REKORDSZAM
REKORDSZAM = 4 Hex = 00000004 Octal = 00000000004
A szimbólum törlése a
$ DELETE /SYMBOL
paranccsal történhet.
A DCL a szimbólumokat a lokális illetve globális szimbólumtáblában helyezi el. Három lefoglalt globális szimbólum mindig szerepel a táblában:
.$STATUS
Az utoljára végrehajtott parancs feltételkódja.
.$SEVERITY
Az utoljára végrehajtott parancs sikeressége: a $STATUS utolsó három bitje. Értéke lehet:
o.0 - Warning
o.1- Success
o.2 - Error
o.3 - Information
o.4 - Severe (fatal) error
Mivel a DCL a páros integert nemnek, a páratlant igennek tekinti, a Success és az Information esetet a $SEVERITY logikai vizsgálatánál együtt tudjuk kezelni.
.$RESTART
Értéke TRUE, ha a batch job újra indult egy rendszer crash vagy a job megszakítása után, egyébként FALSE.
Az alábbi parancsok - ha sikeresen végrehajtódnak - nem változtatják meg a $STATUS és a $SEVERITY értékét:
CONTINUE DECK DEPOSIT EOD
EXAMINE GOTO IF SHOW STATUS
SHOW SYMBOL STOP WAIT
Ezenkívül ha egy SUBMIT vagy PRINT parancs sikeresen végrehajtódik, akkor az létrehozza a $ENTRY szimbólumot. Értéke a létrejött job entry-száma. A következő PRINT vagy SUBMIT parancs a $ENTRY értékét felülírja. (11. fejezet)
5.3.2.A szimbólumok behelyettesítése
A DCL parancsok végrehajtásakor a szimbólumok helyére bizonyos esetekben automatikusan az értékük kerül, más helyeken pedig csak akkor, ha az aposztróf (') vagy az ampersand (&) jeleket használjuk.
Automatikusan behelyettesítődnek a szimbólumok:
-.Az = és == jel jobb oldalán (a := és :== esetén nem);
-.A lexikális függvények (lexical function) argumentumában;
-.Olyan értékadó utasítás bal oldalán levő zárójelben, ahol részstringnek adunk értéket;
-.A DEPOSIT, EXAMINE, IF vagy WRITE parancsban;
-.A sor elején, ha nem egyenlőségjel vagy kettőspont követi a szimbólumot.
A normál behelyettesítő operátor az aposztróf ('); a szimbólumot aposztrófok közé zárva kell leírni. Például
$ NEV:= LISTA
$ FILE:= 'NEV'.LIS
$ SHOW SYMBOL FILE
FILE = "LISTA.LIS"
A behelyettesítés megengedett karakterstringen belül is, de akkor a kezdő aposztrófot meg kell kettőzni:
$ MEGJ = "A ''FILE' FILET KELL KIIRNI"
$ SHOW SYMBOL MEGJ
MEGJ = "A LISTA.LIS FILET KELL KIIRNI"
Speciális esetekben használható behelyettesítő operátor az ampersand (&) jel. A két operátor közti különbség annyi, hogy az aposztrófokkal jelzett behelyettesítés a parancsértelmezés első fázisában, az & jellel meghatározott pedig a második fázisban történik meg.
Például:
$ B = "ADAT.DAT"
$ A = "&B"
$ SHOW SYMBOL A
A = "&B"
$ TYPE 'A'
Ekkor az ADAT.DAT file jelenik meg a terminálon.
$ P1 = "LIST.LIS"
$ INDEX = 1
$ PRINT &P'INDEX'
A LIST.LIS file lesz kinyomtatva. Mivel a DCL-ben nincs tömb, ezért a fenti módon oldhatjuk meg az indexelést.
A parancsértelmező három fázisban végzi el a szimbólumok behelyettesítését:
.A parancssorban levő összes explicit (aposztróffal jelzett) behelyettesítést elvégzi. Ez a lépés iteratív módon hajtódik végre.
.A parancsértelmező a parancssor első eleméről eldönti, hogy szimbólum-e (parancs szinonimaként), és ha igen, akkor behelyettesíti. Ekkor végzi az ampersand (&) jellel jelzett behelyettesítéseket. Ez a lépés nem iteratív.
.Ezután történik a kifejezések kiértékelése, amelynek során a parancsértelmező a végrehajtás alatt levő parancsban (például egy IF utasításban) előforduló kifejezések értékét meghatározza. Ez a behelyettesítés sem iteratív.
A parancsértelmező nem végez behelyettesítést a parancsok input adatai esetén. Ha tehát egy parancsfileban elindítunk egy programot, amely a SYS$INPUT-ról vár inputot, az input sor(ok)ban nem történik szimbólum behelyettesítés. Ha erre lenne szükségünk, akkor jó megoldás lehet egy új parancsfile létrehozása (ott elvégezve a szükséges behelyettesítéseket), s annak elindítása az adott szintről. Például
$ OPEN /WRITE MASOD MASOD.COM
$ WRITE MASOD "$ RUN FELIRO"
$ WRITE MASOD "''P1'"
$ WRITE MASOD "''P2'"
$ CLOSE MASOD
$ @MASOD
$ DELETE MASOD.COM;0
A fenti parancsfile az indítási paramétereket átadja a FELIRO nevű, RUN paranccsal indított programnak. (A részletes magyarázatot lásd a 10.3.2. fejezetben.)
A szimbólum értékeket az alábbi sorrendben keresi a parancsértelmező a szimbólum táblákban:
1.Az aktuális parancsszint lokális szimbólumtáblájában.
2.Az összes megelőző parancsszint lokális szimbólumtáblájában.
3.A globális szimbólumtáblában.
5.3.3.A kifejezések
A kifejezések konstans karakter-stringeket, integereket, könyvtári függvényeket (lexical function), szimbólumokat tartalmaznak, a megengedett műveletekkel összekötve. A kifejezések kiértékelésekor a DCL mindig helyettesíti a szimbólumot annak értékével.
A kifejezések az alábbi elemekből épülhetnek fel:
1. Az integer konstans alapértelmezésben decimális, de %X, %D, %O segítségével explicit módon jelezhetjük a hexadecimális, decimális és oktális alapszámot:
$ SZAM = %O10 !oktális
$ SZAM = %X10 !hexadecimális
$ SZAM = 10 !decimális
2. A karakterstring konstans bármilyen nyomtatható karaktert tartalmazhat; a kifejezésben mindig idézőjelek (") közé kell zárni. Ha idézőjelet is akarunk szerepeltetni a szövegben, akkor két egymást követő idézőjel szükséges. A karakterstring folytatható a másik sorban egy pluszjel (konkatenáció) és egy mínuszjel (folytató sor) segítségével:
$ CHS = "ALFA" + -
_$ "BETA"
$ VALASZ = "Type ""YES"" or ""NO"""
3. A lexikális függvények kötelezően F$-val kezdődnek, értéküket a parancsértelmező kiszámítja és behelyettesíti a parancs-stringbe. A függvényérték lehet integer vagy karakteres. A függvény formája
F$függvénynév([arg,...])
$ DATUM = F$TIME()
(A függvények részletesebb leírása a 10.2. fejezetben található.)
4. A kifejezésekben bármilyen, korábban definiált szimbólum szerepelhet:
$ INDEX = INDEX + 1
$ REKORD == NEV + CIM + "******"
Ha egy kifejezésben tagként szimbólum szerepel, akkor értéke automatikusan behelyettesítődik. Ha azonban a szimbólum értékét a kifejezés kiszámítása előtt kívánjuk behelyettesíteni, akkor aposztróf (') jelek közé kell tenni a szimbólumnevet.
$ A = 20
$ B = A + 1
B értéke 21 lesz, aposztróf használata nem szükséges.
$ Sz = 1
$ P1 = 421
$ P2 = P'Sz'+ 2
A P2 kiszámítása előtt a P'Sz' helyére P1 kerül, ezért P2 értéke 423 lesz.
Ha string értékadást használunk (:=), akkor mindig aposztrófot kell használni, ha szimbólum behelyettesítést kívánunk
5. A kifejezésekben szereplő konstansokat, szimbólumokat és lexikális függvényeket műveleti jelekkel, operátorokkal kötjük össze. A DCL-ben megengedett operátorok és precedencia szintjük:
Operátor Precedencia Leírás
szint
+ - 7 Előjel
* / 6 Szorzás, (egész) osztás
+ 5 Összeadás, string összefűzés;
- 5 Kivonás, string kivonás
.EQS. 4 Karakterstring egyenlő
.GES. 4 Karakterstring nagyobb vagy egyenlő
.GTS. 4 Karakterstring nagyobb
.LES. 4 Karakterstring kisebb egyenlő
.LTS. 4 Karakterstring kisebb
.NES. 4 Karakterstring nem egyenlő
.EQ. 4 Két szám egyenlő
.GE. 4 Az első szám nagyobb vagy egyenlő, mint a második
.GT. 4 Az első szám nagyobb, mint a második
.LE. 4 Az első szám kisebb vagy egyenlő, mint a második
.LT. 4 Az első szám kisebb, mint a második
.NE. 4 A két szám nem egyenlő
.NOT. 3 Logikai negáció
.AND. 2 Logikai ÉS művelet
.OR. 1 Logikai VAGY művelet
A string összefűzés (konkatenálás) a stringek egymás után írását jelenti. A string kivonásban a mínuszjel után álló stringet elhagyjuk az első karaktersorból (az első előfordulást). Például:
$ A = "ADAT" + ".DAT"
$ SHOW SYMBOL A
A = "ADAT.DAT"
$ B = "[USER]LOGIN" - "[USER]"
$ SHOW SYMBOL B
B = "LOGIN"
A karakterstring hasonlítások a karakterek ASCII kódja szerint történik; a rövidebb string bináris 0 byteokkal van kiegészítve (lexikografikus rendezés). A hasonlítás értéke 1 (true) vagy 0 (false) lehet. A numerikus hasonlításokban az integer érték számít. Például
"aaaa" .LES. "bbbb"
kifejezés igaz,
12+3 .EQ. 7
pedig hamis.
A karakterstringeket a DCL integerbe konvertálja, ha egy kifejezésben string és integer együtt szerepel. Ha a karakterstring a DCL-ben megengedett formájú számot tartalmaz, akkor annak értékét kapja a konvertálás során. Egyébként, ha a T, t, Y, y betűvel kezdődik, akkor értéke 1 lesz (ezek az igaz, TRUE értékek), minden más esetben 0.
String hasonlítás során a DCL az integert konvertálja stringgé, decimális értékkel, előnullázás nélkül. Egész hasonlítás esetén pedig a fenti algoritmus szerint a karakterstringet.
A logikai műveletek integerekre alkalmazhatók, a DCL bitenként hajtja végre a műveletet. Például
$ A = 3.OR.5
$ SHOW SYMBOL A
A = 7 Hex = 00000007 Octal = 00000000007
$ B = 3.AND.5
$ SHOW SYMBOL B
B = 1 Hex = 00000001 Octal = 00000000001
Speciális formája a string értékadásnak a részstring (substring) változtatása:
$ szimbólum-név[offset, hossz] := csere-string
vagy globális szimbólum esetén
$ szimbólum-név[offset, hossz] :== csere-string
Itt a [] része a szintaxisnak, az offset a cserélendő rész kezdete (0 az 1. karaktert jelenti, 1 a másodikat stb.), a hossz pedig a cserélendő string méretét jelenti (értéke 0-768 lehet). Például
$ ABC := BETABETA
$ ABC[0,4] := ALFA
$ SHOW SYMBOL ABC
A = "ALFABETA"
A következő parancs definiálja a SOR szimbólumot, melynek értéke egy 80 karakter hosszú string lesz (1 darab * és 79 szóköz):
$ SOR[0,80]:= "*"
A szimbólum definíciót használhatjuk külső parancs (foreign command) definiálására is:
$ szimbólum-név :=[=] $image-file-spec.
$ szimbólum-név =[=] "$image-file-spec."
A szimbólumnév a külső parancs neve, ezzel aktivizálható a megadott image, a filespecifikáció pedig az az image, amely végrehajtja a parancsban megadott funkciókat. A leíráshoz a Command Definition Utility használható (a OpenVMS Command Definition Librarian, and Message Utilities Manual-ban található).
A VMS lehetővé teszi az automatikus külső parancs használatát (automatic foreign command): Ha a DCL$PATH logikai név definiálva van és értéke nem az üres string, akkor a parancssor első szavára a DCL keresést indít a DCL$PATH:*.COM, DCL$PATH:*.EXE fileokra. Ha talál ilyet, akkor végrehajtja, és a parancssor többi eleme az illető parancsfilenak vagy végrehajtható programnak lesz a paramétere. (Ugyanolyan, mint a DOS és Unix alatti PATH használata.)
5.4.A dátum és idő kezelése
Bizonyos parancsok paraméterei között megadhatunk időpontot is. A DCL három időpont meghatározást ismer: az abszolút, a delta és az összetett (absolute, delta, combination time) időpontot. Az operációs rendszer aktuális időpontját a SHOW TIME DCL paranccsal kérdezhetjük le, és a SET TIME DCL paranccsal változtathatjuk meg - ez utóbbit OPER és LOG_IO privilégium birtokában.
$ SET TIME=14-AUG-2003:19:31
$ SHOW TIME
14-AUG-2003 19:33:27
5.4.1.Az abszolút időpont
Az abszolút időpont egy fix dátumot és időt jelöl, formája:
[dd-mmm-yyyy[:]][hh:mm:ss.cc]
(A [] a mezők elhagyhatóságát jelzi, a - : . része a szintaxisnak.)
Az egyes mezőkre az alábbi korlátok érvényesek:
-.dd - a nap sorszáma, értéke 1-31 lehet;
-.mmm - a hónap angol rövidítése (JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC);
-.yyyy - az évszám;
-.hh - az óra, értéke 0-23 lehet;
-.mm - a perc, értéke 0-59 lehet;
-.ss - a másodperc, értéke 0-59 lehet;
-.cc - a századmásodperc, értéke 0-99 lehet.
A dátum vagy az idő jobb oldali mező(i) elhagyhatók. A baloldali mezők is elhagyhatók, ha az elválasztó írásjeleket (kettőspont és kötőjel) kitesszük. Ha mind a dátum mind az idő mező szerepel, akkor kötelező közéjük kettőspontot írni, vagy az egész értéket idézőjelek közé tenni. Ha csak dátumot írunk, annak legalább egy kötőjelet kell tartalmaznia.
A hiányzó dátummező(k) default értéke az aktuális rendszerdátum, az időmező(k)é 0. A századmásodpercek nem tizedes törtként vannak megadva, ezért például ha 50 századmásodpercet akarunk megadni, akkor a cc helyére 50-t kell írni, nem 5-t. A mezőket nem kötelező előnullázni. Az abszolút időt jelölhetjük a TODAY, YESTERDAY, TOMORROW kulcsszavakkal is; ez a mai, tegnapi illetve holnapi dátumot jelenti, 00:00:00.00 idővel. Bizonyos esetekben használható még a BOOT, LOGIN időpont, a rendszer indítás illetve a processz bejelentkezési időpontját jelölhetjük vele.
Példák abszolút időre:
12-APR-2000:12:24:30.66
Teljes dátum, minden mezőjét megadtuk.
10-JAN-1968:15
Itt a perc, másodperc, századmásodperc értéke 0.
30-
Az aktuális év és hónap 30. napja, 00:00:00.00 időponttal.
7:12
Az aktuális év, hónap, nap, 7:12:00.00.
TODAY
Az aktuális év, hónap, nap, 00:00:00.00.
5.4.2.A delta időpont
A delta időpont egy időintervallumot jelöl a rendszer aktuális dátuma és egy jövendőbeli időpont között. Formája:
[dddd-][hh:mm:ss.cc]
(A [] a mezők elhagyhatóságát jelzi, a - : . része a szintaxisnak.)
Az egyes mezőkre az alábbi korlátok érvényesek:
-.dddd - a napok száma, értéke 0-9999 lehet;
-.hh - az óra, értéke 0-23 lehet;
-.mm - a perc, értéke 0-59 lehet;
-.ss - a másodperc, értéke 0-59 lehet;
-.cc - a századmásodperc, értéke 0-99 lehet.
-.
A delta idő jobb oldali mező(i) elhagyhatók, értékük 0 lesz. A baloldali mezők is elhagyhatók, ha az elválasztó karaktereket kiírjuk.
Példák delta időpontra:
3-
Az aktuális időpontnál 3 nappal (72 órával) később.
3
Az aktuális időpontnál 3 órával később.
:3
Az aktuális időpontnál 3 perccel később.
3-:30
Az aktuális időpontnál 72 óra 30 perccel később.
12:20:40
Az aktuális időpontnál 12 óra, 20 perc, 40 másodperccel később.
5.4.3.A összetett időpont
A összetett időpont egy abszolút időpont és egy delta időpont összegéből vagy különbségéből áll. A delta időpontot mindig + vagy - jellel kell elválasztani az abszolút időponttól. Ha időpontok összegét használjuk, az egész időpont meghatározást idézőjelek (") közé kell zárni. Formája:
[[dd-mmm-yyyy[:]][hh:mm:ss.cc]]-[dddd-][hh:mm:ss.cc]
vagy
"[[dd-mmm-yyyy[:]][hh:mm:ss.cc]]+[dddd-][hh:mm:ss.cc]"
(A [] a mezők elhagyhatóságát jelzi, a - : . része a szintaxisnak.)
Az abszolút időpont rész egyes mezőire az alábbi korlátok érvényesek:
-.dd - a nap sorszáma, értéke 1-31 lehet;
-.mmm - a hónap angol rövidítése (JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC);
-.yyyy - az évszám;
-.hh - az óra, értéke 0-23 lehet;
-.mm - a perc, értéke 0-59 lehet;
-.ss - a másodperc, értéke 0-59 lehet;
-.cc - a századmásodperc, értéke 0-99 lehet.
A delta időpont rész egyes mezőire az alábbi korlátok érvényesek:
-.dddd - a napok száma, értéke 0-9999 lehet;
-.hh - az óra, értéke 0-23 lehet;
-.mm - a perc, értéke 0-59 lehet;
-.ss - a másodperc, értéke 0-59 lehet;
-.cc - a századmásodperc, értéke 0-99 lehet.
Ha elhagyjuk a teljes abszolút időpont specifikációt, vagy annak egyes mezőit, akkor a rendszer aktuális dátuma és ideje a default.
Az összetett és a delta időpont bizonyos esetben azonos formájú (például a dd- ). De ez nem okozhat zavart, mivel a DCL parancsok szintaxisa egyértelműen meghatározza, hogy mikor melyik időmeghatározás formát lehet használni az adott helyen.
Példák összetett időpontra.
17-MAR-1989:11:22:33.44 - 12-7:40:10.50
Teljes összetett időpont.
"17-MAR-1989:11:22:33.44 + 12-7:40:10.50"
Teljes összetett időpont.
"+5"
Az aktuális időpontnál 5 órával később. (Az abszolút időpontot elhagytuk.)
"+:5"
Az aktuális időpontnál 5 perccel később. (Az abszolút időpontot elhagytuk.)
"TODAY+3-"
Mához három napra, 00:00:00.00-kor.
6.A szövegszerkesztők
A VMS-ben több szövegszerkesztő segédprogram van. Az EDT és a DECTPU (DEC Text Processing Utility) általános célú editorok, róluk részletesen szólnak az alfejezetek.
Az EDT használata nagyon gyorsan megtanulható, mert az alapvető funkciók nem kötődnek bonyolult billentyűkombinációhoz; több pufferben tárolhatunk fileokat, viszonylag egyszerűen definiálhatunk új billentyűket, a makrónyelve viszont viszonylag nehézkes. Ezzel szemben a DECTPU hatékonyan bővíthető saját parancsainkkal; egyidőben több puffer jeleníthető meg a képernyőn és több file editálható egyszerre. Ez a két szövegszerkesztő képernyő-orientált, kényelmesen és gyorsan használható, elsősorban interaktív működésre tervezték őket.
A SUMSLP kevés, nem túl bonyolult funkcióval rendelkező, kötegelt feldolgozásra orientált szövegszerkesztő program. Lehetővé teszi, hogy egyetlen input parancsfile segítségével több filet módosítsunk. (Tipikus használata: forrásprogram, szövegfile update a megfelelő módosító file alapján.) Mind interaktív módon, terminálon beírt parancsokkal, mind parancsfilelal meghívva használható a
$ EDIT/SUM input-file
DCL paranccsal.
A DSR (Digital Standard Runoff) nyomdai tördelőszerkesztő. Olyan (tetszőleges módon, szövegszerkesztővel vagy programmal létrehozott) szövegfilet képes feldolgozni, amely tartalmazza mind a DSR-nek szóló formázó parancsokat, mind a formázandó szöveget. A DSR outputja a parancsokkal meghatározott sor- és lapméretű, sorszámozott, tördelt, fejezetekre bontott és más szokványos módon formázott szövegfile lesz, a vezérlő információk nélkül.
A DSR a fenti funkción kívül rendelkezik egy tartalomjegyzék készítő segédprogrammal, amely az input szövegben levő fejezet, alfejezet, rész címek alapján állítja össze a tartalomjegyzék filet, valamint egy tárgymutatót (index) létrehozó utilityvel.
Hívása:
$ RUNOFF filespecifikácó [,...]
$ RUNOFF /CONTENTS filespecifikácó [,...]
$ RUNOFF /INDEX filespecifikácó [,...]
A VMS további, speciális célú szerkesztőket is tartalmaz: Az ACL editor védelmi struktúrák kialakítására használható, az FDL editorral a file leírásokat hozhatunk létre. A TECO editor pedig egy, a korábbi Digital operációs rendszerekben is használatos, nem túlzottan erőforrás-igényes, programozható szövegszerkesztő.
Programfejlesztéshez a fentieknél hatékonyabban használható a Language Sensitive Editor, az LSE, amely az EVE-hez hasonló szövegszerkesztő funkciókon túl a programnyelvekre vonatkozó szintaktikai utasításokkal rendelkezik, és kezelni tudja a nyelvi fordítót és annak a hibalistáit.
Az LSE azonban nem része a VMS-nek, önálló licenccel rendelkezik (azaz külön kell megvásárolni).
6.1. A DECTPU
A DEC Text Processing Utility (DECTPU) egy programozható szövegfeldolgozó program, amely több puffert, több ablakot, több alprocesszt tud kezelni egyidőben. Használható kötegelt üzemmódban, definiálhatunk benne billentyűket és megismételhető parancssorozatokat (learn sequence), és felhasználói programból hívható felülettel (callable interface) is rendelkezik.
A DECTPU programnyelvben megtaláljuk mindazokat az elemeket, amelyek könnyűvé teszik egy szövegszerkesztő megírását: Az adattípusok ennek megfelelőek (például WINDOW, MARKER, KEYWORD); nagyszámú beépített függvény áll rendelkezésre (például CREATE_WINDOW, SCROLL, COPY_TEXT, DEFINE_KEY), és saját eljárásokat is írhatunk.
Arra is lehetőségünk van, hogy egy adott TPU környezetet egészítsünk ki a saját definícióinkkal, majd azt mentsük későbbi használatra.
Ez a fejezet nem tartalmazza a részleteket; részben az OpenVMS User's Manual 8. fejezetében, részben a DEC Text Processing Utility Reference Manual című könyvben megtaláljuk e lehetőségek leírását.
6.1.1.Az EVE használata
Az EVE (Extensible Versatile Editor) egy DECTPU-val létrehozott programozható szövegszerkesztő, amely VT100, VT200, VT300 vagy VT400 sorozatú terminálon, illetve ilyen emulációval használható. (Ha az emuláció nem biztosítja az összes billentyűt, akkor természetesen megfelelően szűkítve.). Az EVE képes billentyűsorozatokat megjegyezni, több puffert használni, wildcard karaktereket felhasználva keresni, DCL parancsokat végrehajtani és nyelvi ellenőrzést végezni a DECspell szoftver segítségével. Az
$ EDIT /TPU [filespecikáció]
DCL paranccsal aktivizálható. Mivel a fenti paranccsal az EVE-t, a default TPU szerkesztő programot hívjuk meg, a Digital javasolja az EVE szimbólum definiálását:
$ EVE == "EDIT /TPU"
A filespecifikációban megengedett a szokásos wildcard karakterek (* % ...) használata. Ha csak egy file felel meg a specifikációnak, akkor az kerül a pufferbe, ha viszont több is, akkor az EVE felsorolja a megfelelő fileokat és kéri a választásunkat. Ha egyetlen file sem felel meg, akkor nem olvas be semmit a pufferbe. (Ha több input filet is használunk, azokat későbbi TPU parancsokkal tölthetjük be a puffer(ek)be.)
Ha nem létező filet adunk meg, akkor az EVE üres pufferrel indul, s majd kilépéskor a megadott filet hozza létre:
$ EDIT /TPU UJFILE.TXT
[End of file]
Buffer: UJFILE.TXT | Write | Insert | Forward
Command:
Editing new file. Could not find: UJFILE.TXT
Ugyanez a helyzet, ha nem adunk meg filet az indításkor - üres pufferrel indul az EVE, amibe beolvashatunk egy filet, illetve kilépéskor megkérdezi a létrehozandó file nevét.
Kilépéskor legegyszerűbb a CTRL/Z-t vagy az F10-et megnyomni. Ha módosítottuk a puffer tartalmát, akkor egy új verzió jön létre, ha nem változtattunk, akkor nem.
Ha nem akarunk élni ezzel az automatizmussal, vagy csak menteni akarunk egy puffert, akkor a DO billentyűt kell használni (a billentyűleírásokat lásd a 6.1.2. fejezetben). Ekkor a
Command:
promptra adhatunk meg EVE parancsokat:
.EXIT-re létrejön a fileból egy új verzió (ugyanolyan név, típus).
.A QUIT esetén nem jön létre új verzió a fileból, a változtatások elvesznek. Ha módosítottuk a filet, akkor még kapunk egy figyelmeztetést, hogy valóban nem akarjuk megőrizni a változást:
Command: QUIT
Buffer modifications will not be saved; continue quitting (Y or N)?
Ha erre Y-t válaszolunk, akkor elvész a puffer tartalma, ha N-t, akkor új verzió jön létre a fileból.
.A WRITE FILE paranccsal az aktuális puffer tartalmát mentjük anélkül, hogy kilépnénk a szerkesztőből. Ha a pufferhez nincs filespecifikáció rendelve, akkor az EVE megkérdezi:
Type filename for buffer Main (press RETURN to not write it):
Az EVE naplót (journalfile) készít, amelybe feljegyzi az indítástól kilépésig történt összes módosítást. Ha több puffert használunk, akkor minden puffernek külön naplófileja lesz. A naplófile helyére a TPU$JOURNAL logikai név mutat, amelynek defaultja a SYS$SCRATCH, az pedig a bejelentkezéskori gyökér directoryra szokott mutatni. A naplófile a nevét a puffer (input file) nevéből kapja, a típusa TPU$JOURNAL.
Ha az EVE normálisan fejeződik be (EXIT vagy QUIT paranccsal), akkor a naplófile törlődik. Ha valamilyen okból az EVE futása megszakad, akkor a naplófile segítségével pufferenként újra végrehajthatók a már kiadott parancsok, a
RECOVER BUFFER
EVE parancs segítségével. A
RECOVER BUFFER ALL
egyidőben az összes puffer tartalmát helyreállítja, de használhatjuk az
$ EDIT /TPU /RECOVER
DCL parancsot is. Nem készül naplófile, ha
$ EDIT /TPU /NOJOURNAL
paranccsal indítjuk a szerkesztőt (Például ha csak átnézni vagy bemutatni akarjuk egy file tartalmát.)
6.1.2. Az EVE billentyűdefiníciói
Az EVE tartalmaz néhány billentyűdefiníciót és parancsot, amelyek megkönnyítik a szöveg kezelését.
A billentyűdefiníciók egy része CTRL/x formájú (a DCL parancsok szerkesztő funkcióihoz hasonlóak):
.CTRL/B vagy felfelé nyíl
Az utoljára beütött parancsot írja vissza a képernyőre és az editálható, újra kiadható. Használata átlagos terminálemulációnál nagyon fontos, mert CTRL/B CTRL/U billentyűszekvencia hatása megegyezik a DO gomb hatásával, ami nem elérhető egy átlagos emulációból (A CTRL/B előhívja az utoljára kiadott editor parancsot, a CTRL/U pedig törli, de meghagyja a Command: promptot.)
.CTRL/A
Az beszúrás, felülírás üzemmódok között vált.
.CTRL/E
A sor végére áll a kurzor.
.CTRL/H vagy F12
A sor elejére áll a kurzor.
.CTRL/U
A sor elejétől a kurzorig törli a karaktereket.
.CTRL/V
Lehetővé teszi, hogy speciális karaktereket írjunk a pufferbe. Így lehet például beírni a CTRL/B karaktert, vagy magát a CTRL/V -t is. A CTRL/V után az EVE a
Press the key to be added:
prompttal kéri a beírandó karaktert.
.CTRL/W
Felfrissíti a képernyőt.
.CTRL/Z
Kilépés (lásd a 6.1.1. fejezetben).
A funkcióbillentyűkhöz kapcsolódó definíciók VT200, VT300, VT400 sorozatú terminál (-emuláció) esetén:
EVE funkciók
A funkcióbillentyűkhöz kapcsolódó definíciók VT100, terminál (-emuláció) esetén:
EVE funkciók VT100
A funkciók magyarázata:
.EXIT (F10)
Kilép az EVE-ből. Ha módosítottuk a filet, akkor egy új verzió jön létre, ha nem változtattunk, akkor nem.
.FORWARD/REVERSE (F11)
A kurzor mozgásirányát változtatja az előre (jobbra és lefelé) és a vissza (balra és felfelé) között.
.MOVE BY LINE (F12)
A sor elejére vagy végére állítja a kurzort a haladási iránytól függően. Előrehaladáskor a sor végére, visszafelé pedig a sor elejére lép. Ha már a sor elején/végén állt, akkor a következő sorra megy át a kurzor.
.ERASE WORD (F13)
Törli azt a szót, amelyen a kurzor áll, valamint az utána levő szóköz(öke)t. Ha a kurzor nem szón áll, akkor a következő szó törlődik.
.INSERT/OVERSTR (F14)
A beszúró/felülíró mód közötti lehet váltani.
.HELP (F15)
A termináltípusnak megfelelő tájékoztató szöveget ír a képernyőre.
.DO (F16)
Egy EVE parancs beírását teszi lehetővé. A 23. sorban megjelenő
Command:
után tetszőleges parancs megadható. (Lásd a CTRL/B megjegyzését is!)
.FIND
Megkeresi a megadott string első előfordulását a megadott haladási irányban. Az EVE
Forward Find:
vagy
Reverse Find:
prompttal kéri a keresendő stringet. Ha a billentyűt kétszer nyomjuk meg, akkor az utolsó keresésnél beírt stringet fogja újra keresni. Ha a stringet az F11 billentyűvel zárjuk, akkor a keresési irány az aktuálissal ellentétes lesz. Ha az adott irányban nem létezik a string, akkor az EVE a másik irányban is megnézi. Ha a puffer másik felén megtalálja, akkor megkérdezi, hogy állítsa-e oda a kurzort.
.INSERT HERE
Az INSERT HERE puffer tartalmát a kurzortól balra beszúrja az aktuális pufferbe. A kurzor a beszúrt szöveg végére kerül. Az INSERT HERE puffer tartalma nem változik.
.REMOVE
A (a SELECT vagy FIND paranccsal) kiválasztott területet az aktuális pufferből törli és beírja az INSERT HERE pufferbe, törölve annak korábbi tartalmát.
.SELECT
Kijelöli a kiválasztott terület kezdőpontját, a kurzor aktuális helyén. A kurzort tetszőleges irányban és módon mozgathatjuk, majd a CAPITALIZE WORD, LOWERCASE WORD, UPPERCASE WORD, SPELL, STORE TEXT, REMOVE vagy FILL parancsok valamelyikével zárhatjuk le a kiválasztott területet.
.PREV SCREEN
Egy képernyőnyit visszalép a pufferben - vagy ha nincs annyi sor már, akkor kevesebbet. A kurzor a képernyő azonos helyén marad.
.NEXT SCREEN
Egy képernyőnyit előrelép a pufferben - vagy ha nincs annyi sor már, akkor kevesebbet. A kurzor a képernyő azonos helyén marad.
.MOVE DOWN (lefelé nyíl)
Egy sorral a puffer vége felé mozgatja a kurzort.
.MOVE LEFT (balra nyíl)
Egy karakterrel balra lépteti a kurzort.
.MOVE RIGHT (jobbra nyíl)
A kurzort egy karakterrel jobbra lépteti.
.MOVE UP (felfelé nyíl)
Egy sorral felfelé lépteti a kurzort.
6.1.3.Néhány további EVE parancs
Az EVE több mint száz parancsa közül itt csak néhányról lesz szó; elsősorban azokról, amelyek az EDT-ből hiányoznak. A parancsokat a DO billentyű után megjelenő
Command:
promptra gépelhetjük be. (A HELP parancs itt is segítségül hívható.)
A parancsok mindaddig rövidíthetőek, amíg egyediek.
1. A puffer bármely pontján elhelyezhetünk olyan - a képernyőn és a pufferben meg nem jelenő - címké(ke)t (marker), amely(ek)re vissza tudunk állni, bárhol is vagyunk a szövegben.
MARK marker
A kurzor jelenlegi helyére letesz egy címkét, amely mindaddig megmarad, amíg ki nem lépünk az EVE-ből.
GO TO marker
A korábban definiált címke helyére állítja a kurzort. Ha a megadott hely egy másik pufferben van, akkor az EVE az aktuális ablakba (window) be is tölti a puffer tartalmát.
2. A Beírt szöveg formáját néhány parancs segítségével könnyen változtathatjuk.
CAPITALIZE WORD
A kijelölt terület minden szavának kezdőbetűjét nagybetűre írja át.
CENTER LINE
Az aktuális sorban levő szöveget (amelyen a kurzor áll) a sor közepére igazítja.
SET LEFT MARGIN n
Az aktuális puffer bal margója az n. pozíción lesz. Default: n=1.
SET RIGHT MARGIN n
Az aktuális puffer jobb margója az n. pozíción lesz. Default: általában n=79.
SET TABS SPACES
A pufferbe tabulátor karakter (Tab billentyű vagy CTRL/I) helyett megfelelő számú szóköz karakter íródik.
SET TABS VISIBLE
A beírt tabulátor karakterek (Tab billentyű vagy CTRL/I) láthatóvá válnak a képernyőn: helyettük egy kicsi HT karakter és megfelelő számú pont jelenik meg.
SET TABS INVISIBLE
Az eddigi tabulátor karakter jelölések eltűnnek.
3. Egyidőben több puffert és több ablakot is használhatunk.
BUFFER puffer-név
A megadott nevű puffert az aktuális ablakba másolja, és a kurzort abba a pozícióba állítja, ahol a puffer legutóbbi használatakor volt. Ha a puffer még nem létezik, akkor az EVE létrehozza.
GET FILE filespecifikáció
A megadott filet az aktuális ablakba másolja, és új puffert is létrehoz, ha még nem volt a filenak. A filespecifikációban ugyanúgy használhatunk wildcard karaktereket, mint az EVE parancssorában.
SHOW BUFFERS
Felsorolja az eddig létrehozott puffereket, amelyek közül a SELECT billentyűvel választhatunk aktuális puffert.
SHOW SYSTEM BUFFERS
Felsorolja az eddig az editor (EVE) által létrehozott puffereket, amelyek közül a SELECT billentyűvel választhatunk.
WRITE FILE output-filespecifikáció
Az aktuális puffer tartalmát a fileba írja. Ha nem adunk meg filespecifikációt, a file neve a puffer nevéből képződik.
SPLIT_WINDOW n
A fő (vagy az aktuális) ablakot n ablakra osztja. (Ha nem adunk meg n-t, akkor kettőre.) A kurzor az alsó ablakban lesz, az ablakok mindegyikébe az eredeti ablak tartalma kerül. Az egyidőben megnyitható ablakok maximális száma a terminál típusától és méretétől függ.
OTHER WINDOW
A kurzort a másik (vagy a következő, ha több van) ablakba állítja, arra a helyre, ahol legutóbb volt abban az ablakban.
ONE WINDOW
Az aktuális ablak lesz az egyetlen, az egész képernyőt használó ablak, a többi ablak törlődik. (A pufferek tartalma természetesen megmarad; a SHOW PUFFER paranccsal tudjuk újra a képernyőre írni őket.)
ENLARGE WINDOW n
Az aktuális ablak méretét maximum n sorral növeli a képernyőn lévő többi ablak rovására úgy, hogy legalább egy sora azoknak is maradjon.
SHRINK WINDOW n
Az aktuális ablak méretét maximum n sorral csökkenti a képernyőn úgy, hogy legalább egy sora maradjon. A többi ablak mérete megnő az így nyert hellyel.
Például ha az ELSO.TXT egy részét át akarjuk másolni a MASOD.TXT fileba, akkor a legkényelmesebben a következő parancsokkal tehetjük meg:
$ EVE MASOD.TXT
Az EVE létrehoz egy puffert a MASOD.TXT file tartalmával. Ezután jönnek az EVE-nek szóló utasítások:
SPLIT_WINDOW
GET FILE ELSO.TXT
A fenti parancsok kettéosztják a képernyőt, majd az alsó ablakba bemásolják az ELSO.TXT filet. Ekkor az alsó ablakból a SELECT és REMOVE billentyűkkel az INSERT HERE pufferbe másoljuk, a szükséges szövegrészt, majd az
OTHER WINDOW
paranccsal átmegyünk a MASOD.TXT pufferbe, ahol az INSERT HERE billentyűvel beszúrjuk azt. A
ONE WINDOW
eltünteti a képernyőről a második ablakot, így esetleg folytathatjuk is az editálást a megváltoztatott MASOD.TXT-vel.
4. Az EVE-ben nem csak sorfolytonosan jelölhetünk ki területet, hanem karakterek egy oszlopával (box) is végezhetünk bizonyos műveleteket. Az első lépés az oszlop kijelölése. A kurzort a kijelölendő oszlop bal felső sarkába visszük, és ott kiadjuk a
BOX SELECT
parancsot, majd kurzort tetszőleges mozgató billentyűkkel az oszlop jobb alsó sarkába visszük. A megjelölt oszlop erős fényű lesz (highlighted in bold video), szemben a sorfolytonos SELECT paranccsal, amely inverzbe teszi a kijelölt részt.
Az így kijelölt oszloppal különböző műveleteket végezhetünk. Többek között a
BOX CUT
kivágja a megjelölt részt, elhelyezi a Paste pufferben, és a parancs további paramétere eldönti, hogy mi legyen visszamaradt hellyel (kitölti szóközzel, összenyomja a maradékot). A
BOX PASTE
beszúrja a Paste puffer tartalmát a kurzor aktuális helyére. A
BOX COPY
anélkül másolja a kijelölt oszlopot, hogy a kijelölt részt kivágná.
Például legyen a PARANCSOK.TXT file tartalma:
CONTINUE DECK DEPOSIT EOD
EXAMINE GOTO IF
SHOW STATUS SHOW SYMBOL STOP WAIT
Ha meg akarjuk cserélni a 2. és 3. oszlopot, akkor a következőket kell tenni:
Először a kurzort a DECK D betűjére állítjuk, és kiadjuk a
BOX SELECT
parancsot, majd a kurzort a mozgató nyilakkal a STOP S-ére visszük. Ekkor a 2. oszlop erős fényű lesz. Ezután a
BOX CUT
az oszlopot a Paste pufferbe viszi. Lépjünk ekkor az EOD 1. betűjére, majd adjuk ki a
BOX PASTE
parancsot. Az eredmény a
CONTINUE DEPOSIT DECK EOD
EXAMINE IF GOTO
SHOW STATUS STOP SHOW SYMBOL WAIT
tartalmú puffer lesz.
5. Az EDT-t jó ismerők a
SET KEYPAD EDT
paranccsal az EDT keypad funkcióbillentyű definíciókat is használhatják az EVE-n belül. A definíció kizárólag a keypad billentyűkre vonatkozik, szöveges parancsokra nem.
Ha állandó jelleggel használni akarjuk az EVE-ben az EDT keypad definíciókat, akkor ezt legegyszerűbben egy logikai név definiálással tehetjük meg:
$ DEFINE EVE$KEYPAD EDT
parancs után (amint a LOGIN.COM -ban is elhelyezhetünk) az EVE a kívánt keypad definíciókkal indul.
Amennyiben más személyreszabást is alkalmazunk, készíthetünk egy section filet: Behívjuk az EVE-t, és a számunkra fontos parancsok, például a SET KEYPAD EDT után a
SAVE EXTENDED EVE SYS$LOGIN:EVE_EDT.TPU$SECTION
paranccsal az EVE_EDT.TPU$SECTION fileba írjuk a definíciót. Az
EVE == "EDIT /TPU /SECTION=SYS$LOGIN:EVE_EDT.TPU$SECTION"
szimbólum definíció után az EVE beírásával automatikusan ezt a környezetet kapjuk.
6.2.Az EDT
Az EDT tetszőleges nyomtatható karaktereket és maximum 255 karakter hosszú sorokat tartalmazó fileok létrehozására és módosítására alkalmas. Az EDT interaktív szövegszerkesztő az
$ EDIT/EDT [filespecifikáció]
DCL paranccsal indítható el. Korábban az EDT volt a VMS default editora, de az EVE átvette a helyét. Ugyanakkor az EDT is közkedvelt, mert funkcióbillentyűi gyorsan megtanulhatók, és nem túl nagy fileok esetén egyszerűbb a használata.
6.2.1.Az EDT üzemmódjai
Az EDT három üzemmódot ismer: keypad, nokeypad és sor (line) mód. Az EDT-be belépéskor a sor mód a default. A keypad módra áttérés a CHANGE paranccsal, a line módba visszatérés a CTRL/Z-vel történik. Nokeypad módba áttéréskor először a SET NOKEYPAD parancsot kell kiadni, azután a CHANGE-t. A nokeypad EXIT parancs hatására az EDT visszatér a sor módba. A képernyő mód az általánosan használt, és később látható, hogyan juthatunk belépéskor automatikusan ebbe az állapotba.
Ha nem terminált, hanem emulációt használunk, akkor emulációtól is függhet, hogy milyen módon érhetjük el az egyes funkciókat.
Az EDT-t elindító parancsban megadhatjuk a létrehozandó file nevét, vagy a DCL bekéri. Ha létezik már ilyen file, akkor annak a legmagasabb verziója kerül az EDT MAIN pufferébe, és az EDT kiírja a file első sorát a képernyőre. (Maga az input file változatlan marad: ha kilépéskor mentjük a puffer tartalmát, az nem az input fileot írja felül, hanem új verziót hoz létre.) Ha még nincs ilyen file, akkor az EDT jelzi ezt:
$ EDIT/EDT FORRAS.BAS
Input file does not exist
[EOB]
*
A * az EDT sor módjának a promptja.
Az EDT-nek inicializáló parancsfile adható meg, amelyet az EDT minden meghívásakor végrehajt. Ebben a utility bármely utasítása elhelyezhető, így a sor módból képernyő módba váltó
SET MODE CHANGE
is. Ilyen esetben az EDT azonnal képernyő módba kerül, nem kell külön paranccsal váltani. Az inicializáló parancsfile neve a /COMMAND módosítóval adható meg, vagy ha ilyen nincs, akkor az EDT az EDTSYS logikai nevet keresi. Ha ez sincs definiálva, akkor az EDT végrehajtja a SYS$LIBRARY:EDTSYS.EDT-t – ebbe az operáció rendszer gazdája helyezhet el mindenki számára hasznos beállításokat. Ha ez sem létezik, akkor keresi az EDTINI logikai nevet, s ha ez is definiálatlan, akkor végrehajtja az aktuális default directoryban lévő EDTINI.EDT-t. Ha készítünk saját inicializáló parancsfilet a bejelentkezési default directoryban (SYS$LOGIN), akkor az EDT hívására célszerű definiálni egy szimbólumot a LOGIN.COM-ban:
$ EDT == "EDIT/EDT/COMMAND=SYS$LOGIN:EDTINI.EDT
Így bármely directoryban azonos módon indíthatjuk az EDT-t.
A keypad mód a terminál jobboldali numerikus billentyűzetét (keypad billentyűzet), a kurzormozgató billentyűket és néhány keyboard billentyűt vezérlőként használ. Bizonyos funkciók pedig a CTRL és valamelyik betű lenyomásával hajthatók végre.
A keypad billentyűkhöz két funkciót rendelt az EDT: a második funkció a GOLD (PF1) billentyű majd a kívánt funkcióbillentyű lenyomásával váltható ki.
A sor módban az EDT a sort (a szövegfile egy rekordját) tekinti a szöveg alapegységének. A parancsok a * prompt után adhatók meg. Ekkor egy vagy több sorral együtt végezhetünk műveleteket - például egy szövegrész kicserélését bizonyos sorszámú sorokban.
A nokeypad módban a képernyő alján jelennek meg a parancsok, a felső sorokban pedig a szerkesztett szöveg; a keypad billentyűi karaktereket jelenítenek meg. Ezt a módot főleg akkor használhatjuk, ha sok számot írunk be, és erre a keypad billentyűzetet kényelmesebben használhatjuk.
Az EDT - ha indításkor le nem tiltjuk - naplót (journal file) készít. A naplófileba feljegyzi az összes lenyomott billentyűt. A naplófile neve a filenévvel azonos, típusa JOU. Ha az EDT normálisan fejeződik be (EXIT vagy QUIT paranccsal), akkor a naplófile törlődik. Ha valamilyen okból az EDT futása megszakad, akkor a naplófile segítségével újra végrehajthatók a már kiadott parancsok, ha az
$ EDIT/EDT/RECOVER
DCL parancsot használjuk.
Az EXIT és QUIT a /SAVE módosítóval akkor is megőrzi a naplófilet, ha szabályos a kilépés. Nem készül naplófile, ha
$ EDIT/EDT/NOJOURNAL
paranccsal indítjuk a szerkesztőt.
6.2.2.A keypad billentyűzet parancsok
Keypad módban a terminál típusától függően változik a billentyűkhöz tartozó parancs.
A VT100, VT200, VT300, VT400 sorozatú terminál (vagy ha ilyen funkciót emulálunk) esetén az alábbi kiosztást használjuk:
EDT keypad
A parancs neve megegyezik a fenti ábrán lévő billentyűn szereplő névvel.
.ADVANCE
A haladási irányt (például keresésben) a file elejétől a vége felé állítja be.
.APPEND
Az aktuális pufferből törli a kiválasztott részt, és a PASTE puffer végére másolja (meghagyva annak korábbi tartalmát).
.BACKUP
A haladási irányt a file végétől az eleje felé állítja be.
.BOTTOM
A puffer végére állítja a kurzort.
.CHAR
Egy karaktert mozdul a kurzor az aktuális haladási irányba.
.CHNGCASE
A kiválasztott területen a betűket megváltoztatja: a nagybetűket kisbetűkké, a kisbetűket nagybetűkké konvertálja.
.COMMAND
Sor módú parancsot adhatunk meg keypad módban. Az EDT promptja ilyenkor
Command:
a képernyő alján. A beírt parancsot az ENTER billentyűvel kell lezárni.
.CUT
A kiválasztott területet az aktuális pufferből törli és beírja a PASTE pufferbe, törölve annak korábbi tartalmát.
.DEL C
Törli azt a karaktert, amelyen a kurzor áll.
.DEL EOL
Törli a sort az aktuális kurzor pozíciótól kezdve a sor végéig, a sorterminátor karakter kivételével.
.DEL L
Törli a sort az aktuális kurzor pozíciótól kezdve jobbra, beleértve a sorterminátort is.
.DEL W
Egy szót vagy egy szónak egy részét törli - az aktuális kurzor pozíciótól kezdve jobbra.
.ENTER
Ezzel a billentyűvel kell lezárni a keresendő stringet, a sor módú parancsokat és a billentyűdefiníciókat. Nem egyezik meg a RETURN billentyűvel!
.EOL
A kurzort a haladási irány szerinti aktuális sor végére viszi. Ha a kurzor a sor végén áll, akkor a kurzor a következő vagy megelőző sor végére kerül, a haladási iránytól függően.
.FILL
A kiválasztott terület sorait úgy rendezi át, hogy maximális számú egész szó kerüljön egy sorba - amennyit a sorszélesség megenged.
.FIND
Megkeresi a megadott string első előfordulását a megadott haladási irányban. Az EDT
Search for:
prompttal kéri a keresendő stringet. A stringet bármely keypad billentyűvel terminálhatjuk, de az ADVANCE vagy a BACKUP billentyű a keresési irányt is meghatározza, a többi billentyű nem változtat az irányon.
.FNDNXT
A FIND-dal meghatározott string következő előfordulási helyére viszi a kurzort a megadott haladási irányban.
.GOLD
o.A GOLD után a keypad billentyűit megnyomva a második funkció hajtódik végre.
o.A GOLD után a keyboardon beírt szám ismétlésre használható: a szám után megadott keypad billentyű a megadott számúszor hajtódik végre, a nem szám keyboard karakterből pedig annyi darab kerül a pufferbe, amilyen számot beírtunk.
A terminálemulációnál a GOLD a NumLock billentyű helyén van, ezt azonban nem minden terminálemuláció engedi meg; ebben az esetben a GOLD nem elérhető.
.HELP
A termináltípusnak megfelelő, többszintű tájékoztató szöveget ír ki.
.LINE
A következő vagy megelőző sor elejére lép a kurzor, a haladási iránytól függően.
.OPEN LINE
A kurzor aktuális pozíciójára beszúr egy sorterminátort és a kurzor az új sor elejére áll.
.PAGE
A következő vagy megelőző lap elejére áll, a haladási iránytól függően. A lapot alapértelmezésben egy lapdobás karakter (FF, ASCII értéke 12) jelzi.
.PASTE
A PASTE puffer tartalmát a kurzortól balra beszúrja az aktuális pufferbe. A PASTE puffer nem változik.
.REPLACE
A kiválasztott terület tartalmát törli, és helyére másolja a PASTE puffer tartalmát. A törölt szöveg a DELETE nevű pufferbe kerül, felülírva annak korábbi tartalmát.
.RESET
Törli az aktív terület kiválasztást (a SELECT hatását), és az aktuális haladási irányt felülről lefelé állítja.
.SECT
Egy szekcióval - 16 sor - lépteti a kurzort, az aktuális haladási iránynak megfelelően.
.SELECT
Kijelöli a kiválasztott terület kezdőpontját, a kurzor aktuális helyén. A kurzort tetszőleges irányban és módon mozgathatjuk, majd az APPEND, CHNGCASE, CUT, FILL, REPLACE vagy SUBS billentyűk valamelyikével zárhatjuk le a kiválasztott területet. A RESET funkció törli a kiválasztást.
.SPECINS
A speciális karakterek bevitelére szolgál: a keyboardon beírt számot az EDT decimális ASCII kódnak értelmezi, és az annak megfelelő karakter kerül a szövegbe. Először a GOLD billentyűt kell leütni, majd beírni a beszúrandó karakter ASCII kódját (ez megjelenik a képernyő alján), és ezután kell használni a SPECINS billentyűt.
.SUBS
A megadott stringet megkeresi, és a PASTE puffer tartalmával helyettesíti. A következő módon kell használni: A SELECT billentyű lenyomása után be kell gépelni azt a stringet, amire cserélni akarunk, majd a CUT billentyűvel a PASTE pufferbe tölteni. (Természetesen fel lehet használni a PASTE puffer korábbi tartalmát is.) A FIND billentyű után írjuk be a kicserélendő stringet; ennek lezárása (ENTER) után az EDT a string első előfordulására áll. A SUBS billentyű lenyomása után a kicserélendő string elvész, és helyébe íródik a PASTE pufferben levő, majd az EDT a kicserélendő string következő előfordulására áll rá. A SUBS billentyű ismételt lenyomása újabb cserét és a következő stringre állást eredményezi, mindaddig, amíg van ilyen string a fileban.
.TOP
A kurzort a puffer első karakterére állítja.
.UND C
Az utoljára törölt karaktert visszaírja a kurzor helyére.
.UND L
Az utoljára törölt sort visszaírja a kurzortól kezdődően.
.UND W
Az utoljára törölt szót visszaírja a kurzor pozíciójától kezdődően.
.WORD
A következő szó elejére áll a haladási iránynak megfelelően.
6.2.3.További parancsok
Az EDT néhány más billentyűt is funkcióbillentyűként használ.
A leggyakrabban használt keyboard (alfanumerikus billentyűzet) billentyűk:
.CTRL/C
Az éppen végrehajtás alatt álló EDT parancsot megszakítja.
.CTRL/K
Egy billentyűt definiál. (A definíció addig érvényes, amíg ki nem lépünk az EDT-ből, vagy át nem írjuk.)
.CTRL/R
Felfrissíti az aktuális képernyőt (pl. egy operátori üzenet megjelenése után).
.CTRL/U
Törli a sort a kurzortól balra a sor elejéig.
.CTRL/W
Felfrissíti az aktuális képernyőt (pl. egy operátori üzenet megjelenése után).
.CTRL/Z
A keypad módból sor módba tér át.
.DELETE
Egy karaktert töröl a kurzortól balra.
.RETURN
A keyboard RETURN billentyűje egy sorterminátort ír a kurzor helyére és a kurzort a következő sorba állítja.
Az Fx (funkció-) billentyűkre definiált műveletek:
.F12 (BS, Backspace)
A kurzor az aktuális sor elejére áll. Ha már a sor elején állt, akkor a megelőző sor elejére megy.
.F13 (LF, Linefeed)
A kurzortól balra eső szót vagy szórészletet törli.
.F15 (Help)
A termináltípusnak megfelelő, többszintű tájékoztató szöveget ír ki. Azonos hatású a PF2-vel.
A keyboard és keypad közötti billentyűk (Ex és a nyilak) VT200 vagy afölötti sorozatú terminál esetén:
EDT Ex
.FIND
Megkeresi a megadott string első előfordulását a megadott haladási irányban. Az EDT
Search for:
prompttal kéri a keresendő stringet. A stringet bármely keypad billentyűvel lezárhatjuk, de az ADVANCE vagy a BACKUP billentyű a keresési irányt is meghatározza, míg a többi billentyű nem változtat az irányon.
Azonos hatású, mint a keypad FIND (PF1, PF3).
.INSERT HERE
A PASTE puffer tartalmát a kurzortól balra beszúrja az aktuális pufferbe. A PASTE puffer nem változik.
Azonos a keypad PASTE-tal (PF1, KP6).
.REMOVE
A kiválasztott területet az aktuális pufferből törli és beírja a PASTE pufferbe, törölve annak korábbi tartalmát.
Azonos a keypad CUT-tal (KP6).
.SELECT
Kijelöli a kiválasztott terület kezdőpontját, a kurzor aktuális helyén. A kurzort tetszőleges irányban és módon mozgathatjuk, majd az APPEND, CHNGCASE, CUT, FILL, REPLACE vagy SUBS billentyűk valamelyikével zárhatjuk le a kiválasztott területet. A RESET funkció törli a kiválasztást.
Azonos a keypad SELECT-tel (KP.).
.PREV SCREEN
16 sorral visszalép, a puffer kezdősora felé. A kurzor a 16. sor első karakterére áll.
.NEXT SCREEN
16 sorral előrelép, a puffer utolsó sora felé. A kurzor a 16. sor első karakterére áll.
Azonos a keypad SECT-tel (KP8).
.DOWN (lefelé nyíl)
Egy sorral a puffer vége felé mozgatja a kurzort.
.LEFT (balra nyíl)
Egy karakterrel balra lépteti a kurzort.
.RIGHT (jobbra nyíl)
A kurzort egy karakterrel jobbra lépteti.
.UP (felfelé nyíl)
Egy sorral felfelé lépteti a kurzort.
Az EDT-ből való kilépés történhet keypad módban COMMAND paranccsal vagy a sor módba visszatérve. Az
EXIT
parancs a szerkesztett fileból új verziót hoz létre, amely tartalmazza a puffer tartalmán végrehajtott változtatásokat. A
QUIT
parancs új file létrehozása nélkül lép ki. A napló file és a puffer(ek) tartalma mindkét esetben törlődik.
A /SAVE parancsmódosító mind EXIT, mind QUIT esetén menti a napló filet (filenév.JOU névvel, a default directoryba.)
7.A Mail utility
Az OpenVMS Mail segédprogram lehetővé teszi, hogy egy gépen vagy – a szükséges hálózati szoftver megléte estén - az egy DECnet hálózatban dolgozó vagy TCP/IP kapcsolatban álló felhasználók üzeneteket küldjenek egymásnak - függetlenül attól, hogy éppen be van-e jelentkezve a címzett vagy sem. Ha a címzett be van jelentkezve, akkor a kapott levelekről tájékoztató üzenet jelenik meg a terminálján, ha nincs, akkor csak a következő bejelentkezésekor. A levelet ugyancsak a Mail utility segítségével olvashatjuk el, kinyomtathatjuk, továbbküldhetjük, válaszolhatunk rájuk, irattartókban rendszerezhetjük őket, vagy törölhetjük.
A Mail utility az üzeneten kívül megőrzi annak küldőjét (From: mező), a címzett(ek)et (To: mező), a levél témáját (Subject: mező) és a küldés időpontját.
Hívása DCL-ből történik:
$ MAIL [filespecifikáció] [címzett [,...]]
Ha a parancssorban szerepel a filespecifikáció, akkor az előre elkészített filet tudjuk elküldeni a címzettként megadott felhasználó(k)nak. Ha címzett nem szerepel a sorban, akkor a Mail megkérdezi:
$ MAIL UZENET.TXT
To: FODOR
Ebben az esetben a levél téma mezője üresen marad. Ha ki akarjuk tölteni, a /SUBJECT módosítót kell használnunk:
$ MAIL /SUBJECT="Ez az első próbálkozásom" UZENET.TXT FODOR
Fontos lehet még a /SELF módosító, ebben az esetben az elküldött levélből a feladó is kap egy példányt.
Legtöbbször azonban paraméter nélkül írjuk a MAIL parancsot, és ezzel egy interaktív menetet (session) indítunk el: Amíg ki nem lépünk a Mail-ből, addig csak neki szóló parancsokat adhatunk meg; ezt jelzi a megváltozott prompt is:
MAIL>
<Mail parancsok>
MAIL> EXIT
$
7.1. A legfontosabb üzenetkezelő parancsok
Ebben az alfejezetben a Mail belső (csak interaktív módban kiadható) parancsaival foglalkozunk. A parancsok a használat valószínű sorrendjében szerepelnek.
1. EXIT
Kilépünk a Mailből, visszatérünk a DCL-be, minden megnyitott filet lezárunk, és a törölt levelek véglegesen elvesznek. Ugyanilyen értelemben használhatjuk a CTRL/Z-t is.
QIUT paranccsal is kiléphetünk, ekkor a WASTEBASKET (törölt levelek irattartója) tartalma megőrződik.
2. HELP
Többszintű tájékoztató szöveget ír a képernyőre a Mail belső parancsairól – hasonlóan a DCL HELP parancsához. Kissé zavaró, hogy a szöveget nem tördeli oldalakra. Túl gyors terminálemuláció esetén emiatt olvashatatlan lehet a help. Azonban a MAIL utility belső helpje elérhető kívülről is:
$ HELP /LIBRARY=MAILHELP
3. READ
Ez a Mail default parancs, ezért ha csak <Return>-t ütünk a MAIL> promptra, akkor az aktuális levél tartalmát látjuk a képernyőn. Egyaránt használható új és régi levelek olvasására.
Ha levelünk érkezik, amikor be vagyunk jelentkezve, akkor kapunk erről egy tájékoztató üzenetet:
New mail on node FZAXP1 from FZVAX::SYSTEM (10:02:23)
Ha éppen nem vagyunk bejelentkezve, akkor a következő interaktív bejelentkezéskor kapunk figyelmeztetést, majd a Mail behívásakor mindenképpen:
You have 1 new message.
MAIL> <Return>
A <Return> ekvivalens a READ paranccsal, ezért azonnal látjuk a kapott levelet.
Ha több levelünk érkezett, akkor a <Return> ismételt lenyomásával mindegyiket el tudjuk olvasni, és ha elfogynak, akkor erről
%MAIL-E-NOMOREMSG, no more messages
üzenet tájékoztat.
A régi (már elolvasott) leveleinket is újra olvashatjuk: Ha éppen nincs új levelünk, akkor a fenti módszerrel a régieket tudjuk olvasni, vagy előbb a
MAIL> SELECT MAIL
paranccsal (lásd 7.2. fejezet) kiválasztjuk az irattartót, és utána tudunk olvasni.
Amennyiben egy levél túl nagy ahhoz, hogy kényelmesen lehessen olvasni, akkor a
MAIL> READ/EDIT 25
parancs segítségével egy editoron keresztül lehet olvasni a megadott (a példában a 25.) levelet.
4. SEND, MAIL
Ezzel a két paranccsal tudunk levelet küldeni (a két szó egyenértékűen használható):
MAIL> SEND <Return>
To: HALLGATO <Return>
Subj: Minta <Return>
Enter your message below. Press CTRL/Z when complete, or CTRL/C to quit:
Ez egy egyszerű levél <Return>
Néhány sorban <Return>
<Return>
Üdv <Return>
<CTRL/Z>
A mintában szereplő <Return>-ok a Return billentyűt jelzik – így kell az egyes sorokat zárni. A To: mezőbe a címzett kerül, a Subject: mezőbe pedig az üzenet tárgya.
Ha kényelmesebben akarjuk a levél törzsét megszerkeszteni, akkor a
MAIL> SEND/EDIT
formát használjuk. Ekkor a címzett és tárgy mező kitöltése után a Mail meghívja a default szövegszerkesztőjét (az EVE, ha át nem állítjuk), ahol a szokványos módon editálhatunk – akár egy korábban létrehozott filet is. Amikor EXIT-tel kilépünk az editorból, akkor a létrehozott filet azonnal elküldi a Mail. Ha mégsem akarjuk elküldeni a levelet, akkor QUIT-tel kell zárnunk a szerkesztést.
5. REPLY
Válaszol az éppen olvasott levélre. A címzett a feladó lesz, a levél témája pedig az olvasott levél mezőjéből képződik:
MAIL>REPLY <Return>
To: FZAXP::FODOR <Return>
Subj: RE: Minta <Return>
Enter your message below. Press CTRL/Z when complete, or CTRL/C to quit:
Megkaptam!!
<Return>
Üdv <Return>
<CTRL/Z>
Itt is használhatjuk a REPLY/EDIT formát. Hasznos még a REPLY/EDIT/EXTRACT parancs, ami nemcsak, hogy editort hív be, hanem a válaszolandó levelet is beolvassa a szövegszerkesztő pufferébe.
6. FORWARD
Az éppen olvasott levél továbbküldése. A Mail ilyenkor csak a címzettet és a témát kérdezi meg, kivéve, ha FORWARD/EDIT parancsot használunk.
7. EXTRACT
Az éppen olvasott levél fileba mentése:
#1 01-AUG-2002 14:12:27 NEWMAIL
From: FZAXP::FODOR
To: HALLGATO
Subj: Minta
Ez egy egyszerű levél
Néhány sorban
Üdv
MAIL> EXTRACT MINTA.TXT
%MAIL-I-CREATED, DISK:[HALLGATO]MINTA.TXT
Ha csak a levél törzsét akarjuk megőrizni, akkor az EXTRACT/NOHEADER parancsot használjuk.
8. PRINT
Az éppen olvasott levelet a Mail-ből való kilépéskor bejegyzi a default nyomtató várakozási sorba (default print queue, SYS$PRINT), vagy a /QUEUE módosítóval megadott sorba. (Várakozási sorokat lásd a 11. fejezetben.)
9. DELETE
Törli az éppen olvasott vagy a paraméterként megadott leveleket. A törlés csak akkor válik véglegessé, ha kilépünk a Mail-ből.
#1 01-AUG-2002 14:12:27 NEWMAIL
From: FZAXP::FODOR
To: HALLGATO
Subj: Minta
Ez egy egyszerű levél
Néhány sorban
Üdv
MAIL> DELETE
Ekkor az éppen olvasott levelet töröljük, a
MAIL> DELETE /ALL
vagy
MAIL> DELETE 1-3, 10, 14
formával pedig az irattartóban lévő összes illetve 1., 2., 3., 10., 14. sorszámú levelet távolítjuk el.
10. SEARCH
A megadott szöveget keresi a levelekben. Az első találatnál megáll, majd a SEARCH paraméter nélküli formájával továbbkeresi ugyanazt a mintát.
MAIL> SEARCH "OpenVMS"
11. DIRECTORY
A parancs az aktuális irattartó tartalomjegyzékét írja a terminálra.
7.2. Az irattartók
A Mail a beérkezett leveleket irattartókban (folder) tárolja – ez belső, csak a Mail által használható struktúra. A Mail alapértelmezésben 3 irattartót ismer:
.MAIL – A régi (már elolvasott) levelek default helye; a levél elolvasása után automatikusan idekerül.
.NEWMAIL – Az új (még el nem olvasott) levelek default helye. Addig maradnak itt, amíg el nem olvassuk őket.
.WASTEBASKET – A törölt levelek default helye; ha EXIT-tel, CTRL/Z-vel lépünk ki a Mail-ből, a tartalma elvész.
Amikor belépünk a Mail-be, akkor vagy a NEWMAIL vagy a MAIL lesz az aktuális irattartó, aszerint, hogy van-e még el nem olvasott levelünk. Az aktuális folder tartalmát tudjuk mindig vizsgálni.
Alapértelmezésben az irattartó megszűnik, ha kiürül, de a fenti 3 irattartó automatikusan újra létrejön, ha levelek kerülnek beléjük.
Amikor egy levelet olvasunk, akkor a jobb felső sarokban az irattartó neve is megjelenik:
#1 01-AUG-2002 14:12:27 NEWMAIL
Ha magunk kívánjuk rendezni a leveleinket, akkor további irattartókat hozhatunk létre a COPY vagy MOVE paranccsal:
MAIL> COPY ELSO <Return>
Folder ELSO does not exist.
Do you want to create it (Y/N, default is N)? Y <Return>
%MAIL-I-NEWFOLDER, folder ELSO created
A fenti példában az utoljára olvasott levélből egy másolatot az ELSO nevű irattartóban akarunk elhelyezni. Mivel ilyen még nincs, a Mail kérésre létrehozza. (A mintában szereplő <Return>-ok a Return billentyűt jelzik – így kell az egyes sorokat zárni.) MOVE parancs esetén nem másolat készül, hanem az olvasott levél átkerül az új irattartóba; az irattartó létrehozása azonban ugyanígy történik.
Ha látni akarjuk, milyen irattartóink vannak, akkor a DIRECTORY/FOLDER parancsot kell használni, majd a SELECT paranccsal kiválaszthatjuk az aktuálisat, amelyben további műveleteket végezhetünk (DIRECTORY, READ, DELETE, FORWARD, COPY, stb.):
MAIL> DIRECTORY/FOLDER [Return]
Listing of folders in SYS$LOGIN:[HALLGATO]MAIL.MAI;1
Press CTRL/C to cancel listing
ELSO MAIL MASOD
MAIL> SELECT ELSO
MAIL> DIRECTORY
Ha törlünk egy levelet, az a WASTEBASKET irattartóba kerül. Ha még a Mail-ből való kilépés előtt meggondoljuk magunkat, akkor vissza tudjuk állítani a törölt levelet:
MAIL> READ
#1 01-AUG-2002 14:12:27 NEWMAIL
From: FZAXP::FODOR
To: HALLGATO
Subj: Minta
Ez egy egyszerű levél
Néhány sorban
Üdv
MAIL> DELETE
MAIL> SELECT WASTEBASKET
%MAIL-I-SELECTED, 1 message selected
MAIL> DIRECTORY
# From Date Subject WASTEBASKET
1 FZAXP::FODOR 11-AUG-2001 Minta
MAIL> READ
MAIL> MOVE MAIL
Teljes irattartó úgy törölhetünk, ha minden levelét töröljük a DELETE/ALL paranccsal – ekkor a folder automatikusan megszűnik.
7.3. Címzési módok
Az eddigi példákban mindig egyetlen lokális (ugyanazon a gépen dolgozó felhasználó) címzett szerepelt a To: mezőben, de a Mail ennél többet tesz lehetővé.
A To: mezőben megadhatunk több címzettet vesszővel (,) elválasztva – ezek a címzettek nem csak az illető gépen létező felhasználók lehetnek, hanem az összes, ebben a fejezetben szereplő módon írható címek.
Ezenkívül előre készíthetünk terjesztési listát: Ez egy szövegfile, default típusa DIS, és minden sora egyetlen – tetszőleges formájú – címet tartalmaz (beleértve egy beágyazott terjesztési lista file specifikációját is, @ jellel kezdve), úgy, ahogy a To: mezőbe írnánk. A listában megjegyzéseket is elhelyezhetünk, felkiáltójellel (!) kezdve a sort.
A terjesztési lista specifikációját a címzett mezőbe kell írni, @ jellel:
$ TYPE TANFOLYAM.DIS
HALLGATO1
HALLGATO2
HALLGATO3
VAX2::SYSTEM
PTAXP::OKTATO
$
MAIL> SEND
To: @TANFOLYAM
...
A Mail nem csak az azonos gépen definiált felhasználónak tud levelet küldeni, hanem minden olyan gép bármely felhasználójának, aki hálózaton keresztül, a gépen futó szoftverrel elérhető.
Ha a gépen fut a DECnet valamelyik változata, akkor a
csomópont-név::felhasználónév
címet használhatjuk a saját gépünkkel azonos DECnet hálózatban lévő gépre. Például az ABCD nevű gép OKTATO nevű felhasználójának a következő módon küldhetünk levelet:
MAIL> SEND
To: ABCD::OKTATO
Subj:
...
Ha TCP/IP hálózati szoftver fut a gépünkön, akkor Internet címzést is megenged a Mail. Attól függően, hogy mivel valósítjuk meg a TCP/IP-t, a címzés formája különböző lehet – pontos felvilágosítással csak a rendszer vagy a hálózat gazdája szolgálhat:
fodor31@freemail.hu
mx%"fodor31@freemail.hu"
smtp%"fodor31@freemail.hu"
Bármely formát kell is használni, az a címzés mezőben és a terjesztési listán ugyanúgy szerepelhet, mint a helyi vagy DECnet felhasználó címe.
7.4. Egyéb hasznos parancsok
A Mail még nagyon sok hasznos paranccsal rendelkezik, s bár mindet nem sorolhatjuk fel, még néhány fontosat megemlítünk.
1. A 7.1 fejezetben már szerepelt, hogy üzenet küldésekor (SEND, FORWARD, REPLY) szövegszerkesztőt is használhatunk. Ezt úgy is megtehetjük, hogy a Mail indításakor beállítjuk:
$ MAIL /EDIT=(SEND,FORWARD,REPLY)
Ekkor bármely fenti parancs esetén editorba lépünk. Ezenkívül a
$ MAIL /EDIT=REPLY=EXTRACT
biztosítja, hogy REPLY esetén az editor a kapott levelet a pufferébe beolvassa.
Természetesen szimbólumot is definiálhatunk, hogy mindig ez a beállítás érvényesüljön:
$ MAI*L == "MAIL /EDIT=(SEND,REPLY=EXTRACT)"
A default editor az EVE. Ha valamilyen okból el akarunk attól térni (például a terminálemulációval nem fér össze), akkor átállhatunk EDT-re:
MAIL> SET EDITOR EDT [Return]
MAIL> SHOW EDITOR [Return]
Your editor is EDT.
A SHOW EDITOR paranccsal bármikor ellenőrizhetjük, hogy milyen szövegszerkesztő indul el a megfelelő parancs esetén.
2. A Mail leggyakrabban használt parancsait a keypad (numerikus) billentyűkkel is végrehajthatjuk. A
MAIL> HELP KEYPAD
megmutatja a kiosztást. Ugyanúgy, ahogy az EDT-ben, a legtöbb billentyűnek itt is két funkciója van; a másodikat a PF1 billentyű megnyomása után kapjuk.
MAIL keypad
A keypad funkcióit át is írhatjuk a DEFINE/KEY Mail parancs vagy a MAIL$KEYDEF.INI file segítségével.
3. Ha már elég sokszor kaptunk levelet és átrendeztük, töröltük őket, akkor a Mail által használt indexelt file(ok) felesleges üres helyeket is tartalmazhatnak. Ekkor célszerű a
MAIL> COMPRESS
parancsot kiadni.
4. A kapott leveleinket átirányíthatjuk egy másik címre – ez a cím bármilyen, az illető rendszerben a címzés mezőben megengedett formájú lehet (lásd a 7.3. fejezet):
MAIL> SET FORWARD SMITH@Company.com
A
MAIL> SHOW FORWARD
paranccsal ellenőrizhetjük, hogy van-e érvényes átirányítás. Az átirányítást a
MAIL> SET NOFORWARD
szünteti meg.
Nem lehet egyszerre két helyre továbbküldeni a levelet, még úgy sem, hogy az egyik példány helyben marad, és a másik példány megy tovább. Emiatt nem érvényes a forward definíció disztribúciós listára sem.
5. Aláírás filet csatolhatunk az üzeneteinkhez a
MAIL> SET SIGNATURE_FILE SZIGNO.SIG
paranccsal, ahol a SZIGNO.SIG a szokásos elemeket tartalmazó szövegfile (név, foglalkozás, munkahely, telefonszám, e-mail cím stb.). Ekkor az összes levél-küldő parancs (ANSWER, FORWARD, MAIL, REPLY, SEND) így működik. Ha csak egyes esetekben van szükség az aláírás filera, akkor
MAIL> SEND/SIGNATURE_FILE=UDV.SIG
vagy
$ MAIL /SIGNATURE_FILE[=file-name]
formát használjuk. A
MAIL> SHOW SIGNATURE_FILE
paranccsal tudjuk ellenőrizni, hogy van-e aláírás fileunk.
6. Egy adott irattartó leveleiből a módosítók által megaodtt paraméterek szerint kiválogathatunk valahányat:
MAIL> SELECT [folder]
Ha nem adunk meg irattartót, akkor az aktuálisból válogatunk. A parancs módosítói szerint dátum, tartalom vagy állapot szerint válogathatunk. Ezután a COPY, DELETE, DIRECTORY, EXTRACT, FILE, MOVE, READ, SEARCH parancs a kiválasztott levelekkel dolgozik.
Például
MAIL> SELECT MAIL /FROM_SUBSTRING=FODOR
%MAIL-I-SELECTED, 20 messages selected
A fenti parancs a MAIL irattartóból a FODOR felhasználótól érkezett leveleket választja ki. Ezután a DIRECTORY, DELETE és READ parancs a kiválasztott levelekkel dolgozik.
MAIL> SELECT MAIL /SINCE=YESTERDAY
%MAIL-I-SELECTED, 11 messages selected
A fenti parancs a MAIL irattartóból a tegnapi vagy frissebb leveleket választja ki. A megadott dátum dd-mmm-yyyy formájú lehet, vagy TODAY vagy YESTERDAY Hasonlóan működik a /BEFORE módosító, amely a megadott időpontnál korábbi leveleket választja ki.
A módosítók vegyíthetők: ekkor az összes módosítónak megfelelő leveleket válogatja ki a MAIL.
8. A Phone
Az OpenVMS Phone segédprogram a saját rendszerünkbe vagy a hálózat gépeire bejelentkezett felhasználók között interaktív üzenetváltást tesz lehetővé. A program működése némileg hasonló a valódi telefonhoz, vagy az internetes 'talk' szolgáltatáshoz: a terminál képernyő két részén a két telefonáló szövege jelenik meg. Ezenkívül konferenciakapcsolást is létre lehet hozni, egy felhasználó több másikkal is "beszélhet".
Elindítása a
$ PHONE [usernév]
DCL paranccsal történik. Paraméterként megadható a hívott felhasználó. A Phone a saját képernyőnkön megjelenteti a szokásos formát, a hívott fél termináljára (vagy ha több helyen is be van jelentkezve, akkor mindegyikre) üzenetet küld. (Ha a Phone sorába nem írunk felhasználót, akkor később a DIAL paranccsal hívni valakit – ezt kell használni akkor is, ha több partnerrel akarunk egy időben beszélni.)
A hívott fél
$ PHONE ANSWER
paranccsal fogadhatja el a hívást. Ekkor a kapcsolat létrejön:
OpenVMS Phone Facility 11-AUG-2003
%
---------------------------------------------------------
ABCD::PAPA
----------------------------------------------------------
ABCD::MAMA
----------------------------------------------------------
A két felhasználó párhuzamosan gépelhet, mindenkinek a saját mezőjében jelennek meg az általa leütött billentyűk, és mindketten minden szöveget látnak.
Ha a hívott fél nem kíván kapcsolatot létesíteni akkor – hasonlóan az igazi telefonhoz – nem kell válaszolnia. Ha már aktív nála a Phone, akkor kiadhatja a REJECT parancsot, s ezzel azonnal visszautasítja a hívást.
A Phone számára a százalékjel (%) vezérlő karakter: interaktív esetben ezt leütve a Phone átmegy parancs módba, és a képernyő bal felső sarkában jelennek meg a betűk. Ekkor újra kiadhatjuk a
% DIAL usernév
parancsot is, és ezzel újabb felhasználóval kezdeményezünk kapcsolatot. Ha a felhasználók láncszerűen hívják egymást, akkor jön létre konferenciabeszélgetés.
A Phone-ból kilépés a szokásos EXIT vagy CTRL/Z paranccsal történhet. Ezenkívül használhatjuk a HANGUP parancsot, amely megőrzi az interaktív Phone állapotát, csak megszakítja az összes élő kapcsolatot.
Hasznos lehet még a
$ PHONE DIRECTORY
parancs, amely képernyőre írja az összes bejelentkezett felhasználót, és azt, hogy lehet-e velük Phone kapcsolatot létesíteni. Ha a parancs után egy DECnet csomópont nevét írjuk, akkor az arra a gépre bejelentkezett felhasználókról kapunk listát:
$ PHONE DIRECTORY ABCD::
OpenVMS Phone Facility 11-AUG-2003
%
Press any key to cancel the directory listing and continue.
Process Name User Name Terminal Phone Status
SYSTEM SYSTEM LTA1234: available
PAPA PAPA LTA2000: available
_RTA1: SYSTEM RTA1: /nobroadcast
9.Rendezés: a Sort és Merge
Az OpenVMS Sort/Merge utility két alapvető funkcióval rendelkezik:
.rendező (sort)
.összefésülő (merge)
Ezenkívül az Alphán az architektúrát kihasználó nagy teljesítményű változatot (High-performance Sort/Merge utility).is használhatjuk – ugyanazokkal a parancsokkal.
A rendezés (sort) egy vagy több input file rekordjait a megadott mező(k) tartalma szerint sorba rendezi és létrehoz egyetlen, az összes input rekordból álló rendezett output filet. A kulcsmezők különböző adattípusúak lehetnek, a rendezettség mezőnként lehet növekvő vagy csökkenő.
Az összefésülés (merge) maximum tíz darab, azonos kulcs(ok) szerint azonos módon rendezett fileból készít egyetlen rendezett output filet..
Általános formájuk:
$ SORT input-file [,...] output-file
$ MERGE input1, input2 [,...] output-file
9.1. Rendezési kulcsok
A Sort alapértelmezésben az input file(ok) teljes rekordja szerint rendez, mégpedig azok ASCII kódja szerint növekvő sorrendben. Például egy fileba Írathatjuk a rendszerünkbe bejelentkezett felhasználókat, majd név szerint rendezhetjük őket (Az 1. oszlop a név, a 2. a csomópont név).
$ SHOW USERS/NOHEADING/OUTPUT=USERS.TXT
$ TYPE USERS.TXT
PAPA BBBBBB 1
MAMA XXXXXX 4 2
SYSTEM AAAAAA 1 4
FODOR AAAAAA 2
$
$ SORT USERS.TXT REND.TXT
$
$ TYPE REND.TXT
FODOR AAAAAA 2
MAMA XXXXXX 4 2
PAPA BBBBBB 1
SYSTEM AAAAAA 1 4
(Ha két csomóponton ugyanaz a felhasználó be lett volna jelentkezve, akkor a csomópont neve döntötte volna el a sorrendjüket.)
A /KEY módosítóval ennél bonyolultabb rendezést is végrehajthatunk:
.Megadhatjuk, hogy a kulcsmező a rekord mely pozícióján kezdődjön: POSITION=n. A számozás 1-gyel kezdődik, és az érték kiírása kötelező.
.A SIZE=n a kulcsmező hosszát határozza meg.
o.Ha a mező lebegőpontos, akkor nem kell használni, mert a mező hosszát a típus definiálja.
o.Karakteres mező esetén 1 és 32767 lehet a hossz.
o.Decimális mezőnél 0<n<32.
o.Bináris mező esetén 1, 2, 4, 8, 16 lehetséges.
.A kulcsmező típusa az összes, a VMS-ben ismert adattípus lehet; default a CHARACTER:
o.BINARY, [SIGNED]
o.BINARY, UNSIGNED
o.CHARACTER
o.DECIMAL, LEADING_SIGN, SEPARATE_SIGN [SIGNED]
o.DECIMAL, LEADING_SIGN, [OVERPUNCHED_SIGN, SIGNED]
o.DECIMAL [,SIGNED, TRAILING_SIGN, OVERPUNCHED_SIGN]
o.DECIMAL, [TRAILING SIGN], SEPARATE_SIGN, [SIGNED]
o.DECIMAL, UNSIGNED
o.D_FLOATING
o.F_FLOATING
o.G_FLOATING
o.H_FLOATING
o.S_FLOATING, IEEE (csak Alphán)
o.T_FLOATING, IEEE (csak Alphán)
o.PACKED_DECIMAL
o.ZONED
.A kulcs értéke szerint növekvő vagy csökkenő sorrendben rendezhetünk:
o.ASCENDING - ez a default
o.DESCENDING
.Megadhatjuk, hogy az illető kulcs hányadik a rendezésben: NUMBER=1 az elsődleges kulcs, NUMBER=2 a második stb.
Ha nem adjuk meg a NUMBER paramétert, akkor a /KEY mezők sorrendje határozza meg a kulcsok sorrendjét.
A fenti paramétereket a /KEY módosítóval kell megadni. Például legyen a BERTORZS.DAT file rekordképe a következő:
Mezőnév Hossz (byte) Adattípus
Osztálykód 2 CHARACTER
Név 30 CHARACTER
Fizetés 4 BINARY, UNSIGNED
Lakhely (város) 10 CHARACTER
A következő példákban ezt a filet rendezzük különböző módokon.
1. Rendezzük név és azon belül lakhely szerint ábécé sorrendbe a rekordokat!
$ SORT -
_$ /KEY=(POSITION:3, SIZE:30) -
_$ /KEY=( POSITION:37, SIZE:10) -
_$ BERTORZS.DAT BERTORZS.NEV
A karakter mezőtípust és a növekvő sorrendet nem kell kiírni, mert az a default.
A rekordok csak akkor lesznek valóban ábécé szerint rendezve, ha csak az angol ábécé betűit tartalmazzák (lásd a 9.2. fejezetet)
2. Rendezzük fizetés szerint csökkenő sorrendbe az osztályok dolgozóit!
$ SORT -
_$ /KEY=(POSITION:33, SIZE:4, BINARY, DESCENDING, NUMBER:2) -
_$ /KEY=( POSITION:1, SIZE:2, NUMBER:1) -
_$ BERTORZS.DAT BERTORZS.FIZETES
Ha a két /KEY módosítót megcseréljük, akkor elhagyhatjuk a NUMBER mezőket.
Ha valamely kulcsmezőnek lehetnek több rekordban azonos értékei, akkor fontos még két – egymást kizáró - módosító. (Ez előfordulhat egy vagy több input file esetén is.)
./STABLE - Ebben az esetben az azonos kulcsértékű rekordok mindegyike bekerül az output fileba, mégpedig olyan sorrendben, ahogy az input fileban vagy fileokban voltak.
./NODUPLICATES – Az azonos kulcsértékű rekordok közül csak egy kerül át az output fileba.
9.2. A kollatálási sorrend
A karakteres kulcsmezőket alapértelmezés szerint a karakterek ASCII kódja szerint hasonlítjuk össze. Ez az angol ábécé betűire és a számokra a szokásos sorrendet eredményezi, de ha például magyar ékezetes betűket tartalmaz a fileunk, akkor az outputban az ékezetes betűk a sor legvégén foglalnak helyet (ASCII kódjuk nagyobb, mint 127.)
A Sort/Merge utility lehetővé teszi, hogy a rendezéskor megadjuk a kollatálási (ábécébe sorolási) sorrendet a
/COLLATING_SEQUENCE=szekvencia
módosítóval. A típus lehet
.ASCII – Ez a default
.EBCDIC – Elsősorban nem Digital gépekről származó adatok esetén lehet hasznos.
.MULTINATIONAL – DEC Multinational karakterkészlet szerint rendez. (Ez a készlet tartalmazza nyugati ékezetes betűket – és nem tartalmazza az ő, Ő, ű, Ű betűket.) Az ékezetes betűket ékezet nélkül veszi figyelembe, azaz például az A betű csak akkor előzi meg az Á-t, ha az inputban is előbb szerepelt.
.NCS szekvencia – Az OpenVMS National Character Set Utility segítségével definiálhatjuk a nemzeti karakterkészletet, és akkor az NCS könyvtárt használva ez a karakterkészlet az angol ábécével egyenrangúan használható.
.Paraméterként megadott szekvencia – Fel kell sorolni, milyen sorrendet kívánunk.
Például a
/COLLATING_SEQUENCE=MULTINATIONAL
magyar ékezetes betűk esetén nem ad ugyan tökéletes megoldást, de jobb, mint a default kollatálási sorrend.
Azt is megadhatjuk, hogy mely karaktereket ne vegye figyelembe a Sort a rendezésnél. Például a
/COLLATING_SEQUENCE=(SEQUENCE=ASCII,IGNORE=("-"," "))
esetén a kulcsmezőben lévő telefonszámok, a
2345-567
2345567
2345 567
mindegyike azonos értéket jelent.
10. A DCL
A teljes DCL parancskészlet, paramétereik és példák az OpenVMS DCL Dictionary kézikönyvben és a HELP-ben szerepelnek. DCL parancsok a VMS segédprogramokat meghívó parancsok is.
A parancsok csoportosítása:
-.rendszert vezérlő parancsok
-.rendszer információs parancsok
-.processz vezérlő parancsok
-.processz információs parancsok
-.eszközkezelő parancsok
-.fileműveletek
-.programkezelő parancsok
-.parancseljárásokban használatos parancsok
-.szimbólum és logikai név műveletek
10.1.Néhány gyakran használt DCL parancs
Ez a fejezet felsorolja a leggyakrabban használt parancs-csoportokat, és néhányról részletesebb leírást közöl a könnyebb megértés érdekében.
10.1.1.Filekezelő parancsok
1. DIRECTORY
Tartalomjegyzéket készít egy fileról vagy filecsoportról és azok tulajdonságairól.
Formája:
$ DIRECTORY [filespecifikáció [,...]]
Ha nincs filespecifikáció, akkor a default eszköz és directory összes fileját figyelembe veszi. Módosítók híján a file neve, típusa, verziója szerepel a tartalomjegyzékben; a módosítókkal további információkat kaphatunk a fileokról.
A filespecifikáció(k)ban a szokásos wildcard karakterek (* % ... -) használhatók.
A leggyakrabban használt parancsmódosítók:
./ACL
Kiírja a fileok ACL-jét is (ha van).
./BACKUP
A legutóbbi mentési (backup) dátuma alapján választja ki az input filet.
Csak a /BEFORE vagy a /SINCE módosítóval együtt használható.
./BEFORE[=idő]
Az adott időpont előtti fileokat választja ki az input fileok közül. Az idő abszolút vagy kombinált formájú lehet. Használható az időnél a BOOT, LOGIN, TODAY, TOMORROW, YESTERDAY is.
Ha a /BEFORE-t paraméter nélkül adjuk meg, akkor /BEFORE=TODAY az alapértelmezés.
A /BEFORE és a /SINCE módosító együtt is szerepelhet.
./BRIEF
Csak a filenevet, típust és a verziót írja ki.
./BY_OWNER[=uic]
A tulajdonosi UIC alapján választja ki a file(oka)t a megadott specifikáció(k)ból.
Ha a /BY_OWNER-t paraméter nélkül adjuk meg, akkor a processz aktuális UIC-a a default.
./CREATED
A létrehozásuk dátuma alapján választja ki a fileokat. Együtt kell használni a /BEFORE vagy a /SINCE módosítóval.
./DATE[=opció]
Kiírja az összes, a filehoz tartozó dátum mezőt vagy az utolsó mentés (backup), a létrehozás, az ISO9660 szerinti érvényesség, az utolsó módosítás, a lejárat idejét illetve az ISO9660 szerinti feljegyzési időt. Az opció ALL, BACKUP, CREATED, EFFECTIVE, EXPIRED, MODIFIED, RECORDING lehet.
Opció nélküli esetben a CREATED a default.
./EXCLUDE=(filespec[,...])
Kihagyja az output fileok közül a felsorolt fileokat. Ha egy file van, a () elhagyható.
A filespecifikáció(k)ban a wildcard karakterek (* % ... -) megengedettek.
./EXPIRED
Lejárati idő alapján választja ki a fileokat. Együtt kell használni a /BEFORE vagy a /SINCE módosítóval.
./FILE_ID
A file-id-t is kiírja a directory listába.
./FTP
Meghívja az FTP segédprogramot dir vagy ls parancs végrehajtására, ha a rendszerben van TCP/IP.
./FULL
A file összes jellemzőjét kiírja.
./GRAND_TOTAL
A fileokról és az egyes directorykról szóló információkat elhagyja, csak az utolsó összefoglaló-összesítő sort írja ki.
./[NO]HEADING
Meghatározza, hogy a directory fejléc megjelenjen-e a kiírás elején. Default: HEADING.
./MODIFIED
A módosításuk dátuma alapján választja ki a fileokat. Együtt kell használni a /BEFORE vagy a /SINCE módosítóval.
./OUTPUT [=filespecifikáció]
Meghatározza az output filet, ahova a directory lista kerül. Default: SYS$OUTPUT. Ha a filespecifikáció nem szerepel, akkor a default a DIRECTORY.LIS.
./OWNER
Kiírja a tulajdonos UIC-ot.
./PRINTER
A tartalomjegyzék filet DIRECTORY.LIS néven vagy az /OUTPUT-tal megadott néven elhelyezi a SYS$PRINT várakozási sorban.
./PROTECTION
Kiírja a védelmi kódot.
./SECURITY
Az összes védelmi információt kiírja a fileokról (ACL, tulajdonos UIC és UIC szerinti védelmi kód).
./SELECT=kulcsszó
A fileok a kulcsszóval meghatározott attribútumok alapján kerülnek a directory listába. Legfontosabb a méretük szerint válogató kulcsszó:
.SIZE=MAXIMUM=n,
.SIZE=MINIMUM=n,
.SIZE=(MAXIMUM=n, MINIMUM=m);
valamint az
./ACL
./NOACL.
Ez utóbbiak szerint akkor kerül a file az outputba, ha rendelkezik vagy nem rendelkezik ACL-lel.
./SINCE[=idő]
Azokat a fileokat választja ki az input fileok közül, amelyek meghatározott dátuma az adott időpont utáni. Az időpont abszolút vagy kombinált lehet.
Az időpont lehet BOOT, LOGIN, TODAY, TOMORROW vagy YESTERDAY is.
Ha a /SINCE-t paraméter nélkül adjuk meg, akkor /SINCE=TODAY az alapértelmezés.
./SIZE[=opció]
A file felhasznált vagy allokált méretét írja ki. Az opció lehet ALL (mind a felhasznált, mind az allokált méret), ALLOCATION vagy USED.
A default opció a USED.
./TOTAL
Csak a directory(k) nevét és összefoglaló sorukat írja ki, a filespecifikációkat nem.
./[NO]TRAILING
A kért egyéb információ mellett lista záró, összesítő sorait elhagyja vagy kiírja. Default: TRAILING.
./VERSIONS=n
A legmagasabb n verziót írja ki. Alapértelmezésben az összes verziót kiírja.
Példák:
$ DIRECTORY /SIZE=ALL /DATE
A default directory összes fileját kiírja a felhasznált és lefoglalt méretükkel és létrehozási dátumukkal együtt.
$ DIRECTORY /FULL /PRINTER PROGRAM.EXE;0
Directory DISK$TANF:[HALLGATO1]
PROGRAM.EXE;1 FileID: (3672,11,0)
Size: 390/390 Owner: [1010,1010]
Created: 12-AUG-2003 11:45:19.00
Revised: 14-AUG-2003 15:45:19.00 (34)
Expires: <None specified>
Backup: 28-AUG-2003 04:00:12.22
Effective: <None specified>
Recording: <None specified>
File organization: Sequential
Shelved state: Online
Caching attribute: Writethrough
File attributes: Allocation: 390, Extend: 0, Global buffer count: 0,
Version limit: 0, Backups disabled, Not shelvable
Record format: Fixed length 512 byte records
Record attributes: None
RMS attributes: None
Journaling enabled: None
File protection: System:RE, Owner:RE, Group:RE, World:RE
Access Cntrl List: None
Client attributes: None
Total of 1 file, 390/390 blocks.
A PROGRAM.EXE minden jellemzőjét A DIRECTORY.LIS ideiglenes fileba írja és a filet elküldi a SYS$PRINT várakozási sorba.
$ DIRECTORY /COLUMNS=1 /NOHEADER /NOTRAILING -
/OUTPUT=MAIL_FILES.LIS *.MAI
Az output minden sorában egyetlen filespecifikáció fog szerepelni.
$ DIRECTORY -
_$ /MODIFIED /SINCE=1-JUL-2003 /BEFORE=1-AUG-2003 -
_$ /SECURITY ORA*.DAT
A 2003. júliusában módosított, ORA-val kezdődő nevű adatfileok és védelmi információik jelennek meg az outputban.
2. CREATE
Egy vagy több szekvenciális filet hoz létre a lemezen; a rekordokat a parancsot követő inputból veszi. (Meg kell jegyezni, hogy a CREATE/DIRECTORY, CREATE/FDL parancsok másfajta fileokat is képesek létrehozni –lásd a 3. fejezetben.)
Formája:
$ CREATE filespecifikáció [,...]
A filespecifikációban nem lehet wildcard karakter.
A létrehozott filet CTRL/Z-vel kell lezárni.
Módosítók:
/LOG
Minden létrehozott filenak kiírja a nevét.
/OWNER_UIC=uic
Meghatározza a létrehozott file(ok) tulajdonosát.
/PROTECTION=(kód)
Meghatározza a létrehozott file(ok) védelmi kódját.
Például
$ CREATE SZAMOK.TXT
1 EGY
2 KETTO
3 HAROM
<CTRL/Z>
$
3. COPY
Egy vagy több létező input fileból egy output filet, vagy egy input file-csoportból egy output file-csoportot hoz létre.
Formája:
$ COPY input-file[,...] output-file
A wildcard karakterek mind az input mind az output specifikációban használhatók. Jelentésük eltérő: inputként vesszővel elválasztva több file is megadható, a specifikáció(k)ban tetszőleges wildcard karakterek szerepelhetnek (* % ... -), s ezeknél a wildcard karakterek az összes illeszkedő filet jelentik.
Ha az – egyetlen - output filespecifikációból hiányoznak mezők, a lemezre és a directoryra a processz defaultot veszi figyelembe a parancs, a specifikáció többi hiányzó részét az (első) input specifikációból veszi. Az output filespecifikáció teljes mezőjében álló csillaggal (*) jelezhetjük, hogy a COPY több output filet hozzon létre, és a csillag helyére a megfelelő input mező kerüljön.
A /NOCONCATENATE módosítóval vagy csak a csomópont, eszköz vagy directory név megadásával is több output filet hozhatunk létre.
Ha verziószám sem az input sem az output fileban nem szerepel, akkor a COPY a következők szerint alakítja ki az output verzióját: vagy az input file verziója, vagy eggyel nagyobb a már létező azonos nevű és típusú fileok legmagasabb verziójánál. Ha az outputban szerepel *, akkor az output file az input verzióját kapja., ha nincs * és verzió az outputban, akkor az inputénál eggyel nagyobb verziót. Ha explicit verziót írunk az outputba, akkor pedig azt. Ha már létezik az adott verzió, akkor nem jön létre az output; ha nem az lesz a legnagyobb, akkor a COPY figyelmeztető üzenetet küld.
A leggyakrabban használt parancsmódosítók:
./BACKUP
A legutóbbi mentési (backup) dátuma alapján választja ki az input filet.
Csak a /BEFORE vagy a /SINCE módosítóval együtt használható.
./BEFORE[=idő]
Az adott időpont előtti fileokat választja ki az input fileok közül. Az idő abszolút vagy kombinált formájú lehet. Használható az időnél a BOOT, LOGIN, TODAY, TOMORROW, YESTERDAY is.
Ha a /BEFORE-t paraméter nélkül adjuk meg, akkor /BEFORE=TODAY az alapértelmezés.
A /BEFORE és a /SINCE módosító együtt is szerepelhet.
./BY_OWNER[=uic]
A tulajdonosi UIC alapján választja ki az input file(oka)t a megadott specifikáció(k)ból.
Ha a /BY_OWNER-t paraméter nélkül adjuk meg, akkor a processz aktuális UIC-a a default.
./[NO]CONCATENATE
Meghatározza, hogy egyetlen output file jöjjön létre az input fileokból vagy minden input fileból egy output. Csak szekvenciális filekat lehet összefűzni.
Default: CONCATENATE
./CONFIRM
Minden egyes file másolása előtt megerősítést vár.
.Az igenlő válasz YES, TRUE, 1;
.A tagadó NO, FALSE, 0 vagy RETURN lehet.
.Ha a válasz ALL, akkor a további fileokra kérdés nélkül elvégzi,
.QUIT-re vagy CTRL/Z-re pedig befejezi a másolást.
./CREATED
A létrehozásuk dátuma alapján választja ki az input fileo(ka)t. Együtt kell használni a /BEFORE vagy a /SINCE módosítóval.
./EXCLUDE=(filespec[,...])
Kihagyja az output fileok közül a felsorolt fileokat. Ha egy file van, a () elhagyható.
A filespecifikáció(k)ban a wildcard karakterek (* % ... -) megengedettek.
./EXPIRED
Lejárati idő alapján választja ki a fileokat. Együtt kell használni a /BEFORE vagy a /SINCE módosítóval.
./FTP
Meghívja az FTP segédprogramot, és esetleg különböző operációs rendszerek különböző szerkezetű filejait is képes másolni, ha a rendszerben van TCP/IP.
./[NO]LOG
Kiírja a terminálra a másolt fileok nevét és méretét.
Default: NOLOG
./MODIFIED
A módosításuk dátuma alapján választja ki az input fileokat. Együtt kell használni a /BEFORE vagy a /SINCE módosítóval.
./PROTECTION=(védelmi kód)
Meghatározza az output file(ok) UIC szerinti védelmi kódját. (Lásd a 4.1. fejezetben.
Ha nem használjuk a módosítót, vagy nem adjuk meg mind a négy mezőt, akkor
.ha létezik az outputnak korábbi verziója, akkor annak védelmi kódját örökli,
.ha nem létezik az outputnak korábbi verziója, akkor a processz default védelmi kódja a meghatározó.
./SINCE[=idő]
Azokat a fileokat választja ki az input fileok közül, amelyek meghatározott dátuma az adott időpont utáni. Az időpont abszolút vagy kombinált lehet.
Az időpont lehet BOOT, LOGIN, TODAY, TOMORROW vagy YESTERDAY is.
Ha a /SINCE-t paraméter nélkül adjuk meg, akkor /SINCE=TODAY az alapértelmezés.
Példák:
$ COPY /LOG ADAT.DAT REGI
%COPY-S-COPIED, DUA2:[WORK]ADAT.DAT;1 copied to
DUA2:[WORK]REGI.DAT;1 (5 blocks)
%COPY-S-NEWFILES, 1 file created
$ COPY /EXCLUDE=*.TMP *.* MSA:*.*
$ COPY /LOG SZOVEG.TXT NL:
%COPY-S-COPIED DUA0:[USER]SZOVEG.TXT copied to NL:
(901 records)
Az első parancs egy REGI.DAT nevű filet hoz létre az ADAT.DAT tartalmával, a második a default directory legmagasabb verziójú filejait mágnesszalagra másolja, kivéve az ideiglenes fileokat. Az utolsó példa arra jó, hogy megállapítsuk egy szekvenciális file rekordjainak számát (az NL: a null eszköz).
$ COPY FOPR.FOR, SUBR.FOR *.ARC
A parancs létrehozza a FOPR.ARC, SUBR.ARC fileokat.
4. APPEND
Egy vagy több szekvenciális input filet fűz az output file végéhez.
Formája:
$ APPEND input-file [,input-file...] output-file
Mind az input, mind az output fileban szerepelhetnek wildcard (* % ... -) karakterek. Az input esetén az összes illeszkedő filet össze kell fűzni. Az output specifikáció egész mezője helyén álló csillag (ebben más wildcard nem is szerepelhet) azt jelzi, hogy az illető mező értéke az első vagy egyetlen input file megfelelő mezője lesz.
A leggyakrabban használt parancsmódosítók:
./BACKUP
A legutóbbi mentési (backup) dátuma alapján választja ki az input filet.
Csak a /BEFORE vagy a /SINCE módosítóval együtt használható.
./BEFORE[=idő]
Az adott időpont előtti fileokat választja ki az input fileok közül. Az idő abszolút vagy kombinált formájú lehet. Használható az időnél a BOOT, LOGIN, TODAY, TOMORROW, YESTERDAY is.
Ha a /BEFORE-t paraméter nélkül adjuk meg, akkor /BEFORE=TODAY az alapértelmezés.
A /BEFORE és a /SINCE módosító együtt is szerepelhet.
./BY_OWNER[=uic]
A tulajdonosi UIC alapján választja ki az input file(oka)t a megadott specifikáció(k)ból.
Ha a /BY_OWNER-t paraméter nélkül adjuk meg, akkor a processz aktuális UIC-a a default.
./CONFIRM
Minden egyes file másolása előtt megerősítést vár.
.Az igenlő válasz YES, TRUE, 1;
.A tagadó NO, FALSE, 0 vagy RETURN lehet.
.Ha a válasz ALL, akkor a további fileokra kérdés nélkül elvégzi,
.QUIT-re vagy CTRL/Z-re pedig befejezi a másolást.
./CREATED
A létrehozásuk dátuma alapján választja ki az input fileo(ka)t. Együtt kell használni a /BEFORE vagy a /SINCE módosítóval.
./EXCLUDE=(filespec[,...])
Kihagyja az output fileok közül a felsorolt fileokat. Ha egy file van, a () elhagyható.
A filespecifikáció(k)ban a wildcard karakterek (* % ... -) megengedettek.
./EXPIRED
Lejárati idő alapján választja ki a fileokat. Együtt kell használni a /BEFORE vagy a /SINCE módosítóval.
./[NO]LOG
Kiírja a terminálra a másolt fileok nevét és méretét.
Default: NOLOG
./MODIFIED
A módosításuk dátuma alapján választja ki az input fileokat. Együtt kell használni a /BEFORE vagy a /SINCE módosítóval.
./[NO]NEW_VERSION
Új filet hoz létre az output filespecifikáció alapján, ha még nincs olyan. Ha már létezik, akkor ahhoz fűzi.
Default: /NONEW_VERSION
./PROTECTION=(védelmi kód)
Meghatározza az output file UIC szerinti védelmi kódját. (Lásd a 4.1. fejezetben.)
Ha nem használjuk a módosítót, vagy nem adjuk meg mind a négy mezőt, akkor
.ha létezik az outputnak korábbi verziója, akkor annak védelmi kódját örökli,
.ha nem létezik az outputnak korábbi verziója, akkor a processz default védelmi kódja a meghatározó.
Csak a /NEW_VERSION módosítóval együtt lényeges.
./SINCE[=idő]
Azokat a fileokat választja ki az input fileok közül, amelyek meghatározott dátuma az adott időpont utáni. Az időpont abszolút vagy kombinált lehet.
Az időpont lehet BOOT, LOGIN, TODAY, TOMORROW vagy YESTERDAY is.
Ha a /SINCE-t paraméter nélkül adjuk meg, akkor /SINCE=TODAY az alapértelmezés.
Például:
$ APPEND /LOG /SINCE /NEW_VERSION *.TXT MAI_TERMES.*
%APPEND-S-APPENDED, WORK:[USER]0.TXT;3 appended to
WORK:[USER]MAI_TERMES.TXT;1 (69 records)
%APPEND-S-APPENDED, WORK:[USER]1.TXT;12 appended to
WORK:[USER]MAI_TERMES.TXT;1 (178 records)
Hozzáfűzi a MAI_TERMES.TXT filehoz a ma létrehozott, .TXT típusú fileokat. Mivel a MAI_TERMES.TXT file még nem létezik, ezért a parancs létrehozza.
5. TYPE
Egy vagy több file tartalmát írja az aktuális output eszközre.
Formája:
$ TYPE filespecifikáció [,...]
A default filetípus a .LIS; a wildcard karakterek (* % ... -) használata megengedett.
A TYPE parancs osztott eléréssel nyitja meg a fileokat: a TYPE végrehajtása közben más processz írásra és/vagy olvasásra is hozzájuk férhet.
A kiírást az alábbi vezérlő billentyűkkel szabályozhatjuk:
.A CTRL/C-vel megszakíthatjuk az aktuális file kiírását. Ha van még kiírandó file, akkor a következővel folytatódik.
.A CTRL/S felfüggeszti, a CTRL/Q tovább folytatja a kiírást. (Közben nem vész el adat.) A Hold Screen billentyű ugyanilyen hatású.
.A CTRL/O felfüggeszti, majd a következő CTRL/O-ra újra folytatja a kiírást, de a közben levő adat elvész (null eszközre megy). Nem szabad elfelejteni, hogy a terminál kiírás általában lassú művelet: egy több ezer soros file képernyőre írása perceket is igénybe vehet, míg CTRL/O lenyomásával a gép tényleges sebességével történik a (nem látható) listázás, ami általában nagyságrenddel gyorsabb.
Ha CTRL/O hatása alatt új file kezdődik, azt elkezdi írni a rendszer.
.A CTRL/Y megszakítja a parancs végrehajtását.
A leggyakrabban használt parancsmódosítók:
./BACKUP
A legutóbbi mentési (backup) dátuma alapján választja ki az input filet.
Csak a /BEFORE vagy a /SINCE módosítóval együtt használható.
./BEFORE[=idő]
Az adott időpont előtti fileokat választja ki az input fileok közül. Az idő abszolút vagy kombinált formájú lehet. Használható az időnél a BOOT, LOGIN, TODAY, TOMORROW, YESTERDAY is.
Ha a /BEFORE-t paraméter nélkül adjuk meg, akkor /BEFORE=TODAY az alapértelmezés.
A /BEFORE és a /SINCE módosító együtt is szerepelhet.
./BY_OWNER[=uic]
A tulajdonosi UIC alapján választja ki az input file(oka)t a megadott specifikáció(k)ból.
Ha a /BY_OWNER-t paraméter nélkül adjuk meg, akkor a processz aktuális UIC-a a default.
./CONFIRM
Minden egyes file másolása előtt megerősítést vár.
.Az igenlő válasz YES, TRUE, 1;
.A tagadó NO, FALSE, 0 vagy RETURN lehet.
.Ha a válasz ALL, akkor a további fileokra kérdés nélkül elvégzi,
.QUIT-re vagy CTRL/Z-re pedig befejezi a kiírást.
./CREATED
A létrehozásuk dátuma alapján választja ki az input fileo(ka)t. Együtt kell használni a /BEFORE vagy a /SINCE módosítóval.
./EXCLUDE=(filespec[,...])
Kihagyja az input fileok közül a felsoroltakat. Ha egy file van, a () elhagyható.
A filespecifikáció(k)ban a wildcard karakterek (* % ... -) megengedettek.
./EXPIRED
Lejárati idő alapján választja ki a fileokat. Együtt kell használni a /BEFORE vagy a /SINCE módosítóval.
./MODIFIED
A módosításuk dátuma alapján választja ki az input fileokat. Együtt kell használni a /BEFORE vagy a /SINCE módosítóval.
./OUTPUT[=filespecifikáció]
A kiírás outputját határozza meg. A default típus .LIS. A /PAGE módosítóval együtt nem használható.
Default: SYS$OUTPUT
./PAGE[=kulcsszó]
A listázás laponként történik. A kulcsszó:
.CLEAR_SCREEN – Minden lap előtt törli a képernyőt.
.SCROLL – Csúsztatja a képernyőt.
.SAVE[= n] – n lapot tárol egyidőben a rendszer, és ezekben kurzormozgató, kereső billentyűkkel minden irányba mozoghatunk. n=5 a default.
./SINCE[=idő]
Azokat a fileokat választja ki az input fileok közül, amelyek meghatározott dátuma az adott időpont utáni. Az időpont abszolút vagy kombinált lehet.
Az időpont lehet BOOT, LOGIN, TODAY, TOMORROW vagy YESTERDAY is.
Ha a /SINCE-t paraméter nélkül adjuk meg, akkor /SINCE=TODAY az alapértelmezés.
Például
$ TYPE /PAGE /SINCE=YESTERDAY *.C
Laponként megállva kiírja a terminálra az összes, tegnap óta készült C nyelvű filet.
6. DELETE
Egy vagy több filet töröl egy lemezről.
Formája:
$ DELETE filespecififkáció [,...]
A filespecifikációban mindig szerepelnie kell a verziónak. A wildcard karakterek (* % ... -) használata megengedett.
A leggyakrabban használt parancsmódosítók:
./BACKUP
A legutóbbi mentési (backup) dátuma alapján választja ki a törlendő file(oka)t.
Csak a /BEFORE vagy a /SINCE módosítóval együtt használható.
./BEFORE[=idő]
Az adott időpont előtti fileokat választja ki a specifikációban megadott fileok közül. Az idő abszolút vagy kombinált formájú lehet. Használható az időnél a BOOT, LOGIN, TODAY, TOMORROW, YESTERDAY is.
Ha a /BEFORE-t paraméter nélkül adjuk meg, akkor /BEFORE=TODAY az alapértelmezés.
A /BEFORE és a /SINCE módosító együtt is szerepelhet.
./BY_OWNER[=uic]
A tulajdonosi UIC alapján választja ki a törlendő file(oka)t a megadott specifikáció(k)ból.
Ha a /BY_OWNER-t paraméter nélkül adjuk meg, akkor a processz aktuális UIC-a a default.
./CONFIRM
Minden egyes file törlése előtt megerősítést vár.
.Az igenlő válasz YES, TRUE, 1;
.A tagadó NO, FALSE, 0 vagy RETURN lehet.
.Ha a válasz ALL, akkor a további fileokra kérdés nélkül elvégzi,
.QUIT-re vagy CTRL/Z-re pedig befejezi a törlést.
./CREATED
A létrehozásuk dátuma alapján választja ki a törlendő fileo(ka)t. Együtt kell használni a /BEFORE vagy a /SINCE módosítóval.
./ERASE
A DELETE önmagában csak a file(ok)hoz tartozó blokkok szabaddá tételét jelenti, tényleges azonnali felülírást csak az /ERASE módosítóval érhetünk el.
Default: /NOERASE, ha a filera, directoryra vagy a kötetre nincs más beállítva.
./EXCLUDE=(filespec[,...])
Kihagyja a törlendő fileok közül a felsorolt fileokat. Ha csak egy file van, a () elhagyható.
A filespecifikáció(k)ban a wildcard karakterek (* % ... -) megengedettek.
./EXPIRED
Lejárati idő alapján választja ki a fileokat. Együtt kell használni a /BEFORE vagy a /SINCE módosítóval.
./MODIFIED
A módosításuk dátuma alapján választja ki az input fileokat. Együtt kell használni a /BEFORE vagy a /SINCE módosítóval.
./SINCE[=idő]
Azokat a fileokat választja ki a törlendő fileok közül, amelyek meghatározott dátuma az adott időpont utáni. Az időpont abszolút vagy kombinált lehet.
Az időpont lehet BOOT, LOGIN, TODAY, TOMORROW vagy YESTERDAY is.
Ha a /SINCE-t paraméter nélkül adjuk meg, akkor /SINCE=TODAY az alapértelmezés.
Például
$ DELETE /CONFIRM *.JOU;*
DUA0:[USER]SZOVEG.JOU;2, delete [N]: Y
DUA0:[USER]SZOVEG.JOU;1, delete [N]: N
$
Ebben a példában a SZOVEG.JOU file korábbi verziójára van szükségünk.
$ DELETE [HALLGATO1]ALAP.DIR;1
Ilyen módon törölhetünk directoryt. Ha a directory tartalmaz filet, a DCL figyelmeztető üzenetet küld, és nem törli a directory filet.
7. PURGE
Az adott file(ok) korábbi verzióit törli, meghagyva a legmagasabb verziót vagy a legmagasabb verziókat.
Formája:
$ PURGE [filespecifikáció] [,...]
Ha nem adunk meg filespecifikációt, akkor az aktuális default directory összes filejára vonatkozik a parancs. Wildcard karakterek (* % ... -) használata megengedett; verzió viszont nem szerepelhet a filespecifikáció(k)ban.
A leggyakrabban használt parancsmódosítók:
./BACKUP
A legutóbbi mentési (backup) dátuma alapján választja ki a törlendő file(oka)t.
Csak a /BEFORE vagy a /SINCE módosítóval együtt használható.
./BEFORE[=idő]
Az adott időpont előtti fileokat választja ki a specifikációban megadott fileok közül. Az idő abszolút vagy kombinált formájú lehet. Használható az időnél a BOOT, LOGIN, TODAY, TOMORROW, YESTERDAY is.
Ha a /BEFORE-t paraméter nélkül adjuk meg, akkor /BEFORE=TODAY az alapértelmezés.
A /BEFORE és a /SINCE módosító együtt is szerepelhet.
./BY_OWNER[=uic]
A tulajdonosi UIC alapján választja ki a törlendő file(oka)t a megadott specifikáció(k)ból.
Ha a /BY_OWNER-t paraméter nélkül adjuk meg, akkor a processz aktuális UIC-a a default.
./CONFIRM
Minden egyes file törlése előtt megerősítést vár.
.Az igenlő válasz YES, TRUE, 1;
.A tagadó NO, FALSE, 0 vagy RETURN lehet.
.Ha a válasz ALL, akkor a további fileokra kérdés nélkül elvégzi,
.QUIT-re vagy CTRL/Z-re pedig befejezi a törlést.
./CREATED
A létrehozásuk dátuma alapján választja ki a törlendő fileo(ka)t. Együtt kell használni a /BEFORE vagy a /SINCE módosítóval.
./ERASE
A PURGE önmagában csak a file(ok)hoz tartozó blokkok szabaddá tételét jelenti, tényleges azonnali felülírást csak az /ERASE módosítóval érhetünk el.
Default: /NOERASE, ha a filera, directoryra vagy a kötetre nincs más beállítva.
./EXCLUDE=(filespec[,...])
Kihagyja a törlendő fileok közül a felsorolt fileokat. Ha csak egy file van, a () elhagyható.
A filespecifikáció(k)ban a wildcard karakterek (* % ... -) megengedettek.
./EXPIRED
Lejárati idő alapján választja ki a fileokat. Együtt kell használni a /BEFORE vagy a /SINCE módosítóval.
./KEEP=n
Meghatározza, hogy hány verzió maradjon meg a file(ok)ból – mindig a legmagasabb verziók maradnak.
Default: n=1.
./MODIFIED
A módosításuk dátuma alapján választja ki az input fileokat. Együtt kell használni a /BEFORE vagy a /SINCE módosítóval.
./SINCE[=idő]
Azokat a fileokat választja ki a törlendő fileok közül, amelyek meghatározott dátuma az adott időpont utáni. Az időpont abszolút vagy kombinált lehet.
Az időpont lehet BOOT, LOGIN, TODAY, TOMORROW vagy YESTERDAY is.
Ha a /SINCE-t paraméter nélkül adjuk meg, akkor /SINCE=TODAY az alapértelmezés.
Például
$ PURGE /KEEP=2 /SINCE=TODAY /LOG [...]
Az aznap a default directoryban és az alatta lévő aldirectorykban létrehozott fileoknak csak az utolsó két verzióját tartja meg.
10.1.2.File tartalmával foglalkozó parancsok
1. DIFFERENCES
Két, lemezen levő file tartalmát rekordonként összehasonlítja, és a különbségekről listát készít.
Formája:
$ DIFFERENCES input1-filespecifikáció [input2-filespec.]
A két filet vagy az egyedül megadott file és az ő verziója alatt létező legnagyobb verziójú filet hasonlítja össze. Wildcard karakter nem használható a filespecifikációkban.
Az összehasonlítás történhet karakterről karakterre, vagy elhagyhatunk bizonyos részeket a /COMMENT_DELIMITERS és/vagy az /IGNORE módosítóval. A program exit státusza jelzi a hasonlítás eredményét:
.SUCCESS - A fileok azonosak.
.INFORMATION - A fileok különbözőek.
.WARNING - Több különbség volt, mint a felhasználó által definiált maximum.
.ERROR - Nincs elég virtuális memória a teljes hasonlításhoz.
A leggyakrabban használt parancsmódosítók:
./COMMENT_DELIMITER[=(határoló[,...])]
Meghatározza, hogy mit tekintsen megjegyzés határolónak a program a hasonlítás során.
Maximum 32 határoló adható meg: Felsorolható maga a karakter, vagy COLON (:), COMMA (,), EXCLAMATION (!), FORM_FEED (lapdobás), LEFT ([), RIGHT (]),SEMI_COLON (;) SLASH (/), SPACE (szóköz), TAB (tabulátor) lehet.
A nem alfanumerikus karaktert idézőjelek ("") közé kell zárni.
Ha használjuk ezt a módosítót, akkor a rendszer az /IGNORE=COMMENTS módosítót automatikusan feltételezi.
A default függ a file típusától (a különböző programnyelvek esetén különböző a megjegyzés formája).
./IGNORE=(opció [,...])
Segítségével megadhatjuk, hogy mely karakterek, stringek vagy rekordok ne vegyenek részt a hasonlításban. Az opció által meghatározott elhagyható rész lehet:
.BLANK_LINES - üres sor(ok) az adatsorok között;
.COMMENTS - a megjegyzést határoló karakter utáni sorrész;
.FORM_FEEDS - lapdobás karakter;
.HEADER[=n] - minden lap első n rekordja (lapdobás karakter utáni rekordok);
.TRAILING_SPACES - a rekord végi szóköz és/vagy tabulátor karakterek;
.SPACING - a több szóközből és/vagy tabulátorból álló sorozatokat egyetlen szóköznek tekinti.
./MATCH=n
Meghatározza, hogy hány sor egyezése esetén fogadja el egy különbség után illeszkedőnek a fileok folytatását.
Default: n=3.
./MAXIMUM_DIFFERENCES=n
Meghatározza, hogy n különbség után hagyja abba a hasonlítást.
./MERGED[=n]
Meghatározza, hogy az outputban a nem illeszkedő rekordok után hány egyező szerepeljen.
Default: n=1.
./[NO]NUMBER
Az outputban szerepel a rekordok sorszáma.
Default: /NUMBER
./OUTPUT[=filespec.]
A különbségekről szóló riport a meghatározott fileba kerül (nem a SYS$OUTPUT-ra).
A default filespecifikáció: input1-név.DIF
./PARALLEL[=n]
Megadásakor az összehasonlított fileok különböző rekordjai a képernyő vagy az output file két oldalán jelennek meg. A különböző rekordok után n azonos rekordot ír ki.
Default: n=0.
./SLP
A DIFFERENCES létrehoz egy SLP editornak szóló parancsfilet, amely az első fileból a második filelal azonosat hoz létre.
Példák:
$ DIFFERENCES ELSO_PROGRAM.FOR
Az ELSO_PROGRAM.FOR program két utolsó verzióját hasonlítja össze.
$ DIFFERENCES /OUTPUT /IGNORE=(HEADER=2, SPACING) -
_$ PROBA.LIS PROBA1.LIS
Az összehasonlítás nem veszi figyelembe a lapdobást követő két sort, a szóköz- és tabulátor sorozatokat pedig egyetlen szóköznek tekinti. A különbség leírása a PROBA.DIF fileba kerül.
2. DUMP
Egy file vagy kötet tartalmát jeleníti meg ASCII, decimális, hexadecimális vagy oktális formában.
Formája:
$ DUMP filespecifikáció [,...]
Ha a filespecifikáció egy FOREIGN-ként mountolt lemez vagy szalag illetve más eszköz, akkor a dump kötet (logikai) blokkonként történik (lemeznél 512 byte); egyébként a file(ok) virtuális blokkjai vagy rekordjai szerint. A dump default formája: a tartalom hexadecimálisan és ASCII kódban párhuzamosan jelenik meg.
A numerikus rész jobbról balra olvasandó. Az ASCII kódú részben a nem nyomtatható karakterek helyén pont áll.
3. SEARCH
A parancsban szereplő string(ek)et keresi a megadott file(ok)ban és kiírja a megtalált stringeket tartalmazó file(oka)t és a találato(ka)t tartalmazó környezetet.
Formája:
$ SEARCH filespecifikáció. [,...] string [,...]
A filespecifikáció(k)ban a wildcard karakterek megengedettek. Ha a string(ek) nem alfanumerikus karaktereket, szóközt vagy kisbetűket is tartalmaz(nak), akkor idézőjelek (") közé kell zárni (őket).
A leggyakrabban használt parancsmódosítók:
./BACKUP
A legutóbbi mentési (backup) dátuma alapján választja ki az input file(oka)t.
Csak a /BEFORE vagy a /SINCE módosítóval együtt használható.
./BEFORE[=idő]
Az adott időpont előtti fileokat választja ki a specifikációban megadott fileok közül. Az idő abszolút vagy kombinált formájú lehet. Használható az időnél a BOOT, LOGIN, TODAY, TOMORROW, YESTERDAY is.
Ha a /BEFORE-t paraméter nélkül adjuk meg, akkor /BEFORE=TODAY az alapértelmezés.
A /BEFORE és a /SINCE módosító együtt is szerepelhet.
./BY_OWNER[=uic]
A tulajdonosi UIC alapján választja ki az input file(oka)t a megadott specifikáció(k)ból.
Ha a /BY_OWNER-t paraméter nélkül adjuk meg, akkor a processz aktuális UIC-a a default.
./CONFIRM
Minden egyes file vizsgálata előtt megerősítést vár.
.Az igenlő válasz YES, TRUE, 1;
.A tagadó NO, FALSE, 0 vagy RETURN lehet.
.Ha a válasz ALL, akkor a további fileokra kérdés nélkül elvégzi,
.QUIT-re vagy CTRL/Z-re pedig befejezi a stringek keresését.
./CREATED
A létrehozásuk dátuma alapján választja ki a vizsgálandó fileo(ka)t. Együtt kell használni a /BEFORE vagy a /SINCE módosítóval.
./[NO]EXACT
Meghatározza, hogy a kis- és nagybetű azonosnak számítson-e a keresés során.
Default: /NOEXACT (A SEARCH nem tesz különbséget a kis- és nagybetű között.)
./EXCLUDE=(filespec[,...])
Kihagyja a vizsgálandó fileok közül a felsorolt fileokat. Ha csak egy file van, a () elhagyható.
A filespecifikáció(k)ban a wildcard karakterek (* % ... -) megengedettek.
./EXPIRED
Lejárati idő alapján választja ki a fileokat. Együtt kell használni a /BEFORE vagy a /SINCE módosítóval.
./[NO]HEADING
Több file esetén az outputban 30 darab * és a file neve is megjelenik az első megtalált string előtt. Ha /NOHEADING-t használunk, akkor nem lesznek elválasztva a találatok.
Default: /HEADING
./HIGHLIGHT[=opció]
Meghatározza, hogy a megtalált string milyen módon legyen kiemelve a szövegkörnyezetből – amennyiben a terminál (vagy emuláció) képes a kiemelést produkálni.
Az opció lehet:
.BLINK - A megtalált string villog.
.BOLD - A megtalált string karakterei erősebb fényűek.
.REVERSE - A megtalált string inverzben van.
.UNDERLINE - A megtalált string alá van húzva.
.HARDCOPY=opció - A megtalált string a hardcopy nyomtatónak megfelelően lesz kiemelve. Az opció:
.OVERSTRIKE - duplán nyomtatott
.UNDERLINE - aláhúzott
lesz a megtalált string.
Default: /NOHIGHLIGHT
./LOG
Minden végigolvasott fileról üzenetet küld a SYS$OUTPUT-ra: A file nevét, az összes rekord és az illeszkedő rekordok számát írja ki.
Default: /NOLOG
./MATCH=opció
Meghatározza, hogy a megadott stringek hogyan illeszkedjenek.
Az opció lehet:
.AND - Csak az összes stringet tartalmazó sor felel meg;
.EQV – A sor akkor megfelelő, ha vagy az összes stringet tartalmazza, vagy egyiket sem.
.NOR - Csak az egyik stringet sem tartalmazó sor felel meg;
.NAND - Csak az a sor felel meg, amelyik nem tartalmazza az összes stringet;
.OR - Az a sor felel meg, amelyik legalább egy stringet tartalmaz a felsoroltakból.
.XOR - A sor akkor felel meg, ha valamennyi megtalálható a keresett stringekből, de nem felel meg, ha egyik sem vagy mindegyik benne van.
Default: /MATCH=OR.
./MODIFIED
A módosításuk dátuma alapján választja ki az input fileokat. Együtt kell használni a /BEFORE vagy a /SINCE módosítóval.
./NUMBERS
A rekordok sorszámmal vagy anélkül jelennek meg.
Default: /NONUMBERS
./OUTPUT [=filespecifikáció]
A különbségekről szóló tudósítások a meghatározott fileba kerülnek, és nem a SYS$OUTPUT-ra.
/NOOUTPUT esetén a megtalált sorok nem íródnak ki.
./[NO]REMAINING
Az outputba kerül az első megtalált rekordtól kezdve a file további része.
Default: /NOREMAINING
./SINCE[=idő]
Azokat a fileokat választja ki a vizsgálandók közül, amelyek meghatározott dátuma az adott időpont utáni. Az időpont abszolút vagy kombinált lehet.
Az időpont lehet BOOT, LOGIN, TODAY, TOMORROW vagy YESTERDAY is.
Ha a /SINCE-t paraméter nélkül adjuk meg, akkor /SINCE=TODAY az alapértelmezés.
./STATISTICS
Statisztika jelenik meg az output végén, többek között tartalmazva a megvizsgált fileok, rekordok és karakterek valamint a találatok számát.
Default: /NOSTATISTICS
./[NO]WINDOW[=(n1[,n2])]
Szabályozza, hogy a megtalált rekord milyen környezete jelenjen meg az outputban. Ha csak a /WINDOW-t adjuk meg, akkor 2 sor a találat előtt és 2 utána jelenik meg a fileból.
Ha egy számot adunk meg (n1), akkor a talált rekord az n1 sor közepén lesz. Ha két számot adunk meg paraméterként, akkor a talált rekord előtt n1 darab sor, utána n2 sor jelenik meg.
A /WINDOW=0 esetén csak a stringet tartalmazó file(ok) neve jelenik meg az outputon, a string(ek) nem.
Default: /NOWINDOW azaz csak a találatok sora jelenik meg.
Például
$ SEARCH *.COM "@ALFA"
Megkeresi, hogy mely parancsfile(ok) indítja(k) el az ALFA.COM-ot.
$ SEARCH /MATCH=OR /WINDOW=0 *.FOR "%REF", "%DESCR"
A parancs megkeresi azokat a Fortran programokat, amelyekben vagy referenciával vagy deszkriptorral adunk át paramétert egy szubrutinnak. Csak a fileok nevét írja ki, a tartalmukat nem.
$ SEARCH/REMAINING/OUTPUT=2.TXT SZOVEG.TXT "2. Felvonás"
A parancs a 2. Felvonás sortól kezdődően a 2.TXT fileba másolja a SZOVEG.TXT tartalmát.
$ SEARCH/NOOUTPUT/STATISTICS SZOVEG.TXT ""
Ez a parancs csak statisztikát ír ki a fileról, például a benne levő sorok és karakterek számát. Az üres string ("") mindenre illeszkedik.
10.2.A könyvtári függvények
A könyvtári függvények (lexical function) a DCL beépített eljárásai. A programozási nyelvek függvényeihez hasonlóan kifejezésekben szerepelhetnek, az aktuális processzről vagy a rendszer más elemeiről szóló információt tartalmazó értéket hoznak létre az argumentumokból és egyéb rendszer adatokból.. A parancsokban szereplő függvények értékét a DCL parancsértelmező határozza meg, és behelyettesíti a parancsban szereplő kifejezésbe annak végrehajtásakor. A DCL-ben nincs lehetőség saját függvények definiálására.
A könyvtári függvényeket lexikális függvényeknek is hívjuk, mert a parancsértelmező (DCL) a parancsértelmezés lexikális menetében (lexical processing) számítja ki a függvényértéket.
A könyvtári függvények általános formája:
F$függvénynév([arg,...])
A függvénynév mindaddig rövidíthető, amíg egyedi marad (ugyanúgy, ahogy a DCL parancsok).
Az argumentumok tetszőleges, az argumentum típusának megfelelő értékű kifejezések lehetnek; vesszővel (,) kell elválasztani őket. A vesszőt akkor is ki kell tenni, ha közbeeső, nem kötelező argumentumot elhagyunk.
A () akkor is kötelező, ha nincs argumentum.
Ha az argumentum karakter konstans, azt mindig idézőjelek (") közé kell zárni; enélkül ugyanis szimbólumnak tekinti az argumentumot a DCL.
A fejezet nem tartalmazza az összes függvény teljes leírását, csak néhány gyakrabban használtét. A teljes leírás az OpenVMS DCL Dictionary kézikönyvben a függvény nevénél vagy a Lexical Functions címszó alatt található meg, illetve a HELP LEXICAL paranccsal kérhetünk online segítséget.
1.F$CVTIME ([input-idő], [output-idő-forma], [output-mező])
Abszolút vagy összetett idő stringből (input-idő) "yyyy-mm-dd hh:mm:ss.cc" formájú stringet konvertál (a hónap itt számmal van megadva) és a teljes dátum vagy annak egy része lesz a függvényérték. A második paraméter az output formáját határozhatja meg (ABSULOTE, COMPARISON (default), DELTA), az output-mezővel pedig megadhatjuk, hogy a dátum melyik mezője szerepeljen az outputban (DATE, DATETIME (default), DAY, DAYSOFYEAR, HOUR, HUNDREDTH, MINUTE, MONTH, SECOND, TIME, WEEKDAY, YEAR).
Ha az input-időt elhagyjuk – vagy üres stringet ("") írunk -, akkor a rendszer aktuális időpontja lesz az input.
Példák:
$ AKTIDO = F$TIME()
$ SHOW SYMBOL AKTIDO
AKTIDO = "15-AUG-2003 13:01:08.12"
$ KONVIDO = F$CVTIME(AKTIDO)
$ SHOW SYMBOL KONVIDO
KONVIDO = "2003-08-15 13:01:08.12"
$ WRITE SYS$OUTPUT F$CVTIME(AKTIDO,,"WEEKDAY")
Friday
Az AKTIDO szimbólumot a rendszer aktuális idejével tölti fel az F$TIME() függvény, ezt konvertáljuk év-hónap-nap formába, majd kiíratjuk a hét napjának nevét is.
$ MASNAP = F$CVTIME("TOMORROW",,"DATE")
A MASNAP szimbólumba a következő nap dátuma kerül (nem kell szökőévet vagy hónaphosszt számolgatni.)
2.F$EDIT(string, szerkesztőlista)
A függvény a stringet a szerkesztőlista alapján formázva adja vissza. A szerkesztőlistában az alábbi kulcsszavak szerepelhetnek:
.COLLAPSE
Minden szóközt és tabulátort eltávolít a stringből.
.COMPRESS
Az egymás mellett lévő több szóközt vagy tabulátort egy szóközzel helyettesíti.
.LOWERCASE
Kisbetűssé konvertálja a stringet.
.TRIM
A sor elején és végén levő szóközöket és tabulátorokat eltávolítja a stringből.
.UNCOMMENT
A megjegyzéseket eltávolítja a stringből. (A felkiáltójellel kezdődő részt tekinti megjegyzésnek – akár a DCL.)
.UPCASE
Nagybetűssé konvertálja a stringet.
Például
$ MINTA = " NAGYBETUK "
$ KONV_MINTA = F$EDIT(MINTA,"COMPRESS,LOWERCASE")
$ SHOW SYMBOL KONV_MINTA
KONV_MINTA = " nagybetuk "
3.F$ELEMENT(elemsorszám, határoló, string)
A meghatározott határolóval elválasztott, adott elemsorszámú elemet kiemeli a stringből, s az lesz a függvény értéke. Az elemsorszám 0-val kezdődik. Az elemsorszámot meghatározó kifejezés értéke nem lehet negatív (hibaüzenetet okoz). Az elemek számánál nagyobb elemsorszám esetén a függvény értéke a határoló karakter lesz.
Például
$ SZAMNEVEK=="NULLA,EGY,KETTŐ,HÁROM,NÉGY,ÖT,HAT,HÉT,"+ -
"NYOLC,KILENC"
$ WRITE SYS$OUTPUT F$ELEMENT(3,",",SZAMNEVEK)
HÁROM
A SZAMNEVEK szimbólum segítségével a számjegyekhez azok nevét rendelhetjük hozzá. (Az első sor arra is példa, hogy hogyan kell az egy sorba nem férő string értékadást helyesen írni.)
Amennyiben egy szöveget szavak szerint kell feldolgozni, különösen hasznos az F$ELEMENT() és az F$EDIT() kombinációja:
$ STR = " Hány szó is van itt?"
$ WRITE SYS$OUTPUT F$ELEMENT(0," ", STR)
$ STR = F$EDIT(STR,"TRIM,COMPRESS")
$ WRITE SYS$OUTPUT F$ELEMENT(0," ", STR)
Hány
4.F$ENVIRONMENT (elem)
A DCL parancs-környezetnek az argumentumban meghatározott jellemzőjéről ad információt. Az elem értéke többek között lehet:
.DEFAULT – A processz default eszköze és directoryja.
.INTERACTIVE – A függvény értéke TRUE, ha a processz interaktív.
.PROCEDURE – Ha parancsfile hajtódik végre, akkor annak a specifikációja, ha nem, akkor a terminál neve.
.PROTECTION – A processzben érvényes default file védelem.
Például
$ DEF_MENTES= F$ENVIRONMENT("DEFAULT")
$ SET DEFAULT SYS$MANAGER
.
.
.
$ SET DEFAULT 'DEF_MENTES'
Az első parancs a DEF_MENTES szimbólumba menti a default eszközt és directoryt, majd az utolsó parancs visszaállítja az eredeti defaultot. (Ez a célszerű eljárás, ha egy parancsfileban módosítjuk a default helyet.)
5.F$FAO (vezérlő-string [,arg1,arg2,...,arg15])
Meghívja a $FAO (Formatted ASCII Output) rendszer rutint, amely a meghatározott vezérlő string alapján formázott ASCII outputot állít elő. A vezérlő string tartalmazza a kiírandó szövegnek azt a részét, amelyet nem kívánunk formázni és a FAO direktívá(ka)t is. A FAO direktívák inputja az arg1, arg2, ...,arg15 argumentum lesz.
A FAO direktíva az alábbi formájú lehet:
.!DD Egyetlen direktíva.
.!n(DD) A direktíva n-szer ismételve.
.!hDD A direktíva outputja h hosszúságú lesz.
.!n(hDD) A direktíva n-szer ismétlődik és outputja h hosszúságú mezőkből áll.
A leggyakrabban használt direktívák:
.!AS Egy karakter stringet változás nélkül kiír az outputba.
.!OL Egy integert oktális számmá konvertál.
.!XL Egy integert hexadecimális számmá konvertál.
.!ZL Egy integert decimális számmá konvertál.
.!/ Beszúr a szövegbe egy kocsi-vissza soremelés karakterpárt. (Nem tartozik hozzá listaelem.)
.!^ Beszúr a szövegbe egy lapdobás karaktert. (Nem tartozik hozzá listaelem.)
.!n*c A c karaktert n példányban beszúrja a szövegbe.
.!%T Az aktuális időt beírja az outputba; szükséges hozzá egy 0 értékű argumentum.
.!%D Az aktuális dátumot és időt beírja az outputba; szükséges hozzá egy 0 értékű argumentum.
.!- A legutóbbi argumentumot újra felhasználja.
.!+ A következő argumentumot átlépi.
Például
$ MONDAT = F$FAO("A karakterek száma !6ZL", HOSSZ)
$ SHOW SYMBOL MONDAT
MONDAT = "A karakterek száma 12345"
A HOSSZ szimbólum értéke 6 karakter hosszan lesz a szövegbe illesztve.
$ WRITE NAPLO F$FAO("A processz indulási ideje: !%T", 0)
A NAPLO logikai névvel megnyitott fileba az aktuális időpontot írjuk be.
6.F$FILE_ATTRIBUTES (filespecifikáció, információtípus)
A fileról a típussal meghatározott információt adja vissza a függvény értéke a típustól függően lehet integer, string vagy logikai.
A gyakran kérdezett információk:
.ALQ A lefoglalt blokkok száma
.BDT Backup dátum/idő
.BLS Blokk méret
.CDT Létrehozás dátuma/ideje
.CTG Igaz, ha folytonos (TRUE/FALSE)
.EOF Felhasznált blokkok száma (fileméret)
.FID File ID (string)
.NOK Kulcsok száma
.ORG File szervezettség (SEQ/REL/IDX)
.RFM Rekord formátum (VAR/FIX/VFC/UDF/STM/STMLF/STMCR)
.UIC Tulajdonos UIC string
Például:
$ IF F$FILE_ATTRIBUTES("ADAT.DAT","ORG") .EQS. "IDX" THEN -
WRITE SYS$OUTPUT F$ATTRIBUTES("ADAT.DAT","NOK")
Amennyiben az ADAT.DAT indexelt file, akkor kiíratjuk a kulcsok számát.
$ IF F$FILE_ATTRIBUTES("HIBANAPLO.LIS","EOF") .NES. 0 -
THEN -
MAIL HIBANAPLO.LIS RENDSZERGAZDA
Ha a HIBANAPLO.LIS nem üres, akkor elküldjük a RENDSZERGAZDA felhasználónak.
7.F$GETJPI (processz-id, attribútum)
Meghívja a $GETJPI rendszer rutint, hogy információt adjon a megadott processzről. A processz összes, a rendszerben őrzött attribútuma lekérdezhető. (A függvény értéke a típustól függően lehet integer, string vagy logikai.)
Ha az aktuális processzről kérünk információt, akkor a processz-id helyett a null-stringet ("") is írhatjuk – az argumentum mindenképpen kötelező. Más processzről csak akkor kaphatunk információt, ha megfelelő privilégiummal rendelkezünk (GROUP, WORLD).
A leggyakrabban használt attribútumok:
.AUTHPRIV A processzben megadható privilégiumok.
.CPULIM CPU idő kvóta.
.CPUTIM A processz által felhasznált CPU idő századmásodpercekben megadva.
.CURPRIV A processz aktuális privilégiumai.
.LOGINTIM A processz létrejöttének időpontja.
.MODE A processz típusa
(BATCH/INTERACTIVE/NETWORK/OTHER)
.PRI A processz aktuális prioritása.
.PROCPRIV A processz default privilégiumai.
.TERMINAL A bejelentkezési terminál neve.
.UIC A processz UIC-a.
.USERNAME A processz tulajdonosának a neve.
Például:
$ FELHASZNALO_NEV = F$GETJPI("","USERNAME")
A FELHASZNALO_NEV értéke a saját processzünkhöz tartozó usernév lesz.
8.F$LENGTH(string)
A string hossza lesz a függvény értéke.
Például
$ READ SYS$COMMAND /PROMPT="Kérek néhány karaktert"
$ WRITE SYS$OUTPUT "A begépelt karakterek száma:", -
_$ F$LENGTH(STRING)
A lexikális függvény közvetlenül is szerepelhet a WRITE paraméterei között, nem kell értékül adni egy szimbólumnak.
9.F$LOCATE (részstring, string)
Megállapítja, hogy a részstring hol helyezkedik el a stringben. A számozás 0-val kezdődik. Ha a részstring nincs a stringben, a függvényérték a string hossza lesz.
Például
$ CIM_ELEJE =F$LOCATE("Budapest", RECORD)
$ RECORD[CIM_ELEJE,8] := "Fehérvár"
A két parancs a RECORD szimbólum értékében a Budapest részstringet Fehérvár-ra módosítja.
10.F$PARSE(filespecifikáció [,default-spec.][,kapcsolt-spec.] [,mező] [,elemzés-típus])
Meghívja a $PARSE RMS rutint egy filespecifikáció elemzésére és a kiterjesztett filespecifikáció vagy a filespecifikáció meghatározott mezője lesz a függvény értéke.
A függvény a default-spec. stringjéből kiegészíti a filespecifikációt a hiányzó mezőkkel; az itt sem szereplőket pedig a kapcsolt-spec.-ből veszi – ez a kiterjesztett specifikáció.
A mező NODE, DEVICE, DIRECTORY, NAME, TYPE vagy VERSION értékű, az elemzés típus NO_CONCEAL vagy SYNTAX_ONLY lehet.
Ha a kapott filespecifikációban szereplő eszköz vagy directory nem létezik, vagy más hiba történik az elemzés során, úgy a függvényérték az üres string, ha csak a SYNTAX_ONLY paraméter nem szerepel. A NO_CONCEAL hatására a "CONCEALED" attribútumú logikai név helyett is annak fizikai megfelelője jelenik meg a függvényértékben.
A dokumentáció javasolja, hogy a filespecifikáció részeinek elérése illetve megváltoztatása csak és kizárólag az F$PARSE() függvényen keresztül történjen; ne írjon mindenki saját specifikáció-elemzőt az F$ELEMENT() segítségével.
Például
$ READ SYS$COMMAND /PROMPT="Kérem a filespecifikációt"
$ FILESPEC = F$PARSE(FILESPEC,"MUNKA:.DAT;0")
A fenti példában a FILESPEC értéke "default" mezőkkel egészül ki: Ha nem szerepel eszköznév az inputban, akkor az a MUNKA lesz; ha a filetípus hiányzik, akkor DAT kerül a helyére, a verziót pedig 0-val pótolja az F$PARSE.
$ IF F$PARSE(F$DIRECTORY()) .NES. "" THEN -
SET PROMPT = 'F$PARSE(F$DIRECTORY(),,,"DIRECTORY")'
A processz promptja a default directory neve lesz, ha a directory létezik.
11.F$PRIVILEGE("privilégium [,privilégium...]")
Értéke "TRUE" vagy "FALSE", aszerint, hogy az aktuális processz rendelkezik-e az argumentumként megadott privilégiumok mindegyikével. (A privilégiumokat lásd a 4.3. fejezetben).
Például
$ IF F$PRIVILEGE("OPER") THEN -
_$ REPLY /ALL "Lehet dolgozni"
A REPLY parancsot csak OPER privilégium birtokában lehet végrehajtani.
12.F$SEARCH (filespecifikáció [,stream-id])
Meghívja a $SEARCH RMS rutint hogy megkeresse a filet és visszaadja a teljes filespecifikációt vagy a nulla stringet, ha nem találja.
A filespecifikációban bármely wildcard jel szerepelhet. A függvény első hívásakor az első olyan filespecifikáció lesz a függvényérték, amely illeszkedik az első argumentumhoz. A második argumentumra (stream-id) akkor van szükség, ha egyidőben több keresést is folytatunk, és nem akarjuk, hogy az egyik keresés ott folytassa, ahol a másik abbahagyta. (Külön mutatóval rendelkezzen mindegyik.)
Például
$ MODOSIT:
$ PROGRAM = F$SEARCH("RAJZ*.FOR")
$ IF PROGRAM .EQS. "" THEN EXIT
$ EDIT /SUM 'PROGRAM' /UPDATE=MODFILE.UPD
$ GOTO MODOSIT
Ez a parancs eljárás az összes olyan FORTRAN programot módosítja, amelynek neve RAJZ-zal kezdődik. A ciklus addig folytatódik, amíg van megfelelő file.
13.F$SETPRV ("privilégium [,privilégium...]")
Meghívja a $SETPRV rendszer rutint, hogy beállítsa vagy letiltsa a megadott privilégiumo(ka)t. A függvényérték a beállítás előtti állapotot mutatja az argumentumban levő privilégium(ok)ra. (A privilégium tiltását/hiányát a NOprivilégium kifejezés jelenti).
Például
$ NEED_PRIV = "WORLD,LOG_IO,PHY_IO"
$ SAV_PRIV = F$SETPRV(NEED_PRIV)
$ IF .NOT. F$PRIVILEGE(NEED_PRIV)
$ THEN
$ WRITE SYS$OUTPUT "Nincs elegendő privilégium"
$ GOTO VEGE
$ ENDIF
- - -
$ VEGE:
$ SAV_PRIV = F$SETPRV(SAV_PRIV)
A fenti parancssorok beállítják a WORLD, LOG_IO és PHY_IO privilégiumokat, ha van joga ehhez a processznek, különben hibaüzenettel befejeződik az eljárás. Ugyanakkor a SAV_PRIV szimbólum megőrzi a privilégiumok korábbi beállítását a processzben. Az utolsó parancs visszaállítja az eredeti állapotot. (Ez a korrekt eljárás, ha egy parancsfile privilégiumokat módosít.)
14.F$TRNLNM (logikai-név [,tábla] [,index] [,mód] [,típus][,attribútum])
Ez a kiejthetetlen nevű függvény a következő rövidítést rejti: TRNLNM = TRaNslate Logical NaMe. Lefordítja az első argumentumban megadott logikai nevet és visszaadja az ekvivalencia-stringjét vagy a logikai név kívánt attribútumait. A második paraméterként megadott logikai név táblában keresi a logikai nevet. A táblának a LNM$SYSTEM_DIRECTORY vagy LNM$PROCESS_DIRECTORY valamelyikében szerepelnie kell. A tábla default értéke LNM$DCL_LOGICAL. Az indexet akkor kell használni, ha egy logikai névnek nem az első ekvivalencia-stringjét kérjük. A mód a logikai név elérési módját jelenti: USER, SUPERVISOR, EXECUTIVE vagy KERNEL lehet. A típus a táblán belüli keresés módját (CASE_BLIND, CASE_SENSITIVE), az attribútum pedig a függvényértéket határozza meg: Ha ez az argumentum hiányzik, akkor az ekvivalencia-string lesz a függvényérték, ha pedig megadjuk, akkor a logikai név valamely tulajdonsága lesz az (például ACCESS_MODE, CONCEALED, LENGTH, TABLE_NAME, VALUE).
Ha a logikai név nem létezik, a függvényérték az üres string ("") lesz.
Például
$ WRITE SYS$OUTPUT F$TRNLNM("SYS$LOGIN")
WORK:[USER.FODOR]
A parancs kiírja a bejelentkezéskor default lemezt és directoryt.
$ IF F$TRNLNM("MUNKA") .EQS. "" THEN -
DEFINE MUNKA SYS$DISK
Ez a parancs definiálja a MUNKA logikai nevet, ha az még nem létezik.
15.F$VERIFY ([eljárás-érték] [,image-érték])
A függvényérték jelzi, hogy az eljárás verifikálás bekapcsolt vagy kikapcsolt állapotban van-e. A verifikálás az eljárásnál azt jelenti, hogy a végrehajtott DCL parancsok megjelennek az output eszközön (a terminálon vagy a naplófileban) - ez lehetővé teszi a parancseljárások nyomkövetését, és a könnyebb hibakeresést. (Hasznos kiegészítő lehet a SET PREFIX parancs is.) Az image verifikálás esetén a parancseljárásban lévő adatsorok jelennek meg az output eszközön. Mindkét esetben a 0 a kikapcsolt az 1 a bekapcsolt állapotot jelzi.
Az eljárás-érték és image-érték 0 vagy 1 értéke jelzi, hogy a verifikálást ki kell kapcsolni vagy be kell kapcsolni, a függvényérték pedig a végrehajtás előtti állapotot jelzi – így azt meg lehet őrizni a későbbi visszaállításhoz.
Például
$ VERIFY = F$VERIFY(0)
.
.
.
$ IF VERIFY .EQ. 1 THEN SET VERIFY
Az eljárás elején kikapcsoljuk a verifikálást, majd a végén a SET VERIFY paranccsal kapcsoljuk vissza őket.
Amennyiben egy parancsfile olvasására nincs jogunk, csak a futtatásra, (E jog R nélkül) akkor a verifikálás hatástalan.
10.3.Programozás DCL-ben: a parancsfileok
A gyakran használt és/vagy felügyelet nélkül végrehajtandó DCL parancssorozat esetén lehetőségünk van a parancsokat szövegfileban (.COM kiterjesztés a default) rögzíteni és „program-szerűen futtatva” végrehajtani: később csak a filera kell hivatkozni a parancssorozat aktivizálásához. A parancsfile végrehajtója a DCL command processor, amely sorra megpróbálja értelmezni a parancsfile sorait, majd azokat – esetleg a vezérlő utasításoktól függő sorrendben – azonnal is végrehajtja.
A parancseljárások kezelésével az OpenVMS User's Manual kézikönyv foglalkozik.
Ez a fejezet leírja, hogy hogyan kell parancseljárásokat írni és működtetni. Például ha minden bejelentkezéskor futtatni akarunk egy ELEMZO nevű programot, továbbá meg akarjuk tudni, hogy kik vannak éppen bejelentkezve a rendszerbe, és látni szeretnénk az előző nap készült filejaink jegyzékét, akkor létrehozhatunk egy INDITAS.COM nevű filet az alábbi tartalommal:
$ RUN ELEMZO
$ SHOW USERS
$ DIRECTORY /SINCE=YESTERDAY /DATE /SIZE [...]
Ezután elegendő a
$ @INDITAS
parancsot kiadni a fentiek végrehajtásához.
10.3.1. A parancseljárások formája és végrehajtása
A parancseljárások a magas szintű nyelveken írt programokhoz hasonlóak: szervezhetünk ciklust, szubrutint, kezelhetünk fileokat, van terminál I/O, hibakezelés, a DCL saját függvényei is használhatók, stb. Azaz a DCL is tekinthető magas szintű nyelvnek, és a parancseljárások "DCL-ben írt" programoknak.
Az eljárásokban a DCL parancsokat ugyanolyan formában kell írni, mintha interaktív módon adnánk ki őket a terminálon. A DCL-nek szóló parancsokat $ jellel kell kezdeni. Ha a parancs olyan programot indít el, amely inputot vár a terminálról, akkor az input rekordo(ka)t a parancsfile következő sora(i)ba kell beírni; Az inputban nem kezdődhet dollár jellel a sor, mert az már ismét a DCL-nek szóló parancsot jelzi. Ha mégis $ jellel kezdődő inputra van szükségünk, akkor az adatokat a DECK és EOD parancsok közé kell zárni.
Ha a parancs nem egysoros, akkor a folytatósort kötőjellel (-) kell jelezni (ezzel kell zárni a be nem fejezett sor(oka)t), és a folytatás sort nem szabad $ jellel kezdeni).
Az eljárásban bárhol elhelyezhetünk megjegyzést, a könnyebb olvashatóság és dokumentálás céljából. A megjegyzést felkiáltójellel (!) kell kezdeni, függetlenül attól, hogy egy parancs után áll vagy a sor elején. A $ ekkor sem hagyható el. Ha a felkiáltójelet adatként akarjuk használni, akkor idézőjelek közé kell zárni.
A ciklusszervezéshez, szubrutinhíváshoz vagy csak a jobb olvashatóság kedvéért használhatunk címkéket. A címkének a dollárjel utáni első nem üres (üres karakternek számít a szóköz vagy a tabulátor) elemnek kell lennie, és kettősponttal (:) kell végződnie.
A parancsok és módosítóik rövidítése itt is megengedett, mégsem ajánlatos élni a lehetőséggel. Az olvashatóságot nagyon rontja a rövidítés, és az is előfordulhat, hogy a későbbi DCL verziókban valamely rövidítés elveszti egyediségét.
A parancseljárásokban bármely DCL parancs kiadható, így az újabb parancsfilet aktivizáló @ parancs is.
A DCL nyelvben a változók szerepét a szimbólumok és bizonyos szempontból a logikai nevek játsszák. A kifejezésekben ezeken kívül még szerepelhetnek a lexikális függvények és konstansok. (Leírásukat lásd a 5.2., 5.3. és 10.2. fejezetben.)
Az elkészült parancsfilet háromféle módon indíthatjuk el.
1. Ha a
$ @parancsfile-specifikáció
parancsot egy interaktív processzben a terminálon kiadjuk, akkor a parancsfile befejeződéséig a terminál foglalt lesz; ez az interaktív végrehajtás.
2. Ha az eljárás végrehajtása nem túl sürgős, közben szeretnénk mást tenni a processzben, vagy esetleg fileba akarjuk íratni az egyébként terminálra kerülő outputot (nem minden parancs rendelkezik /OUTPUT vagy /LOG módosítóval), akkor célszerű a SUBMIT paranccsal kötegelt (batch) végrehajtást kérni:
$ SUBMIT parancsfile-specifikáció
A parancs a megadott filet elhelyezi egy batch várakozási sorban, és amikor a job ott sorra kerül, akkor végrehajtódik. (A részleteket lásd a 11. fejezetben.)
$ SUBMIT PRM
Job PRM (queue SYS$BATCH, entry 51, started on SYS$BATCH))
3. Egy parancseljárást végrehajthatunk a DECnet hálózat egy másik csomópontján a TYPE DCL parancsot felhasználva. A
$ TYPE csomópont-név::"TASK = parancsfile"
formájú parancs a default DECnet felhasználó directoryjában levő parancsfilet hajtja végre. Ha más felhasználó (user) parancsfileját akarjuk végrehajtani, akkor a
$ TYPE csomópont"felhasználó jelszó"::"TASK = parancsfile"
formát kell használni, ahol a felhasználó a távoli csomópont (remote node) UAF-jában szerepel, a parancsfile pedig annak SYS$LOGIN directoryjában van. Ha el akarjuk kerülni, hogy a jelszavunk ilyen módon megjelenjen a képernyőn, akkor proxy accountot kell használni. A proxy adatbázis kezelése a rendszergazda (system manager) feladata.
Például legyen a PAPA felhasználó jelszava TERMINAL a WOMBAT csomóponton és az alábbi SHOWUSER.COM parancsfile a felhasználó SYS$LOGIN directoryjában.
$ IF F$MODE() .EQS. "NETWORK" THEN -
DEFINE /USER SYS$OUTPUT SYS$NET
$ SHOW USERS /FULL
Ekkor bármely más, a WOMBAT-tal DECnet kapcsolatban levő gépről megnézhetjük a WOMBAT-on bejelentkezett felhasználókat a
$ TYPE WOMBAT"PAPA TERMINAL"::"TASK=SHOWUSER"
paranccsal.
Mivel a parancsfileok szerkezetét általában nem befolyásolja a végrehajtási mód, ezért lehetséges, egyszer interaktívan és egy más alkalommal kötegelt módon vagy esetleg hálózaton keresztül hajtsuk végre ugyanazon parancseljárást. (Az F$MODE() lexikális függvény segítségével elkülöníthetjük az eltérő részeket.)
Ha a parancseljárást tesztelni akarjuk, akkor célszerű az éppen végrehajtott parancsokat a képernyőre íratni. A SET VERIFY parancs (vagy az F$VERIFY lexikális függvény) ezt lehetővé teszi. Hatása mindaddig érvényes (az adott parancseljárás szintjén túl is), amíg a SET NOVERIFY parancsot ki nem adjuk, vagy ki nem lépünk a rendszerből. Ugyancsak jó szolgálatot tehetnek a tesztelésben a SET ON és SET NOON parancsok, amelyek szabályozzák, hogy hiba esetén folytatódjon-e az eljárás végrehajtása vagy sem.
10.3.2.I/O egyszerűen: paraméterek, adatok a parancsfileban, szimbólumok és logikai nevek
A parancseljárások többféle módon kommunikálhatnak a rendszerrel és az őket futtató környezettel:
.Indításkor paramétereket adhatunk át az eljárásnak
.Adatokat helyezhetünk el a parancsfileokban
.Logikai nevek és globális szimbólumok használatával
.Terminál I/O-val
.Adatfileok alkalmazásával
Az első három módszerrel ez az alfejezet foglalkozik, a másik kettővel a következők.
1. A parancseljárás elindításakor maximum nyolc paramétert adhatunk át az eljárásnak. Ha interaktív módon indítjuk, akkor a parancsfile specifikációja után kell felsorolni a paramétereket, ha batch jobként, akkor a SUBMIT DCL parancs /PARAMETERS módosítóját kell használnunk:
$ @filespecifikáció p1 p2 ... p8
A paramétereket szóközzel kell elválasztani, az üres paramétert ""-lel jelezni. A SUBMIT formája:
$ SUBMIT /PARAMETERS=(p1, p2, ... ,p8) filespecifikáció
A távoli (remote) parancseljárás végrehajtásakor a parancseljárás neve után adhatunk meg - szóközzel elválasztott - paramétereket:
$ TYPE csomópont-név::"TASK = parancsfile p1 p2 ... p8"
A parancseljáráson belül a paraméterekre a P1, P2, ... , P8 szimbólumokkal hivatkozhatunk. Ezek a szimbólumok definíció nélkül is mindig léteznek a parancsfile végrehajtása alatt. (Ha egy paraméter nem szerepel a meghíváskor, a megfelelő Pn értéke az üres string lesz.)
A paraméter értéke integer vagy string lehet. Ha integer paramétert adunk meg, az is stringgé konvertálódik, de - mint minden numerikus stringet - használhatjuk numerikus kifejezésekben is. A string paraméteren a DCL automatikusan elvégzi a kisbetűk nagybetűkké konvertálását, a szóközök és tabulátorok tömörítését, kivéve, ha idézőjelek közé tesszük a karaktersort. Mivel interaktív végrehajtáskor a paramétereket szóközök választják el egymástól, ezért a szóközt, tabulátort tartalmazó paramétert feltétlen idézőjelek közé kell zárni.
Legyen a PARAM.COM tartalma:
$ SHOW SYMBOL P1
$ SHOW SYMBOL P2
$ SHOW SYMBOL P3
$ SHOW SYMBOL P4
$ SHOW SYMBOL P5
$ SHOW SYMBOL P6
$ SHOW SYMBOL P7
$ SHOW SYMBOL P8
Ekkor a különböző paraméterekkel való végrehajtás az alábbi outputokat eredményezi:
$ @PARAM Ez nem egy paraméter!
P1 = "EZ"
P2 = "NEM"
P3 = "EGY"
P4 = "PARAMÉTER"
P5 = ""
P6 = ""
P7 = ""
P8 = ""
$
$ @PARAM "Ez egy paraméter!"
P1 = "Ez egy paraméter!"
P2 = ""
P3 = ""
P4 = ""
P5 = ""
P6 = ""
P7 = ""
P8 = ""
Az első esetben a szóközök miatt P1-P4-be kerül a négy szó, csupa nagybetűssé konvertálva, és a felkiáltójel megjegyzésnek számít. A második indításkor az idézőjelek biztosítják, hogy egyetlen szimbólum értéke legyen az egész string.
A MAGNORA_MENT.COM parancsfile két paramétere a mágnesszalag-egység neve és címkéje lesz; az eljárás végrehajtása a
$ @MAGNORA_MENT mágnesszalag-egység szalag-címke
paranccsal történhet. A parancsfile felhasználja a paramétereket a DCL parancsokban:
$ INITIALIZE 'P1' 'P2'
$ MOUNT 'P1' 'P2'
$ COPY /LOG *.*;* 'P1'
$ DISMOUNT 'P1'
2. Input adatokat magában a parancseljárásban is elhelyezhetünk. Ekkor az inputot váró image indítását követő sor(ok)ba kell beírni az adatokat: minden sor egy rekord beolvasását teszi lehetővé és az első $-lel kezdődő sor jelzi az input végét:
$ RUN HAVI_FELDOLGOZAS
December
$ PRINT STATISZTIKA.LIS
Ebben az esetben a December a HAVI_FELDOLGOZAS program (egyetlen) terminálról kért input adata lesz.
Ez a módszer szűkíti a paraméterezhetőséget, mert az input sorokban nem szerepelhet szimbólum (illetve nem történik meg azok helyettesítése). Ha mégis szimbólum értékét szeretnénk átadni a parancsfileban futtatott programnak, akkor létre kell hozni egy második szintű parancsfilet, létrehozásakor elvégezni a szükséges helyettesítéseket, és azután elindítani az új parancseljárást.
Például ha a FELIRO program két input adatot vár, amit paraméterként szeretnénk megadni, akkor az alábbi FUTTATO.COM segítségével lehet megoldani a paraméterek átadását:
$ OPEN /WRITE MASOD MASOD.COM
$ WRITE MASOD "$ RUN FELIRO"
$ WRITE MASOD "''P1'"
$ WRITE MASOD "''P2'"
$ CLOSE MASOD
$ @MASOD
$ DELETE MASOD.COM;0
Ezután a
$ @FUTTATO param1 param2
parancssorral futtathatjuk a programunkat.
3. A globális szimbólumok - definíció szerint - bármely parancs szinten ismertek. Ezért a globális szimbólumok használhatók paraméter átadásra minden olyan parancsfileban, amelyet az illető szimbólum definiálása után hajtunk végre. Esetleg az is hasznos lehet, hogy a SHOW SYMBOL parancs végrehajtásakor az integer szimbólum decimális, hexadecimális és oktális értékét írja ki a DCL, s így az esetleg szükséges kézi átváltások elkerülhetők. Például ha a SZAMOL.COM az EREDMENY globális szimbólumban adja át az output paraméterét, akkor az a parancsfile lefutása után lekérdezhető:
$ @SZAMOL
$ SHOW SYMBOL EREDMENY
Decimal = 60 Hex = 0000003C Octal=00000000074
A logikai nevekkel hasonló a helyzet, hiszen törlésükig minden parancs szinten elérhetők. A logikai nevek használata szűkebb körű, mert egy filespecifikációt vagy annak egy részét helyettesíthetik, de tulajdonképpen bármilyen karaktersorozat lehet a logikai név ekvivalencia-stringje.
A logikai nevekkel történő filespecifikáció megadást használhatjuk a programjaink futtatásakor is: A programban logikai névvel hivatkozhatunk a file(ok)ra és csak a futtatás előtt történik meg a hozzárendelés az aktuális filehoz.
Például ha a KONVERT program egy input fileból egy outputot hoz létre, és a programban INFILE és OUTFILE néven szerepelnek ezek a fileok, akkor érdemes a KONVERT.COM-ban megírni a "futtató környezetet":
$ IF P1 .EQS. "" THEN -
READ/PROMPT="Kérem az input filet!" SYS$COMMAND P1
$ IF P2 .EQS. "" THEN -
READ/PROMPT="Kérem az output filet!" SYS$COMMAND P2
$ DEFINE INFILE 'P1'
$ DEFINE OUTFILE 'P2'
$ RUN KONVERT
Ezután
$ @KONVERT input-file output-file
vagy
$ @KONVERT
paranccsal futtathatjuk a programot; utóbbi esetben a parancsfile bekéri a megfelelő filespecifikációkat.
10.3.3.Terminál I/O DCL parancsokkal
Az 5.2.3. fejezetben szerepeltek a processz permanens fileok, amelyek nyitva maradnak a processz teljes élete alatt. Négy processz permanens file a terminálhoz van rendelve interaktív bejelentkezéskor: SYS$INPUT, SYS$OUTPUT, SYS$COMMAND, SYS$ERROR Ha elindítunk egy parancseljárást, a hozzárendelés a következő módon változik meg a végrehajtás idejére:
Interaktív végrehajtáskor:
.A SYS$INPUT a parancseljáráshoz rendelődik; azaz a DCL a parancseljárás fileból olvassa a szükséges inputot.
.A SYS$OUTPUT, SYS$COMMAND, SYS$ERROR továbbra is a terminálra mutat.
Kötegelt végrehajtáskor:
.A SYS$INPUT és a SYS$COMMAND a parancseljárás filehoz rendelődik.
.A SYS$OUTPUT és a SYS$ERROR a batch job napló filejára mutat.
Ezeket a default hozzárendeléseket a DEFINE vagy az ASSIGN paranccsal megváltoztathatjuk. Ha például az ADATOK.DAT fileból kívánjuk venni a parancseljárás inputját, akkor
$ ! A parancsfile előkészítő része
$ DEFINE SYS$INPUT ADATOK.DAT
$ RUN FELDOLGOZO
Ha később ismét a default hozzárendelésre van szükségünk, akkor a DEASSIGN paranccsal törölni kell az új értéket (A processz permanens file nem szűnik meg a DEASSIGN hatására, hanem visszakapja az eredeti értékét.) Ezt elkerülhetjük, ha egyetlen image futásához szükséges az átirányítás: ekkor a DEFINE parancsot a /USER_MODE módosítóval kell használni. Így a DEFINE-t követő parancs után visszaáll a default hozzárendelés - kivéve a built-in parancsokat, amelyek nem törlik a user módú definíciót.
Ha a képernyőre a parancsfileban elhelyezett, többsoros, formázott szöveget akarunk íratni, akkor a legkényelmesebb megoldás a TYPE SYS$INPUT használata:
$ TYPE SYS$INPUT
Az alábbi lehetőségek közül kell választani:
1. Havi statisztika készítés
2. Havi statisztika nyomtatás
3. Mentés
4. Kilépés
$
A TYPE után megadott filespecifikáció ekkor a SYS$INPUT. A SYS$INPUT a parancsfile végrehajtásakor a parancsfileba mutat a TYPE-ot követő sorokra és a következő $ jelenti a file végét. Tehát a TYPE és a $ közötti sorok megjelennek a SYS$OUTPUT-on (interaktív végrehajtáskor a képernyőn), ugyanolyan formában, ahogy a parancsfileba beírtuk őket.
A SYS$OUTPUT-ot is filehoz rendelhetjük, ha a
$ @filespecifikáció/OUTPUT=outfile
formát használjuk indításkor. (Ezt a módosítót csak közvetlenül a parancsfile után, szóköz nélkül adhatjuk meg, különben a DCL paraméterként fogja értelmezni.) Ez a lehetőség sok DCL parancs esetén is megvan (/LOG vagy /OUTPUT módosító). Természetesen itt is használható a DEFINE is:
$ DEFINE SYS$OUTPUT NAPLO.LOG
Ha a SYS$OUTPUT és a SYS$ERROR nem azonos eszközre mutat, akkor a VMS hibaüzenetek mindkét eszközön megjelennek.
Az INQUIRE parancs a SYS$COMMAND-ról kér be egy értéket, és azt egy lokális vagy globális szimbólumhoz rendeli. Formája:
INQUIRE szimbólumnév [prompt-string]
Ez a parancs azonban elavultnak tekinthető, ne használjuk. Inkább a sokkal jobban paraméterezhető
READ/PROMTP="promt-string" SYS$COMMAND szimbólumnév
parancsot alkalmazzuk. (Leírása a következő alfejezetben található.)
10.3.4. Filekezelés
A DCL parancsok segítségével csaknem teljes körben tudjuk használni az RMS szolgáltatásait, azaz tetszőleges szervezettségű file rekordjaival végezhetünk szinte minden RMS-ben megengedett műveletet. Nem ajánlatos azonban egy bonyolult, sok rekordot elérő "programot" DCL-ben megírni, mert a DCL értelmező általában sokkal lassúbb, mint a magas szintű nyelveken vagy assemblyben írt programok. Az itt felsorolt parancsokkal lehetőleg szorítkozzunk a futtatási paraméterek beolvasására, módosítására, illetve naplófileok írására a parancseljárásokban.
1. OPEN
Írásra, olvasásra vagy mindkettőre megnyit egy már létező filet vagy létrehozza, és minden esetben hozzárendel egy logikai nevet. A további fileműveletekben erre a logikai névre kell hivatkozni.
Formája:
$ OPEN logikai-név[:] filespecifikáció
A filemegnyitás processz-permanens, azaz mindaddig nyitva marad a file, amíg CLOSE paranccsal le nem zárjuk, vagy ki nem jelentkezünk. Az OPEN az RMS filekezelést használja, így bármilyen szervezettségű (szekvenciális, relatív, indexelt) filet megnyithatunk.
A parancs módosítói:
./APPEND
Egy létező filet nyit meg írásra; a rekord pointert a file végére állítja. A /WRITE módosítóval együtt nem használható.
./ERROR=címke
Jelzi, hogy megnyitási hiba esetén hol folytatódjon a végrehajtás.
./READ
Olvasásra nyitja meg a filet. Ha /WRITE nélkül használjuk, akkor a filenak léteznie kell.
Ez a default megnyitás (/WRITE nélkül).
./SHARE[=opció]
Meghatározza a más felhasználók hozzáférési jogát. Az opció READ vagy WRITE lehet (ez utóbbi olvasást és írást egyaránt megenged).
A /SHARE opció nélkül SHARE=WRITE hozzáférést jelent. Ha a /SHARE-t elhagyjuk, más felhasználó nem férhet hozzá a filehoz annak lezárása előtt.
./WRITE
Írásra nyit meg egy filet.
Ha a parancsban /READ módosító nem szerepel, akkor új file jön létre, a létezőknél eggyel nagyobb verzióval. A keletkező új file szekvenciális lesz.
Például
$ OPEN /WRITE PARANCS FORDIT.COM
FORDIT.COM néven létrehoz egy filet, a létező(k)nél eggyel nagyobb verzióval.
$ OPEN /APPEND /ERROR=LETREHOZ HIBA HIBANAPLO.LIS
$ FOLYTAT:
$ WRITE HIBA "Ez egy hibaüzenet"
$ CLOSE HIBA
.
.
.
$ LETREHOZ:
$ OPEN /WRITE HIBA HIBANAPLO.LIS
$ GOTO FOLYTAT
A HIBANAPLO.LIS-t folytatásra nyitjuk meg, ha már létezik. A hibakezelés segítségével létre is hozzuk, ha még nincs ilyen file.
2. CLOSE
Lezár egy OPEN paranccsal megnyitott filet, és törli az OPEN paranccsal a filehoz rendelt logikai nevet.
Formája:
$ CLOSE logikai-név[:]
A logikai név az OPEN-ben használt név.
3. READ
Egy rekordot olvas egy fileból, vagy módosítja a tartalmát, vagy törli a fileból.
Formája:
$ READ logikai-név[:] szimbólumnév
A logikai név azonos az OPEN-ben megadottal, a szimbólum a rekord tartalmát kapja értékül. Ha a szimbólumot korábban nem definiáltuk, akkor most kerül be a lokális szimbólumtáblába. A READ parancs mindhárom szervezettségű file rekordjait elérheti; a rekordméret maximum 2048 byte lehet.
A parancs módosítói:
./DELETE
A kiolvasott rekordot olvasás után törli az indexelt fileból.
./END_OF_FILE= címke
Erre a címkére adódik a vezérlés, ha szekvenciális olvasáskor a file végére érünk.
./ERROR=címke
Erre a címkére adódik a vezérlés, ha az olvasás hibával végződik. Ha ilyen módosító nincs a parancsban, akkor az aktuális ON feltétel érvényesül.
./INDEX=n
Jelzi, hogy indexelt fileból hányadik kulcs szerint kell olvasni. (0 jelenti az elsődleges kulcsot.)
Deafult: A megelőző olvasásban szereplő /INDEX értéke, vagy ha ilyen még nem volt, akkor /INDEX=0
./KEY=string
A stringgel megegyező kulcsú rekordot kell beolvasni az indexelt fileból. Ha /KEY-t nem adunk meg, akkor szekvenciális olvasás történik.
./MATCH=opció
Jelzi, hogy a beolvasandó rekord kulcsa milyen módon illeszkedjen a /KEY-vel megadott stringhez.
Az opció EQ, GE, GT lehet, azaz a kulcsmező értéke egyenlő, nagyobb vagy egyenlő illetve nagyobb, mint a /KEY-nél megadott string.
Default: /MATCH=EQ
./NOLOCK
Jelzi, hogy a beolvasott rekordot nem kell zárolni.
Default esetben a rekord a következő I/O műveletig zárolva lesz.
./PROMPT=string
Ha terminálról olvassuk az adatot, a string promptként megjelenik az utasítás végrehajtásakor.
Default: /PROMPT=Data:
./TIME_OUT=n
Ha terminálról olvasunk, akkor maximum a megadott számú másodperc telhet el két karakter leütése között, különben az olvasás sikertelen. (0<n<256)
Ha a parancsban az /ERROR=címke módosító is szerepel, akkor időtúllépés esetén a megadott címkénél folytatódik a végrehajtás.
Default: /NOTIME_OUT
Például
$ OPEN FILE ADAT.DAT
$ OLVASO_CIKLUS:
$ READ/END_OF_FILE=VEGE FILE REKORD
.
.
.
$ GOTO OLVASO_CIKLUS
$ VEGE:
$ CLOSE FILE
Az ADAT.DAT fileból mindaddig olvasunk, amíg a file végére nem érünk; akkor lezárjuk a filet.
$ READ /PROMPT="Vigyázz, timeout!"/TIME_OUT=60/ERROR=HIBA –
SYS$COMMAND INPUT_ADAT
.
.
.
$ HIBA:
$ WRITE SYS$OUTPUT "Nem nyert!"
A fenti eljárás a terminálról olvas az INPUT_ADAT szimbólumba, de csak akkor, ha két karakter leütése vagy a sor zárása között egy percnél kevesebb telik el.
4. WRITE
A megadott adato(ka)t a logikai névvel megadott (nyitott) fileba írja.
Formája:
$ WRITE logikai-név kifejezés [,...]
A logikai név egy OPEN utasítással a filehoz rendelt név vagy egy processz-permanens file neve lehet. A filet /WRITE vagy /APPEND módosítóval kell megnyitni.
Az utasításban szereplő kifejezés(ek) értékéből egyetlen rekord készül. Ha több kifejezés van, értéküket az interpreter összefűzi. A rekord maximális mérete 1024 byte lehet, egy szimbólum értéke ezen belül maximum 255 byte hosszú; kivéve a /SYMBOL módosító használatát, ekkor 2048-ig nőhet a rekord és a szimbólumokra nincs korlát.
A WRITE parancs mindhárom RMS filetípusba írhat rekordot. A parancs végrehajtása után a rekord pointer az éppen felírt rekord mögé fog mutatni.
A parancs módosítói
./ERROR=címke
A megadott címkén folytatódik a parancseljárás végrehajtása, ha az írás sikertelen volt. Az itt megadott eltérülés magasabb precedenciájú, mint az ON feltétel.
./SYMBOL
A DCL a parancsban lévő kifejezés(eke)t értelmezi és az érték(ük)et egy maximum 2048 byteos pufferben helyezi el a kiírás előtt. Minden kifejezésben csak egyetlen szimbólum állhat, ezek értékét az interpreter összefűzi és ebből képez egy rekordot.
./UPDATE
Az utoljára beolvasott rekordot módosítja (update). Ezt a módosítót csak akkor lehet használni, ha egy READ utasítás lett végrehajtva a WRITE előtt.
Például
$ OPEN /WRITE OUTFILE TESTFILE.TXT
$ WRITE OUTFILE "Ez kerül a fileba"
$ WRITE OUTFILE "Most jön az extra rekord!"
$ WRITE /SYMBOL OUTFILE A,B,C
$ CLOSE OUTFILE
A TESTFILE.TXT-be írunk 3 rekordot, a 3. maximum 2048 byteos lehet.
$ WRITE SYS$OUTPUT "Így is lehet írni a terminálra"
Érdekesség, hogy bár a string tipusú szimbólum mérete nem haladhatja meg az 1024 byte-ot, (semmilyen műveletet nem lehet velük végezni) addig a következő szekvencia lefut bármekkora (32767 byte) rekordmérettel:
$ READ inputfile BIGLINE
$ WRITE/ SYMBOL outfile BIGLINE
Az ilyen túlhízott, 1024 karakternél hosszabb szimbólumokkal semmi mást nem lehet tenni, csak ezt a két műveletet végrehajtani.
10.3.5.Vezérlésátadás és megszakításkezelés
A DCL tartalmaz néhány olyan parancsot, amely a programozási nyelvekhez hasonlóan lehetővé teszi a feltétlen és feltételes vezérlésátadást, a külső és belső szubrutinok használatát, és a hibák, megszakítások kezelését. Ciklusszervező utasítás nincs, de a rendelkezésre álló parancsokkal tudunk számlálós vagy feltételtől függő ciklust szervezni.
1. A feltétlen vezérlésátadó parancs:
$ GOTO címke
A megadott címkén folytatja a parancsok végrehajtását. A címkének szerepelnie kell a parancseljárásban. Esetleg többször is előfordulhat; ekkor a vezérléssel odáig érintett legutolsó, illetve, ha ilyen nincs, akkor a továbbiakban legelső előfordulásnál folytatódik az eljárás. Ez nagyjából lehetetlenné teszi a többszörös címkék ésszerű használatát – lehetőleg kerüljük őket.
2. A végrehajtás szekvenciális sorrendjét feltételesen megváltoztathatjuk az IF parancs valamely formájával, amely egy kifejezés értékétől függően végrehajt vagy kihagy egy utasítást vagy utasítások egy csoportját.
Formája:
$ IF kifejezés THEN [$] parancs
vagy
$ IF kifejezés
$ THEN [parancs]
$ parancs
.
.
.
[$ ELSE [parancs]
$ parancs
.
.
.
$]
$ ENDIF
A kifejezés értékére a logikai kifejezés szabályai érvényesek, azaz igaz, ha
.integer típusú és páratlan
.páratlan értékű numerikus string
.a string az Y, y, T, t valamelyikével kezdődik.
Például
$ IF P1 .EQS. "" THEN -
READ/PROMPT="A forrásprogram neve" SYS$COMMAND P1
$ FORTRAN 'P1'
$ IF .NOT. $STATUS THEN EXIT
$ LINK 'P1'
$ IF .NOT. $STATUS THEN EXIT
$ RUN 'P1'
A fenti parancsfile lefordít, szerkeszt és futtat egy – indítási paraméterként megadott vagy végrehajtás közben bekért – Fortran forrásprogramot, ha nem talál közben hibát. (Nem ellenőrizzük, hogy valóban csak a filenevet tartalmazza-e az input.) A fenti parancsfile más formában:
$ IF P1 .EQS. "" THEN -
READ/PROMPT="A forrásprogram neve" SYS$COMMAND P1
$ FORTRAN 'P1'
$ IF $STATUS
$ THEN
$ LINK 'P1'
$ IF $STATUS
$ THEN RUN 'P1'
$ ELSE WRITE SYS$OUTPUT "Linker hiba"
$ ENDIF
$ ELSE WRITE SYS$OUTPUT "Fordítási hiba"
$ ENDIF
$ EXIT
3. A szubrutinokhoz használható GOSUB, CALL, SUBROUTINE, RETURN, ENDSUBROUTINE utasítások leírása az OpenVMS DCL Dictionary kézikönyvben található.
4. A parancsfile végrehajtása hiba esetén vagy CTRL/Y lenyomásakor alapértelmezés szerint megszakad, ha nem gondoskodunk ezen esetek lekezeléséről az eljáráson belül. Az ON, SET [NO]ON, SET [NO]CONTROL parancsok változtatják meg a default hibakezelést, illetve egyes parancsok – OPEN, CLOSE, READ, WRITE - módosítóikkal adhatják meg az eltérülés helyét hiba esetén.
Ha egy DCL parancs végrehajtása befejeződik, a parancsértelmező a $STATUS globális szimbólumnak adja értékül a feltételkódot.
A $STATUS és a $SEVERITY jelentését az 5.3.1. fejezet részletesen leírja, itt csak annyit említünk meg, hogy a siker kódok (Success, Information) páratlanok, azaz logikai TRUE értékűek, ezért a
$ IF $SEVERITY THEN GOTO SIKER
$ IF $STATUS THEN GOTO SIKER
formájú parancsokat is használhatjuk feltételvizsgálatra.
5. Ha a státusz értéke alapján a szöveges hibaüzenetet akarjuk látni, akkor az F$MESSAGE lexikális függvényt vagy a HELP/MESSAGE parancsot is használhatjuk:
$ HELP /MESSAGE [/STATUS='$STATUS']
Ha a /STATUS-t elhagyjuk, akkor a $STATUS legutolsó értékére vonatkozó üzenetet és a részletes magyarázatot láthatjuk a képernyőn.
6. Az ON parancs formája:
$ ON feltétel THEN [$] parancs
ahol a feltétel WARNING, ERROR, SEVERE_ERROR vagy CONTROL_Y lehet. A parancseljárásban mindig az utoljára kiadott ON feltétel van érvényben, és a megadott feltételnél súlyosabb hiba is kiváltja az eltérülést. A beállítás addig érvényes, amíg egy hiba fel nem merül, annak lekezelése után visszaáll a default akció. A feltétel csak a definiáló parancseljárás szintjén hatásos.
A CTRL/Y lenyomása a parancsfile végrehajtását megszakítja és a parancsértelmező a CTRL/Y szintre tér át. A CTRL/Y részletes leírását az 5.1.3. fejezet tartalmazza.
Az ON CONTROL_Y DCL parancs lehetővé teszi, hogy a parancseljárásban kezeljük le ezt az eseményt. Például:
$ ON CONTROL_Y THEN GOTO MEGSZAKITAS
.
.
.
$MEGSZAKITAS:
$ WRITE SYS$OUTPUT "CTRL/Y MIATT VEGE"
$ CLOSE INPUT_FILE
$ CLOSE OUTPUT_FILE
A fenti eljárás CTRL/Y leütése esetén üzenetet ír ki, majd lezárja a megnyitott fileokat. (Enélkül a nyitott fileok a processz élete végéig nyitva maradnak: programok/utilityk általában nem férnek hozzá, és ez a parancseljárás a legközelebbi hívásakor nem a file elejéről, hanem az otthagyott állapotból menne tovább.)
7. A CTRL/Y lekezelését megtilthatjuk vagy engedélyezhetjük a
$ SET NOCONTROL=Y
$ SET CONTROL=Y
parancsokkal, de a Digital általában nem ajánlja a CTRL/Y-nal történő megszakítás letiltását, legfeljebb egy-egy parancs végrehajtása idejére.
Az ON CONTROL_Y feltétel a parancsfileból való kilépésig érvényes, ha egy másik ON CONTROL_Y vagy egy SET [NO]CONTROL=Y paranccsal felül nem bíráljuk.
A
$ SET ON
parancs kiadása után bekövetkező hiba esetén az eljárás végrehajtása megszakad (ez a default); a
$ SET NOON
esetben a sikertelen parancsvégrehajtás után is folytatódik az eljárás. Szintén veszélyes lehet, ha nem csak egy-egy parancs végrehajtása idejére használjuk a SET NOON-t. Ilyenkor is van azonban lehetőség a hibák figyelésére egyes parancsok után, például az alábbi módon:
$ SET NOON
$ RUN PROGRAM1
$ IF .NOT. $STATUS THEN EXIT
10.3.6.A LOGIN.COM
.Először a rendszer rendszerszintű parancsfile hajtódik végre, ez nem letiltható, legfeljebb jó reflexszel CTRL/Y-nal megszakítható (ha a CTRL/Y használata az UAF-ban engedélyezett a felhasználónak).
.Utána a felhasználó személyes parancsfileja következik.
A felhasználó személyes parancsfilejának végrehajtása letiltható a bejelentkezéskor (amennyiben az UAF szerint erre joga van a felhasználónak):
Username: FODOR/NOCOMMAND
Password: <PASSWORD>
A rendszer közös parancseljárására a SYS$SYLOGIN logikai név mutat, és a SYS$MANAGER:SYLOGIN.COM a szokásos helye és neve. Ebben vannak a rendszer minden felhasználójára érvényes beállítások. Ennek végrehajtása után fut le a személyes parancsfile, ha létezik. A személyes parancsfile általában a bejelentkezési default directoryban (erre mutat a SYS$LOGIN) levő LOGIN.COM. A rendszergazdának lehetősége van az UAF-ban mást beállítani, s így létrehozhat 3, vagy akár több szintű, bejelentkezéskor automatikusan lefutó parancsfile-rendszert. (Felső szinten a SYLOGIN.COM, középső szinten valamely csoportra érvényes parancsfile, ami végül meghívhatja a felhasználó személyes parancsfileját.) Mivel az eljárások az itt felsorolt sorrendben hajtódnak végre, ezért a felhasználó felülírhat bizonyos közös definíciókat (például szimbólumokat, kulcsdefiníciókat vagy logikai neveket).
A LOGIN.COM-ba célszerű elhelyezni:
.a különböző processz végrehajtási módok szétválasztását (interaktív, batch, network)
.a saját szimbólumok definiálását
.a processzben használt billentyűdefiníciókat
.a processzben szükséges logikai nevek definiálását
.a terminál-beállításokat (típus, képernyőméret, parancseditáló mód, üzenetfogadás letiltása)
.a processz beállításokat (a processz neve, saját parancsok, prompt, verifikálás )
.saját eszközök kezelése (allokálás, mount)
.parancsfile, program futtatása (napi statisztika, lemezkvóta ellenőrzés, korábbi fileverziók törlése)
Például:
$
$
$ PURGE /KEEP=4 /LOG
$ SET NOVERIFY
$ EXIT
$
$BATCH:
$ SET VERIFY
$ EXIT
Megjegyzendő, hogy a kijelentkezéshez nincs hasonló eljárás-csoport rendelve, de akár a rendszer összes felhasználójára, akár saját használatra át lehet írni a LOGOUT parancsot is:
$ LO*GOUT:==@SYS$MANAGER:SYLOGOUT
$ LO*GOUT == @SYS$LOGIN:KIJELENTKEZES.COM
11. A várakozási sorok
A várakozási sorok (queue) célja, hogy bizonyos feladatok (job) akkor is végrehajtódjanak, ha valamilyen ok miatt csak korlátozott erőforrás áll rendelkezésükre. (Output sorok esetén a nyomtató kapacitás, kötegelt (batch) soroknál pedig például a CPU teljesítmény korlátozott.). Ekkor az erőforrást igénylők nem feltétlen kapják meg azokat azonnal, hanem először sorban állnak
A várakozási sor menedzsment (queue management) – a várakozási sorokat a felügyelő rendszer a VMS-ben – általában a rendszer indításakor elindul; paraméterezése, a sorok definiálása általában a rendszergazda feladata. A felhasználó DCL parancsok segítségével tájékozódhat a rendelkezésre álló szolgáltatásokról, és a PRINT és SUBMIT kiadásával veheti igénybe azokat.
Az OpenVMS jellegzetessége, hogy a queue management az egész clusterben egységes irányítás alatt áll, és közös adatbázist használ. Ha a felügyelő processzek valamelyikét futtató cluster-tag leáll, akkor egy másik gép automatikusan átveheti annak szerepét.
Sőt, bármely sor is definiálható úgy, hogy a sorban mindaddig végrehajtódjanak a jobok, amíg egyáltalán van olyan csomópont - a clusteren belül -, amely képes végrehajtani azokat. A felhasználónak nem is kell feltétlenül tájékozódnia arról, hogy a feladata hol hajtódik végre. Ha a sort kezelő gép leáll (shutdown vagy crash miatt), akkor egy előre meghatározott másik csomópont átveheti annak a szerepét.
11.1.A queue menedzsment elemei
A VMS két alapvető várakozási sort ismer:
.Kötegelt sor (batch queue): parancsfileok végrehajtására.
.Output sor (output queue): nyomtatásra.
Az output sor típusa a nyomtató fizikai kapcsolódásától függ (printer, terminál, szerver), ezt a sort definiálójának figyelembe kell vennie, illetve a sor jellemezői között megtalálható, de a felhasználó nyomtatási igényeit ez nem befolyásolja.
$ SHOW QUEUE/SUMMARY
Batch queue LASSU_BATCH, available, on PTEAX1::
Job summary: 1 executing, 5 holding
Server queue LP2, available, on NODE2::, mounted form DEFAULT
Job summary: 1 executing
Generic server queue MASODIK_EMELET
Job summary: 1 timed release
Batch queue KICSI_BATCH, idle, on AX3::
Job summary: queue is empty
Printer queue HP_PRINT, stopped, on AX3::LPA0, mounted
form DEFAULT
Job summary: 8 pending (565 blocks)
Terminal queue 3_SZ, stopped, on VAX::TTA2, mounted form DEFAULT
Job summary: 2 pending (445 blocks)
.
.
.
A rendelkezésre álló erőforrások és a megoldandó feladatok ismeretében célszerű többféle output és batch várakozási sort létrehozni.
.Generikus sor (generic queue): a végrehajtódó sorok számára gyűjti és szétosztja a feladatokat: Mindig abba a sorba küld jobot, amelyik azonnal végre tudja hajtani.
Például az egy szobában vagy egy emeleten lévő azonos típusú nyomtatókat összefoghatjuk egyetlen generikus sorral. Ekkor a felhasználó ebbe a sorba küldi a nyomtatandó fileját, és az automatikusan a leghamarabb felszabaduló nyomtatón lesz kinyomtatva.
.Végrehajtódó sor (executing queue): a benne lévő feladatok (parancsfile vagy nyomtatandó file) rendre végrehajtódnak – akár közvetlenül, akár egy generikus soron keresztül került oda a job.
Mind az output, mind a batch sorok esetén használhatjuk a generikus és végrehajtódó sorokat.
A rendszerben definiálhatunk olyan objektumokat, amelyeket később hozzárendelhetünk egy vagy több sorhoz. Ekkor az objektum hordozza azokat a jellemzőket, amelyeket különben minden egyes sor esetén külön kellene leírnunk.
A karakterisztikával (characteristics) a queue valamely tulajdonságát határozhatjuk meg: Például a tinta színét, a papír típusát egy output sornál illetve a felhasználható CPU idő maximális mennyiségét egy batch sor esetén. Egy job majd akkor hajtódik végre, amikor az őt tartalmazó sor a megfelelő karakterisztikával rendelkezik. A karakterisztika definiálása a
$ DEFINE /CHARACTERISTIC
paranccsal történik, s aztán hozzárendelhető egyes sorokhoz – ez legtöbbször a rendszergazda feladata. A rendelkezésre álló karakterisztikákat lekérdezhetjük:
$ SHOW QUEUE/CHARACTERISTICS
Characteristic name Number
------------------- ------
KEKTINTA 6
PIROSTINTA 25
CPUMAX 2
Ezenkívül a
$ SHOW QUEUE /FULL
megmutatja, hogy a melyik sorhoz milyen karakterisztika tartozik A PRINT és SUBMIT kiadásakor választhatjuk ki a nekünk megfelelő karakterisztikát (lásd a következő alfejezetekben.)
<!-- a { text-decoration: none } -->
Bizonyos nyomtató vagy nyomtatási tulajdonságokat – például lap hossza, szélessége, margók mérete, a túl hosszú sorok kezelése, nyomtatót vezérlő karakterek küldése laponként/fileonként – a formátum (form) segítségével definiálhatunk. Az output sorhoz rendelt formátum (esetleg a jobhoz rendelt formátummal együtt) határozza meg a nyomtatott állomány formai jellemzőit.
A formátumok a
$ DEFINE /FORM
DCL paranccsal definiálhatók és a
$ SHOW QUEUE /FORM
$ SHOW QUEUE /FORM /FULL
paranccsal kérdezhetők le:
$ SHOW QUEUE/FORM/FULL
Form name Number Description
--------- ------ -----------
132_51_STD (stock=DEFAULT) 102 132 betű, 51 sor
/LENGTH=51 /MARGIN=(BOTTOM=6) /STOCK=DEFAULT /TRUNCATE
/WIDTH=132
40_66_STD (stock=DEFAULT) 103 40 betű 66 sor (címke)
/LENGTH=66 /MARGIN=(BOTTOM=6) /STOCK=DEFAULT /WIDTH=40
DEFAULT 0 System-defined default
/LENGTH=66 /MARGIN=(BOTTOM=6) /STOCK=DEFAULT /TRUNCATE
/WIDTH=132
LN01_LANDSCAPE (stock=DEFAULT) 107 landscape
/LENGTH=65 /SETUP=(LN01_TOP_MARGIN_150) /STOCK=DEFAULT
/WIDTH=132
LN01_PORTRAIT (stock=DEFAULT) 106 portrait
/LENGTH=60 /SETUP=(LN01_PORTRAIT) /STOCK=DEFAULT /WIDTH=80
A PRINT parancs paraméterei között szerepelhet az általunk elvárt formátum. A job csak akkor hajtódik végre, ha a PRINT parancsban megadott formátum érvényes a várakozási sorban.
A nyomtatási sorhoz rendelt formátum és karakterisztika menet közbeni állítgatása legtöbbször az operátor feladata: ha kicseréli valamely nyomtatóban a papírt vagy a tintát, akkor annak megfelelően módosítja a nyomtatási sor paramétereit, s így most azok a jobok kerülnek sorra, amik a megadott formátumra vagy karakterisztikára vártak.
A jobok egy sorba való besorolásukkor a clusteren belül egyedi azonosítót kapnak (entry number), melyre bármely job művelet során hivatkozhatunk.
$ PRINT LISTA.LIS
Job LISTA.LIS (queue SYS$PRINT, entry 86) started on LPA0
A sorokon belül a joboknak prioritása (priority) van; a nagyobb prioritású jobok előbb kerülnek ütemezésre – ez független a processzek prioritásától.
11.2.A nyomtatás
A VMS-ben a nyomtatás az output sorokon keresztül, a PRINT parancs segítségével történik.
Formája:
$ PRINT filespecifikáció [,...]
$ PRINT filespecifikáció [+...]
A PRINT a felsorolt fileokat egyetlen job-ba fűzi össze, és úgy küldi el egy output várakozási sorba. A job neve - ha nem adunk meg mást - az első file neve lesz. A default filetípus a felsorolásban megelőző file típusa, vagy ha ilyen nincs, akkor a .LIS. A verzióra a létező legmagasabb a default.
A filespecifikációban a wildcard (* % - ...) karakterek megengedettek. Ha a filespecifikációban csomópont név is szerepel, akkor kötelező a /REMOTE módosító használata.
A parancs végrehajtásakor a rendszer üzenetet küld, amely tartalmazza a job bejegyzés-számát (entry number), a várakozási sort és a job státuszát. A bejegyzés-szám értékét a $ENTRY szimbólum is felveszi, és a processz legközelebbi PRINT vagy SUBMIT parancsáig őrzi.
Bizonyos módosítók megadhatók a PRINT után is - akkor az összes filera vonatkoznak; vagy egy filespecifikáció után - s akkor csak arra az egy filera érvényes (positional qualifier).
A leggyakrabban használt módosítók:
./AFTER=idő
A megadott időpont után kell elkezdeni a nyomtatást. Ha a megadott idő elérkezik, akkor a job azonnal a várakozási sor elejére kerül. Az idő abszolút vagy kombinált lehet. Ez nem feltétlen jelenti azt, hogy tényleg abban az időpontban nyomtatódik ki: lehet, hogy sokkal később, de semmiképpen nem előbb.
./BACKUP
A legutóbbi mentési (backup) dátum alapján választja ki az input fileokat.
Csak a /BEFORE vagy a /SINCE módosítóval együtt használható.
Default: /CREATED
./BEFORE[=idő]
Az adott idő előtti dátumú fileokat választja ki az input fileok közül. Az idő abszolút vagy kombinált formájú lehet. Használható a BOOT, LOGIN, TODAY, TOMORROW, YESTERDAY kulcsszó is.
Ha a /BEFORE-t paraméter nélkül adjuk meg, akkor /BEFORE=TODAY az alapértelmezés.
./BY_OWNER[=uic]
A tulajdonosi UIC alapján választja ki a file(oka)t a megadott input specifikáció(k)ból.
Ha a /BY_OWNER-t paraméter nélkül adjuk meg, akkor a processz aktuális UIC-a lesz a default.
.CHARACTERISTICS=(karakterisztika [,...])
A job karakterisztikáit állítja be. Amennyiben a sor nem rendelkezik mindazzal a karakterisztikával, amit itt megadunk, akkor a job várakozó állapotba kerül mindaddig, amíg a sor vagy a job karakterisztikái megfelelően nem változnak.
./CONFIRM
Minden egyes file jobba illesztése előtt megerősítést vár:
.Az igenlő válasz YES, TRUE, 1;
.A tagadó NO, FALSE, 0 vagy RETURN lehet.
.Ha a válasz ALL, akkor a további fileokra kérdés nélkül elvégzi,
.QUIT-re vagy CTRL/Z-re pedig befejezi a file jobba illesztését.
./COPIES=n
A PRINT után megadva az összes fileból n példány nyomtatódik; ha egy filespecifikáció után áll, akkor csak abból az egy fileból készül az n példány - pozíciófüggő módosító (positional qualifier). (0<n<255).
Default: /COPIES=1
./CREATED
A létrehozásuk dátuma alapján választja ki a nyomtatandó file(oka)t. Együtt kell használni a /BEFORE vagy a /SINCE módosítóval.
./DELETE
Kinyomtatás után törli a megjelölt file(oka)t (pozícionális módosító).
Default: /NODELETE
./EXCLUDE=(filespec[,...])
Kihagyja a nyomtatandó fileok közül a felsorolt fileokat. Ha egy file van, a () elhagyható.
A filespecifikáció(k)ban a wildcard karakterek (* % ... -) megengedettek.
./EXPIRED
Lejárati idő alapján választja ki a fileokat. Együtt kell használni a /BEFORE vagy a /SINCE módosítóval.
Default: /CREATED.
./FLAG=kulcsszó
./NOFLAG
Meghatározza, hogy nyomtassunk-e fej (flag) lapot. A kulcsszó lehet ALL, ekkor minden file előtt lesz, vagy ONE, s akkor csak az első file előtt (pozíciófüggő módosító).
Default: A várakozási sor /DEFAULT módosítójával megadott érték.
./FORM=típus
A nyomtatási formátumot adja meg. (A rendszerben már definiált formátum adható meg.)
./HOLD
A job a várakozási sorban marad mindaddig, amíg a SET ENTRY/RELEASE, SET ENTRY/NOHOLD parancsok valamelyikével nem engedélyezzük a nyomtatást.
Default: /NOHOLD.
./JOB_COUNT=n
Az egész job n-szer lesz kinyomtatva. (0<n<255).
Default: / JOB_COUNT=1
./MODIFIED
A módosításuk dátuma alapján választja ki az input fileokat. Együtt kell használni a /BEFORE vagy a /SINCE módosítóval.
./NAME=job-név
A job neve; maximum 39 karakter. Ha alfanumerikus jelen, aláhúzáson (_) vagy dollárjelen ($) kívül más is van a névben, akkor idézőjelek ("") közé kell tenni. Ez a név jelenik meg a SHOW QUEUE, SHOW ENTRY parancsok outputjában és ez kerül nyomtatáskor a flaglapra is.
Default: A parancsban levő első (vagy egyetlen) file neve.
./NOTE=string
Egy maximum 255 karakteres szöveg adható meg, amely megjelenik a fej (flag) lapon.
./NOTIFY
A módosítóval értesítést kérhetünk a parancsot kiadó terminálra, amikor a job nyomtatódik, vagy valamilyen okból abortálódik.
Default: /NONOTIFY.
./OPERATOR=string
Egy maximum 255 karakteres string adható meg, amelyet a job végrehajtásakor az operátor kap meg üzenetként.
./PAGES=([alsóhatár,] felsőhatár)
A kinyomtatandó lapok sorszámát határozza meg. Ha alsóhatár nincs, akkor az első laptól nyomtat. A felső határ hiányát ""-vel kell jelezni (pozícionális módosító).
./QUEUE= sornév
A várakozási sor (queue) nevét adja meg, amelybe a job kerül.
Default: /QUEUE= SYS$PRINT
./REMOTE
A filespecifikáció(k) egy vagy több távoli csomópont fileja(i) kell(enek), hogy legyen(ek). A job(ok) a filespecifikáció(k)ban megadott távoli csomópont(ok) SYS$PRINT várakozási sorába kerül(nek) és ott nyomtatódnak ki. Ekkor minden fileból külön job képződik. Csak a file szelekciós módosítókkal (/BACKUP, /BEFORE, /BY_OWNER, /CONFIRM, /CREATED, /EXCLUDE, /EXPIRED, /MODIFIED, /SINCE) kombinálható.
./RESTART
Meghatározza, hogy crash vagy STOP/QUEUE/REQUEUE parancs után újra kezdődjön-e az illető job nyomtatása.
Default: /NORESTART
./SINCE[=idő]
Azokat a fileokat választja ki az input fileok közül, amelyek meghatározott dátuma az adott időpont utáni. Az időpont abszolút vagy kombinált lehet. Az időpont lehet BOOT, LOGIN, TODAY, TOMORROW vagy YESTERDAY is.
Ha a /SINCE-t paraméter nélkül adjuk meg, akkor /SINCE=TODAY az alapértelmezés.
Példák:
$ PRINT /NAME=PASCAL_FORRASOK *.PAS
Kinyomtatja az összes Pascal forrásprogramot.
$ PRINT /PAGE=(12,"") SZOVEG.TXT
Kinyomtatja a SZOVEG.TXT-t a 12. laptól a file végéig.
$ PRINT /OPERATOR="Ne tépd le, lesz folytatás!" - 1.txt, 2.txt
A megadott szöveget a nyomtatás kezdetekor kapja meg az operátor.
$ PRINT /COPIES=2 A.A, B.B
$ PRINT /JOB_COUNT=2 A.A, B.B
Az első esetben először az A.A file két példánya, majd a B.B file két példánya lesz kinyomtatva. A második parancsnál a sorrend: A.A, B.B, A.A, B.B.
11.3.Kötegelt feldolgozás
A parancsfileokat nem csak interaktívan hajthatjuk végre, hanem felügyelet nélkül, tetszőleges időpontban, esetleg a cluster egy másik gépén. Ez a kötegelt (batch) feldolgozás; a megvalósítás a batch várakozási sorokkal lehetséges.
A parancsfile batch végrehajtásakor a terminál I/O helyett fileokat használ a rendszer. A terminálhoz rendelt processz permanens fileok változása a 10.3.3. fejezetben szerepel:
.A SYS$INPUT és a SYS$COMMAND a parancseljárás filehoz rendelődik.
.A SYS$OUTPUT és a SYS$ERROR a batch job napló filejára mutat.
A naplófileban a végrehajtott parancsok is megjelennek, ha nem tiltjuk meg a verifikálást (SET VERIFY, F$VERIFY) – ez különösen hasznos lehet utólagos ellenőrzés és hibakeresés esetén.
A batch várokozási sorokat általában a rendszergazda hozza létre, és a felhasználó a SUBMIT paranccsal küldhet ezekbe parancseljárásokat.
Formája:
$ SUBMIT filespecifikáció [,...]
$ SUBMIT filespecifikáció [+...]
A filespecifikáció default filetípusa a .COM; ha több filet adunk meg, akkor azok egyetlen job-ba lesznek összefűzve, és így kerülnek egy kötegelt várakozási sorba. A job végrehajtásához a rendszer egy önálló processzt hoz létre. A processz környezete (default eszköz és directory, privilégiumok és kvóták stb.) azonos az indító processz default (UAF-ban megadott) környezetével. A job az outputot a saját napló filejába írja. A file default neve: parancs-file-név.LOG, és a SYS$LOGIN directoryba íródik. (A /NAME vagy a /LOG_FILE módosítóval lehet ezen változtatni.)
A filespecifikáció(k)ban a wildcard karakterek (* % - ...) megengedettek. Ha a filespecifikációban csomópont név is szerepel, akkor kötelező a /REMOTE módosító használata.
A parancs végrehajtásakor a rendszer üzenetet küld, amely tartalmazza a job bejegyzés-számát (entry number), a várakozási sort és a job státuszát. A bejegyzés-szám értékét a $ENTRY szimbólum is felveszi, és a processz legközelebbi PRINT vagy SUBMIT parancsáig őrzi.
Bizonyos módosítók megadhatók a SUBMIT után is - akkor az összes filera vonatkoznak; vagy egy filespecifikáció után - s akkor csak arra az egy filera vonatkozik (positional qualifier).
A leggyakrabban használt módosítók:
./AFTER=idő
A megadott időpont után kell végrehajtani a jobot. Ha a megadott idő elérkezik, akkor a job azonnal a várakozási sor elejére kerül. Az idő abszolút vagy kombinált lehet.
Ez a funkció nem alkalmas az időzített futtatásra: lehetséges, hogy a megadott időpontban a sor éppen foglalt vagy más okok miatt nem jut azonnal vezérléshez a job.
Amennyiben az itt megadott időpont már elmúlt, úgy a kapcsolót figyelmen kívül hagyja a rendszer.
./BACKUP
A legutóbbi mentési (backup) dátum alapján választja ki az input fileokat.
Csak a /BEFORE vagy a /SINCE módosítóval együtt használható.
Default: /CREATED
./BEFORE[=idő]
Az adott idő előtti dátumú fileokat választja ki az input fileok közül. Az idő abszolút vagy kombinált formájú lehet. Használható az időnél a BOOT, LOGIN, TODAY, TOMORROW, YESTERDAY kulcsszó is.
Ha a /BEFORE-t paraméter nélkül adjuk meg, akkor /BEFORE=TODAY az alapértelmezés.
./BY_OWNER[=uic]
A tulajdonosi UIC alapján választja ki a file(oka)t a megadott input specifikáció(k)ból.
Ha a /BY_OWNER-t paraméter nélkül adjuk meg, akkor a processz aktuális UIC-a lesz a default.
.CHARACTERISTICS=(karakterisztika[,...])
A job karakterisztikáit állítja be. Amennyiben a sor nem rendelkezik mindazzal a karakterisztikával, amit itt megadunk, akkor a job várakozó állapotba kerül mindaddig, amíg a sor vagy a job karakterisztikái megfelelően nem változnak.
./CONFIRM
Minden egyes file jobba illesztése előtt megerősítést vár.
.Az igenlő válasz YES, TRUE, 1;
.A tagadó NO, FALSE, 0 vagy RETURN lehet.
.Ha a válasz ALL, akkor a további fileokra kérdés nélkül elvégzi,
.QUIT-re vagy CTRL/Z-re pedig befejezi a file jobba illesztését.
./CPUTIME=delta-idő
A batch jobnak maximum a megadott delta-idejű CPU használatot engedélyezünk: Ha ez elfogy, akkor a batch processz hibaüzenettel leáll. A 0, INFINITE, NONE korlátlan CPU használatot jelent.
A tényleges limitet befolyásolja a várakozási sor CPUMAXIMUM értéke valamint a felhasználó UAF-beli kvótája is.
./CREATED
A létrehozásuk dátuma alapján választja ki a végrehajtandó fileo(ka)t. Együtt kell használni a /BEFORE vagy a /SINCE módosítóval.
./DELETE
Végrehajtás után törli a megjelölt file(oka)t (pozíciófüggő módosító).
Default: /NODELETE
./EXCLUDE=(filespec[,...])
Kihagyja a végrehajtandó fileok közül a felsorolt fileokat. Ha egy file van, a () elhagyható.
A filespecifikáció(k)ban a wildcard karakterek (* % ... -) megengedettek.
./EXPIRED
Lejárati idő alapján választja ki a fileokat. Együtt kell használni a /BEFORE vagy a /SINCE módosítóval.
Default: /CREATED.
./HOLD
A job a várakozási sorban marad mindaddig, amíg a SET ENTRY/RELEASE, SET ENTRY/NOHOLD parancsok valamelyikével nem engedélyezzük a végrehajtást.
Default: /NOHOLD.
./KEEP
A parancseljárás végrehajtása után is megőrzi a naplófilet, ha ezt a módosítót adjuk meg.
Default esetben törli (/NOKEEP), nyomtatás nélkül (/NOPRINT) viszont megőrzi a naplófilet.
./LOG_FILE[=filespecifikáció]
./NOLOG_FILE
Meghatározza, hogy készüljön-e napló file, és milyen néven.
Default: /LOG_FILE=job-név.LOG
./MODIFIED
A módosításuk dátuma alapján választja ki a végrehajtandó fileokat. Együtt kell használni a /BEFORE vagy a /SINCE módosítóval.
./NAME=job-név
A job neve; maximum 39 karakter. Ha alfanumerikus jelen, aláhúzáson (_) vagy dollárjelen ($) kívül más is van a névben, akkor idézőjelek közé kell tenni. Ez a név jelenik meg a SHOW QUEUE, SHOW ENTRY parancsok outputjában és ez kerül nyomtatáskor a flaglapra is.
Default: A parancsban levő első (vagy egyetlen) file neve.
./NOTE=string
Egy maximum 255 karakteres szöveg adható meg, amely megjelenik a SHOW QUEUE/FULL parancs outputjában.
./NOTIFY
A módosítóval értesítést kérhetünk a terminálra, amikor a job végrehajtódik, vagy valamilyen okból abortálódik.
Default: /NONOTIFY.
./PARAMETERS= =(paraméter[,...])
A parancseljárásnak maximum 8 paramétert adhatunk át. Ezeket az értékeket a jobban lévő mindegyik file megkapja a P1, ..., P8 szimbólumokban.
Ha csak egy paraméter van, a zárójelek elhagyhatók.
./PRINTER[=output-sor]
A job befejezésekor a naplófile a megadott output sorban kinyomtatódik. A default sor a SYS$PRINT.
Default: /PRINTER. Ez azt jelenti, hogy amennyiben létezik SYS$PRINT, és abba a felhasználónak van joga feladatot küldeni, úgy minden kötegelt futtatásnak az eredménye megjelenik azon a nyomtatón. Lásd még: /KEEP
./QUEUE= sornév
A várakozási sor (queue) nevét adja meg, amelybe a job kerül.
Default: /QUEUE= SYS$BATCH
./REMOTE
A filespecifikáció(k) egy vagy több távoli csomópont fileja(i) kell(enek), hogy legyen(ek). A job(ok) a filespecifikáció(k)ban megadott távoli csomópont(ok) SYS$BATCH várakozási sorába kerül(nek) és ott hajtódnak végre. Ekkor minden fileból külön job képződik. Csak a file szelekciós módosítókkal (/BACKUP, /BEFORE, /BY_OWNER, /CONFIRM, /CREATED, /EXCLUDE, /EXPIRED, /MODIFIED, /SINCE) kombinálható.
./RESTART
Meghatározza, hogy crash vagy STOP/QUEUE/REQUEUE parancs után újra kezdődjön-e az illető job végrehajtása.
Default: /NORESTART
./SINCE[=idő]
Azokat a fileokat választja ki az input fileok közül, amelyek meghatározott dátuma az adott időpont utáni. Az időpont abszolút vagy kombinált lehet. Az időpont lehet BOOT, LOGIN, TODAY, TOMORROW vagy YESTERDAY is.
Ha a /SINCE-t paraméter nélkül adjuk meg, akkor /SINCE=TODAY az alapértelmezés.
Példák:
$ SUBMIT /PARAMETERS=(INFILE,12) /NORPINTER /NOTIFY VAS
Job VAS (queue SYS$BATCH, entry 3) started on queue SYS$BATCH
A VAS.COM parancsfile a SYS$BATCH várakozási sorba kerül VAS job-névvel. A parancsfile végrehajtásakor az indító felhasználó üzenetet kap. A P1 szimbólum értéke INFILE, a P2 szimbólumé pedig 12 lesz a parancsfileban. A naplófile nem lesz kinyomtatva, és nem törlődik.
$ SUBMIT/AFTER=22:30 TRANSLATE
Job TRANSLATE (queue SYS$BATCH, entry 1401) holding until 27-AUG-2003 22:30
A TRANSLATE.COM 22:30 után lesz végrehajtva.
11.4.A jobok kezelése
A várakozási sorokban lévő jobok paraméterei végrehajtás előtt elég széles körben megváltoztathatók (mind az output mind a kötegelt sorok esetén). A már végrehajtódó jobok nem módosíthatók, legfeljebb törölhetjük őket, és újra besorolhatjuk egy sorba.
A job paramétereinek megváltoztatására a
$ SET ENTRY bejegyzés-szám [,...]
parancs szolgál.
A legfontosabb módosítók:
./AFTER=idő
A megadott időpont után kell végrehajtani a jobot. Ha a megadott idő elérkezik (vagy ha már el is múlt a parancs kiadásakor), akkor a job azonnal a várakozási sor elejére kerül. Az idő abszolút vagy kombinált lehet.
.CHARACTERISTICS=(karakterisztika[,...])
A job karakterisztikáit módosítja. Amennyiben a sor nem rendelkezik mindazzal a karakterisztikával, amit itt megadunk, akkor a job várakozó állapotba kerül mindaddig, amíg a sor vagy a job karakterisztikái megfelelően nem változnak..
./COPIES=n
Meghatározza, hogy a nyomtatandó job összes filejából n példány készüljön. (0<n<255). A job összes filejára vonatkozik.
./CPUTIME=delta-idő
A batch jobnak maximum a megadott delta-idejű CPU használatot engedélyezünk: Ha ez elfogy, akkor a batch processz hibaüzenettel leáll. A 0, INFINITE, NONE korlátlan CPU használatot jelent.
A tényleges limitet befolyásolja a várakozási sor CPUMAXIMUM értéke valamint a felhasználó UAF-beli kvótája is.
./FLAG
./NOFLAG
Meghatározza, hogy nyomtassunk-e fej (flag) lapot.
./FORM=típus
A nyomtatási formátumot adja meg. (A rendszerben már definiált formátum adható meg.)
./HOLD
./NOHOLD
A job a várakozási sorban marad mindaddig, amíg a SET ENTRY/RELEASE, SET ENTRY/NOHOLD parancsok valamelyikével nem engedélyezzük a nyomtatást.
./JOB_COUNT=n
Az egész job n-szer lesz kinyomtatva. (0<n<255).
./KEEP
./NOKEEP
A parancseljárás végrehajtása után is megőrzi a naplófilet, ha a /KEEP módosítót adjuk meg.
./LOG_FILE[=filespecifikáció]
./NOLOG_FILE
Meghatározza, hogy készüljön-e napló file, és milyen néven.
Default: /LOG_FILE=job-név.LOG
./NAME=job-név
A job neve; maximum 39 karakter. Ha alfanumerikus jelen, aláhúzáson (_) vagy dollárjelen ($) kívül más is van a névben, akkor idézőjelek közé kell tenni. Ez a név jelenik meg a SHOW QUEUE, SHOW ENTRY parancsok outputjában és ez kerül nyomtatáskor a flaglapra is.
./NODELETE
Megváltoztatja a /DELETE opciót, azaz a job filejai nem törlődnek nyomtatás/végrehajtás után. (A job összes filejára vonatkozik.)
./NOTE=string
Egy maximum 255 karakteres szöveg adható meg, amely megjelenik a fej (flag) lapon.
./NOTIFY
A módosítóval értesítést kérhetünk a terminálra, amikor a job nyomtatódik, vagy valamilyen okból abortálódik.
./OPERATOR=string
Egy maximum 255 karakteres string adható meg, amelyet a job végrehajtásakor az operátor kap meg üzenetként.
./PAGES=([alsóhatár,] felsőhatár)
A kinyomtatandó lapok sorszámát határozza meg. Ha alsóhatár nincs, akkor az első laptól nyomtat. A felső határ hiányát ""-vel kell jelezni. (A job összes filejára vonatkozik.)
./RELEASE
A /HOLD vagy /AFTER módosító miatt várakozó job végrehajtódik.
./REQUEUE=queue-név[:]
A parancsban felsorolt jobok átsorolódnak a megadott várakozási sorba.
./RESTART
Meghatározza, hogy crash vagy STOP/QUEUE/REQUEUE parancs után újra kezdődjön-e az illető job nyomtatása.
Például
$ PRINT/HOLD CSEKK.LIS
Job CSEKK (queue SYS$PRINT, entry 84) holding
$ SET ENTRY 84/RELEASE/JOB_COUNT=3
Az első parancsban létrejött jobot várakoztatjuk – például addig, míg be nem fűzzük a megfelelő papírt a nyomtatóba.
Az aktuális állapotot a
$ SHOW ENTRY [bejegyzés-szám [,...]], [job-név [,...]]
paranccsal tudjuk lekérdezni. Ha nem adunk meg paramétert, akkor vagy az összes, a felhasználó által indított jobot látjuk, vagy a módosítók által meghatározott csoportokat.
A jobok törlését a
$ DELETE /ENTRY =(bejegyzés-szám[,...]) [queue-név[:]]
$ STOP /QUEUE /ENTRY =(bejegyzés-szám[,...]) [queue-név[:]]
parancsok teszik lehetővé. (A várakozási sorokat kezelő parancsok is törölhetnek jobokat, de ezzel itt nem foglalkozunk.)
12. Mentés, helyreállítás
Bármilyen munkát végzünk, a számítógépeken tárolt filejainkról (program, adat, szöveg, képek, stb.) célszerű biztonsági másolatot készíteni, hogy adatvesztés esetén (hardver vagy szoftver hiba, szándékos vagy véletlen rongálás) vissza tudjuk őket állítani. Ugyanígy általános gyakorlat az adatok/fejlesztések több generációjának megőrzése (archiválás), hogy szükség esetén visszaállíthassunk egy korábbi időpontban létezett állapotot.
12.1.Mentési technikák
Kisebb, ad hoc jellegű mentéseket könnyen elvégezhetünk a DCL COPY paranccsal (lásd 10.1.1. fejezet). COPY-val bizonyos esetekben megőrizhetjük a file összes jellemzőjét, szekvenciális filet tetszőleges adathordozóra másolhatunk, akár hálózaton keresztül is. De ez a technika nem menti a directory struktúrát és viszonylag lassú.
A rendszeres, nagy tömegű mentések és archiválások esetén célszerűbb a VMS erre a célra kifejlesztett BACKUP segédprogramját használni.
A BACKUP előnyei:
.Meg tudja őrizni a directory struktúrát.
.A fileok minden attribútumát és védelmi beállítását képes tárolni és mentéskor visszaállítani.
.Lényegesen gyorsabb a COPY-nál (nagyobb pufferrel dolgozik).
.Mindhárom szervezettségű filet képes mágnesszalagra is menteni (save set esetén).
.Külön naplófilet (journal file) készíthet, amely jól használható mentési, archiválási naplóként
. A fileok adatai közé (header) be tudja írni az utolsó sikeres mentés dátumát. Lásd a különböző DCL parancsok /BACKUP módosítóit.
A BACKUP a normál file- és lemezmásoláson túl képes egy speciális szerkezetű, csak a segédprogrammal kezelhető szekvenciális fileba - a backup save set-be - írni a mentést. Ez a forma teszi lehetővé, hogy a directory struktúrát, file attribútumokat, szervezettséget, valamint a lemezszerkezetet is megőrizzünk az adatokon kívül, akár lemezre, akár szalagra kerül a save set.
Ugyancsak fontos, hogy a segédprogram többféle mentéssel, visszatöltéssel kapcsolatos műveletet képes elvégezni - mindig ki tudjuk választani a célunknak leginkább megfelelőt:
.Mentés (backup) - Fileok, directoryk, directory struktúrák mentése save set-be.
.Image mentés (image backup) – A teljes lemezt menti úgy, hogy a mentettel fizikailag vagy logikailag azonos lemez állítható elő a mentés save set felhasználásával.
.Visszatöltés (restore) - Fileok, directoryk, directory struktúrák visszatöltése save set-ből.
.Image visszaállítás (image restore) – A mentés save set-ből a mentettel azonos lemezt állít elő. (A lemez paraméterek esetleg változhatnak.)
.Image másolás (image copy)– Egy teljes lemezt átmásol egy másik lemezre. (Az output fizikailag vagy logikailag egyenértékű lesz az inputtal.)
.Növekmény (inkrementális) mentés (incremental backup) – Csak azokat a fileokat menti, melyek a legutóbbi olyan mentés után keletkeztek vagy módosultak, amely a file headerbe beírta a sikeres mentés dátumát.
.Növekmény (inkrementális) visszaállítás (incremental restore) – Az inkrementális mentés filejait állítja vissza.
.File másolás (file copy) – Fileok, directoryk, directory struktúrák másolása.
.Image hasonlítás (image compare) – Két teljes kötet tartalmát hasonlítja össze.
.File hasonlítás (file compare) - Fileok, directoryk, directory struktúrák blokkonkénti hasonlítása fileokkal, directorykkal, directory struktúrákkal vagy egy save set-tel.
.Szelektív művelet (selective operation) – Valamilyen kritérium (dátum, filenév, típus, verzió, tulajdonos) alapján kiválasztott fileokat ment vagy állít vissza.
.Listázás - A save set vagy a naplófile tartalmának listázása.
.Törlés – A sikeresen elmentett fileokat (kérés esetén) letörli.
12.2.A BACKUP segédprogram
A BACKUP parancs általános formája:
$ BACKUP input-specifikáció [output-specifikáció]
A BACKUP legtöbb módosítója pozícionális, azaz más jelentésű vagy értelmetlen, ha nem megfelelő helyen (parancsnév, input vagy output paraméter után) szerepeltetjük. Ezért a legtöbb DCL paranccsal szemben itt nagyon fontos figyelni az általunk leírt parancs szerkezetére!
A megengedett paraméterek:
.Input specifikáció
o.file: wildcard (* %) és felsorolás megengedett; alapértelmezésben minden verzió
o.directory struktúra: wildcard (* % - ...) és felsorolás megengedett
o.lemez
o.save set: lemezen vagy szalagon, wildcard (* %) a file nevében megengedett
.Output specifikáció
o.file: wildcard (*) megengedett
o.directory struktúra: wildcard (* ...) megengedett
o.lemez
o.save set: lemezen vagy szalagon
12.2.1. A BACKUP formái
A 12.1. fejezetben leírt backup műveleteket – a szelektív művelet kivételével - a parancsmódosítók határozzák meg, ezek szerepelnek a fejezetben. Minden általános parancsot egy vagy több példa követ.
1. Mentés:
$ BACKUP file-spec save-set-spec
$ BACKUP $1$DUA1:[USER.FODOR...] –
$2$DUA2:[MENTES]030912.BCK/SAVE_SET
$ BACKUP $1$DUA1:[USER.FODOR...] –
$1$MUA0:FODOR030912.BCK/SAVE_SET
$ BACKUP $1$DUA1:[USER.FODOR...], -
$1$DUA2:[USER.FODOR] –
$1$MUA0:FODOR030912.BCK/SAVE_SET
Az első példában lemezre mentünk egy directory részfát, a másodikban ugyanazt szalagra, a harmadikban pedig a directory részfán kívül még egy directory tartalma kerül a save set-be.
Lemez esetén kötelező a /SAVE_SET módosítót használni, szalag esetén viszont elhagyható.
2. Image mentés (logikailag – Files-11 struktúra szerint - azonos a másolat):
$ BACKUP/IMAGE device-spec save-set-spec
$ BACKUP/IMAGE $PTEAX$DUA0: -
$1$MUA0:VMS030912.BCK/SAVE_SET
A szalagra írt save set-ből az input lemezzel logikailag azonos lemez állítható elő egy visszatöltéssel. Ezt a formát használhatjuk rendszerlemez mentése esetén, vagy akkor, ha egy lemez töredezettségét akarjuk megszüntetni. (Visszatöltés után a fileok folytonosak lesznek, és a szabad terület egyetlen vagy kevesebb darabból fog állni.)
A /SAVE_SET módosító itt elhagyható, mert szalagon hozzuk létre az állományt.
3. Image másolás (logikailag azonos az input és output):
$ BACKUP/IMAGE input-device-spec output-device-spec
$ BACKUP/IMAGE $PTEAX$DUA0: -
$PTEAX$DUB0:
Az output lemez az input lemezzel logikailag azonos lemez lesz. Ezt a formát használhatjuk rendszerlemez mentése esetén, vagy akkor, ha egy lemez töredezettségét akarjuk megszüntetni. (Az output lemezen a fileok folytonosak lesznek, és a szabad terület egyetlen vagy kevesebb darabból fog állni.) Miután ez a forma az összes lemezvezérlő információt is menti, így az output lemeznek ugyanaz lesz a címkéje (label).
4. Image fizikai másolás (blokkonként azonos az input és output):
$ BACKUP/PHYSICAL input-device-spec output-device-spec
$ BACKUP/PHYSICAL $PTEAX$DUA0: -
$PTEAX$DUB0:
Az output lemez az input lemezzel blokkonként azonos lemez lesz. Természetesen nem használható kisebb output diszk esetén.
5. Visszatöltés:
$ BACKUP save-set-spec file-spec
$ BACKUP $1$MUA0:FODOR030912.BCK/SAVE_SET -
$1$DUA1:[*...]
$ BACKUP $1$MUA0:FODOR030912.BCK/SAVE_SET -
USER:[*...]
$ BACKUP $1$MUA0:FODOR030912.BCK/SAVE_SET -
/SELECT=[USER.FODOR...] -
USER:[USER.FODOR...]
$ BACKUP $1$MUA0:FODOR030912.BCK/SAVE_SET -
$1$DUA1:[USER.FODORMENT...]
$ BACKUP $1$MUA0:FODOR030912.BCK/SAVE_SET -
$1$DUA1:[USER.FODORMENT]
$ BACKUP $1$MUA0:FODOR030912.BCK/SAVE_SET -
USER:
Az első és második példában a directory struktúra a mentéskori input szerkezettel lesz azonos (függetlenül attól, hogy fizikai vagy logikai nevet használunk a lemezre). Ugyanezt az eredményt érhetjük el a /SELECT módosító megfelelő használatával a harmadik esetben.
A 4. parancsban a [USER.FODORMENT] directory alatt jön létre az input szerkezettel azonos directory fa.
Az ötödik példában az összes, a save set-ben lévő file egyetlen directoryba kerül. Ha azonos nevű, típusú, verziójú fileok többször is előfordulnak, akkor a felülírásra vonatkozó módosítók (/NEW_VERSION, /OVERLAY, /REPLACE) döntik el, hogy mely file(ok) és milyen verzióval másolódnak az output directoryba.
Az utolsó parancs esetén sem őrződik meg a directory struktúra, a fileok a processz default directoryjába kerülnek.
6. Image visszatöltés:
$ BACKUP/IMAGE save-set-spec device-spec
$ BACKUP/IMAGE $1$MUA0:VMS030912.BCK/SAVE_SET -
$PTEAX$DUA0:
Az output lemez a save set-ben lévő mentéssel logikailag - Files-11 struktúra szerint – azonos lesz. A fileok adatblokkjai folytonosan helyezkednek el; ha a save set inputja bootolható volt (operációs rendszer lemeze), akkor az output is bootolható lesz. Ezt a műveletet a lemez töredezettség megszüntetésére is használhatjuk.
7. Image fizikai visszatöltés:
$ BACKUP/PHYSICAL save-set-spec device-spec
$ BACKUP/IMAGE/PHYSICAL -
$1$MUA0:VMS030912.BCK/SAVE_SET -
$PTEAX$DUA0:
Az output lemez a save set-ben lévő mentéssel blokkonként azonos lesz – akkor is, ha az output lemezen valamely blokk hibás. VMS-ben ismeretlen struktúrájú lemezt is visszatölthetünk ilyen módon.
8. File másolás:
$ BACKUP file-spec file-spec
$ BACKUP TANF:[USER.XXX] TANF:[USER.YYY]
$ BACKUP NAGY_FILE.DAT $1$DKA300:[USER.FODOR]*.MENT
$ BACKUP DUA0:[TANFOLYAM...] -
DUB0:[TANFMENT...] /BY_OWNER=ORIGIN
Az első parancs egy aldirectory tartalmát egy másikba másolja, a második egyetlen filet másol, és az output NAGY_FILE.MENT lesz. Ezeket a műveleteket a COPY-val is végre tudnánk hajtani, de a BACKUP gyorsabb (nagyobb puffert használ), és a nem létező directoryt automatikusan létrehozza.
A harmadik példa egy directory struktúrát egy másik lemez hasonló struktúrájába másolja át, a [TANF_MENT.TANFOLYAM] gyökértől kezdődően, miközben megőrzi a fileok tulajdonosát.
9. File hasonlítás:
$ BACKUP/COMPARE file-spec file-spec
$ BACKUP/COMPARE DUA1:[USER.A]*.EXE;0 DUA1:[USER.B]*.EXE;0
$ BACKUP/COMPARE DUA1:[USER.A...] DUA1:[MENTES.A_USER...]
Mindkét esetben a paraméterekben szereplő fileok blokkos hasonlítása történik, az output az eltérő fileok nevét és a különbség blokkszámát tartalmazza.
10. File hasonlítás a save set filejaival:
$ BACKUP/COMPARE save-set-spec file-spec
$ BACKUP/COMPARE -
MUA0:MENT030830.BCK/SAVE_SET USER:[TANF...]
A save set és a directory struktúra filejait hasonlítja össze a parancs.
11. Image hasonlítás (egy mentés save set és egy lemez Files-11 struktúrája alapján logikai hasonlítás):
$ BACKUP/COMPARE/IMAGE save-set-spec device-spec
$ BACKUP/COMPARE/IMAGE -
DUA2:SYSMENT030830.BCK/SAVE_SET DUA0:
Ebben az esetben nem szerepelhet filespecifikáció az output paraméterben.
12. Image hasonlítás:
$ BACKUP/COMPARE/IMAGE device-spec device-spec
$ BACKUP/COMPARE/IMAGE $5$DUA12: $5$DUA10:
A két lemez Files-11 struktúrája alapján történik a hasonlítás.
13. Fizikai hasonlítás: (két lemez blokkonkénti hasonlítása):
$ BACKUP/COMPARE/PHYSICAL device-spec device-spec
$ BACKUP/COMPARE/PHYSICAL $5$DUA12: $5$DUA10:
Ebben a parancsban a két lemeznek nem muszáj Files-11 formátumúnak lenni.
14. Save set tartalmának a listázása a SYS$OUTPUT-ra vagy fileba (kombinálható más műveletekkel a fentiek közül):
$ BACKUP/LIST[=file-spec] save-set-spec
$ BACKUP/LIST MUA0:
$ BACKUP/LIST=TARTALOM/REWIND MUA0:*
$ BACKUP/LIST/FULL [.MENTES]FORRAS.BCK/SAVE_SET
Az első parancs annak a save setnek a tartalomjegyzékét írja a képernyőre, ahol a szalag áll, a második pedig a szalagon lévő összes save set tartalomjegyzékét a TARTALOM.LIS fileba írja.
A harmadik példa egy lemezes save set filejairól megőrzött minden információt írja a képernyőre.
15. A mentés során az események bejegyzése a mentési naplóba:
$ BACKUP/JOURNAL[=file-spec] file-spec save-set-spec
$ BACKUP/JOURNAL=BACKUP_NAPLO [...] MIA2:MENT030911.BCK
$ BACKUP/JOURNAL/IMAGE DRA2: MIA2:SYS030911.BCK
Az első példa a default directory BACKUP_NAPLO.BJL filejába írja a mentési naplót, a második a BACKUP.BJL nevet használja; a naplófileba a mentett fileok listája kerül. A Backup segédprogram mindkét esetben vagy a már meglévő naplófilehoz fűzi hozzá a mentés eseményeit, vagy ha még nincs ilyen, akkor létrehozza a naplófilet.
16. Mentési napló tartalmának a listázása a SYS$OUTPUT-ra vagy fileba:
$ BACKUP/JOURNAL[=file-spec]/LIST[=file-spec]
$ BACKUP/JOURNAL=BACKUP_NAPLO/LIST
$ BACKUP/JOURNAL=BACKUP.BJL/LIST=SYSMENT
Ezek a parancsok az előző példákban szereplő naplófileok tartalmát listázzák (mentés nem történik).
12.2.2.A fontosabb módosítók
A módosítókat a helyük szerint csoportosítjuk, mert szigorúan a megfelelő helyen kell megadni őket.
A 12.2.1. fejezetben szereplő, a Backup funkciókat meghatározó /COMPARE, /IMAGE, /JOURNAL, /LIST, /PHYSICAL módosítók parancsmódosítók, a /SELECT input save set módosító, a /SAVE_SET pozícionális.
1. Parancsmódosítók
/INCREMENTAL
Teljes mentés után csak a változások mentése.
/LOG
A Backup a SYS$OUTPUT-ra írja, hogy mely fileokon és milyen műveletet hajt éppen végre.
/RECORD
A Backup sikeres másolás vagy mentés után minden érintett input file fejlécébe (header) beírja a feldolgozás dátumát (backup dátum).
??
/VERIFY
A mentés vagy másolás ellenőrzéssel történik: A Backup a másolt állományt visszaolvassa és összehasonlítja az eredetivel. Célszerű minden fontos mentéskor, visszaállításkor használni.
2. Inputmódosítók
/BEFORE=időpont
/BACKUP
/CREATED
/EXPIRED
/MODIFIED
A Backup azokat a fileokat másolja vagy menti, amelyek megfelelő dátuma a megadott időpont előtti. Időpontként a BACKUP, TODAY, YESTERDAY, TOMORROW is megadható.
Ha nem adunk meg dátum mezőre vonatkozó módosítót, akkor a /MODIFIED a default.
/BY_OWNER[=[uic]]
Csak azok a fileok szerepelnek a Backup műveletben, amelyek tulajdonosa a megadott UIC. Ha nem adunk meg UIC-ot, akkor a processz UIC-a a default. A /BY_OWNER szerepel outputmódosítóként is, más jelentéssel.
/CONFIRM
A Backup minden input filera rákérdez, mielőtt mentené vagy másolná őket.
/EXCLUDE=(filespecifikáció [,...])
A felsorolt fileok kimaradnak a mentésből vagy másolásból. A specifikáció nem tartalmazhat lemeznevet vagy relatív verziószámot; a wildcard karakterek (* % - ...) megengedettek.
/SELECT=(filespecifikáció [,...])
Csak save set esetén adható meg: A felsorolt fileokat állítja csak vissza a save setből. A specifikáció nem tartalmazhat relatív verziószámot; a wildcard karakterek (* % - ...) megengedettek.
/SINCE=[időpont]
/BACKUP
/CREATED
/EXPIRED
/MODIFIED
A Backup azokat a fileokat másolja vagy menti, amelyek megfelelő dátuma a megadott időpont utáni. Időpontként a BACKUP, TODAY, YESTERDAY, TOMORROW is megadható.
Az időpont alapértelmezése TODAY.
Ha nem adunk meg dátum mezőre vonatkozó módosítót, akkor a /MODIFIED a default.
3. Outputmódosítók
/BY_OWNER=opció
Akkor használható, ha az output paraméter filespecifikáció, és a keletkező fileok tulajdonosáról rendelkezik az opció szerint:
.DEFAULT – A parancsot végrehajtó processz UIC-a lesz a tulajdonos.
.ORIGINAL – Az input fileok tulajdonosát kapják az output fileok is.
.PARENT – A keletkező fileok annak/azoknak a directory(k)nak a tulajdonosát kapják meg, amely(ek)be beíródnak.
.[uic] – Az output fileok tulajdonosa a megadott UIC lesz.
Ha image vagy inkrementális visszatöltés történik, akkor az ORIGINAL opció, egyébként pedig a DEFAULT opció van érvényben ha a /BY_OWNER módosító nem szerepel.
A /BY_OWNER szerepel outputmódosítóként is, más jelentéssel.
/BY_OWNER=uic /SAVE_SET
Akkor használható, ha az output paraméter save set, és annak tulajdonosát adjuk meg az UIC-cal. Ha a módosítót nem használjuk, akkor a parancsot végrehajtó processz UIC-a lesz a save set tulajdonosa.
/NEW_VERSION
Ha az output directoryban már létezik a megadott nevű és típusú file azonos vagy a másoltnál nagyobb verziója, akkor a létrejövő file verziója a directoryban lévő legnagyobbnál eggyel nagyobb lesz. Mivel ebben az esetben a fileok verziószáma változhat, a /VERIFY módosító használata kiszámíthatatlan eredményű lesz, ezért a Digital nem javasolja a két módosító együttes használatát.
Másolás vagy helyreállítás során a Backup a fileokat csökkenő verziószám szerint dolgozza fel, de /NEW_VERSION esetén növekvő verzióval hozza létre. Azaz a verziószámok invertálódnak, ha azonos névvel és típussal több verziót másolunk a fenti módosítóval!
/OVERLAY
Ha az output directoryban már létezik a megadott nevű és típusú file azonos verziója, akkor a Backup felülírja azt. A file fizikai helye nem változik a lemezen, legfeljebb ha az input hosszabb, mint az eddig létező file, akkor a Backup további blokkokat allokál neki.
/REPLACE
Ha az input specifikációval azonos file már létezik az output lemezen, akkor a Backup először másolja vagy visszaállítja az inputot, majd törli a korábban létezett filet.
Ha a /NEW_VERSION, /OVERLAY, /REPLACE módosítók egyikét sem használjuk a parancsban, és a másolandó vagy visszaállítandó file már létezik a directoryban, akkor a Backup hibaüzenetet küld és kihagyja a filet.
12.2.3.Mentési és visszatöltési megoldások
1.Teljes majd inkrementális mentés
Először teljes mentés végzünk a lemezre:
$ BACKUP /RECORD /IMAGE /VERIFY -
DISK$SAJAT $1$MUA0:MENTES.BCK
A további mentések csak azokat a fileokat érintik, amelyek a legutóbbi mentés óta módosultak:
$ BACKUP /RECORD /SINCE=BACKUP /VERIFY -
DISK$SAJAT $1$MUA0:INC_HETFO.BCK
$ BACKUP /RECORD/SINCE=BACKUP /VERIFY -
DISK$SAJAT $1$MUA0:INC_KEDD.BCK
. . .
$ BACKUP /RECORD/SINCE=BACKUP /VERIFY -
DISK$SAJAT $1$MUA0:INC_PENTEK.BCK
2.A fenti mentés visszaállítása
Először a teljes mentést kell visszatölteni:
$ MOUNT /FOREIGN DISK$UJ
$ BACKUP /IMAGE /VERIFY $1$MUA0:MENTES.BCK DISK$UJ
$ DISMOUNT DISK$UJ
Utána fordított sorrendben kell visszatölteni az inkrementális mentéseket:
$ MOUNT DISK$UJ <regi_cimke>
$ BACKUP /INCREMENTAL /VERIFY -
$1$MUA0:INC_PENTEK.BCK DISK$UJ
$ BACKUP /INCREMENTAL /VERIFY -
$1$MUA0:INC_CSUT.BCK DISK$UJ
. . .
$ BACKUP /INCREMENTAL /VERIFY -
$1$MUA0:INC_HETFO.BCK DISK$UJ
3.Egy directory struktúrából csak az adott tulajdonosú fileokat mentjük:
$ BACKUP [MESTER...]/BY_OWNER=[202,12] -
FZVAX$MUA0:MESTER_12.BCK/LABEL=TAPE01
4.Az output fileok a megadott tulajdonosé lesznek:
$ BACKUP DBA2:ACCOUNTS.BCK/SAVE_SET -
[OPER12...]/BY_OWNER=[SYS,ACNT]
5. Az input save set [FODOR] directoryjának és annak összes aldirectoryjának a filejai visszatöltődnek a DUA0: lemez megfelelő directoryjaiba. Ha azonos nevű, típusú és verziójú fileok már voltak az outputon, akkor azokból előbb új verzió keletkezik, majd a régi törlődik:
$ BACKUP MUA0:MENTES.BCK/SELECT=[FODOR...] -
DUA0:[FODOR...]/REPLACE
Irodalomjegyzék
Az OpenVMS Version 7.3 Documentation CD-ről:
Guide to OpenVMS File Applications
Guide to the DEC Text Processing Utility
OpenVMS Cluster Systems
OpenVMS DCL Dictionary
OpenVMS Guide to System Security
OpenVMS Record Management Services Reference Manual
OpenVMS Record Management Utilities Reference Manual
OpenVMS System Manager's Manual
OpenVMS User's Manual
DECnet-Plus for OpenVMS Introduction and User's Guide
DECnet for OpenVMS Guide to Networking
DECnet for OpenVMS Networking Manual
DECnet for OpenVMS Network Management Utilities
Compaq TCP/IP Services for OpenVMS Management
DIGITAL TCP/IP Services for OpenVMS User's Guide
OpenVMS DIGITAL Standard Runoff Reference Manual
OpenVMS EDT Reference Manual
OpenVMS Glossary
OpenVMS Software Overview
POLYCENTER Software Installation Utility User's Guide
John Robert Wisniewski: Linux & OpenVMS Interoperability, Digital Press 2003.
McAndrew – Scheffy – Sherlock: OpenVMS and Windows NT Integration for Dummies, IDG Books Worldwide, 2000.
Varga Lívia: VAX/VMS rendszergazdák kézikönyve, Távközlési Kiadó, 1995.
Fodor Zsuzsa: VMS operációs rendszer felhasználói kézikönyv 5.5 verzió, Távközlési Kiadó, 1994.
Internetes hivatkozások, hasznos oldalak
http://h71000.www7.hp.com/doc/
http://h71000.www7.hp.com/openvms/
http://h71000.www7.hp.com/openvms/journal/index.htmll
http://h71000.www7.hp.com/success-stories.html
http://h71000.www7.hp.com/wizard/faq/vmsfaq_001.html
http://h71000.www7.hp.com/openvms/products/clusters/clusters.pdf
http://h71000.www7.hp.com/solutions/government/coe/certification_programs.html
http://www.hp.com/products1/evolution/customertimes/openvms.html
http://www.hp.com/products1/evolution/alpha_retaintrust/openvms/openvms_move.htm
http://research.microsoft.com/~gbell/Digital/timeline/dechistory.htm
http://www.oooovms.dyndns.org/
http://www.hp.hu/rendezveny/DECUS/