Linea de comandos, ese gran desconocido.
¡Atención el autor de este articulo cree que Linux es un fondo de pantalla y paint es un lenguaje de programación!
La linea de comandos se compone por un archivo que se carga en la memoria RAM y con el cúal el usuario se comunica a través de un espacio denominado terminal donde se imprimen tanto los comandos que el usuario introduce como la respuesta del archivo.
El archivo en cuestión es un interprete de comandos. Hay varios: bash(bourne again shell), dash(debian alchemist shell), tzsh(tee zee shell), ksh(korn shell), tcsh, zsh y un largo etcetera y más allá.
Aquí tenéis un pantallazo del interprete de comandos "tzsh":

El interprete de comandos lo que hace es identificar una cadena de caracteres introducida por el usuario. Normalmente compara las palabras que introducimos con el nombre de los binarios que se encuentran en "/bin", "/usr/bin", "/usr/local/bin", "/sbin", "/usr/sbin", "/usr/local/sbin" o los binarios que se encuentran en el PATH. Si alguna de las palabras que introducimos coincide con uno de estos binarios, lee el binario y ejecuta las instrucciones que encuentra dentro. Normalmente se introducen comandos con argumentos. Entonces lo que hace es leer el binario primero y luego ejecuta tomando en cuenta los argumentos que hemos indicado.
A veces el interprete de comandos nos imprime por pantalla un mensaje dependiendo del comando que utilizamos. El interprete de comandos no imprime sus acciones solo imprime lo que se le ordena imprimir. La mayoría de los interpretes de comandos ya vienen con una acción predeterminada:
- Imprime por pantalla un mensaje indicando que no se ha encontrado el comando especificado.
Un interprete de comandos no es una persona. Está programado para ejecutar lo que se le ordena. No razona y por tanto ejecuta cualquier cosa indiferentemente de las consecuencias. Es decir que la verdadera responsabilidad está en las manos del usuario y en sus conocimientos.
A continuación dejo un listado con las palabras que se pueden utilizar para conversar con el interprete de comandos. Es posible que ponga un comando y luego los argumentos apilados explicando luego por separado cada cosa lo que hace.
- Bueno primero empezaré con los comandos que no necesitan en general privilegios:
mv -uvi /tmp/archivo1.txt /tmp/archivo2.txt
El comando mv copia un fichero a una nueva dirección y posteriormente borra la fuente del archivo. En este caso el "archivo1.txt" se mueve a su misma posición pero con un nombre diferente. Esto es equivalente a cambiarle el nombre al archivo en cuestión.
La opción -u verifica si el archivo de destino ya existe y si en efecto existe lo sobreescribe solo si la fecha de la ultima modificación del mismo es anterior a la fecha del fichero que se está moviendo, es decir que si el fichero de destino es "viejo" se reemplaza,
-v nos permite "ver" que hace el comando,
-i nos pide confirmación si el interprete de comandos está a punto de poner en peligro otros archivos.cp -vrf ~/Documentos/*.txt /tmp/
cp copia en este caso de entre todos los archivos que se encuentran en la carpeta "Documentos" solo los que se terminan en .txt a la carpeta de destino "tmp",
~ significa /home/tuusuario,
-r indica que copie de forma recursiva por ejemplo si en la carpeta "Documentos" se encuentra otra carpeta que se llama algo.txt aunque sea una carpeta su nombre tambien se acaba en ".txt" y entonces se copiara la carpeta junto con su contenido también,
-f se utiliza para por ejemplo si no se puede copiar al destino porque ya hay otros arhivos allí con los mismos nombres que los archivos que se van a copiar entonces los archivos ya presentes se borrarán y se intentará copiar de nuevo sin pedir confirmación,
* cuidado con este simbolito (asterisco) porque es un comodín que sustituye cualquier caracter o cadena de caracteres.rm -vir $(find ~/?ocumentos -name archivo_para_borar.txt)
rm se utiliza para borrar archivos,
-i pide confirmación antes de borrar,
-r se utiliza para que el comando rm borre carpetas,
$ el simbolo del dolar almacena la salida de un comando para que de esta manera se pueda concatenar el resultado de un comando con otro comando,
find es un comando que se utiliza para buscar tanto ficheros como carpetas con el nombre especificado. Su modo de empleo es el siguiente:
find [dirección donde se efectua la busqueda] -name [nombre de lo que estamos buscando]
? cuidado con este simbolo pues tambien es un comodín y sustituye un solo caracter, es decir que en este caso ?ocumentos significa "aocumentos, bocumentos, cocumentos, ... €ocumentos ... _ocumentos ... Yocumentos, Zocumentos", creo que quedó claro. Se emplea cuando no sabemos si tratamos con una letra mayúscula o minúscula.Para una traducción aún más explicita el comando anterior lo que hace es buscar en una carpeta que probablemente se llame "Documentos" un archivo o carpeta que se llame "archivo_para_borrar.txt" y si este archivo/carpeta se encuentra "rm" procede a eliminarlo.
cat ~/Documentos/archivo1.txt>/tmp/archivo1.txt
cat se utiliza para leer e imprimir por pantalla el contenido de un archivo.
> es una tuberia y se utiliza para redirigir la salida de un comando a un archivo. Si se utiliza un solo simbolo ">" el fichero de destino sí ya existe será borrado y se remplazará por uno nuevo con el contenido del comando que ha sido redirigido al fichero. Si utilizamos dos tuberias de estas al mismo tiempo ">>" lo que estamos haciendo es añadir la salida del comando al final del archivo de destino si este ya existe, es decir que no se borra y se crea uno nuevo sino que se conserva el anterior que contendrá al final del mismo la salida del comando.En algunos ordenadores nuevos el componente "scd0" que se puede encontrar en la carpeta "dev" representa el componente fisico del ordenador "lector de cds", por esta razón podemos utilizar el comando "cat" para realizar copias de seguridad de nuestros cds así:
cat /dev/scd0 > /tmp/imagen_de_seguridad.isodmesg | tail
dmesg es un comando que nos enseña las acciones que han sucedido dentro del kernel desde que se ha arrancado el ordenador (cuando digo arrancar me refiero a poner en marcha),
| la linea vertical es una tubería y hace que la salida del comando de la izquierda se utilize con el comando de la derecha,
tail imprime por pantalla las ultimas 10 lineas de un archivo o salida de un comando.glxinfo | grep direct
glxinfo enseña el estado de la implmentación del opengl y el glx en la sesion actual X
grep de la salida de un comando solo imprime por pantalla la linea que incluye la palabra que sigue despues de "grep"alien -d archivo.rpm
alien realiza conversiones de una clase de paquetes a otra por ejemplo de rpm a deb,
-d este argumento hace que el comando alien transforme el paquete "archivo.rpm" en un paquete ".deb"tar -cvf /tmp/archivo.tar carpeta_de_ejemplo
tar realiza operaciones de empaquetamiento y desempaquetamiento de carpetas y archivos en paquetes ".tar",
-c crea un paquete tar que contendrá la carpeta "carpeta_de_ejemplo" con todas sus subcarpetas y ficheros,
-v ver lo que se hace, casi siempre este argumento significa "ver",
-f la salida del comando se almacena en el fichero que en nuestro caso se creará en la carpeta "tmp" y se llamará "archivo.tar"gzip -9v /tmp/archivo.tar
gzip comprime el contenido de un fichero y lo renombra con la extensión ".gz" al final,
-9 nivel de compresión que en este caso es el nivel más alto, el ordenador tardará más tiempo en comprimir el archivo pero este ocupará mucho menos espacio. En este caso el archivo de salida será un ".tar.gz"tar -xvzf /tmp/archivo.tar.gz -C /tmp/
-x extrae el contenido de un fichero "tar",
-z utiliza el filtro "gzip" para descomprimir el archivo,
-f la salida del comando "tar" va a parar a varios ficheros dependiendo del contenido del archivo comprimido,
-C los archivos de salida se crearan en el directorio especificadotar -xvjf /tmp/archivo.tar.bz2 -C /tmp/
-j se utiliza el filtro "bzip2" para descomprimir el fichero.ln -sf /dev/null ~/.bash_history
ln crea enlaces entre archivos, gracias a este comando se puede utilizar el mismo archivo en varios procesos,
-s el enlace que se crea es simbólico ocupa menos que un enlace duro, pero a diferencia de los enlaces duros, no se pueden editar permisos en un enlace simbolico por lo tanto los enlaces simbolicos tienen por defecto permisos: lrwxrwxrwx que quiere decir que es un link, el usuario root puede leer,escribir y ejecutar al igual que los otros grupos de usuarios y el usuario común,
-f forzar la creación de un enlace, si hay un archivo con el mismo nombre es borrado y sustituido por el enlace.
El comando anterior lo que hace es sustituir el archivo ".bash_history" que es el fichero donde se almacenan los comandos que ha utiliza nuestro usuario por un enlace que lleva al componente "/dev/null",
/dev/null Es la toma de tierra del ordenador. Todos los datos que van a parar a este componente se pierden.
Por lo tanto el comando anterior lo que hace es borrar para siempre el historial de la terminal de nuestro usuario.ls -lha ~/ | less
ls imprime por pantalla el contenido de una carpeta (en este caso nuestra carpeta personal),
-l el contenido lo muestra como una lista en la que aparecen los permisos, el grupo al que pertenece el archivo/carpeta, el usuario al que pertenece, el tamaño del archivo/carpeta, y el nombre,
-h imprime el tamaño del objeto en un formato más amigable como por ejemplo Megabytes o Gigabytes, en lugar de bytes a secas,
-a imprime los objetos cuyo nombre empiezan por un punto, que de otra forma no se verían,
less imprime por pantalla el contenido de un archivo o la salida de un comando de una forma amigable que permita la lectura de la información. El comando less a diferencia de more permite controlar el texto con las flechas de dirección arriba y abajo.wget "http://es.archive.ubuntu.com/cdimage/releases/8.10/release/ubuntu-8.10-dvd-i386.iso" --output-document=/tmp/ibex_i386.iso
wget es un gestor de descargas,
--output-document= los archivos descargados de la dirección especificada se almacenan todos en el mismo archivo en la dirección especificada despúes del símbolo "=" y con el nombre especificado.ffmpeg -i /tmp/video.flv /tmp/video.avi
ffmpeg es un programa que convierte ficheros video a diferentes formatos en este caso un fichero ".flv" se convierte a ".avi" en la dirección con los nombres especificados,
-i fichero de entrada (input file)mplayer -ss 00:19:34 -endpos 17 -vo gif89a /tmp/video.avi
mplayer es un reproductor multimedia que necesita el servidor X para funcionar,
-ss 00:19:34 empieza a leer el archivo "/tmp/video.avi" desde el tiempo especificado,
-endpos 17 solo leerá 17 segundos del archivo de video,
-vo gif89a la salida no se mostrará por pantalla sino que se imprimirá en un archivo ".gif" animado llamado out.gif.convert /tmp/out.gif -resize 160x90\> /tmp/salida_redimensionada.gif
convert es un componente del programa "imagemagick" que realiza operaciones con toda clase de archivos gráficos (gif,jpg,png) en concreto "imagemagick" es un programa de manipulación de imagenes.
-resize 160x90\> reduce tamaño de la imagen al que hemos especificado y redirige la salida a la dirección y con el nombre especificados.Aqui tenéis un ejemplo de los 2 comandos anteriores:

Ojo el comando convert se puede utilizar tambien para crear gifs a partir de imagenes sueltas:
convert ~/Imágenes/*.jpg /tmp/out.gif
Con esto en la carpeta "tmp" obtendremos un gif llamado "out.gif" que contendrá todas nuestras imágenes de la carpeta "Imágenes".
transcode -i /tmp/video.mod -o /tmp/video.avi -y xvid --avi_limit 100 -Z 640x480
transcode programa de manipulación de videos,
-i fichero de entrada,
-o fichero de salida,
-y utilizar filtro especificado en este caso se utiliza filtro "xvid" y por lo tanto el fichero de salida será "divx" o relacionado,
--avi_limit corta la salida en trocitos más pequeños, en este caso de 100 Mb,
-Z redimensiona la salida de video a la especificada anchuraxaltura.mkdir ~/carpeta_nueva
mkdir comando que se utiliza para crear una carpeta nueva, en este caso se crea una carpeta con el nombre "carpeta_nueva" dentro de nuestra carpeta personal. - Bueno, tanto he hablado de los comandos que no necesitan privilegios de administrador, pero ahora llegó el momento de hablar sobre los que si necesitan privilegios:
sudo -s
sudo permite a los usuarios que esten en el grupo admin ejecutar comandos como superusuario,
-s abre otro interprete de comandos esta vez como otro usuario o superusuario si nuestro usuario se encuentra en el grupo admin,aptitude install paquete
aptitude asistente de instalación que tambien gestiona actualizaciones,
install busca e instala el paquete mencionado.chown tuusuario -R /home/tuusuario
chown aplicación que cambia los permisos de un fichero para todo un grupo o un solo usuario,
-R si se especifica cambia el permiso a una capreta con todo su subcontenido incluidas otras carpetas,
Este comando se debe utilizar solo cuando el sistema no nos deje iniciar sesión porque no tenemos permiso para escribir en nuestra carpeta personal. NUNCA JAMÁS SE HA DE EJECUTAR chown tuusuario -R / - Para cualqier otra duda:
man comando | gedit
¡Y en el principio fue la linea de comandos!