Capítulo 3
Manejo de Linux en ambiente textual

3.1 login

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:

login: <nombre>  
Password: 

o

Username: <nombre>  
Password: 

Mientras el nombre del usuario es visible, la clave no se repite en la pantalla. Si, y solamente si, el par <nombre> <clave> coincide con un par de valores grabados en el sistema se provee acceso. En cualquier otro caso se denega el acceso. Es otra medida de seguridad que no se indica si fallo el nombre o la clave.

El nombre designa una cuenta (=account) que es el espacio o ambiente de trabajo del usuario.

3.2 shell

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 nomeclatura de unix. ’shell’ es la cáscara de la concha y es un sinónimo para la capa visible desde exterior, encima del sistema operativo.

El shell lee una línea de texto que el usuario teclea, al apretar 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.

3.3 línea de commandos

En una línea de commando se pueden concatenar varios commandos, separados por el símbolo ’;’ (semicolon).

Un commando tiene tres partes: nombre, opciones, parámetros. Solamente el nombre es obligatorio. Ejemplo:

ls -l --all *.c
nombre
nombre del comando. Puede ser el nombre de cualquier archivo de programa. Ejemplo: ’ls’
opciones
son indicaciones para el comando, que tiene que modificar su comportamiento. La forma tradicional es una sola letra y que es introducida con el símbolo ’-’ (guión). Ejemplo: -l
El proyecto GNU ha introducido en su implementación el uso de opciones explicativas (verbose) que son una palabra entera y esta introducida por dos guiones contiguos: ’–’. Ejemplo: –all
Opciones por su parte pueden tener parámetros. Ejemplos: -s15, –with_gettext=yes
parámetros
indican los objetos sobre cuales el comando debe actuar. Normalmente nombres de archivos o de directorios. Ejemplo: ’*.c’

Tradicionalmente tienen que escribirse los parámetros antes de los parámetros, en los programas GNU muchas veces eso no está exigido, pero es buena práctica.

Wildcards o comodínes 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.

*
sustituye una cadena arbitraria de caracteres.
?
sustituye cualquier caracter individual.

En el ejemplo de arriba se sustituye ’*.c’ con todos los archivos del directorio actual que terminan con los caracteres ’.c’.

3.4 comandos básicos

Manipulación de directorios
ls
 
rmdir nombre
remover un directorio
cdnombre
“entrar” en un directorio; cambiar el directorio actual al indicado
du
(diskusage) calcular el espacio consumido por todos los archivos de un determinado subdirectorio
df
(disk free) calcular el espacio libre en un disco duro
Manipulación de archivos
cp
 
rm
remover uno o varios archivos
find
listar y manipular seleccionados archivos en un subdirectorio
locate
El editor y visualizador primitivo
grepDescriptioncommando-?
 
commando–help
muestra una descripción corta del comando.
mancommando
muestra la página del manual de unix que describe el commando
infocommando
hace lo mismo, pero con otro programa.
info
por si mismo contiene un manual extensivo con hiperenlases, ejemplos y mucho más para todos los programas GNU.

3.5 manipulación de archivos

’cp’ puede copiar una lista de archivos, explícitamente nombrado, como directorio, o con wildcards hacia otro directorio, si el directorio no existe se crea, pero no se pueden especificar jerarquías de directorios como destino. Se puede copiar un archivo a otro, que tiene un nombre diferente. Si el destino existe se sobreescribe (!).

’ln’ crea enlaces. 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 refieren a la entrada original en el directorio, los segundos son copias directas. Por lo general se prefieren usar soft links.

Generalmente el comando ’mv’ se utiliza mas veces que el comando ’cp’. Tiene prácticamente la misma funciónalidad, menos que el archivo original se elimina. Por lo general ’mv’ es mucho más eficiente, ya que solo tiene que cambiar una entrada en el directorio, y no hacer copia del contenido del (posiblemente largo) archivo.

find

