Aprender a usar la consola de Linux

GNU/Linux es el Sistema Operativo libre más eficiente y más seguro del mundo. Pero para usarlo al 100% debemos aprender a usar su consola, cuál es su estructura de directorios, los comandos más usados y básicos y tambien debemos aprender a matar procesos que hayan quedado zombie. Se dice que con la consola de Linux se puede destruir el mundo y volverlo a crear y no exagera mucho.
Introducción a la consola de GNU/Linux


Hace muchos años, allá por el año de 1990 los sistemas operativos más extendidos eran el MSDos y Unix, y los dos tenían la particularidad de que se trabajaban desde una terminal de texto, es cierto que ya aparecían los primeros entornos gráficos, pero la mayor parte del trabajo de administración de archivos y otras tareas se hacían desde la terminal a base de comandos e instrucciones y pequeños programas con esos comandos.

Consola LinuxHoy, 25 años después, los sistemas operativos más usados tienen su entorno gráfico desde el que se trabaja habitualmente y el usuario medio ni sabe lo que es la consola o terminal de su sistema operativo. Pero aún existen.

En Windows podemos abrir una consola, si vamos al botón de inicio, ejecutar y ejecutamos el comando “cmd”, con ello se abre una terminal en la que podemos ejecutar los comandos de MSDos. Claro que ¿cuantos usuarios la conocen? Y hoy en día ¿para que sirve?

Más conocida es la consola de GNU/Linux y también más útil, con la consola de Linux se puede hacer casi de todo, es típica la frase que dice que la consola de Linux puede destruir el mundo y volverlo a crear, y yo diría que no exagera mucho

La consola de Linux siempre ha estado presente en todas la distribuciones de este sistema operativo y siempre estará pues trabajar con ella nos facilita mucho el trabajo y es capaz de solucionar problemas que mediante el entorno gráfico no tienen solución. Así pues, la terminal de Linux es un herramienta valiosa de ayuda al usuario y no un engorro como algún ignorante, se atreve a decir.

 

¿Qué es la consola?


La consola o terminal, en inglés Shell, es un programa informático donde interactúa el usuario con Linux mediante una ventana a la que se le dan ordenes escritas, comandos, desde el teclado.

Terminal de LinuxCuando se ejecuta esta ventana solo se muestra: “el nombre de usuario” + “@” + “el nombre del ordenador” + “:” y acaba con “$” si se está trabajando como usuario normal. En caso de estar trabajando como usuario raíz o root su muestra lo mismo pero acaba en “#”. Por ejemplo: sergio@mipc:~$

En algunas ocasiones detrás de los dos puntos aparece la dirección en el árbol de directorios donde nos encontramos. Por ejemplo: sergio@mipc:/bin$ Cualquier usuario puede usar la consola siempre que sepa lo que está haciendo en ella, ya que si ejecutamos algún comando que no conocemos bien y este resulta peligroso para nuestro sistema, podríamos dejar a nuestro sistema inutilizable, incluso borrar archivos necesarios. Así que debemos conocer los comandos antes de utilizarlos y sobre todo usar el modo superusuario o root solo cuando sea imprescindible.

Los conocimientos previos para usar la consola son los comandos básicos que hay en esta. Es imposible saber todos los comandos de memoria, pues son muchísimos cada uno de ellos con sus propios atributos y opciones, pero sí es recomendable que conozcamos los más usados. A la hora de cambiar configuraciones, hacer instalaciones, modificaciones, etc. es necesario que se tenga noción de cual es el archivo con el que estamos trabajando, su importancia en Linux, guardar una copia del archivo, etc. por si hemos hecho algo mal poder recuperar el archivo anterior.

Árbol de directorios


La estructura de directorios o carpetas en el sistema operativo Linux está muy bien definida desde un principio. Cada carpeta está destinada a un fin concreto, de modo que todos los que usamos Linux debemos saber donde está o puede estar cierto archivo. Y cuando digo todos los que usamos Linux me refiero sobre todo a los programadores y desarrolladores de aplicaciones que deben tener esto muy claro para que otros desarrolladores puedan encontrar y usar el código creado por ellos. Los principales directorios en Linux y su uso son:

 

