Apuntes mientras aprendo sobre software y computadoras.

Linux

Guía mínima para empezar con la terminal de Linux

Introducción

Hola, mi nombre es Gustavo. No soy un experto en la terminal de Linux. Y por eso mismo es que estoy escribiendo la “Guía mínima para empezar a usar la terminal de Linux”.

¿Cómo es eso? ¿Qué hace un principiante escribiendo sobre un tema del que hasta hace unos días no tenía ninguna idea? Esas y otras preguntas son pertinentes para el caso. Para todo eso tengo dos respuestas.

Voy a comenzar diciendo que no es la primera vez que escribo algo como esto.

Antes escribí la “Guía total para empezar con Ubuntu Linux” y la “Guía mínima para empezar a programar en bash”.

En los dos casos anteriores también comencé a escribir antes de tener la más pequeña noción de lo que estaba haciendo.

Puedo ser un principiante en los temas que estudio, pero no soy un principiante en escribir sobre cosas que me resultan nuevas o de las que estoy aprendiendo.

Lo segundo: estoy escribiendo para enseñarme a mi mismo. Soy una de esas personas que creen que la idea de “enseñar para aprender” es realmente valiosa. Se aprende más de un tema cuando intentamose explicarlo.

Puedo equivocarme, pero al final del día esto no es más que mi propio apunte personal. Un apunte hecho público, pero personal. Es lo que yo considero “mínimo” para usar la shell de Linux, aun sabiendo que en ese proceso de recorte dejé muchísima información afuera.

Espero que el material te resulte de utilidad. Si te interesa mi proyecto, no olvides escribirme un correo electrónico contándome tu opinión.

Y si encontrás errores o ejemplos confusos en el material, por favor decímelo para que pueda corregirlos. De ese modo el texto va a mejorar, y yo voy aprender algo nuevo.

Capítulo 1: sistema de archivos

Cuando empecé a utilizar Linux me costó entender exactamente en que forma se encuentra organizado el sistema de archivos.

Puesto más facil, no entendía en que carpeta estaba cada cosa del sistema operativo.

Puedo explicar esto con un ejemplo. Es fácil suponer lo que puedo encontrar en la carpeta “Imágenes”, pero… ¿qué puedo esperar en una carpeta llamada “/etc/”?

Este es mi intento para, de forma mínima y ligera, dar un vistazo rápido del árbol de directorios que por lo general se puede esperar en un sistema operativo Linux.

¿Directorios o carpetas?

Según entiendo, las dos palabras se pueden usar de forma intercambiable.

La carpeta es la representación “simbólica” del directorio. Es la forma en que se representa un directorio por fuera de la terminal.

Los directorios forman un sistema de carpetas ordenadas. Esto forma una especie de mapa por el que puedo moverme y encontrar archivos.

En su conjunto, la suma de directorios forma un sistema de archivos.

¿Qué es un sistema de archivos?

Si busco un poco en la red, encuentro sobre el sistema de archivos lo siguiente:

A filesystem is the methods and data structures that an operating system uses to keep track of files on a disk or partition; that is, the way the files are organized on the disk. The word is also used to refer to a partition or disk that is used to store the files or the type of the filesystem.

Proyecto de Documentación de Linux

Entonces bien, si hago una traducción de esto al castellano, me queda que el sistema de archivos en Linux es:

1 – Los métodos y la estructura de los datos que el sistema operativo usa para seguir la pista de los archivos en un disco o una partición de disco.

Esto se une con lo que pensaba antes de los directorios. Un directorio me da, por decirlo de alguna forma, una dirección para encontrar un determinado dato guardado en el disco duro.

2 – El sistema de archivos puede ser de varios tipos, depende del sistema operativo. Y hace referencia al espacio que usan los programas para guardar cosas. Si los programas guardaran sus archivos en cualquier lado, constantemente se estarían sobrescribiendo cosas. Un “file system” le da un orden a eso.

El árbol del directorio:

Para imaginarlo, puedo seguir ese camino de directorios como si me moviera por un árbol.

Puedo comenzar por la raíz (directorio principal), luego desde el tronco aparecen dos ramas (otras dos subdirectorios) y cada rama tiene ocho pequeñas ramas en ellas (nuevos subdirectorios en su interior).

El ejemplo del árbol funciona porque el sistema de directorios tiene un orden jerárquico. Si algo le pasa al tronco, el árbol esta en problemas. Aunque no sea siempre así, como voy a ver más adelante.

Algo a tener en cuenta, dentro del sistema Linux todo es tratado como un archivo o un directorio.

Nada de letras

Bien, este es el primer detalles que salta a la vista:

Linux no utiliza letras para distinguir los discos duros o sus particiones. No encuentro “C:\ “ por ninguna parte, como lo podía ver en mis épocas de utilizar Windows.

Los discos son “montados” (mounted) con la estructura de los directorios, y desde ahí el sistema accede a los datos.

Mayor flexibilidad

En Linux existe la posibilidad de “dividir” el sistema operativo en varios discos duros o particiones.

De este modo el sistema de archivos funciona como un todo que puede tener sus partes separadas.

Puede estar el “árbol de datos” completo dentro de un mismo disco, o no. Los mismos programas reparten sus componentes en distintos subdirectorios.

Esta forma modular le da una mayor flexibilidad al sistema. Si uno de los directorios en un disco resulta dañado, esto no golpea a todo el conjunto íntegramente.

Por ejemplo, puedo establecer el directorio raíz en un disco, y el directorio /home en otro. Si el disco con el directorio raíz se rompe, los archivos personales aun siguen en el otro disco con el directorio /home intacto. O si me quedo sin espacio, puedo expandir mi directorio personal hacia otros discos.

Es importante recordar esa versatilidad para entender el sistema de archivos en Linux.

Lo que sigue es un mínimo vistazo al sistema de archivos. No son todos los directoriod que hay, pero son los que por una razón u otra tuve que visitar en algún momento.

Un vistazo por el directorio:

/

El directorio root / se conoce como la “raíz” del sistema (su símbolo es una barra slash). Es la carpeta de mayor jerarquía. Todas las demás carpetas tiene su origen en el directorio raíz.

De forma directa o indirecta, el resto del sistema de archivos esta formado por subdirectorios de root. Pero no todos los subdirectorios tienen que estar en la misma partición del disco.

El contenido de esta carpeta funciona para iniciar, reparar y recuperar el sistema. Si al iniciarse el sistema esta carpeta no aparece, la máquina no va a funcionar.

/bin

Este directorio contiene todos los archivos ejecutables que son necesarios para administrar y utilizar el sistema operativo. Entro estos la terminal y sus comandos.

Es un directorio importante para que todo funcione correctamente. En las particiones manuales generalmente es instalado junto con el directorio raiz, porque se lo considera como un directorio necesario para usar el sistema, aunque sea solamente desde la terminal.

/sbin


Este subdirectorio tiene archivos ejecutables necesarios para mantener y administrar del sistema (ejemplo: init, ifconfig, etc). Según entiendo, los sistemas binarios que aparecen en este directorio no pueden ser ejecutados por otra cuenta que no sea la de nivel root.

/boot

Archivos que Linux utiliza cuando se inicia el sistema. Se trata de archivos de configuración (solamente los esenciales), una imagen del kernel que mapea el inicio de Linux.

/dev

Los “device files”, archivos que forman parte del hardware: discos duros, parlantes, impresoras, etc.

Se los considera “pseudo archivos”, porque en Linux incluso el hardware es visto como un archivo.

/etc

Aquí encuentro los archivos de configuración de Linux. Estos archivos son muy importantes, por lo que tienen que ser “estáticos y no ejecutables”.

A lo largo de la guía voy a entrar una o dos veces a esta carpeta, que tiene archivos por ejemplo para modificar detalles de las cuentas individuales.

/home

El directorio home es “el hogar” de mis propios archivos. Es el espacio de uso personal donde organizo mis fotos, archivos de texto y todas esas cosas.

Linux es un sistema operativo que permite múltiples cuentas, por lo que varias personas podrían tener su propia carpeta /home en el mismo equipo.

Al contrario de otros subdirectorios, el tamaño de este crece y decrece constantemente, según le quito o agrego archivos.

/lib

Librerías y módulos compartidos del kernel. Este directorio es necesario para iniciar el sistema operativo.

Suele ser alojado junto a / durante las particiones manuales y en lo que a mi respecta, no voy a modificarlo a lo largo de esta guía (o al menos no que recuerde).

/media

Es el directorio donde agrego dispositivos de almacenamiento de datos. Es el lugar donde voy a encontrar otros discos duros, memorias usb, etc.

Dicho de otro modo es donde “monto y desmonto” estos dispositivos. Emplo, cuando el sistema se inicia no voy a encontrar los discos duros directamente (los discos que no contienen el sistema de archivos). Tengo que montarlos antes, haciendo clic en ellos.

Suena algo difícil de hacer, pero es realmente muy sencillo. Sin embargo es un tema profundo, del que mejor voy a estudiar en otra ocasión.

/lost+found

En algunas ocasiones el sistema operativo puede sufrir un error inesperado (por ejemplo, un corte de luz). Al volver a re-iniciarse, Linux realiza un chequeo de los archivos, para ver si algo de información sufrió algún daño. El resultado de recuperar estos archivos posiblemente dañados termina en este directorio.

/opt

