Skip to content

Linux ​

El sistema operativo que reina en la Web
© 2020 by César Arcila

Un Sistema Operativo es un software principal que interactúa entre el computador y los demás programas, recursos y dispositivos que se conecten directamente (Ej. Microsoft Windows, macOS, Unix). Linux se asemeja en sus principios a sistemas Unix que se remonta a finales de los años 60, caracterizado por un esquema de seguridad notable sobre los archivos y preparado para prestar servicios en una red (como servidores). Actualmente, cuando se piensa en servidores en internet o en computación en la nube (cloud) se involucra el sistema Linux, siendo el más usado en la Web.

Siendo software libre ha tenido una serie de versiones derivadas que a nivel de agrupación reconocida se denominan distribuciones. Entre ellas Debian, CentOS y Red-Hat. También puede usarse versión para el escritorio, tal es el caso de Ubuntu que tiene una buena acogida para los amantes de Linux. Pero Linux se comprende mejor por medio de comandos (a modo Matrix), siendo un sistema frecuentemente manejado por personal calificado de infraestructura. Además, es esencial para introducirse a la virtualización ligera con tecnología como Docker.

El presente documento es una guía de referencia esencial para revisar comandos frecuentes y algunos principios específicos del sistema Linux. Si se desea instalarlo en un computador de escritorio, puede usarse una máquina virtual con una herramienta como VirtualBox.

Comandos iniciales ​

ComandoDescripción
cdCambia de directorio
pwdMuestra la ruta de directorio actual
lsLista los archivos del directorio actual
mkdirAbre un nuevo directorio
touchAbre un nuevo archivo
catVisualiza el contenido para archivos de texto
cpCopia un archivo origen en un directorio destino
mvMueve un archivo desde un origen a un directorio destino
dfMuestra información sobre el uso del disco

El sistema de archivos ​

La estructura de archivos de este sistema es una de las pricipales características. Se inicia con el directorio raíz (root) que se representa por el signo / (slash). Veamos los directorios más importantes.

  • 📂 /
 ├── boot  
 ├── root (superusuario)  
 ├── home  
 │⋅⋅⋅└── user (usuario)  
 │⋅⋅⋅⋅⋅⋅⋅└── .bashrc  
 ├── bin  
 ├── etc  
 ├── opt  
 ├── var  
 ├── mnt  
 ├── media  
 └── temp
CarpetaDescripción
/bootCorresponde a los archivos de arranque del sistema
/rootDirectorio del superusuario. El superusuario o administrador tiene todo el acceso al sistema.
/homeDirectorio que incluye los subdirectorios por cada usuario registrado en el sistema
/binArchivos binarios para ejecución del sistema
/etcArchivos adicionales de configuración de servicios y scripts
/optUsado opcionalmente para software de terceros
/varUsado de modo variable para bitacora o archivos de registro, datos del sistema que crecen
/mntPuntos de montaje
/mediaUsado para montar dispositivos, dado que en Linux se vinculan como archivos
/tempUsado para archivos temporales que pueden liberarse en un reinicio

.

Las rutas se representan separadas por el signo / (slash), y básicamente todo se gestiona por medio de archivos (y sus rutas).

Algunos archivos importantes ​

CarpetaDescripción
/etc/fstabContiene información de particiones o de la tabla del sistema de archivos (File System TABble)
/etc/passwdDetermina los usuarios que tienen acceso al sistema
/etc/groupDetermina los grupos para proporcionar un nivel de acceso al sistema agrupando los usuarios
~/.bashrc Determina configuración de variables para el usuario. El signo ~ representa a /home/user (dónde user varia el nombre).
~/.ssh Directorio donde se encuentran llaves autorizadas (authorized_keys) o el archivo de anfitriones conocidos (known_hosts).

Ejemplo de creación de un usuario ​

Los usuarios y los grupos del sistema son usados para proporcionar un nivel de acceso según corresponda. Para crear un usuario en Linux, estando conectado con el usuario root, puedes ejecutar la siguiente sentencia:

bash
useradd -m user

Dónde user es el nombre del usuario y se crea un grupo con el mismo nombre. Se usa -m para que también cree su directorio principal /home/user.

Para crear un grupo ejecutas:

bash
groupadd group

Dónde group es el nombre del grupo. No necesitas crear un grupo con el mismo nombre de usuario dado que suele crearse un grupo así cuando creas el usuario.

Para crear un usuario y asignarlo a un grupo específico ejecutas:

bash
useradd -g group -s /bin/bash -d /home/user -m user
passwd user

Dónde user es el nombre del usuario. En este caso, el grupo debe haberse creado antes.

Podemos listar las carpetas de los usuarios con la siguiente sentencia:

bash
ls -l /home

También existen los comandos para remover usuarios y grupos. Veamos:

bash
userdel -r user
groupdel group

Dónde user es el nombre de un usuario y group el nombre de un grupo.

Permisos de archivos ​

-rwxrw-r--

La expresión de arriba suele observarse cuando listamos un directorio con el comando ls -l. Cada posición cuenta para identificar el tipo de acceso y suman 10 posiciones.

