Documentos de Académico
Documentos de Profesional
Documentos de Cultura
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
Capitalización
Regla 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
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:
También se pueden escribir las primeras letras y pulsar la tecla Tabulación para activar el autocompletado. El
resultado sera éste:
Introducción a Linux/Comandos 2
(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
A 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 escribir rm 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)
Lista de comandos
Esta 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
Sintaxis Explicación
info Información general autoexplicativa. Excesivamente detallada; clasifica los comandos según utilidad.
cd .. cambia marivi@bellota:~/AutoCAD/examples$ cd ..
siempre al marivi@bellota:~/AutoCAD$
directorio
inmediatamente
superior
¡no pegar los
puntos al
comando como
en MS-Dos! No
reconocerá el
comando
cd - cambia marivi@bellota:~/AutoCAD/example$ cd
siempre al marivi@bellota:~$ cd -
directorio /home/marivi/AutoCAD/example
visitado marivi@bellota:~/AutoCAD/example$
anteriormente
rmdir permite
<ruta> eliminar un
directorio
vacío
Introducción a Linux/Comandos 5
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 script1.sh {} por una sentencia
similar a
Copias de seguridad
Introducción a Linux/Comandos 8
rsync Permite sincronizar Para realizar una sincronización entre 2 directorios, manteniendo en el destino los ficheros que pudieran haber
carpetas localmente o sido borrados en el origen:
en un sistema remoto
~$ rsync -a /var/lib/mysql /media/HD_BACKUPS/mysql
accesible mediante
^ ^
red, realizar backups
Dir.Origen Dir.Destino
incrementales e
*La opción -a no es necesaria pero sí conveniente.
instantaneas
(similares a las del
Para realizar una sincronización entre 2 directorios, eliminando en el destino los ficheros que pudieran haber sido
sistema "Time
borrados en el origen:
Machine" de
MacOSX) de una ~$ rsync -a --delete /var/lib/mysql /media/HD_BACKUPS/mysql
carpeta o directorio.
rsync comprueba Para realizar una instantanea de un directorio a partir de otra instantanea creada anteriormente
antes de copiar un (/media/HD_BACKUPS/mysql.201001 en el ejemplo):
fichero que el mismo
rsync -a --link-dest=/media/HD_BACKUPS/mysql.201001 \ <--- Última copia
no existe ya en el
/var/lib/mysql \ <--- Dir. Origen
destino, comprueba si
/media/HD_BACKUPS/mysql.201008 <--- Dir. Destino
hubo cambios y si los
hubo copia sólamente
La opción --link-dest comprueba antes de copiar en el nuevo directorio (/media/HD_BACKUPS/mysql.201008 en
la parte del fichero
el ejemplo) si el mismo ya existe en la copia anterior indicada en la opción --link-dest. Si existe crea un enlace
que cambió. Esta
duro a la misma. Si no copia el fichero.
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-).
Los enlazes duros permiten acceder a un fichero desde varias rutas alternativas, en este caso desde
.../mysql.201001/ruta1 y .../mysql.201008/ruta2. Cuando desde una ruta borramos el fichero con rm, el fichero
sigue estando accesible desde el resto de rutas o enlaces duros. Cuando se elimina el último enlace duro el fichero
es eliminado. Con esta técnica podemos crear instantaneas de un directorio tal y como estaba en una fecha dada al
tiempo que el espacio ocupado en disco es similar a una copia incremental, ya que entre una fecha y otra sólo se
almacenan los ficheros que han cambiado.
chmod <permisos> cambia los permisos de acceso a un archivo. chmod a=rwx konquest
<ruta> Los permisos se pueden dar mediante un Se permite a todos los usuarios leer, escribir y ejecutar konquest
número octal o mediante la notación chmod u-wx konquest
<usuarios afectados><modo de Se deniega al usuario propietario la posibilidad de escribir o ejectuar
concesión><permisos> donde: konquest
• los usuarios afectados se expresan con la
letra u (usuario propietario), g (usuarios
que compartan grupo con el propietario),
o (otros usuarios que no compartan
grupo), a (todos) o una combinación de
varias
• modo de concesión: añadir privilegios
(+), retirarlos (-) o establecerlos como
los únicos existentes (=)
• los permisos en sí, entre otros r (lectura),
w (escritura), x (ejecución para archivos,
permiso de paso para directorios)
Consulte la sección de permisos de archivo
para más información
sudo <comando con ejecuta un comando con privilegios de kant@kant:/etc/ sudo cp fstab fstab~
opciones> superusuario; para que funcione es necesario [sudo] password for kant:
introducir la clave del usuario actual
Otros
Introducción a Linux/Comandos 10
cpulimit Limita el tiempo de CPU dedicada a un Ej1: Limitar el tiempo máximo de CPU de los plugins externos de Firefox (válido
proceso. a partir de Firefox 3.7)
cpulimit -e plugin-container -l 30
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> 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
<fichero> 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' Muestra las 'N' primeras líneas de un fichero de texto. (head == cabeza)
<ruta>
tail -n 'N' Muestra las 'N' últimas líneas de un fichero de texto. (tail == cola)
<ruta>
Introducción a Linux/Comandos 11
Monitorización
En 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 [1]
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.
inotifywatch Las versiones modernas del kernel de Linux permiten notificar a las aplicaciones de usuario cualquier acceso o cambio a un fichero
inotifywait 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 Permite monitorizar las llamadas desde una aplicación de usuario al núcleo o kernel del sistema.
<pid>
stap Comando extremadamente avanzado que permite monitorizar el funcionamiento del kernel en tiempo real. Un tutorial en inglés
[2]
puede encontrarse aquí
Gestión de energía
Permite 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
Wget
El uso típico de GNU Wget consiste en invocar desde la línea de comandos una o más URL como argumentos:
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/
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
#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).
Operadores
> redirige el resultado para un archivo en vez de para la pantalla ls > listado
| la salida del comando anterior pasa a ser parámetro del comando siguiente ls | less
Referencias
[1] http:/ / www. linux. com/ archive/ feature/ 146320
[2] http:/ / sourceware. org/ systemtap/ tutorial/ node2. html
Fuentes y contribuyentes del artículo 14
Licencia
Creative Commons Attribution-Share Alike 3.0
//creativecommons.org/licenses/by-sa/3.0/