LO BASICO

Las primeras tomas de contacto con Linux son un poco confusas. Al principio, no sabes muy bien donde estás porque estamos acostumbrados a entornos gráficos. Contratas un servidor web, llegas a la terminal, pantalla en negro, ¿y ahora qué?

En la terminal, lo primero que vemos es una línea que empieza con lo que se llama el "prompt" donde nos indica sobre que usuario estamos, el nombre del host y el directorio actual

pedro@tallerdeapps:~$

pedro es el nombre de usuario

tallerdeapps es el nombre del host

~ en linux, la tilde de la ñ o virgulilla representa el directorio /home/usuario

Por supuesto, si cambias de usuario o directorio, el prompt se actualizará al nuevo estado.

En este tutorial veremos algunos de los comandos básicos desde la terminal y comentararemos brevemente que hay en el árbol de directorios.

ARBOL DE DIRECTORIOS

La mayoría de Gnu/Linux siguen la norma FHS (del inglés, Filesystem Hierarchy Standard) para definir los directorios principales y sus contenidos. Aunque no sea utilizado en todas las distros, conocer la FHS ayuda a entender las otras porque las diferencias no suelen ser muy grandes. En Linux todos los archivos y directorios cuelgan del directorio raiz / Este es el directorio raíz o principal. Podemos ver el contenido con ls /
Con pequeñas diferencias, la estructura más común suele ser parecida a esta:

  • /bin Directorio de los binarios. Aquí se guardan los programas que emplea el sistema para labores administrativas desde el ámbito del usuriocomo los comandos ls, cp, su, echo, mv, rm, su, tar, etc.
  • /sbin Parecido a /bin pero con binarios que solo puede gestionar el usuario root con tareas administrativas tales como el arranque, restaurar el sistema, configuraciones de red, etc
  • /boot: Es el directorio de arranque, aquí va el kernel linux que se cargará durante el arranque y los archivos de configuración del gestor de arranque
  • /dev Es un directorio muy especial con ficheros que representan la memoria, particiones, discos, dispositivos de hardware, etc. En linux al contrario que en Windows todo son ficheros, las unidades son ficheros, las archivos y los directorios también son ficheros. Cualquier volumen lógico de almacenamiento aparecerá aquí.
  • /usr: Siglas de User System Resources. Almacena ficheros de solo lectura relativos a utilidades y paquetes instalados por el usuario. Aquí encontrarás a Docker, PHP, etc. Dentro hay como una «réplica» del árbol de directorios como si de un segundo nivel se tratase. Resulta curioso ver /usr/bin, /usr/lib, /usr/sbin, etc.
  • /etc Almacena los archivos de configuración del sistema y de paquetes y programas instalados.
  • /lib Contiene librerías del kernel y de los binarios del sistema de /bin y /sbin
  • /proc Directorio muy complejo. Por un lado presenta lista de directorios con los procesos activos numerados por su PID y dentro información para la ejecución de los procesos. Por otro lado también contiene unos archivos que dan información del sistema como memoria libre, uso de cpu,... Es de estos ficheros de donde extraen información algunas comandos de info del sistema con la ventaja de que la presentan en pantalla más ordenada.
  • /media Representa el punto de montaje de todos los volúmenes lógicos que se montan temporalmente, ya sean unidades externas USB, otras particiones de disco, etc.
  • /mnt Predecesor de /media. Se mantiene por razones históricas, suele estar vacío.
  • /home El directorio de los usuarios normales. Al crear un usuario aparecerá en home una carpeta con su nombre propiedad de ese usario
  • /root La carpeta personal del superusuario
  • /tmp Carpeta temporal de archivos del sistema y aplicaciones,...
  • /var Guarda información variable de varios tipos: correos, paginas web, backups, bases de datos, logs del sistema y las aplicaciones instaladas.
  • /run Contiene archivos relativos a procesos que se han ejecutado o que pueden estar en ejecución. En los sistemas actuales la carpeta /run está reemplazando al directorio/var/runque se empleaba en el pasado.
  • /opt El sitio de las aplicaciones de terceros. Si instalamos algún antivirus, chrome o paquetes muy grandes se guardarán aquí.
Saber que Linux tengo

Existen cientos de distribuciones de Linux. Simplificando mucho podemos decir que hay tres grandes árboles genealógicos principales y muchos otros más pequeños. Tenemos a Debian, que sería el origen de Ubuntu, Red Hat Linux para Fedora y Slackware para Suse Linux.