Itera por todos los archivos del directorio especificado (o actual), y repite esta función recursivamente por todos los subdirectorios. Este comportamiento se puede modificar, usando operadores (en forma de opciones con parámetros). Ejemplos:

find
genera una lista de todos los archivos en el directorio actual y en sus subdirectorios
find
 
find/home-namecore-execrm{}\;
encuentra todos los archivos de nombre core bajo el directorio /home y ejecuta el comando rm con el nombre correspondiente como parametro, es decir borra los archivos ’core’. La secuencia ’{}’ denota el nombre del archivo actualmente encontrado y la secuencia ’\;’ es necesario para concluir el parametro de ’-exec’.
findrm{}\;
parametros secuenciales se combina con una operación ’y’ (AND). En este caso, todos los archivos core con una edad de mayor de siete días se eliminan. ’-print’ ademas imprime el nombre del archivo en la pantalla.

’find’ es muy poderoso y se utiliza mucho en la administración automatizada de sistemas. Sin embargo 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: locate fernando; imprime todos los archivos que en alguna parte de su nombre contienen la cadena ’fernando’.

Si un archivo se renombra, se borra, se copia desde otro medio, etc. la base de datos no se actualiza y locate no reporta correctamente. el programa ’updatedb’ actualiza (utilizando ’find’) la base de datos y se correo automáticamente una vez a la semana.

3.6 stdin/stdout/stderr

Los comandos usados en los shell de unix pueden considerarse en la mayoría de los casos como ’filtros’. Ellos reciben una serie de caracteres (stream=corriente) por la entrada estándard (=stdin), los manipulan y remiten el resultado por la salida estándard (=stdout). Si hay que darle algunos mensajes al operador estos se transmiten por el canal de la salida estándard de error (=stderr). En el shell stdout y stderr por defecto son conectados y mensajes de procesamiento se intermezclan con la salida del programa.

La salida de un programa puede redirectionarse con el operador ’>’ hacia un archivo. La entrada puede obtenerse desde un archivo con el operador ’<’.

La salida del stderr puede redirectionarse mediante el operador ’&>’ hacia un archivo, y de esta manera separarse de la salida estándard del filtro.

Con el operador ’|’ (pipe=tubo) se pueden concatenar dos programas, la salida del primero va entrando en el segundo programa. De esta manera se pueden crear cadenas de filtros, obteniendo efectos sofisticados con commandos sencillos.

cat
recibe series de caracteres en stdin y los remite concatenados en la salida.
catamorfrancis.txt|grepfernando
busca todas las líneas mencionados, pero solamente imprime las líneas que adicionalmente tienen la cadena ’fernando’

’grep’ puede usarse con expresiones regulares y de esta manera ayudar a filtrar muy eficientemente archivos. Un uso básico de ’grep’ es, encontrar un archivo con un contenido específico, si no se conoce el nombre.

sed

El nombre se deriva de ’stream editor’.

sed
 

El editor tradicional de los unices es ’vi’ - sinónimo para “visual editor”, es basado en ’ex’, que manipula línea por línea. Sus comandos se encuentran en muchos otros programas filtros de unix.

El editor oficial del proyecto GNU es ’emacs’. Emacs no solo es un editor sino un ambiente de trabajo con capacidades y extension inmensos.

Otros editores son: jove - mini editor con semejancias a emacs, jed - de escala media, muy flexible, pico - el micro editor que viene con el sistema debian linux.

Estos editores trabajan en ambientes de texto, algunas también en ambiente gráfico.

La diferencia en relación con procesadores de palabras (Word, StarWriter, WordPerfect) es, que cada caracter de un archivo puede ser manipulado y lo escrito se graba en el archivo en formato ascii, caractér por caractér, mientras los procedadores de palabras utilizan “Formatos” de archivos propios, para agregarle al texto escrito información adicional sobre las fuentes de letras usados, tamaņo, posición, gráficas, diseņo de páginas etc.

Para la administración del sistema se necesita manipular archivos de solo texto = plain text, o ASCII - text (American Standard Code for Information Interchange).