Digital Command Language (DCL) je interpret příkazů a skriptovací jazyk používaný v mnoha operačních systémech firmy Digital Equipment Corporation. DCL má kořeny v systémech IAS, TOPS-20, a RT-11 a byl implementován jako standard ve většině operačních systémů firmy DEC, především RSX-11 a RSTS/E, ale nerozvinutější implementace pochází z VAX/VMS (později OpenVMS). Firma Digital Equipment Corporation byla v roce 1998 převzata firmou Compaq, která se v průběhu let 2002–2004 sloučila s firmou Hewlett-Packard, ale podpora některých systémů stále pokračuje. Po roce 2020 je DCL jako jedna ze součástí OpenVMS vyvíjen firmou VMS Software, Inc. (VSI).
DCL je skriptovací jazyk, který vznikl v době, kdy se intenzivně používal programovací jazyk Fortran. Přesto DCL podporuje několik datových typů, včetně řetězců, celých čísel, bitových polí, polí a logických hodnot, nemá však podporu čísel s pohyblivou řádovou čárkou. Pro přístup k systémovým službám API jádra OpenVMS slouží lexikální funkce, které poskytují stejnou funkčnost jako jejich protějšky v kompilovaných jazycích a umožňují skriptům získat informace o stavu systému. DCL umožňuje používat podmíněný příkaz IF-THEN-ELSE, přístup k všem typům souborů, které podporují Record Management Services (RMS) včetně streamů, indexovaných, a sekvenčních souborů, ale nemá žádné konstrukce pro vytváření cyklů; cykly se musí programovat pomocí příkazů IF a GOTO.
Základní vlastnosti DCL lze používat jak pro interaktivní práci, tak pro psaní příkazových skriptů. DCL rozeznává několik datových typů: řetězce, celá čísla, bitová pole, pole a logické hodnoty. Neumí pracovat s čísly v pohyblivé řádové čárce. Funkce operačního systému OpenVMS zpřístupňuje pomocí lexikálních funkcí, které se chovají stejně jako v kompilovaných programovacích jazycích. DCL umí pracovat s různými typy souborů systému RMS – stream, indexovaný a sekvenční soubor. DCL obsahuje řídicí konstrukci IF-THEN-ELSE, ale neobsahuje příkazy cyklu, které se musí naprogramovat pomocí příkazu GOTO.
V dokumentaci jsou obvykle příkazy a parametry psány velkými písmeny, ale DCL malá a velká písmena nerozlišuje. Příkazový řádek začíná jménem příkazu. Implementace DCL v OpenVMS umožňuje, aby příkazy byly zkráceny na libovolnou délku pokud je možné je vzájemně odlišit, jiné implementace DCL (např. v RSX-11) vyžadují aspoň první tři znaky jména příkazu. Místo příkazu DIRECTORY je možné psát DIR, DIRE, DIREC, atd.
Pro modifikaci nebo upřesnění, jak se má příkaz provést se používají tzv. kvalifikátory /SLOVO, které není nutné oddělovat mezerou od jména příkazu a jiných parametrů. Na pořadí kvalifikátorů a parametrů většinou nezáleží. Některé kvalifikátory umožňují zadat jednu nebo více hodnot /SLOVO=hodnota; více hodnot se uzavírá do závorek:
DIFF /COM=EXCL /IGN=(COMMENTS,BLANK_LINES) soubor1 soubor2
Některé příkazy akceptují na místě parametru tvořeného jménem souboru několik jmen oddělených čárkou (před i za čárkou mohou ale nemusí být mezery).
Knihovna CLI pro zpracování příkazových řádků může být připojena i ke kompilovaným programům, což dodává prostředí systému konzistentní vzhled a chování.
Výzva DCL v interaktivním režimu je znak $ (lze změnit příkazem SET PROMPT = "řetězec").
Skript LOGIN.COM Při přihlášení uživatele k systému OpenVMS se provede příkazový skript LOGIN.COM v uživatelově domovském adresáři. Tento skript je možné použít pro nastavení symbolů a logických jmen. Pro obsah skriptu platí standardní pravidla pro příkazové skripty v OpenVMS (mj. každý příkazový řádek musí začínat znakem dolar).
Příkaz HELP Příkaz HELP poskytuje nápovědu. Je možné mu zadat jako parametry přímo kus příkazového řádku a HELP vypíše nápovědu k dalším parametrům:
HELP SEARCH HELP SEARCH /EXACT
S parametrem /MESSAGE vypisuje HELP nápovědu k názvům chyb:
HELP /MESSAGE ACCVIO HELP /MESSAGE %SYSTEM-F-ACCVIO
Je také možné vypsat nápovědu k číslu chyby (v prvním příkazu je zadáno číslo signálu v desítkové soustavě, ve druhém v šestnáctkové):
HELP /MESSAGE /STATUS=98954 HELP /MESSAGE /STATUS=%x1828A
Příkazy OpenVMS Příkazy K nejpoužívanějším příkazům DCL příkazů, které jsou dostupné v příkazovém řádku systému OpenVMS, patří:
COPY, CREATE, DELETE, DIR, EDIT, LOGOUT, PRINT, RENAME, SET, SHOW, TYPE
Následující tabulka shrnuje nejužitečnější příkazy DCL s často užívanými parametry:
Příkaz Význam TYPE soubor vypíše soubor na obrazovku TYPE/PAGE soubor vypisuje soubor na obrazovku po obrazovkách; ukončení klávesou Q TYPE /PAGE NLA0: smaže obrazovku PRINT soubor vytiskne soubor na tiskárnu DELETE soubor smaže soubor (stačí DEL) PURGE soubor smaže starší verze souboru (/BEFORE= pro upřesnění které) COPY co kam zkopíruje soubor nebo soubory, kam je povinné (použít např. *.*) RENAME co kam přejmenuje nebo přemístí soubor nebo soubory MC DFU SEARCH DSA0 /FILE=jméno Rychlé hledání souborů, DSA0 je jméno disku, ve jméně mohou být použity žolíky EDIT soubor editor, fungují kursorové klávesy, pomocí Ctrl-B nebo klávesou PF4 (minus na numerické klávesnici) se vstupuje do příkazového režimu, zde příkazy HELP, pohyb PgUp, PgDn, ukončení Enter, nápověda ke konkrétnímu příkazu: slovo Enter, QUIT ukončení bez uložení, EXIT – uložení a ukončení HELP nápověda SET PASSWORD změna hesla DIR výpis obsahu adresáře DIR/SIZE totéž včetně velikostí souborů v blocích DIR/SIZE=(UNITS=BYTES)výpis obsahu adresáře s velikostmi souborů v bytech (KB, MB); SET PROCESS /UNITS=BYTES zapne tento výpis bez nutnosti psát parametr v příkazu DIR DIR/PROT výpis adresáře s právy DIR/OWNER výpis adresáře s vlastníkem souborů SEARCH soubor text hledá zadaný text v souboru nebo souborech vyhovujících zadání (lze používat žolíky i … pro prohledání podstromu SEARCH soubor t1,t2 /MA=AND/WIN=10 hledá řádky obsahující řetězce t1 a t2, vypíše okolních 10 řádků CREATE jméno vytvoří soubor, spustí editor pro zadání jeho obsahu, ukončení pomocí Ctrl-Z CREATE/DIR [jméno] vytvoří adresář; k adresáři nemá uživatel právo delete, pro smazání je nutné zadat set file/prot=(o:rwed) jméno.dir SET DEFAULT cesta změna aktuálního adresáře SHOW DEFAULT vypsání jména aktuálního adresáře SET PROT=práva soubor nastavení práv SET FILE/PROTECTION=(s:rwed,o:rwed,g:re,w) soubor nastavení práv s: je systém, o: je vlastník, g: skupina, w: ostatní (world) rwed = read, write, execute, delete WAIT hh:mm:ss.cc čeká zadaný čas (jako sleep v Unixu) SHOW DEVICES [jméno] vypíše stav zařízení SHOW TERMINAL vypíše nastavení terminálu SET TERMINAL volby nastavení terminálu: /INSERT – režim vkládání /PAGE=n – počet řádků na stránce /WIDTH=n – počet znaků na řádku SORT /KEY=(volby) vstup výstup třídění řádků souboru DEFRAG SHOW /VOLUME DSA0: vypíše stav fragmentace souborů na disku DSA0: (vyžaduje práva k souboru INDEXF.SYS)
Lze používat žolíky (* libovolná posloupnost znaků, % libovolný znak; za hvězdičkou může následovat další část jména; použít *.*; pro poslední verzi všech souborů, resp. *.*;* pro všechny verze všech souborů).
Příkaz BACKUP Příkaz BACKUP slouží nejen k archivaci souborů nebo celých disků na pásky, ale umožňuje také vytvářet archivní soubory s příponou .BCK a kopírovat soubory.
Zkopírování celého podstromu:
BACKUP [ODKUD...] [KAM...]
Pokud se má kopírovat více souborů, oddělují se jejich jména čárkami. Alternativou je vytvořit soubor obsahující jména souborů, které se mají kopírovat (oddělená mezerami nebo konci řádků) a uvést jeho jméno následované parametrem /INPUT_FILES na místě parametru ODKUD. Pokud se má pracovat s archivem (tj. vytvářet archiv nebo číst archiv), je třeba za jeho jménem napsat parametr /SAVE_SET (stačí zkratka /SAV).
Zkopírování podstromu do archivního souboru (tzv. BACKUP save set):
BACKUP [ODKUD...] soubor /SAV
Obnovení podstromu ze souboru
BACKUP soubor /SAV kam
Výpis obsahu *.BCK souboru:
BACKUP subor.BCK /SAV /LIST
Kopírování zamčených souborů
BACKUP /IGNORE=INTERLOCK soubor;verze kam
Pokud má *.BCK soubor nastavenou špatnou organizaci souboru, při pokusu o jeho zpracování vypisuje systém chybu NOTSAVESET. Organizaci souboru lze opravit příkazem:
SET FILE /ATTRIB=(RFM:FIX,RAT:NONE,LRL:32256) soubor.BCK
Při archivaci celého stromu adresářů (nebo vybraných souborů ve stromě adresářů) je možné používat na konci cesty tři tečky, které znamenají, že se mají procházet i vnořené adresáře. V tom případě BACKUP do archivů ukládá jména souborů s cestou, ale bez označení disku (resp. bez části před dvojtečkou). Pomocí parametru /SELECT lze vybírat jen některé soubory a pomocí parametru KAM předepisovat, kam se mají rozbalit. Pokud chceme předepsat, že rozbalovaný soubor má vytvořit nejnovější verzi souboru v archivu, je potřeba za jménem souboru napsat středník nebo tečku. Rozbalování vybraných souborů z archivu do oddělených poadaresářů pak může vypadat například takto:
BACKUP ARCHIV.BCK /SAV /SELECT=[FAKTURY...]2020*.* NOVY_DISK:[FAKTURY.2020...]*.*; BACKUP ARCHIV.BCK /SAV /SELECT=[FAKTURY...]2021*.* NOVY_DISK:[FAKTURY.2021...]*.*;
Příkaz ZIP Pro OpenVMS existuje program ZIP pro vytváření .ZIP archivů. Pokud se mají zachovat OpenVMS atributy souborů, které zajistí jejich bezproblémové rozbalení a používání na jiném systému, je nutné používat parametr "-V" (parametr musí být v apostrofech, jinak ho systém vezme jako malé -v):
ZIP "-V" archiv.ZIP soubor soubor ... UNZIP "-V" archiv.ZIP
Starší verze programu ZIP neumí pracovat s adresářovými stromy.
Příkaz MC DFU Příkaz DFU nebo MC DFU zpřístupňuje diskové a souborové utility, které zahrnují prohledávání a mazání adresářových stromů, obnovování smazaných souborů, změnu atributů souborů, hledání a obnovování adresářů, hledání souborových aliasů, kontrolu míry fragmentace a defragmentaci souborů, analýzu a opravu struktury systému souborů a analýzu, defragmentaci, zkrácení nebo prodloužení souboru INDEXF.SYS.
Příkaz SHOW DEVICES Příkaz SHOW DEVICES (lze zkrátit na SH DEV) vypisuje informace o zařízeních. Jako parametr lze použít jméno zařízení nebo jeho začátek, takže např. SHOW DEV D vypíše informace o discích (u disků se vypisuje i jmenovka disku, počet volných bloků, počet transakcí a počet připojení disku). S parametrem /FULL vypisuje podrobnější informace, s parametrem /FILES vypisuje seznam otevřených souborů včetně jména a PID procesu, který soubor používá – podobně jako unixový příkaz lsof.
Příkaz SORT Pro setřídění řádků souboru slouží příkaz SORT:
SORT /KEY=(volby) vstup výstup /NODUPLICATES
Jméno vstupního a výstupního souboru musí být vždy zadáno; pokud se má třídit výstup jiného příkazu je nutné použít
PIPE příkaz parametry | SORT SYS$INPUT SYS$OUTPUT
Nepovinný parametr KEY má následující syntaxi: /KEY=(POS:<pozice>,SIZE:<délka>,{DECIMAL|CHARACTER},{ASCENDING|DESCENDING}). Při použití parametru /NODUPLICATES budou odstraněny opakující se řádky.
Jména souborů
Systém souborů: Files-11 – vývojové varianty:
ODS-1: plochý systém souborů pro RSX-11 ODS-2: hierarchický systém souborů pro VMS, max. 8 úrovní adresářů, ve jménech souborů povolena pouze velká písmena angl. abecedy, číslice, podtržení, pomlčka a dolar, max. 39 znaků jméno a 39 znaků přípona ODS-5: rozšířená verze ODS-2 pro Alphy a Itanium, ve jménech souborů povoleny Unikódové znaky, rozlišuje malá velká písmena, dlouhá jména, neomezený počet úrovní adresářů (ODS-3 je podpora pro ISO 9660 CD-ROM pro Files-11 a ODS-4 podpora pro High Sierra CD-ROM)
Struktura jména souboru v rámci clusteru:
NODE"user password"::device:[dir.subdir]filename.type;ver
Libovolná část jména může být vynechána, existují implicitní hodnoty pro jednotlivé části jména (nahrazuje funkci aktuálního adresáře v jiných systémech): např. [DIR1.DIR2]FILE.EXT je poslední verze souboru FILE.EXT na aktuálně implicitním disku v adresáři [DIR1.DIR2]. DIR1 je podadresář MFD (master file directory = kořenový adresář), DIR2 je podadresářem DIR1. MFD libovolného disku je označováno [000000].