ERROR USUARIO NO VALIDADO

MÓDULO DE INTRODUCCIÓN A LINUX

INTRODUCCIÓN

GNU/Linux es un sistema operativo, compatible con UNIX, y que se distribuye bajo licencia GNU General Public License, lo cual quiere decir que es un sistema operativo libre (su uso no requiere el pago de ninguna licencia) y que además el código fuente del mismo está disponible. Se trata de un SO relativamente joven, puesto que su primera versión data del año 1991. Desde esa fecha hasta la actualidad han surgido numerosas distribuciones de este SO, incluso en versión LiveCD, que nos permiten utilizar Linux sin necesidad de instalarlo en nuestra máquina.

Aunque se trate de un sistema de libre distribución y en el que participan multitud de desarrolladores en todo el mundo, no quiere decir que no exista una documentación completa y adecuada a cada nivel de usuario. En los siguientes enlaces se puede encontrar numerosos documentos y manuales para el manejo de este SO:

Algunas características generales de los sistemas UNIX

  • Unix es multiusuario, lo que quiere decir que puede haber muchos usuarios utilizando la misma máquina al mismo tiempo. Esto se traduce en que para poder acceder será necesario conocer el nombre de la cuenta de usuario y la clave o password de la misma.
  • Unix es multitarea, es decir, se pueden ejecutar varios programas al mismo tiempo.
  • Las operaciones de borrado no se pueden deshacer.
  • A diferencia de Windows, siempre se diferencia entre mayúsculas y minúsculas. Los nombres de fichero: peturi, Peturi, PETURI, pETUri, son todos distintos.
  • Se puede utilizar el tabulador para completar los nombres de mandatos y ficheros.

Para iniciar una sesión de trabajo hay que introducir el nombre de la cuenta de usuario y la clave. El sistema pregunta por la cuenta de usuario mediante un título similar a Login: y por la clave mediante un título similar a Password:. Rellenando dichos datos se entra a trabajar en el sistema. El sistema presentará una interfaz gráfica o alfanumérica, según esté configurado.

OBJETIVOS DE LA PRÁCTICA

El objetivo de este módulo es que el alumno se familiarice con la interfaz de usuario de un sistema UNIX, facilitada por un Shell alfanumérico. El Shell es, básicamente un intérprete de mandatos mucho más flexible y potente que cualquier interfaz gráfica.

Se realizarán ejercicios con los mandatos más importantes y se introducirán las combinaciones de teclas fundamentales.

Los mandatos internos, del Shell-bash, utilizados en este módulo son los siguientes:

cd logout
pwd umask
exit

Los mandatos externos (ejecutables) utilizados en este módulo son los siguientes:

cat chmod chsh cmp
cp date diff echo
emacs env export find
grep gzip info less
ls man mkdir mv
nano passwd pico rm
rmdir shred ssh-add ssh-agent
ssh-copy-id ssh-keygen sort tar
vi wc wget whoami

Programas que se van a utilizar:

Ficheros que se van a utilizar:

  • CPUyEs.c (forma parte del material de apoyo para las prácticas de análisis, que se puede bajar de la web de la asignatura)

PRIMEROS PASOS

Los ejercicios de estas prácticas deben ser realizados en una máquina con sistema operativo Linux.

Se pueden plantear, en general, dos situaciones: que la máquina en la que trabaja disponga de Linux instalado o bien que tenga otro sistema operativo (Windows, OS X). En el primer caso, bastará con abrir una o varias ventanas de mandatos (Shell) para realizar los ejercicios. El Centro de Cálculo dispone de salas (Águila, Monje, Nerja, Cogull o Artá) en las que las máquinas disponen de Linux. En otro caso, será necesario establecer una conexión, de acuerdo al protocolo seguro ssh, a una máquina remota Linux en la que se disponga de cuenta de usuario, por ejemplo, triqui (solo accesible desde la red local de la Facultad).

Para la conexión mediante protocolo ssh a una máquina remota Linux, desde una máquina Windows, se puede utilizar la aplicación PuTTy (cliente Telnet y SSH).

Otra utilidad interesante es WinScp, que permite copiar ficheros entre una máquina local Windows y cualquier otra máquina que tenga un servidor scp. Los sistemas Linux suelen tener un servidor de este tipo instalado. En el caso de las máquinas que utilizan Windows, se pueden instalar servidores tanto ssh como scp, por ejemplo, WinSSHD.

Para la ejecución de numerosos ejercicios es necesario disponer de los programas facilitados al efecto, programas que deben estar ubicados en la cuenta Linux que se utilizará para la ejecución de los ejercicios. Se recomienda crear un directorio específico en el que se almacenarán estos programas, por ejemplo, PracticasAnalisis.

Si decide instalar Linux en su PC, observe la siguiente recomendación:

REALICE TODOS LOS EJERCICIOS DESDE UNA CUENTA DE USUARIO, NO DESDE LA CUENTA DE SUPERUSUARIO.


El teclado

Para unificar la nomenclatura de las teclas usaremos los nombres indicados en la figura adjunta. Destacamos la tecla de retorno de carro (return), que llamaremos Ret, y la tecla de control, que llamaremos Ctrl.

En algunos casos es necesario pulsar una combinación de teclas, en las explicaciones esto se indicará de la siguiente forma: [tecla1+tecla2+…]. Por ejemplo, para matar un proceso (programa en ejecución) de un terminal se usa la combinación de las teclas «Control» y «c», lo que representaremos como [Ctrl+c].

Copiar y pegar

Dependiendo del tipo de ventana, las funciones de copiar y pegar son distintas, existiendo básicamente dos alternativas:

  1. Alternativa clásica UNIX, utilizada en las ventanas PuTTy.
    1. Copiar al portapapeles: basta con seleccionar con el puntero del ratón un texto para que quede copiado al portapapeles. No hay que pulsar ningún botón ni tecla. Dicho texto se puede pegar en la misma ventana PuTTy o en otras ventanas.
    2. Pegar el portapapeles:
      • En ventana PuTTy: basta con pulsar el botón derecho del ratón. Observe que el texto se pega en la posición del cursor de la ventana y no en el punto en el que se tenga posicionado el puntero del ratón. También se puede pegar pulsando la combinación de teclas [Mayúsculas+Insertar].
      • En otras ventanas Windows, como puede ser un navegador o un editor, hay que usar el método normal de Windows.
  1. Otra alternativa que podemos encontrar es la siguiente:
    1. Copiar al portapapeles: hay que seleccionar el texto con el puntero del ratón y pulsar su botón derecho. Aparece un menú y se selecciona copiar. También se puede hacer con [Ctrl+Insertar].
    2. Pegar el portapapeles: se puede pegar pulsando la combinación de teclas [Mayúsculas+Insertar].


EL SHELL

Aunque existen entornos de trabajo gráficos como son el KDE y el Gnome, con frecuencia es necesario trabajar con Shell textual. Un Ingeniero Informático debe estar familiarizado con el entorno alfanumérico, puesto que, aunque tiene una curva de aprendizaje más lenta, permite hacer muchas más cosas que el entorno gráfico.

En todo el curso consideraremos el trabajo a través de Shell alfanumérico, por la razón antes expuesta de que el Ingeniero Informático ha de ser capaz de desenvolverse a este nivel, imprescindible para realizar muchas labores de administración y manejo del sistema. En los ejemplos utilizaremos el bash, pues es uno de los más utilizados.

La interacción a través de Shell alfanumérico se hace mediante mandatos. El Shell escribe un texto, llamado “prompt” o texto de apremio, para indicar al usuario que puede introducir un mandato. El prompt es configurable. En las cuentas de usuario es muy frecuente que incluya el nombre del directorio en el que se está trabajando.

