Fundamentos de la línea de comandos

Teoría: Sudo

Cuando trabajamos en la terminal, muchas veces necesitamos permisos especiales para hacer ciertas tareas más avanzadas. Estos permisos se conocen como privilegios de superusuario o root. Vamos a aprender qué significa esto y cómo manejarlo con cuidado.

¿Por qué necesitamos privilegios de superusuario?

Algunas acciones en el sistema operativo son "delicadas" y solo el administrador (root) puede hacerlas. Por ejemplo:

  • Instalar o desinstalar programas
  • Acceder o modificar archivos de otros usuarios
  • Cambiar permisos o propiedades de archivos
  • Crear o eliminar archivos del sistema
  • Ejecutar programas que modifican la configuración del sistema

¿Cómo cambiamos de usuario?

Antes, se usaba un comando llamado su (significa substitute user o cambiar de usuario) para iniciar sesión como otro usuario, comúnmente como root. Pero hoy en día no se usa mucho porque puede ser inseguro y se considera obsoleto.

La forma recomendada actualmente es usar sudo (significa super user do ). Este comando te permite ejecutar instrucciones individuales como si fueras root, sin tener que cambiar de usuario por completo.

Cómo usar sudo

La idea es simple: agregamos sudo antes del comando que queremos ejecutar con privilegios elevados.

Ejemplo práctico

Supongamos que queremos crear un archivo en una carpeta del sistema:

touch /etc/archivo.txt

Este comando fallará:

touch: cannot touch '/etc/archivo.txt': Permission denied

Pero si lo hacemos con sudo, funciona:

sudo touch /etc/archivo.txt

Ahora el archivo fue creado por root. Podemos verificarlo con:

stat /etc/archivo.txt

Este comando nos muestra los detalles del archivo, incluyendo el propietario, que en este caso será root.

Otro ejemplo: borrar un archivo

Si no tenemos permiso para borrar un archivo:

rm /etc/archivo.txt
# rm: cannot remove '/etc/archivo.txt': Permission denied

Lo solucionamos usando sudo:

sudo rm /etc/archivo.txt

¿Qué pasa con la contraseña?

Cuando usas sudo, puede que el sistema te pida la contraseña de tu usuario. Eso es normal. Además, por cuestiones de seguridad, generalmente recordará la contraseña solo durante 5 minutos, así que si usas sudo varias veces seguidas, no te pedirá la clave cada vez.

Ejecutar comandos como otro usuario (no root)

Tal vez no quieras actuar como root, sino como otro usuario diferente. En ese caso puedes usar la opción -u. Por ejemplo:

sudo -u nobody mkdir /tmp/prueba

Esto crea una carpeta en /tmp bajo el usuario nobody. Puedes ver quién es el propietario con:

stat /tmp/prueba

Abrir una sesión como root

¿Y si necesitas ejecutar varios comandos como root, no solo uno? En ese caso puedes abrir una sesión de administrador con:

sudo -i

Esto abre una sesión continua como superusuario (root). Puedes confirmarlo con:

id
# uid=0(root) gid=0(root) groups=0(root)

Para salir de esa sesión, simplemente escribe:

exit

Precauciones: ¿cuándo no usar sudo?

⚠️ Aquí es donde muchos recién comienzan a tener problemas. A veces, ante un error desconocido, se usa sudo tratando de forzar que el comando funcione, pero esto no siempre ayuda y puede causar más problemas.

Un error común es usar sudo para crear archivos en tu carpeta personal. Esto crea archivos que ya no te pertenecen y no los podrás modificar sin sudo.

sudo touch ~/archivo.txt
ls -l ~/archivo.txt
# El dueño será root, y el sistema no te dejará editarlo fácilmente.

¿Cómo evitar problemas?

Asegurémonos de que:

  • Los archivos en tu carpeta personal te pertenezcan a ti (tu usuario).
  • Solo uses sudo cuando realmente sea necesario (como modificar el sistema o instalar programas).

Visualizando permisos y propietarios

Para saber quién es el dueño de los archivos, usamos:

ls -la

Ejemplo de salida:

drwxr-xr-x+ 117 mokevnin  staff    3744 Feb 19 15:55 .
drwxr-xr-x    5 root      admin     160 Oct 12 19:15 ..
-r--------    1 mokevnin  staff       7 Nov 21  2017 .CFUserTextEncoding
-rw-r--r--@   1 mokevnin  staff   22532 Feb  8 00:04 .DS_Store

Aquí podemos ver que todo pertenece al usuario mokevnin, excepto el directorio anterior (..), que pertenece a root.

Resumen

ComandoDescripción
sudo comandoEjecuta un comando como root
sudo -u usuario comandoEjecuta un comando como otro usuario
sudo -iAbre una sesión como root
exitSale de la sesión de root
stat archivoMuestra información del archivo, como su propietario
ls -laLista los archivos con detalles en el directorio actual