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].