En triqui, el mandato chsh con la opción -l, nos permite conocer todos los Shell disponibles. Otra opción, para conocer los Shells disponibles en una determinada máquina es acceder al contenido del fichero /etc/shells.


NOTA.- Para cambiar a un Shell determinado, basta con teclear el nombre del nuevo Shell y pulsar la tecla Ret. Para salir del Shell basta con teclear exit.

Mandatos

Un mandato se compone de los siguientes elementos:

 mandato [opciones] [argumentos]   

En la definición de un mandato se utilizan las siguientes convenciones:

  • Algo que aparezca entre corchetes [algo] no es obligatorio. Se usa si se quiere.
  • Las opciones empiezan muy frecuentemente con un menos (p. ej.: «-a»).
  • Los puntos «…» indican uno o varios.
  • El símbolo «|» separa alternativas excluyentes entre sí.

El ejemplo siguiente muestra la invocación del mandato ls, con la opción -l, utilizando un formato de prompt muy corriente que incluye los siguientes elementos: nombre de la cuenta (alumno), nombre de la máquina (maquinaLinux) y el subdirectorio (SubDirectorio) a partir del home de la cuenta (~):

Una opción que suelen incluir todos los mandatos, por defecto, es la opción de ayuda o help, que se puede invocar del siguiente modo:

alumno@maquinaLinux:~$ mandato -h

o en su versión larga

alumno@maquinaLinux:~$ mandato --help

Los primeros mandatos

A continuación presentamos algunos mandatos de interés:

  • logout o exit: ambos mandatos sirven para terminar el Shell.
  • man [mandato]: el mandato man muestra el “manual de referencia” del mandato (ver abajo).
  • info [mandato]: mediante el mandato info podemos obtener información adicional de los mandatos. Pulsar q para salir del mandato info.
  • passwd sirve para cambiar la clave o password de una cuenta.
  • who am i imprime el nombre de la cuenta desde la que se trabaja.
  • date muestra la fecha y hora.

El mandato man va a ser imprescindible para realizar las prácticas de la asignatura pues es la principal fuente de información (junto con las transparencias de teoría) sobre mandatos y servicios. Por ello conviene familiarizarse con él cuanto antes. La información presentada suele ser muy extensa, puesto que la mayoría de los mandatos tienen múltiples opciones. Puede utilizar las teclas de desplazamiento (arriba y abajo) para desplazarse por los documentos y la barra espaciadora para avanzar página a página. Para salir, pulsar q.

IMPORTANTE: Si lo que se busca debe incluir una cadena de caracteres distintiva, es mucho más efectivo buscar directamente la misma. Para buscar palabras en los documentos: ”/abc” busca el texto abc. Tecla “n” avanza a siguiente ocurrencia. Tecla “N” retrocede. (Estas teclas también funcionan en otros mandatos que presentan pantallas, por ejemplo “less”).

IMPORTANTE: Cuando man nos presente el documento, debemos observar en la parte superior el número entre paréntesis que aparece tras el nombre del mandato o servicio. ”(1)” indica que es un mandato y ”(2)” un servicio. Realmente este número indica la sección de los manuales de referencia de Linux:
1. Mandatos (Ej: ls, cd, ps, man, cat…)
2. Llamadas al sistema (servicios) (Ej: open, umask…)
3. Funciones de biblioteca (Ej: printf, fopen)
4. Dispositivos (Ej: null)
5. Formato de ficheros (Ej. passwd)
6. Juegos
7. Miscelánea
8. Mandatos de Administración del Sistema
A veces man no muestra el ítem que deseamos porque el mismo nombre aparece en varias secciones. Por ejemplo, si queremos ayuda del servicio open, man open no nos muestra el servicio sino un mandato (código 1). En estos casos se puede solicitar que busque sólo en una de las secciones: man 2 open muestra el servicio open.


Utilice info para obtener información del mandato date y compare con la información suministrada por man.

Trucos de teclado

En algunos Shell, como en el caso de bash, utilizando la tecla de tabulación podemos completar nombres de mandatos y archivos de manera automática.


Cuando existen varias alternativas al pulsar el tabulador, en vez de completar emite un sonido. Pulsando otra vez el tabulador aparecerá una lista con las distintas alternativas existentes. Escriba «d» y pulse el tabulador. Vuelva a pulsar el tabulador. Verá que se muestran todas las posibles alternativas a ejecutar que comienzan con la letra d

Las combinaciones [Ctrl+s] y [Ctrl+q] sirven para parar y volver a arrancar la salida. Escriba todo seguido: ls -l [Ctrl+s] Ret. Observará que no se produce ninguna salida. Pulse, ahora, [Ctrl+q], verá como aparece el resultado del mandato ls.

Mediante la utilización de las teclas ↑ y ↓, se puede navegar a través del histórico de mandatos que se han utilizado previamente. Pruebe esta combinación de teclas y verá como aparecen los mandatos que ha utilizado.

Cierre la sesión con logout o exit.

EL ÁRBOL DE DIRECTORIOS

El árbol de directorios permite identificar ficheros y dispositivos.

Los sistemas Unix se organizan en un único árbol de directorios. El origen de este árbol de directorios se denomina directorio raíz, y de él cuelgan el resto de directorios que contenga el sistema. Además del directorio raíz, existen otros dos directorios “especiales”. El directorio home, es el directorio asociado a una cuenta de usuario. Es el directorio en el que un usuario se sitúa, por defecto, al entrar en una máquina Linux y en el que el usuario puede almacenar sus ficheros. El directorio de trabajo es el directorio en el que se sitúa el Shell en cada momento.

Los mandatos más importantes en relación con el árbol de directorios son: ls, cd, pwd, mkdir, rm y rmdir

Listar ficheros

El mandato ls permite listar los ficheros de un directorio. Si no se especifica el nombre del directorio, ls lista el directorio de trabajo. Con la opción –l (no confundir con el «1») suministra varios datos adicionales de cada fichero, con el siguiente significado:

  • “Total 342” indica el tamaño físico ocupado por el contenido que se ha listado, expresado en MB. En prácticas sucesivas se verá la diferencia entre tamaño real y tamaño físico de un fichero.
  • El tipo de fichero puede ser:
    • «-» cuando es un fichero normal.
    • «d» cuando se trata de un directorio.
    • «b» o «c» cuando se trata, respectivamente, de un dispositivo de bloques o caracteres.
    • «l» cuando se trata de un vínculo simbólico.
    • «p» cuando se trata de una conexión.
    • «s» cuando se trata de una conexión local.
  • Los permisos indican las operaciones que están permitidas (r: lectura, w: escritura, x: ejecución) para el usuario, grupo del usuario y resto del mundo.
  • En el caso de tratarse de un directorio, el siguiente número indica el número de enlaces o directorios dentro del directorio. El número de directorios, por defecto, será 2, puesto que al menos existirán los directorios «.» y «..».
  • El dueño del fichero suele ser el usuario que creó el fichero.
  • El tamaño es el tamaño real expresado en bytes.

En principio, su cuenta de usuario estará vacía, por lo que si ejecuta el mandato ls no se listará ningún fichero.

Crear un directorio

Para crear un directorio (por ejemplo ProgrPrac) se ejecuta el mandato mkdir como sigue:

alumno@maquinaLinux:~$ mkdir ProgrPrac

El directorio es creado dentro del directorio de trabajo. Por tanto, hay que estar en el lugar deseado o hay que dar el nombre completo del directorio a crear.

Intente crear un directorio en el raíz, verá que, si no es súper usuario, no podrá hacerlo.