Este directorio contiene algunas aplicaciones que no forman parte de la instalación básica del sistema operativo. Ejemplo, navegadores.

Se supone que es la carpeta indicada para instalar programas de terceras partes, aunque por algún extraño motivo (que no conozco) casi nunca la uso.

/tmp

Directorio donde se guardan los archivos temporales, como por ejemplo los que se crean mientras navego la red o escribo en un procesador de texto.

Eliminar archivos en este directorio puede afectar el funcionamiento de programas que están en funcionamiento, causando problemas inesperados.

/usr

Este es el directorio donde Linux guarda la mayoría de la documentación, librerías, archivos binarios“ de uso común”. Estos pueden ser usados por cuentas individuales.

En su interior hay múltiples subdirectorios. Los programas que vienen por defecto por el sistema, por ejemplo Firefox en algunas distribuciones, se encuentra en este subdirectorio.

/root

No tengo que confundir este subdirectorio con el subdirectorio superior / (tambien conocido como root o raíz). La misma documentacion de Linux bromea con esto diciendo que es como “raíz dentro de raíz”

Este subdirectorio contiene los archivos de la cuenta individual con nivel de administración “root”. Es algo así como el directorio personal home para la cuenta de mayor nivel de seguridad. Dedicado para tareas de administración del sistema.

Resumido a lo mínimo:

Cuando trabajo en la terminal, me muevo entre directorios. Cada directorio tiene una dirección especifica dentro del disco.

La suma de los directorios crea algo que puedo imaginar como un árbol de datos. Toda esta estructura es modular, y comienza desde el directorio raíz (root).

Capitulo 2: El Sistema de permisos

En el ecosistema del sistema operativo Linux hay muchos archivos y directorios. Sin embargo no todos esos documentos son accesibles para cualquier persona.

A modo de sistema de seguridad, se dispone de un conjunto de permisos para darnos un mayor de nivel de control.

Se utilizan estos permisos para poner barreras. Los mismos permisos están detrás de lo que puedo y no puedo hacer con cada archivo.

Y deciden ademas quiénes pueden acceder o no a los archivos. Una carpeta, un programa o un documento puede ser bloqueado o parcialmente restringido simplemente manipulando los distintos permisos.

En Linux existen tres clases de permisos

  • Read (Lectura) se simboliza con la letra r. Este permiso permite ver el contenido de un archivo o directorio.
  • Write (escritura) reconocido con la letra w. Permite modificar el contenido de un archivo o directorio.
  • Execute (ejecutar) simbolizado con la letra x. Permite ejecutar tanto un programa o un scrip/código. Ademas de poder entrar y ver el contenido de un directorio dado.

Esos tres permisos/derechos resumen lo principal que es necesario recordar.

Sabiendo esto, voy a ver ahora en que forma los permisos sirven para mediar entre los archivos del sistema y las personas que los utilizan.

Ver los permisos de un archivo con el comando ls -l

Todo lo anterior puede parecer difícil de seguir. A mi me pareció algo confuso al principio, uno de esos casos de “sobrecarga de información”.

Por eso que tal vez puedo mejorar la explicación haciendo uso de algunos ejemplos.

Para eso voy a utilizar el comando ls, que sirve para mostrar de forma ordenada los archivos contenidos en un directorio en forma de lista. La descripción en inglés del comando es “list directory contents”.

Entonces al usar el comando en un directorio:

ls  (nombre del directorio)

Aparece un listado de los archivos ahí contenidos.

Aunque realmente también puedo no especificar un camino al comando, y en ese caso voy a recibir un listado del directorio en el que se encuentra trabajando la terminal.

Pero voy a pasar a lo que me interesa ahora, ver los permisos de cada archivo. Eso lo consigo agregando la opción -l al comando

ls -l 

Agregar la opción -l significa darle Long Listing o mostrar una Lista Aumentada con datos del documento.

Ahora este comando modificado me muestra lo que estoy buscando, conocer los permisos que tiene un archivo o directorio.

Ahora un ejemplo. Voy a analizar con ls -l un documento.

Por ejemplo, el resultado de inspeccionar un archivo de texto

ls -l novela

es

- rwxr-xr-x 1 ezequiel admins 76 2018-05-20 17:18 novela

En cualquier caso, toda esa información a primera vista resulta abrumadora: al verlo, el conjunto de los datos parece una ensalada de letras (y números) difícil de entender.

Pero si se analiza cada columna por separado, se puede ver que en total hay 10 compartimientos (a los que voy a numerar del 1 al 10) por delante del nombre del archivo .

- rwx r-x r-x 1 ezequiel admins 76  2018-05-20  17:18  novela
1  2   3  4   5   6        7    8     9         10    (archivo)

La primera columna (1) informa de alguna de estas posibles opciones:

| significa que se trata de un archivo
d | quiere decir que se trata de un directorio
l | significa que es un link simbólico a otro archivo o directorio.
b | block o bloque.
c | significa un carácter.
p | es para FIFO.
S | significa socket.

En este caso mi primera columna dice « – », y por consiguiente puedo saber que se trata de un archivo y no de un directorio, por ejemplo.

Luego siguen tres columnas, y cada columna entrega tres posibles datos diferentes.

Suena extraño, pero recortando el diagrama de arriba se va a ver de forma más sencilla.

Son los compartimientos (2), (3) y (4).

rwx    r-x    r-x
(2)    (3)    (4)

¿Qué significan estas letras?

El compartimiento de adelante (2) corresponde a los permisos que tiene una cuenta específica. En este caso el usuario Ezequiel, quien es el creador del archivo.

El compartimiento que sigue (3) corresponde a los permisos para el grupo que también tiene acceso al documento. Ezequiel es parte de ese grupo. Es valioso saber que todos los archivos incluyen los permisos de grupo, aunque en este caso el grupo solamente esta integrado por Ezequiel.

Termina con el compartimiento (4) donde muestra los permisos para el resto del mundo (world). Esto es, para cualquier persona o entidad cibernética que acceda al documento, que no sea la cuenta Ezequiel o sus grupos autorizados.

Esas categorías son importantes, hay que releerlas varias veces para entender permisos y derechos en Linux.

Como la computadora del ejemplo corresponde a un único usuario (sin grupos), puedo concentrarme ahora en el primer compartimento de permisos:

rwx

Teniendo esto en cuenta, esa información quiere decir que la cuenta del usuario Ezequiel puede leer (r), escribir (w) y ejecutar (x) el archivo titulado “novela”.

Los permisos siempre vienen expresados en ese orden: leer, escribir y ejecutar. Por otro lado si uno de los permisos no fue otorgado, viene tachado con un guion .

Digamos que por ejemplo el resto del mundo puede leer el archivo «novela», no puede escribir en el, pero si pueden ejecutarlo. La información vendría expresada de este modo:

r – x

Entonces, si quiero seguir analizando, puedo volver a revisar los tres compartimientos.

terminé de analizar lo que vendría a ser (2). Pero puedo ver que en (3) grupos y en (4) esto del mundo tengo los mismos permisos.

r-x   r-x
(3)   (4)

r | lectura
| (no puede escribir o modificar)
x | permite ejecutar

Y con eso puedo cerrar el análisis de la información de un archivo analizado con el comando ls -l

Asignar permisos con el comando chmod

Los permisos los asignamos con el comando chmod.

chmod (opción) (permiso) (nombre del archivo o directorio)

Chmod me pide saber a qué cuenta voy a cambiarle los permisos. Después de esto quiere saber qué permisos voy a cambiar, y cuales son los archivos a los que voy a cambiárselos.

Para entender en que forma se usa este comando, voy a ver como puedo asignar los permisos utilizando números o letras.

Asignar permisos utilizando números

Ya conozco que hay tres permisos posibles: r (lectura), w (escritura), x (ejecutar).

Y puedo asignar esos permisos a tres tipos de cuentas posibles, clasificadas en: cuenta individual, por grupo y por resto del mundo.

Para entender permisos y derechos en Linux en otro nivel de complejidad, voy a asociar las letras (r, w , x) con números.

¿Por qué hacer esto? De ese modo voy a poder asignar los distintos permisos usando las siguientes combinaciones de números:

Núm.Permiso
0Ninguno
1Ejecutar (- – x)
2Escribir (- w -)
3Escribir y Ejecutar (r-x)
4Leer (r – -)
5Leer y Ejecutar (r – x)
6Leer y Escribir (r w -)
7Leer, Escribir y Ejecutar (r w x)

Puedo asignar permisos usado una combinación de cualquiera de estos tres números.

¿Por qué una combinación? Necesito elegir tres números, el primero para darle tres opciones a la cuenta individual, el segundo para darle opciones al grupo y el tercero para el resto del mundo.

Pensemos un ejemplo: quiero cambiar los permisos para el archivo novela que ya analicé anteriormente.

Para hacer esto voy a darle a la cuenta de usuario Ezequiel solamente los permisos de leer y escribir (combo de permisos número 6 en la tabla).

Y no quiero darle ningún permiso al grupo (permiso número 0 en la tabla) y solo la posibilidad de lectura al resto del mundo (permiso número 4 en la tabla).

La asignación de todo lo anterior expresado solo en el combo de números me queda:

704

Y el comando chmod me queda entonces escrito de la siguiente manera:

chmod 704 novela

Si ahora reviso el archivo novela con el comando ls -l encuentro la información de permisos expresada del siguiente modo:

