Comandos para Usuarios Linux
En este capítulo aprenderás los comandos de Linux y cómo utilizarlos.
Generalidades
Los sistemas Linux actuales tienen utilidades gráficas dedicadas al trabajo de un administrador. Sin embargo, es importante poder utilizar la interfaz en modo línea de comando por varios motivos:
- La mayoría de los comandos de sistema son comunes a todas las distribuciones Linux, este no es el caso de las herramientas gráficas.
- Puede ocurrir que el sistema no se inicie correctamente pero que un intérprete de comandos de respaldo permanezca accesible.
- La administración remota se ejecuta desde la línea de comando con un terminal SSH.
- Para preservar los recursos del servidor, la interfaz gráfica está instalada o se lanza bajo demanda.
- La administración es ejecutada mediante scripts.
El aprendizaje de estos comandos permite al administrador conectarse a un terminal Linux, gestionar sus recursos y archivos, identificar la estación, el terminal y los usuarios conectados, etc.
Los usuarios
El usuario de un sistema Linux está definido en el archivo /etc/passwd, por:
- Un nombre de login, o más comúnmente llamado "login", que no puede contener espacios.
- Un identificador numérico: UID (User Identifier).
- Un identificador de grupo: GID (Group Identifier).
- Un intérprete de comandos, por ejemplo una shell, que puede ser diferente de un usuario a otro.
- Un directorio de conexión, por ejemplo el directorio home.
En otros archivos el usuario estará definido por:
- Una password, que será cifrada antes de ser almacenada (
/etc/shadow). - Un prompt de comandos, o prompt login, que será simbolizado por un
#para los administradores y por un$para los otros usuarios (/etc/profile).
El comando passwd es un comando de sistema utilizado para modificar la contraseña del usuario actual o de otro usuario especificado. El usuario que utiliza el comando debe tener privilegios de administrador para poder modificar la contraseña de otro usuario. El comando passwd requerirá al usuario que ingrese la contraseña antigua y luego que ingrese y confirme la nueva contraseña. La contraseña ingresada no se mostrará en la pantalla por motivos de seguridad.
Dependiendo de la política de seguridad implementada en el sistema, la contraseña deberá contener un cierto número de caracteres y cumplir ciertos requisitos de complejidad.
Entre los intérpretes de comandos existentes, la Bourne-Again Shell (/bin/bash) es la más frecuentemente utilizada. Está asignada por defecto a los nuevos usuarios. Por varias razones, los usuarios avanzados de Linux pueden elegir shells alternativas entre la Korn Shell (ksh), la C Shell (csh), etc.
El directorio de acceso del usuario es por convención almacenado en el directorio /home de la workstation. Contendrá los datos personales del usuario y los archivos de configuración de sus aplicaciones. Por defecto, al login, el directorio de acceso es seleccionado como directorio actual.
Una instalación de tipo workstation (con interfaz gráfica) inicia esta interfaz en el terminal 1. Siendo Linux multiusuario, es posible conectar más usuarios más veces, en diferentes terminales físicos (TTY) o terminales virtuales (PTS). Los terminales virtuales están disponibles dentro de un entorno gráfico. Un usuario pasa de un terminal físico a otro usando Alt + Fx desde la línea de comando o usando CTRL + Alt + Fx en modo gráfico.
La shell
Una vez que el usuario está conectado a una consola, la shell muestra el prompt de comandos. Se comporta entonces como un ciclo infinito, repitiendo el mismo esquema a cada instrucción ingresada:
- Muestra el prompt de comandos.
- Lectura del comando.
- Análisis de la sintaxis.
- Sustitución de caracteres especiales.
- Ejecución del comando.
- Muestra el prompt de comandos.
- etc.
La secuencia de teclas CTRL + C se usa para interrumpir un comando en ejecución.
El uso de un comando generalmente sigue esta secuencia:
comando [opción(es)] [argumento(s)]
El nombre del comando está a menudo en minúsculas.
Un espacio separa cada objeto.
Las opciones abreviadas comienzan con un guión (-l), mientras que las opciones largas comienzan con dos guiones (--list). Un doble guión (--) indica el fin de la lista de opciones.
Es posible agrupar algunas opciones cortas juntas:
$ ls -l -i -a
es equivalente a:
$ ls -lia
Después de una opción pueden haber más argumentos:
$ ls -lia /etc /home /var
En literatura, el término "opción" es equivalente al término "parámetro," que es más comúnmente usado en programación. El lado opcional de una opción o argumento es simbolizado por la inclusión entre corchetes [ y ]. Cuando es posible más de una opción, una barra vertical llamada "pipe" las separa [a|e|i].
Comandos generales
comandos apropos, whatis y man
Es imposible para un administrador de cualquier nivel conocer todos los comandos y opciones en detalle. Usualmente está disponible un manual para todos los comandos instalados.
comando apropos
El comando apropos te permite buscar por palabra clave dentro de estas páginas de manuales:
| Opciones | Descripción |
|---|---|
-s, --sections list o --section list |
Limitado a las secciones de los manuales. |
-a o --and |
Muestra solo la voz correspondiente a todas las palabras clave proporcionadas. |
Ejemplo:
$ apropos clear
clear (1) - clear the terminal screen
clear_console (1) - clear the console
clearenv (3) - clear the environment
clearerr (3) - check and reset stream status
clearerr_unlocked (3) - nonlocking stdio functions
feclearexcept (3) - floating-point rounding and exception handling
fwup_clear_status (3) - library to support management of system firmware updates
klogctl (3) - read and/or clear kernel message ring buffer; set console_loglevel
sgt-samegame (6) - block-clearing puzzle
syslog (2) - read and/or clear kernel message ring buffer; set console_loglevel
timerclear (3) - timeval operations
XClearArea (3) - clear area or window
XClearWindow (3) - clear area or window
XSelectionClearEvent (3) - SelectionClear event structure
Para encontrar el comando que permitirá cambiar la contraseña de una cuenta:
$ apropos --exact password -a change
chage (1) - change user password expiry information
passwd (1) - change user password
comando whatis
El comando whatis muestra la descripción del comando pasado como argumento:
whatis clear
Ejemplo:
$ whatis clear
clear (1) - clear the terminal screen
comando man
Una vez encontrado con apropos o whatis, el manual es leído por man ("Man es tu amigo"). Este conjunto de manuales está dividido en 8 secciones, agrupando la información por tema, la sección por defecto es la 1:
- Programas o comandos ejecutables.
- Llamadas de sistema (funciones dadas por el kernel).
- Llamadas de biblioteca (funciones dadas por la biblioteca).
- Archivos especiales (usualmente se encuentran en /dev).
- Formatos de archivos y convenciones (archivos de configuración como etc/passwd).
- Juegos (como las aplicaciones basadas en personajes).
- Varias (ej. man (7)).
- Comandos de administración del sistema (usualmente solo para root).
- Rutinas del Kernel (no estándar).
Es posible acceder a la información de cada sección escribiendo man x intro, donde x es el número de la sección.
El comando:
man passwd
dirá al administrador las opciones, etc, del comando passwd. Mientras que:
$ man 5 passwd
lo informará sobre los archivos relativos al comando.
Navegar en el manual con las flechas ↑ y ↓. Salir del manual presionando la tecla q.
comando shutdown
El comando shutdown permite apagar electrónicamente un servidor Linux, inmediatamente o después de un cierto período de tiempo.
shutdown [-h] [-r] time [message]
Especificar la hora de apagado en el formato hh:mm para una hora precisa, o +mm para un retraso en minutos.
Para forzar un apagado inmediato, usa la palabra now en lugar del tiempo. En este caso, el mensaje opcional no es enviado a los otros usuarios del sistema.
Ejemplos:
[root]# shutdown -h 0:30 "Server shutdown at 0:30"
[root]# shutdown -r +5
Opciones:
| Opciones | Observaciones |
|---|---|
-h |
Detiene el sistema electrónicamente. |
-r |
Reinicia el sistema. |
comando history
El comando history muestra el historial de comandos ingresados por el usuario.
Los comandos son almacenados en el archivo .bash_history en el directorio de acceso del usuario.
Ejemplo de un comando history
$ history
147 man ls
148 man history
| Opciones | Comentarios |
|---|---|
-w |
Escribe el historial actual en el archivo del historial |
-c |
Borra el historial de la sesión actual (pero no el contenido del archivo .bash_history). |
- Manipulación del historial:
Para manipular el history, los siguientes comandos ingresados desde el prompt de comandos permitirán:
| Claves | Función |
|---|---|
| !! | Llama al último comando ejecutado. |
| !n | Llama al comando por su número en la lista. |
| !string | Llama al comando más reciente que comienza con la cadena. |
| ↑ | Navega en el historial yendo hacia atrás en el tiempo a partir del comando más reciente. |
| ↓ | Navega en el historial yendo hacia adelante en el tiempo. |
Autocompletado
El autocompletado es de gran ayuda.
- Completa los comandos, las rutas ingresadas o los nombres de los archivos.
- Una presión de la tecla TAB completa la voz en caso de una única solución.
- En caso de múltiples soluciones, presionar TAB una segunda vez para mostrar las opciones.
Si al presionar dos veces la tecla TAB no se presentan opciones, no hay solución para el autocompletado actual.
Visualización e Identificación
comando clear
El comando clear borra el contenido de la pantalla del terminal. Más precisamente, desplaza la visualización de modo que el prompt de comandos se encuentre en la parte superior de la pantalla, en la primera línea.
En un terminal físico, la pantalla será permanentemente ocultada, mientras que en una interfaz gráfica, una barra de desplazamiento permitirá volver atrás en el historial del terminal virtual.
Sugerencia
CTRL + L tendrá el mismo efecto que el comando clear
comando echo
El comando echo se usa para mostrar una cadena de caracteres.
Este comando es más comúnmente usado en los scripts administrativos para informar al usuario durante la ejecución.
La opción -n indica ninguna cadena de salida de nueva línea (por defecto, cadena de salida de nueva línea).
shell > echo -n "123";echo "456"
123456
shell > echo "123";echo "456"
123
456
Por varias razones, al desarrollador del script podría serle necesario utilizar secuencias especiales (a partir de un carácter \). En este caso, será usada la opción -e, que permitirá la interpretación de la secuencia.
Entre las secuencias usadas frecuentemente, podemos mencionar:
| Secuencia | Resultado |
|---|---|
\a |
Envía un bip sonoro |
\b |
Atrás |
\n |
Añade un salto de línea |
\t |
Añade un tab horizontal |
\v |
Añade un tab vertical |
comando date
El comando date muestra la fecha y la hora. El comando tiene la siguiente sintaxis:
date [-d yyyyMMdd] [format]
Ejemplos:
$ date
Mon May 24 16:46:53 CEST 2021
$ date -d 20210517 +%j
137
En este último ejemplo, la opción -d muestra una fecha determinada. La opción +%j formatea esta fecha para mostrar solo el día del año.
Atención
El formato de una fecha puede cambiar según el valor del idioma definido en la variable ambiental '$LANG'.
La visualización de la fecha puede seguir los siguientes formatos:
| Opción | Formato |
|---|---|
+%A |
Nombre completo del día de la semana de la localidad (por ejemplo, Domingo) |
+%B |
Nombre completo del mes de la localidad (por ejemplo, Enero) |
+%c |
Fecha y hora de Local (por ejemplo, Jue Mar 3 23:05:25 2005) |
+%d |
Día del mes (ej. 01) |
+%F |
Fecha en el formato YYYY-MM-DD |
+%G |
Año |
+%H |
Hora (00..23) |
+%j |
Día del año (001..366) |
+%m |
Número del mes (01..12) |
+%M |
Minuto (00..59) |
+%R |
Tiempo en el formato hh:mm |
+%s |
Segundos desde el 1° enero de 1970 |
+%S |
Segundo (00..60) |
+%T |
Tiempo en el formato hh:mm:ss |
+%u |
Día de la semana (1 para Lunes) |
+%V |
Número de la semana (+%V) |
+%x |
Fecha en el formato DD/MM/AAAA |
El comando date también permite modificar la fecha y la hora del sistema. En este caso, será utilizada la opción -s.
[root]# date -s "2021-05-24 10:19"
El formato a usar usando la opción -s es el siguiente:
date -s "yyyy-MM-dd hh:mm[:ss]"
comando id, who y whoami
El comando id se usa para mostrar información sobre usuarios y grupos. Por defecto, no se añade ningún parámetro de usuario y se muestra la información del usuario y del grupo actualmente conectados。
$ id archlatam
uid=1000(archlatam) gid=1000(archlatam) groups=1000(archlatam),10(wheel)
Las opciones -g, -G, -n y -u muestran el grupo principal GID, subgrupos GIDs, nombres en lugar de identificadores numéricos, y el UID del usuario.
El comando whoami muestra el login del usuario actual.
El solo comando who muestra los nombres de los usuarios conectados:
$ who
archlat tty1 2021-05-24 10:30
root pts/0 2021-05-24 10:31
Dado que Linux es multiusuario, es posible que más sesiones estén abiertas en la misma estación, ya sea físicamente o a través de la red. Es interesante saber qué usuarios están conectados, si no es solo para comunicarse con ellos enviando mensajes.
- tty: representa un terminal.
- pts/: representa una consola virtual en un entorno gráfico con el número después representando la instancia de la consola virtual (0, 1, 2...)
La opción -r también muestra el runlevel (ver capítulo "startup").
Árbol de Archivos
En Linux, el árbol de archivos es un árbol invertido, llamado árbol jerárquico simple, cuya raíz es el directorio /.
El directorio actual es el directorio donde se encuentra el usuario.
El directorio de conexión es el directorio de trabajo asociado al usuario. Los directorios de acceso son, por defecto, almacenados en el directorio /home.
Cuando el usuario accede, el directorio actual es el directorio de acceso.
Una ruta absoluta hace referencia a un archivo desde la raíz atravesando todo el árbol hasta el nivel del archivo:
/home/groupA/alice/file
Una ruta relativa hace referencia al mismo archivo atravesando todo el árbol desde el directorio actual:
../alice/file
En el ejemplo anterior, el ".. " se refiere al directorio principal del directorio actual.
Un directorio, aunque esté vacío, contendrá necesariamente al menos dos referencias:
.: referencia a sí mismo...: referencia al directorio principal del directorio actual.
Una ruta relativa puede por lo tanto comenzar con ./ o ../. Cuando la ruta relativa se refiere a un subdirectorio o a un archivo en el directorio actual, el ./ es frecuentemente omitido. La inclusión de la referencia ./ será realmente requerida solo para la ejecución de un archivo ejecutable.
Los errores en las rutas pueden causar muchos problemas: desde la creación de carpetas o archivos en lugares equivocados, hasta eliminaciones involuntarias, etc. Por lo tanto, es muy recomendado utilizar el autocompletado cuando se ingresan las rutas.