El primer caracter se rifere al tipo de archivo, es decir, si es un directorio (d) o no (-).
Los siguientes tres corresponden a los permisos del usuario específico.
Tres caracteres más corresponden a los permisos por grupo.
Y los últimos tres corresponden al acceso para otros usuarios.

Se usan las letras r, w y x para indicar si se tiene acceso de lectura, escritura o ejecución respectivamente.
Se usa el caracter - dentro de estas posiciones para indicar que no se tiene acceso en la modalidad respectiva según la posición.

Veamos algunos ejemplos para cambiar el modo de acceso con el comando chmod.

PermisosEjemplo
-rwx rwx rwxchmod 777 file
-rwx rwx r-xchmod 775 file
-rwx r-x r-xchmod 755 file
-rwx r-x ---chmod 750 file
-rw- rw- r--chmod 664 file
-rw- r-- r--chmod 644 file
-rw- r-- ---chmod 640 file
-rw- --- ---chmod 600 file

.

file se refiere al nombre de un archivo o directorio.

Dados los ejemplos, el código 777 admite un acceso total. Cuando se usa un código terminado en cero (0) se impide acceso a otros usuarios o grupos, tal es el caso de 600, 640 y 750. Este último puede usarse para la carpeta principal de un usuario según preferencia. Además, se puede usar -R para indicar recursividad del privilegio, es decir, que los atributos de acceso se extienden en todos los subdirectorios y archivos derivados. Por ejemplo:

bash
chmod 750 -R /home/user

Ejemplos de comandos para manejo de archivos ​

ls: lista todos los nombres de archivos que se encuentran en el directorio de trabajo.
ls –l: El –l es llamado switch u opción. En este caso le dice a ls que despliegue el formato largo de la lista, o lo que es lo mismo, una línea entera de información acerca de cada archivo.
ls ..: Indica que liste los archivos que se encuentran en el directorio padre del activo, es decir, el directorio un poco más atrás del activo.
ls */file: Permite buscar y listar un archivo en cualquiera de los subdirectorios del directorio de trabajo actual.
cp file: Genera el duplicado exacto de un archivo.
cp file1 file2: En este caso se duplica el archivo con otro nombre. En caso que exista file1, el sistema lo borrará y lo remplazará con la copia de file2 (asegurese antes de que no exista con ls). rm file: Permite borrar, eliminar, quitar un archivo. Si quiere borrar varios archivos a la vez, pude utilizar este mismo comando, anotando los nombres separados por un espacio.
mv file1 file2: Permite cambiar un nombre de archivo (y archivos directorios). Debido a que no puede tener dos archivos con el mismo nombre en el mismo directorio, si un archivo ya tiene el nombre que desea utilizar, mv sin pensarlo lo borrará.
mv file /folder: Permite mover el archivo nombrado que existe en el directorio actual al directorio indicado.
cat file: Despliega el contenido de un archivo de texto.
head file: Permite ver las primeras diez líneas del archivo.
pwd: Si se olvida el lugar en donde se localiza en la estructura de directorios, este comando indica donde se encuentra.
cd /folder: Permite moverse o cambiar de directorio. Cuando no le indica al sistema donde quiere ir (sólo: cd), éste asume que quiere ir al directorio base (directorio propio dentro del directorio /home).
mkdir folder: Permite crear un directorio. El lugar más común para crear un directorio es en su propio directorio base.
rmdir folder: Elimina o borra directorios. Para quitar un directorio que tiene información, se debe borrar o mover los archivos a cualquier otro lugar antes de borrar el directorio. También se debe de tener en cuenta que en el momento de borrar el directorio, debe estar ubicado en su directorio padre.
find . –name file –print: Permite buscar archivos. En este caso busca en cualquiera de los subdirectorios del directorio actual, teniendo en cuenta que:

  • El punto indica a find que comience la búsqueda en el directorio de trabajo actual.
  • -name se utiliza para indicar el nombre del archivo
  • -print permite imprimir la trayectoria completa del archivo que encontró; si no se incluye esta opción, find no dirá nada aunque haya encontrado el archivo).
    find / –name file –print: Esta versión de find indica que comience la búsqueda en el directorio raíz y que continúe buscando en cada uno de los directorios del disco (proceso que requiere tiempo).

Cómo utilizar el redireccionamiento ​

ls > file: Crea un archivo (por ejemplo: listado.de.archivos) y coloca la salida del comando ls en éste. Si el archivo existía con anterioridad, el sistema borra la versión anterior. Si usted no desea borrar el archivo existente, pude indicarle al sistema que añada la nueva información al final de éste. Para hacer esto, escriba la siguiente línea: ls >> file
ls | more: Envía el listado de archivos al comando more. De esta forma, se desplegará el listado en una pantalla a la vez. cat file | more: Despliega un archivo en la pantalla, utilizando una pantalla a la vez. También se puede utilizar sólo el comando more al escribirlo de la siguiente forma: more file

Instalación de paquetes de software ​

