Se consigue con el comando:
TYPE/PAGE NL:
Nota: Si NL:
da algún problema, se puede utilizar NLA0:
en su lugar.
El borrado de directorios da un error relacionado con los permisos, la secuencia de comandos para realizar el borrado del directorio ejemplo
es:
SET SECURITY/PROTECTION=(O:D) ejemplo.DIR DELET ejemplo.DIR;*
Nota: (O:D)
significa OWNER DELETE
Se añaden tres puntos …
Por ejemplo para mostrar todos los directorios de un volumen, se puede hacer:
DIR DKA200:[000000...]*.dir
Purgar todos los ficheros
PURGE DKA200:[000000...]
Purgar todos los ficheros de mi cuenta de usuario (al conectar, sin haber hecho ningún set def
):
PURGE [...]
Para montar un disco duro, CD o ZIP sin conocer su etiqueta se usa el parámetro /OVERRIDE=ID
, que puede abreviarse como /OVER=ID
, como por ejemplo, montar un CD en el lector SCSI ID=4:
MOUNT/OVER=ID DKA400:
Si la unidad se quiere montar de forma global, y no solo para el usuario actual, entonces se añade /SYSTEM
, como por ejemplo, si el CD tuviese la etiqueta EXTRA:
MOUNT/SYSTEM DKA400: EXTRA
Ambos parámetros pueden utilizarse de forma simultanea (si no se conoce la etiqueta):
MOUNT/SYSTEM/OVER=ID DKA400:
Con el voluman montado hacer el siguiente comando (ej con un disco zip en la unidad DKA600:)
SET VOLUME/LABEL=etiqueta DKA600:
Se consigue con la orden:
$ SET PROMPT=- "''F$GETSYI("NODENAME")'::''F$EDIT(F$GETJPI("","USERNAME"),"TRIM")'$ "
donde:
F$GETJPI(“”,“USERNAME”)
devuelve el nombre del usuario (del proceso por defecto “”)F$EDIT(…,“TRIM”)
elimina los espacios anteriores y posterioresF$GETSYI(“NODENAME”)
devuelve el nombre de la máquina
Si se desea de forma permanente, entonces se añade en SYS$MANAGER:SYLOGIN.COM
.
En VMS existe el comando PIPE
para simular algunas características de unix, se puede ejecutar como:
PIPE comando ; comando ; ..... ; comando
para encadenar comandos (como el ; en unix)
o bien como
PIPE comando | comando | ..... | comando
para dirigir la salida de un comando al siguiente. En este caso hay que tener en cuenta que la mayoría de los comando de VMS no están realizados como “filtros”, es decir no operan con la entrada estándar, pero esto puede simularse utilizando del fichero SYS$INPUT
.
Simulando MORE
Basta añadir TYPE/PAGE SYS$INPUT
al final de un PIPE, ejemplo:
$ PIPE ACS SHOW PROGRAM * | TYPE/PAGE SYS$INPUT
mostrará todos los programas almacenados en la librería ADA, con la salida por pantalla paginada.
Simulando GREP
En este caso añadimos SEARCH SYS$INPUT “búsqueda”
. La búsqueda es indiferente a las mayúsculas/minúsculas salvo que se utilice el modificador /EXACT
.
Ejemplo:
$ PIPE ACS SHOW PROGRAM * | SEARCH SYS$INPUT "HOLA"
Para localizar las líneas que contengan la palabra HOLA
.
Al iniciarse la sesión, el servidor envía un código (inquire) al terminal para averiguar su tipo, esperando una respuesta y así configurarlo de forma automática. Algunos terminales (como los Axel) no soportan esa función, y el servidor tiene que esperar un rato (timeout) para darse cuenta, lo que aparte de no configurar el terminal alarga el tiempo de conexión. En otras ocasiones, como la consola de linux la configuración no es correcta.
Para eliminar ese inquire y forzar a que el terminal sea un vt100 hay que editar el SYS$MANAGER:SYLOGIN.COM
y comentar las líneas indicadas y añadir la línea en rojo para que asuma un terminal VT100 a 9600.
$ set term/vt100 $ edit sys$manager:sylogin.com
Se avanza hasta localizar las líneas a comentar y se añade un $!
al principio de cada una para comentarlas, luego al final del bloque se coloca SET TERMINAL/VT100 /SPEED:9600
(los cambios de indican en color rojo).
$ SET CONTROL=T $ $! Set the terminal type, unless this is a detached DECwindows application, $! or a remote login, or specific other terminal types. (Note that remote $! user logins, via such protocols as DECnet CTERM (SET HOST, device driver $! prefix "RT") and IP (telnet, device driver prefix "TN"), are considered $! "Interactive" processes, and not "Network" processes.) $ $! $ TT_NOINQUIR = "|TW|RT|WT|TK|WS|PY|FT|TN|" $! $ TT_DEVNAME = F$GETDVI("TT","TT_PHYDEVNAM") $! $ TT_DEVPREFIX = F$EXTRACT(1,2,TT_DEVNAME) $! $ IF F$LOCATE("|''TT_DEVPREFIX'|",TT_NOINQUIR) .eq. F$Length(TT_NOINQUIR) $! $ THEN $! $ ! Determine what sort of terminal this is, and avoid resetting $! $ ! the user's default display size settings in the process... $! $ tt_page = f$getdvi("TT","TT_PAGE") $! $ devbufsiz = f$getdvi("TT","DEVBUFSIZ") $! $ SET TERMINAL/INQUIRE/PAGE='tt_page'/WIDTH='devbufsiz' $! $ EndIf $ SET TERMINAL /VT100 /SPEED:9600 $ Buffer: SYLOGIN.COM | Write | Insert | Forward 156 lines read from file SYS$COMMON:[SYSMGR]SYLOGIN.COM;1
Se guarda con <Ctrl+Z>
, se sale de la sesión y se vuelve a entrar.
(resolución parcial, estoy trabajando en ello)
Se accede al menú de configuración pulsando <Ctrl+Alt+ESC>
y se selecciona en el menú correspondiente (Se exponen los conceptos ya que el menú es distinto en cada modelo de terminal):
El resto de los parámetros en su valor por defecto, o en algún caso, el valor que resulte cómodo.
(Falta por configurar las teclas Fx, Inicio, Fin, AvPág, RePág… para que funcionen correctamente)
Sirve para conectar un terminal o una impresora que dispongan de un conector RS-232 DB-25 hembra a un cable MMJ. Por tanto el adaptador incorpora un conector DB-25 macho y un socket MMJ.
Puede construirse un cable similar colocando un DB-25 (o un DB-9) con carcasa (donde se sueldan fácilmente las conexiones) y un conector MMJ con cable plano de 6 hilos.
El esquema es el que sigue:
MMJ | DB25/DB9 | Función | |
---|---|---|---|
1 | 20 | 4 | DTR ⇐ DTR |
2 | 2 | 3 | Tx+ ⇐ Tx |
3 + 4 | 7 | 5 | Rx– + Tx– ⇔ Tierra (GND) |
5 | 3 | 2 | Rx+ ⇒ Rx |
6 | 6 + 8 | 6 + 1 | DSR ⇒ DSR + CD |
– | 4 + 5 | 7 + 8 | RTSDTE ⇒ CTSDTE |
Los servidores de terminales DECserver no utilizan DECnet, sino LAT, por lo que es necesario iniciar el servicio. Para que se ejecute cada vez que se arranque el sistema, se edita el fichero de configuración sys$manager:systartup_vms.com
añadiendo @SYS$STARTUP:LAT$STARTUP
al final
$ set term/vt100 $ edit sys$manager:systartup_vms.com
Se avanza hasta el final, y se añade la línea indicada en rojo.
$!$ @SYS$STARTUP:TNT$STARTUP $! $! $! Remove the comment delimiter ($!) from the following line to have $! Monitor run with TCP/IP. $! $!$ @SYS$STARTUP:VPM$STARTUP.COM $! $! $! Remove the comment delimiter ($!) from the following line to start $! RPC services. $! $!$ @SYS$STARTUP:DCE$RPC_STARTUP.COM $! $ MOUNT/SYSTEM DUA1 DATA1 $ @SYS$MANAGER:STARTNET $ @SYS$STARTUP:CCXX$STARTUP $ @SYS$STARTUP:PASCAL$STARTUP $ @SYS$STARTUP:ADA$STARTUP $ @SYS$STARTUP:LAT$STARTUP $ EXIT Buffer: SYSTARTUP_VMS.COM | Write | Insert | Forward 413 lines read from file SYS$COMMON:[SYSMGR]SYSTARTUP_VMS.COM;5
Se pulsa [Ctrl+Z] para salir y guardar, y en el próximo arranque estará listo.
Estas utilidades resultan apropiadas para enviar archivos y verificar su integridad (especialmente en los binarios).
Se crea el directorio y se copian los archivos EXE:
$ create/directory dka100:[util] $ copy dka500:[util]*.* dka100:[util] $ _
Para que los comandos se puedan ejecutar de forma pública, es necesario los siguientes comandos (excluimos la utilidad df
):
$ set security/protection=(w:e) dka500:[util]unzip.exe $ set security/protection=(w:e) dka500:[util]md5sum.exe $ set security/protection=(w:e) dka500:[util]shasum.exe $ _
Luego se crean los alias (de forma permanente), para poder ejecutarlos escribiendo su nombre (imprescindible para su uso con parámetros) editando el SYS$MANAGER:SYLOGIN.COM
$ set term/vt100 $ edit sys$manager:sylogin.com
y añadiendo las líneas en rojo en el lugar indicado:
$ MOU*NT :== MOUNT/NOASSIST $ EndIf $ $! ======= ================= =========== $! A D D C O M M A N D S B E L O W $! ======= ================= =========== $ $ UNZIP=="$DKA100:[UTIL]UNZIP.EXE" $ MD5SUM=="$DKA100:[UTIL]MD5SUM.EXE" $ SHASUM=="$DKA100:[UTIL]SHASUM.EXE" $ DF=="$DKA100:[UTIL]DF.EXE" $ $! ======= ================= =========== $! A D D C O M M A N D S A B O V E $! ======= ================= =========== $ $ $! Fall through... $ $MODE_NETWORK: $ Buffer: SYLOGIN.COM | Write | Insert | Forward 157 lines read from file SYS$COMMON:[SYSMGR]SYLOGIN.COM;1
Se guarda con <Ctrl+Z>
, se sale de la sesión y se vuelve a entrar.
Si se ejecuta el comando
$ show symbol /global/all
se observarán los nuevos alias, también se pueden invocar tecleando unzip
o md5sum
.
Para cambiar las características de un usuario (incluyendo la password) hay que ejecutar la utilidad authorize, que se invoca con: (es importante cambiar el directorio por defecto para que encuentre los archivos necesarios):
$ set def sys$system $ run authorize UAF> _
Se ejectuan los comoandos deseados, y para terminar, se teclea:
UAF> exit $ _
Olvido del password
Se fuerza uno nuevo con:
UAF> modify usuario /password=nueva
Esto obligará a cambiar el password en la próxima sesión, si no se desea, entonces en lugar de lo anterior:
UAF> modify usuario /password=nueva/nopwdexpired
Eliminar caducidad del password
El sistema obliga a cambiar el password cada 90 días (o menos en algunos usuarios), se puede hacer que no pase con:
UAF> modify usuario /pwdlifetime=none
Longitud mínima del password
Por defecto viene a 6 u 8 en algunos usuarios.
Para cambiar la longitud por defecto en los usuarios que se creen a partir de este momento se hace:
UAF> default/pwdminimum=4
Para cambiar la todos los usuarios ya existentes hay que hacer:
UAF> modify * /pwdminimum=4
y si solo se quiere uno o alguno, entonces en lugar de * se pone el nombre del usuario deseado.
A un grupo
VMS identifica a los usuarios por el UID, que es una pareja de números en octal, como por ejemplo [200,201]. Los números corresponden al identificador del grupo (en el ejemplo 200), seguido del código de usuario (que en el ejemplo es 201.
Vamos a llamar al grupo 200 con el identificador USERS, para eso se ejecuta el comando siguiente:
UAF> add/ident USERS /value=uic:[200,*] /attrib=resource
A un usuario
También es posible asignar un nombre a un usuario (si se definio con un UID y no se nombró en su momento), como por ejemplo para llamar JGARCIA al usuario [200,201] se usa el comando:
UAF> add/ident JGARCIA /value=uic:[200,201]
La conexión se realiza sobre protocolo TCP/IP, por tanto, si no se ha hecho previamente, es necesario instalarlo y configurarlo antes de proseguir.
Se insicia sesión con el usuario system.
En caso de no haber arrancado el sistema de colas, se hace con el comando:
$ START QUEUE/MANAGER
Si la instalación es nueva y nunca se ha utilizado, el comando anterior devuelve un error indicando que no existe el archivo MASTER.DAT entonces es necesario inicializarlo añadiendo /NEW, es decir:
$ START QUEUE/MANAGER/NEW
Luego es necesario crear la cola de impresión conectandola a la impresora (sustituyendo el contenido en azul por sus valores adecuados), para eso se ejecuta esta orden:
$ INITIALIZE/QUEUE/ON="impresora.dominio:9100"/PROCESSOR=TCPIP$TELNETSYM/NO_INTIAL_FF cola
/NO_INITIAL_FF
indica que al imprimir el primer documento tras arrancar el sistema no salte una hoja (para asegurarse de que se comienza en una página en blanco).
Lo último consiste en arrancar la cola para que acepte peticiones, con:
$ START/QUEUE cola
El arranque de la cola es necesario cada vez que se inicia el sistema, por lo que debería incluirse en SYS$MANAGER:SYSTARTUP_VMS.COM
, para que se haga de forma automática (por supuesto, despues de haber iniciado los servicios TCP/IP).
Para imprimir un documento está la orden PRINT, como por ejemplo:
$ PRINT DUA1:[JDOE.HOLA]HOLA.MAR/QUEUE=cola
que imprimirá el archivo del ejemplo Hola Mundo en ensamblador (si se encuentra en la ruta indicada).
La conexión se realiza sobre protocolo TCP/IP, por tanto, si no se ha hecho previamente, es necesario instalarlo y configurarlo antes de proseguir.
Se inicia sesión con el usuario system.
Se comienza definiendo la impresora en printcap, invocando la utilidad
$ run sys$system:tcpip$lprsetup TCPIP Printer Setup Program Command < add delete view help exit >: view # # LOCAL PRINTERS # TCPIP$LPD_QUEUE:\ :lp=TCPIP$LPD_QUEUE:\ :sd=TCPIP$LPD_SPOOL: Command < add delete view help exit >: add Adding printer entry, type '?' for help. Enter printer name to add : lp Enter the FULL name of one of the following printer types: remote local : remote Enter printer synonym: (Pulsar ENTER) Enter full file specification for spool directory SPOOLER DIRECTORY 'sd' : [SYS$SPECIFIC:[TCPIP$LPD.LP]] ? (Pulsar ENTER) Set LPD PrintServer extensions flag 'ps' [] ? (Pulsar ENTER) Set remote system name 'rm' [] ? printer.virtual.box Set remote system printer name 'rp' [] ? (Pulsar ENTER) Set printer error log file 'lf' [SYS$SPECIFIC:[TCPIP$LPD]LP.LOG] ? (Pulsar ENTER) Enter the name of the printcap symbol you wish to modify. Other valid entry is : 'q' to quit (no more changes) The names of the printcap symbols are: sd for the printer spool directory lf for the printer error log file lp for the name of the local printer ps for the LPD PrintServer extensions flag rm for the name of the remote host rp for the name of the remote printer fm for the printer form field pa for the /PASSALL flag nd for the /NODELETE flag cr for the cr flag p1-p8 for the /PARAMETER=(p1,...,p8) field Enter symbol name: q Symbol type value ------ ---- ----- Error log file : lf STR /SYS$SPECIFIC/TCPIP$LPD/LP.LOG Printer Queue : lp STR LP PS extensions flag: ps STR Remote Host : rm STR printer.virtual.box Remote Printer : rp STR Spool Directory : sd STR /SYS$SPECIFIC/TCPIP$LPD/LP Are these the final values for printer LP ? [y] (Pulsar ENTER) Adding comments to printcap file for new printer, type '?' for help. Do you want to add comments to the printcap file [n] ? : (Pulsar ENTER) Do you want the queue to default to print flag pages [y] : n Do you want this procedure to start the queue [y] : n Updating TCPIP$LPD_SYSTARTUP.COM Updating TCPIP$LPD_SYSHUTDOWN.COM ************************************************* * TCPIP$LPD_SYSTARTUP.COM TCPIP$LPD_PRINTCAP* * and TCPIP$LPD_SYSHUTDOWN.COM * * have been updated for this printer * * * * Set up activity is complete for this printer * ************************************************* Command < add delete view help exit >: view # # LOCAL PRINTERS # TCPIP$LPD_QUEUE:\ :lp=TCPIP$LPD_QUEUE:\ :sd=TCPIP$LPD_SPOOL: LP|lp:\ :lf=/SYS$SPECIFIC/TCPIP$LPD/LP.LOG:\ :lp=LP:\ :rm=printer.virtual.box:\ :sd=/SYS$SPECIFIC/TCPIP$LPD/LP: # Command < add delete view help exit >: exit $ _
Se crea y arranca la cola de impresión:
$ initialize/queue/processor=tcpip$lpd_smb lp $ start/queue lp $ _
Se visualiza que la cola esta activa y se le manda un archivo de prueba:
$ show queue Server queue LP, idle, on VAX::, mounted form DEFAULT $ print dua1:[jdoe]hola.mar/queue=lp Job HOLA (queue LP, entry 1) started on LP $ _
Todo listo, ahora se puede añadir la línea start/queue lp
al archivo sys$manager:systartup_vms.com
, (detrás del arranque de TCP/IP) para que la cola se inicie al arrancar el sistema.
En caso de error:
Si la utilidad de configuración de printcap no arranca dando el error indicado
$ RUN SYS$SYSTEM:TCPIP$LPRSETUP
SYS$SPECIFIC:[TCPIP$LPD]TCPIP$PRINTCAP.DAT: no such file or directory
$
Se aplica esta solución (consiste en activar y desactivar el servicio LPD, que crea el archivo que falta):
$ @sys$manager:tcpip$config
En el sistema de menú se selecciona:
3 - Server components
7 - LPR/LPD
1 - Enable service on this node
7 - LPR/LPD
1 - Disable service on this node
[E] - Exit menu
[E] - Exit configuration procedure
Si al crear la cola da el siguiente error
$ initialize/queue/processor=tcpip$lpd_smb lp
%JBC-E-JOBQUEDIS, system job queue manager is not running
Se arranca el gestor de colas
$ start queue/manager
Si responde con este error:
%JBC-E-QMANNOTSTARTED, queue manager could not be started
ejecutar este comando
$ start queue/manager/new
Se puede definir la impresora que se utilizará por defecto asignandola al nombre lógico SYS$PRINT
, como por ejemplo
DEFINE/SYSTEM "SYS$PRINT" "LP"
Así, en caso de no indicar /QUEUE
en la orden PRINT
, se asume /QUEUE=LP
.
Se crean con
INTIALIZE/QUEUE/BATCH cola
se arrancan igual que las colas de impresión
START/QUEUE cola
se encola con la orden submit
SUBMIT archivo-com
y la cola por defecto es:
DEFINE/SYSTEM "SYS$BATCH" "cola"
Entrar con TCPIP
y ahí teclear SET CONFIG NAME_SERVICE/DOMAIN=nombre.tld
. Salir con EXIT
.
La capacidad para copiar la lista de nodos está integrada en NCP. Para copiar la lista activa en servidor
Solo hay que ejecutar este comando:
NCP COPY KNOWN NODES FROM servidor TO BOTH
Se arranca la máquina y en el inicio >>>
se hacen los siguientes comandos
KA655-B V5.3, VMB 2.7 Performing normal system tests. 40..39..38..37..36..35..34..33..32..31..30..29..28..27..26..25.. 24..23..22..21..20..19..18..17..16..15..14..13..12..11..10..09.. 08..07..06..05..04..03.. Tests completed. >>>B/R5:1 DUA0 (BOOT/R5:1 DUA0 2.. -DUA0 1..0.. SYSBOOT> SET/STARTUP OPA0: SYSBOOT> SET WINDOW_SYSTEM 0 %SYSBOOT-E-No such parameter SYSBOOT> SET WRITESYSPARAMS 0 SYSBOOT> CONTINUE VAX/VMS Version V4.7 28-Oct-1987 13:00 $ SPAWN SPAWN %DCL-S-SPAWNED, process SYSTEM_1 spawned %DCL-S-ATTACHED, terminal now attached to process SYSTEM_1 $ @SYS$SYSTEM:STARTUP %%%%%%%%%%% OPCOM 00-XXX-0000 00:00:00.00 %%%%%%%%%%% Logfile has been initialized by operator _XXXXXX$OPA0: Logfile is SYS$SYSROOT:[SYSMGR]OPERATOR.LOG;22 %%%%%%%%%%% OPCOM 00-XXX-0000 00:00:00.00 %%%%%%%%%%% Message from user DECNET on XXXXXX DECnet starting %RUN-S-PROC_ID, identification of created process is 00000108 %RUN-S-PROC_ID, identification of created process is 0000010A %SET-I-INTSET, login interactive limit = 64, current interactive value = 0 Process SYSTEM_1 logged out at 00-XXX-0000 00:00:00.00 %DCL-S-RETURNED, control returned to process STARTUP $ %%%%%%%%%%% OPCOM 00-XXX-0000 00:00:00.00 %%%%%%%%%%% Message from user DECNET on XXXXXX DECnet event 4.10, circuit up From node 00.00 (XXXXXX), 00-XXX-0000 00:00:00.00 Circuit QNA-0 $ SET DEFAULT SYS$SYSTEM: SET DEFAULT SYS$SYSTEM: $ RUN AUTHORIZE RUN AUTHORIZE UAF> MODIFY SYSTEM /PASSWORD=xxxxxx MODIFY SYSTEM /PASSWORD=xxxxxx %UAF-I-MDFYMSG, user record(s) updated UAF> EXIT EXIT %UAF-I-DONEMSG, system authorization file modified %UAF-I-RDBNOMODS, no modifications made to rights database $ @SHUTDOWN
You may run the OpenVMS VAX version of your choice. Do not use this method on OpenVMS Alpha or OpenVMS I64.
$ set default sys$common:[sys$ldr] $ copy sys.exe sys.exe_v73 $ patch sys.exe PATCH Version 7.1 26-JUL-1995 %PATCH-I-NOLCL, image does not contain local symbols %PATCH-I-NOGBL, some or all global symbols not accessible PATCH>define sys$gq_version=800044b8 symbol "SYS$GQ_VERSION" defined as 800044B8 PATCH>set mode ascii PATCH>examine sys$gq_version:sys$gq_version+7 SYS$GQ_VERSION: 'V7.3' 800044BC: ' ' PATCH>replace sys$gq_version OLD>'V7.3' OLD>' ' OLD>exit NEW>'V8.5' NEW>'-44 ' NEW>exit old: SYS$GQ_VERSION: 'V7.3' old: 800044BC: ' ' new: SYS$GQ_VERSION: 'V8.5' new: 800044BC: '-44 ' PATCH>examine sys$gq_version:sys$gq_version+7 SYS$GQ_VERSION: 'V8.5' 800044BC: '-44 ' PATCH>update %PATCH-I-WRTFIL, updating image file SYS$COMMON:[SYS$LDR]SYS.EXE;7 PATCH>exit
Now reboot and SHOW SYSTEM
to see the fastest (unsupported) method of getting to another version of OpenVMS.
$ show system/noprocess OpenVMS V8.5-44 on node CLASS9 7-MAR-2007 12:48:08.97 Uptime 0 00:04:33