r w x  - - -   - - x

El resultado refleja el cambio que terminé de hacer: todos los permisos para el usuario Ezequiel, ningún permiso para su grupo y permisos de ejecución para el resto del mundo.

Sabiendo esto, también otro modo de dar permisos y voy a pasar a resumirlo. Aunque en mi opinión el método de los números sigue siendo es el más práctico.

Asignar permisos utilizando el sistema de letras

Para usar este método, primero tengo que saber a qué categoría de cuentas le estoy modificando los permisos.

letraopción
ucuenta individual
ggrupo
oworld – resto del mundo)
atodas las opciones de arriba

En segundo lugar tengo que saber si estoy agregando, quitando o manteniendo permisos

signoopción
+añadir permiso
remover permiso
=mantener el permiso como estaba previamente

Y por supuesto, ya conozco los tipos de permisos que puedo asignar

r | lectura
w | escritura
x | ejecutar

En este momento voy a modificar los permisos del archivo novela. Para eso voy a quitarle al usuario Ezequiel el permiso de escribir. Inicialmente, en la anterior modificación, había conservado la posibilidad de leer, escribir y ejecutar.

Para conseguir ese efecto el comando me queda del siguiente modo:

chmod u-w novela

En este caso:

u representa a la cuenta individual. Conozco por los datos del comando ls -l que el usuario asociado al documento es Ezequiel.

el signo menos representa la remoción de un permiso.

w representa el permiso de escribir.

En principio eso seria todo… pero siempre hay algo más para entender permisos y derechos en Linux… ¿Cómo saber qué cuenta y qué grupo esta asociado a cada documento?

Conocer quién tiene la propiedad de un archivo

Vuelvo al ejemplo original.

Usando el comando:

ls -l novela

Me daba el resultado:

- rwx r-x r-x 1 ezequiel admins 76 2018-05-20 17:18  novela
1  2   3   4  5    6        7    8    9         10  (archivo)

Al fijarme en la columna (6), me dice a que cuenta individual pertenece el archivo. El nombre de lacuenta del propietario en este caso es Ezequiel.

La columna 7 me habla del grupo que tiene acceso al archivo, con esto vemos que el grupo llamado admins tiene acceso a este archivo.

Derechos de propiedad

Cada archivo o directorio puede ser accedido a la vez por un cuenta individual (en inglés user) o por un grupo, y los derechos de propiedad pueden ser asignados a diferentes personas o grupos.

Puedo conocer los derechos de propiedad de propiedad de una cuenta usando el comando:

id (nombre de la cuenta)

El comando identificación también va a decirnos a que grupos pertenece una cuenta.

Intercambiar la propiedad de un archivo o directorio | chown | chgrp

La propiedad de un archivo o directorio puede ser intercambiada. Para usar un ejemplo de esto anterior, la cuenta “Ezequiel” quiere dejar de tener la propiedad del archivo novela, para que la nueva propietaria sea la cuenta “Juliana”.

Eso lo consigo con el comando chown (change ownership o cambiar propiedad). Voy a realizar el cambio de propiedad.

chown Juliana novela

Nada más, la sintaxis es muy fácil.

Por otra parte, digamos que quiero que el grupo admins deje de tener acceso al documento. Quiero que el nuevo grupo con acceso sea ensayistas.

Utilizo ahora el comando chgrp (change group o cambiar grupo)

chgrp ensayistas novela

Queda un detalle más: puedo cambiar quien tiene la propiedad de un grupo usando el comando chown. Digamos que la propietaria del grupo ensayistas pasa a manos de Juliana.

El comando entonces es:

chown juliana:ensayistas novela

Por supuesto, cada uno de esos comandos tiene muchas pequeñas variaciones que estoy dejando de lado en favor de la brevedad. Con esto confió tener los recursos mínimos para poder administrar los permisos de cuentas, archivos y directorios.

Capítulo 3: cinco comandos básicos

Hay cinco comandos que me parece son básicos para empezar con la terminal de Linux: copiar, mover y borrar archivos, crear carpetas y cambiar de directorios.

Usando estos comandos, y combinándolos, puedo tratar de simplificar aun más trabajos que pueden resultar aburridos o repetitivos.

Crear carpetas/directorios con el comando “mkdir”

El comando que se utiliza para crear carpetas es mkdir (make directory, crear directorio).

Por ejemplo para hacer una carpeta llamada “cosas”:

mkdir cosas

Si no especifico un directorio, la carpeta se va a crear en el mismo espacio donde estoy trabajando (current directory). Por ejemplo, si la terminal se encuentra abierta en mi directorio personal, mkdir va a crear la carpeta allí.

Por eso puedo indicar otra dirección absoluta distinta si quiero, por ejemplo:

mkdir /home/gustavo/documentos/cosas

Ahora la carpeta “cosas” va a crearse en mi directorio personal, dentro de la carpeta documentos.

Si lo que necesito es una carpeta con un nombre largo, lo pongo entre comillas:

mkdir “cosas para no borrar”

Tengo la opción de crear más de una carpeta a la vez. Simplemente pongo los distintos nombres uno junto al otro, separados por un espacio:

mkdir cosas textos cuentas planillas

Incluso puedo crear al mismo tiempo diferentes carpetas con variaciones del mismo nombre, por ejemplo con distinto número al final:

mkdir cosas{01,02,03,04,05}

Con ese último ejemplo consigo crear cinco carpetas distintas llamadas “cosas”, cada una con un número diferente al final. Puedo elegir cualquier acompañamiento para que vaya junto al nombre.

Este último ejemplo demuestra de forma sencilla en que forma un comando puede convertir un trabajo tedioso, crear muchas carpetas, en algo sencillo.

Ahora voy a crear un directorio de múltiples niveles. Esto es, una nueva carpeta que dentro contenga una nueva carpeta, que a su vez contenga otra carpeta.

Me interesa crear la carpeta “cartas”, que dentro va a contener una carpeta llamada “agosto”, que va a contener en su interior la carpeta llamada “enviadas”. Para eso la opción -p (por parents directory) es la que tengo que usar:

mkdir -p /home/yo/cartas/agosto/enviadas

Ahora, si agrego la opción -v la terminal me va a decir que acciones acaba de completar.

mkdir -v textos

Por lo que me da una respuesta como: created directory ‘textos confirmando que el directorio fue creado.

Puedo agregar esta opción no importa cuantos directorios estoy creando, sirve más que nada para tener un control de lo que estoy haciendo. Incluso puedo agregarla junto a otras variables, como junto a -p para no tener que revisar directamente si se hizo o no el directorio.

Por otra parte puedo crear el directorio con opciones de seguridad distintas a las que vienen por defecto. Para eso utilizo la opción -m, agregando los números que representan los permisos que necesito.

mkdir -m771 cosas

Por ultimo, voy a borrar un directorio. Ya me estoy cansandp de la carpeta “cosas”, así que…

rmdir cosas

Pero eso comando solamente va a funcionar si el directorio que removemos se encuentra vacío.

¿Y si tengo que borrar cosas más complejas?

Para eso puedo usar el comando rm.

Borrar archivos y directorios con el comando “rm”

El comando rm es el que utilizo para remover directorios o archivos. La sintaxis común, para borrar uno o más documentos, es la siguiente:

rm novela

Puedo indicar más archivos, separando cada uno con un espacio.

rm novela ensayo.txt

O también puedo agregar un camino absoluto a otro directorio donde quiero remover algo:

rm /home/yo/Desktop/ensayo.txt

Ahora si quiero remover un directorio, como la anteriormente mencionada carpeta cosas, la opción que tengo que agregar es:

rm -r cosas

De otro modo, si no agrego el -r (recursive o recursivo) me va a decir que no puede borrar el archivo, porque se trata de un directorio que puede contener archivos en su interior.

Ahora, esto otro es lo más importante. Lo mejor es siempre agregar el prefijo -i para que el comando me pregunte una vez más si acepto borrar el archivo. Esta re pregunta puede ahorrarme muchos dolores de cabeza si estaba a punto de borrar el documento equivocado.

rm -r -i cosas

Puede pasar que un documento no permita que sea borrado. Si el directorio o el archivo esta protegido, tengo que agregar la opción -f para “forzar” su remoción del sistema:

rm -f -i archivo_seguro.txt

Con eso creo cubrir lo mínimo para remover archivos. Ahora, a ver ahora cómo moverlos.

“mv”: mover y cambiar el nombre de archivos y directorios

El comando mv es bastante versátil. Dependiendo en que modalidad sea usado, me permite hacer dos cosas diferentes:

  • mover archivos entre directorios.
  • cambiar el nombre de archivos y directorios.

Voy a empezar moviendo un archivo. Digamos que quiero mover un archivo a un directorio especifico. La sintaxis queda:

mv archivo directorio

Por ejemplo, para mover el archivo ensayo a mi carpeta llamada textos en el escritorio:

mv ensayo /home/escritorio/textos

El directorio tiene que existir, o el comando no va a dar resultados

Puedo especificar también el directorio donde se encuentra del documento seguido por el directorio que es nuestro destino.

mv /home/documentos/ensayo.txt /home/escritorio/textos

Esto ultimo me ayuda si la terminal no se encuentra aparcada en el mismo directorio del archivo que necesito mover.

Modificar el nombre de un archivo:

Ahora para modificar el nombre de un archivo. La sintaxis es:

