Linux-CheatSheet
Estructura de directorios:
| Path | Contenido | 
|---|---|
| / | Raíz del sistema. | 
| /bin | Binarios del usuario. | 
| /boot | Archivos para el arranque del sistema. | 
| /dev | Dispositivos de almacenamiento conectados. | 
| /etc | Archivos de configuración de los paquetes. | 
| /home | Directorio personal del usuario. | 
| /lib | Librerías esenciales y módulos del kernel. | 
| /media | Punto de montaje para almacenamiento externo. | 
| /mnt | Punto de montaje para almacenamiento interno. | 
| /proc | Archivos y procesos del sistema actuales. | 
| /root | Similar a /home del usuario root. | 
| /sbin | Binarios del usuario root. | 
| /srv | Directorio para servicios del sistema (Por ej: FTP) | 
| /tmp | Almacenamiento de archivos temporales. | 
| /usr | Archivos de solo lectura de las aplicaciones. | 
| /var | Archivos de info del sistema (Por ej: Logs) | 
Comandos básicos de Linux:
| Comando | Ejemplo | Descripción | 
|---|---|---|
| ls | ls /DIRECTORIO | Listar los archivos y directorios. | 
ls -la | Listar archivos ocultos. | |
-l | Formato de lista. | |
-r | Orden inverso. | |
-R | Recursivo. | |
-S | Ordenar por tamaño. | |
| cd | cd /DIRECTORIO | Change directory. Cambiar de directorio. | 
cd .. | Volver un directorio hacía atrás. | |
cd | Directorio home del usuario. | |
| pwd | pwd | Ver directorio actual de trabajo. | 
| mkdir | mkdir CARPETA_1 | Crear un directorio. | 
| rm | rm ARCHIVO.txt | Eliminar archivos o directorios. | 
rm -rf /DIRECTORIO | Elimina la carpeta con todo el contenido. | |
| cp | cp ARCHIVO.txt /DIRECTORIO_DESTINO | Permite copiar un archivo. | 
| mv | mv ARCHIVO.txt /home/video.mkv | Mover o cambiar el nombre de un archivo. | 
| touch | touch DOCUMENTO.txt | Crea un archivo vacío o actualiza fecha de acceso. | 
| cat | cat DOCUMENTO.txt | Muestra contenido de un archivo. | 
| grep | grep "patrón" ARCHIVO.txt | Busca patrones de texto en archivos. | 
| head | head ARCHIVO | Muestra las primeras 10 líneas de un archivo. | 
head -n 5 ARCHIVO | Muestras las primeras 5 líneas. | |
| tail | tail ARCHIVO | Muestra las últimas 10 líneas de un archivo. | 
tail -n 5 ARCHIVO | Muestra las últimas 5 líneas. | |
| wc | wc ARCHIVO.txt | Contar palabras, líneas, caracteres y más. | 
wc -l ARCHIVO.txt | Contar líneas. | |
wc -w ARCHIVO.txt | Contar palabras. | |
wc -c ARCHIVO.txt | Contar caracteres. | |
| sort | sort ARCHIVO | Ordena. | 
| uniq | uniq ARCHIVO | Detectar líneas duplicadas. | 
uniq -d ARCHIVO | Muestra solo las líneas duplicadas. | |
| diff | diff ARCHIVO1 ARCHIVO2 | Compara dos archivos. | 
diff -q ARCHIVO1 ARCHIVO2 | Ver solamente si difieren. | |
diff -u ARCHIVO1 ARCHIVO2 | Ver las diferencias. | |
| awk | awk ‘{pint $1}’ | Extraer la primera columna. | 
| sed | sed 's/gato/perro/g' | Cambiar palabras. | 
| tr | tr ‘.’ ‘-’ | Sustituir el punto por un guión. | 
| > | ls -l /usr/bin 2> /dev/null | Redirigir stderr al /dev/null | 
Gestión de Usuarios, Permisos y Propietarios:
| Comando | Ejemplo | Descripción | 
|---|---|---|
| useradd | useradd -m -s /bin/bash USUARIO | Añadir un usuario, crear el home y asignarle un terminal. | 
| passwd | passwd USUARIO | Cambiar contraseña del usuario. | 
| usermod | usermod -aG GRUPO USUARIO | Añadir al usuario Y al grupo X. | 
| userdel | userdel -r USUARIO | Eliminar un usuario y su carpeta personal. | 
| gpasswd | gpasswd -d USUARIO GRUPO | Eliminar a un usuario de un grupo | 
| chmod | chmod 755 ARCHIVO | Cambia los permisos de archivos o directorios. | 
chmod -x ARCHIVO | Asigna permiso de ejecución al archivo. | 
| chown   | chown USUARIO:GRUPO ARCHIVO     | Cambia el propietario de archivos o directorios.           |
Monitoreo y Gestión de Procesos:
| Comando | Ejemplo | Descripción | 
|---|---|---|
| ps | ps aux | Muestra información sobre los procesos en ejecución. | 
| top | top | Muestra información en tiempo real sobre el uso de recursos. | 
| jobs | ||
| bg | ||
| fg | ||
| kill | ||
| killall | 
Gestión de Espacio en Disco:
| Comando | Ejemplo | Descripción | 
|---|---|---|
| fdisk | fdisk -l | Listar los discos físicos. | 
| df | df -h | Muestra el espacio en disco utilizado y disponible en particiones. | 
| du | du -sh DIRECTORIO | Muestra el uso del espacio en disco de directorios y archivos. | 
Compresión y Archivos:
| Comando | Ejemplo | Descripción | 
|---|---|---|
| tar | tar -czvf archivo.tar.gz DIRECTORIO | Crea o extrae archivos comprimidos en formato tar. | 
| find | find /ruta -name "archivo.txt" | Busca archivos o directorios en el sistema de archivos. | 
find /var/www -name '*.css' | Buscar todos los archivos que tienen extensión .css de la carpeta /var/www/ | |
| mount | mount -t tipo ruta_unidad ruta_destino | Montar sistema de archivos. | 
mount -t ntfs /dev/sdb2 /media/win/ | ||
sudo mount -t iso9660 /Ruta_ISO | Montar un ISO. | |
sudo mount /Ruta_USB /Ruta_destino | Montar USB. | |
| umount | umount ruta_unidad | Desmontar sistema de archivos. | 
umount /dev/sdb2 | 
Red y Conexiones Remotas:
| Comando | Ejemplo | Descripción | 
|---|---|---|
| ssh | ssh usuario@hostname | Inicia una sesión segura de shell remoto. | 
ssh -p 20 usuario@IP | Conectar por otro puerto. | |
ssh -L puerto_local:Host_remoto:puerto_remoto usuario@IP | Crear un túnel SSH local. | |
| ssh-keygen | ssh-keygen -t rsa -b bits | Crear claves. | 
| ssh-copy-id | Copiar claves en el servidor SSH para modo desatendido. | |
| scp | scp user@remotehost.com:/remote/path/to/foobar.md /local/dest | Copy local file to remote dir | 
scp foobar.md user@remotehost.com:/remote/dest | Key files can be used (just like ssh) | |
scp -i my_key.pem foobar.md user@remotehost.com:/remote/dest | Transferir archivos con SSH. | |
| openssh-server | sudo apt-get install openssh-server | Instalar servidor SSH. | 
| Editar el archivo /etc/ssh/sshd_config | ||
| wget | wget URL | Descarga archivos desde la web a través de la línea de comandos. | 
| netstat | netstat -ntlp # open TCP sockets | Ver las diferentes conexiones de red. | 
netstat -nulp # open UDP sockets | Ver conexiones UDP. | |
netstat -nxlp # open Unix sockets | 
Comandos de Sistema:
| Comando | Ejemplo | Descripción | 
|---|---|---|
| uname | uname -a | Muestra información sobre el sistema operativo. | 
| date | date | Muestra la fecha y hora actual. | 
| uptime | uptime | Muestra el tiempo de actividad del sistema. | 
| who | who | Muestra quién está conectado al sistema. | 
| dmesg | dmesg | Muestra registros del kernel. | 
| hostname | hostname | Nombre del equipo. | 
hostname -I | IP del equipo. | |
| lsb_release | lsb_release -a | Detectar versión y distribución de Linux. | 
cat /etc/issue | Igual que el anterior. | |
| alias | alias install='sudo apt-get -y install’ | Permite crear un alias para los comandos. Poder ejecutar un comando largo con uno mas corto. | 
| locate | locate archivo | Localizar un archivo en el sistema. | 
| lshw | grep cpu | Ver configuración de hardware del sistema. | 
Servicios del sistema:
| Comando | Ejemplo | Descripción | 
|---|---|---|
| systemctl | systemctl start SERVICIO | Gestionar servicios del sistema. | 
systemctl enable SERVICIO | Activar el servicio al arrancar el sistema. | |
systemctl disable SERVICIO | Desactivar servicio al arrancar el sistema. | 
Gestores de paquetes:
| Comando | Ejemplo | Descripción | 
|---|---|---|
| apt | apt-get update | Actualizar lista de repositorios. | 
apt-get upgrade | Actualizar dependencias. | |
apt-get dist-upgrade | Actualizar distribución. | |
apt-get --purge remove paquete | Desinstalar paquete y sus archivos. | |
apt-get autoremove | Eliminar dependencias innecesarias. | |
apt show cron | Mostrar info de un paquete. | |
apt list --installed | Mostrar paquetes instalados. | |
| dpkg | sudo dpgk -i paquete.deb | Instalar paquete .DEB | 
| yum | yum install PAQUETE [-y] | Instalar paquete. | 
yum check-update | Verificar actualizaciones disponibles. | |
yum update | Actualizar todos los paquetes. | |
yum upgrade PAQUETE | Actualizar un paquete específico. | |
yum remove PAQUETE | Desinstalar un paquete. | |
yum autoremove | Eliminar paquetes huérfanos. | 
Redes y Conectividad:
| Comando | Ejemplo | Descripción | 
|---|---|---|
| ifconfig | ifconfig | Muestra información de las interfaces de red. | 
| ping | ping ejemplo.com | Prueba la conectividad con un host remoto. | 
| netstat | netstat -tuln | Muestra información sobre puertos de red abiertos. | 
| traceroute | traceroute ejemplo.com | Rastrea la ruta de paquetes hacia un host remoto. | 
| ssh-keygen | ssh-keygen -t rsa | Genera pares de claves SSH para autenticación segura. | 
| ip | ip a | Ver parámetros de red. | 
GPG:
| Ejemplo | Descripción | 
|---|---|
gpg --gen-key | Generar claves. | 
gpg --keyserver pgp.mit.edu --send-keys NNNNNNNN | Exportar claves al servidor. | 
gpg --keyserver pgp.mit.edu --recv-keys NNNNNN | Descargar claves del servidor. | 
gpg --list-keys | Listar anillo de claves. | 
Bash:
| Comando Bash | Ejemplo | Descripción | 
|---|---|---|
| echo | echo "Hola, mundo" | Imprime texto en la pantalla. | 
| $(ls) | $(ls) | Ejecutar comandos a nivel de sistema. | 
| variables | nombre="Juan"; edad=30 | Declaración y asignación de variables. | 
| if…else | bash if [ condición ]; then comando; else otro_comando; fi | Estructura condicional. | 
| for loop | bash for i in {1..5}; do echo $i; done | Bucle que itera a través de elementos. | 
| while loop | bash while [ condición ]; do comando; done | Bucle que se ejecuta mientras se cumple una condición. | 
| funciones | bash function saludo() { echo "Hola, $1"; }; saludo "Juan" | Declaración y uso de funciones. | 
| read | bash read -p "Ingresa un valor: " valor; echo "Ingresaste: $valor" | Lee la entrada del usuario. | 
| case | bash case $opcion in 1) echo "Opción 1";; 2) echo "Opción 2";; *) echo "Opción no válida";; esac | Estructura de selección múltiple. | 
| arreglos (arrays) | bash colores=("rojo" "verde" "azul"); echo ${colores[0]} | Declaración y uso de arreglos. | 
| grep | grep "patrón" archivo | Busca patrones de texto en archivos. | 
| sed | sed 's/antiguo/nuevo/g' archivo | Edita y transforma texto en archivos. | 
| awk | awk '{print $1}' archivo | Procesa y formatea texto en archivos. | 
| pipes | comando1 | comando2 | |
| redirección | comando > archivo.txt | Redirige la salida estándar a un archivo. | 
| condicional ternario | bash edad=20; resultado=$((edad >= 18 ? "Mayor de edad" : "Menor de edad")) | Operador ternario para condicionales. | 
SSH
El archivo de configuración se encuentra en /etc/ssh/sshd_config.
Recargar el servicio después de configurar con systemctl reload sshd para aplicar los cambios.
| Parámetro | Opción | Descripción | 
|---|---|---|
PermitRootLogin | no | No permite conexiones root. | 
yes | Permite conexiones root. | |
without-password | ||
AllowUsers | user1 user2 | Permite al usuario1 y usuario2. | 
DenyUsers | user1 user2 | Deniega solo a los usuario1 y usuario2. | 
AllowGroups | group1 group2 | Permite a los usuarios de los grupos 1 y 2. | 
DenyGroups | group1 group2 | Deniega todos los usuarios salvo a los de los grupos 1 y 2. | 
Crontab
Usamos crontab -e para configurar las tareas de Cron. The locations are as follows:
/var/spool/cron/usernameuser specific/etc/crontabsystem wide crontab
Formato de las tareas:
.---------------- minutos (0 - 59 | */5 [cada 5 minutos])
|  .------------- horas (0 - 23)
|  |  .---------- día del mes (1 - 31)
|  |  |  .------- mes (1 - 12) OR jan,feb,mar,apr ...
|  |  |  |  .---- día de la semana (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,etc
|  |  |  |  |
*  *  *  *  * user-name  comando a ejecutar
| Comando | Descripción | 
|---|---|
systemctl status crond.service | Comprobar el estado del servicio | 
crontab -l | |
crontab -e | |
crontab -e -u username | |
crontab -r | 
Carpetas de scripts
Los scripts que se encuentren en uno de los siguientes directorios se ejecutarán en el intervalo especificado por el nombre del directorio:
/etc/cron.hourly/etc/cron.daily/etc/cron.weekly/etc/cron.monthly
Permitir / Denegar uso
Añadir nombres de usuario, uno por línea a los siguientes archivos:
/etc/cron.allowWhitelist/etc/cron.denyBlacklist
Logs
La ejecución de cronjobs se registra en /var/log/cron.
Los resultados se envían al correo de los usuarios /var/spool/mail/username.
Samba
Server
Archivo de configuración situado en /etc/samba/smb.conf.
Las cuentas locales deben registrarse en Samba mediante smbpasswd.
yum install samba samba-client samba-common # Samba installation
systemctl start smb                         # Start service
systemctl enable smb                        # Start service on system start
vi /etc/samba/smb.conf                      # Change config
testparm                                    # Check if config is ok
systemctl restart smb                       # Reload config
smbpasswd -a username                       # Register user with samba
Ejemplo de /etc/samba/smb.conf:
[global]
  workgroup = WORKGROUP             # workgroup of smb server
  netbios name = centos             # name of smb server
  security = user                   # security mode (user / ads / domain)
  unix password sync = yes          # sync unix password with smb password
  invalid user = root bin daemon    # deny access globally (config in share section overrides this)
[Transfer]                        # name of share
  path = /transfer                  # path of directory to be shared
  comment = File transfer           # description
  read only = no                    # access permissions
  guest ok = no                     # allow guest access (no password)
  browsable = yes                   # visible or hidden?
  valid users = username @groupname # allow user/group to access the share
La sección especial [homes] comparte automáticamente el directorio personal del usuario bajo las siguientes condiciones:
- Un usuario intenta acceder a un recurso compartido con el nombre de su cuenta de usuario
 - No existe una sección explícita para este recurso compartido en 
smb.conf. - La cuenta de usuario existe en 
/etc/passwd. 
La opción browsable tiene un significado diferente en esta sección y especifica si la parte personal debe ser listada. La opción habitual browsable se hereda de la sección [global].
Se pueden utilizar variables para cambiar la ruta, por ejemplo:
%Unombre de usuario actual%Hdirectorio personal del usuario actual
Ejemplo:
[homes]
  browsable = no
  writable = yes
  path = %H/smb
Client
yum install samba-client cifs-utils                       # Install client and tools
smbclient -L //server                                     # Show SMB shares
mkdir /targetdir                                          # Create mountpoint
mount.cifs -o username=jenkins //server/james /mountpoint # Mount manually
umount.cifs /mountpoint                                   # Unmount manually
vi /etc/fstab                                             # Mount on system start
vi /root/cifs/.username                                   # Create credential file
mount -a                                                  # Test fstab
init 0                                                    # Auto mount
FTP
El archivo de configuración se encuentra en /etc/vsftpd/vsftpd.conf
Ejemplo:
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=NO
listen_ipv6=YES
pam_service_name=vsftpd
tcp_wrappers=YES
use_localtime=YES
dirlist_enable=YES
pasv_enable=YES
pasv_min_port=41361
pasv_max_port=65534
pasv_address=192.168.1.10
apt install vsftpd          # Instalación
systemctl start vsftpd      # Iniciar servicio
systemctl enable vsftpd     # Iniciar servicio al arrancar
nano /etc/vsftp/vsftpd.conf # Cambiar configuración
systemctl restart vsftpd    # Reiniciar servicio
MySQL Server
yum install mariadb-server  # Instalar servidor
systemctl start mariadb     # Iniciar servicio
systemctl enable mariadb    # Iniciar servicio al arrancar
mysql_secure_installation   # Run security wizard
mysql -u root -p            # Conectar con MySQL