En el ejemplo anterior, se quiere proporcionar la posición del archivo myfile desde el directorio de bob.
- En una ruta absoluta, el directorio actual no tiene importancia. Empezamos desde la raíz y bajamos hasta los directorios
home,groupA,alicey finalmente el archivomyfile:/home/groupA/alice/myfile. - En una ruta relativa, nuestro punto de partida es el directorio actual
bob, subimos un nivel con..(es decir, en el directoriogroupA), luego bajamos al directorio de alice, y finalmente el archivomyfile:../alice/myfile.
comando pwd
El comando pwd (Print Working Directory) muestra la ruta absoluta del directorio actual.
$ pwd
/home/archlatam
Para utilizar una ruta relativa para hacer referencia a un archivo o a un directorio, o para usar el comando cd para moverse a otro directorio, es necesario conocer su posición en el árbol de archivos.
Dependiendo del tipo de shell y de los diferentes parámetros de su archivo de configuración, el prompt del terminal (también conocido como prompt de comandos) mostrará la ruta absoluta o relativa del directorio actual.
comando cd
El comando cd (Cambiar Directorio) te permite cambiar el directorio actual -- en otras palabras, moverte a través del árbol.
$ cd /tmp
$ pwd
/tmp
$ cd ../
$ pwd
/
$ cd
$ pwd
/home/archlatam
Como puedes ver en el último ejemplo anterior, el comando cd sin argumentos mueve el directorio actual al directorio home.
comando ls
El comando ls muestra el contenido de un directorio.
ls [-a] [-i] [-l] [directory1] [directory2] [...]
Ejemplo:
$ ls /home
. .. archlatam
Las opciones principales del comando ls son:
| Opción | Información |
|---|---|
-a |
Muestra todos los archivos, incluso los ocultos. Los archivos ocultos en Linux son los que comienzan con un .. |
-i |
Muestra los números de inode. |
-l |
Utiliza un formato de lista largo, es decir, cada línea muestra información de formato largo para un archivo o un directorio. |
El comando ls, sin embargo, tiene muchas opciones (ver man):
| Opción | Información |
|---|---|
-d |
Muestra la información de un directorio en lugar de listar sus contenidos. |
-g |
Como la opción -l, pero no lista el propietario. |
-h |
Muestra los tamaños de los archivos en el formato más apropiado (byte, kilobyte, megabyte, gigabyte, ...). h significa Human Readable. Debe ser utilizado con la opción -l. |
-s |
Muestra el tamaño asignado de cada archivo, en bloques. En el sistema operativo GNU/Linux, "block" es la unidad de almacenamiento más pequeña en el sistema de archivos, un bloque es igual a 4096Byte. |
-A |
Muestra todos los archivos en el directorio excepto . y .. |
-R |
Muestra el contenido de los subdirectorios de manera recursiva. |
-F |
Muestra el tipo de archivo. Imprime un/ para un directorio, * para los ejecutables, @ para un enlace simbólico, y nada para un archivo de texto. |
-X |
Ordena los archivos según sus extensiones. |
- Descripción de las columnas generadas por la ejecución del comando
ls -lia:
$ ls -lia /home
78489 drwx------ 4 archlatam archlatam 4096 25 oct. 08:10 archlatam
| Valor | Información |
|---|---|
78489 |
Número de inode. |
drwx------ |
Tipo de archivo (d) y permisos (rwx------). |
4 |
Número de subdirectorios. (. y .. incluidas). Para un archivo, representa el número de enlaces directos y 1 representa sí mismo. |
archlatam |
Propietario del usuario. |
archlatam |
Propietario del grupo. |
4096 |
Para los archivos, muestra el tamaño del archivo. Para los directorios, muestra el valor fijo de 4096 bytes ocupados por el nombre del archivo. Para calcular el tamaño total de un directorio, usa du -sh archlatam/ |
25 oct. 08:10 |
Fecha de última modificación. |
archlatam |
El nombre del archivo (o directorio). |
Nota
Los Alias ya están frecuentemente posicionados en las distribuciones comunes.
Este es el caso del alias ll:
alias ll='ls -l --color=auto'
El comando ls tiene muchas opciones. Aquí hay algunos ejemplos avanzados de uso:
- Lista los archivos en
/etcsegún la última modificación:
$ ls -ltr /etc
total 1332
-rw-r--r--. 1 root root 662 29 may 2021 logrotate.conf
-rw-r--r--. 1 root root 272 17 may. 2021 mailcap
-rw-------. 1 root root 122 12 may. 2021 securetty
...
-rw-r--r--. 2 root root 85 18 may. 17:04 resolv.conf
-rw-r--r--. 1 root root 44 18 may. 17:04 adjtime
-rw-r--r--. 1 root root 283 18 may. 17:05 mtab
- Lista los archivos
/varde tamaño superior a 1 megabyte pero inferior a 1 gigabyte. El ejemplo aquí presentado utiliza los comandos avanzadosgrepcon expresiones regulares. Los novatos no deben luchar demasiado, habrá un tutorial especial para introducir estas expresiones regulares en el futuro.
$ ls -lhR /var/ | grep ^\- | grep -E "[1-9]*\.[0-9]*M"
...
-rw-r--r--. 1 apache apache 1.2M 10 may. 13:02 XB RiyazBdIt.ttf
-rw-r--r--. 1 apache apache 1.2M 10 may. 13:02 XB RiyazBd.ttf
-rw-r--r--. 1 apache apache 1.1M 10 may. 13:02 XB RiyazIt.ttf
...
Por supuesto, se recomienda fuertemente utilizar el comando find.
$ find /var -size +1M -a -size -1024M -a -type f -exec ls -lh {} \;
- Muestra los permisos de una carpeta:
Para conocer los permisos de una carpeta, por ejemplo /etc, el siguiente comando no sería apropiado:
$ ls -l /etc
total 1332
-rw-r--r--. 1 root root 44 18 nov. 17:04 adjtime
-rw-r--r--. 1 root root 1512 12 janv. 2010 aliases
-rw-r--r--. 1 root root 12288 17 nov. 17:41 aliases.db
drwxr-xr-x. 2 root root 4096 17 nov. 17:48 alternatives
...
El comando anterior mostrará el contenido de la carpeta (dentro) por defecto. Para la carpeta misma, es posible utilizar la opción -d.
$ ls -ld /etc
drwxr-xr-x. 69 root root 4096 18 nov. 17:05 /etc
- Ordenar por tamaño del archivo, primero el más grande:
$ ls -lhS
- Formato hora/fecha con
-l:
$ ls -l --time-style="+%Y-%m-%d %m-%d %H:%M" /
total 12378
dr-xr-xr-x. 2 root root 4096 2014-11-23 11-23 03:13 bin
dr-xr-xr-x. 5 root root 1024 2014-11-23 11-23 05:29 boot
- Añadir la barra trailing slash al final de las carpetas:
Por defecto, el comando ls no muestra la última barra de una carpeta. En algunos casos, como para los scripts, por ejemplo, es útil mostrarla:
$ ls -dF /etc
/etc/
- Ocultar algunas extensiones:
$ ls /etc --hide=*.conf
comando mkdir
El comando mkdir crea un directorio o un árbol de directorios.
mkdir [-p] directory [directory] [...]
Ejemplo:
$ mkdir /home/archlatam/work
El directorio "archlatam" debe estar presente para crear el directorio "work".
De lo contrario, se debe usar la opción -p. La opción -p crea los directorios padre si estos no existen.
Peligro
No es recomendable usar los nombres de los comandos Linux como directorios o nombres de archivos.
comando touch
El comando touch modifica la marca de tiempo de un archivo o crea un archivo vacío si el archivo no existe.
touch [-t date] file
Ejemplo:
$ touch /home/archlatam/myfile
| Opción | Información |
|---|---|
-t date |
Cambia la fecha de última modificación del archivo con la fecha especificada. |
Formato de fecha: [AAAA]MMJJhhmm[ss]
Suggerimento
El comando touch es usado principalmente para crear un archivo vacío, pero puede ser útil, por ejemplo, para los backups incrementales o diferenciales. De hecho, el único efecto de ejecutar un touch sobre un archivo será forzar su guardado durante el backup siguiente.
comando rmdir
El comando rmdir elimina un directorio vacío.
Ejemplo:
$ rmdir /home/archlatam/work
| Opción | Información |
|---|---|
-p |
Elimina la carpeta padre o las carpetas proporcionadas, si están vacías. |
Sugerimiento
Para eliminar una carpeta no vacía y su contenido, utiliza el comando rm.
comando rm
El comando rm elimina un archivo o un directorio.
rm [-f] [-r] file [file] [...]
Peligro
Cualquier eliminación de un archivo o directorio es definitiva.
| Opciones | Información |
|---|---|
-f |
No preguntar si eliminar. |
-i |
Preguntar si cancelar. |
-r |
Elimina una carpeta y borra recursivamente sus subcarpetas. |
Nota
El comando rm no pide confirmación cuando se eliminan los archivos. Sin embargo, con una distribución arch/arch, rm pide confirmación de borrado porque el comando rm es un alias del comando rm -i. No te sorprendas si en otra distribución, como Debian, por ejemplo, no obtienes una solicitud de confirmación.
La eliminación de una carpeta con el comando rm, ya sea que la carpeta esté vacía o no, requiere añadir la opción -r.
El fin de las opciones es señalado a la shell por un doble guión --.
En el ejemplo:
$ >-hard-hard # To create an empty file called -hard-hard
hard-hard
[CTRL+C] To interrupt the creation of the file
$ rm -f -- -hard-hard
El nombre del archivo hard-hard comienza con un -. Sin el uso del -- la shell habría interpretado el -d en -hard-hard como una opción.
command mv
El comando mv mueve y renombra un archivo.
mv file [file ...] destination
Ejemplos:
$ mv /home/archlatam/file1 /home/archlatam/file2
$ mv /home/archlatam/file1 /home/archlatam/file2 /tmp
| Opciones | Información |
|---|---|
-f |
No pedir confirmación para sobrescribir el archivo de destino. |
-i |
Solicitar confirmación para sobrescribir el archivo de destino (por defecto). |
Algunos casos concretos te ayudará a entender las dificultades que pueden surgir:
$ mv /home/archlatam/file1 /home/archlatam/file2
Renomba file1 a file2. Si file2 ya existe, reemplaza el contenido del archivo con file1.
$ mv /home/archlatam/file1 /home/archlatam/file2 /tmp
Mueve file1 y file2 a la carpeta /tmp.
$ mv file1 /repexist/file2
Mueve file1 a repexist y lo renombra file2.
$ mv file1 file2
file1 es renombrado a file2.
$ mv file1 /repexist
Si existe la carpeta de destino, file1 es movido a /repexist.
$ mv file1 /wrongrep
Si el directorio de destino no existe, file1 es renombrado a wrongrep en el directorio principal.
comando cp
El comando cp copia un archivo.
cp file [file ...] destination
Ejemplo:
$ cp -r /home/archlatam /tmp
| Opciones | Información |
|---|---|
-i |
Solicitud de confirmación para sobrescribir (por defecto). |
-f |
No pedir confirmación para sobrescribir el archivo de destino. |
-p |
Mantiene el propietario, los permisos y la marca de tiempo del archivo copiado. |
-r |
Copia un directorio con sus archivos y subdirectorios. |
-s |
Crea un enlace simbólico en lugar de copiar. |
cp file1 /repexist/file2
file1 es copiado a /repexist con el nombre file2.
$ cp file1 file2
file1 es copiado como file2 en esta carpeta.
$ cp file1 /repexist
Si existe el directorio de destino, file1 es copiado a /repexist.
$ cp file1 /wrongrep
Si el directorio de destino no existe, file1 es copiado bajo el nombre wrongrep en el directorio principal.
Visualización
comando file
El comando file muestra el tipo de un archivo.
file file1 [files]
Ejemplo:
$ file /etc/passwd /etc
/etc/passwd: ASCII text
/etc: directory
comando more
El comando more muestra el contenido de uno o más archivos pantalla por pantalla.
more file1 [files]
Ejemplo:
$ more /etc/passwd
root:x:0:0:root:/root:/bin/bash
...
Usando la tecla ENTER, el desplazamiento es línea por línea. Usando la tecla SPACE, el desplazamiento es página por página. /text te permite buscar la coincidencia en el archivo.
comando less
El comando less muestra el contenido de uno o más archivos. El comando less es interactivo y tiene sus propios comandos para el uso.
less file1 [files]
Los comandos específicos para less son:
| Comando | Acción |
|---|---|
| h | Ayuda. |
| ↑↓→← | Moverse arriba, abajo de una línea, o a la derecha e izquierda. |
| Intro | Moverse abajo de una línea. |
| Espacio | Moverse abajo de una página. |
| AvPág y RePág | Moverse arriba o abajo de una página. |
| gg y G | Pasar a la primera y última página |
/text |
Buscar el texto. |
| q | Cerrar el comandoless. |
comando cat
El comando cat concatena el contenido de varios archivos y muestra el resultado en la salida estándar.
cat file1 [files]
Ejemplo 1 - Visualización del contenido de un archivo en salida estándar:
$ cat /etc/passwd
Ejemplo 2 - Visualización del contenido de varios archivos en salida estándar:
$ cat /etc/passwd /etc/group
Ejemplo 3 - Combinar el contenido de varios archivos en un único archivo utilizando la redirección de la salida:
$ cat /etc/passwd /etc/group > usersAndGroups.txt
Ejemplo 4 - Visualización de la numeración de línea:
$ cat -n /etc/profile
1 # /etc/profile: system-wide .profile file for the Bourne shell (sh(1))
2 # and Bourne compatible shells (bash(1), ksh(1), ash(1), ...).
3
4 if [ "`id -u`" -eq 0 ]; then
5 PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
6 else
…
Ejemplo 5 - Muestra la numeración de las líneas no vacías:
$ cat -b /etc/profile
1 # /etc/profile: system-wide .profile file for the Bourne shell (sh(1))
2 # and Bourne compatible shells (bash(1), ksh(1), ash(1), ...).
3 if [ "`id -u`" -eq 0 ]; then
4 PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
5 else
…
comando tac
El comando tac hace casi lo contrario del comando cat. Muestra el contenido de un archivo a partir del final (¡que es particularmente interesante para la lectura de los logs!).
Ejemplo: Muestra un archivo de log mostrando primero la última línea:
[root]# tac /var/log/messages | less
comando head
El comando head muestra el inicio de un archivo.
head [-n x] file
| Opción | Descripción |
|---|---|
-n x |
Mostrar las primeras x líneas del archivo |
Por defecto (sin la opción -n), el comando head mostrará las primeras 10 líneas del archivo.
comando tail
El comando tail muestra el final de un archivo.
tail [-f] [-n x] file
| Opción | Descripción |
|---|---|
-n x |
Mostrar las últimas x líneas del archivo |
-f |
Mostrar las modificaciones al archivo en tiempo real |
Ejemplo:
tail -n 3 /etc/passwd
sshd:x:74:74:Privilege-separeted sshd:/var/empty /sshd:/sbin/nologin
tcpdump::x:72:72::/:/sbin/nologin
user1:x:500:500:grp1:/home/user1:/bin/bash
Con la opción -f, la información de modificación del archivo siempre será emitida a menos que el usuario salga del estado de monitorización con CTRL + C. Esta opción es muy utilizada para rastrear los archivos de log (los registros) en tiempo real.
Sin la opción -n, el comando tail muestra las últimas 10 líneas del archivo.
comando sort
El comando sort ordena las líneas de un archivo.
Permite ordenar el resultado de un comando o el contenido de un archivo en un orden determinado, numérico, alfabético, por tamaño (KB, MB, GB) o en orden inverso.
sort [-k] [-n] [-u] [-o file] [-t] file
Ejemplo:
$ sort -k 3,4 -t ":" -n /etc/passwd
root:x:0:0:root:/root:/bin/bash
adm:x:3:4:adm:/var/adm/:/sbin/nologin
| Opción | Descripción |
| --------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------ |
| -k | Especifica las columnas a separar. Es posible especificar más columnas. |
| -n | Requiere una ordenación numérica. |
| -o file | Guarda la ordenación en el archivo especificado. |
| -t | Especificar un delimitador, que requiere que los contenidos del archivo correspondiente sean contenidos de columnas regularmente delimitadas, de lo contrario no pueden ser ordenados correctamente. |
| -r | Invierte el orden del resultado. Usado junto con la opción -n para ordenar del más grande al más pequeño. |
| -u | Elimina los duplicados después de la ordenación. Equivalente a sort file | uniq. |
El comando sort solo ordena el archivo en la pantalla. El archivo no es modificado por la ordenación. Para guardar la ordenación, usar la opción -o o una redirección de la salida >.
Por defecto, los números son ordenados según su carácter. Por lo tanto, "110" estará antes de "20", que a su vez estará antes de "3". La opción -n debe especificarse para que los bloques de caracteres numéricos sean ordenados según su valor.
El comando sort invierte el orden de los resultados, con la opción -r:
$ sort -k 3 -t ":" -n -r /etc/passwd
nobody:x:65534:65534:Kernel Overflow User:/:/sbin/nologin
systemd-coredump:x:999:997:systemd Core Dumper:/:/sbin/nologin
polkitd:x:998:996:User for polkitd:/:/sbin/nologin
En este ejemplo, el comando sort ordenará el contenido del archivo /etc/passwd desde el uid (identificador de usuario) más grande al más pequeño.
Algunos ejemplos avanzados de utilización del comando sort:
- Mezclando los valores
El comando sort también permite mezclar los valores con la opción -R:
$ sort -R /etc/passwd
- Ordenación de direcciones IP
Un administrador de sistema se encuentra rápidamente frente al procesamiento de direcciones IP de los logs de sus servicios, como SMTP, VSFTP o Apache. Estas direcciones son típicamente extraídas con el comando cut.
He aquí un ejemplo con el archivo dns-client.txt:
192.168.1.10
192.168.1.200
5.1.150.146
208.128.150.98
208.128.150.99
$ sort -nr dns-client.txt
208.128.150.99
208.128.150.98
192.168.1.200
192.168.1.10
5.1.150.146
- Ordenación de archivos mediante la eliminación de duplicados
El comando sort sabe cómo eliminar los duplicados de la salida del archivo usando la opción -u.
He aquí un ejemplo con el archivo colours.txt:
Red
Green
Blue
Red
Pink
$ sort -u colours.txt
Blue
Green
Pink
Red
- Ordenación de archivos según las dimensiones
El comando sort sabe cómo reconocer las dimensiones de los archivos, de comandos como ls con la opción -h.
He aquí un ejemplo con el archivo size.txt:
1.7G
18M
69K
2.4M
1.2M
4.2G
6M
124M
12.4M
4G
$ sort -hr size.txt
4.2G
4G
1.7G
124M
18M
12.4M
6M
2.4M
1.2M
69K
comando wc
El comando wc cuenta el número de líneas, palabras y/o bytes de un archivo.
wc [-l] [-m] [-w] file [files]
| Opción | Descripción |
|---|---|
-c |
Cuenta el número de bytes. |
-m |
Cuenta el número de caracteres. |
-l |
Cuenta el número de líneas. |
-w |
Cuenta el número de palabras. |
Búsqueda
comando find
El comando find busca la posición de archivos o carpetas.
find directory [-name name] [-type type] [-user login] [-date date]
Dado que las opciones del comando find son numerosas, es mejor referirse al comando man.
Si la carpeta de búsqueda no es especificada, el comando find realizará la búsqueda desde la carpeta actual.
| Opción | Descripción |
|---|---|
-perm permissions |
Busca los archivos según sus permisos. |
-size size |
Búsqueda de archivos según las dimensiones. |
opción -exec del comando find
Es posible utilizar la opción -exec del comando find para ejecutar un comando en cada línea del resultado:
$ find /tmp -name *.txt -exec rm -f {} \;
El comando anterior busca todos los archivos en la carpeta /tmp denominados *.txt y los elimina.
Comprender la opción -exec
En el ejemplo anterior, el comando find construirá una cadena que representa el comando a ejecutar.
Si el comando find encuentra tres archivos llamados log1.txt, log2.txt y log3.txt, entonces el comando find construirá la cadena reemplazando los paréntesis en la cadena rm -f {} \; con uno de los resultados de la búsqueda, y lo hará tantas veces como resultados haya.
Esto nos dará:
rm -f /tmp/log1.txt ; rm -f /tmp/log2.txt ; rm -f /tmp/log3.txt ;
El carácter ; es un carácter especial de la shell que debe ser protegido por \ para evitar que sea interpretado demasiado pronto por el comando find (y no en el -exec).
Sugerimiento
$ find /tmp -name *.txt -delete hace lo mismo.
comando whereis
El comando whereis busca los archivos relativos a un comando.
whereis [-b] [-m] [-s] command
Ejemplo:
$ whereis -b ls
ls: /bin/ls
| Opción | Descripción |
|---|---|
-b |
Ejecuta la búsqueda solo del archivo binario. |
-m |
Busca solo en las páginas man. |
-s |
Busca solo en archivos fuente. |
command grep
El comando grep busca una cadena en un archivo.
grep [-w] [-i] [-v] "string" file
Ejemplo:
$ grep -w "root:" /etc/passwd
root:x:0:0:root:/root:/bin/bash
| Opción | Descripción |
|---|---|
-i |
Ignora las mayúsculas de la cadena buscada. |
-v |
Excluye las líneas que contienen la cadena. |
-w |
Busca la palabra exacta. |
El comando grep devuelve la línea completa que contiene la cadena buscada.
- El carácter especial
^se usa para buscar una cadena al inicio de una línea. - El carácter especial
$se usa para buscar una cadena al final de una línea.
$ grep -w "^root" /etc/passwd
Nota
Este comando es muy potente y se recomienda fuertemente consultar su manual. Tiene numerosos derivados.
Es posible buscar una cadena en un árbol de archivos con la opción -R.
grep -R "Virtual" /etc/httpd
Meta-caracteres (wildcards)
Los meta-caracteres sustituyen uno o más caracteres (o incluso una ausencia de caracteres) durante una búsqueda. Estos meta-caracteres también son conocidos como wildcards.
Pueden ser combinados.
El carácter * sustituye una cadena compuesta por cualquier carácter. El carácter * también puede representar una ausencia de caracteres.
$ find /home -name "test*"
/home/archlatam/test
/home/archlatam/test1
/home/archlatam/test11
/home/archlatam/tests
/home/archlatam/test362
Los meta-caracteres permiten búsquedas más complejas sustituyendo todo o parte de una palabra. Simplemente sustituyen las incógnitas con estos caracteres especiales.
El carácter ? sustituye un solo carácter, cualquiera que sea.
$ find /home -name "test?"
/home/archlatam/test1
/home/archlatam/tests
Los corchetes [ y ] se usan para especificar los valores que un solo carácter puede tomar.
$ find /home -name "test[123]*"
/home/archlatam/test1
/home/archlatam/test11
/home/archlatam/test362
Nota
Siempre rodear las palabras que contienen metacaracteres con " para evitar que sean sustituidas por los nombres de archivos que cumplen los criterios.
Atención
No confundas los meta-caracteres de la shell con los meta-caracteres de las expresiones regulares. El comando grep utiliza meta-caracteres de expresiones regulares.
Redirecciones y pipes
Entrada y salida estándar
En los sistemas UNIX y Linux, hay tres flujos estándar. Permiten a los programas, a través de la biblioteca stdio.h, enviar y recibir información.
Estos flujos son llamados canal X o descriptor de archivo X.
Por defecto:
- el teclado es el dispositivo de entrada para el canal 0, llamado stdin ;
- la pantalla es el dispositivo de salida para los canales 1 y 2, llamados stdout y stderr.