mv archivo1 nombre2

En este caso el archivo llamado archivo1 pasa a llamarse nombre2.

Pero… ¡cuidado! Si el archivo nombre2 ya existe, al usar el comando anterior no solo su nombre va a cambiar. Su contenido va a ser reemplazado por el de archivo1.

Para que esto no ocurra, agrego la opción -i en el comando, de este modo el sistema va a preguntarme si quiero realmente sobre escribir el documento o no:

mv -i archivo1 nombre2

Lo mismo aplica para cambiar el nombre de directorios. Primero va el nombre original, incluyendo su camino, y luego el nombre modificado

mv /home/documentos/nombre_1   /home/documentos/nombre_2

Si el nombre del directorio no existe, el cambio se registra. Por supuesto si el nombre ya existe, el comando interpreta que estoy moviendo una carpeta dentro de la otra.

En nuestro caso, siguiendo el ejemplo, lo que ocurriría es que se mueve la carpeta nombre_1 al directorio nombre_2.

Cambiar directorio con el comando “cd”

El comando cd es el que se utilizas para movernos por el árbol de directorios de nuestro sistema de archivos.

Tal vez entre estos comandos básicos para la terminal de Linux este sea el más central, teniendo en cuenta que sin usarlo voy a quedarme siempre en la misma carpeta.

Dicho de otro modo, con el comando cd navegamos entre las distintas carpetas.

El uso más básico es el de escribirlo directamente en la consola:

cd

Usar cd de este modo me va a llevar siempre a mi directorio personal.

Pero digamos que quiero ir al escritorio en nuestro directorio personal, y nuestro nombre es… insecto. En ese caso hacemos:

cd /home/insecto/Desktop

También puedo hacerlo más sencillo. Si el directorio Desktop se encuentra en mi carpeta personal (y puedo averiguar que sea así con el comando ls) simplemente puedo escribir:

cd Desktop

Y listo, ya estoy en el directorio del escritorio.

Básicamente para moverte entre directorios, es necesario escribir el comando cd seguido por la dirección a la que voy a ir:

cd nombre del directorio

¿Por qué es importante saber como moverte por los directorios en la terminal?

Muchos comandos funcionan directamente sobre el directorio en el que me encuentro trabajando.

Por ejemplo, resulta mucho más intuitivo borrar un archivo específico si primero me muevo al directorio que contiene dicho archivo. Eso porque por lo general imita el mismo camino que al borrarlo con el ratón: ir hasta el archivo y eliminarlo.

Para moverme entonces utilizo el comando cd.

No siempre es necesario escribir todo el nombre del directorio al que voy a ir.

Digamos que necesito “ir hacia atrás”, retroceder solamente una carpeta. Escribo:

cd ..

Con esto “vuelvo” una carpeta hacia atrás. Digamos que si estabas en la dirección /home/yo/documentos/cosas volvés una carpeta hacia atrás hasta /home/yo/documentos.

¿Cómo saber en que directorio específico me encuentro?

Para eso tené la opción de usar el comando pwd:

pwd
/home/insecto

Tengo que recordar el atajo de auto completar. Si escribo las primeras letras de un directorio, pero hay varios similares, puedo la tecla Tab en el teclado. Ahora la terminal me va a mostrar las distintas variantes del nombre de la carpeta a la que puedo entrar.

El atajo de auto completar puede usarse para otras cosas, por ejemplo para escribir comandos más rápido.

Sin embargo no es la única opción. Desde la terminal puedo indicar la posición de un directorio. Aunque no siempre tengo que escribir la dirección completa.

Por ultimo, creo que es bueno repasar la diferencia entre caminos de directorio relativos y absolutas.

Dirección absoluta: cuando el camino comienza con la barra / (slash) indica que el mismo comienza desde el directorio. Se trata entonces de un “absolute path”, ejemplo:

/home/Gustavo/Desktop/cartas/marzo 

Dirección relativa: es cuando comienza sin la barra / (slash). Siendo más especifico, el relative path indica que el camino comienza en el directorio actual, aquel donde la terminal se encuentra abierta.

Viendo el ejemplo anterior, si me encuentro en el directorio “Desktop” el camino relativo para entrar en el directorio “marzo” es:

cartas/marzo  

Dicho de otra manera, puedo entrar la carpeta “marzo” desde el directorio “Desktop” usando el comando cd directamente:

cd cartas/marzo 

Copiar archivos y carpetas con el comando “cp”

En apariencia el comando cp (copy o copiar) es muy sencillo, con pocas opciones. Pero esas opciones se suman para conseguir una herramienta muy versátil.

En primera mediada utilizo este comando para copiar el contenido de un documento (por ejemplo un documento de texto) dentro de otro documento.

cp ensayo1 ensayo2

En el caso anterior, el texto del documento ensayo1 pasó a copiarse dentro de ensayo2.

Por otra parte, también puedo usar el comando para copiar documentos y pegarlos dentro de un directorio distinto.

cp archivo directorio de destino

Para hacer un ejemplo, en mi computadora voy a copiar el archivo ensayo1 y voy a pegarlo en mi escritorio:

cp ensayo1 /home/gustavo/Desktop

Si quiero copiar el contenido completo de un directorio hacia otro directorio que aun no existe, puedo crearlo agregando la opción -r (recursivo).

cp -r /home/gustavo/Desktop/cosas /home/gustavo/documentos/backup

En resumen la sintaxis general es:

cp “directorio de partida” archivo “directorio de llegada”

Otra vez, esto es muy importante. Al copiar cosas usando la terminal, me arriesgo a sobre escribir cosas sin darme cuenta. Por eso siempre es muy útil agregar la opción -i (de interactive o interactivo) para que la terminal me pida una confirmación extra antes de proceder.

Para repetir un ejemplo anterior, donde copiábamos el contenido de un archivo en otro, ahora me quedaría:

cp -i texto1 texto2

Sin dudarlo estoy dejando afuera otras opciones que pueden leerse en el manual de cp, pero solo con el objetivo de ajustarme a lo que considero mínimo.

Capítulo 4: apagar y reiniciar la computadora usando comandos

Apagar y reiniciar Linux desde la terminal es una de las primeras tareas que me puso en el camino de aprender a usar la linea de comandos.

¿Que puedo decir? Es sencillo de aprender y se puede empezar a usar inmediatamente.

Entonces…

¿Cómo apagar Linux por la linea de comandos?

Para usar estos comandos hay que contar con privilegios sudo de administración.

La sintaxis básica es:

shutdown (opción) (tiempo) (mensaje)

Si quiero apagar el equipo inmediatamente, puedo usar la opción -P y también la -h (es indistinto, aunque -P de “power” es más intuitiva, por decirlo de algún modo). Escribo:

sudo shutdown -P now

En este caso el tiempo que indico es now (ahora). Sin vueltas, la máquina se apaga.

Pero digamos que me gustaría tener algo más de tiempo, y apagar la computadora en 30 minutos. Entonces hacemos:

sudo shutdown -P 30

Si no agrego ninguna opción de tiempo, Linux interpreta que la acción va a llevarse adelante dentro de un minuto.

Por otra parte también es posible agregar una hora específica, en el formato de 24 horas (hh/mm). Digamos que mi intención es apagar la máquina a las 21:47 horas.

sudo shutdown -P 21:47

Cancelar la opción de apagar el sistema

Ya utilizo el comando para apagar la computadora dentro de treinta minutos. Pero me arrepentí y quiero cancelarlo. Puedo hacerlo agregando la opción -c en un nuevo comando:

sudo shutdown -c

Listo, con eso cancelo la orden de apagar que hice la primera vez.

Reiniciar Linux desde la terminal

El prefijo –r indica la opción de reiniciar el sistema.

sudo shutdown -r now

El sistema va a reiniciarse inmediatamente. Pero como antes, también puedo ponerle un tiempo determinado, según necesite.

Poner el sistema en modo halt

El modo halt… no puedo decir que lo utilicé personalmente, y es que no se trata de suspender el equipo.

Halt termina todos los procesos activos y detiene el cpu. Pero luego es necesario reiniciar o apagar manualmente la computadora para que vuelva a levantar. En todo caso, para saberlo:

sudo shutdown -H

Se puede ver que aunque con la opción -h conseguía apagar el sistema, se encuentra muy cerca de la opción -H. De hecho puedo tener el mismo efecto de entrar en modo halt si escribo:

sudo shutdown -halt

Por eso aunque puedo apagar la máquina tanto con el agregado de -P o el de -h, encuentro que el -P de “power” es más fácil de recordar.

Agregar un mensaje al comando shutdown

La opción de agregar un mensaje no es obligatoria. Aunque si hay otras personas usando el mismo sistema, puedo avisarles lo que estoy por hacer para que puedan prepararse. Ejemplo:

sudo shutdown -P 30 “El sistema va a apagarse en media hora”

Ahora se va a mostrar el aviso automático de los “treinta minutos restantes”, junto al mensaje extra.

Si quiero enviar un mensaje general, sin apagar la máquina, puedo agregar la opción -k

sudo shutdown -k 30 “Estoy pensando en apagar el sistema dentro de media hora

Ahora el mensaje se enviá, pero no se genera una orden efectiva para apagar.

Es bueno recordar que de manera automática, 5 minutos antes de que se apague el sistema, el mismo sistema genera una regla para evitar que otras cuentas ingresen su contraseña para usar el equipo.