Eliminar un directorio

Para eliminar un directorio (por ejemplo ProgrPrac, recién creado) se ejecuta el mandato rmdir como sigue:

alumno@maquinaLinux:~$ rmdir ProgrPrac

Para eliminar un directorio mediante este mandato, es necesario que dicho directorio esté vacío (no contenga ni ficheros ni subdirectorios). En el caso de que el directorio a eliminar no esté vacío, obtendríamos el siguiente error:

alumno@maquinaLinux:~$ rmdir ProgrPrac 
rmdir: 'ProgrPrac/': Directory not empty

Para borrar un directorio primero hay que vaciarlo. Para ello utilizamos el mandato rm. Observe que el carácter «*» indica todos los ficheros. Es muy peligroso usar un mandato rm con un «*», puesto que puede borrar más de lo que queremos, hay que estar muy seguro de lo que se está haciendo. Además, no podemos deshacer el borrado.

alumno@maquinaLinux:~$ rm ProgrPrac/*  
alumno@maquinaLinux:~$ rmdir ProgrPrac

Otra opción, si queremos eliminar un directorio independientemente de que esté vacío o no, es utilizar el mandato rm (man rm).


Cambiar el directorio de trabajo

Para cambiar el directorio de trabajo se utiliza el mandato cd. Por ejemplo, para posicionarnos en el directorio recién creado ponemos:

alumno@maquinaLinux:~$ cd ProgrPrac/
alumno@maquinaLinux:~/ProgrPrac$

Observamos que ahora el prompt ha cambiado, para indicarnos el cambio de directorio (que el prompt cambie depende de su configuración).

Con cd .. (No olvidar el espacio) se retrocede un nivel en el árbol de directorios.

alumno@maquinaLinux:~/ProgrPrac$ cd ..
alumno@maquinaLinux:~$

El mandato pwd muestra la ruta absoluta al directorio actual (nos permite conocer el lugar en el que estamos dentro del árbol de directorios). Es especialmente útil cuando el prompt no muestra el directorio.

alumno@maquinaLinux:~$ pwd
/home/alumnosSSOO/alumno/

Si ejecutamos pwd en el directorio home, como en el ejemplo anterior, obtenemos el nombre completo de nuestro directorio home.


En el ejemplo hemos obtenido el nombre completo del directorio de trabajo de la cuenta alumno.

Observe que el directorio home se representa por «~», tal y como aparece en el prompt. Para obtener el carácter «~» hay que pulsar la combinación de teclas [AltGr+4] y pulsar seguidamente el blanco (barra espaciadora).

Con el mandato cd / nos posicionamos en el directorio raíz. Después de ejecutar ese mandato debe volver a su directorio home para seguir con los ejercicios. Puede volver poniendo el camino de su directorio home, en nuestro ejemplo, con el mandato cd /home/alumnosSSOO/alumno/, con el mandato cd ~, o bien simplemente con cd

Practique los mandatos ls y cd para moverse y conocer el árbol de directorios de su máquina de prácticas.

Los directorios de Linux

Obtenga el contenido del directorio raíz.

alumno@maquinaLinux:/$ ls -l
total 160
drwxr-xr-x   2 root root  4096 May 14 12:49 bin
drwxr-xr-x   4 root root  3072 Jul  2 10:26 boot
drwxr-xr-x  12 root root  4080 Jul  3 09:46 dev
drwxr-xr-x 120 root root 12288 Jul  9 13:38 etc
drwxr-xr-x   5 root root  4096 Mar 11 18:56 home
drwxr-xr-x  12 root root  4096 May 14 04:03 lib
drwxr-xr-x   7 root root  4096 Jun  9 04:02 lib64
drwx------   2 root root 16384 Jan 19 12:35 lost+found
drwxr-xr-x   2 root root  4096 Mar 11 18:56 media
drwxr-xr-x   2 root root     0 Jul  3 09:46 misc
drwxr-xr-x   2 root root  4096 Mar 11 18:56 mnt
drwxr-xr-x   2 root root     0 Jul  3 09:46 net
drwxr-xr-x   5 root root  4096 Apr 15 17:08 opt
dr-xr-xr-x 186 root root     0 Jul  3 11:45 proc
drwxr-x---  23 root root  4096 Jul  9 13:02 root
drwxr-xr-x   2 root root 12288 Jun 23 04:02 sbin
drwxr-xr-x   2 root root  4096 Mar 11 18:56 selinux
drwxr-xr-x   2 root root  4096 Mar 11 18:56 srv
drwxr-xr-x  11 root root     0 Jul  3 11:45 sys
drwxrwxrwt  15 root root  4096 Jul  9 16:39 tmp
drwxr-xr-x  16 root root  4096 Apr  2 11:46 usr
drwxr-xr-x  26 root root  4096 Jun  8 09:49 var

La estructura que encontrará será parecida a la mostrada. El dueño del directorio raíz y de sus subdirectorios será el súper usuario o root. El uso de algunos de dichos subdirectorios es el siguiente:

  • /bin: ejecutables para todos los usuarios.
  • /boot: ficheros utilizados en el arranque del sistema operativo.
  • /dev: dispositivos.
  • /etc: ficheros de configuración del sistema.
  • /home: contiene los directorios home de los usuarios.
  • /lib: bibliotecas fundamentales compartidas y módulos del núcleo.
  • /lib64: bibliotecas fundamentales compartidas y módulos del núcleo para sistemas de 64bits.
  • /mnt: punto en el que se montan los sistemas de ficheros temporales (p. ej.: lápiz usb)
  • /proc: información de los procesos (programas en ejecución) y del sistema.
  • /root: directorio home del súper usuario (usuario root).
  • /sbin: ejecutables para el usuario root.
  • /tmp: ficheros temporales.
  • /usr: extensión de aplicaciones del sistema operativo que no son necesarias para su arranque.
  • /var: Archivos de configuración y datos específicos del sistema.

En ejercicios posteriores verá el uso que se hace del directorio /proc para obtener información del proceso y sistema.

Ficheros ocultos y directorios <.> y <..>

Con la opción –a del mandato ls obtenemos los ficheros ocultos, así como los directorios de nombre «.» y «..». El nombre «.» se refiere al directorio que lo contiene /home/alumnosSSOO/alumno en el ejemplo) y el nombre «..» se refiere al directorio padre de este (/home/alumnosSSOO en el ejemplo). Por esta razón el mandato cd .. retrocede al directorio padre.

alumno@maquinaLinux:~$ pwd
/home/alumnosSSOO/alumno/
 
alumno@maquinaLinux:~$ ls -l
total  4             
drwxr-xr-x  2  alumno GrupoAlumno 4096 Jul 23 11:09 ProgrPrac 
 
alumno@maquinaLinux:~$ ls -la
total  52             
drwxr-xr-x  4  alumno  GrupoAlumno 4096  Jul 23  12:16  . 
drwxr-xr-x  3  root    root      4096    Jul 21  19:21  .. 
-rw-r--r--  1  alumno  GrupoAlumno 266   Jul 21  19:21  .alias 
-rw-------  1  alumno  GrupoAlumno 772   Jul 23  11:51  .bash_history 
-rw-r--r--  1  alumno  GrupoAlumno 174   Jul 21  19:21  .bash_logout 
-rw-r--r--  1  alumno  GrupoAlumno 414   Jul 21  19:21  .bash_profile 
-rw-r--r--  1  alumno  GrupoAlumno 2044  Jul 21  19:21  .bashrc 
-rw-r--r--  1  alumno  GrupoAlumno 375   Jul 21  19:21  .cshrc 
drwxr-xr-x  3  alumno  GrupoAlumno 4096  Jul 23  10:52  .emacs.d 
-rw-r--r--  1  alumno  GrupoAlumno 85    Jul 23  12:09  .projects.ede 
-rw-------  1  alumno  GrupoAlumno 970   Jul 23  11:29  .viminfo 
-rw-r--r--  1  alumno  GrupoAlumno 59    Jul 21  19:21  .zshrc 
drwxr-xr-x  2  alumno  GrupoAlumno 4096  Jul 23  11:09  ProgrPrac

Caracteres de extensión

El Shell, además de ser el encargado de interpretar los mandatos, es capaz de interpretar ciertos caracteres especiales llamados caracteres de extensión. Cuando se utiliza alguno de ellos, los mandatos no lo reciben, sino que el Shell reemplaza ese carácter especial por lo que corresponda. De este modo el mandato recibe esta sustitución en lugar del carácter de extensión.

Al especificar los nombres de los ficheros y directorios se pueden utilizar los siguientes caracteres de extensión.

  • * → equivale a cualquier número de caracteres, incluso a ningún carácter.
  • ? → equivale a un carácter exactamente. El carácter puede ser cualquiera.
  • [abcde] → equivale a un único carácter de los de la lista especificada.
  • [a-e] → equivale a un único carácter de los del rango especificado.
  • [^abcde] → equivale a un único carácter que no sea de la lista especificada.
  • [^a-e] → equivale a un único carácter que no sea del rango especificado.
alumno@maquinaLinux:~$ ls -la .b*
-rw-------   1   alumno   GrupoAlumno   2737   Jul 23   14:09   .bash_history 
-rw-r--r--   1   alumno   GrupoAlumno   174    Jul 21   19:21   .bash_logout 
-rw-r--r--   1   alumno   GrupoAlumno   414    Jul 21   19:21   .bash_profile 
-rw-r--r--   1   alumno   GrupoAlumno   2044   Jul 21   19:21   .bashrc

Vemos en el ejemplo que ahora solamente obtenemos los ficheros que empiezan por «.b».



Copiar ficheros

El mandato cp permite copiar uno o múltiples ficheros a un directorio destino. La sintaxis básica del mandato es la siguiente:

alumno@maquinaLinux:~$ cp fichero_origen directorio_destino

De este modo, si no se produce ningún error en el proceso de copia y listamos el directorio destino, veremos el siguiente resultado:

alumno@maquinaLinux:~$ ls directorio_destino
fichero_origen

Mover ficheros

El mandato mv permite cambiar el nombre de un fichero o bien mover el fichero especificado a una nueva ubicación. Si proporcionamos dos nombres de fichero, entonces el mandato mv, cambia el nombre del primer fichero por el segundo nombre:

alumno@maquinaLinux:~$ ls -l
total 0
-rw-r--r-- 1 alumno GrupoAlumno 0 jul  9 22:22 fichero_1
alumno@maquinaLinux:~$ mv fichero_1 fichero_nuevo
alumno@maquinaLinux:~$ ls -l
total 0
-rw-r--r-- 1 alumno GrupoAlumno 0 jul  9 22:22 fichero_nuevo

Si proporcionamos, al mandato mv, el nombre de un fichero y un directorio destino, entonces moveremos el fichero origen al directorio especificado:

alumno@maquinaLinux:~$ mkdir directorio_destino
alumno@maquinaLinux:~$ ls -l
total 4
drwxr-xr-x 2 alumno GrupoAlumno 4096 jul  9 22:23 directorio_destino
-rw-r--r-- 1 alumno GrupoAlumno    0 jul  9 22:22 fichero_nuevo
alumno@maquinaLinux:~$ mv fichero_nuevo directorio_destino/
alumno@maquinaLinux:~$ ls -l
total 4
drwxr-xr-x 2 alumno GrupoAlumno 4096 jul  9 22:23 directorio_destino
alumno@maquinaLinux:~$ ls -l directorio_destino/
total 0
-rw-r--r-- 1 alumno GrupoAlumno 0 jul  9 22:22 fichero_nuevo
alumno@maquinaLinux:~$

Eliminar ficheros

Para eliminar ficheros disponemos del mandato rm. Es muy importante tener en cuenta que los ficheros eliminados no serán “recuperables”.
Adicionalmente, Linux dispone de un mandato que permite hacer imposible la recuperación de un fichero. Dicho mandato es shred. El mandato shred sobrescribe un fichero, para eliminar su contenido y mediante la opción -u permite eliminarlo definitivamente. De este modo nos aseguramos que la información contenida en el fichero así eliminado no pueda ser recuperada.

EDITORES DE TEXTO Y OTROS MANDATOS

nano Editor de textos sencillo. Incluye una pequeña ayuda donde «^G» significa la secuencia de teclas [Ctrl+g]. Para salir pulsar [Ctrl+x].
pico Editor de textos sencillo. Incluye una pequeña ayuda donde «^G» significa la secuencia de teclas [Ctrl+g]. Para salir pulsar [Ctrl+x]. (no disponible en triqui
vi Editor de textos completo (aunque poco amigable al principio) que se incluye en todos los sistemas UNIX y es utilizado por los expertos. Para salir sin modificar el fichero hay que pulsar la secuencia siguiente: «Esc», «:», «q» y «Ret». Para salir modificando el fichero usar: «Esc», «:», «w», «q», «!» y «Ret». Para aprender a utilizar el editor vi se puede utilizar el vimtutor, lo que le exigirá unos 30 minutos. Si está interesado ejecute el mandato vimtutor es.
emacs Editor de textos muy completo. Para salir utilizar la secuencia [Ctrl+x] [Ctrl+c] y conteste con «y» o «n» según quiera o no salvar las modificaciones realizadas sobre el fichero. Para poder hacer uso del editor en modo texto desde un Terminal PuTTy, será necesario especificar la opción –nw. En caso contrario, el editor intentará iniciar en modo gráfico, generando un error.
cat Visualiza el contenido de un fichero
less Visualiza el contenido de un fichero pantalla a pantalla, así como desplazarse hacia arriba y hacia abajo
wc Cuenta las palabras y líneas del fichero especificado

Ejecute los mandatos siguientes:

Cree el directorio FicherosPrac y entre en él.

alumno@maquinaLinux:~$ mkdir FicherosPrac
alumno@maquinaLinux:~$ cd FicherosPrac/

Ejecute el editor de textos pico o nano creando un fichero llamado Prueba.

alumno@maquinaLinux:~/FicherosPrac$ pico Prueba

Dentro de la ventana pico/nano teclee un texto, por ejemplo:Esto es una prueba. Salga del editor pico mediante:

[Ctrl+x]
Y        (para salvar el texto)
Ret      (tecla de retorno de carro)

Vea que ahora tiene el fichero Prueba, creado con el editor.

alumno@maquinaLinux:~/FicherosPrac$ ls -l
total   4
-rw-r--r--   1   alumno   GrupoAlumno   18   Jul 23   11:59   Prueba

Muestre, con el mandato cat, el contenido del fichero Prueba.

alumno@maquinaLinux:~/FicherosPrac$ cat Prueba
Esto es una prueba

Copie, con el mandato cp, el fichero Prueba al fichero Otro.

alumno@maquinaLinux:~/FicherosPrac$ cp Prueba Otro
alumno@maquinaLinux:~/FicherosPrac$ ls -l
total    8             
-rw-r--r--   1   alumno   GrupoAlumno   18   Jul 23   11:59   Otro 
-rw-r--r--   1   alumno   GrupoAlumno   18   Jul 23   11:59   Prueba

Cambie el nombre del fichero Prueba a Prueba2.

alumno@maquinaLinux:~/FicherosPrac$ mv Prueba Prueba2
alumno@maquinaLinux:~/FicherosPrac$ ls -l
total    8             
-rw-r--r--   1   alumno   GrupoAlumno   18   Jul 23   11:59   Otro 
-rw-r--r--   1   alumno   GrupoAlumno   18   Jul 23   11:59   Prueba2

Mueva el fichero Prueba2 al directorio padre. Liste el contenido del directorio y del directorio padre.

alumno@maquinaLinux:~/FicherosPrac$ mv Prueba2 ..
alumno@maquinaLinux:~/FicherosPrac$ ls -l
total    4             
-rw-r--r--   1   alumno   GrupoAlumno   18   Jul 23   11:59   Otro 
 
alumno@maquinaLinux:~/FicherosPrac$ ls -l ..
total    8             
drwxr-xr-x   2   alumno   GrupoAlumno   4096   Jul 25   08:12   FicherosPrac 
-rw-r--r--   1   alumno   GrupoAlumno   18     Jul 23   11:59   Prueba2

Borre, con el mandato rm, el fichero Prueba2, que se encuentra en el directorio padre.

alumno@maquinaLinux:~/FicherosPrac$ rm ../Prueba2 
alumno@maquinaLinux:~/FicherosPrac$ ls -l ..
total    4             
drwxr-xr-x   2   alumno   GrupoAlumno   4096   Jul 25   08:12   FicherosPrac

Abra el fichero Otro con el editor vi.

alumno@maquinaLinux:~/FicherosPrac$ vi Otro

Salga del editor vi sin modificar el fichero mediante las tres teclas «:», «q» y «Ret». Abra el fichero Otro con el editor emacs.

alumno@maquinaLinux:~/FicherosPrac$ emacs -nw Otro

Modifique el fichero Otro añadiendo texto a continuación de Esto es una prueba. Salga del editor emacs mediante: [Ctrl+x] y [Ctrl+c] y guarde las modificaciones realizadas. Observe, con el mandato cat, el contenido del fichero Otro y ejecute el mandato wc sobre el fichero Otro

alumno@maquinaLinux:~/FicherosPrac$ cat Otro
Esto es una prueba. Al que hemos añadido texto.
alumno@maquinaLinux:~/FicherosPrac$ wc Otro
2 9 49 Otro


Ejecute el mandato ls. Observará que ha aparecido el fichero Otro~. Muchas aplicaciones que modifican ficheros, como son los editores de texto, pueden crear automáticamente copias de salvaguarda o backup. Para diferenciar esas copias de los originales le suelen añadir al final del nombre el carácter «~».

alumno@maquinaLinux:~/FicherosPrac$ ls -la
total    8             
-rw-r--r--   1   alumno   GrupoAlumno   49   Jul 24   12:32   Otro 
-rw-r--r--   1   alumno   GrupoAlumno   20   Jul 24   12:31   Otro~

Compare el número de caracteres del fichero suministrado por el mandato wc con el tamaño del fichero suministrado por el mandato ls.


OTROS MANDATOS PARA FICHEROS

Agrupar y comprimir ficheros

Para agrupar o comprimir un conjunto de ficheros se pueden utilizar los mandatos tar y gzip.

Mandato tar

El mandato tar genera un fichero a partir de un conjunto de ellos, es decir permite agrupar (empaquetar) un conjunto de ficheros en un único fichero. Adicionalmente, este fichero se puede comprimir.
Para probar el funcionamiento de este mandato, en primer lugar crearemos un nuevo fichero en el directorio FicherosPrac (p. ej. copiando el fichero Otro a Nuevo). De este modo dicho directorio contendrá 3 ficheros.

alumno@maquinaLinux:~$ cp FicherosPrac/Otro FicherosPrac/Nuevo 
alumno@maquinaLinux:~$ ls FicherosPrac 
Nuevo Otro Otro~

Utilice el mandato man para conocer las opciones del mandato tar necesarias para crear un fichero de nombre colecc_1.tar del contenido del directorio FicherosPrac y cree dicho fichero.


El mandato tar - t muestra los nombres de los ficheros contenidos en un fichero .tar.

alumno@maquinaLinux:~$ tar -tv -f colecc_1.tar 
drwxr-xr-x   alumno/GrupoAlumno   0    2009-07-24   13:42:06   FicherosPrac/ 
-rw-r--r--   alumno/GrupoAlumno   49   2009-07-24   13:42:06   FicherosPrac/Nuevo 
-rw-r--r--   alumno/GrupoAlumno   49   2009-07-24   12:32:20   FicherosPrac/Otro 
-rw-r--r--   alumno/GrupoAlumno   20   2009-07-24   12:31:26   FicherosPrac/Otro~

El mandato tar también nos permite extraer (desempaquetar) los ficheros contenidos en un fichero .tar. Para ello basta con ejecutar dicho mandato con la opción -x. Cambie de directorio de trabajo a FicherosPrac, y a continuación extraiga el contenido del fichero colecc_1.tar anteriormente creado. En el ejemplo, observe que, al poner ../colecc_1.tar nos estamos refiriendo al fichero colecc_1.tar que está en el directorio padre del de trabajo.

alumno@maquinaLinux:~$ cd FicherosPrac 
alumno@maquinaLinux:~/FicherosPrac$ tar -xv -f ../colecc_1.tar
FicherosPrac/
FicherosPrac/Nuevo
FicherosPrac/Otro
FicherosPrac/Otro~

Con ls observe que dentro del directorio FicherosPrac aparece otro FicherosPrac, que ha sido creado al extraer el tar.

alumno@maquinaLinux:~/FicherosPrac$ ls -l 
total 16         
drwxr-xr-x   2   alumno   GrupoAlumno   4096   Jul 24 13:42   FicherosPrac 
-rw-r--r--   1   alumno   GrupoAlumno   49     Jul 24 13:42   Nuevo 
-rw-r--r--   1   alumno   GrupoAlumno   49     Jul 24 12:32   Otro 
-rw-r--r--   1   alumno   GrupoAlumno   20     Jul 24 12:31   Otro~

Posiciónese en este nuevo directorio y observe que tiene los ficheros que se habían incluido en el tar.

alumno@maquinaLinux:~/FicherosPrac$ cd FicherosPrac/ 
alumno@maquinaLinux:~/FicherosPrac/FicherosPrac$ ls -l 
total 12         
-rw-r--r--   1   alumno   GrupoAlumno   49   Jul 24 13:42   Nuevo 
-rw-r--r--   1   alumno   GrupoAlumno   49   Jul 24 12:32   Otro 
-rw-r--r--   1   alumno   GrupoAlumno   20   Jul 24 12:31   Otro~

Sitúese en el directorio ~/FicherosPrac, y borre el directorio creado en esta última secuencia.

El mandato tar -czf empaqueta con formato .tar y comprime con formato gzip. Estos ficheros (muy usados) deben usar la extensión .tar.gz, o bien .tgz.


El contenido de un .tar.gz se puede mostrar con el mismo mandato usado para un .tar. Listamos los ficheros del tar, para observar los que se han incluido.



El mandato tar dispone también de una opción que permite extraer un fichero tar comprimido.


Mandato gzip

Con el mandato gzip podemos comprimir y descomprimir ficheros. Los ficheros comprimidos obligatoriamente han de incluir la extensión .gz. Dado que gzip utiliza el mismo algoritmo de compresión que el tar, se puede descomprimir un tar comprimido. Veamos un ejemplo: descomprima el tar comprimido generado anteriormente como se muestra a continuación.

alumno@maquinaLinux:~$ ls -l
total    12             
drwxr-xr-x   2   alumno   GrupoAlumno   4096   Jul 24   16:46   FicherosPrac 
drwxr-xr-x   2   alumno   GrupoAlumno   4096   Jul 23   13:12   ProgrPrac 
-rw-r--r--   1   alumno   GrupoAlumno   10240  Jul 24   19:46   colecc_1.tar
-rw-r--r--   1   alumno   GrupoAlumno   274    Jul 24   19:46   colecc_2.tar.gz
 
 
alumno@maquinaLinux:~$ gzip -d colecc_2.tar.gz
alumno@maquinaLinux:~$ ls -l
total    20             
drwxr-xr-x   2   alumno   GrupoAlumno   4096    Jul 24   16:46   FicherosPrac 
drwxr-xr-x   2   alumno   GrupoAlumno   4096    Jul 23   13:12   ProgrPrac 
-rw-r--r--   1   alumno   GrupoAlumno   10240   Jul 24   19:46   colecc_1.tar
-rw-r--r--   1   alumno   GrupoAlumno   10240   Jul 24   19:46   colecc_2.tar

Observe que el mandato gzip ha borrado el fichero con extensión .gz y ha producido el fichero descomprimido. Observe los tamaños de ambos ficheros: 274 B frente a 10240 B.


Borre los ficheros y directorios creados.

alumno@maquinaLinux:~$ ls -l
total    20             
drwxr-xr-x   2   alumno   GrupoAlumno   4096    Jul 24   16:46   FicherosPrac 
drwxr-xr-x   2   alumno   GrupoAlumno   4096    Jul 23   13:12   ProgrPrac 
-rw-r--r--   1   alumno   GrupoAlumno   10240   Jul 24   19:46   colecc_1.tar
-rw-r--r--   1   alumno   GrupoAlumno   10240   Jul 24   19:46   colecc_2.tar
alumno@maquinaLinux:~$ rm *.tar 
alumno@maquinaLinux:~$ rm FicherosPrac/* 
alumno@maquinaLinux:~$ rmdir FicherosPrac/
alumno@maquinaLinux:~$ rm ProgrPrac/*  
alumno@maquinaLinux:~$ rmdir ProgrPrac/

Buscar ficheros

Para buscar ficheros se puede utilizar el mandato find.

El mandato find sirve para buscar, a partir de un punto del árbol de directorios, ficheros que cumplan determinados criterios. Se puede especificar:

  • El directorio en el que queremos buscar. Se busca en ese directorio y en sus subdirectorios
  • Con la opción -type el tipo de fichero a buscar (datos o directorio)
  • Con la opción -name el nombre del fichero a buscar

En el ejemplo siguiente se busca en el directorio /lib/, y en todos sus subdirectorios, los ficheros de cualquier tipo cuyo nombre contiene la cadena sl.

alumno@maquinaLinux:~$ find /lib/ -name '*sl*'
/lib/modules/2.2.19pre17/net/slhc.o
/lib/modules/2.2.19pre17/net/slip.o
/lib/modules/2.2.19pre17/misc/radio-aimslab.o
/lib/libslang.so.2.0.4
/lib/libslang.so.1
/lib/tls/libnsl-2.3.2.so
/lib/tls/libnsl.so.1
/lib/libslang.so.1.4.9
/lib/libslang.so.1-UTF8.4.9
/lib/libslang.so.1-UTF8
/lib/libnsl.so.1
/lib/libslang.so.2
/lib/libnsl-2.3.2.so


Buscar dentro de ficheros

El mandato grep sirve para buscar en los ficheros especificados líneas que contengan un determinado texto (man grep).

En el fichero /etc/passwd se almacena información sobre los usuarios que pueden acceder a la máquina, así como cierta información para cada uno de estos usuarios, como es: nombre de la cuenta, clave encriptada o x, UID de la cuenta, GID del grupo al que pertenece la cuenta, nombre del usuario, directorio de trabajo, y el Shell.


Descargar los ficheros de los ejercicios

Descargar de la web de la asignatura el material de apoyo de las prácticas de análisis (es un fichero .tgz) y ubicarlo en una cuenta Linux.

Mediante el mandato ls –l, compruebe que el fichero ha sido transferido.

alumno@maquinaLinux:~$ ls -l 
total    4             
-rw-r--r--   1   alumno   GrupoAlumno   17628   Feb 14   19:19   ProgrPrac-x.x.tgz


Descomprima el fichero ProgrPrac-x.x.tgz y sitúese dentro del directorio creado, en el subdirectorio relativo a este módulo (ModuloIntroduccion).

Comparar ficheros

Mandato cmp

El mandato cmp permite comparar dos ficheros, de cualquier tipo, byte a byte.

Copie el fichero CPUyES.c al fichero CPUyESmio.c.

alumno@maquinaLinux:~/PracticasAnalisis/ModuloIntroduccion$ cp CPUyES.c CPUyESmio.c

Modifique el fichero CPUyESmio.c, por ejemplo con el editor vi y salve el fichero modificado. Compare los ficheros CPUyES.c y CPUyESmio.c con el mandato cmp. Este mandato, sin opciones, indica la primera diferencia.

alumno@maquinaLinux:~/PracticasAnalisis/ModuloIntroduccion$ cmp CPUyES.c CPUyESmio.c 
CPUyES.c CPUyESmio.c differ: char 11, line 1


Con la opción -l el mandato cmp nos indica todas las diferencias, de acuerdo al formato siguiente: nº de byte en decimal, valor en formato octal del byte (código ASCII) en el primer fichero y valor en formato octal del byte (código ASCII) en el segundo fichero. Con la opción -b, se muestran los caracteres además de su valor en formato octal. Por lo tanto, obtendremos una línea por cada byte diferente.

alumno@maquinaLinux:~/PracticasAnalisis/ModuloIntroduccion$ cmp -l -b CPUyES.c CPUyESmio.c 
cmp: EOF on CPUyES.c
cmp: EOF on CPUyES.c
 10  56 .    155 m
 11 143 c    151 i
 12  40      157 o
 13  52 *     56 .
 14  57 /    143 c
 15  12 ^J    40
…….
Más líneas que no reproducimos
……..
901  60 0    141 a
902  73 ;     40
903  12 ^J   145 e
904 175 }    163 s
905  12 ^J   143 c

Mandato diff

El mandato diff compara dos ficheros de texto línea a línea. Compare los ficheros CPUyES.c y CPUyESmio.c con el mandato diff.

alumno@maquinaLinux:~/PracticasAnalisis/ModuloIntroduccion$ diff CPUyES.c CPUyESmio.c 
1c1
< /* CPUyES.c */
---
> /* CPUyESmio.c */
6a7
> modificado por Luis Miguel
14c15
<  *    CPUyES
---
>  *    CPUyESmio
16c17
< #define MYNAME        "CPUyES"
---
> #define MYNAME        "CPUyESmio"

