Recursos para la comunidad
Este es un tutorial que contiene lo básico necesario para usar la interfaz de línea de comandos de los servidores de la UBMI
Esta no es una guía exahustiva de uso de línea de comandos y hay muchas omisiones intencionales en cuanto a las opciones y uso de los programas, pero hemos recopilado aquí lo que nos parece es un buen punto de partida para hacer mas agradable el uso de la terminal de GNU/Linux
Además de los comandos elementales incluimos herramientas web para monitorear el estado del equipo hacia el final del documento. ___
[ ]
se encuentran los argumentos que deben ser sustituidos por el usuario.$
indicando que es texto en una terminal, pero este no es necesario copiarlo o escribirlo para reproducir los ejemplos.$ programa -l -h -t -r
ó como:
$ programa -lhtr
la excepción a esta regla ocurre cuando alguna de las opciones requiere un argumento adicional por el usuario, en el ejemplo anterior supongamos una opción -n que recibe un nombre, entonces se ejecutaría:
$ programa -lhtr -n [nombre]
-h
ó --help
se puede obtener información, adicionalmente se puede utilizar los comandos man
$ man [nombre del programa del que se quiere saber su uso]
ó tldr
$ tldr [programa]
-h
y opciones de mas de una letra cómo --help
estas últimas las distinguimos por que tienen dos guiones en vez de uno, y a diferencia de las opciones de una letra estas no pueden ‘aplilarse’ como en el punto 4 de esta lista, pero pueden usarse juntas en combinación con otras opciones de una o mas letras.En GNU/Linux podemos usar carácteres comodín para realizar operaciones mas fácilmente, evitando escribir grandes porciones de texto, existen muchos tipos de comodín pero los que se utilizan con mas frecuencia son:
Comodín | Uso |
---|---|
* | Representa cualquier caractér, cualquier número de veces, por ejemplo $ rm *txt borraría todos los archivos cuyo nombre termine en “txt”, $ ls *fotos* enumeraría los archivos y directorios que contengan la palabra “fotos” |
? | Representa cualquier caractér una sola vez, en una carpeta con archivos llamados: “perros”, “gatos” “ratos” “platos” la operación $ ls ?atos nos devolvería: gatos ratos pero no “platos” |
~ | Un atajo que hace referencia a la carpeta “home” del usuario que la escribe, permite sustituir por ejemplo: $ cd /home/miusuario/Documentos por $ cd ~/Documentos |
.. | Otro atajo que hacer referencia a la carpeta anterior en el arbol de directorios; $ cd .. evita que tengamos que escribir la dirección completa si solo queremos regresar un nivel y puede usarse en sucesión para regresar varios niveles: $ cd ../../.. |
. | Un atajo que representa el directorio actual |
\ | Este caracter suele ser leido por la computadora como una señal para no interpretar literalmente el caractér siguiente, pudiendo ignorarlo o ejecutarlo según el contexto en que se use, por ejemplo la combinación \t puede significar el caractér “tabulación” mientras que \n indica un salto de linea |
Existen varias teclas y combinaciones que nos facilitan la vida en la línea de comandos dentro de las más utiles están:
Nota: La tecla Ctrl también suele ser representada como ^ en algunas documentaciones y archivos de ayuda
Tecla(s) | Función |
---|---|
Tab | Habilita el autocompletado al escribir comandos y paths (casi siempre) |
Ctrl+ c | Interrumpe la ejecucion de un programa |
Ctrl+ z | Manda a segundo plano la ejecución del programa, no debe confundirse con terminar el programa, es el equivalente de minimizar una pantalla |
fg | Escribir $ fg en la línea de comando revierte el efecto de Ctrl+z |
Ctrl+a Ctrl+e | Nos llevan al inicio y al final de una linea de texto respectivamente |
Teclas arriba y abajo | Permiten navegar entre los últimos comandos utilizados |
Ctrl+r | Nos permite buscar entre los comandos usados recientemente tecleando una fracción del mismo |
> | Permite escribir en un archivo de texto lo que de otra forma se representaría en pantalla como resultado de la ejecución de un programa, por ejemplo $ ls > archivos.txt creará un archivo dónde escribirá el resultado de la operación $ ls utilizar de nuevo $ otro_comando > archivos.txt sobreescribirá el archivo, mientras que: $ otro_comando >> archivos.txt agregará el resultado del programa “otro_comando” al final del archivo “archivos.txt” |
| |
El caracter pipe nos permite dar el resultado de un programa a otro programa por ejemplo: $ ls -l | wc -l primero ejecutará “ls -l” para listar los archivos de una carpeta y el texto resultante en vez de ponerlo en pantalla se lo dará al programa “wc -l” que sirve para contar líneas de texto y este imprimirá en pantalla un número que representará el numero de renglones de la primera operación, que en este caso se traduce en el número de archivos de la carpeta actual. |
Existen muchos comandos en GNU/Linux, aquí están los mas útiles para comenzar con lo que (creemos) son las mejores opciones para su uso.
Comando | Descripción |
---|---|
cd [/path/objetivo] |
Cambia de directorio a la dirección especificada |
cd .. |
Nos devuelve un nivel en el arbol de directorios |
cd - |
Nos regresa a la carpeta anterior en la que estábamos |
ls |
Enlista los contenidos de la carpeta actual |
ls [/path/objetivo/] |
Enlista los contenidos de la carpeta indicada |
ls -1 |
ls en forma de lista |
ls -lh |
ls en forma de lista detallada y en formato mas legible |
ls -a |
ls enlistando también archivos ocultos |
ls * |
ls recursivo sobre los directorios de la carpeta actual |
tree |
Funciona como un ls * pero con la recursividad se extiende hasta que no haya mas archivos que enlistar |
tree -lh |
Funciona como tree pero muestra el tamaño del contenido |
tree -fi |
Cambia el formato de “arbol” default por uno con el path completo de los archivos enlistados |
tree -fi | grep [parte del nombre de un archivo] |
Permite buscar un archivo con parte del nombre y regresa el path completo |
find [path/objetivo] -name [parte del nombre de un archivo |
Igual que el anterior |
pwd |
Nos dice en que directorio nos encontramos actualmente con un path absoluto |
history |
enlista los últimos n comandos que hemos utilizado (n varía en cada equipo) |
history | grep [parte de un comando] |
Nos permite buscar entre los últimos comandos usando una fracción del deseado, es mejor usar simplemente Ctrl+r |
tldr [nombre de un comando] |
Ayuda simplificada de uso de muchos comandos |
man [nombre de un comando] |
Ayuda en extenso de uso de muchos comandos |
Comando | Descripción | |
---|---|---|
mv [archivo] [/path/a/otra/ubicación] |
Mueve un archivo o carpeta de la carpeta actual a otro sitio | |
mv [/path/a/un/archivo] [/path/a/otra/ubicación/] |
Mueve un archivo en otra carpeta diferente a la actual de un lugar a otro | |
mv [archivo] [otro nombre] |
renombra un archivo de la carpeta actual, si la carpeta de origen es igual que la de destino y el nombre es distinto: mv renombra los archivos simplemente | |
rm [archivo(s)] |
Elimina los archivos permanentemente NO hay vuelta atrás | |
rm -rf [directorio] |
Elimina un directorio y todo su contenido recursivamente | |
touch [archivo(s)] |
Crea archivos vacios en la carpeta actual | |
mkdir [directorio(s)] |
Crea directorios vacios en la carpeta actual | |
rmdir [directorio(s)] |
Elimina directorios vacios | |
grep "[patrón]" [archivo de texto] |
Devuelve las lineas que contienen un patron de texto en un archivo | |
grep "[patrón]" [archivo de texto] -i |
Devuelve las lineas que contienen un patron de texto en un archivo ignorando mayúsculas y minúsculas | |
grep "[patrón]" [archivo de texto] -v |
Devuelve las lineas que NO contienen un patron de texto en un archivo | |
cualquierComando | grep "[patrón]" |
Busca el patrón en el resultado de la ejecución de otro programa | |
cat [archivo] |
Muestra en pantalla el contenido de cualquier archivo de texto | |
zcat [archivo_comprimido] |
Muestra en pantalla el contenido de cualquier archivo de texto que esté comprimido | |
less [archivo] |
Muestra en pantalla el contenido de un archivo pero permite desplazarse interactivamente y búsqueda | |
less -S [archivo] |
Opción que mejora el aspecto cuando hay lineas muy largas en un archivo con formato tabular | |
wc [archivo] |
permite conocer el numero de lineas, palabras y caracteres (en ese orden) las opciones -l , -w y -m devuelven únicamente las líneas, palabras y carateres respectivamente |
|
head [archivo] --lines [número] |
Muestra las primeras lineas , especificadas en --lines en pantalla de archivos de texto |
|
tail [archivo] --lines [número] |
Muestra las últimas lineas , especificadas en --lines en pantalla de archivos de texto |
|
cut -f [número de columna] -d "[caractér delimitador]" [nombre de archivo] |
Enlista una columna de un archivo de texto siempre que las columnas estén separadas por un caracter en común típicamente “,” “.” “ “(espacio) | |
sort [nombre de archivo] |
Regresa una versión del archivo de entrada donde cada linea ha sido ordenada alfabéticamente | |
uniq [nombre del archivo] |
Regresa una versión dónde se han eliminado las líneas repetidas (dejando sólo una de ellas) El archivo debe estar ordenado alfabeticamente para usar uniq por ello es recomendable usar la síntaxis sort [nombre del archivo] | uniq |
|
nano [nombre de archivo existente o por crear] |
Editor de texto para modificar archivos las opciones son interactivas y se presentan en la parte de abajo de la pantalla, la tecla Ctrl está representado con el caractér “^” en el menú |
Comando | Descripción |
---|---|
tar czf [nombre_del_archivo_comprimido].tar.gz --directory=[path/al/directorio] |
Comprime y archiva un directorio, si no se utiliza la opción --directory se pueden especificar uno o mas archivos para realizar la misma operación |
tar xvf [nombre_del_archivo_comprimido].tar.gz |
Descomprime un archivo en la carpeta actual |
gzip [archivo para comprimir] |
Comprime un archivo |
gzip -d [archivo para descomprimir] |
Descomprime un archivo en la carpeta actual |
zip -r [archivo_a_crear_].zip [path/a/directorio] |
Comprime en formato zip recursivamente un directorio |
unzip [archivo_comprimido].zip |
Descomprime un archivo zip en la carpeta actual |
Comando | Descripción |
---|---|
ssh [usuario]@[dirección IP] |
Permite crear una sesión en una computadora remota a través de la línea de comandos |
ssh [usuario]@[dirección IP] -p [número de puerto] |
ssh especificando el puerto de red |
sshfs |
Monta una carpeta de un equipo en otro ,ver tutorial |
scp [archivo local] [usuario]@[dirección IP]:[/path/remoto/] |
Copia un archivo local en una computadora remota |
scp [usuario]@[dirección IP]:[/path/remoto/] [/path/local] |
Copia un archivo remoto en una carpeta local |
scp -P [número de puerto] [usuario]@[dirección IP]:[/path/remoto/] [/path/local] |
Copia un archivo remoto en una carpeta local especificando un puerto, nota que la P es mayúscula |
wget [dirección web] [carpeta local] |
Descarga un archivo desde la internet en la carpeta especificada |
nohup [comando con sus opciones] & |
Permite ‘dejar corriendo’ un programa sin riesgo de que se interrumpa por un fallo en la conexión |
byobu |
Un modo interactivo de ‘dejar corriendo programas’ una vez dentro: F2 crea pantallas nuevas, F3 y F4 permite navegar entre pantallas, F6 permite salir sin terminar los procesos $ exit en todas las pantallas es la manera de terminar con todos los procesos |
ip ad |
permite conocer la(s) dirección(es) IP del equipo, por lo general aparecen después de la palabra inet |
exit |
Termina la sesión local o remota y todos los procesos asociados |
Comando | Descripción |
---|---|
du -h [/path/objetivo] |
Despliega el tamaño de todos los archivos y carpetas a partir del path objetivo |
du -sh [path/objetivo] |
Despliega sólo el total del tamaño que ocupa el path objetivo y su contenido |
df -h |
Informa sobre el uso de los discos duros las carpetas críticas en el caso de la UBMI son las identificadas como “/” y “/home” |
free -h |
Informa sobre el uso de RAM actual |
nvidia-smi |
En algunos equipos (workstations) informa del estado de las tarjetas gráficas |
kill -9 [ID del proceso] |
Para terminar un proceso, se necesita el PID (ver mas abajo) |
ps ux |
Enlista los procesos y PID del usuario que lo ejecuta |
ps aux |
Enlista todos los procesos y PID en el equipo |
top |
Visualización interactiva de procesos, uso de memoria y CPU |
htop |
Visualización interactiva ligeramente menos fea de procesos, uso de memoria y CPU |
btop |
Visualización interactiva significativamente menos fea de procesos |
Para clonar un repositiorio de github y sus contenidos utilizamos el comando
$ git clone [dirección web del repositorio]
Nota que la dirección que se usa es ligeramente distinta a la de la página web para encontrar la dirección correcta; en la página de github del repositorio vamos a la pestaña que dice ‘Code’ y seleccionamos ‘HTTPS’ ahí desplegará la dirección correcta para utilizar con git clone.
Algo a lo que nos enfrentaremos tarde o temprano es con archivos cuyo nombre contiene espacios, algo que no suele ser problemático en las interfaces gráficas actuales pero complica su uso en la línea de comandos.
Consideremos un ejemplo con el siguiente archivo …
Si ejecutamos el comando $ ls
en su carpeta contenedora aparecerá entre comillas sencillas el nombre
user@UBMI02:~/Downloads/tempdir$ ls
'documento muestra.otp'
y si intentamos por ejemplo borrarlo nos encontraremos con esto:
user@UBMI02:~/Downloads/tempdir$ rm documento muestra.otp
rm: cannot remove 'documento': No such file or directory
rm: cannot remove 'muestra.otp': No such file or directory
El intérprete de Bash cree que estamos queriendo eliminar dos archivos, que además, no existen. Para solucionarlo podemos utilizar las siguientes estrategias.
a) utilizar las comillas sencillas
user@UBMI02:~/Downloads/tempdir$ rm 'documento muestra.otp'
b) utilizar el caractér de escape
user@UBMI02:~/Downloads/tempdir$ rm documento\ muestra.otp
Sin duda la mejor manera de no tener que lidiar con este problema es no incluir espacios en los nombres de los archivos. ;) __
Créditos imágen de navaja suiza modificada de https://es.vectorhq.com/vector/swiss-army-knife-clip-art-528213