CMS parancsok

Interaktív használat

A VM (és azon belül a CMS) egy kifejezetten interaktív használatra kifejlasztett operációs rendszer. Alaphelyzetben csak interaktív módon tudunk programokat fejleszteni és futtatni. Természetesen kötegelt feldolgozásra is van lehetőség, ehhez azonban vagy a CMSBATCH, vagy a VMBATCH (vagy más) alrendszerek valamelyikét kell használni.

A VM számára egy könnyen elsajátítható, ám igen sok utasítást és paramétert tartalmazó parancsnyelven lehet megfogalmazni a munkát. Ez a parancsnyelv CP, CMS és XEDIT parancsokból áll.

A CP parancsok hatásköre csak a virtuális hardver konfigurációra terjed ki. A programjaink tényleges futtatását CMS paranccsal kezdeményezhetjük.

A CMS parancsok használata

A CMS parancsok szintaktikája egy kivétellel megegyezik a CP parancsokéval. A kivétel az, hogy a CMS parancsok esetén az utasítások opcióit egy nyitó zárójellel kell elkülöníteni az egyéb paraméterektől:

cmscmd param1 param2 ... ( opt1 opt2

Néhány CMS parancs:

ACcess dirid fm

ACcess vdev fm (opts

ACcess (NOPROF

Az első formát az SFS használata esetén adhatjuk ki egy directory elérésére.

A második formát a minidiszkek elérésére használhatjuk, míg a harmadikat IPL CMS után, ha nem akarjuk a PROFILE EXEC-et végrehajtani.

COMPARE fid1 fid2

Ezzel a paranccsal két file-t hasonlíthatunk össze.

CONWAIT

Ez a parancs addig várakozik, míg az összes várakozó üzenet ki nem került a konzolra.

COPYfile fid1 fid2 (opts

File-ok másolására szolgál. A leggyakrabban használt opciói:

PACK/UNPack Tömörít/visszaalakít

OLDDate A régi dátumot hagyja meg

REPlace Felülírja a létező file-t is.

DISK DUMP fid

Ezzel a paranccsal kivihetünk egy CMS file-t a SPOOL-ba. Ez a parancs bármilyen CMS file-t képes kezelni.

DISK LOAD

Ez a parancs betölti az RDR-ünkön lévő DISK DUMP formátumú file-t az "A" lemezünkre. A file azonosítóját a spool file-ból veszi.

ERASE fid

Ezzel törölhetünk ki egy CMS file-t. A kitörölt file véglegesen elveszik!

EXECIO lines DISKR fid [lnum] ([opt1] [opt2]

DISKW fid [lnum] [recfm lrecl] ([opt1] [opt3]

CP ([opt2] [opt4] [opt3]

Ezt a parancsot csak REXX-ből (EXEC2-ből) használhatjuk, mégpedig CMS file-ok beolvasására és kiirására. A művelet vagy a stack-ból/ba, vagy egy REXX változóból/ba megy végbe. Az EXECIO-nak a fentieken kívül még igen sok paramétere van, de ezzel itt nem foglalkozunk. A fenti paraméterek jelentése:

DISKR Beolvasás

DISKW Kiírás

CP CP parancsot adunk ki.

lines A művelet által beolvasott/kiírt sorok száma.

fid fn ft fm

lnum Egy sor száma a file-ban, itt keződik a művelet.

recfm Rekordformátum (F, V)

lrecl Rekordhossz

opt1 FINIS A file lezárását kérjük.

opt2 STEm v. Egy REXX törzsváltozót definiál. Kiíráskor ebből a változóból (indexelve v.1, v.2,...) iródik ki a file, míg beolvasásnál ebbe kerül bele. A beolvasott sorok száma ekkor a v.0 összetett változóba kerül

opt3 STring string A kiírandó sort tartalmazza. CP paraméter esetén a CP parancsot. Amennyiben az ST paramétert használjuk, akkor annak az utolsónak kell lennie a sorban.

opt4 BUFfer bytes A CP output puffer méretét definiálja byte-okban. Akkor kell megadni, ha a CP parancs eredménye igen hosszú, pl. az egész spool tartalomjegyzékét lekérdezzük, stb. Alapértelmezés: 4096.

FILEList [fid]

Full-screen tartalomjegyzéket ad. A file azonosító (fid) tartalmazhat * karaktereket is.

FORMAT vaddr fm ([BLK nnnK]|[LABEL]

Megformáz egy minidiszket. "LABEL" megadása esetén csak a diszk cimkéjét írja át, de nem törli a tartalmát.

vaddr A minidiszk virtuális címe.

fm File mód.

BLK nnnK 1K, 2K, 4K: a diszk blokkméretét adhatjuk meg.

GLOBAL TXTLIB textlibs

MACLIB maclibs

LOADLIB loadlibs

Ezzel a paranccsal különböző könyvtárakat jelölhetünk ki. A kijelölt könyvtárak elérhetővé válnak a fordítóprogramok vagy a betöltőprogram számára.

Help compname

Kiírja a megadott parancs használati módját.

Listfile [fid] [(EXEC [ARGS]]

Kilistázza a terminálra vagy a CMS EXEC nevű fileÄba (EXEC megadása esetén) a fid-nek megfelelő nevű file-ok neveit (azaz a minidiszk tartalomjegyzékét). Ha nem adjuk meg a fid paramétert, akkor az "A" diszk tartalomjegyzékét listázza. A fid paraméter * -okat is tartalmazhat. A CMS EXEC file a következőképpen néz ki:

&1 &2 fn ft fm

Ha megadjuk az ARGS paramétert is:

&1 &2 fn ft fm &3 &4 &5 &6...

LOAD fn [START]

Betölti a fn TEXT nevű file-t a tárba, és a START megadása esetén el is indítja azt. A betöltéskor megpróbálja feloldani az összes külső hivatkozást. A feloldást a tárból, vagy másik TEXT file-ból, vagy a GLOBAL TXTLIB-el definiált könyvtárból végzi.

PEEK [spid] [(FOR nnn]

Ezzel a paranccsal meg lehet nézni egy RDR spool file tartalmát anélkül, hogy a file kitörlődne a spool-bol.

Alapértelmezés szerint csak az első 200 sort lehet vele megnézni. Ha ez nem elég, akkor adjuk meg a FOR paramétert. nnn helyére kell írni a sorok számát, vagy *-ot, ha az egész file-t meg akarjuk tekinteni.

PUNCH fid [(NOH]

PRINT fid

E parancsokkal egy CMS file-t (fid) tudunk elküldeni a virtuális lyukasztóra, vagy nyomtatóra. Ha megadjuk a NOH paramétert a PUNCH-nál, akkor csak a file tartalma kerül ki a lyukasztóra, ha nem adjuk meg, akkor még egy fejléc is.

RECEIVE [spid]

Ezzel egy másik felhasználó (vagy saját magunk) által hozzánk küldött CMS file-okat. A CMS file-nak a RDRÄünkön kell lennie.

Rename fid1 fid2

Ezzel a paranccsal átnezvezheünk egy CMS file-t más névre.

SENDFile fid [TO] uid [AT node]

SF

Elküldi a fid azonosítójú file-t az uid virtuális gép RDR-ére (a spool-ba). Az uid-nak nem kell ugyanebben a rendszerben lennie (node).

Példa: Hogyan készítsünk el és futtassunk le egy programot CMS-ben?

1. A forrásnyelvű programot az XEDIT editorral készithetjük el. Ajánlatos a file típusát a használt programozási nyelvnek megfelelően választani. Pl.: FORTRAN, ASSEMBLE, PLIOPT, PASCAL, ADA, stb.

2. Az elkészült programot a megfelelő fordítóprogrammal lefordítjuk. Pl.: FORTVS2 fn ( OPT(3)

3. Ha a forditóprogram lefordította a forrásprogramot, akkor ki kell jelölni a szerkesztő/betöltő által használt könyvtárakat. Ezt a GLOBAL paranccsal tehetjük meg:

GLOBAL TXTLIB VSF2FORT VSF2MATH stb.

GLOBAL LOADLIB VSF2LOAD stb.

4. Ezután definiáljuk a futtáshoz használt file-okat:

FILEDEF ddnév definíció

5. Ekkor betölthetjük és elindíthatjuk a programot:

LOAD fn (START

A fenti procedurát gyorsíthatjuk, ha készítünk hozzá egy kis REXX programot. Ez pl. az alábbi lehet:

/*    fordit,  futtat  */
arg  fn  '('  fdefs
 
/*  fdefs:  pl.    06=term,05=disk  fn  ft  fm  */
 
'FORTVS2'  fn  '(  OPT(3)'
if  rc<>0  then  exit  rc
 
'GLOBAL  TXTLIB  VSF2FORT  VSF2MATH'
'GLOBAL  LOADLIB  VSF2LOAD'
 
do  while  fdefs^=''
	parse  value  fdefs  with  fileid  '='  filedef  ','  fdefs
	'FILEDEF'  fileid  filedef
	if  rc<>0  then  exit  rc
	end
 
'LOAD'  fn  '(START'

A Shared File System használata

A CMS 6.0 -ban lehetséges a felhasználói file-ok ún. osztott használata. Ezt a Shared File System valósítja meg. A felhasználó adatai ilyenkor egy vagy több ún. file pool-ban helyezkednek el. A file pool-ban az adatokhoz ugyanazon információk tartoznak, mint a minidiszkeken lévőkhöz.

A file-ok elhelyezése directory struktúrában valósul meg. A felhasználó által használható file pool nevét a rendszeradminisztrátor határozza meg.

Egy adott felhasználó fő directory-jának a neve megegyezik a felhasználó VM azonosítójával.

A file pool használatát a

SET FILEPOOL vmsysu:

utasítással kell elkezdeni. A "vmsysu" egy előre definiált file pool név. Amennyiben a rendszeradminisztrátor nem ebbe a file pool-ba definiált minket, akkor kérdezzük meg, hogy mi annak a neve. A file pool nevének ismerete nélkül nem tudjuk a SFS-et használni. A definiált alkönyvtárakat a DIRLIST paranccsal tudjuk kilistázni. Formája:

DIRLIST [dirid]

Ahol a "dirid" a megtekintendő könyvtár neve. Alapértelmezése: USERID.

A rendszeradminisztrátor kijelölheti, hogy mely felhasználó kapjon minidiszket, és/vagy file pool területet. Ha a felhasználónak nincs minidiszkje, akkor az alábbi műveletet nem kell elvégeznie, mert a rendszer hozzárendeli az "A" filemódot az adott felhasználó fő directory-jához.

A használni kívánt directory-t ("könyvtárat") az ACCESS paranccsal kell használhatóvá tenni. Pl. rendeljük hozzá a "C" azonosítót a fő directoryÄhoz:

ACCess userid. C

vagy:

ACCess . C

A "userid" alapértelmezés, ezért nem kell kiírni. Ezután már ugyanúgy használhatjuk a "C" filemód-al definiált területet, mintha egy minidiszk lenne az.

A felhasználó definiálhat alkönyvtárakat is, maximálisan 8 szintig egymásba ágyazva. Ezzel a módszerrel egy igen változatos faszerkezetet lehet létrehozni. Az alkönyvtárakat a

CREate DIRectory dirnév

paranccsal hozhatjuk létre.

Például hozzunk létre két aldirectory-t: CREate DIRectory .PROBA

CREate DIRectory .PROBA.MASIK

Az eredményt a: DIRList paranccsal nézhetjük meg.

A DIRLIST használata.

A DIRLIST parancson belül további parancsokat adhatunk ki, melyek az adott alkönyvtárra vonatkoznak. Használható parancsok:

ACCESS - az adott directory elérésére

ERASE - az adott directory letörlésére (A fő directory-t nem lehet törölni!)

RELEASE - az ACCESS megszüntetése

RENAME - directory átnevezése

Például: Az előző DIRLIST-ben adjuk ki a CMD mező alatti második sorban, hogy:

ACCESS / B

Ügyeljünk arra, hogy a / jel előtt is, és után is legyen egy szóköz! Ha ezután kilépünk a DIRLIST-ből (F3), akkor átmásolhatunk az új filemódra néhány file-t. Pl:

COPY FILELIST * S = = B

Az access-ált filemódokat a

Query ACCESSED

paranccsal tudjuk lekérdezni. E parancs megadja, hogy a file módok melyik minidiszkhez vagy alkönyvtárhoz vannak hozzárendelve.

Hogyan használhatjuk a létrehozott alkönyvtárainkat, vagy fileÄjainkat osztott módban?

Bármelyik könyvtár vagy az abban lévő file-ok használhatóak osztott módon. Ez azt jelenti, hogy egyidejűleg több felhasználó tudja a file-t olvasni, vagy automatikusan felváltva írni, és több felhasználó tud egyszerre ugyanabba a directory-ba irni. Ezeket a funkciókat minidiszkkel nem lehet elérni.

E funkciókhoz a tulajdonosnak engedélyezni kell az adott directory vagy file használatát. Ezt a következőképpen teheti meg.

Directory engedélyezés:

GRAnt AUThority dirid TO userid (newauth

File engedélyezés:

GRAnt AUThority fn ft dirid TO userid (newauth

A "fn" és az "ft" helyére a kívánt file neve és típusa kerül.

A "dirid" helyére a directory azonosítóját kell írni, amelyikben a file található.

A "userid" jelzi azon virtuális gép azonosítóját, aki az engedélyt kapja. Ha a "userid" helyére PUBLIC-ot írunk, akkor az engedély minden felhasználóra vonatkozik.

Az "auth" értéke kétfére lehet:

READ - a file/directory csak olvasható

WRITE - a file/directory írható/olvasható.

Egy adott file használatához az azt tartalmazó directory használatát is engedélyezni kell. A WRITE authority a directory esetén azt jelenti, hogy a felhasználó új file-okat is létrehozhat, vagy törölhet/átnevezhet file-okat a directoryban.

A megnevezett user az engedélyét tovább nem adhatja.

A tulajdonos az engedélyt bármikor visszaveheti a következő paranccsal:

REVoke AUThority dirid FROM userid

REVoke AUThority fn ft dirid FROM userid

Magyarázat: U.az, mint a GRANT parancsnál.

Példa: A VMSYS:MAINT.SAMPLES directory-ra a következő parancsokat adta ki a rendszer az installálásnál:

GRANT AUTHORITY VMSYS:MAINT.SAMPLES TO PUBLIC (READ

GRANT AUTHORITY * * VMSYS:MAINT.SAMPLES TO PUBLIC (READ

Így tehát kiadhatjuk a következő parancsokat:

ACCESS VMSYS:MAINT.SAMPLES E

FILELIST * * E

Hogyan tudhatjuk meg, hogy kinek van engedélye egy adott file használatára?

Ezt a legegyszerűbben a FILELIST néhány új lehetőségével tudhatjuk meg:

FILELIST fn ft fm (SHARE

Itt megtudjuk, hogy a file-oknak kik a tulajdonosai.

A kurzort vigyük egy tetszőleges file-ra a listában, majd nyomjuk meg az F6 gombot (Auth). Ennek a hatására a gép kiírja, hogy mely felhasználók használhatják az adott file-t, és hogyan (READ/WRITE).

File-ok vagy directory-k áthelyezése

Az SFS-ben egy file pool-on belül lehetőségünk van a file/directory-jaink másik directory-ba való áthelyezésére. Ehhez a RELOCATE parancsot kell használni:

RELOcate fn ft dirid1 TO dirid2

vagy:

RELOcate dirid1 TO dirid2

A relokálás azzal jár, hogy az adott file vagy directory az eredeti helyén megszűnik létezni.

Például:

1. Helyezzük át a fődirectory-ban lévő ABC DATA nevű file-t az ADATOK nevű alkönyvtárba:

RELOcate ABC DATA . TO .ADATOK

2. Helyezzük át az ADATOK nevű directory-t (az összes benne lévő file-al együtt) a SZAMFEJT nevű alkönyvtárba: RELOcate .ADATOK TO .SZAMFEJT Ezzel a paranccsal tehát az ADATOK alkönyvtár megszűnik, és helyette létrejön a SZAMFEJT.ADATOK nevű alkönyvtár.Egy adott file megkeresése a filepool-ban:

FILEList fn ft fm (SEARCH

Látható, hogy ehhez a FILELIST egy új funkcióját használtuk fel. A fődirectory-nak azonban ACCESS-álva kell lennie, mégpedig a FILELIST-ben "fm"-ként megadott filemódhoz.

Példa: ACCess . A

FILEList ABC DATA A (SEARCH

Ez a parancs megkeresi az ABC DATA file-t, bármelyik alkönyvtárban található is az, majd a FILELIST-nél már ismert módon megjeleníti az összes előfordulást.

Alias név készítése.

Ha egy file-t a "hagyományos" módon (XEDIT-el, COPY-val, stb.) hozunk létre, akkor úgynevezett "bázis" file keletkezik. Minden bázis file rendelkezhet egy vagy több további file-azonosítóval is (fn, ft, dirid). Ezeket a másodlagos file-neveket ALIAS neveknek hívjuk.

Osztott file-ok használata esetén előfordul, hogy a kollégáink által használt file nevek nekünk nem megfelelőek, mert pl. ugyanaz a nevük, mint a saját file-jainknak. Mivel a kérdéses file nem a miénk, ezért nem szabad (vagy nem is lehet) azt átnevezni. Ha pedig a file-t más néven átmásoljuk a saját directory-ba, ezzel a helypazarláson kívül azt érjük el, hogy nem látjuk az adott file változásait (mivel a másolat nem változik).

E fenti problémát oldják meg az alias nevek. Egy bázis file-hoz alias név az alábbi paranccsal definiálható: CREate ALIas fn1 ft1 dirid1 fn2 ft2 dirid2 A "dirid" helyett egy filemód is megadható.

Például:

CRE DIR .PELDA

ACC .PELDA C

CRE ALI DEEP SEA MAINT.SAMPLES EBI HAL C

FILEL * * C

A FILELIST-ben láthatjuk, hogy keletkezett egy EBI HAL nevű file-unk. Ezt ezentúl ilyen néven (is) használhatjuk, és a bázis file-ban (DEEP SEA a MANIT.SAMPLES directory-ban) bekövetkezett változásokat azonnal láthatjuk. Természetesen az EBI HAL file-t sem módosíthatjuk, mivel a bázis file-ra csak olvasási jogunk van.

Hogyan tudhatjuk meg a bázis file nevét? Ehhez ismét a FILELIST parancsot kell használnunk. Az előző példánál maradva:

FILELIST EBI HAL C (SHARE

A filelist képernyőn láthatjuk, hogy a file tulajdonosa (owner) kicsoda, és hogy a mi file-unk egy alias. Használjuk az

ALIALIST

parancsot (a FILELIST CMD oszlop alatt), vagy nyomjuk meg a PF9 gombot ezen a képernyőn (FILELIST SHARE), és így megtudhatjuk az eredeti (bázis) file nevét.

Shared file-ok LOCK-olása.

Ha egy file-ra több felhasználónak van írási jogosultsága, akkor a file-t az írás (pl.újraszerkesztés) idejére a file írásra való elérését le kell tiltani (azaz LOCK-olni kell), hogy a file ne menjen tönkre. Bár a CMS parancsok (pl. az XEDIT) az R/W file-okat a szerkesztés idejére lock-olják, azért előfordulhat, hogy ennél hosszabb időre szükséges a file elérését letiltani. Ilyenkor a következő parancsot használhatjuk:

CREate LOCk fn ft dirid {opt1} {opt2}

CREate LOCk dirid {opt1} {opt2}

{opt1} = SHAre | EXClusive | UPDate

{opt2} = SESsion | LASting

A SESSION lock a CMS session végén (pl. LOGOFF) automatikusan megszűnik, míg a LASTING lock mindaddig megmarad, míg a DELETE LOCK paranccsal nem töröljük.

Akinek csak olvasási joga van egy file-on, az csak SHARE lock-ot csinálhat, míg az írásjogú felhasználó minden félét.

A különféle lock típusok jelentése:

Update A többi felhasználó olvashatja az adott file-t, de nem módosíthatja, nem törölheti, és nem nevezheti át. Directory esetén a többi felhasználó csak olvashatja a directoryt, azaz nem nevezheti át, nem készíthet aldirectorykat, nem csinálhat alias neveket, és nem írhatja a file-okat, még akkor sem, ha van rá jogosultsága. A LOCK -ot kiadó felhasználó bármilyen műveletet végezhet.

Exclusive A többi felhasználó nem olvashatja (és természetesen nem is írhatja) a lock-olt filet. Directory lock-ja esetén a többi felhasználó nem olvashatja/írhatja egyik bázis file-t sem, és azok aliasait sem, tehát lényegében az adott directory-ban semmit sem csinálhat. Az exclusive LOCK -ot kiadó felhasználó bármilyen műveletet végezhet.

Share Mindenki olvashatja az adott file-t, de senki (beleértve a LOCK használóját is) sem módosíthatja. Senki nem nevezheti át és nem törölheti. Directory esetén mindenki olvahatja a directoryban lévő file-okat (már akinek egyébként van rá joga), de senki nem módosíthat semmit (még a LOCK kiadója sem).

Például:

CRE LOCK ABC DATA .ADATOK UPD SES

Ezzel egy UPDATE lock-ot csináltunk. Ez azt jelenti, hogy a file-t módosíthatjuk, míg más felhasználó azt csak olvashatja. A lock hatása a CMS session végén megszűnik.

A LOCK -ok lekérdezése.

Bárki, aki egy directory-t használhat, megtudhatja, hogy ki lock-olta a directory-t, vagy az abban lévő valamelyik file-t. Erre a következő parancs való:

Query LOCK fn ft dirid Query LOCK dirid

A parancs kiadja, hogy melyik felhasználó milyen típusú és időtartamú LOCK-ot adott ki a megadott file-ra vagy directory-ra.

LOCK-ok megszüntetése.

A kiadott LOCK-okat a következő paranccsal szüntethetjük meg:

DELete LOCk fn ft dirid

DELete LOCk dirid

Például:

DEL LOC ABC DATA .ADATOK