Con 1c1, 13c11, etc. se indican los números de las dos líneas que tienen diferencias.
El carácter < indica el contenido de la línea del primer fichero.
El carácter > indica el contenido de la línea del segundo fichero.
Con 6a7 se indica que en el segundo fichero hay una línea que no existe en el primero.


Borre el fichero CPUyESmio.c.

PERMISOS

Los elementos del árbol de directorios tienen asociados unos permisos que definen las operaciones que pueden hacer los usuarios. Los permisos se definen mediante nueve bits, como se muestra en la figura:

El significado de estos bits, para ficheros normales, es el siguiente:

Representación octal Texto equivalente Representación Binaria Significado
0 --- 000 Sin permisos
1 --x 001 Ejecución
2 -w- 010 Escritura
3 -wx 011 Escritura + Ejecución
4 r-- 100 Lectura
5 r-x 101 Lectura + Ejecución
6 rw- 110 Lectura + Escritura
7 rwx 111 Lectura + Escritura + Ejecución

IMPORTANTE: En el caso de los directorios la tabla es parecida, sólo hay que sustituir Ejecución por Acceso.

Umask

Cada vez que un proceso (programa en ejecución) crea un fichero es necesario asignarle unos permisos. Para ello, el proceso solicita (al sistema operativo) la asignación de unos permisos concretos. En ciertos casos conviene limitar la capacidad del proceso de asignar cualquier permiso, así que el sistema operativo filtra la solicitud a través de una máscara de bits que contiene a 1 los permisos “prohibidos”, que nunca puede asignar el proceso. Los permisos del fichero se obtienen haciendo una operación “AND NOT máscara”: un AND lógico entre la máscara negada y los permisos solicitados. Cada proceso puede tener una máscara diferente. Si el proceso no especifica los permisos solicitados, por defecto solicita todos, es decir, 111 111 111.