Para instalar paquetes de software puede usarse un comando dependiendo de la distribución. Por ejemplo, para Debian se puede usar apt, mientras en CentOS el comando yum. Además, suele estar acompañado del comando sudo cuando se ejecuta con un usuario distinto del usuario root. Finalmente, se debe indicar el nombre oficial del paquete. Veamos:

bash
sudo apt package
bash
sudo yum package

package corresponde al nombre oficial del paquete a instalar.

El editor de texto vi (vim) ​

Es un editor avanzado para modificar archivos de texto y es conveniente conocerlo si operas un sistema con Linux (aunque también existe otro editor como nano). Maneja modos e inicia con el modo para comandos, y no en el modo de escritura, es decir que para comenzar a escribir debes ejecutar un comando que consiste en digitar la tecla i.

Para usar vi lo haces de la siguiente manera:

bash
vi file

También puedes en encontrar y usr vim en lugar de vi.

Comandos de vi ​

ComandoDescripción
EscRegresa al modo de comandos.
EnterSe mueve al principio de la siguiente línea.
+Se mueve al principio de la siguiente línea.
-Se mueve al principio de la línea anterior.
aAgrega texto después del cursor.
AAgrega texto al final de la línea activa.
ddBorra la línea activa por completo.
DBora a partir del cursor hasta el final de la línea.
GSe mueve (ir) al final del archivo.
1GSe mueve al principio del archivo.
hSe mueve un espacio a la izquierda.
iAgrega texto a partir del cursor.
jSe mueve una línea abajo.
kSe mueve una línea arriba.
lSe mueve un espacio a la derecha.
OAgrega texto en una nueva línea antes de la línea activa.
:q! (Enter)Abandona vi sin guardar cambios.
RRemplaza texto.
uDeshace el último cambio.
UDeshace los cambios en la línea activa.
xBorra un carácter.
:w (Enter)Guarda (o escribe) un archivo.
ZZAbandona vi.
/Abre el modo de consulta segudido por la expresión a buscar y usando luego la tecla Enter.

Modo de acceso por SSH & SFTP ​

Los sistemas Linux se pueden comunicar entre ellos por medio del servicio ssh, es decir, desde una máquina con Linux a un servidor remoto con Linux. Se requiere conceder el acceso respectivo para operar desde consola (SSH) del mismo modo en que opera el usuario original de la instalación del servidor. En otras palabras se hace una especie de recuperacion de llaves con el nuevo usuario.

Se debe contar con un archivo de clave pública. Servicios como AWS (Amazon Web Services) la proporcionan en la instalación de la instancia. Si ya se ha generado una clave publica localmente, se visualiza el contenido para copiarlo y pegarlo luego (en el servidor):

bash
cat ~/.ssh/id_rsa.pub

Si no se ha generado con anterioridad la clave publica, se puede generar una clave pública con el siguiente comando:

bash
ssh-keygen -y

Se indica la ruta el archivo de clave privada respectivo y nos visualizara la clave pública que copiaremos en nuestro servidor. Pasas a conectarte con el usuario recien creado en el servidor, creas una carpeta ".ssh", un archivo de autorizacion y cambias los privilegios. Por ejemplo:

bash
sudo su - user
mkdir .ssh
chmod 700 .ssh
touch .ssh/authorized_keys
chmod 600 .ssh/authorized_keys
vi .ssh/authorized_keys

Esta última línea abre un editor vi en donde se pega el contenido del archivo con la clave publica (tambien puede usarse otro editor: nano). En adelante, usaremos un comando como el siguiente:

bash
ssh -i ~/.ssh/archivo.pem [email protected]

Para transferir o enviar archivos se puede usar un comando como el siguiente:

bash
sftp i ~/.ssh/archivo.pem [email protected] <<< $'put file.zip'

Sin embargo, existe el comando específico para copias remotas, veamos el ejemplo anterior usando scp:

bash
scp i ~/.ssh/archivo.pem file.zip [email protected]:

Algunos otros comandos complementarios ​

Puede ser útil utilizar el comando lsof para listar procesos y puertos usados como base para establecer las reglas. Este comando se ejecuta así:

bash
lsof -i

Puede ser mejor acompañarlo con grep, por ejemplo: lsof -i | grep LISTEN

Para conocer un proceso activo puedes ejecutar por ejemplo:

bash
ps -ef | grep myapp

Nótese que grep premite filtrar la salida y myapp correspondería nombre del filtro, puede ser tu aplicació web u otro

Para comprimir un folder o archivos se puede usar zip, por ejemplo:

bash
zip -r folder.zip folder/

folder representaría el nombre de tu directorio de archivos

Y para descomprimir se usaría unzip, por ejemplo:

bash
unzip folder.zip

Puedes listar los archivos ejecutando: unzip -l folder.zip

Para crear un enlace simbólico (acceso directo en otra ubicación), es decir, evitar repetir una carpeta que existe en otra ruta y referenciarla como si estuviese duplicada sin ocupar nuevo espacio, se ejeucta:

bash
ln -s origin_file link_name

Dónde origin_file se refiere a la ruta del archivo o folder existente, y link_name al nombre asignado al enlace simbólico en la nueva ubicación