1. Comandos más importantes para la interfaz de línea de comandos (CLI)

1.1 Operaciones con usuarios

  • sudo [comando]: ejecuta el comando como superusuario, requiere que el usuario tenga permisos para hacer sudo
  • sudo su: cambia de usuario a superusuario.
  • sudo -u [usuario] [comando]: ejecuta el comando como otro usuario.
  • su [usuario]: cambia de usuario.
  • sudo useradd usuario -g grupo -G otrosgrupos: añade un usuario.
  • sudo adduser: añade un usuario, de forma más fácil, incluye directorio propio.
  • sudo adduser usuario grupo: añade un usuario existente a un grupo existente.
  • sudo userdel: elimina un usuario.
  • sudo deluser
  • sudo deluser usuario grupo: quita a un usuario de un grupo.
  • sudo usermod -aG [grupo] [usuario]: también añade un usuario a un grupo.
  • passwd: cambia la contraseña del usuario que lo ejecuta.
  • sudo passwd -u usuario
  • sudo groupadd: añade un grupo.
  • sudo groupmod: modifica un grupo.
  • sudo groupdel: elimina un grupo.
  • visudo: ejecutar como usuario root, permite dar privilegios a grupos.
  • EJEMPLO AÑADIR USUARIO CON ACCESO SSH Y CLAVE:
    • Es preferible que se tenga acceso ssh sin llave, al menos temporalmente, para simplificar el proceso
      sudo adduser ricardo #responder a las preguntas sudo su ricardo cd ~ mkdir .ssh chmod 700 .ssh cd .ssh touch authorized_keys chmod 600 authorized_keys ssh-keygen -t rsa #responder a las preguntas
    • Pega el contenido de la clave pública en authorized_keys.
    • Puede modificarse sshd_config para que no se pueda acceder con contraseñas, pero hay que tener en cuenta que todos los usuarios que vayan a acceder tengan clave privada.
    • Mueve la clave privada fuera de .ssh, puede ser necesario cambiar el propietario del archivo si se va a descargar el archivo con otro usuario.
    • Entra por SFTP y descarga la llave privada.
  • PERMITIR QUE EL USUARIO PUEDA HACER SUDO
    • (OPC. 1)
      sudo su #si no estás en usuario root visudo %gruponuevousuario ALL=(ALL) ALL # también se puede añadir solo el usuario # y no el grupo, en ese caso no se usa '%' # sudo sin contraseña: %grupo ALL=(ALL) NOPASSWD: ALL
    • al ejecutar una orden sudo, se pide la contraseña del usuario, NO la del root.
    • Si un grupo no está en visudo, puede pasar a root con "su root"
    • (OPC. 2)
    • adduser ricardo sudo #desde root

1.2. Operaciones con discos

  • lsblk: muestra una lista de los discos y particiones con su tamaño.
  • sudo fdisk <direccion_disco>: para añadir particiones, etc. Una vez ejecutado, elige una de estas opciones:.
    • n: crea una nueva particion.
    • d: borra una partición.
    • p: muestra la tabla de particiones.
    • w: guarda los cambios y sale.
    • q: salir sin guardar las modificaciones.
  • sudo mkfs.ext3 <direccion_particion>: para formatear particiones en ext3.
  • sudo mount /dev/direccionpart /media/disco: para montar discos, sudo fdisk -l para conocer la dirección del disco, crear antes la carpeta /media/disco.
  • sudo mount -o loop,ro VBoxGuestAdditions_4.3.8.iso /media/VboxGuestAdditions: montar un archivo, “loop” para indicar que es un archivo [mount puede activar "loop" automáticamente al detectar que es un archivo], “ro” para montar en modo “solo lectura”.
  • sudo umount /media/cdrom: desmonta discos, se introduce la dirección en la que se ha montado.
  • growpart /dev/sda 1: extiende una partición para ocupar todo el espacio libre del disco.
  • resize2fs /dev/sda1
  • fsck /dev/sda1: comprueba el disco.
  • EJEMPLO AÑADIR DISCO EN BLANCO:
    • lsblk: para ver el codigo "sd" del disco, en este ejemplo es "sdb".
    • sudo fdisk /dev/sdb
    • n: nueva particion.
    • w: guarda cambios y sale.
    • sudo mkfs.ext3 /dev/sdb1: para formatear en ext3, pueden usarse otros formatos.
    • sudo mkdir /media/nuevo
    • sudo mount /dev/sdb1 /media/nuevo
  • EJEMPLO AÑADIR PARTICIÓN SWAP
    • Crear partición con un Live USB de Gparted: tipo linux-swap, tamaño de la RAM)
    • Una vez reiniciado, editar /etc/fstab y añadir la partición con el UUID (todo en una misma línea, al final o donde aparezca el swap):
      UUID=5d96d2f6-3eb0-4563-b9f6-8415cfb0a02d              none            swap    sw              0       0
    • sudo swapon --all
    • Reinicia (sudo reboot now)