El mandato umask nos permite conocer la máscara y cambiarla.

Ejecute umask.

alumno@maquinaLinux:~$ umask


Por ejemplo, la máscara 0022 =0 000 010 010 indica que se prohíbe la escritura al grupo y al mundo. Con estas condiciones creamos un fichero mediante el mandato sort. El mandato sort lee de la entrada estándar, ordena alfabéticamente las líneas leídas y las escribe por la salida estándar (aunque en este caso, se redirige la salida estándar al fichero Salida).

alumno@maquinaLinux:~$ sort > Salida 
Amelia
Pedro
Aurelio
[Ctrl+D]

La combinación [Crt+d] indica fin de fichero, por lo que el mandato sort termina y genera el fichero Salida. Utilice el mandato cat, para ver que el fichero Salida está ordenado alfabéticamente. Observe los permisos del fichero Salida.

alumno@maquinaLinux:~$ ls -l S* 
-rw-r--r--   1   alumno   GrupoAlumno   21   Jul 25   13:38   Salida


En nuestro caso, la máscara ha actuado, prohibiendo la escritura al grupo y mundo. Como el fichero no es un ejecutable, los permisos de ejecución no están activos. Cambie la máscara.

alumno@maquinaLinux:~$ umask -S 0000
u=rwx,g=rwx,o=rwx 
alumno@maquinaLinux:~$ umask
0000

