Introducción a Linux/Comandos
Los comandos, en su mayor parte, no son realmente más que pequeños programas incorporados en el sistema operativo. Técnicamente, lo único que diferencia los comandos de los programas (o de los scripts) es que los comandos siempre están en carpetas muy concretas (/bin, /usr/bin, y en el caso de haber iniciado sesión como superusuario, /sbin), así que no es necesario especificar dónde se encuentran.
Por ello, todas las reglas de sintaxis aplicables a los comandos son aplicables a cualquier programa o script de Bash, con un cambio: en lugar de escribir el nombre del comando, hay que especificar exactamente dónde esta el programa o script (la ruta del programa o script)
Más abajo se dan ejemplos más concretos, pero como ejemplo introductorio, usaré los comandos cd
(cambiar directorio actual) y ls
(mostrar contenido de directorio actual)
Reglas de sintaxis
editarCapitalización
editarRegla número 1: la distinción entre mayúsculas y minúsculas es crucial. Los nombres de los comandos siempre se escriben en minúsculas; los parámetros cambian de significado o son inservibles si se usa la capitalización incorrecta.
anais@pepeluis:~$ LS -L bash: LS: no se encontró la orden anais@pepeluis:~$ ls -l drwxr-xr-x 1 pepeluis pepeluis 4096 mar 4 20:08 Documentos drwxr-xr-x 2 pepeluis pepeluis 4096 mar 4 20:08 Escritorio drwxr-xr-x 1 pepeluis pepeluis 4096 mar 8 19:37 experimento anais@pepeluis:~$ ls -L Documentos Escritorio experimento
Parámetros (dije Ortega y Gasset, no Ortega y Gasset)
editarRegla número 2: todos los parámetros se separan por espacios; la consola reconoce la primera palabra como el nombre del comando (o la ruta del programa) y cada cadena de texto entre espacios como un parámetro.
anais@pepeluis:~$ cd Documentos anais@pepeluis:~/Documentos:$ ls drwxr-xr-x 1 pepeluis pepeluis 4096 mar 4 23:24 Pinky y Cerebro drwxr-xr-x 2 pepeluis pepeluis 4096 mar 6 13:35 Recetas de cocina anais@pepeluis:~/Documentos:$ cd Pinky y Cerebro bash: cd: Pinky: No existe el fichero o el directorio
El sistema entendió "acceder a la carpeta Pinky" (el comando cd
solo admite un argumento y considera los siguientes cháchara; otro comando podría haber intentado acceder a los archivos "Pinky", "y" y "Cerebro", por ejemplo). Para poder usar un espacio, lo más fácil es entrecomillar el nombre entre apóstrofos:
anais@pepeluis:~/Documentos$ cd 'Pinky y Cerebro' anais@pepeluis:~/Documentos/Pinky y Cerebro:$
También se pueden escribir las primeras letras y pulsar la tecla Tabulación para activar el autocompletado. El resultado sera éste:
anais@pepeluis:~/Documentos$ cd Pinky\ y\ Cerebro
(de haber varias opciones posibles, mantener pulsada la tecla Tabulación para que aparezcan todas en pantalla. Tecléense unas cuantas letras más, y vuélvase a probar)
La barra inversa (\), que se puede obtener en teclados españoles pulsando Alt Gr + º, es un "carácter de escape". Esto significa que modifica el significado del carácter siguiente: por ejemplo, \n
significa "salto de línea". La barra es necesaria porque hay varios símbolos que tienen un significado especial en Bash (el espacio es el más evidente). Si rodea un argumento con apóstrofos, ninguno de estos símbolos usará su significado especial, pero será imposible acceder a ninguna carpeta con apóstrofos.
Existen muchas formas de usar parámetros con apóstrofos, si se sabe sintaxis de Bash. A este nivel básico, la forma más fácil y segura es sustituyendo el apóstrofo por '\
.
Rutas
editarA estas horas ya habrá advertido el significado de la barra hacia adelante (/); la carpeta que va después de ella está contenida dentro de la carpeta que va antes de ella. Una barra hacia adelante suelta indica el directorio raíz
Cada vez que sea necesario escribir una ruta como un parámetro, se puede escribir:
- explicitando la ruta exacta, en referencia al directorio raíz (si la ruta empieza con una barra)
- indicando la ruta en referencia a la carpeta actual (como se hizo en los ejemplos anteriores)
- en referencia a una de las siguientes abreviaturas (también se pueden usar solas)
.
para la carpeta actual. (Pinky y Cerebro
sería sinónimo con./Pinky y Cerebro
) Conveniente para mover archivos desde una carpeta arbitraria a la carpeta actual, o para ejecutar scripts en la carpeta actual. Curiosamente, es posible escribirrm experimento
para borrar el archivo "experimento", pero para arrancarlo es necesario escribir./experimento
, a menos que esté en una de las carpetas clave. Es decir, el punto no es obligatorio para los parámetros, pero sí para los nombres del programa a ejecutar...
para el directorio inmediatamente superior. (muy fácilmente combinable:../..
indica el directorio superior del superior;../../yinlao
indica la carpeta "yinlao" que está en el directorio superior del superior del actual; etc.)~
para la carpeta personal (depende de qué nombre haya usado para iniciar sesión)
Opciones (un tipo especial de parámetros)
editarRegla número 3: las opciones se escriben anteponiendo un guion, si constan de una sola letra; o dos, si constan de varias. En casi todos los comandos (o por lo menos en todos los comandos de sistema) todas las opciones que se utilicen de una sola letra se pueden contraer juntando todas las letras y usando un solo guion al principio. Esto funciona excepto cuando las opciones necesiten, a su vez, parámetros; en este caso, el parámetro se aplica a la última opción.
Ejemplo: ls -a -l
equivale a ls -al
Lista de comandos
editarEsta es una lista muy reducida que ofrece las opciones más típicas de los comandos más usados. Los parámetros entre signos menor que y mayor que (<>) deben sustituirse por el valor adecuado; los corchetes indican que el parámetro es opcional. No deben escribirse los corchetes ni los símbolos menor que y mayor que, a menos que sean parte del parámetro.
Para más información, use los comandos de ayuda.
Comandos de ayuda
editarSintaxis | Explicación |
---|---|
info | Información general autoexplicativa. Excesivamente detallada; clasifica los comandos según utilidad. |
man <comando> | Manual completo (o casi completo) sobre un comando Existe un manual para el propio comando man, al que se accede por man man
|
<comando> --help | Ayuda básica sobre un comando (no todos la ofrecen) |
<comando> --usage | Sintaxis básica sobre un comando (no todos la ofrecen) |
whatis <comando> | Información muy reducida sobre un comando |
apropos <comando> | Parecido al anterior |
Administración de carpetas y archivos
editarSintaxis | Explicación | Ejemplo |
---|---|---|
dir | lista los ficheros (refiriéndonos a todos los tipos de archivos: directorios, archivos propiamente dichos, enlaces simbólicos, etc.) | |
ls [-a] [-l] | visualiza los ficheros y carpetas en colores para distinguir los distintos tipos.-a refleja los archivos ocultos, que empiezan por un punto en su nombre; no aparecen normalmente ni en la consola ni en modo gráfico.-l da información extra sobre los archivos en vez de limitarse a escribir los nombres.
|
|
touch <ruta> | cambia los metadatos (fecha,hora de creacion) o crea ficheros en blanco | touch -t 03122010 file21.txt touch file21.txt
|
mkdir <ruta> | crea directorios | mkdir ~/Esto\ no\ es\ privado
|
cd <ruta> | marivi@bellota:~$ cd AutoCAD marivi@bellota:~/AutoCAD$ | |
cd .. | cambia siempre al directorio inmediatamente superior ¡no pegar los puntos al comando como en MS-Dos! No reconocerá el comando |
marivi@bellota:~/AutoCAD/examples$ cd .. marivi@bellota:~/AutoCAD$ |
cd - | cambia siempre al directorio visitado anteriormente | marivi@bellota:~/AutoCAD/example$ cd marivi@bellota:~$ cd - /home/marivi/AutoCAD/example marivi@bellota:~/AutoCAD/example$ |
rmdir <ruta> | permite eliminar un directorio vacío | |
cp <origen> <destino> | copia el fichero o directorio <origen> en <destino> | cp -r /home/tarea /root/ruta/Lima
|
mv <origen> <destino> | permite mover y/o cambiar de nombre el fichero <origen> a <destino> | mv Istoria Historia
|
rm [-i] [-r] <ruta> | no mueve a la papelera, borra definitivamente los archivos
|
rm /home/tarea
|
cat <ruta> | visualiza contenido de un fichero; pueden concatenarse varios la visualización se hace sin pausa; si el texto es más largo que la pantalla no se puede recuperar. |
cat /etc/passwd
|
more <ruta> | una forma más avanzada de leer un fichero, hace pausas a cada línea. Se puede leer pulsando Intro repetidamente (o espacio para saltar pantallas) | |
less <ruta> | una forma aún más avanzada de leer un fichero, permite recorrerlo con las flechas de cursor. Pulsar Q para abandondar | |
pwd | muestra ruta actual | marivi@bellota:~/Memez$ pwd /home/marivi/Memez |
du | Muestra el uso de disco. En general los archivos se almacenan en bloques de 4KB/4096bytes. Si un archivo es menor seguirá ocupando 4K de espacio en disco. du indica la ocupación real. | /var/log@Host1 # du -sch * 20K acpid 0 apache2 0 auth.log 324K cron 2,1M cups 108K daemons 4,0K incrementalBackup.sh.root.20100101.log 4,0K incrementalBackup.sh.root.20100102.log 4,0K incrementalBackup.sh.root.20100103.log 56K mail 0 maillog 128K messages 1,2M messages.1.gz 3,7M messages.2.gz 2,5M msec.log 35M mysqld ... 111M total |
df pydf | df disk free, muestra el espacio libre que queda en disco. pydf (pydf == python disk free) realiza la misma tarea pero ordenando en columnas y con colores. df es útil para scripts automatizados mientras que pydf es mejor para ver el consumo manualmente. | |
find | Comando para búsqueda de ficheros. Tiene decenas de opciones que lo hacen extremadamente potente. | Buscar enlaces simbólicos dentro de /etc:
find /etc -type l Busca ficheros modificados hace 10 o menos días: find /etc -type f -mtime -10 Busca ficheros modificados hace justamente 10 días: find /etc -type f -mtime 10 Busca ficheros modificados hace 5 o más dias dentro de /etc con nombre extensión sh o php y sobre cada coincidencia ejecuta un nuevo script pasando el nombre del fichero encontrado como parámetro.('{}' es reemplazado por el nombre del fichero encontrado.). find /etc -type f -name "*sh" -or -name "*.php" -mtime +5 -exec script1.sh {} \; Para este último caso, podemos utilizar un script en línea sustituyendo -exec bash -c " echo \"Fichero:{}\" ; grep \"patron1\" {} ; wc -l {} " |
Copias de seguridad
editarSintaxis | Explicación | Ejemplo |
---|---|---|
rsync | Permite sincronizar carpetas localmente o en un sistema remoto accesible mediante red, realizar backups incrementales e instantaneas (similares a las del sistema "Time Machine" de MacOSX) de una carpeta o directorio. rsync comprueba antes de copiar un fichero que el mismo no existe ya en el destino, comprueba si hubo cambios y si los hubo copia sólamente la parte del fichero que cambió. Esta comprobación puede multiplicar enormente la velocidad de sincronización (hasta 10 veces en copias locales y hasta 1000 en copias a través de redes WAN -ADSL p.ej-). |
Para realizar una sincronización entre 2 directorios, manteniendo en el destino los ficheros que pudieran haber sido borrados en el origen: ~$ rsync -a /var/lib/mysql /media/HD_BACKUPS/mysql ^ ^ Dir.Origen Dir.Destino *La opción -a no es necesaria pero sí conveniente. Para realizar una sincronización entre 2 directorios, eliminando en el destino los ficheros que pudieran haber sido borrados en el origen: ~$ rsync -a --delete /var/lib/mysql /media/HD_BACKUPS/mysql Para realizar una instantanea de un directorio a partir de otra instantanea creada anteriormente (/media/HD_BACKUPS/mysql.201001 en el ejemplo): rsync -a --link-dest=/media/HD_BACKUPS/mysql.201001 \ <--- Última copia /var/lib/mysql \ <--- Dir. Origen /media/HD_BACKUPS/mysql.201008 <--- Dir. Destino La opción --link-dest comprueba antes de copiar en el nuevo directorio (/media/HD_BACKUPS/mysql.201008 en el ejemplo) si el mismo ya existe en la copia anterior indicada en la opción --link-dest. Si existe crea un enlace duro a la misma. Si no copia el fichero. |
Relativos a permisos y usuarios
editarSintaxis | Explicación | Ejemplo |
---|---|---|
passwd [-d] [<usuario>] | sustituyendo usuario por el nombre de usuario (o no escribiendo nada para el usuario que ejecute el comando) permite cambiar la contraseña, o establecer una nueva si no tiene La opción -d permite borrarla, dejando la cuenta sin contraseña (peligroso)Sólo el superusuario puede cambiar contraseñas que no sean la suya En caso de error la contraseña quedará sin cambios. |
marivi@bellota:~$ passwd Cambiando la contraseña para marivi. (actual) contraseña de UNIX: Enter new UNIX password: Retype new UNIX password: Se entiende que los espacios en blanco son para teclear las contraseñas, como es costumbre en GNU/Linux no aparecerán en la pantalla al escribirlas. |
chmod <permisos> <ruta> | cambia los permisos de acceso a un archivo.
Consulte la sección de permisos de archivo para más información |
chmod a=rwx konquest Se permite a todos los usuarios leer, escribir y ejecutar konquest
|
chown <usuario>[:<grupo>] <ruta> | cambia la propiedad de <ruta> en favor del usuario <usuario>, cambiando también el grupo propietario a <grupo>, si se especifica | chown marivi:bellota Historia
|
sudo <comando con opciones> | ejecuta un comando con privilegios de superusuario; para que funcione es necesario introducir la clave del usuario actual | kant@kant:/etc/ sudo cp fstab fstab~ [sudo] password for kant: |
su [<usuario>] | cambio de usuario (es necesario introducir la contraseña del nuevo usuario)
|
|
gksu <comando> | versión gráfica de sudo | gksu kate /etc/fstab aparecerá una ventana para introducir en la contraseña, de introducirla correctamente arrancará el comando kate /etc/fstab con permisos de superusuario, cargando su configuración y permitiendo abrir y modificar ese archivo, de permiso restringido.el ejemplo anterior sólo sirve para Kubuntu o un sistema que incluya el editor de archivos kate; en cualquier caso el funcionamiento del comando gksu es el mismo. |
Otros
editarSintaxis | Explicación | Ejemplo |
---|---|---|
echo <cadena de texto> | muestra en pantalla <cadena de texto> | |
watch -n secs "comando" | Repite el comando cada secs segundos, refrescando la pantalla | |
shutdown <tiempo> | reinicia el sistema operativo, ejecutando un init otra vez.
|
|
halt <tiempo> | apaga el equipo. Misma sintaxis y permisos que el anterior. |
|
reboot <tiempo> | reinicia el equipo. Misma sintaxis y permisos que el anterior. |
|
cpulimit | Limita el tiempo de CPU dedicada a un proceso. | Ej1: Limitar el tiempo máximo de CPU de los plugins externos de Firefox
(válido a partir de Firefox 3.7) cpulimit -e plugin-container -l 30 |
Manejo de ficheros de texto
editarEn general los siguientes comandos se utilizan en la práctica anidados en tuberías de forma que la salida de un comando se utiliza como entrada para el siguiente eliminando la opción <ruta> lo cual le indica al comando que utilice como fichero de entra la salida del comando anterior. P.ej, para mostrar los 10 primeros resultados de un fichero de texto conteniendo la palabra "amarillo" ejecutaríamos un comando similar a:
cat "fichero de texto" | grep -i amarillo | head -n 10
2 comandos de texto frecuentemente utilizados y no citados son sed y awk. Estos comandos son muy potentes pero requieren un apartado separado para poder describirlos correctamente.
Sintaxis | Explicación |
---|---|
grep <texto> <fichero> | Muestra las líneas de un fichero de texto que contienen el texto buscado. La opción -v permite mostrar las líneas que no contienen dicho texto. La opción -B 'N' permite mostrar la línea coincidente y las anteriores 'N' lineas (B == before/antes), mientras que la opción -A 'N' muestra también las posteriores 'N' líneas (A == after/después). La opción -i indica que no distingua entre mayúsculas y minúsculas (por defecto sí distingue). |
head -n 'N' <ruta> | Muestra las 'N' primeras líneas de un fichero de texto. (head == cabeza) |
tail -n 'N' <ruta> | Muestra las 'N' últimas líneas de un fichero de texto. (tail == cola) |
Monitorización
editarEn general, las opciones de monitorización pueden ser considerados comandos de nivel avanzado o muy avanzado.
Sintaxis | Explicación |
---|---|
top | permite ver y administrar los procesos en ejecución (útil para matar procesos que cuelguen el sistema) pulsar Q para abandonar, K para matar un proceso (pedirá el número de proceso, visible en la columna izquiefa); < y > para cambiar de página sólo se pueden matar procesos de la propia cuenta; se pueden matar procesos de otras ejecutando el comando como root, pero esto sólo se debería hacer si tiene completa idea de lo que está haciendo. |
htop | Similar a top, pero con una interfaz basada en menús, más amigable de uso. |
iotop | Similar a top, pero muestra actividad de entrada/salida a disco (Input/Output top). |
latencytop | monitoriza las latencias. Una introducción en inglés al mismo puede leerse aquí |
lsof | Permite mostrar qué procesos están accediendo a un fichero o directorio o qué conjunto de ficheros están siendo utilizados por un proceso (opción lsof -p <pid>, donde pid es el identificador numérico del proceso devuelto por top/htop). En Linux todas las entradas/salidas/dispositivos/conexiones de red son tratadas como ficheros, lo cual en la práctica hace a este comando una herramienta muy potente de monitorización. |
netstat | Permite ver estadísticas de red (conexiones establecidas y en escucha) |
vmstat | Permite ver estadísticas de utilización de la memoria |
iostat | Permite ver estadísticas de lecturas/escrituras a dispositivos externos |
inotifywatch inotifywait |
Las versiones modernas del kernel de Linux permiten notificar a las aplicaciones de usuario cualquier acceso o cambio a un fichero de forma instantánea. Los comandos inotifywatch e inotifywait nos permiten "conectar a la escucha" con el kernel para ser avisados de cualquier cambio producido en uno o varios ficheros de forma instantanea. |
strace -p <pid> |
Permite monitorizar las llamadas desde una aplicación de usuario al núcleo o kernel del sistema. |
stap | Comando extremadamente avanzado que permite monitorizar el funcionamiento del kernel en tiempo real. Un tutorial en inglés puede encontrarse aquí |
Gestión de energía
editarPermite controlar parámetros sobre la gestión de energía, como la frecuencia de la CPU, deshabilitar USBs no usados, ...
Sintaxis | Explicación |
---|---|
powertop | Es un "top" de recursos energéticos. Indica posibles optimizaciones para mejorar el consumo. En un portátil puede llegar a aumentar un 20% la duración de la batería. |
Descarga de archivos
editarWget
editarEl uso típico de GNU Wget consiste en invocar desde la línea de comandos una o más URL como argumentos:
# Descarga del título de página ejemplo.com a un archivo # llamado "index.html". wget http://www.ejemplo.com/
# Descarga desde el código fuente con Wget de un sitio GNU ftp. wget ftp://ftp.gnu.org/pub/gnu/wget/wget-1.10.2.tar.gz
El uso más complejo incluye descargas automáticas desde múltiples URLs en un directorio con jerarquía:
# Descarga del título de página ejemplo.com , acompañado con # las imágenes y el ''estilo de cascada'' (css) necesario para mostrar la página, y convertir las # URLs dentro para referirse a los contenidos disponibles a nivel local. wget -p -k http://www.ejemplo.com/
# Descarga de todo el contenido de ejemplo.com wget -r -l 0 http://www.example.com/
Avanzado
# Descargar un espejo de las erratas (errores) para un libro que usted/tú justo compró. # Seguir todos los enlaces locales recursivamente y hacer apropiados los archivos # para verlos desconectado. # Usar una espera arbitraria (al azar) de 0 a 5 segundos entre los archivos. # Cuando hay un fracaso, reintentar hasta 7 veces con 14 segundos # entre cada reintento. # Poner al agente de usuario a Firefox en Windows XP e ignorar exclusiones. # Recoger resultados de acceso al archivo local "myLog.log" wget -t 7 -w 5 --waitretry=14 --random-wait --user-agent="Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.1) Gecko/20060111 Firefox/1.5.0.1" -m -k -K -e robots=off http://www.oreilly.com/catalog/upt3/errata/ -o ./myLog.log
* Recoger sólo los enlaces específicos listados línea a línea en * el archivo local "my_movies.txt" * Usar una espera arbitraria de 0 a 33 segundos entre archivos. * Cuando hay un fracaso, reintente para hasta 22 veces con 48 segundos * entre cada reintento. No envíe ningún agente de usuario en absoluto. Ignore exclusiones de robot. * Colocar todos los archivos capturados en el directorio "/movies" * y recoger los resultados de acceso al archivo local "my_movies.log" * Bueno sólo para descargar imágenes específicas conocidas u otros archivos. wget -t 22 --waitretry=48 --wait=33 --random-wait --user-agent="" -e robots=off -o ./my_movies.log -P/movies -i ./my_movies.txt
*Uso de wget para descargar contenido protegido por referer y cookies. *1. obtener la url base y guardar sus cookies en el archivo *2. obtener el contenido protegido usando cookies almacenadas wget --cookies=on --keep-session-cookies --save-cookies=cookie.txt http://first_page wget --referer=http://first_page --cookies=on --load-cookies=cookie.txt --keep-session-cookies --save-cookies=cookie.txt http://second_page
#Sitio web espejo a una copia estática para un navegador local. #Esto quiere decir que todos los enlaces serán cambiados para apuntar a los archivos locales. #Nota --html-extension convertirá cualquier archivo CGI, ASP O PHP generado a HTML (o algo más no .html). wget --mirror -w 2 -p --html-extension --convert-links -P <dir> http://www.yourdomain.com
Operadores
editarSintaxis | Explicación | Ejemplo |
---|---|---|
> | Una redirección consiste en trasladar la información de un tipo a otro, por ejemplo de la salida estándar a la entrada estándar o del error estándar a la salida estándar | ls > listado
|
>> | igual que el anterior, pero añade al archivo en vez de sobreescribirlo | |
< | recupera parámetros de un archivo | cp < ruta
|
| | la salida del comando anterior pasa a ser parámetro del comando siguiente | ls | less
|