Reiniciar Linux desde la terminal con el comando reboot

Hay otro comando para darle reinicios a la computadora. Su sintaxis es:

reboot (opción)

La principal diferencia que hay con el comando shutdown -r es que en el caso de halt no puedo especificar tiempo un tiempo para que lleve adelante la acción. Tiene un efecto siempre inmediato.

Entonces si quiero reiniciar la máquina al instante, hago:

sudo reboot 

Pero puedo agregar opciones. El prefijo -f fuerza el reinicio, en caso de que algún programa lo ralentice porque intenta tomarse unos segundos para guardar antes de cerrarse

reboot -f

Algo importante que tengo que recordar es que existen otros dos comandos parecidos a reboot, y que funcionan con argumentos similares.

Estos otros dos comandos son halt y poweroff. El primero detiene la máquina dejándola encendida, el segundo la apaga directamente.

¿Cómo funcionan? Para usar halt:

halt 

y para poweroff:

poweroff

Antes decía que usan argumentos similares. Por ejemplo, en todos los casos puedo usar la opción -f para que el sistema siga el comando independientemente de otros procesos en curso.

Y se pone más complejo. Por ejemplo, puedo reiniciar la máquina con el comando halt si lo acompaño de la opción – -reboot.

halt --reboot 

Puedo conocer cuales son las opciones que comparten los comandos halt, reboot y poweroff en la página de man del comando halt.

Capitulo 5: instalar programas en Linux

Este capítulo es algo general. Las técnicas que reviso tal vez no funcionan en todas las distribuciones GNU/Linux (por ejemplo, las que no usen el comando apt para instalar paquetes).

Sin embargo, teniendo eso en cuenta, creo que cubren de formá mínima lo que se necesita saber para instalar un programa… o al menos para tener una idea de lo que hay que hacer en otras versiones del sistema operativo

Instalar usando el Centro de Software (Software Manager)

Posiblemente el método más rápido de todos.

En el menú principal de Ubuntu y Linux Mint (y seguramente también en otras distribuciones) voy a poder buscar el Centro de Software.

Se trata de una herramienta similar al Play Store de Android, donde voy a encontrar muchas aplicaciones listas para descargar e instalar en mi sistema operativo.

Extremadamente fácil, solamente busco lo que necesito y le doy click en “instalar”.

Todas estas aplicaciones están divididas por categorías, pero también puedo buscarlas por palabras clave. Es una gran forma de conocer nuevos programas.

El único problema de este método es que algunas aplicaciones a veces no cuentan con su última versión.

Pero eso se compensa porque las aplicaciones vienen acompañadas en la mayoría de los casos con comentarios del público. Y una calificación que le dan algunas de las personas que las descargan.

Así que voy a darme cuenta fácilmente cuando alguno de esos paquetes no es la última versión o no funciona del todo como promete.

En ese caso negativo, si la versión en el centro de software esta desactualizada, voy a tener que buscar el programa directamente en su web oficial.

Desde ahí voy a bajarte un archivo de instalación, y eso me lleva al siguiente punto…

Archivos «.exe», no esta vez

Tal vez este sea el detalle más relevante del tema: en GNU/Linux el software ejecutable no viene con una extensión .exe.

En Windows cuando necesitaba instalar un software, instintivamente buscaba el archivo con la extensión .exe y eso es porque sabia que ese es el archivo ejecutable.

Pero en Linux encuentro otra extensión diferente: La extensión “.deb”.

Esta extensión .deb representa a los archivos que pueden ser instalados. Es la extensión utilizada en los sistemas operativos basados en Debian (otra de las distribuciones de GNU/Linux).

Al utilizar Linux Mint o Ubuntu, también utilizo esta extensión. Al ir a la página web de un software y descargar la versión para Linux, voy a tener un archivo con esta extensión.

Darle doble click y listo, voy a empezar a instalar el programa.

Utilizar el Gestor de Paquetes Synaptic

Una opción similar a la que revisé antes del Centro de Software, pero ahora con el Synaptic Package Manager.

Para su uso puede encontrar dentro de las aplicaciones del sistema.

La ventaja es que los programas que voy a encontrar o buscar en el gestor de paquetes se encuentra bien actualizada, e incluso tal vez voy a encontrar algunos que no veía del otro modo.

La desventaja, si es que se puede llamar desventaja, es que es ligeramente más engorroso de usar.

Las aplicaciones vienen ordenadas en “paquetes”. Una vez que encuentro lo que estas buscando, marcá la tilde junto al nombre.

Luego le doy “aplicar” y todo tendría que estar funcionando bien para comenzar a instalarse.

Advance Packaging Tool

El comando apt representa la opción de usar la terminal de comandos para conseguir los programas y las aplicaciones que busco instalar.

El método de la terminal puede parecer complicado al principio, pero con un poco de práctica resulta fácil de llevar adelante.

El comando que voy a estar usando es apt, iniciales que están en lugar de Advance Packaging Tool. O en castellano algo así como la “herramienta avanzada para manejar paquetes”.

Cualquier error en la traducción es propio, claro.

No todas las versiones de GNU/Linux usan este administrador de paquetes. Pero si funciona en Ubuntu y en Linux Mint. En todo caso, siempre puedo revisar si funciona en otros sistemas en particular.

Mejor ahora voy a analizar cómo se utiliza el comando. Vale recordar, su utilización requiere tener privilegios SUDO.

Encontrar paquetes

Cuando quiero instalar un paquete a través de la linea de comando, en mi opinión lo más difícil es conocer el nombre exacto del paquete que estoy buscando.

Los siguientes dos comandos se encargan de solucionar ese aparente problema.

apt-cache search (nombre del paquete)

Con este comando puedo buscar paquetes. Los nombres admiten el uso tanto de mayúsculas como minúsculas.

Ejemplo. Digamos que quiero instalar GIMP, pero no conozco el nombre exacto del paquete.

Utilizo el comando:

apt-cache search GIMP

La consola me va a dar varios resultados relacionados con la búsqueda. Junto a cada resultado hay una breve explicación de lo que hace el software al que se refiere.

Reviso esos resultados y encuentro que uno es:

gimp - GNU Image Manipulation Program

Perfecto, justo lo que estaba necesitando. El paquete que busco se llama “gimp” sin mayúsculas. Es lo que quiero instalar.

Pero digamos que aun tengo algunas dudas. Después de todo no conozco exactamente lo que tiene ese paquete. En ese caso puedo usar el comando:

apt-cache show (nombre del paquete)

Eso me entrega información sobre un determinado paquete, como por ejemplo el tamaño de la instalación y una descripción de lo que hace.

Por ejemplo:

apt-cache show gimp

Eso me devuelve que gimp es un editor de imágenes para manipular fotos, crear dibujos y mucha más información para que me haga una idea precisa de lo que voy a instalar.

Cómo usar el comando apt para instalar paquetes

Para instalar programas utilizo el comando:

sudo apt install (nombre del paquete)

Siendo “(nombre del paquete)” el nombre exacto del software que quiero instalar.

Ejemplo:

sudo apt install gimp

Perfecto, con eso termino de instalar el programa de edición de imágenes GIMP

Un truco extra

Supongamos que quiero instalar varios paquetes que comienzan con el mismo nombre. En este punto también puedo agregar una “wildcard” utilizando un asterisco.

Digamos que escribí:

sudo apt install (nombre del paquete)*

En este caso el “*” indica que quiero instalar todos los paquetes que comienzan con ese nombre.

Ahora bien, con esos pocos comandos puedoo lo básico para encontrar e instalar un programa por medio de la terminal.

Pero hay bastante más. Estos otros ejemplos expanden las tareas que puedo llevar a cabo mediante variaciones del comando «apt«.

Remover paquetes

Ya conozco en que forma instalar, voy ahora a remover o desinstalar paquetes usando comandos.

sudo apt remove (nombre del paquete)

Menciono el paquete que necesito remover de nuestro sistema… y lo remueve.

sudo apt purge (nombre del paquete)

Vemos que agrego la opción purge . Esto hace que también se borren los archivos de configuración que el paquete generó en nuestro sistema.

Ejemplo, digamos que quiero quitar completamente el programa GIMP de mi equipo. Archivos de configuración incluidos. Utilizo entonces:

sudo apt purge gimp

Cómo usar el comando apt para actualizar los paquetes

Estos dos comando son importantes, tanto que se vuelven de uso cotidiano.

Ayudan a mantener el sistema al día respecto a las mejores de software (pequeñas o no) que constantemente van ocurriendo.

sudo apt update

Este comando hace una lectura del directorio /etc/apt/sources.list y luego actualiza los paquetes necesarios.

sudo apt upgrade

Por otra parte, el agregado de la opción upgrade al comando revisa los paquetes instalados, y se encarga de descargar lass actualizaciones que se necesiten. Hay que tener en cuenta que este comando no remueve paquetes y no agrega ninguno nuevo a los programas, solo actualiza los existentes.

Cómo usar el comando apt para aligerar el sistema

Estos otros comandos si son de uso más común. No es mala idea usarlos de vez en nuestra computadora de escritorio para que todo funcione de una manera fluida y sin sobresaltos.

sudo apt clean

Remueve paquetes que no están completos, y también información de paquetes que ya no están instalados.

sudo apt autoclean