La máscara 0000 elimina todas las restricciones, por lo que no es adecuada. Ponga la máscara 0077, que prohíbe al grupo y mundo acceder a sus ficheros.

alumno@maquinaLinux:~$ umask -S 0077 
u=rwx,g=,o=

El efecto de umask dura hasta que termine la sesión del Shell en el que se ha ejecutado. Por tanto, al arrancar otro Shell tendrá la máscara por defecto. Para conseguir que todo Shell tenga la máscara que uno quiere, hay que introducir el mandato umask en el fichero oculto .bash_profile.

Edite el fichero .bash_profile para introducir, por ejemplo, una línea con el mandato umask -S 0077

alumno@maquinaLinux:~$ pico .bash_profile

Arranque un nuevo shell y compruebe la máscara.

Borre la línea que acaba de insertar en el fichero.

Chmod

El mandato chmod permite cambiar los permisos de un fichero.
Cambie los permisos del fichero creado más arriba.

   alumno@maquinaLinux:~$ chmod 0700 Salida 
   alumno@maquinaLinux:~$ ls -l S*
   -rwx------   1   alumno   GrupoAlumno   21   Jul 25   13:38   Salida

Borre el fichero de este ejercicio.

El primer dígito de la máscara y de los permisos, se explicarán más adelante a lo largo de la asignatura.


