Práctica 1 - Línea de Comandos I#
El terminal es el software del sistema operativo que permite introducir datos en el ordenador y obtener la salida de los diferentes programas.
En toda instalación de GNU/Linux (y en general de cualquier sistema operativo) existe una aplicación de terminal o un emulador gráfico de la misma.
En nuestro sistema operativo de referencia, podemos utilizar LXTerminal, disponible en
el menú de Aplicaciones -> Herramientas del sistema.
¿Qué es un comando?#
Un comando es un programa que puede ser ejecutado desde el terminal, que acepta una serie de argumentos y produce una salida específica o bien provoca un cambio determinado en el sistema.
Estructura de un comando#
Un comando consta de su propio nombre, argumentos y, de manera opcional, opciones:
command [--option=value] [-f] [argument1 argument2 ...]
commandsería el nombre del comando. Más adelante veremos muchos ejemplos.--optiony-fserían opciones. Normalmente las opciones tienen 2 versiones, la larga, que suele anteponer dos guiones, y la corta, que sólo antepone uno. Las opciones modifican el modo normal de funcionamiento de un comando.argument1yargument2son los argumentos. En muchas ocasiones no es necesario especificarlos porque toman valores por defecto.
Habitualmente, todos los comandos tienen la opción --help y -h, que permiten obtener
la ayuda del comando, donde nos explican las diferentes opciones y argumentos que acepta
dicho comando.
Leer el manual#
Aunque como se ha explicado anteriormente, todos los comandos pueden proporcional ayuda sobre sus propias opciones y argumentos, pero en algunas ocasiones se necesita mucha más información, ya que algunos comandos pueden necesitar ficheros de configuración, utilizar variables de entorno, producir ficheros de salida y un largo etcétera.
Existe un comando específico para solicitar más información sobre otros comandos: man.
El manual del terminal permite acceder a una completa página de ayuda sobre el comando solicitado, con las diferentes opciones, argumentos o el formato de los mismos. También si el programa utiliza variables de entorno, información de cómo reportar bugs o la licencia del mismo.
La navegación por las páginas del manual puede resultar poco intuitiva al principio. Aquí algunos trucos:
Flecha Arriba, Flecha Abajo, Av. Pág, Re. Pág permiten subir y bajar por la página.
q termina la ejecución del comando
man./ permite buscar una cadena en el documento actual. Una vez en modo búsqueda, se puede usar n o N para buscar hacia abajo o hacia arriba en el documento, respectivamente.
Por ejemplo, abre la página del manual del comando date y busca cómo se especifica el
formato de salida del comando:
Ejecuta
man date.Pulsa la tecla /.
Escribe la cadena a buscar formato.
Pulsa n hasta encontrar la sección donde se explica el formato.
Nota
Estos atajos de teclado explicados para navegar por las páginas del manual también
son válidos para navegar por cualquier fichero utilizando el comando less que se verá
más adelante.
Familiarizándonos con el sistema de archivos#
El sistema de archivos es la parte del sistema operativo que permite interactuar con los dipositivos de almacenamiento de nuestra máquina.
El primer directorio que debemos conocer en GNU/Linux es el raíz o root: /. En ese
directorio suele montarse un dispositivo de almacenamiento, normalmente una partición
de un disco duro. Dentro de ese directorio suelen existir los siguientes:
/boot: contiene la configuración de arranque, así como las imágenes del kernel./dev: contiene toda una estructura virtual de directorios y ficheros que representan a los diferentes dispositivos presentes en la máquina./etc: la configuración de los servicios instalados en el sistema./home: contiene los directorios personales de los usuarios. En la máquina virtual proporcionada puedes encontrar/home/alumno, que es donde trabajarás./mediay/mnt: rutas donde suelen montarse, según la distribución, los dispositivos de caracter temporal, como memorias USB o discos duros externos./opt: ruta donde se instalan aplicaciones de terceros./proc: estructura virtual de directorios y ficheros con información relativa a los programas en ejecución./root: directorio personal del usuarioroot, que es el administrador del sistema./run: estructura virtual de directorios y ficheros con datos temporales de procesos en ejecución./srv: directorio donde se almacenan ficheros que serán servidos a otros sistemas (en desuso)./sys: estructura virtual con archivos utilizados por el propio sistema./tmp: directorio temporal. Dependiendo de la configuración, puede ser volatil (se pierde tras cada reinicio) o persistente./usr: directorio donde se instalan todos los programas del sistema operativo./var: ruta donde se almacenan todos los ficheros variables, como las bases de datos, ficheros de log, cachés de ficheros…
Nota
Con «estructura virtual» se hace referencia a toda una jerarquía de ficheros y directorios que son creados en el sistema a nivel lógico, pero que no representan a directorios ni ficheros almacenados en ningún disco duro u otro almacenamiento.
Trabajando con el sistema de archivos#
En muchas ocasiones necesitamos consultar el contenido de archivos, modificarlos, visitar otros directorios, ejecutar comandos en diferentes rutas… Para ello debemos conocer los comandos básicos para hacer consultas al sistema de archivos, cambiar el directorio de trabajo, crear, modificar y borrar archivos, copiarlos o moverlos a diferentes directorios.
pwd: muestra el directorio de trabajo actual.ls: lista los ficheros y directorios. Si pasamos una ruta, nos mostrará el listado correspondiente a dicha ruta.cat: muestra el contenido de un archivo.cd RUTA: permite cambiar el directorio de trabajo actual. Si no pasamos una ruta, se configurará el directorio personal del usuario. Si en lugar de una ruta usamos el carácter-, nos permite volver al directorio de trabajo anterior.mkdir DIRECTORIO: crea un nuevo directorio.rmdir DIRECTORIO: elimina un directorio (siempre que esté vacío).rm RUTA: elimina un archivo.Con
-rpermite eliminar un directorio con sus subdirectorios y archivos recursivamente.
touch ARCHIVO: crea un archivo vacío o actualiza su fecha de acceso si ya existe.cp ORIGEN DESTINO: copia un archivo a otra ruta o directorio.mv ORIGEN DESTINO: mueve un archivo a otra ruta o directorio (puede usarse para renombrar ficheros).
Rutas absolutas y relativas#
Cuando hablamos de rutas del sistema de archivos, podemos referirnos a ellas de manera absoluta, dando la ruta completa hasta el fichero o directorio, o de forma relativa, donde sólo damos una parte de la ruta, relativa al directorio actual.
¿Y cuál es el directorio actual? Cuando estamos en un terminal, podemos consultarlo usando
el comando pwd. Cuando abrimos un terminal, el directorio de trabajo inicialmente es el
directorio personal (o «home») del usuario (/home/alumno, por ejemplo).
Siempre que se especifique una ruta cuyo primer carácter es una / se trata de una ruta
absoluta. Cuando empieza por cualquier otro carácter, se tratará de una ruta relativa al
directorio actual.
También hay algunos especificadores de directorio especiales:
~: hace referencia el directorio personal del usuario..: hace referencia al directorio actual de trabajo...: hace referencia al directorio «anterior» o «padre» del actual.
Por ejemplo, si abrimos el terminal, nuestro directorio de trabajo será /home/alumno. La
ruta absoluta /var/log y las relativas ../../var/log o ~/../../var/log son
equivalentes y hacen referencia al mismo directorio.
Nota
Presionando el Tab, la terminal completará automáticamente el nombre de tu comando o ruta. En caso de que haya más de una opción, presionando dos veces el Tab se muestran todas las opciones posibles.
Permisos#
En todo sistema operativo, los ficheros del sistema de archivos tienen asignados una serie de permisos que le indican al sistema qué usuarios pueden realizar las diferentes operaciones sobre cada fichero o directorio.
En GNU/Linux, los permisos se dividen en 3: lectura (read), escritura (write) y ejecución (execution). A su vez, cada permiso se puede definir de forma diferente para 3 «roles» diferentes de usuario: el usuario propietario del archivo, usuarios miembros del grupo propietario del archivo y el resto de usuarios (no son el propietario ni miembros del grupo propietario).
Para consultar los permisos de un fichero, puedes usar el comando ls -l (consulta en el manual
el significado completo de su salida).
Ejecuta en tu terminal ls -l /etc/hosts:
$ ls -l /etc/hosts
-rw-r--r--. 1 root root 185 Dec 16 17:00 /etc/hosts
En este caso, el primer carácter nos indica que no se trata de ningún tipo especial de fichero;
los 3 caracteres siguientes (rw-) nos indican los permisos asignados al usuario propietario
del archivo; los 3 siguientes (r--), los permisos del grupo propietario y, los 3 siguientes
(también r--) los permisos para otros usuarios. Tras eso, podemos ver también el nombre
del usuario y el grupo propietario (usuario root y grupo root).
Resumiendo, este fichero únicamente tiene permisos de lectura y escritura para el usuario
root y de lectura para todos los demás usuarios, tanto si son del grupo root como si no.
La manera de modificar los permisos de un fichero es mediante el comando chmod:
chmod MODE PATH
Este comando nos obliga a pasar, primero, el modo que queremos configurar para el fichero, y después, su ruta.
El modo se puede definir a través de caracteres o a través de su versión octal, que no es si no una representación numérica de los 3 grupos de permisos que queremos configurar para el fichero.
En la siguiente imagen tienes una explicación de cómo se traducen los permisos entre el modo textual y octal:
Figura 1 Conversión de permisos#
Ejercicio#
Para asentar lo visto durante esta sesión, vamos a realizar una serie de ejercicios prácticos usando un terminal, la línea de comandos y algunos de los comandos vistos anteriormente:
Comprueba si en el directorio
/de tu máquina hay algún fichero o directorio adicional a los mencionados en esta sesión.Solución
Aparecen los siguientes elementos:
bininitrd.imgeinitrd.img.oldlib,lib32ylib64lost+foundsbinvmlinuzyvmlinux.old
La mayoría son enlaces simbólicos que se mantienen por compatiblilidad con versiones más antiguas.
initrd.imgyvmlinuzson enlaces a las imágenes de arranque y del kernel.lost+foundes el directorio donde se recuperan archivos corruptos cuando se hacen comprobaciones en cualquier sistema de ficheros de tipo “ext”.Busca en la ayuda o el manual del comando
lscómo mostrar los detalles de cada archivo y comprueba el tamaño del fichero/etc/fstab.Solución
Usar
man lsols --helppara encontrar que la opción adecuada esls -ly ejecutarls -l /etc/fstab$ ls -l /etc/fstab -rw-r--r-- 1 root root 826 feb 8 11:45 /etc/fstab
Crea un directorio
licensesdentro de tu directorio de usuario.Solución
mkdir licensesBusca en la ayuda o el manual del comando
cpcomo hacer una copia de un directorio de forma recursiva y copia el directorio/usr/share/common-licensesal directorio creado en el paso anterior. ¿Has obtenido el resultado esperado?Solución
Buscar en el manual de
cpo encp --helpel modo recursivo y usarlo concp -r:cp -r /usr/share/common-licenses licensesAl hacerlo así, se creará un directorio
licenses/common-licenses. Razonar por qué ocurre esto, cuál era el resultado esperado y cómo conseguirlo.Usando
lscon las opciones necesarias, compara los permisos y propietarios de los directorios/usr/share/common-licensesy el recién creadolicenses/common-licensesen tu directorio de usuario. ¿Qué diferencias encuentras? ¿A qué crees que se deben?Solución
Ejecutar
ls -len los 2 directorios indicados y comprobar que la principal diferencia es el propietario de los archivos y las fechas.Cambia el directorio de trabajo a
licensesy, desde ahí, crea un directorioGPLsen tu directorio de usuario.Solución
cd licensesymkdir ~/GPLsomkdir ../GPLsCopia los 4 ficheros que empiezan por
GPLdel directoriolicenses/common-licensesal directorioGPLs.Solución
cp common-licenses/GPL* ../GPLs/Cambia al directorio
GPLsy modifica los permisos para que sólo pueda leer o modificar los ficheros el usuario (es decir, quitar permisos de lectura y escritura al resto).Solución
cd ~/GPLsychmod 600 *ochmod go-rwx *Borra el directorio
licensescon todos sus subdirectorios y ficheros.Solución
cdyrm -fr licenses. Intentarlo sin hacer antes elcd, para que se vea que se elimina y quepwdlo sigue mostrando como directorio de trabajo, pero que no podemos hacer nada dentro.Borra el directorio
GPLscon todos sus subdirectorios y ficheros para dejar limpio el directorio de usuario.Solución
cdyrm -fr GPLs
Nota
Para limpiar el contenido de la terminal emplear el comando clear o pulsar la combinación de teclas Ctrl l.