1.3. Variables de entorno

  • Las variables de entorno (environment variables) más comunes son:
    • $HOME: indica la carpeta de inicio del usuario.
    • $PATH: indica las carpetas donde se encuentran los programas. Al ejecutar un comando sin indicar toda la ruta, el sistema busca en los directorios de $PATH el comando en cuestión.
    • $PWD: indica la ruta actual.

1.4. Otros comandos

  • ls: muestra los archivos y carpetas del directorio actual.
  • ls [directorio]: lo mismo con el directorio indicado.
  • cd [directorio]: cambia el directorio actual por el indicado.
  • cd ..: cambia al directorio de nivel superior, ‘cd ../../’ para ir subiendo niveles.
  • chmod [código acceso por propietario/grupo/resto] [archivo]: cambia los permisos de acceso del propietario del archivo, del grupo o el acceso para el resto de usuarios, en este orden, suele ejecutarse como superusuario. Puede hacerse mediante un código numérico o con letras:
    • Números:
    • leer = 4
    • escribir = 2
    • ejecutar = 1: para carpetas o scripts.
    • Por ejemplo, para permitirlo todo para el propietario y el grupo y solo la lectura para el resto (un archivo no ejecutable): sudo chmod 664 archivo
    • Letras:
    • Propietario = u
    • Grupo = g
    • Otros = o
    • Lectura = r
    • Escritura = w
    • Ejecución = x
    • Id de grupo = s hace que los archivos de una carpeta pertenezcan al grupo al que pertenece la carpeta.
    • Añadir un permiso = +
    • Quitar un permiso = -
    • Ejemplo: permiso de lectura y escritura para propietario = u+rw
  • sudo chown [-R] usuario[:grupo] archivo/carpeta: cambia el propietario y/o el grupo del archivo/carpeta, -R para que sea recursivo.
    sudo chown -R :www-data /var/www/
  • sudo chgrp [-R] grupo archivo/carpeta: cambia el grupo.
  • find . -type d -exec chmod 755 {} \;: busca archivos (no carpetas) y ejecuta el comando (en este caso un cambio en los permisos).
  • find . -type f -exec chmod 644 {} \;: busca carpetas y ejecuta el comando.
  • kill [ID proceso]: mata procesos por id.
  • pkill [nombre proceso]: mata procesos por su nombre.
  • find [ruta] [-name, -iname,...] [palabra a buscar]: busca archivos, -iname para insensible a mayúsculas.
  • grep [palabra a buscar]
  • [comando] | [salida]: permite ejecutar un comando usando como salida otro comando, por ejemplo: top | grep apache2.
  • [comando] > [archivo]: escribe la salida de un comando en un archivo (lo crea automáticamente y lo sobreescribe si ya existía).
  • [comando] >> [archivo]: añade la salida del comando a un archivo, sin sobreescribirlo.
  • less: permite formatear la salida de un comando. Útil para salidas con muchas líneas.
  • crontab -l: lista scripts programados
  • crontab -e: permite incluir scripts que se ejecutarán periódicamente
    • (dentro del archivo): <min> <hora> <día del mes> <mes> <día de la semana> [comando]
    • *: cualquier valor
    • Ejemplo: * * * * * free -h >> archivo.txt ejecuta cada minuto de cada día el comando
  • head -n 5 [archivo]: muestra las 5 primeras líneas de un archivo.
  • tail -n 5 [archivo]: muestra las 5 últimas líneas de un archivo.
  • wc [opciones] [archivo]: cuenta bytes, líneas, caracteres o palabras de un archivo.
    • -l: cuenta líneas.
  • du [ruta]: informa sobre el uso del disco.
    du -ah /sdcard/Download/ |sort -n |head -n 10
  • df [-h] [-B 1M]: muestra el espacio ocupado por los discos y particiones montadas.
  • ln [-s] archivoorigen archivodestino: crea enlaces con archivos, -s para enlace simbólico, ejecutar con las rutas completas.
  • cp [-rv] [ruta/origen] [ruta/destino]: copia el archivo, ‘-r’ para hacerlo de forma recursiva: directorios.)
  • rsync -a -v -e "ssh -i <<llave>> -p <<puerto>>" /var/www/coleccion root@255.255.255.255:~
    • Sincroniza dos directorios comparando fechas y tamaño de los archivos.
    • Opción -a es un atajo para que la sincronización sea recursiva, mantenga permisos, usuarios, grupos y fechas, y otras opciones.
    • Opción -e sirve para especificar la forma de conectarse al servidor, en este caso por SSH con llave privada.
    • Opción -v para que muestre el proceso.
    • Para mantener propiedad de los archivos, ejecuta con sudo
    • Opción --exclude <<patrón>>
      • *.mp4
      • 'directorio'
      • La ruta siempre es relativa.
      • Admite varios --exclude.
      • --exclude-from admite archivos de texto con los patrones.
      • rsync -a --include '/' --exclude '' . ../final/
  • dd bs=<bytes por bloque> status=<progress, none, noxfer> if=<origen> of=<destino> count=<número bloques>
    • copia archivos o discos.
      dd if=/dev/zero of=/sdcard/Download/test bs=10M count=10
  • mv [-r] [ruta/origen] [ruta/destino]: mueve el archivo, ‘-r’ para hacerlo de forma recursiva: directorios.)
  • rm [-r] [archivo]: borra el archivo; para hacerlo de forma recursiva: con directorios. usar la opción ‘-r’)
  • touch [archivo]: crea el archivo indicado.
  • truncate -s 25m nombre_archivo: crea archivos con un tamaño específico, en este caso de 25 megas.
  • mkdir [-p] [directorio]: crea un directorio, “-p” crea los directorios padre si no existen.
  • sudo apt update: UBUNTU/DEBIAN, permite actualizar los repositorios de aplicaciones, para saber si existen actualizaciones.
  • sudo apt upgrade: UBUNTU/DEBIAN, para actualizar las aplicaciones.
  • apt search: UBUNTU/DEBIAN, para buscar aplicaciones en los repositorios.
  • sudo add-apt-repository [ppa:repositorio]: para añadir repositorios, ejecuta después un “update”.
  • sudo apt install: UBUNTU/DEBIAN, para instalar aplicaciones desde repositorios.
  • sudo apt remove: UBUNTU/DEBIAN, para desinstalar aplicaciones.
  • sudo apt autoremove: UBUNTU/DEBIAN, para desinstalar aplicaciones complementos de otras que ya no se necesitan.
  • yum [install, update, upgrade, list,…]: CENTOS, instalador de paquetes desde repositorios.
  • apk [add, update, upgrade,...]: Alpine Linux, instalador de paquetes desde repositorios.
  • snap find <<busqueda>>: busca paquetes snap, que permiten instalar aplicaciones de una manera simple.
  • snap install <<paquete>>
  • snap remove <<paquete>>
  • snap list: enumera los snaps instalados.
  • tar -x[v][z]f [archivo]: descomprimir un archivo .tar, si es tar.gz usar la opción ‘z’.
  • unxz archivo.xz: descomprime archivos .xz.
  • unzip archivo.zip: se necesita el programa “zip” o “unzip”.
  • sudo dpkg -i [archivo]: UBUNTU/DEBIAN, para instalar archivos .deb.
  • sudo dpkg -r [aplicación]: UBUNTU/DEBIAN, para desinstalar una aplicación instalada con ‘dpkg’.
  • sudo dpkg -P [aplicación]: purgado de una aplicación desinstalada.
  • sudo dpkg --get-se lections: muestra una lista de las aplicaciones instaladas.
  • sudo dpkg-reconfigure locales: configuración de idioma y teclado.
  • sudo dpkg-reconfigure tzdata: configuración de la zona horaria.
  • sudo apt-get -f install: para cuando "dpkg" pide instalar dependencias.
  • Evitar que se bloquee al bajar la pantalla del portátil
    • sudo vim /etc/systemd/logind.conf
    • HandleLidSwitch=ignore
  • Activar/Desactivar Secure Boot:
    • Activar: sudo mokutil --enable-validation
    • Desactivar: sudo mokutil --disable-validation
  • Root con GUI
    xhost si:localuser:root
  • Existen varios sistemas de escritorios: GNOME, KDE,…), al instalar un programa, tener en cuenta que sistema está instalado: GNOME→gtk, KDE→ qt)
  • wine [ejecutable Windows]: emulador de programas para Windows.
  • php -S localhost:8000: inicia un servidor web en el puerto 8000.
  • wget [-O <<nombre_salida>>] direcciondescarga: para descargar archivos de Internet.
  • man [comando]: manual para un determinado comando.
  • ifconfig: para conocer la ip interna.
  • top: muestra el gestor de tareas.
  • sudo ufw enable: activa el firewall con los valores por defecto.
  • sudo iptables: es la base del programa ufw, limita o permite el acceso al servidor a determinadas IP.
    • (añadir regla) sudo iptables -A INPUT -s 65.55.44.100 -j DROP
    • (quitar regla) sudo iptables -D INPUT -s 65.55.44.100 -j DROP
    • (añadir regla por puerto) sudo iptables -A INPUT -s 65.55.44.100 -p tcp --destination-port 25 -j DROP
    • (lista reglas) sudo iptables --list
  • sudo ufw allow 22/tcp
  • sudo ufw status numbered
  • sudo ufw disable
  • curl [opciones] [URL]: es una herramienta para transferir datos desde o hacia un servidor usando alguno de los protocolos soportados.
    • curl whatismyip.akamai.com: muestra la IP externa.
    • curl -u usuario:pass --output video.mp4 www.ejemplo.com/video.mp4
    • curl --referer http://ejemplo.com/ -O http://test.com/video.mp4
  • time read: ejecuta un cronómetro que se puede para con ctrl-d.
  • awk -F ':' '{print $1, $6}' [archivo]AWK es un lenguaje de programación para procesamiento de textos. En este caso awk separa el texto de un archivo en columnas según el separador : y muestra las columnas 1 y 6.
  • diff [opciones] archivos: compara archivos línea por línea.
  • sort [opciones] [archivos]: ordena líneas de archivos de texto o comandos.
    • sort -nr -t$'t' -k3 elec.txt |head -n 1: ordena un archivo con texto separado por tabulaciones de forma numérica descendiente según la columna 3, y muestra el primer valor.
  • sort [archivo] | uniq: ordena las líneas de un archivo y no muestra las repetidas.
  • sed 's/palabra/reemplazo/g' archivo > archivo1sed manipula un archivo de texto línea a línea. En este caso, busca y reemplaza "palabra" por "reemplazo" todas las veces que aparezca (/g). Después copia el resultado al "archivo1" (si se pasa al mismo archivo no funciona).
    • sed 's/t/;/g example.txt > example2.csv': cambia tabulaciones por ";".
  • cut -d ':' -f1 [archivo]: de forma similar a awkcut divide un texto en columnas y selecciona la columna 1.
  • gs -sDEVICE=pdfwrite -sOutputFile=output.pdf -dColorImageResolution=90 input.pdf
  • nmap [-v] [-sn] [-Pn] 192.168.1-50: comprueba los puertos abiertos de una o varias direcciones IP. “-sn” sólo comprueba si el “host” o dirección está activo, “-Pn” comprueba puertos cuando el “host” aparece como desconectado aunque no lo esté, “-v” muestra todo el proceso hasta llegar al resultado.
  • dig any ejemplo.com
  • whois ejemplo.com
  • zerofree -v /dev/particion: sobreescribe el espacio libre con ceros, requiere que el disco no esté montado. Si es el disco del sistema, iniciar en ‘recovery mode’ con acceso root.
  • sudo systemctl [start|stop|reload|disable|enable] servicio
  • sudo systemctl reload-failed: para cuando se borran servicios con el comando "rm".
    • Los servicios pueden encontrarse en la ruta/etc/systemd/system/servicio y en /etc/init.d/servicio
  • s2disk: instalando el programa uswsusp, permite hibernar el sistema, requiere de tener suficiente swap.
  • nice -n [-20 a 19] <<comando>>: modifica la prioridad de cpu del comando, cuánto más alto menos prioridad.