VARIABLES DE ENTORNO

Las variables de entorno mantienen información que está a disposición de los procesos que se ejecutan en el sistema.

Mediante el mandato env obtenemos las variables de entorno del proceso shell, variables que serán transmitidas a los procesos que se generen a partir de dicho shell. Dos variables muy interesantes son PATH y HOME. PATH define los directorios que se utilizan para buscar ejecutables. De esta forma no es necesario dar el nombre completo del ejecutable, basta con dar el nombre local y el sistema lo busca dentro de los directorios definidos en PATH. La búsqueda es ordenada de forma que si un programa está repetido se ejecutará el primero que se encuentre de acuerdo a la definición de PATH. HOME especifica el directorio home del usuario.

Ejecute env en su sistema.

alumno@maquinaLinux:~$ env
TERM=xterm
SHELL=/bin/bash
SSH_CLIENT=81.36.1.115 1864 22
SSH_TTY=/dev/pts/1
USER=alumno
MAIL=/var/mail/alumno
PATH=/usr/local/sdk/bin:/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/games
PWD=/home/alumnosSSOO/alumno
PS1=\u@\h:\w\$
JDK_HOME=/usr/local/software/j2sdk1.4.0
SHLVL=1
HOME=/home/alumnosSSOO/alumno
LOGNAME=alumno
SSH_CONNECTION=81.36.1.115 1864 138.100.9.35 22
_=/usr/bin/env


Se puede añadir o modificar el valor de una variable de entorno. Para ello basta con poner <nombre>=<dato>. Si la variable existe, se cambia su valor, si no existe, se crea con el valor <dato>.

Nota: No deje blancos ni antes ni después del signo igual.

Creamos una nueva variable de entorno. Esta variable es visible solamente en el proceso shell, no se heredará por los procesos que se lancen desde el shell.

alumno@maquinaLinux:~$ MIVAR=76

El mandato echo escribe por su salida estándar el valor de su parámetro. Para indicar una variable de entorno se precede su nombre del carácter «$».

Ejecute el mandatoecho para ver que la variable existe y conocer su valor.

alumno@maquinaLinux:~$ echo $MIVAR
76

Observe que si deja un blanco entre el «$» y el nombre de la variable de entorno el mandato echo lo toma como una cadena de caracteres y no como una variable

alumno@maquinaLinux:~$ echo $ MIVAR
$ MIVAR

Ejecute otra vez el mandato env y verá que la nueva variable no aparece. Para incorporarla al entorno heredable se utiliza el mandato export. Ejecute:

alumno@maquinaLinux:~$ export MIVAR

Ejecute otra vez el mandato env y verá que ahora la nueva variable sí aparece.

alumno@maquinaLinux:~$ env
TERM=xterm
SHELL=/bin/bash
SSH_CLIENT=81.36.1.115 1864 22
SSH_TTY=/dev/pts/1
USER=alumno
MAIL=/var/mail/alumno
PATH=/usr/local/sdk/bin:/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/games
PWD=/home/alumnosSSOO/alumno
PS1=\u@\h:\w\$
JDK_HOME=/usr/local/software/j2sdk1.4.0
SHLVL=1
HOME=/home/alumnosSSOO/alumno
LOGNAME=alumno
SSH_CONNECTION=81.36.1.115 1864 138.100.9.35 22
_=/usr/bin/env
MIVAR=76

No es recomendable modificar las variables de entorno, a menos que se sepa lo que se está haciendo.

(OPCIONAL) CONEXIÓN CON CLAVES PÚBLICA Y PRIVADA

(La realización de este apartado es opcional.)

Desde máquina Windows

Como ya hemos comentado anteriormente, una opción para realizar las prácticas es la conexión a una máquina remota Linux. Para facilitar estas conexiones remotas, desde una máquina Windows disponemos de una serie de aplicaciones como son:

  • PuTTYgen.- que permite la generación de claves RSA y DSA.
  • Pagent.- agente de autenticación SSH para PuTTY.
  • PuTTY.- client SSH