Árbol de directorios de Linux
 

  • * / “root” punto de montaje de particiones, también conocido por directorio raíz. Es el directorio principal desde donde cuelgan las otras carpetas.
  • * /bin en este directorio se encuentran los archivos binarios ejecutables; contiene todos los comandos básicos del sistema, accesibles a todos los usuarios
  • * /boot en este directorio se encuentran los archivos para arrancar el sistema, como por ejemplo el kernel o núcleo del sistema y los archivos necesarios para el arranque. En muchos ordenadores es una partición del disco duro independiente del resto.
  • * /dev en esta carpeta se encuentran los archivos de dispositivos, archivos que representan los dispositivos periféricos:
    /dev/eth0 primera tarjeta de red Ethernet
    /dev/hda disco duro en la primera línea IDE
    /dev/hdb disco duro en la segunda línea IDE
    /dev/scd0 disco duro en la primera puerta SCSIv /dev/ttyS0 primer puerto serial
    etc…
  • * /etc en este directorio se encuentran los archivos de configuración del sistema:
    /etc/bashrc configuración del shell bash o terminal
    /etc/fstab información sobre el sistema de archivos
    /etc/passwd definición de los usuarios del sistema
    /etc/profile configuración del entorno (rutas, variables de entorno, aliases, etc)
    /etc/shadow contraseña encriptada de cada usuario
  • * /home en esta carpeta se encuentran los directorio que contiene subdirectorios para las carpetas y documentos personales de cada uno de los usuarios, excepto los del root.
  • * /lib aquí están las librerías compartidas, archivos de librerías dinámicas para C y otros lenguajes.
  • * /mnt en este directorio se encuentran los puntos de montaje para particiones temporales de otra partición del disco duro, un disco duro externo, un CDRom, el disquete, etc.
    /mnt/cdrom
    /mnt/floppy
  • * /proc en esta carpeta se encuentra el sistema de archivos virtual con información sobre el kernel y los procesos, son archivos virtuales y no ocupan espacio en el disco.
  • * /root aquí están los directorios y archivos del administrador root.
  • * /sbin en este directorio se encuentran los binarios esenciales del sistema, ejecutables por el administrador o root, accesibles durante el arranque y en modo monousuario.
  • * /tmp es un directorio para archivos temporales.
  • * /usr segundo nivel de jerarquía en el sistema de archivos, contiene subdirectorios con archivos del software de usuario.
    /usr/bin aquí están los comandos/programas de usuario, ejecutables no necesarios durante el arranque ni en modo monousuario.
    /usr/doc aquí está la documentación.
    /usr/etc la configuraciones de usuario.
    /usr/include los archivos de cabecera (headers) de C.
    /usr/lib las librerías.
    /usr/local la jerarquía local, usada en software instalado localmente o en /usr/local/bin, /usr/local/lib, /usr/local/sbin, /usr/local/share.
    /usr/man aquí están los manuales; archivos utilizados por el comand man.
    /usr/sbin aquí están los binarios no esenciales de administración del sistema, accesibles después del arranque.
    /usr/X11R6 X Window system o servidor del entorno gráfico de Linux.
  • * /var en este directorio se encuentran los archivos variables del sistema:
    /var/log
    /var/mail
    /var/spool datos de la cola de impresión.
Los comandos más importantes
ls
ls es el comando listar, permite listar el contenido de un directorio o fichero. La sintaxis es:
$ ls /home/directorio

El comando ls tiene varias opciones que permiten organizar la salida a mostrar, lo que resulta particularmente útil cuando es muy grande. Por ejemplo, puedes usar -a para mostrar los archivos ocultos y -l para mostrar los usuarios, permisos y la fecha de los archivos. Así como para todos los comandos Linux, estas opciones pueden combinarse, terminando en algo como:
$ ls -la /home/directorio

cd

cd de change directory o cambiar directorio, es como su nombre indica el comando para acceder a cierto directorio o ruta completa. Por ejemplo, si estamos en el directorio /home y desemos acceder a /home/ejercicios, escribiríamos:
$ cd /home/ejercicios

Si estamos en /home/ejercicios y deseamos subir un nivel, es decir, ir al directorio /home, ejecutamos:
$ cd ..

Si estamos en /home/ejercicios y deseamos ir al directorio raiz, es decir, ir al directorio /, ejecutamos:
$ cd /

 

mkdir

mkdir viene de make directory o crear directorio, crea un directorio nuevo teniendo en cuenta la ubicación actual. Por ejemplo, si estamos en /home y deseamos crear el directorio ejercicios, sería:
$ mkdir /home/ejercicios