Utilizar autoclean libera espacio en el disco vaciando el cache guardado de paquetes en el directorio “/var/cache/apt/archives”.

sudo apt autoremove

Esa última variación remueve paquetes secundarios que se agregaron como parte de la instalación de otros paquetes y que ahora ya no se necesitan.

Algunos otros usos interesantes para el comando apt

Puede ser que estos otros comandos no se utilicen muy seguidos, pero nunca esta de más conocerlos.

apt-cache pkgnames

me entrega una lista de los paquetes instalados en nuestro sistema operativo.

apt-config -v

Muestra información del Advance Packaging Tool que estoy usando en el sistema.

sudo apt-key list

Da una lista de las llaves gpg (gpg keys) de las que el sistema tiene información. Se trata de las “llaves” que traen algunos paquetes para confirmar su autenticidad y origen.

apt-cache stats

Muestra información cuantitativa de los paquetes instalados (cantidad de paquetes, por ejemplo).

apt-cache depends (nombre del paquete)

Este comando me muestra las dependencias de un paquete.

Las dependencias son los paquetes asociados al paquete que estoy buscando. Sin esas dependencias o “paquetes dependientes” ese software no podría funcionar correctamente.

La información depende directamente del paquete buscado, no importa si lo tengo o no instalado actualmente.

Por lo general mi espíritu es “poner el comando primero, lidiar con los problemas generados gratuitamente después”. Pero entiendo que lo mejor es leer pausadamente cada cosa, para ahorrarnos problemas inesperados luego.

Es el momento de revisar el tema de trabajar/administrar cuentas y grupos en Linux, en la forma de un breve apunte lo más conciso posible.

Si recién estas empezando a usar Linux, este tema puede ser algo aburrido. Puedo decirlo por experiencia.

No es que el tema sea aburrido en si mismo, eso depende de cada persona. Pero es aburrido de practicar, en especial si usas tu propia computadora y contás con la suerte de no tener que compartirla con nadie.

Ahora, si compartís tu máquina con alguien más… todo esto puede ser extremadamente útil.

Recordemos que las primeras computadoras eran equipos grandes y únicos, compartidos por muchas personas. Darle a cada quien una identificación especifica era una necesidad.

Como un bonus, administrar cuentas individuales y grupos es útil desde una perspectiva laboral. Si trabajás con Linux en un ámbito académico o profesional, son conocimientos que vas a usar para organizar el sistema.

Capítulo 6: creación y modificación de cuentas en Linux

Cuando establezco una nueva cuenta de usuario en Linux, hay una variedad de opciones que son definidas de manera automática. Son detalles preestablecidos. Por ejemplo: la duración típica para la validez de una contraseña, a menos que se especifique lo contrario, viene predefinida.

Esas condiciones están guardas en un archivo de configuración llamado login.defs, que se puede encontrar en el directorio /etc/.

Si no encuentro el archivo, puede ser que este oculto. Hago clic derecho en la carpeta y marco mostrar archivos ocultos.

Ese archivo contiene las configuraciones para los permisos que van a ser entregados al momento de crear un cuenta, y ese tipo de cosas.

Por ejemplo, ¿Va a crearse automáticamente el directorio personal de la cuenta? ¿Cuál es la mínima longitud de la contraseña?

Esa clase de detalles se puede encontrar y modificar en el archivo de configuración “login.defs”.

Lo importante es recordar eso, con privilegios de administración puedo intervenir este archivo para establecer las condiciones iniciales de cada cuenta.

¿Qué son los privilegios de administración?

Al instalar GNU/Linux, el sistema nos hace crear al menos una cuenta individual acompañada de una contraseña. Esta cuenta obtiene privilegio de “super user”.

Traducción: permisos para hacer cualquier modificación que se me ocurra en el equipo.

Ahora bien, no todas las cuentas tienen los permisos para llevar adelante cualquier acción. Se pueden compartir estos “súper permisos”. Como eso es mucho poder, pudiendo llevar a errores o destrucción, los súper permisos por lo general se limitan al nivel de la administración.

Ahorra bien, voy a tratar de explicar esto mejor con un ejemplo.

Pensemos en un caso. La computadora es utilizada solamente por una persona: yo mismo.

¿Quiero saber cuantas cuentas existe en el equipo en un momento determinado? Para eso utilizo el comando who (¿Quién?) y me dice que cuentas existen con sesión iniciada. También puedo usar el comando w (si, solamente w) para tener una lista más detallada de la misma información.

En todo caso, al correr who la terminal me dice que la cuenta “Gustavo” esta usando el equipo. Si mostrase alguna otra cuenta… empezaría a preocuparme.

En el directorio /etc puedo encontrar el archivo passwd. Si reviso es archivo, voy a encontrar que esta lleno de información… qué no tengo interés de interpretar en este momento. Esa información representan a muchas cuentas individuales.

¿No era que solamente tenia una única cuenta en el equipo? ¿Ya estoy preocupado? Según entiendo, la mayoría de esta cuentas son “pseudo cuentas” que el sistema crea para utilizad diferentes procesos. No se puede iniciar sesión con ellas, ni pueden realizar cambios en el equipo (al menos no cambios por fuera de su función original).

Lo que me interesa es que la primera de estas cuentas se llama root o “raiz”. Es la cuenta con mayor nivel de privilegios.

Entonces llega un punto donde quiero usar un comando que requiere privilegios de raíz o de “super cuenta”. Mi usuario “Gustavo” por lo regular no tiene esos privilegios, si los tuviera activados todo el tiempo me metería en problemas constantemente por mi falta de experiencia.

Lo que necesito es entregarme ocasionalmente permisos de raíz, solamente por algunos minutos hasta terminar la tarea que necesita de ese poder. Ahí es donde entra el comando sudo.

El comando sudo me permite delegar los súper permisos por un breve periodo de tiempo. Lo que hace es “ejecutar un comando como otra cuenta”. En este caso, estoy usando la cuenta “Gustavo” y voy a ejecutar un comando con el nivel de raiz.

Su uso en la terminal es básicamente:

sudo comando

Esto es sudo acompañado del nombre del comando que quiero ejecutar. Ejemplo:

sudo apt update 

La terminal luego me pide una contraseña. En este caso, es la contraseña original que establecí al instalar el sistema operativo: la contraseña de mi cuenta es la contraseña root.

Listo, conociendo es detalle de utilizar el comando sudo, ya conozco lo mínimo para habilitar la mayoría de los ejemplos que siguen.

Si tu sistema GNU/Linux no tiene el paquete sudo lo más seguro es que tenga un comando similar alternativo, o que te permita instalarlo por medio de la terminal.

Trabajar con cuentas individuales Linux

Para crear una cuenta (user) en un sistema operativo GNU/Linux, necesito utilizar en la terminal el comando useradd. Tengo que hacerlo con privilegios de raíz para que funcione, para lo que puedo agregar sudo al comando.

Digamos que quiero hacer una nueva cuenta llamada insecto. Si, el nombre va a ser insecto. Voy a la terminal y escribo:

sudo useradd -m insecto

El comando useradd crea la cuenta llamada insecto. Por otra parte, el parámetro -m crea un directorio personal para la cuenta.

En GNU/Linux cada persona tiene su propio directorio home (directorio personal). Por ejemplo, para la cuenta llamada insecto el directorio personal por defecto lo encuentro en /home/insecto.

Pero puedo crear una cuenta estableciendo su directorio personal en otro lugar si lo necesito. Para eso utilizo la variable -d al momento de crearlo.

Por ejemplo:

sudo useradd -d“/home/cuenta/insecto”insecto

En este caso tengo que incluir el camino de un directorio nuevo. El comando va a crear ese nuevo directorio asignándole el nombre y el nuevo lugar.

Agregar una “fecha de vencimiento” al crear una cuenta:

Tal vez quiero que la cuenta que estoy creando expire en una fecha determinada. Para eso agrego el parámetro -e cuando escribp el comando:

sudo useradd -m insecto -e “2060-02-17”

Dentro del comando agrego la fecha en la cual va a expirar la cuenta. El formato de esa fecha va en “año-mes-día”.

Por otra parte, si no asigno directamente este parámetro, la fecha de vencimiento va a ser la que esta definida en el archivo login.defs del que hablaba antes, ubicado en el directorio /etc/.

Asignar y modificar contraseñas

Cuando se crea una nueva cuenta, por defecto esta no tiene ninguna contraseña y la persona a la que se la asignamos no va a poder entrar.

Cuando establezco una cuenta, puedo asignarle un password si agrego al comando el parámetro -p.

En un ejemplo queda:

sudo useradd -m insecto -p “pass123456

¿Y si no asigno una contraseña desde el primer momento? Puede ser que olvidé ponerle un password.

No pasa nada, se le puede asignar una más tarde. Pero hay que asignar una primera contraseña siempre antes de compartir la cuenta, o la persona no va a poder entrar al sistema la primera vez que lo intente.

Modificar una contraseña para cuentas existentes

Solamente hay dos personas que pueden agregar o modificar una contraseña:

– la persona que es dueña de la cuenta

– alguien que tenga privilegios root dentro del sistema.

El comando para modificar un password o contraseña es

passwd

Por ejemplo, para modificar el password de la cuenta insecto hago:

sudo passwd insecto

Y el sistema me va a pedir que indique la nueva contraseña, y que la confirme.