stderr recibe los flujos de error devueltos por un comando. Los otros flujos son dirigidos a stdout.
Estos flujos apuntan a archivos de dispositivos, pero ya que todo es un archivo en UNIX/Linux, los flujos de E/S pueden ser fácilmente direccionados a otros archivos. Este principio es la fuerza de la shell.
Redirección de Entrada
Es posible redirigir el flujo de entrada desde otro archivo con el carácter < o <<. El comando leerá el archivo en lugar del teclado:
$ ftp -in serverftp << ftp-commands.txt
Nota
Solo los comandos que requieren la entrada del teclado serán capaces de manejar la redirección de la entrada.
La redirección de entrada también puede ser usada para simular la interactividad del usuario. El comando leerá el flujo de entrada hasta que encuentre la palabra clave definida después de la redirección de entrada.
Esta función es usada para los comandos interactivos en los scripts:
$ ftp -in serverftp << END
user alice password
put file
bye
END
La palabra clave END puede ser reemplazada por cualquier palabra.
$ ftp -in serverftp << STOP
user alice password
put file
bye
STOP
La shell sale del comando ftp cuando recibe una línea que contiene solo la palabra clave.
Atención
La palabra clave final, aquí END o STOP, debe ser la única palabra en la línea y debe estar al inicio de la línea.
La redirección del estándar input es usada raramente, porque la mayoría de los comandos aceptan un nombre de archivo como argumento.
El comando wc podría ser usado de esta manera:
$ wc -l .bash_profile
27 .bash_profile # the number of lines is followed by the file name
$ wc -l < .bash_profile
27 # returns only the number of lines
Redirección de Salida
La salida estándar puede ser redirigida a otros archivos usando el carácter > o >>.
La simple redirección > sobrescribe el contenido del archivo de salida:
$ date +%F > date_file
Cuando se usa el carácter >>, indica que el resultado del comando es añadido al contenido del archivo.
$ date +%F >> date_file
En ambos casos, el archivo es creado automáticamente cuando no existe.
La salida de error estándar también puede ser redirigida a otro archivo. Esta vez será necesario especificar el número del canal (que puede ser omitido para los canales 0 y 1):
$ ls -R / 2> errors_file
$ ls -R / 2>> errors_file
Ejemplos de redirección
Redirección de 2 salidas a 2 archivos:
$ ls -R / >> ok_file 2>> nok_file
Redirección de 2 salidas a un solo archivo:
$ ls -R / >> log_file 2>&1
Redirección del stderr a un "pozo sin fondo" (/dev/null):
$ ls -R / 2>> /dev/null
Cuando ambos flujos de salida son redirigidos, ninguna información es mostrada en la pantalla. Para usar tanto la redirección de salida como mantener la visualización, es necesario usar el comando tee.
Pipes
Un pipe es un mecanismo que permite conectar la salida estándar de un primer comando a la entrada estándar de un segundo comando.
Esta comunicación es unidireccional y se hace con el símbolo |. El símbolo del pipe | se obtiene presionando la tecla SHIFT + | simultáneamente.

