Appearance
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
| Comando | Descripción |
|---|---|
cd | Cambia de directorio |
pwd | Muestra la ruta de directorio actual |
ls | Lista los archivos del directorio actual |
mkdir | Abre un nuevo directorio |
touch | Abre un nuevo archivo |
cat | Visualiza el contenido para archivos de texto |
cp | Copia un archivo origen en un directorio destino |
mv | Mueve un archivo desde un origen a un directorio destino |
df | Muestra 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| Carpeta | Descripción |
|---|---|
/boot | Corresponde a los archivos de arranque del sistema |
/root | Directorio del superusuario. El superusuario o administrador tiene todo el acceso al sistema. |
/home | Directorio que incluye los subdirectorios por cada usuario registrado en el sistema |
/bin | Archivos binarios para ejecución del sistema |
/etc | Archivos adicionales de configuración de servicios y scripts |
/opt | Usado opcionalmente para software de terceros |
/var | Usado de modo variable para bitacora o archivos de registro, datos del sistema que crecen |
/mnt | Puntos de montaje |
/media | Usado para montar dispositivos, dado que en Linux se vinculan como archivos |
/temp | Usado 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
| Carpeta | Descripción |
|---|---|
/etc/fstab | Contiene información de particiones o de la tabla del sistema de archivos (File System TABble) |
/etc/passwd | Determina los usuarios que tienen acceso al sistema |
/etc/group | Determina 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 userDónde
useres el nombre del usuario y se crea un grupo con el mismo nombre. Se usa-mpara que también cree su directorio principal/home/user.
Para crear un grupo ejecutas:
bash
groupadd groupDónde
groupes 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 userDónde
useres 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 /homeTambién existen los comandos para remover usuarios y grupos. Veamos:
bash
userdel -r user
groupdel groupDónde
useres el nombre de un usuario ygroupel 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.
| Permisos | Ejemplo |
|---|---|
-rwx rwx rwx | chmod 777 file |
-rwx rwx r-x | chmod 775 file |
-rwx r-x r-x | chmod 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 |
.
filese 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/userEjemplos 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.
-namese utiliza para indicar el nombre del archivo-printpermite 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 >> filels | 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 packagebash
sudo yum package
packagecorresponde 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 fileTambién puedes en encontrar y usr
vimen lugar devi.
Comandos de vi
| Comando | Descripción |
|---|---|
Esc | Regresa al modo de comandos. |
Enter | Se 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. |
a | Agrega texto después del cursor. |
A | Agrega texto al final de la línea activa. |
dd | Borra la línea activa por completo. |
D | Bora a partir del cursor hasta el final de la línea. |
G | Se mueve (ir) al final del archivo. |
1G | Se mueve al principio del archivo. |
h | Se mueve un espacio a la izquierda. |
i | Agrega texto a partir del cursor. |
j | Se mueve una línea abajo. |
k | Se mueve una línea arriba. |
l | Se mueve un espacio a la derecha. |
O | Agrega texto en una nueva línea antes de la línea activa. |
:q! (Enter) | Abandona vi sin guardar cambios. |
R | Remplaza texto. |
u | Deshace el último cambio. |
U | Deshace los cambios en la línea activa. |
x | Borra un carácter. |
:w (Enter) | Guarda (o escribe) un archivo. |
ZZ | Abandona 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.pubSi no se ha generado con anterioridad la clave publica, se puede generar una clave pública con el siguiente comando:
bash
ssh-keygen -ySe 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_keysEsta ú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 -iPuede 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 myappNótese que
greppremite filtrar la salida ymyappcorresponderí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/
folderrepresentaría el nombre de tu directorio de archivos
Y para descomprimir se usaría unzip, por ejemplo:
bash
unzip folder.zipPuedes 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_nameDónde
origin_filese refiere a la ruta del archivo o folder existente, ylink_nameal nombre asignado al enlace simbólico en la nueva ubicación