Aunque se pueden descargar todos en un único paquete de instalación:

La utilización de autenticación basada en clave pública y clave privada permite la conexión a sistemas remotos sin necesidad de recordar una clave de acceso para cada sistema. Sin entrar en profundidad en los conceptos teóricos, este tipo de autenticación se basa en la generación de un par de claves (una pública y otra privada). La clave pública deberemos publicarla en todos los sistemas a los que queramos acceder, mientras que la clave privada deberemos mantenerla protegida mediante password (para mayor seguridad) y no proporcionarla a nadie. Esto limita a la utilización de un único password (el de la clave privada) para el acceso a múltiples máquinas.

El procedimiento a seguir es el siguiente:

  1. Generación de la clave pública y la clave privada.-
    • Descargar y ejecutar la aplicación PuTTYgen.
    • Seleccionar el tipo de clave a generar, por ejemplo, SSH-2 DSA. Pulsar en el botón de Generate para generar el par de claves. Durante la generación de las mismas, se pedirá que mueva el ratón de manera aleatoria sobre la ventana del programa.
    • Proporcionar un password de acceso a la clave privada recién generada. (Key passphrase)
    • Almacenar tanto la clave pública como la privada (Save public key y Save private key).
    • Si abrimos el fichero de clave pública con un editor de texto, veremos algo similar a:
      ---- BEGIN SSH2 PUBLIC KEY ----
      Comment: "dsa-key-20080221"
      AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==
      ---- END SSH2 PUBLIC KEY ----
  2. Publicación de la clave pública en la máquina a la que se desea tener acceso.
    • Conexión a la máquina remota mediante PuTTY (Descargar y ejecutar la aplicación PuTTY)
    • Conexión a la máquina remota. Para ello podemos indicar como Host Name el usuario y la dirección de la máquina con el siguiente formato: user@maquina o user@direcciínIP. Además, podemos guardar esta configuración para futuros usos y evitar tener que indicarlo cada vez que nos conectemos. Pulsar Open.
    • Un aspecto muy interesante es seleccionar la opción Allow Agent Forwarding en la configuración de PuTTY (Category → Connection → SSH → Auth). De este modo, por simplificar su funcionalidad, la autenticación basada en clave pública y privada se propaga a través de todas las comunicaciones ssh que se realicen. Por ejemplo, si desde nuestra máquina local, nos conectamos a la máquina remota1, y desde ésta, a su vez, a la máquina remota2 en la que también estamos autorizados, no será necesario introducir ninguna clave adicional, ya que el agente se encargará de propagar nuestra identidad a la máquina remota2.
    • Se abrirá una ventana remota SSH en la que nos pedirán el password de acceso.
    • En el directorio Home (directorio asociado a la cuenta de usuario), que es en el que nos situaremos por defecto, deberemos crear si no existe un directorio denominado .ssh. En el caso de que exista simplemente nos situaremos dentro de dicho directorio.
    • Si existe el fichero authorized_keys pegaremos en él, la clave pública que hemos generado teniendo en cuenta que dicha clave debe estar en una única línea. Y añadiendo al principio de dicha línea el tipo de clave pública, p. ej. ssh-dss . Adicionalmente, a continuación del símbolo == podemos añadir información acerca de quien es el dueño de dicha clave pública.
ssh-dss AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== usuario@maquinaWindows
  • Guardamos el fichero y salimos de la máquina remota.
  1. Uso del agente de autenticación.
  • Descargar y ejecutar la aplicación Pagent. Aparecerá un icono de este aspecto en la barra de tareas.
  • Seleccionando dicho icono con el botón derecho del ratón, se desplegará un menú. Para añadir una nueva clave, deberemos seleccionar la opción Add key. Deberemos seleccionar la clave privada previamente generada e introducir la clave de acceso asociada a dicha clave.
  • Si hemos guardado la sesión anterior, ahora simplemente será necesario seleccionarla dentro de la opción Saved Sessions, del menú desplegable de Pagent. De este modo directamente accederemos a la máquina remota sin necesidad de introducir cada vez la clave de acceso.


Desde máquina Linux

La mayoría de distribuciones Linux también incorporan la aplicación openSSH para la gestión de claves. El procedimiento es prácticamente el mismo, salvo que varían las aplicaciones involucradas en el proceso.

  • Generación de las claves pública y privada.-
    1. Directorio de almacenamiento.- De manera habitual, las claves se almacenan en un directorio oculto, .ssh, cuyo directorio padre es el directorio home. Si no existe dicho directorio, será necesario crearlo.
    2. Para la generación de las claves, se utiliza la aplicación ssh-keygen. Si queremos crear una clave de tipo dsa, el mandato a ejecutar será:
alumno@maquinaLinux:~> ssh-keygen -t dsa
Generating public/private dsa key pair.
Enter file in which to save the key (/home/alumnosSSOO/alumno/.ssh/id_dsa): /home/alumnosSSOO/alumno/.ssh/id_dsa
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/alumnosSSOO/alumno/.ssh/id_dsa.
Your public key has been saved in /home/alumnosSSOO/alumno/.ssh/id_dsa.pub.
The key fingerprint is:
f5:6f:3f:9a:4b:9d:4a:bf:4f:69:0e:72:d3:94:fb:e5 alumno@maquinaLinux


De este modo, si listamos el contenido del directorio .ssh nos encontraremos con dos ficheros: id_dsa.pub, que contiene la clave pública e id_dsa que contiene la clave privada, protegida mediante la contraseña que hayamos establecido durante su creación.

alumno@maquinaLinux:~> ls -la ./.ssh
total 20
drwxr-xr-x  2 alumno GrupoAlumno 4096 jul  9 16:41 .
drwxr-xr-x 36 alumno GrupoAlumno 4096 jul  9 16:41 ..
-rw-------  1 alumno GrupoAlumno 736 jul  9 16:41 id_dsa
-rw-r--r--  1 alumno GrupoAlumno 612 jul  9 16:41 id_dsa.pub


  • Publicación de la clave pública en la máquina en la que se desea tener acceso.
    1. La aplicación ssh-copy-id, nos facilita la tarea de publicar nuestra clave pública en la máquina Linux a la que queremos acceder. ssh-copy-id agrega la clave pública que especifiquemos, en el archivo ~/.ssh/authorized_keys del usuario en la máquina remota. De este modo, la próxima vez que nos conectemos mediante ssh, la conexión será automática sin necesidad de introducir ninguna clave.


  • Uso del agente de autenticación.-
    1. Linux, también dispone de un agente que permite gestionar las claves privadas que se utilizarán para la autenticación de los usuarios utilizando ssh.
    2. Arranque del agente.- Para arrancar el agente, será necesario ejecutar el mandato ssh-agent (man ssh-agent). Como se indica en el manual de ayuda, para poder utilizar este agente de gestión de claves, será necesario establecer una serie de variables de entorno (concepto que se estudiará más adelante). La primera vez que ejecutemos ssh-agent, obtendremos una serie de variables de entorno que deberán ser exportadas. Al copiar las líneas que resultan de la ejecución y volverlas a pegar en nuestro Shell, ya podremos acceder al agente ssh. Para comprobar que el agente es accesible ejecute el siguiente mandato: ssh-add -l, el cual muestra todas las identidades que están siendo gestionadas por el agente.
    3. Agregación de claves al agente.- La agregación de claves al agente, se realiza mediante el mandato ssh-add.


 
docencia/asignaturas/sox/prv/practicas/analisis_so5/modulo_ux.txt · Última modificación: 2019/07/18 18:27 (editor externo)
 
Recent changes RSS feed Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki