Page cover

Terminal shell y comandos de Linux

La shell es la herramienta básica del administrador de sistemas para el acceso y el manejo del sistema operativo, es un programa que sirve como interfaz para acceder a los recursos y servicios del SO y es la parte que envuelve el kernel.

Manejo de ordenes

Actualmente las shells mas comunes son bash y zsh en sistemas Unix.

Para trabajar con shell de linux obviamente requerirás de una máquina virtual linux con una distro de Debian, Ubuntu u otra pero también se puede instalar en una maquina Windows.

Para hacerlo es tan sencillo como:

  1. Ves a la Microsoft store y busca "ubuntu"

  2. Inicia el servicio, aparecerá un error con mwsl, ahora lo resolvemos.

  3. Inicia windows powershell en modo administrador.

  4. Escribe y ejecuta la siguiente orden: Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux

  5. Reinicia el equipo y vuelve a iniciar el servicio de ubuntu, ya debería funcionar!

Aqui tienes el manual de Linux:

ls

Sin opciones ni argumentos, ls muestra una lista en orden alfabético de los nombres de todos los archivos en el directorio de trabajo actual.

/etc
$ ls 

cd

Otros de los comandos más útiles en Linux es el comando cd o de cambio de directorio.

Cuando pones "cd" a secas, vuelves a la raiz.

$ cd [OPTIONS] directory-name

cp

Copiar archivos y carpetas es uno de los elementos básicos de cualquier sistema operativo y la mayoría de los usuarios lo hacen a diario.

$ cp [Origen] [Destino]

curl

Es una abreviatura de «Client URL». Los comandos de Curl están diseñados para funcionar como una forma de verificar la conectividad a las URL y como una gran herramienta para transferir datos.

  • -O guardará el archivo en el directorio de trabajo actual con el mismo nombre de archivo que el remoto.

  • -o permite especificar un nombre de archivo o ubicación diferente.

Ejemplo de uso:
$ curl -O http://testdomain.com/testfile.tar.gz

touch

Este comando se usa para crear cualquier tipo nuevo de archivo en sistemas Linux.

$ touch file_name

mkdir

Este comando permite a los usuarios crear directorios (carpetas). Posibilita la creación de varios directorios a la vez, así como establecer los permisos para los directorios.

$ mkdir <dirname>  

mv

Utiliza este comando para mover archivos y/o directorios de un directorio a otro o para renombrar un archivo o directorio.

$ mv <archive> <dirname>

chown

Permite cambiar el propietario del archivo o directorio. También se puede usar para cambiar la propiedad del grupo para el archivo o directorio.

$ chown user filename(s)bas

find

Este comando te ayuda a encontrar archivos en directorios

$ find <directory_path> <search_parameter>

tar

Este comando se utiliza para crear y extraer archivos de almacenamiento. Los indicadores «-cf» y «-xf» se usan para crear y extraer archivos.

tar [options] [archive-file] [file or directory to be archived]

Si quieres practicar algunos de estos comandos puedes usar https://webvm.io/ , una pagina web que ejecuta una maquina virtual Linux en tu navegador. Si quieres saber más tienes su repositorio.

Hoja de referencia de comandos de Linux

Aquí tienes una tabla de referencia para acceder a muchos más comandos de los que te he mostrado de manera rápida y fácil:

COMANDO
USO

man

Mostrar la información de ayuda para el comando especificado.

touch

Crear cualquier tipo nuevo de archivo en sistemas Linux.

cat

Concatenar archivos, combinarlos y escribir contenidos de archivos.

cd

Navegar por todos nuestros directorios en nuestro sistema.

ls

Enumerar el contenido del directorio, archivos y otros directorios anidados.

vim

Editor de texto de terminal gratuito y de código abierto.

sed

Buscar u reemplazar de forma masiva.

tar

Crear y extraer archivos de almacenamiento.

pwd

Localizar la ruta del directorio de trabajo en el que te encuentras.

mkdir

Crear directorios (carpetas).

find

Buscar archivos y directorios según sus permisos, tipo, fecha, propiedad, tamaño y más.

rm

Eliminar archivos y directorios.

diff

Comparar dos archivos línea por línea y mostrar la diferencia entre ellos.

chown

Cambiar el propietario del archivo o directorio.

uniq

Detectar las líneas duplicadas adyacentes y eliminar las líneas duplicadas.

wget

Descargar archivos de Internet.

top

Mostrar los procesos en ejecución las tareas administradas.

grep

Filtrar el contenido de un archivo para facilitar nuestra búsqueda

df

Mostrar la cantidad de espacio libre en disco disponible.

kill

Cerrar una proceso que no finaliza para terminarlo de manera manual.

ping

Solucionar problemas y diagnosticar problemas de conectividad de red

ldd

Conocer las dependencias de objetos compartidos de un archivo ejecutable.

lsof

Enumerar información sobre los archivos que están abiertos.

objdump

Desensamblar archivos de objetos o archivos ejecutables.

shutdown

Detener el sistema de forma segura.

BONUS: cowsay 🐄🐮

Hay un paquete de software llamado "cowsay" que se puede instalar con el mismo sudo apt install y genera un gracioso dibujo ASCII en el que te permite poner animales mandando mensajes, por ejemplo en el inicio de sesión:

cowsay "hello world"
cowthink "hello world!"
#Para listar los dibujos ASCII
cowsay -l
Stimpy se alegra de estar en tu servidor!

Para modificar el inicio de sesión para que inicies un terminal con un mensaje sigue estos comandos:

#Edita el archivo de inicio de sesión /home/nombre-de-usuario/.bashrc
#Recuerda que los archivos con un . estan ocultos, miralo con ls -a y edítalo
sudo nano /home/nombre-de-usuario/.bashrc

#Añade el codigo de arriba al final del documento, por ejemplo:
cowsay -f tux "¡Buenos dias!"

Tienes más aplicaciones chorras en el siguiente enlace.

Comandos de consulta en Shell

Existen programas que nos ayudan a hacernos la vida más fácil en cuanto a recordar comandos o ayudarnos a saber que hacen, el más común es el manual de man pero hay más, vemos algunos:

- Manual - man

Comando por antonomasia para mostrar la documentación de un comando.

Por ejemplo, man mkdir para ver toda la información del comando mkdir.

También podemos poner man -k make para ver todos aquellos comandos o ejemplos que coinciden con esa palabra "make".

Búsqueda hacia adelante dentro de una página man: /palabra

Búsqueda hacia atrás dentro de una página man: ?palabra

Búsqueda de información de un parámetro: man comando | grep "parámetro"

Búsqueda de información de un parámetro abriendo less: man comando | less +/parámetro

Ubicación de la página más de un comando: man -w comando

- Bropages

Herramienta que no viene por defecto que te permite ver ejemplos de uso de los diferentes comandos.

Esto es tanto un buscador de página web, aquí lo teneis como una herramienta que se integra en la shell.

Para instalarlo requeriremos las dependencias del lenguaje ruby pero es tan sencillo como:

sudo apt get install ruby ruby-unf ruby-dev
sudo gem install bropages

Ahora para usarlo es tan sencillo como usar:

bro find

Lo cual te cargara los diferentes ejemplos, para salir pulsa "q".

- Manly

La otra herramientas útil es la extensión manly para el terminal que es una versión de terminal de explainshell, una web que te explica lo que hacen los comandos.

Básicamente es una extensión del comando man que te permite no solo ver lo que hace un comando sino también sus parámetros.

sudo apt-get install python-pip
pip install manly --user

Reinicia la sesión del shell para que funcionen los cambios y ya puedes probarlo:

manly dpkg -i -R #Que hace el siguiente comando?
Resultado del comando

Para más información sobre aplicaciones útiles de Linux puedes consultar mi página.

Modificación del prompt

Como sabes, en sistemas basados en Linux, el prompt (o shell prompt) es el texto que aparece en la terminal indicando que está lista para recibir comandos. Por ejemplo, cuando abres la terminal, deberías ver algo así:

usuario@equipo:~$ 

Esto es un texto que es modificable a nivel de sistema y se hace modificando la variable de entorno PS1. Por ejemplo, el que viene por defecto se representa como:

PS1='\u@\h:\w\$ '
#Puedes verlo con echo $PS1

Lo que hay tras la barra vertical es un tipo de variable, algunos códigos útiles para PS1 son:

  • \$ → muestra # si eres root o $ si eres usuario normal

  • \u → usuario

  • \h → hostname

  • \w → directorio actual

  • \d → fecha

  • \t → hora

  • \n → salto de línea

  • \[\e[COLORm\]...\[\e[0m\] → colorear texto

Si quieres que el cambio sea permanente, puedes editar el archivo ~/.bashrc o ~/.zshrc. Sabiendo esto puede ser interesante modificarlo para que muestre un texto personalizado, primero de todo, ten en cuenta de no cambiar nada original del archivo .bashrc sino puede ser irrecuperable, teniendo esto en cuenta solo añadiremos cosas en el .bashrc:

#Al final de todo:
#Esto mostraré el shell siempre con un mensaje de figlet pero solo funcionara un comando a la vez.
PROMPT_COMMAND='clear; figlet "$(whoami)"; echo'
PS1='\u@\h:\w\$ '

#Este mostrara un shell típico pero colorido, cambialos numeros 30 para modificar el color a gusto
PS1='\[\e[1;34m\]\u\[\e[0m\]@\[\e[1;32m\]\h\[\e[0m\]:\[\e[33m\]\w\[\e[0m\]\$ '

#Prompt con ip local
PS1='\u@\h [\[\e[32m\]$(hostname -I | awk "{print \$1}")\[\e[0m\]]:\w\$ '

#Prompt con fecha
PS1='[\[\e[36m\]\d \t\[\e[0m\]] \u@\h:\w\$ '

Estos son algunos ejemplos de personalización de prompt, elige y configura el que te interese más, incluso por usuario.

Adicionalmente, en entornos como Ubuntu server, el prompt se muestra en blanco y negro, para cambiarlo entra al archivo .bashrc y descomenta la linea que indica #force_color_prompt=yes

Te dejo más información en un pdf de chuleta:

Última actualización