Todos los datos enviados por el control a la izquierda del pipe a través del canal de salida estándar son enviados al canal de entrada estándar del control a la derecha.
Los comandos particularmente utilizados después de un pipe son los filtros.
- Ejemplos:
Muestra solo el inicio:
$ ls -lia / | head
Muestra solo el final:
$ ls -lia / | tail
Ordena el resultado:
$ ls -lia / | sort
Cuenta el número de palabras / caracteres:
$ ls -lia / | wc
Busca una cadena en el resultado:
$ ls -lia / | grep fichier
Puntos Especiales
comando tee
El comando tee se usa para redirigir la salida estándar de un comando a un archivo manteniendo la visualización en la pantalla.
Se combina con el pipe | para recibir como entrada la salida del comando a redirigir:
$ ls -lia / | tee fic
$ cat fic
La opción -a añade al archivo en lugar de sobrescribirlo.
comandos alias y unalias
El uso de alias es una forma de pedir a la shell que recuerde un comando particular con sus opciones y que le dé un nombre.
Por ejemplo:
$ ll
sustituirá al comando:
$ ls -l
El comando alias lista los alias para la sesión actual. Los alias están establecidos por defecto en las distribuciones Linux. Aquí, los alias para un servidor arch Linux:
$ alias
alias l.='ls -d .* --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'
alias vi='vim'
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
Los alias están definidos solo temporalmente, por el tiempo de la sesión de usuario.
Para un uso permanente, deben ser creados en:
- archivo
.bashrcen el directorio de acceso del usuario; - archivo
/etc/bashrcpara todos los usuarios.
Atención
¡Debe prestarse especial atención al usar alias que pueden ser potencialmente peligrosos! Por ejemplo, un alias creado sin un conocimiento básico de administrador:
alias cd='rm -Rf'
El comando unalias te permite eliminar los alias.
Para eliminar un solo alias:
$ unalias ll
Para eliminar todos los alias:
$ unalias -a
Para deshabilitar temporalmente un alias, la combinación es \<nombre alias>.
Por ejemplo si escribimos:
$ type ls
podría devolver lo siguiente:
ls is an alias to « ls -rt »
Ahora que esto es conocido, podemos ver los resultados de usar el alias o deshabilitarlo de una vez con el carácter \ ejecutando lo siguiente:
$ ls file* # order by time
file3.txt file2.txt file1.txt
$ \ls file* # order by name
file1.txt file2.txt file3.txt
Alias y Funciones Útiles
- alias de
grep.
Colorea el resultado del comando grep: alias grep='grep --color=auto'
- función
mcd
Es común crear una carpeta y luego moverse dentro de ella: mcd() { mkdir -p "$1"; cd "$1"; }
- función
cls
Moverse a una carpeta y listar su contenido: cls() { cd "$1"; ls; }
- función
backup
Crea una copia de seguridad de un archivo: backup() { cp "$1"{,.bak}; }
- función
extract
Extrae cualquier tipo de archivo:
extract () {
if [ -f $1 ] ; then
case $1 in
*.tar.bz2) tar xjf $1 ;;
*.tar.gz) tar xzf $1 ;;
*.bz2) bunzip2 $1 ;;
*.rar) unrar e $1 ;;
*.gz) gunzip $1 ;;
*.tar) tar xf $1 ;;
*.tbz2) tar xjf $1 ;;
*.tgz) tar xzf $1 ;;
*.zip) unzip $1 ;;
*.Z) uncompress $1 ;;
*.7z) 7z x $1 ;;
*)
echo "'$1' cannot be extracted via extract()" ;;
esac
else
echo "'$1' is not a valid file"
fi
}
- Si el
alias cmountdevuelve lo siguiente:alias cmount="mount | column -t"
Entonces se puede usar cmount para mostrar todos los mounts del sistema en columnas como la siguiente: [root]# cmount
que devuelve nuestro sistema de archivos montado en el siguiente formato:
/dev/simfs on / type simfs (rw,relatime,usrquota,grpquota)
proc on /proc type proc (rw,relatime)
sysfs on /sys type sysfs (rw,relatime)
none on /dev type devtmpfs (rw,relatime,mode=755)
none on /dev/pts type devpts (rw,relatime,mode=600,ptmxmode=000)
none on /dev/shm type tmpfs (rw,relatime)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw,relatime)
El carácter ;
El carácter ; concatena los comandos.
Una vez que el usuario ha presionado ENTER, todos los comandos serán ejecutados en secuencia en el orden de ingreso.
$ ls /; cd /home; ls -lia; cd /
Verificar tus Conocimientos
:heavy_check_mark: ¿Qué define un usuario en Linux? (7 respuestas)
:heavy_check_mark: ¿Qué caracteriza una opción larga para un comando?
:heavy_check_mark: ¿Qué comandos te permiten buscar ayuda sobre un comando?
-
[ ]
google -
[ ]
chuck --norris -
[ ]
info -
[ ]
apropos -
[ ]
whatis
:heavy_check_mark: ¿Qué comando te permite ver el historial de un usuario?
:heavy_check_mark: ¿Qué comando te permite buscar texto en un archivo?
-
[ ]
find -
[ ]
grep
:heavy_check_mark: ¿Qué comando te permite buscar un archivo?
-
[ ]
find -
[ ]
grep
:heavy_check_mark: ¿Qué comando redirige el flujo de error de un comando a un nuevo archivo errors.log?
-
[ ]
ls -R / 2> errors.log -
[ ]
ls -R / 2>> errors.log -
[ ]
ls -R / 2> errors.log 2>&1