
Hace más de 4 años me fleché por GNU/Linux, los nombres Fedora y Ubuntu simplemente me cautivaron. La idea de una cantidad innumerable de aplicaciones gratuitas era demasiado atractiva. Desde ese día soy usuario diario; de hecho, mi ruta profesional marcó un giro brutal. Ahora comparto la filosofía de software libre. Pero dejemos los rodeos y vayamos al punto y coma:
1.su
Privilegios absolutos, control total del sistema. Debido a que «un gran superpoder conlleva una gran responsabilidad», el comando 2 es muy práctico.
2.sudo useradd nombreusuario
Podemos crear varios usuarios de esta manera. En caso de querer agregar usuarios al grupo de usuarios sudo (administradores), utilizamos el siguiente comando:
3.usermod -aG sudo nombreusuario
Para cambiar la contraseña del usuario utilizamos:
passwd
Realizados estos pasos básicos, es momento para actualizar el sistema. Dependiendo de la distribución, o más puntualmente, del gestor de paquetes (apt, yum, pacman), este comando puede variar. En sistemas Debian y derivados, apt es el gestor predeterminado.
5. sudo apt update
6. sudo apt upgrade
7. sudo apt autoremove
Estos tres comandos pueden ser ejecutados en conjunto, utlizando && entre ellos. Tambien se puede agregar -y para no tener que hacerlo durante el proceso.
El comando 8 es mi favorito; nos permite instalar todo tipo de programas en Linux:
8. sudo apt install nombreprograma
El siguiente comando quizás tendría que haber sido el primero, ya que nos permite crear un USB bootable con cualquier imagen de Linux. Lo que nos permitirá instalar y transportar Linux fácilmente.
9. sudo dd bs=4M if=***.iso of=/dev/sdb status=progress
Ojo con el comando anterior, ya que hay que navegar a la carpeta donde se encuentra la imagen a quemar y conocer el sitio donde ha sido montado el USB.
Para navegar a las carpetas utilizamos un formato tipo:
10. cd /carpeta/a/navegar
Si no sabemos los nombres de las carpetas disponibles, podemos usar la tecla TAB para arrojar las posibilidades. Para regresar a la carpeta anterior utilizamos:
11. cd ..
Si queremos saber dónde está un dispositivo USB, el disco duro y sus particiones:
12. sudo fdisk -l
Con lo cual podemos montar la unidad que nos interese con:
13. sudo mount -rw /dev/sd* /carpeta
Para crear una carpeta nueva en nuestra ubicación:
14. sudo mkdir nombrecarpeta
Crear un archivo vacío:
15. touch nombrearchivo
Crear un archivo con un texto corto:
16. echo "Texto corto" > nombrearchivo
El signo > nos permite asignar un nombre al archivo, si utilizamos >> agregamos el texto sin reemplazar el archivo.
Para echar un ojo a un archivo corto:
17. cat nombrearchivo
Con el editor nano podemos ver y editar archivos más grandes:
18. nano nombrearchivo
Utilizando Ctrl-X guardamos los cambios.
Para copiar archivos de un sitio a otro:
19. cp carpeta/archivo carpeta/
Si nos encontramos en la carpeta destino, podemos simplemente agregar un punto (.) y el archivo se creará en nuestra ubicación. Esta técnica puede usarse para renombrar archivos, por ejemplo:
20. cp archivo nuevoarchivo .
Para mover archivos seguimos el mismo razonamiento que al copiar. Mientras que si es una carpeta debemos agregar -r.
21. mv -r carpeta/ /carpeta/destino
Si agregamos asterisco (*) luego de carpeta, moveremos todos archivos pero no la carpeta como tal.
Para eliminar archivos y carpetas:
22. rm nombrearchivo
23. rm -r /carpeta
Un comando que tendría que haber nombrado antes:
24. ls
Permite ver el contenido de la carpeta donde nos ubicamos.
Uno que se le parece, y permite saber que tenemos conectado a los puertos USB:
25. lsusb
Hemos sobrepasado el primer cuarto de la lista; ahora las cosas empezarán a ponerse más interesantes.
26. ss
Simple pero hermoso, nos permite ver las conexiones de nuestro equipo, una herramienta defensiva importante a considerar. Puede ser acompañado de -l para listar los sockets que están escuchando.
27. ss -l
Ya que nos hemos adentrado al networking, necesitamos nombrar a nmap. Estoy seguro que ya sabes cómo instalarlo. Este programa nos permite ver los puertos abiertos de una red, información importante para establecer comunicación entre computadoras. Para ver los puertos de la computadora que utilizamos:
28. nmap localhost
Para evaluar la red local entera:
29. nmap 192.168.1.1/24
Si creemos que puede haber dispositivos que quieran escapar de nuestro mapeo podemos agregar -Pn para una búsqueda más exhaustiva, -p para decir el puerto de interés, e incluso -open para listar solamente los puertos abiertos.
30. nmap -Pn 192.168.1.1/24 -p22 -open
Si modificamos la IP por nuestra IP pública y nos conectamos desde una red externa, podremos auditar la seguridad de nuestra red. Es lo primero que haría alguien que intente penetrar ilegalmente en nuestra red.
31. nmap -Pn **IP**/24
Nota del autor: Debemos ser sumamente cautelosos y NO utilizar este comando con IPs públicas que NO se nos ha pedido auditar.
El siguiente comando es otro de mis más queridos:
32. ssh [email protected]
33. ssh-keygen
34. ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]
En un tutorial previo comparto mis experiencias al conocer este gran programa. Se puede instalar como un servidor y acceder remotamente, lo que permite programar a distancia. Con la opción -X, incluso podemos usar la interfaz gráfica de usuario.
Las Raspberry Pi son una manera genial de entender la potencia de un servidor SSH; tendremos acceso entero a una computadora sin usar periféricos. En este otro post explico con más detalle. SSH puede también utilizarse con el usuario, dominio y puerto a conectar. Se puede compartir archivos entre computadoras fácilmente con:
35. scp nombrearchivo [email protected]:~
Hablemos de algunos comandos que nos permiten hacer minería de datos. Estos comandos son muy útiles cuando la data es muy grande y la memoria RAM impide que los utilicemos en Python, R o Matlab.
36. wc -l nombrearchivo
El comando anterior nos permite ver el número de líneas o filas que tiene un archivo. Para acceder a las primeras y últimas filas:
37. head nombrearchivo
38. tail nombrearchivo
Podemos acompañar estos comandos con -100 para ver 100 filas, o el número que determinemos.
Si el archivo es demasiado grande, podemos separarlo en varias partes, por ejemplo, cinco:
39. split -n l/5 nombrearchivo x
Para seleccionar la quinta columna, utilizamos:
40. awk '{print $5}' nombrearchivo
También podemos separar en columnas en función de un caracter, por ejemplo, dos puntos (:)
41. cut -d ':' -f1 nombrearchivo
Ahora, me gustaría nombrar algunos programas que permiten extraer data de la web. Primero, wget, para descargar archivos desde la terminal, por ejemplo, instalador de RStudio para Debian 10 y Ubuntu 19.
42. wget https://download1.rstudio.org/desktop/bionic/amd64/rstudio-1.2.5001-amd64.deb
Pero no todo es programación; también necesitamos música para programar. Con youtube-dl bajamos nuestros vídeos favoritos para acceder a ellos sin conexión a internet.
43. youtube-dl ***youtubelink***
Con el programa VLC, podemos escuchar y controlar la música desde la línea de comandos.
44. cvlc **musica**
Con tanta música y vídeos, es importante ver el estado de almacenamiento de los discos: DF es la solución.
45. df
Otra manera de intentar programas y código en línea es con GIT, el gestor de control de versiones más famoso. Para descargar un repositorio:
46. git clone https://github.com/progamandoconro/Docker
Para actualizar el repositorio local a partir de GitHub:
47. git pull origin master
Los commits y los push también pueden realizarse de esta manera o directamente en GitHub.
48. git push -u origin master
Scripts de Bash, Python o R, pueden ejecutarse fácilmente desde la línea de comandos:
49. sudo bash archivo.sh
50. sudo python archivo.py
51. sudo Rscript archivo.R
Ya cerca de la mitad de este post, volvamos a algunos comando sencillos pero importantes que olvidé nombrar:
49. clear
Seguramente el comando más importante para quienes aman el orden y la pulcritud.
Los procesos del sistema pueden mostrarse con:
50. top
51. htop
52. ps -ef | less
El signo | nos permite concatenar comandos (pipes).
Si te molestan las cookies y la publicidad, o te obligan a loguearte para acceder a la información que deseas, puedes usar el programa ELinks, por ejemplo, para acceder a Medium sin usar Facebook ni Google:
53. elinks https://medium.com/learn-love-code/how-to-set-up-your-professional-data-science-environment-6df74eb06aa4
Muchas veces queremos controlar la accesibilidad de los archivos y carpetas de nuestro sistema, por ejemplo, dar todo tipo de acceso a un archivo:
54. sudo chmod a+rwx nombrearchivo
O para que sólo root pueda acceder a ellos:
55. sudo chmod 700 nombrearchivo
Ahora, es momento de agregar comandos Docker a mi lista. Docker permite ejecutar fácilmente y simultáneamente, gran cantidad de servicios y programas, sin preocuparnos de problemas de compatibilidad entre ellos. Además de ser una manera cómoda de compartir aplicaciones y realizar experimentación con aplicaciones en desarrollo. Para instalarlo, revisa mi git.
56. docker run -it ubuntu
De esta manera, tenemos un contenedor virtual corriendo Ubuntu en menos de un minuto.
57. docker ps -a
58. docker images
Podemos listar los servicios e imágenes que tenemos.
Creando un archivo llamado Dockerfile, podemos generar instrucciones personalizadas. Por ejemplo, este Dockerfile para instalar librerías Machine Learning en R y Python sobre un sistema Debian. Para crear la imagen:
59. docker build .
Podemos agregar -t seguido de un nombre para guardar nuestra imagen.
Con Docker-Compose, podemos hacer instalaciones más complejas, como de WordPress, en cuestión de minutos también. Ver el archivo docker-compose-yml para tal fin.
60.docker-compose -f docker-compose.yml up
También podemos instalar Apache con php en segundos, ver link.
Tor, para navegar de manera anónima. Simplemente descárgalo (https://www.torproject.org/dist/torbrowser/8.5.4/tor-browser-linux64-8.5.4_en-US.tar.xz) y
61. tar -xvJf tor-browser-linux64-8.5.4_en-US.tar.xz
tar nos ha descomprimido el archivo; ahora ejecuta en la carpeta donde se encuentre Tor:
62. ./tor-browser_en-US/Browser/start-tor-browser &
Sea lo que sea que hayamos hecho en Tor, si el ocio ataca, es momento para juegos en la terminal:
63. apt-get install bastet moon-buggy ninvaders nsnake pacman4console -y
Con Neofetch podemos ver detalles de nuestro sistema de manera divertida.
64. neofetch

65. figlet HOLA AMIGO

66. unzip archivo.zip
El comando de arriba habla por sí mismo.
67. dpkg -i archivo.deb && apt install -f
Este comando facilita la instalación de aplicaciones .deb. También es posible usar GDebi.
Los siguientes comandos utilizan systemctl para controlar servicios del sistema.
68. systemctl enable nombreservicio
69. systemctl start nombreservicio
70. systemctl stop nombreservicio
71. systemctl disable nombreservicio
En este punto, me gustaría nombrar a mi tercer favorito:
72. ifconfig
73. ip address
Sin estos comandos la vida sería más dificil; no sé cómo he tardado tanto en nombrarlos.
74. kill idproceso
75. userdel nombreusuario
Con top ubicamos el proceso. Userdel permite eliminar usuario de un grupo, por ejemplo, del grupo sudo.
Para ver características del sistema:
76. lshw
77. lscpu
Si abrimos nuestro servidor al internet, es muy útil tener la capacidad de bloquear IPs que deseen entrar sin nuestro consentimiento.
78. iptables -A INPUT -s $IPbloquear -j DROP
Si tienes microprocesadores como el ESP32 o Arduino conectado a tu USB por conexión serial, ubicarlo es sencillo con:
79. dmesg | grep ttyUSB
Una vez hecho esto, podemos usar rshell y repl para acceder a el.
80. rshell -p /dev/ttyUSB* && repl
Para interactuar con el dispositivo, podemos usar:
81. ampy --port /dev/ttyUSB** ls
82. ampy --port /dev/ttyUSB** put archivo
83. ampy --port /dev/ttyUSB** run archivo
84. ampy --port /dev/ttyUSB** rm archivo
Para saber el nombre del host.
85. hostname
Para cambiar el nombre de la computadora:
86. hostnamectl set-hostname nuevonombre
Para listar los archivos que tengan un patrón, por ejemplo, que terminen en .iso.
87. ls | grep *.iso
Para saber el número de archivos en una carpeta:
88. ls | wc -l
Desde que conocí Docker, ya no utilizo Anaconda. Sin embargo, es una manera práctica de gestionar ambientes de trabajo en R y Python. Para instalar Anaconda te dejo un post previo. Varios comandos son muy útiles:
89. conda create -n my_env python=3.7 anaconda
90. conda create -n r_env r-essentials r-base
Creados estos dos ambientes, podemos activar alguno con:
91. conda activate r_env
Y ver las sesiones creadas con:
92. conda info --envs
Para instalar módulos de Python, por ejemplo, face_recognition, utilizamos conda o pip:
93. conda install face_recognition
94. pip install face_recognition
Puedes revisar un post previo sobre reconocimiento facial en Linux.
Algunos módulos requieren de python 3 para funcionar y su instalación se realiza mediante pip3, por ejemplo, el famoso módulo Pyspark.
95. pip3 install --user pyspark
El próximo comando te hará sentir en la matrix.
96. cmatrix

Ha sido un viaje interesante tratar de representar los 99 comandos que más me gusta utilizar en Linux. Para terminar, unos sencillos pero fundamentales.
97. reboot
98. shutdown -h +30
99. poweroff -f
Corresponden a: reiniciar, apagar en 30 minutos y apagar inmediatamente.
El comando 100 lo dejo a tu recomendación. ¿Cuál me faltó?
Espero que este post haya sido de tu agrado. Muchas gracias por leerlo. ¡Hasta pronto!