mkdir tiene una opción muy útil que permite crear un árbol de directorios completo que no existe, es decir, creamos un conjunto de subdirectorios a la vez. Para esto usamos la opción -p:
$ mkdir -p /home/ejercicios/prueba/uno/dos/tres

cp

cp de copy o copiar, copia un archivo o directorio origen a un archivo o directorio destino. Por ejemplo, para copiar el archivo prueba.txt ubicado en /home al directorio respaldo, escribimos:
$ cp /home/prueba.txt /home/respaldo/prueba.txt

En la sintaxis siempre se especifica primero el origen y luego el destino. Si indicamos un nombre de destino diferente, cp copiará el archivo o directorio con el nuevo nombre, es decir, lo renombra en el destino con el nombre especificado.

El comando también cuenta con la opción -r (de recursiva) que copia no sólo el directorio especificado sino todos sus directorios internos de forma recursiva. Suponiendo que deseamos hacer una copia del directorio /home/ejercicios que a su vez tiene las carpetas ejercicio1 y ejercicio2 en su interior, en lugar de ejecutar un comando para cada carpeta, ejecutamos:
$ cp -r /home/ejercicios /home/respaldos/

mv

mv de move o mover, mueve un archivo a una ruta específica, a diferencia de cp, lo elimina del origen una vez finalizada la copia. Por ejemplo:
$ mv /home/prueba.txt /home/respaldos/prueba2.txt

Al igual que cp, en la sintaxis se especifica primero el origen y luego el destino. Si indicamos un nombre de destino diferente, mv moverá el archivo o directorio con el nuevo nombre.

rm

rm de remove o remover, es el comando necesario para borrar un archivo o un directorio no necesariamente vacío. Para borrar el archivo prueba.txt ubicado en /home, ejecutamos:
$ rm /home/prueba.txt

Este comando también presenta varias opciones. La opción -r (de recursiva) borra todos los archivos y directorios de forma recursiva. Por otra parte, -f borra todo sin pedir confirmación. Estas opciones pueden combinarse causando un borrado recursivo y sin confirmación del directorio que se especifique. Para realizar esto en el directorio respaldos ubicado en el /home, usamos:
$ rm -fr /home/respaldos

Nota: Este comando junto con estas opciones es muy peligroso, si tenemos suficientes permisos y ejecutamos:
$ rm -fr /
borra todo el disco duro.

Estructura de Linux

rmdir


rmdir de remove directory o remover directorios, es el comando para borrar un directorio que esté vacío. Para borrar el directorio respaldos ubicado en /home, ejecutamos:
$ rmdir /home/respaldos

 

ln

ln de link, para crear enlaces, que pueden ser simbólicos, lo que en Windows se llama accesos directos, un enlace a un archivo, documento o ejecutable, o a un directorio que está en otra ruta.

Para crear un enlace al mismo registro del disco:
$ ln /home/descargas/registro enlace

Para crear un enlace simbólico (acceso directo) al fichero indicado:
$ ln -s /home/descargas/fichero enlace

Este comando crea un enlace simbólico llamado enlace al fichero que está en /home/descargas/

find

Permite encontrar ficheros y directorios que cumplan cierta coincidencia con un patrón especificado y sus nombres a partir de un directorio también especificado recursivamente. Si no se especifica el directorio, buscará a partir del directorio actual y subdirectorios recursivamente.

Para encontrar el archivo nombre en la carpeta directorio escribimos.
$ find [directorio] -name [nombre]

chmod

Cambia los permisos de lectura/escritura/ejecución de ficheros/directorios, para poder modificar los permisos de un fichero debes ser propietario del mismo o root. Ejemplos:
$ chmod +r fichero
$ chmod u=rwx directorio -R
$ chmod o=rw file
$ chmod g=u
$ chmod 754 fichero // concede los permisos [- | rwx | r-x | r–]
$ chmod a+rw fichero // all user rw

chown

Change owner. Permite al propietario de un fichero asignarle otro usuario como propietario.

$ chown new_propietario fichero
$ chown new_propietario directorio -R
$ chown propietario:grupo fichero // cambia el propietario y grupo del fichero

chgrp

Similar a chown pero cambia el grupo propietario.

$ chgrp root:root fichero
$ chgrp pello:usuarios directorio -R

top

