En un sistema multiusuario (como Linux) tienen que diferenciarse los espacios (ambientes de trabajo) de los diferentes usuarios. Esto es una función del login que se encuentra como portal cada vez que se accede a la computadora. El segundo objetivo del login es la autentificación del usuario, o sea, detectar a través de una clave (secreta)=Password que la persona que utiliza el espacio de usuario indicado es este mismo. Es una medida básica de protección de los datos individuales de cada usuario.
Posibles formas de presentación son:
El nombre designa una cuenta (account) que es el espacio o ambiente de trabajo del usuario.
El sistema prove directamente después de la autentificación una facilidad para interactuar, es decir efectuar comandos y visualizar las respuestas correspondientes del sistema. Esta facilidad se llama procesador de linea de commandos - command line processor -, o ``shell'' en la nomenclatura de unix. ``shell'' signigica la cáscara de la concha y es un sinónimo para la capa visible del sistema operativo.
El shell lee una línea de texto que el usuario teclea. Al pulsar la tecla [Enter] interpreta el texto (por lo que también se le llama 'interpretador de línea de commandos=command line interpreter) y ejecuta los comandos encontrados. Si se cometió un error lo indica así. Al terminar los comandos el shell muestra una cadena de identificación llamado ``prompt'' y procede a leer la siguiente línea.
Existen diferentes shell, los tradicionales se llaman 'sh' y 'csh', otros son:bash, ash, zsh, ksh, csh, tcsh,... nosotros trabajamos unicamente con bash, que es compatible con sh y el shell official del software GNU.
En una línea de commando se escriben todos los elementos de un comando, separados por espacio en blanco ([Espacio]). Pueden concatenarse varios commandos, separados por el símbolo ';' (semicolon) en una sola línea.
Un commando tiene tres partes: nombre, opciones y parámetros. Solamente el nombre es obligatorio. Ejemplo:
nombre [opciones] [parámetros]
El proyecto GNU ha introducido opciones explicativas (long options) que consisten de una palabra entera y estan introducidas por dos guiones consecutivos: '-'. Ejemplo: -all
Opciones por su parte también pueden tener parámetros.
Ejemplos: -s15, -with_gettext=yes
son símbolos que pueden aparecer en los nombres de archivos, a veces también en los de los directorios. El comodín es sustituido por el shell con todos los nombres de archivos que cumplen con su forma.
El objeto principal en el uso de los sistemas operativos son los archivos. Los comandos mas usados para manipularlos se discuten aqui en brevedad.
'cp' puede copiar una lista de archivos, explícitamente nombrada, como directorio, o con wildcards hacia otro directorio. Si el directorio no existe se crea. No se pueden especificar jerarquías de directorios como destino, el comando
'ln' crea enlaces (links). Esto no son archivos, sino referencias hacia archivos, que se pueden imaginar como entradas duplificadas en un directorio. Existen enlaces simbólicos (soft link) y directos (hard link). Los primeros son como hiperenlaces en la web: un cadena de caracteres que refleja la ubicación original de un archivo o directorio, los segundos son copias directas. Por lo general se prefieren usar soft links.
find itera por todos los archivos del directorio especificado, o por omisión por el actual, y repite esta función recursivamente por todos los subdirectorios. Si no se especifica una operación, find imprime los nombres de archivos y directorios encontrados. Este comportamiento se puede modificar, usando operadores en forma de opciones con parámetros. Ejemplos:
find es un comando muy poderoso y se utiliza mucho en la
administración automatizada de sistemas. Para encontrar la ubicación
de un cierto archivo, por otro lado, es muy ineficiente ya que itera
cada vez por todo el disco duro. Para encontrar la ubicación de un
archivo se utiliza mejor el comando locate. Este comando
utiliza una base de datos indexados de todos los archivos en el disco
duro, y extrae de esta la ubicación. Ejemplo:
Cuando un archivo es renombrado, borrado, se crea un nuevo archivo,
etc. la base de datos no se actualiza automáticamente. Por eso locate
no reporta correctamente las ubicaciones, después de un cierto tiempo
de uso. El programa updatedb que se ejecuta automáticamente
una vez por semana actualiza esta base de datos. locate utiliza
find para registrar todos los archivos que se encuentran
en el (los) disco(s).
Consta que los comandos básicos que hemos visto hasta ahora mas que todo tratan con la destrucción de archivos o directorios: rm, rmdir etc. y que no hemos visto comandos para crear archivos. Una razón es, que para la creación arbitraria de archivos a mano se utilizan programas dedicados, según el tipo de datos a crear: programas de dibujo gráfico, captura de imágenes, sonido, etc. o en el caso de programas o textos sencillos: editores.
Por otro lado se pueden crear pequeños archivos mediante comandos sencillos, haciendo uso de las funciones de redireccionamiento del shell:
# echo nameserver 165.98.128.2 >> /etc/resolv.conf
nameserver 165.98.128.2
echo no es un programa propio sino un comando internto del shell.
Si buscamos un archivo que contiene una cierta cadena de caracteres podemos usar este comando de la siguiente manera:
Otro uso de grep es, imprimir todas las líneas de un archivo, que concuerdan con una cierta cadena de caracteres.
El nombre sed es una abreviación de 'stream editor'. En vez de editar interactivamente un archivo, sed lee línea por línea un archivo de la línea de comandos o desde el teclado, y aplica comandos de edición de texto, como reemplazar una cadena por otra, borrar o insertar cadenas de caracteres etc. Para ubicar en qué parte del texto aplicar los comandos, se usan expresiones regulares. El síntaxis común de una invocación de sed puede ser:
Los comandos de edición consisten de una sola letra, seguida eventualmente
por comentarios. Varios comandos pueden ser concatenados con ';'
y grupos de comandos se encierran entre llaves: {}. Algunos
de los comandos son:
Es tiempo para algunos ejemplos. Si ha aplicado el ejemplo para eliminar
las líneas de comentarios de un archivo del capítulo anterior, tal
vez se hay dado cuenta, que hay archivos de configuración que contienen
también muchas líneas vacías. Estos se pueden eliminar juntos con
los de comentario con:
Otro ejemplo, para solo imprimir cada segunda línea de un archivo:
Una aplicación más amplia de este último ejemplo es escribir un archivo plantilla, y crear de este automáticamente configuraciones individualizados. Para el siguiente ejemplo regresamos a la administración de sistemas. Supongamos que tenemos que crear archivos de configuración individuales para dominios Web virtuales. Elaboramos un archivo plantilla, virtualdomain:
ServerAdmin webmaster@DOMINIO
DocumentRoot /var/www/DOMINIO
ServerName www.DOMINIO
</VirtualHost>
virtualdomain > /etc/apache/linuxbook.org.ni
ServerAdmin webmaster@linuxbook.org.ni
DocumentRoot /var/www/linuxbook.org.ni
ServerName www.linuxbook.org.ni
</VirtualHost>
No pretendemos dar un tutorial para cada uno de los editores de texto en esta sección. Hay fichas de referencia para algunos de ellos en el anexo. Primero explicamos en breve su función y después les damos a conocer los editores más comunes en Linux.
Un editor de texto se distingue esencialmente de un procesador de palabras. Mientras el segundo comúnmente utiliza un formato de archivo especializado y se orienta en la presentación del texto, los editores de texto, o editores ASCII, son orientados a la creación de archivos de ``texto plano''. Un archivo de texto plano es una concatenación de líneas, compuestas por caractéres, normalmente en código ASCII, separados por la secuencia final de línea - EOL, end of line - en Unix [Ctrl]+[J] - el símbolo para avance de línea - LF, linefeed - correspondiente al número hexadecimal 0x0a. Para introducir esta secuencia se utiliza la tecla [Enter]. Cabe mencionar, que en los sistemas operativos de la empresa Microsoft (Dos, Windows) se utiliza una secuencia [Ctrl]+[M] [Ctrl]+[J], para indicar EOL, y en los sistemas de Apple se utiliza [Ctrl]+[M]. [Ctrl]+[M] es el símbolo para el retorno al comienzo de la línea - CR carriage return - correspondiente al número hexadecimal 0x0d. Hay programas para convertir todo un archivo de texto entre uno y otro formato de final de línea (p.ej recode) y algunos de los editores reconocen el formato de fín de línea y se adaptan a el, o lo convierten según necesario. Un archivo de texto plano por lo general se puede copiar directamente a la impresora, la cual imprime caracter por caracter y - si es configurada correctamente - realiza correctamente los saltos de línea. No se necesita una conversión del archivo al formato de impresión.
Los archivos de texto plano tienen una importancia grande en la programación y para los archivos de configuración: los programas compilados y scripts por lo general son escritos en forma de archivos de texto plano, igual como los archivos en los cuales se definen los parametros y configuración del sistema operativo y de las aplicaciones que se ejecutan en ello.
En la edición de archivos a menudo se encuentran dos dificultades para principiantes: primero, el reconocer de que una o varias ``líneas vacías'' no son nada mas que una repetición de la secuencia final de línea, que es insertada como un simple caracter y que también es borrada como un simple caractér, de hecho, es (en Unix y Macintosh) una secuencia de simples caractéres. La segunda dificultad es acerca del cursor, o punto de inserción y la eliminación de un caracter del archivo. Al visualizar el texto, muchas veces se mira un caracter resaltado, o una linea vertical entre dos caracteres. Este es el punto de inserción: el siguiente caracter que se pulsa en el teclado se anexa después del caracter que está a la izquierda del punto de inserción. En los terminales de texto, donde el punto de inserción es marcado con un rectángulo iluminado en el caracter ``actual'', el punto de inserción es a la izquierda de este, entre el caractér marcado y el caracter próxima a la izquierda. Hay dos teclas para borrar un caractér: [Del] elimina el caractér a la derecha del punto de inserción, y [BkSp] o [] en la parte superior derecha del teclado elimina el caractér a la izquierda del punto de inserción.
El editor tradicional de los unices es:
En ya nos hemos encontrado con los operadores > y >>, en con |. En esta sección vamos a profundizar un poco sobre los conceptos detrás de ellos.
Los comandos usados en los shell de unix pueden considerarse en la mayoría de los casos como filtros, parecidos a filtros o procesadores de agua. Ellos reciben una serie de caracteres - stream = corriente, en su entrada, los manipulan y remiten el resultado a la salida. Si surgen iregularidades, por ejemplo no hay suficiente espacio en el disco duro para el procesamiento, se suele dar al operador un mensaje respectivo. Estos mensajes se transmiten por una salida aparte, llamada la salida estándar de error - stderr. La entrada y salida estándar se llaman stdin y stdout respectivamente. En el shell interactivo stdout y stderr por defecto son conectados a un canal de entrada/salida que transmite los caracteres producidos a la pantalla y el stdin esta conectado a un canal que recibe los caracteres que pulsamos en el teclado. Notese, que de esta manera los mensajes de errores y avisos sobre el procesamiento efectuado por un programa se intermezclan con la salida del programa.
Los operadores arriba introducidos sirven para reconectar las intradas y salidas de los programas a canales de entrada/salida diferentes, antes de ejecutarlo.
Pueden redirigirse las entradas y salidas en cualqier combinación.
Algunos ejemplos:
| grep -v '</Directory' | grep -v '#' |less