Un detalle, es que cuando escriba la contraseña la terminal no va a mostrar nada. Me refiero a que aparece como si no estuviera ingresando ninguna contraseña, ni siquiera algo en su lugar como seria “*********”. Esto es para que nadie pueda ver cuan larga es la contraseña estoy ingresando.

Esta medida de seguridad aparece otras veces, por lo que no tengo que asustarme: aunque no tenga confirmación, realmente estoy ingresando la contraseña.

Eliminar cuentas individuales

Para borrar la cuenta de un usuario existe el comando userdel. El comando básico viene acompañado del parámetro -m.

Digamos por ejemplo que ahora quiero borrar el usuario que había creado para insecto. Completp ese trabajo de este modo:

sudo userdel -r insecto

Este comando va a borrar también el directorio que le había asignado a la cuenta con anterioridad, y también la casilla de correos que albergaba dentro del sistema.

Modificar las propiedades de una cuenta

Para esto se utiliza el comando

usermod

Puedo conocer los múltiples parámetros de este comando si escribo en la terminal:

usermod -help

Conociendo los parámetros puedo cubrir muchas tareas con este comando. Entre ellas puedo modificar el directorio personal de la cuenta, suspendela temporalmente, cambiar su fecha de vencimiento, ponerla dentro de grupos y varias cosas más que aun no tuve oportunidad de probar.

Como un ejemplo básico, puedo cambiar el nombre de una cuenta.

Digamos que quiero cambiar el nombre de insecto a uno más común, por ejemplo robot.

sudo usermod -l robot insecto

Agregar la opción -l al comando habilita la opción de hacer una modificación en el nombre.

Trabajar con grupos en Linux

En Linux un grupo es un conjunto de users o cuentas individuales. Los grupos se utilizan por ejemplo para establecer permisos de manera compartida.

Ya que tengo todo lo anterior dominado, voy a ver como crear grupos. Los comandos son bastante similares a los de las cuentas individuales. Mismos resultados, comandos ligeramente diferentes.

Crear un grupo

Pensemos por ejemplo que me interesa crear el grupo ensayos. Para esto utilizo el comando

sudo groupadd ensayos

Agregar cuentas al grupo

Ahora voy a agregar al usuario insecto al grupo ensayos. Escribo el comando:

sudo usermod -a -G ensayos insecto

En la sintaxis del comando anterior, la opción -a dice que estoy agregando a un usuario nuevo sin retirarlo de otro grupo. Y el acompañamiento de -G dice a que grupo lo estoy agregando, en este caso a ensayos.

Modificar un grupo

Los grupos puedo modificarlos con el comando groupmod. Puedo modificar la contraseña o el nombre del grupo por ejemplo, entre otras cosas.

Digamos que quiero cambiar el nombre de ensayos a practica. utilizo la opción -b.

sudo groupmod practica ensayos

Y con eso consigo modificar el nombre.

¿Cómo conocer los grupos existentes?

Encuentro la información de los grupos existentes en el directorio /etc/group

Alternativamente puedo ver la misma lista con el comando:

less /etc/group

¿Y si quiero saber a que grupo pertenece una cuenta específica?

Para eso utilizo el comando id. Por ejemplo, para conocer los grupos al que pertenece el usuario insecto:

id insecto

Eliminar grupos

Una vez más, el comando es muy similar al que se usa para eliminar cuentas individuales. Digamos que quiero borrar al grupo practica. En ese caso hacemos:

sudo groupdel practica

groupdel es el comando que utilizo para eliminar grupos.

Modificar la información de cuentas y grupos sin usar la terminal

En GNU/Linux hay varias maneras de hacer las cosas. Tal vez esta otra forma no sea la más fácil, o es que no tengo mucha práctica siguiéndola, en todo caso me pareció buena idea mencionarla.

Toda la información de las cuentas individuales puede encontrarse en el directorio /etc/passwd y la información de los grupos se almacena en el archivo ubicado en /etc/group.

Tengo la posibilidad de agregar o modificar información trabajando directamente sobre alguno de estos dos archivos según sea el caso.

Por ejemplo en /etc/passwd voy a encontrar la información de cada cuenta individual así:

insecto:x:1001:1001:insecto,,,:/home/insecto:/bin/bash

Lo anterior se puede leer de este modo (cada elemento esta separado por “:” dos puntos)

nombre:contraseña:UID:GID :directorio personal:directorio de la terminal

¿Por qué motivo la contraseña aparece marcada con una x?

Eso es porque la información de las contraseñas de las cuentas individuales se encuentra encriptada en la carpeta /etc/shadow y solo se puede ver mediante privilegios de root.

Alternativamente, la información encriptada de las contraseñas para los grupos la puedo encontrar en /etc/gshadow.

¿Qué significa el número UID?

Este número ID de identificación de cuenta o user ID (UID User Identifier) es usado internamente por Linux para anotar cada cuenta individual.

Algo así como el “documento de identidad”, tiene un nombre y un número especifico.

Lo mismo para GID (Group Identifier), es un número que identifica a cada grupo particular.

Cuando escribo comandos me refiero a cada cuenta individual por su nombre, por ejemplo ya conozco la cuenta “insecto”. Pero internamente el sistema también la reconoce por un UID. En este caso ese es el número 1001.

El número asignado para nuevas cuentas puede ser cualquier cifra a partir de 1000. Si hago una nueva cuenta, va a ser la 1001 y así en adelante. Cada cuenta nueva es un +1.

Por otra parte, el número para la cuenta root es el cero.

La misma explicación corre para el número ID del grupo o group ID. Es la forma interna que tiene el sistema de llevar la cuenta de un grupo.

¿Y la información de los grupos?

En /etc/group voy a encontrar la información de cada grupo de una forma parecida. Si la interpreto de forma separada puedo leer:

nombre del grupo:contraseña del grupo: Grupo ID: cuentas que lo integran

Entonces, ya conozco como modificar las cuentas en la terminal. Pero puedo hacer también las modificaciones en estos archivos de configuración y con algo de práctica llegar a los mismos resultados.

Aunque hay una multitud de pequeños parámetros para modificar, lo mínimo que creo necesario recordar son estros tres comandos principales al momento de trabajar con cuentas individuales:

useradd | Crea una nueva cuenta dentro del sistema.

userdel | Borra una cuenta existente en el sistema.

usermod | Modifica las opciones de una cuenta.

Y para trabajar grupos:

groupadd | Crea un nuevo grupo dentro del sistema.

groupdel | Borra un grupo existente en el sistema.

groupmod | Modifica los detalles de un grupo.

Como siempre, cualquier error que encuentren corre por mi cuenta. ¡No te olvides de mencionarlos en los comentarios!

Voy a seguir actualizando la información cuando aprenda cosas nuevas.

Capítulo 7: encontrar archivos desde la terminal en Linux

¿Cómo encontrar archivos desde la terminal?

Específicamente voy a concentrarme en aprender a usar dos comandos: locate y find.

El comando locate tal vez es el más fácil de aprender, aunque entiendo que no es tan poderoso en sus posibilidades como lo es find.

Comando locate (localizar) en linux

En este caso la búsqueda del archivo se hace dentro de un índice que el sistema crea. Se trata del index, una base de datos que marca el lugar donde cada archivo esta guardado.

Siendo que la búsqueda es en el índice, es muy rápida. Pero también es poco precisa, porque este comando no admite que especifiquemos en que carpeta o lugar del disco hacer la búsqueda.

La hace directamente leyendo todo el índice, buscando la dirección.

Por ejemplo:

locate -i -p nombredearchivo

Agregar la opción -i indica que mi búsqueda no esta limitada por el uso de mayúsculas o minúsculas. Es ideal para los casos donde no recuerdo específicamente como estaba escrito el nombre original.

La opción -p ignora la puntuación y los espacios en el nombre del archivo buscado.

El comando locate funciona bien como una opción de búsqueda rápida. Hay algunas otras pocas variaciones que puedo hacer en este tipo de búsqueda, pero no es mucho.

La terminal me devuelve el resultado de la busqueda, y nada más.

Siempre puedo ver rápidamente la pagina de ayuda del comando escribiendo:

locate -help

Si no tengo resultados usando el comando locate, tal vez es una buena idea actualizar el index/registro. En especial si el archivo que estoy buscando fue creado o movido de lugar muy recientemente.

Puedo actualizar la base de datos del índice con el comando:

sudo updatedb

El comando locate es útil. Pero no admite tantas variables de búsqueda como el otro comando que voy a revisar: find.

Comando find (buscar) en Linux (con ejemplos)

Find es otro comando que permite realizar búsquedas dentro de un sistema operativo GNU/Linux.

Es una herramienta muy versátil, y con un poco de práctica puede reemplazar la interfaz gráfica de búsqueda.

A través de find puedo buscar archivosen base a su nombre. Pero no solamente eso.

Con este comando también puedo especificar en que carpeta o camino hacer la búsqueda. Si no hago específico el lugar de la búsqueda, por defecto la misma se lleva a cabo en el directorio donde tengo “estacionada” la terminal en ese momento.

Más importante aun, ademas puedo especificar que acciones tomar con el resultado obtenido. Si no agrego otras opciones, por defecto solo me muestra el directorio de la búsqueda en la pantalla.

Pero no solo eso, es ultra versátil porque también me permite buscar centrándose en cosas como: el tipo de archivo, su tamaño, su última fecha de modificación, etc.