Este es un comando muy útil, es un MONITOR DE PROCESOS. Esta herramienta muestra información sobre varios recursos del sistema y tiene un carácter dinámico, muestra uso de CPU por proceso, cantidad de memoria, tiempo desde su inicio, los procesos que se están ejecutando, su PID, si hay algún proceso zombie. Etc. Para terminar este proceso usamos la combinación de teclas Ctrl + C.

ps

Despliega todos los procesos del sistema, con nombre y tiempo de inicio.

$ ps -aux

Nota: Este comando muestra el PID de cada proceso, el cual necesitaremos para otros comandos, por ejemplo para detener ese proceso con el comando KILL.

kill

Es utilizado para mandar señales a los procesos en Linux.

$ kill -INT [pid]: Señala al proceso con numero [pid], que será interrumpido.
$ kill -TERM [pid]: Señala al proceso con numero [pid],que debe de terminar, a diferencia de kill -KILL , esta opción da la oportunidad al proceso de terminar.
$ kill -STOP [pid]: Señala al proceso con numero [pid], que pare momentáneamente.
$ kill -CONT [pid]: Señala al proceso con numero [pid], que continué, este comando se utiliza para reanudar un proceso que le fue aplicado -STOP.
$ kill -KILL [pid]: Señala al proceso con numero [pid],que termine de inmediato, el proceso es terminado abruptamente.

Sudo

Es el comando para ejecutar comando en modo superusuario, después de pulsar intro lo primero que hará Linux es pedirnos la contraseña, para verificar que tenemos permiso para ejecutar comando en modo superusuario. Hay que tener cuidado con este comando pues podemos hacer daño al sistema.

Para instalar la aplicación synaptic escribimos:
$ sudo apt-get install synaptic

Atajos de teclado para el Terminal

No todo son comandos en el Terminal de Linux. También pueden usarse combinaciones de teclas para introducir comandos de una manera más ágil. Estos son los más conocidos.

Tab = Completa nombre de carpetas o archivos
Ctrl + A = Mueve el cursor al principio de línea
Ctrl + E = Mueve el cursor al final de línea
Ctrl + C = Mata el proceso que se ha iniciado desde ese Terminal
Ctrl + U = Elimina la línea donde está el cursor
Alt + F = Mueve el cursor una palabra hacia adelante
Alt + B = Mueve el cursor una palabra hacia atrás
Ctrl + W = Elimina la palabra delante del cursor
Ctrl + L = Borra todo el contenido del Terminal
Shift + Ctrl + C = Copia el fragmento seleccionado al portapapeles
Shift + Ctrl + V (o Shift + Insert) = Pega en la línea de comandos el contenido del portapapeles
Flecha Arriba / Abajo = Recupera comandos escritos con anterioridad
Ctrl+alt+F1… F6 = Cambio de consola.
Ctrl+alt+F7…F12 = Cambio a escritorio.

Estos son los comandos y atajos de teclado básicos, y aunque hay muchísimos más, con éstos podréis empezar a moveros por la línea de comandos. Al principio cuesta acordarse de ellos, pero una vez empecemos a usarlos los aprenderemos enseguida.

Matar procesos zombies

En algunas ocasiones hay aplicaciones y/o procesos que se quedan zombies, es decir, colgados, por varias razones que no vienen al caso. Lo que produce que nuestro ordenador no funciones correctamente, vaya lento y produzca fallos. Estos procesos se pueden terminar o matar.

Lo primero que debamos hacer es ver si hay algún proceso zombie en nuestro sistema, para ello usamos el comando:
$ ps -el | grep ‘Z’

Con el comando ps -el se puede obtener una salida en la que la segunda columna indica el estado del proceso. Existen varios estados:
S : sleeping
R : running
D : waiting
T : gestopt (suspended)
Z : zombie (defunct)

También es importante fijarse en el PID del proceso zombie pues lo necesitaremos más adelante.

Para eliminar el proceso zombie ejecutamos la siguiente instrucción:
$ kill -HUP PID_del_proceso
Si hay varios procesos zombies se repite este paso hasta matarlos a todos.

Una forma de matar todos los procesos zombies es ejecutar la siguiente instrucción:
$ kill -HUP `ps -A -ostat,ppid,pid,cmd | grep -e ‘^[Zz]’ | awk ‘{print $2}’`

Nota: Es posible que necesitemos permisos de superusuario para matar algunos procesos, para ellos escribimos delante de kill el comando sudo. Por ejemplo:
$ sudo kill -HUP PID

Deja un comentario

Tu e-mail no será publicado. Los campos requeridos están marcados con *