Una de las cosas más desconcertantes para el usuario de Unix es la forma en la que está organizado el árbol de directorios en Windows. Unix tiene un árbol de directorios mucho más completo, orientado al mantenimiento global del sistema mientras que Windows lo organiza según las aplicaciones; cada programa tiene su directorio que contiene todo lo necesario para funcionar.
Cuando digo que el árbol de directorios de Unix está más orientado al mantenimiento del sistema me refiero que todo tiene un planteamiento más global. Las librerías esenciales para el funcionamiento del sistema en /lib, los programas y librerías a nivel de usuario en /usr/bin y /usr/lib, los ejecutables y librerías con permisos especiales en /opt, los archivos temoporales en /tmp, los directorios de usuario en /home...
El árbol completo es el siguiente (puede variar ligeramente según las distribuciones)
-
/ Raíz del sistema de archivos
-
/bin Ejecutables básicos del sistema
-
/sbin Ejecutables básicos del sistema a los que sólo puede acceder el superusuario
-
/etc Archivos de configuración del sistema
-
/lib Librerías básicas del sistema
-
/media Dispositivos extraíbles
-
/opt Ejecutables y librerías con permisos no convencionales
-
/tmp Archivos temporales para todo el sistema
-
/var Archivos de eventos del sistema
-
/boot Archivos de arranque del sistema
-
/dev Archivos de dispositivos fijos. Los crea automáticamente el sistema
-
/proc Archivos de monitorización del sistema, velocidad de la CPU, temperaturas...
-
/home Archivos personales
-
/home/guillem Mis archivos personales
-
/home/usuario Archivos personales del usuario llamado usuario
-
/root Archivos personales del superusuario
-
/usr Librerías y ejecutables no básicos para el funcionamiento del sistema
-
/usr/bin Ejecutables
-
/usr/sbin Ejecutables a los que sólo puede acceder el superusuario
-
/usr/lib Liberías propias de aplicaciones
-
/usr/share Archivos adicionales, documentación...
-
/usr/include Headers para C y C++
Uno puede pensar que este árbol de directorios es un auténtico infierno pero no lo es. Está diseñado para que todos los accesos sean automáticos. Por ejemplo, si queremos ejecutar un programa no tendremos que pedir todo el path, sino que con dar el nombre bastará. Esto es porque el sistema operativo sabe que todos los archivos ejecutables están en uno de los cuatro directorios dedicados a ejecutables. Sucede lo mismo con las librerías. Supongamos que acabamos de programar un código para el cálculo de los autovalores y lo hacemos mediante una iteración de Arnoldi. Tenemos que llamar entonces a Arpack. Hacerlo es tan sencillo como compilar nuesto código con:
bash> f90 main.f90 -larpack
Automáticamente el sistema buscará en el directorio /usr/lib/ una librería llamada libarpack.so y si la encuentra la acoplará a nuestro programa main.f90
La consola
Ya hemos dicho que la consola sigue siendo una parte esencial de un sistema operativo Unix. Todo, absolutamente todo se puede hacer por consola; leer páginas web, consultar y responder al correo electrónico... Evidentemente no veremos ninguna imágen ni ninguna ventana pero tendremos la ventaja de trabajar varias veces más rápido.
Todos los estudios realizados sobre ese tema afirman que la productividad disminuye con el uso del ratón. Una de las ventajas de la consola es que reacciona a partir de comandos, es decir, de nuestra cabeza directamente al ordenador. Este aumento de productividad se hace más acusado a medida que las tareas se van haciendo más complicadas. Por ejemplo, supongamos que queremos copiar todos los archivos que empiecen con s del directorio /home/guillem/kk al directorio /home/guillem/kk2 de un ordenador llamado pepito,grillo,micasa.com. El comando seria:
bash> scp /home/guillem/s* pepito.grill.micasa.com:/home/guillem/kk2/
Con la consola habremos tardado del orden de la mitad. El trabajo con consola tiene una ley que es "se lo que estoy haciendo porque estoy seguro de mi mismo". La consola tiene una potencia enorme pero no perdona errores garrafales. Podemos colapsar el sistema por nuestra culpa con sólo un par de comands mal escritos. Esto no debe atemorizar al principiante. La consola es una herramienta insustituíble, sobretodo cuando hay que administrar varios ordenadores conectados en red.
Los comandos más útiles de la consola son:
-
cp Copiar archivos
-
cp -r Copiar archivos y directorios (recursivamente)
-
mv Mover
-
ls Listar los archivos y directorios del directorio actual
-
ls -l Idem pero en forma de lista
-
ls -a Idem incluyendo los archivos ocultos
-
cat Imprime en pantalla el contenido de un archivo
-
grep Busca las líneas que contengan una determinada palabra en uno o varios archivos
-
mkdir Crea un directorio
-
tar Utilidad de almacenamiento y compresión de archivos
-
ssh (Si está instalado) Abre una consola en un ordenador remoto
-
scp (Si está instalado ssh) Copia archivos a o desde un ordenador remoto
-
> Redirecciona la salida por pantalla
-
| Concatena más de un comando en la salida por pantalla.
Por ejemplo, supongamos que tenemos un archivo llamado "sandez.txt" que contiene lo siguiente:
Me gusta el furbo
Los domingos pol
xxLa tarde
Es la mayor
xxde mis
Afisioneeee
Y queremos escribir en un archivo llamado "tonteria.txt" las líneas que contengan "xx". Esto se puede hacer con un único comando de consola:
bash> cat sandez.txt | grep xx > tonteria.txt
El archivo resultado contiene:
xxLa tarde
xxde mis