La búsqueda no se realiza en aquellas carpetas en las que no tengo permiso de acceso.

Cómo buscar archivos por nombre:

La sintaxis de este comando se ve, por ejemplo, de este modo:

find directorio -type f -iname título

Primero necesito especificar el camino al directorio donde quiero hacer la búsqueda.

Con la opción –type f indico el tipo de archivo que busco. La letra f quiere decir “archivos regulares”.

Para mi ejemplo voy a referirme solamente a los archivos regulares, como imágenes o textos. Siempre puedo ampliar el rango para que en el resultado se incluyan directorios, archivos especiales, etc. Por ejemplo la letra d representa “directorio”. Y puedo separar tipos de archivo con una coma, por ejemplo:

-type f,d 

El agregado del la opcion -iname indica que quiero realizar una búsqueda por nombre, y que no voy a hacer distinción entre mayúsculas y minúsculas.

En contraste usar la opción -name distingue entre las dos, y me demanda usar el nombre exacto para tener éxito.

Y por título… ese es el nombre del archivo que voy a buscar.

Entonces el comando funcionando en este ejemplo se puede leer:

find /home/carpeta -type f -iname “textoescrito.odt”

Cómo agregar acciones al comando find

Digamos que quiero encontrar un archivo, luego copiarlo y pegarlo en otra carpeta. Tendría que escribir lo siguiente:

find /home/gustavo/carpeta -type f -iname "textoescrito” -exec mv -v  {} /desktop/cosas/ \;

En la primera parte la terminal busca en la dirección /home/gustavo/carpeta un documento llamado «textoescrito”. Pero ahora con las acciones se pone interesante.

La opción -exec indica que quiero llevar a cabo una acción (ejecutar una acción) con el resultado de la búsqueda.

La opción mv se trata de la acción que voy a realizar. En este caso mover el archivo hacia otra carpeta.

El añadir -v (vervose) me muestra el resultado de la operación mover, una vez realizada.

Los corchetes {} (curly brackets) se refieren al resultado de la búsqueda, en nuestro caso el archivo llamado textoescrito.

El directorio /desktop/cosas/ es el nuevo destino que le voy a dar al documento que quiero mover.

Cierro el comando usando \; y es necesario para que la consola entienda que cierro el comando.

Listo, ahora no solo encuentro un archivo, sino que estoy haciendo nuevas acciones con el resultado. El tiempo de trabajo que puedo ahorrar bien merecen la pena.

Otro ejemplo, digamos que quiero encontrar y borrar un archivo rápidamente. Hago:

find /home/carpeta -type f -iname "textoescrito” -exec rm {} \;

Lo que agrego es:

-exec: ejecutar

Con rm: pido remover el archivo

{} es el resultado de la búsqueda.

Y \; cierra el comando.

O más rápido aun, puedo agregar la opción delete.

find /home/carpeta -type f -iname "textoescrito” -delete

Y listo. Hay que tener en cuenta que todo esto no se refiere solamente a carpetas o archivos individuales. Puedo usar el comando find para encontrar muchos archivos a la vez, y luego realizar diferentes acciones con ellos.

Capítulo 8: comandos para modificar texto

¿Comandos para comparar archivos? ¿Eliminar duplicados? En este apartado extra menciono algunos otros comandos interesantes, que puse en un apunte diferente pero que sirven para conocer más sobre la terminal de Linux.

Este es el enlace:

– Comandos para trabajar texto en la terminal de Linux

Capítulo 9: Cron, Crontab y Cronjob

Este capítulo es bastante importante, pero lo dejé en un apunte separado para no hacer más larga esta guía.

Mediante la utilidad Cron es posible agendar comandos y tareas para que se ejecuten en el futuro. Eso me permite planear nuevas tareas para el sistema,

Toda la información sobre eso se encuentra en el siguiente enlace:

– Cómo usar cron y crontab en Linux

Capítulo 10: revisar, buscar y terminar procesos en Linux

En Linux un proceso quiere decir un programa en ejecución. Esto incluye entre otra cosas los comandos, e incluso la terminal misma.

Un proceso consume recursos, y a veces deja de funcionar correctamente. Vamos a revisar como conocer cuantos recursos esta utilizando cada uno y como terminarlos de ser necesario.

Revisar los procesos en ejecución con el comando ps

Lo más importante que tengo que conocer para todo este apartado es el comando “ps”.

NAME

ps – report a snapshot of the current processes.

manual de ps

El comando “ps” muestra una captura en la terminal con la información de los procesos activos. Se trata de una captura porque la información no se actualiza en tiempo real, tenemos que invocar el comando cada vez que necesitamos los datos.

El primer uso que puedo hacer el comando es acompañado de la opción “-e” (también funciona con “-a”) que muestra todos los procesos:

ps -e

Y esto me devuelve una larga lista. No es necesario abrumarse con toda la información, si revisamos una linea de todos estos datos tenemos:

PID   TTY   TIME       CMD
6691   ?    00:00:05   gimp-2.10

PID es el número de identificación que el sistema operativo le da a un programa en ejecución en un momento determinado. Si quiero interactuar con un proceso específico puedo hacerlo directamente utilizando ese número.

CMD (Command) es el nombre del proceso. Es bueno para que podamos conocer que el nombre programa, pero para interactuar necesitamos revisar cual es su PID en ese momento.

Y es importante recordar, los procesos son mostrados en el orden en que fueron invocados.

Si quiero conocer todavía más datos de todos los procesos en ejecución, puedo usar el comando ps de la siguiente forma:

ps aux

Lo que me devuelve como antes una lista completa de todos los programas en uso, pero con más detallada información.

USER  PID  %CPU  % MEM  START  TIME  COMMAND
Qqu  6691   0.3    0.7 15:37  0:05  gimp-2.10

Bueno, realmente se nos aparecen más datos que estos, pero estoy resumiendo los que considero más importantes para el caso.

Entre esos datos tengo el porcentaje de memoria utilizado por el proceso, el porcentaje de uso del procesador, el nombre de la cuenta que invoco al programa y el horario en el que lo hizo.

Conocer el proceso que más recursos del sistema consume

Al utilizar el comando “ps”, lo que tenemos es algo así como la captura de un momento de la información.

Pero para conocer los datos en tiempo real, puedo usar el comando “top”.

NAME
top – display Linux processes

manual de top

Lo más importante para saber en este caso es que el comando “top” se mantiene en ejecución, y nos informa de como se van modificando los procesos en tiempo real. Y los programas aparecen ordenados empezando por aquellos que más recursos están utilizando.

Si quiero dejar de ejecutar “top” puedo presionar la tecla “q” para volver a utilizar la terminal.

Ademas de los datos que el comando “ps” nos enseñaba, este otro también nos dice el total de procesos y en que estado se encuentran.

Entre esos datos vamos a ver que dice la palabra “zombie”. Si un proceso esta en ese estado zombie, quiere decir que el programa esta funcionando de forma inusual o que dejó de funcionar.

Cómo terminar un proceso en Linux

Para terminar un proceso tengo el comando “kill”.

NAME
kill – send a signal to a process

manual del comando kill

Este comando le envía una “señal” a un proceso. Estas señales acompañan al comando como una opción. Y aunque existen bastantes señales posibles, en este momento no vamos a revisar todas.

Para cerrar completamente un programa, utilizo la señal “-9” que termina completamente un proceso. Lo hago usando también el PID del programa, de esta forma por ejemplo:

kill -9 19463

De esta forma estoy terminando el proceso señalado por el número de identificación “19463”.

Por otra parte mientras se esta ejecutando el comando top, puedo presionar la letra “k” y se me va a pedir que ingrese un número PID. Puedo de esa forma puedo terminar un proceso directamente mientras recibo su información de uso en tiempo real.

Conclusión:

Con esto termina la guía mínima para empezar con la terminal de Linux.

Por su carácter de mínima, la guía deja mucho material afuera. Sin embargo considero que es suficiente, al menos porque tengo que poner el punto de cierre en alguna parte.

De todas maneras poco a poco voy a ir modificando el texto, arreglando o expandiendo distintas cosas según encuentro que puedo mejorarlas.

¿Te resultó de utilidad el material? ¿Encontraste muchos errores? Enviame un correo electrónico o comentario para que pueda mejorar el texto.

La seguimos en el próximo apunte.

Recursos:

Página del “Proyecto de documentación de Linux” con información sobre el filesystem (en inglés)

Página man para el comando find (en inglés).

Sitio para el manual del comando locate (en inglés).

Sitio del manual para usar el comando apt-get (en ingles, para Ubuntu)

Una man page en inglés para el comando apt.

Una página del manual del comando apt en castellano.

Manual del comando useradd (en inglés)

Página man del comando passwd (en inglés).

Manual de comando userdel (en inglés).

Manual para el comando usermod (en inglés).

Sitio del manual para el comando groupadd (en inglés).

Manual del comando grupmod (en inglés).

Página del comando less (en inglés).

Sitio del manual para el comando id (en inglés).

Manual del comando groupdel (en inglés).

Sitio del editor de texto Nano

Página man del comando mkdir (en inglés).

Manual para el comando rm (en inglés).

Sitio web con el manual para el comando mv (en inglés).

Página de ayuda sobre el comando cd (en inglés).

Página man del comando cp (en inglés).

Página man para el comando shutdown (en inglés)

Sitio man para el comando halt (en inglés)