Los 50 mejores Comandos Linux del Shell Bash que debes conocer
Seguro que sabes que el sistema operativo Linux es el más utilizado en entornos profesionales como los servidores o el cloud computing. Puede también que hayas descubierto que su mayor potencia se encuentra manejar un montón de comandos de Linux que se teclean directamente en un Shell (o intérprete de comandos).
En este artículo podrás conocer desde los comandos básicos e imprescindibles, hasta los mejores comandos que todo usuario y administrador de sistemas debe de conocer.
Antes de comenzar me gustaría dejar claro que sea cual sea la distribución de Linux que estés usando, los comandos explicados a continuación te servirán ya que se usan en el intérprete BASH que está instalado por defecto en todas las distribuciones. No importa si usas Ubuntu, Debian, Mint, Kali, RHEL, Suse o cualquier otra. Desde que Linus Torvalds creó este magnífico sistema operativo han nacido muchas variantes (distribuciones) que utilizan elementos distintos, pero siempre tienen otras muchas cosas en común, como el kernel, librerías y comandos.
Contenidos
- Los comandos de Linux y el terminal
- Comandos Linux básicos para principantes
- Videos en youtube donde explico los comandos básicos para principiantes
- Los mejores comandos de LINUX
- Comando grep
- Ejecutar comando linux al iniciar
- Preguntas frecuentes sobre los comandos de Linux
- Tabla resumen de los 50 mejores Comandos Linux
Los comandos de Linux y el terminal
Como escribí en el artículo ¿Qué es linux y su intérprete de comandos? necesitamos un software que nos ofrezca una interface donde poder ejecutar comandos y que sean interpretados de forma correcta. Aunque hay diferencias en los términos, en la práctica se está haciendo referencia a lo mismo cuando se habla de Shell, terminal, intérprete de comandos o CLI (Command Line Interface).
Si eres totalmente novato te recomiendo que eches un vistazo al artículo Primeros pasos en el intérprete de comandos Bash para conocer mejor el entorno. Ahora me voy a centrar directamente en los comandos.
Tradicionalmente se usaba un entorno totalmente en modo texto donde Bash tenía el control y no existía ningún entorno gráfico domo Gnome, KDE, XFCE,… En la actualidad son muy utilizados los emuladores dentro del escritorio ya que ofrecen ventajas como mejor aspecto, múltiples ventanas, pestaña, temas, etc. Todos traen uno preinstalado, pero si quiere mejorarlo te aconsejo echar un vistazo a Terminator y Byobu
¿Empezamos ya a explicar comandos? ¡¡Espera!! ¿Cómo?, ¿que nunca has usado el terminal y no sabes muy bien como funciona? pues mira antes cómo funcionan las opciones de un comando y cómo se ejecuta un comando con parámetros.
Ahora sí, vamos al lío.
Comandos Linux básicos para principantes
Lo primero que tenemos que saber es movernos por el sistema de ficheros y crear elementos básicos como directorios (también llamados carpetas).
Comando CD
Posiblemente el comando más usado sea cd (Change Directory), que nos sirve para cambiar de directorio. Lo normal es que lo utilicemos con un parámetro que le indicaría la ruta del directorio donde tiene que ir. Pero también se puede utilizar solo, sin argumentos, y lo que haría es ir a nuestro directorio “home”, (el directorio personal que cada usuario tiene asignado en el sistema). Por ejemplo si el usuario “alumno” pone cd
y pulsa intro, irá a /home/alumno/
.
Como sabemos, los sistemas de ficheros tienen una estructura jerárquica, empezamos en una unidad o en un directorio raíz y a partir de ahí tenemos una sucesión de directorios que a su vez contendrán otros hasta crear un árbol de elementos. Por lo tanto, excepto el directorio raíz (que en linux es / ), todos los directorios tienen un padre: otro directorio que está encima de él en la estructura jerárquica. Como es una acción muy común el querer posicionarnos en el padre del directorio actual, hay una una ruta muy abreviada para referirnos a él y es usar el … Es decir cd ..
nos posiciona en el documento padre de donde ejecutamos la orden.
Otro atajo es usar como argumento el guión (-), que hará que nos posicionemos en el directorio en el que hayamos estado antes del actual.
Es decir, si hacemos cd /etc/
luego cd /home/
y por último cd -
nos encontraremos en /etc/.
Ejemplos del comando cd
cd /home/alumno/
cd ..
cd -
cd
Comando CP
El comando cp sirve para copiar ficheros y directorios. Obligatoriamente necesitaremos dos argumentos, en el primero indicamos el origen (lo que se va a copiar) y en el segundo el destino (dónde se va a copiar)
Ejemplos del comando cp
cp /home/carta.txt /var/
El fichero carta ahora estaría copiado en el directorio /var/cp carta.txt carta_copia.txt
Se crea una copia del fichero carta en el mismo directorio. Obviamente necesita un nombre distinto al original
En el caso de que queramos copiar un directorio completo con todo su contenido tendríamos que utilizar la opción -r
Ejemplo:
cp -r /home/alumno/ /hombre/backups/
El directorio alumno se copiará en backups, es decir, se crea el directorio /home/backups/alumno/ con el mismo contenido que el original
Una consideración a tener en cuenta es que el nuevo fichero o directorio que se crea tendrá los permisos del usuario que ejecuta la orden, no los mismos que el original. Si queremos que también se copien los atributos, utilizaríamos la opción -p
Crear directorio: Comando MKDIR
El comando mkdir se utiliza para crear directorios. Puede crear uno o varios al mismo tiempo, solo tendré que poner los distintos nombres separados por espacios.
Ejemplos del comando mkdir:
mkdir fotos
mkdir documentos cartas trabajos
Los argumentos que le indicamos corresponden a rutas de nuestro sistema de ficheros, por lo tanto podemos indicarle cualquier lugar del disco, siempre que el lugar donde vamos a crear el directorio exista
Ejemplos del comando mkdir:
mkdir /etc/nuevo_directorio/
mkdir ../directorio_hermano/
Si el destino donde queremos crear nuestro nuevo directorio no existe, pero queremos crearlo, podemos utilizar la opción -p que creará toda la estructura de directorios necesaria. Es decir, si el directorio /home/ está vacío y ejecuto mkdir /home/clase1/alumno1/
se creará tanto el directorio clase1 como el de alumno1.
Borrar directorio o fichero: Comando RM
El comando rm borra uno o varios ficheros. Si le añadimos la opción -r
también borra directorios con todo su contenido.
Ejemplos del comando rm:
rm carta.txt
rm -r /home/alumno/descargas/
Mover archivos en Linux: Comando MV
Mv tiene dos funciones: mover o renombrar elementos. Necesitamos obligatoriamente indicarle dos argumentos, el primero hace referencia a la ruta del elemento que quiero cambiar y el segundo al nuevo nombre o nueva ubicación del elemento.
Ejemplos del comando mv:
mv /home/carta.txt /etc/
El fichero carta ahora estaría en el directorio /etc/mv /home/alumno/ /home/delegado/
El directorio alumno ahora se llamaría delegadomv /home/foto.jpg /usr/avatar.jpg
El fichero foto.jpg ahora se llama avatar y está en /usr/
Comando LS
Es muy común querer ver lo que contiene un directorio Para ello existe el comando ls (list) que nos muestra todo los elementos del directorio que le indiquemos. Si lo ejecutamos sin argumentos, nos mostrará el contenido del directorio actual.
Tiene muchísimas opciones, si bien hay dos o tres que son utilizadas con muchísima frecuencia. Vamos a repasarlas
Comando ls para ver el tamaño de los archivos
La opción -l nos muestra los detalles de los elementos mostrados. A cada uno de ellos se le dedica una columna. La primera columna indica el tipo de elemento que es (d=directorio, – = fichero normal, l = enlace, etc..), seguido de los permisos que tiene el elemento. La segunda indica la cantidad de enlaces que tiene (también lo explicaremos en entradas posteriores). La tercera nos indica quién es el propietario y la cuarta el grupo propietario del elemento. Después el tamaño en bytes, la fecha y por último el nombre del elemento.
Para facilitar la lectura del tamaño podemos añadir la opción -h , que hará que el tamaño se muestre en formato entendible para los humanos, es decir, en lugar de poner los bytes que ocupa, nos lo dice en KB, MB, GB, etc.. Mucho más fácil de reconocer sobre todo para tamaños de ficheros grandes.
Comando ls para ver los archivos ocultos
Si ponemos la opción -a al comando ls, muestra los ficheros y directorios “ocultos”, o lo que es lo mismo, los que tienen un nombre que empieza por un punto.
Comando ls para ordenar por tamaño
El listado que muestra el comando ls se puede ordenar por varios factores: con -S nos basamos en el tamaño, con -t en la fecha y con -r invertimos el orden. Hay más opciones que se pueden consultar en las páginas man.
Ejemplos del comando ls:
ls -l
ls -lh /home/alumno/
ls -lS /home/alumno/descargas/
ls -a /tmp/
Crear archivo: Comando TOUCH
Un archivo de Linux se puede crear de muchas formas. Si quieres introducir un texto, bien porque sea un fichero de configuración, el código de un programa o algo parecido, lo normal es que lo hagas directamente con tu editor de texto favorito: vi, emacs, nano….
También puedes crearlo redirigiendo la salida de texto, por ejemplo echo "Me llamo Antonio" > mi_nombre.txt
Pero el comando más rápido para crear un fichero vacío es el comando touch. Simplemente tendremos que acompañarlo del nombre del fichero que vamos a crear: touch mi_fichero.txt
Tip: ¿Quieres crear 50 ficheros vacíos de forma muy rápida? prueba touch mi_fichero[1..50].txt
Comando CAT
Cat muestra por pantalla el contenido de un fichero. Lo normal es que se utilice con ficheros de texto porque en caso contrario aparecerán muchísimos símbolos ilegibles por la pantalla que no aportan nada. Si muestra muchas líneas y quieres que se vayan parando para que te dé tiempo a leerlas puedes usar la tubería (ejemplo: cat fichero.txt | more
) o el comando less en lugar de cat.
Comando apagar
Hay varios comandos que se pueden utilizar para apagar, reiniciar o cerrar Linux:
- shutdown : apaga el sistema de forma planificada
- halt : apaga el sistema sin enviar señal ACPI de apagado de alimentación eléctrica
- poweroff : apaga el sistema con señal ACPI
- reboot : reinicia el sistema
Tabla de equivalencias de comandos para apagar el sistema
Reiniciar | reboot | shutdown -r | halt –reboot |
Cerrar el sistema | halt | shutdown -H | reboot –halt |
Apagar | poweroff | shutdown -P | halt -p |
Videos en youtube donde explico los comandos básicos para principiantes
Pulsando aquí puedes ver un video donde explico los comandos cd, pwd y ls.
Aquí el video donde explico los comandos mkdir, touch, rm y mv
Los mejores comandos de LINUX
Cuando entiendes que el poder de Linux se encuentra en su Shell, hay que manejar ciertos comandos que subirán exponencialmente las tareas que puedes realizar en tu sistema. Hay dos cuestiones básicas de debes saber:
- Toda la información importantes se guarda en formato de texto. En Linux se guardan en modo texto: fichero de configuración, información de usuarios, de grupos, de contraseñas (texto cifrado), historiales de acceso, registros del sitema, etc. Por lo tanto si quieres avanzar DEBES aprender comandos que sirven para manejar y filtrar texto.
- Para Linux TODO es un fichero (resumiendo mucho). Tienes un elemento del sistema de ficheros que te representa casi cualquier cosas dentro del sistema, incluido el hardware: tarjeta de red, disco duro, puertos de entrada/salida, estadísticas del procesador, dispositivos externos (como pendrive), etc. Por lo tanto también debes aprender comandos realicen todo tipo de tareas con los ficheros.
Buscar archivo en Linux: Comando find
No hay comando más potente para buscar un fichero o directorio entro del sistema de ficheros. Busca recursivamente desde el lugar que le hemos marcado y podemos usar muchísimos criterios que deben cumplir los elementos seleccionados.
Opciones más útiles de find
Si pones varias se tiene que cumplir todas para que seleccione el elemento.
- -name / –iname : buscamos en función del nombre (el primero distingue entre mayúsculas, el segundo no)
- –type : según el tipo (f = fichero, d = directorio y l = enlace)
- –size : según el tamaño, se pueden usar el + y el – para buscar los que sean mayor o menor del tamaño indicado
- –perm: según los permisos (importante para revisar la seguridad del sistema)
- –user: según el usuario al que pertenezca el elemento.
- –exec: aplica cualquier comando al fichero encontrado MUY UTIL.
Ejemplos de uso del comando find
- find /etc -name ‘*.conf’
busca en /etc todos los ficheros con extensión conf - find / -size +10M -size -20M
busca los ficheros cuyo tamaño esté entre 10MB y 20MB - find / -name core -exec rm ‘{}’ ‘;’
busca todos los ficheros que se nombren core y los borra.
Comando grep
El comando grep selecciona las lineas de texto que contengan un patrón que podemos definir con expresiones regulares. Se puede usar para filtrar las lineas de un fichero de disco o el texto que coja de la entrada estándar mediante el uso de tuberías.
Opciones más útiles de grep
- -v: Muestra las que NO coinciden con el patrón
- -l: Sólo indica el nombre del fichero donde ha encontrado alguna coincidencia
- -w: El patrón tiene que ser una palabra independiente
- -n: Indica el número de linea donde ha encontrado el patrón
- -i: No distingue entre mayúscula y minúscula
- -c: Muestra la cantidad de lineas que cumplen con el patrón
- -r: Busca en los ficheros de forma recursiva
Ejemplos de uso del comando grep
- grep alumno /etc/passwd
busca el usuario alumno dentro del fichero passwd - grep -v deb-src /etc/apt/sources.list
selecciona del fichero sources.list las lineas que NO tienen el texto deb-src - history | grep ssh
busca las lineas que contengan la palabra ssh dentro del historial de comandos
Comando ip
El comando IP (iproute2) es el más potente al día de hoy para gestionar las redes en Linux. Reemplaza los comandos ifconfig, route, y arp. Además, aporta otras muchas funciones.
Sintaxis: ip [OPCIONES] OBJETO [COMANDO [ARGUMENTOS]]
Objetos
- link: Para configurar los objetos físicos o lógicos de la red
- address: Manejo de direcciones asociadas a los diferentes dispositivos.
- neighbour: Administrar los enlaces de vecindad (ARP).
- rule: Ver las políticas de enrutado y cambiarlas.
- route: Ver las tablas de enrutado y cambiar las reglas de las tablas.
- tunnel: Administrar los túneles IP
- maddr: Ver las direcciones multienlace, sus propiedades y cambiarlas.
- mroute: Establecer, cambiar o borrar el enrutado multienlace.
- monitor: Monitorizar continuamente el estado de los dispositivos, direcciones y rutas
Para cada uno de los objetos habrá instrucciones específicas para indicar qué queremos realizar con dicho objeto. Son tantas que no las puedo poner aquí, pero recomiendo su consulta en las páginas man del sistema.
Usos más comunes del comando IP
- Des/activar interfaz: ip link set enp0s3 up/down
- Des/activar arp: ip link set dev enp0s3 arp on/off
- Ver Direcciones IP: ip addr show / ip -c a
- Añadir dirección IP: ip addr add 192.168.1.4/24 dev enp0s3
- Borrar dirección IP: ip addr del 192.168.1.4/24 dev enp0s3
- Ver tabla enrutamiento: ip route show
- Añadir ruta: ip route add 10.10.50.0/24 via 192.168.1.1 dev enp0s3
- Borrar ruta: ip route del 10.10.50.0/24
- Puerta de enlace: ip route add default via 192.168.1.1
Más comandos de red
Socket Statistics (ss) Obtiene información sobre los sockets (internos y de red). Sin parámetros lista todas las conexiones actuales. Sintaxis ss [options] [FILTER]
Opciones
- -t Sólo conexiones TCP, -u las UDP
- -l Socket a la escucha
- -p Muestra el nombre y PID del proceso asociado a cada conexión
- -s Estadísticas resumidas
- -n No resolver los nombres, mostrar las IP’s
tracepath / tracepath6 : Muestra el camino recorrido hasta llegar al destino indicado
traceroute / traceroute6: Parecido a trachepath pero con más opciones. Puede requerir permisos de root
ping / ping6 : Envía un paquete ICMP para comprobar que el destino responde. En Linux no termina hasta que pulsemos CONTROL+C. A no ser que se use la opción -c que indica el número de paquetes a enviar.
Ejecutar comando Linux como otro usuario
El comando su (switch user) es muy conocido en Linux para identificarte como un usuario distinto al que has usado para entrar al sistema. Su uso es muy sencillo sólo tenemos que indicarle a qué usuario debemos cambiar, por ejemplo su alumno
. Si no le indicamos el usuario interpretará que nos queremos cambiar al usuario root. Recuerdo que en algunas distribuciones es aconsejable utilizar su -
para que se cargue todo el entorno del usuario al que cambiamos.
Pero algunas veces sólo queremos ejecutar una única instrucción como otro usuario, por lo que será poco efectivo cambiar de usuario, ejecutar la instrucción y luego salir. Para realizar esto de una forma más directa utilizamos la opción -c de su, de tal forma que podríamos hacer: su -c alumno ls -l /home/usuario
Lógicamente si no estamos identificados como root, la orden su nos va a pedir la contraseña del usuario al que queremos cambiar, en caso contrario será la mayor brecha de seguridad de la historia, jeje.
Ejecutar comando linux al iniciar
Cuando queremos ejecutar un comando al arrancar Linux debemos plantarnos qué tipo de función va a cumplir dicho comando. Si es un programa residente que tiene que ejecutarse cada vez que se inicia Linux porque cubre una funcionalidad que debe tener el sistema, lo más común es que se integre en algún target de systemd. Lo más frecuente en este tipo de programas es que ya se hayan instalado todas la configuraciones necesarias para que esto pase y se nos permita administrarlos con systemctl. De tal forma que sólo tendríamos que hacer (con permisos de admin) systemctl enable nombre_rograma
o systemctl disable nombre_programa.
Si es otro tipo de software (como un script creado por nosotros) podemos incluir las instrucciones necesarias en los ficheros que ejecuta el sistema en cada arranque o inicio de sesión:
- /etc/profile: Sólo puede ser modificado por el administrador y será ejecutado para cada usuario que inicie sesión. Se usa para inicializar el entorno, mostrar mensajes, etc.
- ~/.bash_profile
~/.bash_login
~/.profile
Archivos de usuario que le permite personalizar el Shell según sus preferencias. - ~/.bashrc : Archivo de usuario, se usa para crear elementos que el usuario quiere tener en cada Shell como variables locales, alias, etc.
- /etc/bashrc
/etc/bash.bashrc
Afecta a todos los usuarios del sistema, sólo el administrador puede cambiarlo. Su propósito también es crear elementos que deben estar en todos los shell.
Preguntas frecuentes sobre los comandos de Linux
¿Cuáles son los comandos básicos de Linux?
Para mi los comandos básicos son:
- Administración y uso del sistema de ficheros. cd, ls, cp, mv, rm, mkdir, chmod, chown, find y tar
- Tratamiento de texto: cat, grep, cut, vi, nano, head, tail, sort y wc
- Gestión de usuarios: useradd, userdel y usermod
- Paquetes: dkpg y apt (o rpm y yum)
- Información del sistema: man, journalctl, df, top (o htop), ps y kill
- Red: ip, ss y ping
¿Qué es un comando linux?
Un comando es un programa que se ejecuta mediante un interface en modo texto (shell o intérprete de comandos) tecleando su nombre y utilizando opciones y parámetros para complementar qué, cómo y dónde tiene que realizar su cometido.
Lo explico mejor en los siguientes videos: Introducción al intérprete de comandos, Los parámetros de una orden, Las opciones de una orden.
¿Cómo saber la lista de comandos en Linux?
Los entornos de Linux tienen dos tipos de ordenes, las que van incluidas en el intérprete de comandos (built-in) y las que son ficheros ejecutables que se encuentran en disco. Para conocer el primer tipo, si usas BASH (el Shell más común) podrías ejecutar man bash
y te aparece una ayuda muy extensa donde puedes buscar los comandos que forman parte de este shell. Y para el segundo tipo puedes listar los ficheros que hay en /usr/bin
y /usr/sbin
, con esto tendrían un buen listado comandos que puedes ejecutar en el sistema.
¿Cómo se ejecuta un comando en Linux?
Si es un comando que pertenece al sistema o lo has instalado con un paquete sólo tendrás que teclear el nombre del comando para que se ejecuta. Revisa antes que tengas los permisos necesarios para su uso. Si es un programa que tú has creado y has descomprimido en un lugar específico (por ejemplo descomprimiendo un fichero comprimido .tar.gz) tendrás que ponerle antes la ruta donde se encuentra, si está en el mismo directorio puedes poner ./nombre_comando
.
¿Qué comando muestra tu ubicación actual en el sistema de archivos en Linux?
El comando más común es pwd
. Aunque también hay una variable que te lo muestra, por lo que echo $PWD
también haría lo mismo.
¿Qué comando puedes usar para crear un archivo usando bash?
- Si quieres un archivo vacío:
touch archivo
- Si quieres crearlo con algo de texto puedes usar la redirección de salida:
echo "Hola Mundo" > archivo
- Si quieres uno con un tamaño determinado pero te da igual su contenido:
dd if=/dev/zero of=fichero bs=1M count=100
. Esto crearía un fichero de 100 MB, puedes variar bs (block size) o count para obtener tamaños distintos.
Tabla resumen de los 50 mejores Comandos Linux
ls | Lista directorios |
cd | Cambia el directorio actual de trabajo |
cp | Copia contenido desde un origen a un destino |
mkdir | Crea un directorio |
rm | Borra ficheros o directorios |
mv | Mueve elementos o les cambia el nombre |
touch | Crea un directorio vacío (o cambia la fecha) |
man | Consulta la ayuda más común, las páginas man |
info | Consulta otra ayuda, más parecido a una web, con texto y enlaces |
whatis | Muestra la descripción corta de un comando |
clear | borra la pantalla |
history | Muestra las últimas instrucciones ejecutadas |
pwd | Muestra el directorio actual de trabajo |
find | Busca un elemento del sistema de ficheros en función a nos criterios |
locate | Encontrar un fichero o directorio |
whereis | indica dónde está un programa |
chmod | cambia los permisos de un fichero o directorio |
chown | Cambia la propiedad de un fichero o directorio |
wget | Descargar el contenido de una URL en la red |
cat | Ver el contenido de un fichero de texto |
grep | muestra las lineas de un texto que cumpla con un patrón |
tail | muestra las últimas lineas de un texto |
head | muestra la primeras lineas de un texto |
sort | ordena texto |
more | Para la salida de texto cuando se llena la pantalla |
less | Igual que more, pero más pontente |
dpkg | administra paquetes en Debian y derivadas |
rpm | Administra paquetes en Red Hat y derivadas |
free | muestra información sobre la memoria (RAM y SWAP) |
df | Indica el tamaño usado y libre de los discos |
du | Calcula el tamaño ocupado por un fichero o directorio |
lsblk | Lista información sobre los dispositivos de bloques |
fdisk | Administra particiones de disco |
top | Información de los procesos en ejecucuión |
ps | listado de procesos en ejecución |
kill | Enviar señales a un proceso (terminar, matar, pausar, etc.) |
mount | Montar un sistema de ficheros |
umount | Desmontar un sistema de ficheros |
uname | Información del sistema: nombre, versión kernel, etc.. |
uptime | tiempo encendido y carga del sistema |
poweroff | apaga el sistema |
reboot | rinicia |
id | muestra información de un usuario |
ping | Indica si un ordenador está accesible en la red |
nano | editor de texto fácil de usar |
tar | comprime y descomprime ficheros y directorios |
ssh | Permite ejecutar instrucciones en otro ordenador |
who | muestra usuarios conectados al sistema |
passwd | cambia la contraseña de acceso |
sudo | Ejecuta una instrucción con más privilegios |
su | Permite identificarte como otro usuario |