Cada árbol tiene sus particularidades para descargar e instalar paquetes y otras cuestiones. Por eso es muy importante conocer sobre que sistema estamos. Desde la terminal tenemos muchas maneras de conocer el sistema.

En Ubuntu suele estar instalado el comando lsb_release Con el parámetro -a mostrará toda la información posible.

pedro@tallerdeapps:~$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 18.04.6 LTS
Release: 18.04
Codename: bionic

Como este comando no es común para todos los Linux, un método que no suele fallar es leer unos archivos donde se encuentra la info del sistema. Estos archivos se encuentran dentro del directorio /dir y terminan con release. En el caso de Uuntu se trata de os-release y lsb-release. Podemos usar el comodín * para mostrarlos todos a la vez.

cat /etc/*release

pedro@tallerdeapps:/etc$ cat *-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=18.04
DISTRIB_CODENAME=bionic
DISTRIB_DESCRIPTION="Ubuntu 18.04.6 LTS"
NAME="Ubuntu"
VERSION="18.04.6 LTS (Bionic Beaver)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 18.04.6 LTS"
VERSION_ID="18.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=bionic
UBUNTU_CODENAME=bionic

Actualizar paquetes instalados con el gestor apt

Una operación rutinaria a realizar en el servidor es comprobar si hay actualizaciones de los paquetes instalados. Un paquete es tanto un programa instalado como una parte o servicio del sistema. Las distribuciones de GNU/Linux tienen un sistema denominado gestor o administrador de paquetes que permite instalar aplicaciones (llamados paquetes en linux) directamente desde la línea de comandos, sin tener que acceder a una página concreta, descargar archivos o ejecutarlos. Todo ello se hace de manera automática mediante el mencionado gestor. En distribuciones basadas en Debian (como Ubuntu) se llama apt (Advanced Packaging Tool).

Para comprobar si hay paquetes actualizables entramos:

sudo apt update

Si la respuesta es que hay paquetes para actulizar lo haremos con:

sudo apt-get upgrade

Si queremos instalar un paquete se usa la forma:

sudo apt install nombre_paquete

Para eliminar un paquete tenemos dos comandos siendo el más completo el segundo porque elimina los archivos de configuración.

#Desinstala el paquete indicado del sistema.
apt remove nombre_paquete
#Desinstala el paquete indicado y elimina sus archivos de configuración.
apt purge nombre_paquete

Listar y cambiar de directorio. Comandos cd, ls y pwd

Para movernos entre directorios tenemos el comando cd (change directory)

cd / #va al directorio raiz
cd .. #sube un directorio
cd ../ ../ #subir dos directorios
cd /home #va al directorio home desde el directorio raiz.
cd #sin parámetro va al directorio home/usuario_actual
cd ~ #caracter virguililla alt+126. Va al directorio home/usuario_actual.
cd directorio1/directorio2 #desde la ubicación actual va al directorio2

Cuando tecleamos la primera letra de un directorio, con el asistente Intellisence de la terminal escribirá por nosotros el resto de caracteres al pulsar la tecla TAB. Ejemplo, queremos ir a un directorio llamado basesdedatos que se encuentra en la raiz. En la terminal entramos:

cd /ba + tecla TAB #al pulsar TAB aparecerá escrito basesdedatos

Para saber en que directorio estamos se usa el comando pwd:

pedro@tallerdeapps:~$ pwd
/home/pedro

El comando para ver el contenido de los directorios es ls Tiene muchos parámetros. El más usado por mi es ls -l que muestra el contenido con los detalles de permisos de lectura/escritura/ejecución, el tamaño y la fecha de creación

pedro@tallerdeapps:~$ ls -l
total 28
drwxrwxr-x 2 pedro pedro 4096 Jan 7 12:54 apachedockerfile
-rw-r--r-- 1 root root 18617 Jan 3 16:00 get-docker.sh
drwxr-xr-x 3 pedro pedro 4096 Jan 7 20:05 nginxdockerfile
pedro@tallerdeapps:~$ ls
apachedockerfile get-docker.sh nginxdockerfile

Manual de comandos. Comando man

Los comandos de linux muchas veces tienen gran cantidad de parámetros opcionales. Para obtener una ayuda rápida de muchos de ellos se usa man seguido del comando del que queremos obtener ayuda. Si pruebas en la terminal por ejemplo:

pedro@tallerdeapps:~$ man ls

Esto mostrará en pantalla un largo documento de texto con todas las opciones que soporta ls

Incluso podemos hacer man man para consultar el manual de opciones de man.

Los manuales se encuentran en el el directorio /usr/share/man/man1/. Si tenemos curiosidad por localizar un manual en concreto usaremos man -w seguido del comando que buscamos.

pedro@tallerdeapps:~$ man -w ls
/usr/share/man/man1/ls.1.gz

Ver directorios en árbol. Comando tree

El comando tree muestra los directorios en forma de árbol. Aunque no suele venir por defecto está disponible en los repositorios oficiales. Para instalarlo en Ubuntu/Debian:

sudo apt install tree

Tiene muchos argumentos. Resumiendo mucho, los más habituales podrían ser:

tree # Sin parámetros. Muestra ficheros y directorios sin límite de profundidad
tree -L número # muestra ficheros y directorios hasta la profundidad indicada por número
tree -d # solo directorios
tree -a # directorios y todos los archivos incluyendo ocultos

Hay muchas más opciones. Para saber mas puedes encontrar ayuda con man tree o en la documentación oficial. Como ejemplo vamos a mirar el directorio raiz / de un VPS Ubuntu hasta la profundidad 1.

[root@tallerdeapps /]# cd /
[root@tallerdeapps /]# tree -L 1
.
|-- bin
|-- boot
|-- dev
|-- etc
|-- home
|-- lib
|-- lib64
|-- lost+found
|-- media
|-- mnt
|-- opt
|-- proc
|-- root
|-- run
|-- sbin
|-- srv
|-- sys
|-- tmp
|-- usermin-setup.out
|-- usr
|-- var
`-- webmin-setup.out

20 directories, 2 files

Comando echo

Comando clásico para la impresión de texto por pantalla. En Linux se utiliza para la creación de scripts y como atajo para crear archivos de texto. Algunos ejemplos:

pedro@tallerdeapps:~$ echo "hola mundo"
hola mundo
pedro@tallerdeapps:~$ echo -e "hola\n\tmundo" # con el parámetro -e reconoce caracteres de escape como saltos de línea, tabulador, salto de página,...
hola
    mundo
pedro@tallerdeapps:~$ echo "hola" > texto.txt #crea archivo con el texto hola
pedro@tallerdeapps:~$ echo "mundo" >> texto.txt #añade mundo al final del texto del archivo ya existente texto.txt

Concatenación de documentos. Comando cat

El comando cat es muy utilizado y de uso polivalente. Su nombre viene de concatenar. Lo podemos usar para ver archivos de texto, concatenar archivos o crear nuevos redirigiendo la salida con > de la misma forma que hemos visto con echo

cat texto.txt #muestra en pantalla el contenido del archivo

Vamos a crear unos archivos con texto con el comando echo que ya conocemos, los vamos a concatenar en otro archivo y por último, comprabar que todo ha salido bien.

pedro@tallerdeapps:~$ echo "abcde" > fichero1.txt
pedro@tallerdeapps:~$ echo "xyz" > fichero2.txt
pedro@tallerdeapps:~$ cat fichero1.txt fichero2.txt > destino.txt #concatenación de archivos en un tercero
pedro@tallerdeapps:~$ cat destino.txt #mostrar en pantalla el archivo concatenado
abcde
xyz

Crear y borrar directorios. Comandos mkdir y rmdir

Para la creación de directorios se usa mkdir

mkdir nombre_directorio #Crea un directorio con ese nombre

Para borrar directorio se usa el comando rmdir. Es necesario que esté vacío para poder eliminarlo o dará un error.

rmdir nombre_directorio #Borra el directorio

Borrar archivos. Comando rm

Con el comando rm se pueden borrar archivos y carpetas.

rm nombre_archivo #Borra el archivo
rm nombre_archivo1 nombre_archivo2 #Borrado de múltiples archivos

Para el borrado de directorios tenemos la ventaja con respecto al comando rmdir de poder borrar directorios no vacíos. Para borrar un directorio con contenido usaremos los parámetros -rfLa r es de recursivo y la f de forzar.

rm -rf carpeta #Borra el directorio y todo su contenido

Mover y renombrar ficheros. Comando mv

El comando mv de move, como su nombre indica mueve archivos de un directorio a otro. Un segundo uso es el de renombrar archivos y directorios.

mv archivo.txt carpeta1 #mueve el archivo.txt del directorio actual al subdirectorio carpeta1
mv archivo.txt / #mueve el archivo.txt del directorio actual al directorio principal /
mv /archivo.txt . #mueve el archivo del directorio raiz al directorio photo_size_select_actual
mv archivo.txt imagen.jpg #renombra achivo como imagen.jpg

Copiar ficheros. Comando cp

Copiar archivos tiene una sintaxis parecida al comando de mover. Incluso también renombra.

mv archivo.txt carpeta1 #mueve el archivo.txt del directorio actual al subdirectorio carpeta1
cp archivo.txt / #copia el archivo.txt del directorio actual al directorio principal /
cp /archivo.txt . #copia el archivo del directorio raiz al directorio photo_size_select_actual
cp archivo.txt imagen.jpg #copia el achivo con el nuevo nombre imagen.jpg

El comodín *

En muchos comandos que tengan que ver con tratamiento de ficheros como ls, cp, mv, rm ,... podemos ayudarnos del comodín * para seleccionar múltiples archivos.

ls pic* #para listar todos los archivos que empiecen por pic
rm *.pdf #borra todos los archivos con extensión .pdf

Editores de texto. Comandos nano y vi

El editor de texto de los orígenes del linux es vi. Aunque tiene muchos seguidores, la verdad es que es confuso usarlo y requiere tener la documentación completa. No es nada de mi gusto. Por suerte, hay más opciones y también tenemos a nano, otro editor muy sencillo que suele venir con linux. Para mi gusto, mucho mas agradecido de usar. Para abrir o crear un archivo de texto usaremos:

nano archivo.txt

Si el fichero existe lo abrirá y podremos verlo y editarlo. Si no existe, tendremos la opción de crear y guardar los textos introducidos

Abajo tenemos una ayuda que nos recuerda cuales son los atajos de teclado para salir, buscar, etc pulsado ctrl + la letra indicada

Mas formas de ver texto. Comandos more y less

Para ver textos, además de poder usar cat o algún editor tenemos algunos comandos más específicos para esa tarea. Los comandos more o less son útiles para mostrar textos largos que no caben enteros en la pantalla ya que por medio de teclas podemos movernos por el texto.

Con el comando more mostrará el texto dividido por páginas. Cada página contendrá todo lo que quepa en una pantalla. Para azanzar página pulsamos tecla espacio, para retroceder tecla b, para avanzar una línea tecla intro, para cerrar el texto se usa la tecla q Existen más posibilidades, consulta la documentación oficial para mas información.

pedro@tallerdeapps:~$ more /etc/group
root:x:0:
daemon:x:1:
bin:x:2:
sys:x:3:
adm:x:4:syslog
tty:x:5:
disk:x:6:
lp:x:7:
mail:x:8:
news:x:9:
uucp:x:10:
man:x:12:
proxy:x:13:
kmem:x:15:
dialout:x:20:
fax:x:21:
voice:x:22:
cdrom:x:24:
floppy:x:25:
tape:x:26:
sudo:x:27:pedro,usuario2
audio:x:29:
dip:x:30:
--More--(26%)

El comando less es parecido. Para movernos por el texto tenemos los cursores. Tiene en común con more el uso de las teclas espaciopara avanzar página, b retroceder página y la tecla q para salir. Hay más posibilidades, consulta la documentación oficial.

Limpiar la pantalla. Comando clear

En ocasiones, puede interesar borrar la pantalla de la terminal. Tenemos un comando para ello:

clear

Permisos de acceso a ficheros. Comando chmod

Al listar archivos con con ls -l nos aparecen junto con los ficheros detalles de información

drwxrwxr-x 2 pedro pedro 4096 Jan 19 07:53 micarpeta
drwxr-xr-x 2 root root 4096 Jan 19 07:54 directorioderoot
-rw-r--r-- 1 root root 0 Jan 19 07:53 otrotexto.txt
-rw-rw-r-- 1 pedro pedro 0 Jan 19 07:52 texto1.txt

En la primera columna se codifica con letras y guiones el tipo de archivo y los permisos de acceso. En el caso de los directorios, el primer caracter será la letra d. Los archivos de texto listados aquí pertenecen al tipo de ficheros regulares y se representan con un guión. Los posibles tipos de ficheros son:

  • - para archivos regulares
  • b archivo especial tipo bloque
  • c para archivos especiales tipo carácter
  • d en el caso de directorios
  • l esto es para enlaces simbólicos
  • n archivos de red
  • p para los tipos de archivos especiales tipo pipe
  • s esto es para archivos tipo socket

Los siguientes caracteres son tres grupos de 3 que representan los permisos de lectura "r", escritura "w", ejecución "x" para el propietario, el grupo propietario y otros usuarios que no son ni propietario ni grupo propietario. Las combinaciones posibles van de rwxtodos los permisos a ninguno representado por ---

En el ejemplo del directorio micarpeta tenemos rwx tanto para el propietario como el grupo al que pertenece. Los usuarios no propietarios o de un grupo diferente en este caso no tienen permisos de escritura.

Las dos siguientes columnas muestran el propietario y el grupo al que pertenece. En este ejemplo sale propietario root, del grupo root para algunos ficheros y usuario pedro del grupo pedro para otros. En un próximo capítulo, veremos con mas detalle los usuarios y grupos. Por el momento nos centramos en los permisos.

Ahora que ya conocemos un poco que permisos tiene un fichero vamos a practicar para cambiárselos con el comando chmod El mismo comando permite dos modos diferentes para hacerlo. Está el método octal o numérico o el método simbólico. Puedes usar el que mas te guste.

chmod octal o numérico

La estructura básica sería chmod permisos nombre_archivo

Permisos son 3 números del 0 al 7, uno para cada tipo de usuario. El valor de cada dígito lo podemos encontrar en esta tabla:

Algunos ejemplos comunes:

chmod 777 texto1.txt #asigna permisos rwxrwxrwx
chmod 744 texto1.txt #asigna permisos rwxr--r--

Podemos usar el * para cambiar permisos a todos los archivos del directorio y el parámetro -R de recursivo

chmod 777 * #asigna permisos rwxrwxrwx a todo el directorio
chmod 744 t* #asigna permisos rwxr--r-- a todos los ficheros que empiecen por t
chmod 744 * #asigna permisos rwxr--r-- a todos los ficheros de este directorio y los subdirectorios que estén por debajo

chmod método simbólico

El método simbólico es una combinación de letras y símbolos para cambiar los permisos. Empieza por una letra que representa:

  • u usuario propietario
  • g grupo
  • o otros, ni propietario ni del grupo
  • a todos (all)

A continuación un operador:

  • = Asigna el permiso
  • + Agrega el permiso
  • - Quita el permiso

finalmente, los permisos rwx:

  • r Lectura
  • w Escritura
  • x Ejecución

Con ejemplos lo entenderemos mejor:

chmod u=rwx,g= , o= texto1.txt #permisos rwx para usuario, los demás los deja igual
chmod u=rw,g=rw,o=rw texto1.txt #permisos rw para los 3 tipos de usuarios

Con los operadores + - agregamos o quitamos un permiso dejando por tipo de usuario. El resto de usuarios no se verán afectados.

chmod u+rwx texto1.txt #añade los permisos rwx al usuario propietario

chmod o+rwx texto1.txt #quita todos los permisos para los "otros" usuarios
Cambiar de propietario. Comando chown

El comando chown permite cambiar de propietario y grupo a los archivos. Podemos cambiar en la sentencia uno de los dos o ambos. La sintaxis se puede hacer con . o con :
Lo mejor es mirar los ejemplos que te muestro.

chown root mifichero #ahora el usuario root es propietario de este archivo
chwon :usuarios mifichero #mifichero pertenece al grupo "usuarios". No cambia de usuario, solo grupo
chwon .usuarios mifichero #lo mismo pero usando .
chown root:root mifichero #se cambia usuario y grupo
chown root.root mifichero #lo mismo pero usando .

Búsqueda de ficheros. Comando find

Para buscar ficheros tenemos a find. Podemos usar * como comodín. Algunos ejemplos:

find /micarpeta -name “arch*” #Busca en el directorio micarpeta ficheros que empiecen por arch
find /micarpeta -type f -name “arch*” #Busqueda de archivos tipo file, se omite la busqueda de carpetas
find /etc -name “*.conf” #Busca en el directorio etc ficheros con extensión .conf
find / -name “docu*” #Busca en todos los directorios archivos que empiecen por docu.

Pequeño programa. Creación de scripts en bash
Vamos a realizar un pequeño programa donde repasamos algunos de los comandon vistos hasta ahora. Se trata de un sencillo script en bash. Por sencillez, el código tendrá un echo "hola mundo" que será ejecutado cuando invoquemos el archivo. Para empezar desde el directorio personal de tu usario creamos un directorio llamado "programas":

cd ~ #ir al directorio home/mi_usuario. En mi caso home/pedro
pwd #compruebo en que directorio estoy
home/pedro
mkdir programas #crea el directorio
cd programas #ir a ese directorio
nano dimehola #crear un archivo con nano, sirve cualquier editor

Dentro del archivo dimehola escribiremos el script y guardamos cambios

Para ejecutar un script se usa ./ seguido del nombre del script. Si lo hacemos, no funcionará todavía porque el archivo no tiene permisos de ejecución para nadie. Se trata de una medida de seguridad de linux. Podemos comprobar los permisos tal como sabemos con ls -l y mostrará -rw-rw-r-- Tal como vimos con chmod, le damos permisos totales para todos los usuarios y ahora ya podemos ejecutarlo.

chmod 777 dimehola #permisos rwx para los 3 tipos
./dimehola #ejecutar script
Hola Linux #salida por la terminal

Ya sabemos como crear un programa. Muy sencillo pero no deja ser un programa. Ahora nuestro siguiente reto es poder invocarlo desde cualquier directorio como ocurre con muchos comandos programas y comandos del sistema. Para esto necesitamos conocer un poco las variables de entorno

Variables de entorno

El sistema Linux establece algunas variables de entorno globales cuando inicias sesión en tu sistema. Las variables de entorno son una lista de valores que guardan varios estados de una sesión. Se pueden crear, borrar o editar. Para ver la lista de variables de entorno podemos usar printenv

La lista es bastante grande, pero podemos resumir que los más importantes son los siguientes:

  • SHELL: Describe el shell que interpretará cualquier comando que ingrese. En la mayoría de los casos, será bash de forma predeterminada, pero se pueden establecer otros valores si prefiere otras opciones.
  • TERM: Especifica el tipo de terminal a emular cuando se ejecuta el shell. Se pueden emular diferentes terminales de hardware para diferentes requisitos de funcionamiento. Sin embargo, generalmente no tendrá que preocuparse por esto.
  • USER: El usuario que inició sesión actualmente.
  • PWD: El directorio actual de trabajo.
  • OLDPWD: El directorio anterior de trabajo. Esto se mantiene en el shell para volver a su directorio anterior ejecutando cd -.
  • LS_COLORS: Define los códigos de color que se utilizan para añadir de forma opcional un resultado de color al comando ls. Esto se utiliza para distinguir diferentes tipos de archivos y proporcionar más información al usuario de forma rápida.
  • MAIL: La ruta al buzón del usuario actual.
  • PATH: Una lista de directorios que el sistema comprobará cuando busque comandos. Cuando un usuario escriba un comando, el sistema comprobará los directorios en este orden para buscar y ejecutar el ejecutable.
  • LANG: Las configuraciones actuales de idioma y localización, incluida la codificación de caracteres.
  • HOME: El directorio principal del usuario actual.
  • _: El comando más reciente ejecutado anteriormente.
  • Si queremos ver el valor de una variable concreta usaremos printenv NOMBRE_VARIABLE

    pedro@tallerdeapps:/$ printenv PATH
    /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin

    En la variable PATH están todas las rutas donde el sistema buscará un ejecutable. Sabiendo esto, si tenemos un programa que queremos que pueda ser invocado desde cualquier directorio, como seguro habrás intuido, debemos añadir a PATH la ruta donde está ese programa. Para añadir valores a una variable se usa export. Vamos a practicarlo aprovechando el ejercio anterior donde creamos un miniprograma en /home/mi_usuario/programas. Nuestro primer pensamiento sería hacer export PATH=$PATH:/home/mi_usuario/programas

    export PATH=$PATH:/home/pedro/programas #agrego a PATH esta ruta
    cd / #ir al directorio raiz para comprobar que desde allí tengo alcance a /home/pedro/programas
    dimehola #invocar el script
    Hola Linux #funciona!

    Esto funcionará mientras no se reinicie o cerremos sesión. Para que sea permanente, necesitamos modificar PATH en el archivo donde se almacena, en /etc/environment. Con nuestro editor favorito con permisos sudo, añadimos :/home/pedro/programas al final de la línea y grabamos. Hay que reiniciar para que los cambios surjan efecto.

    PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/home/pedro/programas"