Manejo de terminal de Linux (Programación II, Dpto. de Informática e Ingeniería de...

51
Programaci´ on II – Grado de Ingenier´ ıa en Inform´ atica Dpto. de Inform´atica e Ingenier´ ıa de Sistemas Universidad de Zaragoza Manejo de terminal de Linux El sistema operativo GNU/Linux (o Linux) es un tipo de software que permite in- teractuar con el hardware de un ordenador y con otras aplicaciones, como por ejemplo editores de texto, videojuegos, navegadores de Internet, etc. Linux incorpora un inter- faz gr´ afico similar a otros sistemas operativos como Windows o macOS, permitiendo al usuario un manejo sencillo y r´ apido de las aplicaciones instaladas en el ordenador. Adem´ as de un manejo a trav´ es de ventanas gr´ aficas, que permiten a cualquier usuario experimentado o no su uso, el sistema operativo Linux tambi´ en se caracteriza por ser manejable a trav´ es de una l´ ınea de comandos (llamada tambi´ en terminal de comandos). Linux tiene su origen en el sistema operativo UNIX, que apareci´ o en los a˜ nos se- senta, y fue desarrollado por Dennis Ritchie y Ken Thompson, trabajadores de los Laboratorios Telef´ onicos Bell. A principios de los noventa, un estudiante de inform´ atica de la Universidad de Helsinki, llamado Linus Torvalds, empez´ o a desarrollar como afici´ on las primeras l´ ıneas de c´ odigo de lo que ser´ ıa el sistema operativo Linux. Desde sus comienzos, Linux se dise˜ o para ser un sistema multi-tarea (es decir, se pueden ejecutar varios procesos de manera concurrente en el sistema) y multi-usuario (es decir, permite que diferentes usuarios puedan usar la m´ aquina sin que haya interferencias entre ellos). A diferencia de otros sistemas operativos, no hay una gran empresa o compa˜ ıa detr´ as de su desarrollo. En concreto, una de las caracter´ ısticas principales de Linux es que gran parte de su desarrollo y mantenimiento lo realizan voluntarios de manera altruista. Actualmente, el sistema operativo Linux se ofrece en multitud de versiones diferen- tes, llamadas distribuciones. Cada distribuci´ on est´ a pensada para un p´ ublico objetivo o para realizar actividades muy espec´ ıficas. Independientemente de la distribuci´ on, todas comparten el mismo n´ ucleo de sistema operativo y sobre todo, los mismos principios del movimiento del software libre: cualquier programa inform´ atico ha de ser distribui- do con su c´ odigo fuente, y se puede realizar cualquier modificaci´ on sobre este c´ odigo siempre y cuando esta modificaci´ on sea a su vez tambi´ en liberada. La raz´ on fundamental del software libre es que cualquier persona pueda acceder al software, independientemente de su solvencia econ´ omica. A d´ ıa de hoy, Linux es muy usado en servidores de ordenadores y en ordenadores de escritorio (especialmente, por usuarios de car´ acter m´ as t´ ecnico). Seg´ un diversas estad´ ısticas consultables por Internet, la cuota de mercado de Linux es actualmente cercana a un 2.4 %. Esta actividad tiene como objetivo principal que se pierda el miedo a la “terminal negra” de un sistema operativo como GNU/Linux (o simplemente Linux, por acortar). Distribuido bajo licencia CC BY-NC-SA. ( Ricardo J. Rodr´ ıguez) https://creativecommons.org/licenses/by-nc-sa/3.0/es/ 1 de 51

Transcript of Manejo de terminal de Linux (Programación II, Dpto. de Informática e Ingeniería de...

Page 1: Manejo de terminal de Linux (Programación II, Dpto. de Informática e Ingeniería de ...webdiis.unizar.es/asignaturas/PROG2/doc/programacionCPP/... · 2020-02-12 · Manejo de terminal

Programacion II – Grado de Ingenierıa en InformaticaDpto. de Informatica e Ingenierıa de Sistemas – Universidad de Zaragoza

Manejo de terminal de Linux

El sistema operativo GNU/Linux (o Linux) es un tipo de software que permite in-teractuar con el hardware de un ordenador y con otras aplicaciones, como por ejemploeditores de texto, videojuegos, navegadores de Internet, etc. Linux incorpora un inter-faz grafico similar a otros sistemas operativos como Windows o macOS, permitiendoal usuario un manejo sencillo y rapido de las aplicaciones instaladas en el ordenador.Ademas de un manejo a traves de ventanas graficas, que permiten a cualquier usuarioexperimentado o no su uso, el sistema operativo Linux tambien se caracteriza por sermanejable a traves de una lınea de comandos (llamada tambien terminal de comandos).

Linux tiene su origen en el sistema operativo UNIX, que aparecio en los anos se-senta, y fue desarrollado por Dennis Ritchie y Ken Thompson, trabajadores de losLaboratorios Telefonicos Bell.

A principios de los noventa, un estudiante de informatica de la Universidad deHelsinki, llamado Linus Torvalds, empezo a desarrollar como aficion las primeras lıneasde codigo de lo que serıa el sistema operativo Linux. Desde sus comienzos, Linux sediseno para ser un sistema multi-tarea (es decir, se pueden ejecutar varios procesosde manera concurrente en el sistema) y multi-usuario (es decir, permite que diferentesusuarios puedan usar la maquina sin que haya interferencias entre ellos). A diferencia deotros sistemas operativos, no hay una gran empresa o companıa detras de su desarrollo.En concreto, una de las caracterısticas principales de Linux es que gran parte de sudesarrollo y mantenimiento lo realizan voluntarios de manera altruista.

Actualmente, el sistema operativo Linux se ofrece en multitud de versiones diferen-tes, llamadas distribuciones. Cada distribucion esta pensada para un publico objetivo opara realizar actividades muy especıficas. Independientemente de la distribucion, todascomparten el mismo nucleo de sistema operativo y sobre todo, los mismos principiosdel movimiento del software libre: cualquier programa informatico ha de ser distribui-do con su codigo fuente, y se puede realizar cualquier modificacion sobre este codigosiempre y cuando esta modificacion sea a su vez tambien liberada.

La razon fundamental del software libre es que cualquier persona pueda acceder alsoftware, independientemente de su solvencia economica. A dıa de hoy, Linux es muyusado en servidores de ordenadores y en ordenadores de escritorio (especialmente,por usuarios de caracter mas tecnico). Segun diversas estadısticas consultables porInternet, la cuota de mercado de Linux es actualmente cercana a un 2.4 %.

Esta actividad tiene como objetivo principal que se pierda el miedo a la “terminalnegra” de un sistema operativo como GNU/Linux (o simplemente Linux, por acortar).

Distribuido bajo licencia CC BY-NC-SA. (© Ricardo J. Rodrıguez)

https://creativecommons.org/licenses/by-nc-sa/3.0/es/

1 de 51

Page 2: Manejo de terminal de Linux (Programación II, Dpto. de Informática e Ingeniería de ...webdiis.unizar.es/asignaturas/PROG2/doc/programacionCPP/... · 2020-02-12 · Manejo de terminal

Manejo de terminal de LinuxProgramacion II

Dpto. de Informatica e Ingenierıa de Sistemas

En este documento encontraras informacion sobre la terminal, y aprenderas a realizarun manejo basico del sistema a traves de la propia terminal mediante una serie de tareasintercaladas a lo largo del documento. Ademas, aprenderas diversas herramientas yaincorporadas por defecto en el sistema y que te permitiran hacer un uso mas exhaustivode la terminal.

Todo lo que vas a aprender aquı puedes aplicarlo en tu propio ordenador (si estasejecutando algun tipo de sistema operativo basado en Linux) o bien descargarte unamaquina virtual de Linux proporcionada por el profesor en el siguiente enlace: https://drive.google.com/file/d/1jcsTapooEWaleuuQjfYWj-q5hUm-PsZw/view?usp=sharing

Avanza en la lectura de este documento y realiza las actividades que se proponganen cada parte, para ayudarte en la asimilacion de conceptos. Primero, encontraras unaserie de instrucciones relativas al despliegue de la maquina virtual en tu equipo. Puedessaltarte esta parte e ir directo a la siguiente si usas tu propio maquina. Despues, eldocumento se estructura de la siguiente manera:

Indice

1 Conociendo la terminal 5

2 Estructura de directorios en un sistema operativo GNU/Linux 8

3 Secuencia de arranque de un sistema operativo GNU/Linux 12

4 Navegacion entre directorios 13

5 Manipulacion de archivos y directorios 22

6 Trabajando con los comandos 31

7 Redireccion 36

8 Permisos 42

9 Edicion de textos 50

Despliegue de la maquina virtual

Para las actividades que vamos a realizar en el curso tienes que hacer uso de lamaquina virtual proporcionada. Esta maquina virtual incorpora el sistema operativoDebian 10 buster, con el gestor de ventanas XFCE4. El gestor de ventanas es lo quepermite a un usuario interactuar con el sistema operativo a traves de ventanas graficas.Por ejemplo, el gestor de ventanas del sistema operativo de Windows se denomina“Explorer”. En esta maquina virtual se ha optado por XFCE4 dado que es uno delos gestores de ventanas mas ligeros (es decir, que consume menos recursos) de Linux.

2 de 51

Page 3: Manejo de terminal de Linux (Programación II, Dpto. de Informática e Ingeniería de ...webdiis.unizar.es/asignaturas/PROG2/doc/programacionCPP/... · 2020-02-12 · Manejo de terminal

Manejo de terminal de LinuxProgramacion II

Dpto. de Informatica e Ingenierıa de Sistemas

Figura 1: Importacion de la maquina virtual en VirtualBox.

Otros gestores de ventanas de Linux que quizas conoces son GNOME o KDE, pornombrar algunos.

Lo primero que has de hacer es desplegar la maquina virtual proporcionada. Una vezdescargado el archivo, descomprımelo (esta comprimido con zip). Si la descompresiones exitosa, se creara un fichero con nombre “Curso Programacion-II.ova”.

Ahora, abre el programa “VirtualBox”. VirtualBox es un software gratuito que per-mite virtualizar otros equipos. Puedes descargarlo de su pagina web oficial: https://www.virtualbox.org/. Una vez instalada la aplicacion y abierta, en el menu de laaplicacion selecciona “Archivo → Importar aplicativo”, como se muestra en la Figu-ra 1. En las imagenes que se muestran a continuacion veras los textos de la aplicacionVirtualBox sobre el sistema operativo macOS y en ingles; en tu caso, seguramenteestaran en espanol.

En la ventana de importacion, selecciona la maquina virtual descomprimida (fichero“Curso Programacion-II.ova”) y pincha el boton “Continuar”. En la siguiente ventanapuedes cambiar la configuracion de la maquina virtual. Deja todo como esta, y dale alboton “Importar”, como se muestra en la Figura 2.

Para acabar el proceso de importacion, te pedira que aceptes la licencia de la maqui-na virtual proporcionada. Dale al boton “Aceptar” en la ventana que aparece y dejaque VirtualBox acabe de importar la maquina virtual (tardara unos minutos). Cuan-do acabe la importacion, puedes borrar tanto el fichero descargado como el ficherodescomprimido. Tras acabar, te aparecera una nueva maquina virtual lista para serejecutada en el menu de maquinas virtuales disponibles de VirtualBox (algo similar alo que se muestra en la Figura 3).

Tras esto, ya puedes proceder a inicializar la maquina virtual. Una vez arranques lamaquina virtual, el sistema GNU/Linux te pedira usuario y contrasena para entrar:

Usuario: alumno

Contrasena: alumno

La contrasena del usuario root es toor pero NUNCA deberıas de iniciar sesioncon este usuario. Puedes hacerlo desde una terminal si lo deseas (aprenderas elcomando posteriormente), pero no deberıas de tener ninguna necesidad a no ser quese especifique lo contrario en esta actividad.

3 de 51

Page 4: Manejo de terminal de Linux (Programación II, Dpto. de Informática e Ingeniería de ...webdiis.unizar.es/asignaturas/PROG2/doc/programacionCPP/... · 2020-02-12 · Manejo de terminal

Manejo de terminal de LinuxProgramacion II

Dpto. de Informatica e Ingenierıa de Sistemas

Figura 2: Configuracion de la maquina virtual importada en VirtualBox.

Figura 3: Listado de maquinas virtuales en VirtualBox.

4 de 51

Page 5: Manejo de terminal de Linux (Programación II, Dpto. de Informática e Ingeniería de ...webdiis.unizar.es/asignaturas/PROG2/doc/programacionCPP/... · 2020-02-12 · Manejo de terminal

Manejo de terminal de LinuxProgramacion II

Dpto. de Informatica e Ingenierıa de Sistemas

Figura 4: Abriendo el “Emulador de Terminal” de XFCE4.

1. Conociendo la terminal

Una lınea de comandos (tambien llamada shell en ingles), se refiere a un programaque recoge los comandos introducidos por teclado por el usuario y se los manda alsistema operativo para que realice las operaciones que sean pertinentes. La mayorıa delos sistemas Linux vienen con una shell por defecto llamada “sh”, desarrollada parasistemas Unix por Steve Bourne. En este curso vas a aprender a utilizar “bash”, quees una version mejorada de la original “sh”. Como curiosidad, que sepas que el nombrede bash viene del acronimo “Bourne Again SHell”, dado que es una version mejoradade la original sh.

Una terminal (o emulador de terminal) es una ventana grafica que nos permiteinteractuar con la shell. Existen un monton de emuladores de terminales en Linux.Por ejemplo, KDE usa konsole mientras que GNOME usa gnome-terminal. En estecurso, vas a usar el emulador terminator, un emulador de terminal avanzado (aunqueen realidad no le vas a sacar todo el partido en este curso, pero es mucho mas comodaque la que viene por defecto en XFCE4, la xfce4-terminal ).

Vamos a empezar a trabajar. Lo primero de todo es abrir una terminal para empezara trabajar. Para ello, localiza el “boton de inicio” de XFCE4 (el raton con la X) en laesquina superior izquierda del Escritorio. En el menu, escoge la opcion de “Emuladorde Terminal”, como se muestra en la Figura 4.

Veras en tu pantalla una ventana grafica similar a la que se muestra en la Figura 5.Ahora, ¡estamos listos para trabajar!

Veras que en la terminal se muestra algo como:

alumno@programacion -II:~$

Esto es lo que se conoce como el indicador de comandos de shell (shell prompt, eningles). Su estructura es similar independientemente del sistema operativo. Suele seralgo tipo nombre-usuario@nombre-maquina, seguido del directorio de trabajo dondenos encontramos (sımbolo “∼”, hablaremos sobre esto dentro de un momento) y elsigno del dolar (sımbolo $). En el caso de que el ultimo sımbolo fuera el signo “#”,indica que esa sesion de terminal tiene permisos de superusuario. Esto quiere decirque todos los comandos que se realicen se hacen con el maximo nivel de privilegios. El

5 de 51

Page 6: Manejo de terminal de Linux (Programación II, Dpto. de Informática e Ingeniería de ...webdiis.unizar.es/asignaturas/PROG2/doc/programacionCPP/... · 2020-02-12 · Manejo de terminal

Manejo de terminal de LinuxProgramacion II

Dpto. de Informatica e Ingenierıa de Sistemas

Figura 5: Ventana del emulador de terminal terminator.

superusuario, en un sistema Linux, es equivalente a un usuario administrador en unsistema Windows: es decir, tiene el poder de “hacer y deshacer” a su antojo.

En terminos generales, el uso de una sesion con permisos de superusuario esta des-aconsejado a no ser que sea estrictamente necesario.

Escribe tu nombre en la terminal, y presiona la tecla “Enter” (tecla ). Veras algocomo esto:

alumno@programacion -II:~$ ricardo

bash: ricardo: orden no encontrada

Eso quiere decir que el comando que has ejecutado (tu nombre) no se ha encontradoy que por tanto no se ha podido ejecutar. Este tipo de error es muy habitual cuandose interacciona con una terminal, debido a pequenos fallos tipograficos que podemoshacer a la hora de escribir los comandos o porque ciertos comandos no se encuentraninstalados en el sistema.

Historico de comandos y movimientos del cursor

Si presionas la tecla veras que vuelve a aparecer tu nombre. Esta tecla nospermite navegar en el historico de comandos que hemos ejecutado. La terminal tiene“memoria”, y cuando salimos de una sesion de terminal (explicado mas adelante),todo este historico de comandos que hemos ejecutado queda registrado. De este modo,cuando volvemos a abrir otra sesion de terminal si presionamos veremos el historicode las ultimas ordenes ejecutadas.

Igual que puedes navegar “hacia arriba”, puedes navegar en los comandos haciaabajo (despues de haber ido hacia arriba, logicamente ¨ ). Para ello, simplemente pre-sionando la tecla veras que vuelves al comando ejecutado posteriormente despuesdel que estas visualizando.

Las teclas de izquierda y derecha, y respectivamente, sirven para mover elcursor de escritura hacia la izquierda y la derecha. Esto servira para poder editar elcomando antes de ejecutarlo facilmente.

6 de 51

Page 7: Manejo de terminal de Linux (Programación II, Dpto. de Informática e Ingeniería de ...webdiis.unizar.es/asignaturas/PROG2/doc/programacionCPP/... · 2020-02-12 · Manejo de terminal

Manejo de terminal de LinuxProgramacion II

Dpto. de Informatica e Ingenierıa de Sistemas

Primeros comandos

Vamos a comenzar a ejecutar algunos comandos, para que vayas aprendiendo comofunciona la interaccion con la consola.

Ejecuta el comando date. El resultado que te mostrara sera la fecha y el dıaactual.

Otro comando de interes es cal. Este comando te mostrara por pantalla el ca-lendario del mes actual, remarcando el dıa actual.

Un aspecto de interes es conocer, por ejemplo, el espacio libre que tenemos en eldisco duro. Para ello, ejecuta el comando df. El resultado del comando sera algosimilar a:

alumno@programacion -II:~$ df

Filesystem 1K-blocks Used Available Use % Mounted on

udev 1936532 0 1936532 0 % /dev

tmpfs 391268 6004 385264 2 % /run

/dev/sda1 475668456 159253028 292183032 36 % /

tmpfs 1956328 52868 1903460 3 % /dev/shm

tmpfs 5120 0 5120 0 % /run/lock

tmpfs 1956328 0 1956328 0 % /sys/fs/cgroup

tmpfs 391264 24 391240 1 % /run/user /1000

Este comando te muestra como esta particionado (dividido) el disco duro delsistema e informacion sobre cada una de estas divisiones (llamadas particiones).La primera columna y la segunda no es necesario que sepas ahora que significan.Despues, aparece informacion sobre cuanto disco duro esta libre y cuanto estausado. La ultima columna especifica que directorios del sistema se encuentranen cada particion. Entraremos a discutir esto mas adelante.

Respecto a la informacion sobre el espacio libre/utilizado, nos la muestra enbytes. Si queremos que nos muestre una informacion que sea mas facilmenteentendible por nosotros, podemos usar la opcion -h del comando df. Ejecuta enla terminal df -h

Los comandos de Linux admiten normalmente una o mas opciones durante suinvocacion que modifican su ejecucion. Adicionalmente, el comando tambien pue-de admitir uno o mas argumentos, que son los elementos sobre los que actua elcomando. La estructura de un comando, por tanto, es esquematicamente como:

comando -opciones argumentos

La mayorıa de los comandos usa opciones consistentes en un solo caracter prece-dido por un guion, como la opcion -h del comando df explicado anteriormente.Algunos comandos, ademas, aceptan las opciones en formato largo, consistentesen palabras antecedidas por dos guiones. Mas adelante veremos mas comandosque admiten diversas opciones.

7 de 51

Page 8: Manejo de terminal de Linux (Programación II, Dpto. de Informática e Ingeniería de ...webdiis.unizar.es/asignaturas/PROG2/doc/programacionCPP/... · 2020-02-12 · Manejo de terminal

Manejo de terminal de LinuxProgramacion II

Dpto. de Informatica e Ingenierıa de Sistemas

Observa la diferencia de la salida respecto al comando anterior. Los comandosde Linux pueden recibir parametros de opciones para configurar su ejecucion.En este caso, la opcion -h le indica al comando df que imprima los tamanos delas particiones en potencias de 1024 (por ejemplo, 1.9G indica un tamano de 1.9Gigabytes).

Otro comando de interes es free. Este comando permite conocer de cuantamemoria libre disponemos. Ejecuta el comando free y observa su resultado deejecucion. Este comando tambien admite una opcion -h con el mismo significadoque df. Si lo ejecutas en tu terminal, observaras algo similar a :

alumno@programacion -II:~$ free -h

total used free shared buff/cache available

Mem: 3.7Gi 2.0Gi 783Mi 176Mi 954Mi 1.3Gi

Swap: 3.9Gi 312Mi 3.6Gi

Como ves, en este caso me informa de que tengo 783 Mebibytes libres de memoria(el valor “783Mi” en la columna “free”). El sımbolo “Mi” se refiere a la unidadde informacion mebibyte, utilizada como un multiplo del byte1. Esta unidadde medida esta estrechamente relacionada con el megabyte, pero tienen unadiferencia importante: mientras que los megabytes son una unidad de medida quese expresan en base 10 (e.g., 1MB es 106 bytes), los mebibytes se expresan en base2 (e.g., 1Mi es 220 bytes). Esta es la causa por la que cuando compramos un discoduro que se anuncia con una determinada capacidad, cuando lo conectamos yusamos en el ordenador vemos que su capacidad real es un poquito mas pequena.Recuerda que los sistemas informaticos trabajan en sistema binario (base 2).

Por ultimo, para cerrar una sesion de terminal no tienes mas que escribir el co-mando exit. Despues de ejecutar este comando, veras que la ventana de terminalse cierra.

Tarea 1.Ejecuta los comandos anteriores en una ventana de terminal y cierra la sesionde terminal. Vuelve a abrir otra sesion y observa el historico de comandos.

2. Estructura de directorios en un sistemaoperativo GNU/Linux

Los directorios o carpetas principales del sistema operativo GNU/Linux y sus con-tenidos estan definidos por una norma estandar de jerarquıa del sistema de fiche-ros (vease la pagina web https://es.wikipedia.org/wiki/Filesystem_Hierarchy_

Standard). Este estandar nacido en 1994 se basa en la organizacion tradicional de di-rectorios de los sistemas UNIX, de los que se derivo el sistema operativo GNU/Linux.

1Consulta https://es.wikipedia.org/wiki/Mebibyte para mas informacion.

8 de 51

Page 9: Manejo de terminal de Linux (Programación II, Dpto. de Informática e Ingeniería de ...webdiis.unizar.es/asignaturas/PROG2/doc/programacionCPP/... · 2020-02-12 · Manejo de terminal

Manejo de terminal de LinuxProgramacion II

Dpto. de Informatica e Ingenierıa de Sistemas

Actualmente, este estandar es mantenido por la Linux Foundation, que trata de pro-mover el uso del software libre y en particular del sistema operativo GNU/Linux.

Se procede a explicar como es esta estructura particular. En primer lugar, el estandardefine diferentes tipos de directorio: directorios estaticos, que son aquellos que contie-nen archivos binarios, bibliotecas, documentacion, etc.; directorios dinamicos, que sonaquellos que contienen archivos que son cambiantes, como los ficheros de configura-cion o documentos; directorios compartidos, que son aquellos que contienen archivosque pueden encontrarse en un ordenador y utilizarse en otro, o que son compartidosentre multiples usuarios dentro de la misma maquina; y directorios restringidos, quecontienen archivos que no se pueden compartir y son unicamente modificables por eladministrador del sistema.

Directorio raız (“/”)

En un sistema GNU/Linux todos los archivos y directorios aparecen bajo el llamadodirectorio raız o directorio principal, expresado mediante el caracter “/”, aun cuandoestos archivos o directorios se encuentren en distintos dispositivos fısicos. Es decir, estedirectorio raız actua como el directorio padre de cualquier otro elemento (directorio oarchivo) que se encuentre almacenado dentro del sistema de ficheros. Por tanto, la rutaa cualquier directorio o archivo en un sistema GNU/Linux se identifica por una cadenaque comienza por “/”. Del mismo modo, cada uno de los directorios y subdirectoriosdonde se encuentra el citado directorio o archivo se separa tambien por el caracter “/”.

Directorio “/bin/”

Este directorio estatico almacena todos los archivos binarios necesarios para garan-tizar las funciones basicas a nivel de usuario, tanto para una sesion de un usuario enel sistema como para multiples usuarios.

Directorio “/boot/”

Este directorio estatico contiene todos los ficheros ejecutables y demas archivosnecesarios en el proceso de arranque del sistema. La secuencia de arranque de unsistema operativo GNU/Linux se explica en mas detalle posteriormente. En concreto,los ficheros contenidos en este directorio son utilizados en la segunda y tercera etapade arranque.

Directorio “/dev/”

Este directorio estatico contiene una serie de ficheros especiales, llamados ficheros debloques y caracteres, que se encuentran asociados a los dispositivos hardware de quedisponga el equipo donde se ha instalado el sistema operativo GNU/Linux. En otraspalabras, estos ficheros son los que permiten poder hacer uso de todos los dispositivosfısicos que haya en el sistema (todo el hardware accesible).

9 de 51

Page 10: Manejo de terminal de Linux (Programación II, Dpto. de Informática e Ingeniería de ...webdiis.unizar.es/asignaturas/PROG2/doc/programacionCPP/... · 2020-02-12 · Manejo de terminal

Manejo de terminal de LinuxProgramacion II

Dpto. de Informatica e Ingenierıa de Sistemas

Directorio “/etc/”

Este directorio dinamico almacena los ficheros de configuracion de componentes delsistema operativo en sı mismo, como de otros programas y aplicaciones que hayan sidoinstaladas en el sistema operativo. En principio, el contenido de este directorio deberıade ser exclusivamente ficheros de configuracion (ficheros de texto, normalmente) y noficheros ejecutables.

Directorio “/home/”

Este directorio estatico es el directorio de los usuarios de un sistema operativo GNU/-Linux (menos del superusuario, que tiene su propio directorio en el raız). En este di-rectorio se almacenan todos los ficheros del usuario, como documentos, fotos, archivostemporales de las aplicaciones que se han ejecutado en modo usuario, configuracionesde programa, etc.

Para cada usuario que haya definido en el sistema, en un sistema operativo GNU/-Linux la configuracion por defecto creara un directorio dentro de “/home” para cadauno de los usuarios. Ası, si el sistema operativo GNU/Linux tiene dos usuarios defini-dos, de nombre de usuario user1 y user2, en este directorio apareceran dos carpetas,“/home/user1” y “/home/user2”, cada una destinada a almacenar los ficheros de cadausuario respectivo.

Haciendo una analogıa con el sistema operativo Windows, esta carpeta es la equi-valente al directorio “C:\Users”.

Directorio “/lib/”

Este directorio estatico incluye aquellas bibliotecas esenciales que resultan necesa-rias para que se puedan ejecutar correctamente todos los ficheros ejecutables que seencuentran en los directorios “/bin” y “/sbin”, ası como otros ficheros ejecutables(llamados modulos) del propio nucleo del sistema operativo.

Directorio “/media/”

Este directorio estatico contiene los puntos de montajes de dispositivos de almace-namiento extraıbles, como un lector de CD-ROM/DVD, un disco duro externo, o unamemoria USB. Puede usarse tambien como punto de montaje de otras particiones quese encuentren en el disco duro del sistema.

Directorio “/mnt/”

Este directorio dinamico suele contener los sistemas de archivos montados de maneratemporal. Su funcion es similar al directorio “/media” explicado anteriormente, aunquesuele ser usado principalmente por los usuarios para poder gestionar los sistemas deficheros de dispositivos externos (como por ejemplo, acceder al contenido de una llaveUSB o de un disco duro externo).

10 de 51

Page 11: Manejo de terminal de Linux (Programación II, Dpto. de Informática e Ingeniería de ...webdiis.unizar.es/asignaturas/PROG2/doc/programacionCPP/... · 2020-02-12 · Manejo de terminal

Manejo de terminal de LinuxProgramacion II

Dpto. de Informatica e Ingenierıa de Sistemas

Directorio “/opt/”

Este directorio compartido puede contener diverso software adicional que sea com-partido entre usuarios. En cierto modo, este directorio puede verse como una extensiondel directorio “/usr” (explicado posteriormente), pero en este caso aquı se encuentrantodos aquellos ficheros de solo lectura que son parte de aplicaciones auto-contenidas yque, por tanto, no siguen los estandares de almacenar los diferentes ficheros dentro delos diferentes subdirectorios del directorio “/usr”.

Volviendo a hacer una analogıa con el sistema operativo Windows, este directorioserıa similar al “Archivos de Programa” (o “Program Files”, en versiones mas actualesde Windows).

Directorio “/proc/”

Este directorio dinamico contiene informacion acerca de los procesos que se estanejecutando en un determinado momento en el sistema. Es decir, cualquier procesoque se este ejecutando tendra un directorio identificativo dentro de este directoriocon informacion acerca del proceso. En realidad, la informacion que se almacena decada proceso es virtual, es decir, solo existe en la memoria del ordenador y durante laejecucion del propio proceso en particular, por lo que el contenido de este directorioen el disco duro es nulo.

Directorio “/root/”

Este directorio estatico corresponde al directorio del superusuario del sistema. Comose ha comentado anteriormente, dentro del directorio “/home” habra una carpetapara cada usuario definido dentro del sistema. En el caso del superusuario del sistema(identificado por defecto por el nombre de usuario root), este dispone de un directoriopropio dependiente del directorio raız del sistema.

Directorio “/sbin/”

Este directorio estatico almacena los ficheros ejecutables a las funciones propias delsistema operativo, las cuales solo pueden ser gestionadas por el usuario administrador(como el arranque del sistema, tareas de restauracion, reparacion, etc.).

Directorio “/srv/”

Este directorio dinamico contiene los ficheros y directorios relativos a posibles ser-vidores instalados dentro del sistema, como un servidor web, un servidor de FTP, decontrol de versiones, etc. La instalacion dentro de este directorio es opcional, pudiendoestar los ficheros y otros directorios relativos a servidores en otra ubicacion dentro deldirectorio raız.

11 de 51

Page 12: Manejo de terminal de Linux (Programación II, Dpto. de Informática e Ingeniería de ...webdiis.unizar.es/asignaturas/PROG2/doc/programacionCPP/... · 2020-02-12 · Manejo de terminal

Manejo de terminal de LinuxProgramacion II

Dpto. de Informatica e Ingenierıa de Sistemas

Directorio “/sys/”

Como el directorio anterior “/proc/”, este directorio dinamico provee informacion delnucleo del sistema relativa a eventos del sistema operativo. En particular, proporcionaun sistema de archivos virtuales que documentan al nucleo pero localizados de formajerarquizada.

Directorio “/tmp/”

Este directorio dinamico contiene todos aquellos archivos que son temporales, yasea de elementos de sistema o de aplicaciones de usuario (como por ejemplo, un nave-gador de Internet). Su contenido es eliminado cuando el sistema operativo se apaga.Por ejemplo, aquı normalmente se guardan los ficheros temporales guardados por elnavegador de Internet, entre otras aplicaciones. Las aplicaciones que usan este direc-torio son conscientes de que el contenido de los archivos aquı ubicados son unicamenteaccesibles en la sesion actual. Es decir, que despues de un reinicio del sistema o de uncierre de sesion de un usuario no se garantiza que estos ficheros sigan existiendo.

Directorio “/usr/”

Este directorio compartido, cuyo nombre viene de user system resources, contienetodos los ficheros de solo lectura y relativos a utilidades de multiusuario (es decir, todoaquello que es accesible para todos los usuarios del sistema), incluyendo el softwareinstalado a traves de los gestores de paquetes de cada distribucion. Este contenidopuede ser compartido tambien a traves de la red con otros sistemas.

Directorio “/var/”

Este directorio dinamico contiene archivos que son variables, como los ficheros deregistro (tambien llamados ficheros de logs), emails de los usuarios del sistema, basesde datos, informacion almacenada en la cache, etc. Se puede decir que este directorioactua a modo de registro del sistema.

3. Secuencia de arranque de un sistema

operativo GNU/Linux

Independientemente del sistema operativo, el proceso de arranque de un sistemaoperativo siempre se desarrolla en 4 etapas:

1. Al encender el equipo, la BIOS toma el control del mismo. La BIOS es un ele-mento que se encuentra dentro del ordenador y se encarga de realizar una seriede comprobaciones basicas sobre el hardware antes de poder usarlo. Una vez quela BIOS ha reconocido el hardware y lo ha configurado para poder usarlo, cargaen memoria el codigo a ejecutar correspondiente a la segunda etapa, que es elgestor de arranque, y le pasa el control.

12 de 51

Page 13: Manejo de terminal de Linux (Programación II, Dpto. de Informática e Ingeniería de ...webdiis.unizar.es/asignaturas/PROG2/doc/programacionCPP/... · 2020-02-12 · Manejo de terminal

Manejo de terminal de LinuxProgramacion II

Dpto. de Informatica e Ingenierıa de Sistemas

2. En esta segunda etapa, el gestor de arranque se encarga de localizar que sistemasoperativos se encuentran instalados en los dispositivos accesibles por el hardwareactual de la maquina. En caso de encontrar varios sistemas operativos, ofrece alusuario del equipo la opcion de seleccionar que sistema operativo desea cargar.Una vez seleccionado, pasa el control a dicho sistema operativo.

3. La tercera etapa consiste en la carga del nucleo (tambien llamado kernel) delsistema operativo seleccionado. El nucleo del sistema se encarga de cargar todosaquellos componentes software necesarios para poder interactuar con otros dispo-sitivos hardware que se encuentren accesibles en la maquina, como por ejemplo,el raton, el disco duro, o algun otro elemento que se encuentre conectado me-diante el puerto USB. Despues de realizar este proceso de carga, se procede aejecutar los servicios correspondientes al sistema operativo.

4. Como ultima etapa, se lanzan en ejecucion todos los servicios correspondientes alsistema operativo y necesarios para que el usuario pueda hacer uso de la maquina(por ejemplo, servicios graficos, servicios de red, etc.).

En el caso del sistema operativo GNU/Linux, se guarda un registro de toda laactividad sucedida durante el arranque del sistema en ficheros de texto que pueden serposteriormente consultados.

En concreto, estos ficheros de traza o registro se almacenan dentro del directo-rio “/var/log”. Dentro de este directorio se pueden encontrar ficheros como “syslog”,“auth.log” o “user.log”, que permiten conocer cuales han sido las ultimas secuenciasde arranque de la maquina en particular. Ademas de texto informativo sobre el pro-ceso de carga, aparecen referencias a los instantes de tiempo de cuando se registrola actividad. En la Seccion 2 se ha descrito mas en detalle como se estructuran losdirectorios en un sistema GNU/Linux.

4. Navegacion entre directorios

Ahora que ya conoces un poco mas acerca de la estructura de directorios, vamos averlo en mas detalle mediante la terminal.

Como se ha descrito anteriormente, en Linux tenemos una estructura jerarquica dedirectorios tipo arbol. Esto es algo similar a lo que se muestra en la Figura 6. Sinembargo, en la terminal carecemos de esta vision grafica, con lo que cuando estamosnavegando por directorios desde la terminal hay que cambiar la forma de pensar.

El primer comando de interes que tienes que aprender es pwd. Este comando esun acronimo de “print working directory”. Como directorio de trabajo se conoce aldirectorio en el que estamos situados actualmente. Abre una sesion nueva de terminaly ejecuta este comando. Deberas observar una salida similar a esta:

alumno@programacion -II:~$ pwd

/home/alumno

13 de 51

Page 14: Manejo de terminal de Linux (Programación II, Dpto. de Informática e Ingeniería de ...webdiis.unizar.es/asignaturas/PROG2/doc/programacionCPP/... · 2020-02-12 · Manejo de terminal

Manejo de terminal de LinuxProgramacion II

Dpto. de Informatica e Ingenierıa de Sistemas

Figura 6: Estructura jerarquica de directorios tipo arbol.

14 de 51

Page 15: Manejo de terminal de Linux (Programación II, Dpto. de Informática e Ingeniería de ...webdiis.unizar.es/asignaturas/PROG2/doc/programacionCPP/... · 2020-02-12 · Manejo de terminal

Manejo de terminal de LinuxProgramacion II

Dpto. de Informatica e Ingenierıa de Sistemas

Cuando abrimos una nueva sesion de terminal, por defecto nuestro directorio detrabajo siempre queda establecido en nuestro directorio personal (la carpeta con elnombre del usuario dentro del directorio “/home”). Cada usuario de nuestro siste-ma tendra su carpeta personal, que es el unico sitio donde cada usuario normal (sinprivilegios) puede crear directorios o escribir ficheros de manera exclusiva.

El comando pwd, por tanto, nos da informacion sobre donde estamos situados en esearbol de directorios.

Para listar el contenido del directorio donde nos encontramos, hay que usar el co-mando ls. Si lo ejecutas en la terminal actual, veras algo como:

alumno@programacion -II:~$ ls

Descargas Escritorio Musica Pu blico

Documentos Im a genes Plantillas Vıdeos

Una cosa importante que debes saber es que los nombres de los ficheros en Linux,a diferencia de Windows, son sensibles a mayusculas y minusculas. Esto es, un ficherollamado “Fichero1” sera diferente de otro fichero llamado “fichero1”. Por esto, es im-portante siempre respetar las mayusculas y minusculas tanto en los comandos comoen los nombres de los ficheros.

Este comando tambien sirve para ver los contenidos de cualquier otro directorio,como veremos mas adelante. Este comando acepta diversos parametros, algunos delos cuales veremos tambien mas adelante. Uno de ellos que es de interes es la opcion-a, que muestra todos los ficheros del directorio. Con esta opcion veremos todos losficheros y directorios que sean ocultos. En Linux, el atributo de oculto se determinaporque el nombre del fichero viene precedido por un punto.

Tarea 2.Ejecuta ls -a y observa la diferencia con el comando anterior ls.

Para cambiar el directorio de trabajo actual hay que usar el comando cd, que significachange directory. Para ello, hay que escribir el comando cd seguido de la ruta adondese desea cambiar el directorio de trabajo actual. Estas rutas representan una de esas“ramas” dentro del arbol de directorios. Existen dos formas de referenciar las rutas:

Rutas absolutas: las rutas absolutas hay que especificarlas desde el directorioraız del sistema (recuerda, “/”). Por ejemplo, si queremos consultar todos los pro-gramas del sistema instalados tenemos que consultar el contenido del directorio“/usr/bin”. En esta ruta absoluta, tenemos el directorio raız “/”, donde existe undirectorio de nombre “usr” y dentro de el otro directorio llamado “bin”. Pruebaa irte a este directorio y a listar su contenido con los comandos aprendidos:

alumno@programacion -II:~$ cd /usr/bin

alumno@programacion -II:/usr/bin$ pwd

/usr/bin

alumno@programacion -II:/usr/bin$ ls

[... Listado de archivos del directorio , omitido por claridad ...]

15 de 51

Page 16: Manejo de terminal de Linux (Programación II, Dpto. de Informática e Ingeniería de ...webdiis.unizar.es/asignaturas/PROG2/doc/programacionCPP/... · 2020-02-12 · Manejo de terminal

Manejo de terminal de LinuxProgramacion II

Dpto. de Informatica e Ingenierıa de Sistemas

Como puedes observar, hemos cambiado el directorio de trabajo a “/usr/bin”.Ademas, fıjate que el texto del prompt ha cambiado, y despues del nombre dela maquina y antes del sımbolo “$” aparece el directorio de trabajo actual. Estaayuda visual es muy util para en todo momento saber donde nos encontramos.Observa que sucede si ejecutas el comando cd directamente, sin parametros:

alumno@programacion -II:/usr/bin$ cd

alumno@programacion -II:~$ pwd

/home/alumno

Como ves, se ha cambiado el directorio de trabajo actual a nuestra carpetapersonal. Independientemente del lugar donde te encuentres, si ejecutamos elcomando cd sin parametros volvemos a nuestra carpeta personal.

Rutas relativas: fıjate que las rutas absolutas siempre empiezan desde el direc-torio raız (carpeta “/”). Las rutas relativas, en cambio, siempre comienzan desdeel directorio actual. Para representar esto existen unos sımbolos especiales: porun lado, tenemos el sımbolo “.”, que representa el directorio actual de trabajo;y por otro lado, tenemos el sımbolo “..” que se refiere al directorio padre deldirectorio actual de trabajo. Vamos a interactuar con la terminal para acabar decomprender como funcionan. Vuelve a dirigirte al directorio “/usr/bin”.

alumno@programacion -II:~$ cd /usr/bin

alumno@programacion -II:/usr/bin$ pwd

/usr/bin

Cambia ahora al directorio padre del directorio actual de trabajo, que es eldirectorio “/usr”. Esto lo puedes hacer de dos maneras, o bien usando una rutaabsoluta:

alumno@programacion -II:/usr/bin$ cd /usr

alumno@programacion -II:/usr$ pwd

/usr

O bien mediante el uso de una ruta relativa:

alumno@programacion -II:/usr/bin$ cd ..

alumno@programacion -II:/usr$ pwd

/usr

Como ves, ambos comandos acaban dando el mismo resultado. Normalmenteacabaras usando aquel que te requiera menos trabajo de escritura. Del mismomodo, estando en el directorio “/usr” podemos cambiar a “/usr/bin” de dosmanera diferentes, a traves de una ruta absoluta:

alumno@programacion -II:/usr$ cd /usr/bin

alumno@programacion -II:/usr/bin$ pwd

/usr/bin

16 de 51

Page 17: Manejo de terminal de Linux (Programación II, Dpto. de Informática e Ingeniería de ...webdiis.unizar.es/asignaturas/PROG2/doc/programacionCPP/... · 2020-02-12 · Manejo de terminal

Manejo de terminal de LinuxProgramacion II

Dpto. de Informatica e Ingenierıa de Sistemas

O con una ruta relativa:

alumno@programacion -II:/usr$ cd ./bin

alumno@programacion -II:/usr/bin$ pwd

/usr/bin

Respecto a esta ultima opcion, es importante destacar que puedes descartar el“./” del comando. Simplemente escribiendo cd bin obtendrıas el mismo resulta-do. Por norma general, si no se especifica lo contrario se asume que el directoriode trabajo es el actual.

Tarea 3.Vuelve a dirigirte al directorio “/usr” y comprueba que efectivamente el re-sultado del comando cd bin es equivalente al comando cd ./bin.

Por ultimo, un parametro especial del comando cd es el guion (sımbolo -). Si ejecu-tamos el comando cd - volvemos al directorio de trabajo actual. Observa su compor-tamiento con la siguiente secuencia de comandos en tu sesion de terminal abierta:

alumno@programacion -II:/usr/bin$ cd

alumno@programacion -II:~$ pwd

/home/alumno

alumno@programacion -II:~$ cd -

/usr/bin

alumno@programacion -II:/usr/bin$ pwd

/usr/bin

Como puedes observar, el comando cd - nos ha informado acerca de donde hacambiado el directorio de trabajo tras su ejecucion.

Otro sımbolo especial que es interesante que conozcas es el sımbolo “v” (se con-sigue con los botones de Alt Gr + 4 ). Este sımbolo representa en realidad tu car-peta personal. Estando en el directorio “/usr/bin”, observa que sucede si ejecutas cd

v/Escritorio:

alumno@programacion -II:/usr/bin$ cd ~/ Escritorio

alumno@programacion -II:~/ Escritorio$ pwd

/home/alumno/Escritorio

Como ves, hemos cambiado el directorio de trabajo actual a la carpeta “Escrito-rio”, localizada dentro de tu carpeta personal. Cierra ya esta sesion de terminal paracontinuar.

Ahora que ya sabes moverte por el sistema y conoces su estructura de directorios,vamos a ampliar un poquito mas estos conocimientos. Antes hemos descrito el co-mando ls, que te permite conocer el listado de ficheros contenidos en el directoriode trabajo actual. Este comando admite una ruta como parametro (absoluta o rela-tiva), mostrando el contenido del directorio pasado como parametro. Abre una nuevaterminal y ejecuta:

17 de 51

Page 18: Manejo de terminal de Linux (Programación II, Dpto. de Informática e Ingeniería de ...webdiis.unizar.es/asignaturas/PROG2/doc/programacionCPP/... · 2020-02-12 · Manejo de terminal

Manejo de terminal de LinuxProgramacion II

Dpto. de Informatica e Ingenierıa de Sistemas

alumno@programacion -II:~$ pwd

/home/alumno

alumno@programacion -II:~$ ls /usr/bin

[... Listado de archivos del directorio , omitido por claridad ...]

Como ves, nos muestra el contenido del directorio “/usr/bin”, a pesar de que nuestrodirectorio de trabajo actual es otro.

Este comando admite mas de un parametro, permitiendo mostrar el contenido devarios directorios a la vez. Por ejemplo, si ejecutamos ls /usr nos mostrara el con-tenido de nuestra carpeta personal y del directorio “/usr”:

18 de 51

Page 19: Manejo de terminal de Linux (Programación II, Dpto. de Informática e Ingeniería de ...webdiis.unizar.es/asignaturas/PROG2/doc/programacionCPP/... · 2020-02-12 · Manejo de terminal

Manejo de terminal de LinuxProgramacion II

Dpto. de Informatica e Ingenierıa de Sistemas

alumno@programacion -II:~$ ls ~ /usr

/home/alumno:

[... Listado de archivos del directorio , omitido por claridad ...]

/usr:

bin games include lib lib32 lib64 libx32 local sbin share

src

Ademas de la opcion -a, que recuerda que permite mostrar los ficheros ocultos, estecomando acepta mas opciones. Las opciones disponibles en el comando ls se muestranen la Tabla 1. Observa que algunas de las opciones acepta tambien una version enformato largo, algo muy habitual en los comandos de sistemas Linux. Es interesantedestacar la opcion -t, que permite mostrar los elementos ordenados por la fecha demodificacion (de mas reciente a menos) y la opcion -l, que muestra el resultado delcomando en formato largo. Los parametros de opciones se pueden combinar entre sı.Por ejemplo, si escribimos ls -tr nos mostrara los resultados ordenados por fecha demodificacion creciente (en vez de decreciente).

Conviene explicar en mas detalle la opcion -l. Abre una nueva sesion de terminal,dirıgete al directorio “/usr/bin” y ejecuta el comando ls -l. Veras algo similar a:

alumno@programacion -II:/usr/bin$ ls -l

total 83240

-rwxr -xr-x 1 root root 60064 ago 6 20:45 [

-rwxr -xr-x 1 root root 31096 oct 6 14:49 aa-enabled

-rwxr -xr-x 1 root root 31096 oct 6 14:49 aa-exec

-rwxr -xr-x 1 root root 26704 jul 28 17:14 addpart

-rwxr -xr-x 1 root root 10472 mar 18 2018 appres

lrwxrwxrwx 1 root root 6 oct 23 13:52 apropos -> whatis

[... Listado de resultados omitidos por claridad ...]

Cierra la sesion de terminal. En la Tabla 2 encontraras una explicacion mas deta-llada de este formato, considerando como ejemplo la primera lınea del resultado de laejecucion del comando anterior.

Otro comando que te puede resultar de interes es file. Este comando te permiteconocer el tipo de fichero pasado como argumento. En Linux, los nombres de los ficherosno tienen por que coincidir con su contenido, o puedes incluso tener ficheros que notengan extension y necesites conocer de que tipo de fichero es para poder tratarlocorrectamente. Abre una sesion de terminal y prueba a ejecutarlo desde la terminalcomo:

alumno@programacion -II:~$ file .bash_history

.bash_history: ASCII text

El fichero que has consultado, .bash history, es un fichero de texto oculto quese encuentra en tu carpeta personal (fıjate que tu directorio de trabajo actual es tucarpeta personal) y que contiene el historico de comandos que has ejecutado en laterminal. Si pruebas ahora el comando file sobre otro fichero, veras como cambia suejecucion:

19 de 51

Page 20: Manejo de terminal de Linux (Programación II, Dpto. de Informática e Ingeniería de ...webdiis.unizar.es/asignaturas/PROG2/doc/programacionCPP/... · 2020-02-12 · Manejo de terminal

Manejo de terminal de LinuxProgramacion II

Dpto. de Informatica e Ingenierıa de Sistemas

Opcion Opcion larga Descripcion-a --all Lista todos los ficheros, incluidos aquellos ocul-

tos (cuyo nombre comienza con un punto)-A --almost-all Como la opcion -a, pero sin mostrar . (directo-

rio actual) ni .. (directorio padre)-d --directory Con esta opcion ls mostrara los detalles del

directorio especificado en vez de su contenido.Normalmente es util con la opcion -l. Fıjateque de manera habitual la informacion sobre elpropio directorio no se muestra cuando se eje-cuta ls

-F --classify Esta opcion anade un caracter indicador al finalde cada nombre de fichero. Por ejemplo, anadeel caracter “*” si es un archivo ejecutable o “/”si se trata de un directorio

-h --human-readable Usado junto con -l, muestra el tamano de losficheros en formato entendible en vez de en by-tes (como la misma opcion de los comandos df

y free explicados anteriormente)-l Muestra los resultados en formato largo-r --reverse Muestra los resultados en orden inverso. Por de-

fecto, los resultados se muestran en orden al-fabetico ascendente

-S Ordena los resultados por tamano de fichero-t Ordena los resultados por tiempo de modifica-

cion

Tabla 1: Descripcion de las opciones del comando ls.

20 de 51

Page 21: Manejo de terminal de Linux (Programación II, Dpto. de Informática e Ingeniería de ...webdiis.unizar.es/asignaturas/PROG2/doc/programacionCPP/... · 2020-02-12 · Manejo de terminal

Manejo de terminal de LinuxProgramacion II

Dpto. de Informatica e Ingenierıa de Sistemas

Elemento Descripcion-rw-r--r-- Permisos de acceso al fichero. El primer caracter indica el tipo de

fichero. Un guion indica que se trata de un fichero normal, mien-tras que una “d” indica que es un directorio. Los tres siguientescaracteres indican los permisos de acceso para el propietario delfichero, los tres siguientes para los miembros del grupo, y los tresfinales para todos los demas usuarios. Encontraras una explica-cion mas detallada de los permisos en la Seccion 8.

1 Numero de enlaces duros al fichero. Encontraras una explicacionmas detallada sobre esto en la Seccion 5.

root Nombre de usuario del propietario del fichero.root Nombre del grupo propietario del fichero.32059 Tamano del fichero, en bytes.

2019-10-28 11:05 Fecha y hora de la ultima modificacion.prueba.pdf Nombre del fichero

Tabla 2: Descripcion del formato largo del comando ls -l.

alumno@programacion -II:~$ file /usr/bin/false

/usr/bin/false: ELF 64-bit LSB pie executable , x86 -64, version 1

(SYSV), dynamically linked , interpreter /lib64/ld -linux -x86

-64.so.2, BuildID[sha1 ]=145

c16711cd04e7fb14c61ebf6d0c053f428d3b0 , for GNU/Linux 3.2.0,

stripped

Como ves, en este caso te informa de que el fichero consultado, /usr/bin/false, esun fichero ejecutable de Linux. El formato de los ficheros ejecutables en Linux recibeel nombre de ELF, acronimo de Executable and Linkable Format. Ademas, te dice quees un archivo ejecutable para una arquitectura de XX bits.

Otros comandos que son de interes para la consulta del contenido de ficheros son lossiguientes:

El comando more sirve tambien para mostrar por pantalla el contenido de unfichero pasado por parametro, pero en vez de mostrarlo todo de vez lo muestrade manera paginada. Ejecuta el comando cat .bash history. Veras que en laesquina inferior izquierda de tu terminal aparece el texto “–More–” junto conun porcentaje. El porcentaje representa el tanto por cierto que lleva mostradodel contenido del fichero. Podemos avanzar en el contenido del fichero bien lıneaa lınea, presionando la tecla , o bien pagina a pagina, presionando la tecla

(el espacio). Para dejar de mostrar el fichero y volver a la terminal,presiona la tecla “q” (del ingles quit, salir/quitar).

Por ultimo, el comando less tambien permite visualizar un fichero de texto porla terminal. El funcionamiento es similar a more para avanzar, aunque ademaseste comando te permite retroceder en el visionado del contenido (de hecho, less

21 de 51

Page 22: Manejo de terminal de Linux (Programación II, Dpto. de Informática e Ingeniería de ...webdiis.unizar.es/asignaturas/PROG2/doc/programacionCPP/... · 2020-02-12 · Manejo de terminal

Manejo de terminal de LinuxProgramacion II

Dpto. de Informatica e Ingenierıa de Sistemas

Comando DescripcionRePag o b Retrocede una pagina

AvPag o Avanza una pagina

Retrocede una lınea

Avanza una lıneaG Avanza hasta el final del fichero

1G o g Avanza hasta el inicio del fichero/caracteres Busca (hacia adelante) la siguiente aparicion de caracteres

n Busca la siguiente aparicion de la ultima busquedah Muestra la ayudaq Sale del programa less

Tabla 3: Opciones del comando less.

es una evolucion del comando more – como curiosidad, su nombre viene del juegode palabras “menos es mas”). Para salir tambien es necesario presionar la tecla“q”. Fıjate que esta vez, en la esquina inferior izquierda tienes dos puntos envez de un texto. Este comando acepta ademas diversos comandos que amplıan lafuncionalidad de la herramienta. En la Tabla 3 encontraras un resumen de estoscomandos.

Tarea 4.Con los comandos que has aprendido, localiza todos los ficheros ocultos quehay en tu carpeta personal y muestralos en la terminal con los comandos quehas aprendido. Profundiza ademas en las opciones del comando less.

5. Manipulacion de archivos y directorios

En esta parte del laboratorio vas a aprender a manipular archivos y directorios delsistema operativo a traves de la terminal. Antes de continuar, sin embargo, convieneque conozcas el concepto de mascaras, un recurso muy util cuando se trabaja con laterminal y con nombres de ficheros.

Cierra cualquier terminal que tengas abierta, y abre una nueva sesion de terminal.Ejecuta el comando ls .b*. El resultado de ejecucion deberıa de ser algo similar a:

alumno@programacion -II:~$ ls .b*

.bash_history .bash_logout .bashrc

Como ves, el resultado de ls .b* te muestra todos los ficheros cuyo nombre comienzacon los caracteres “.b”. El caracter“*” es un caracterespecial que se usa como mascarapara indicar que nos interesa cualquier conjunto de caracteres. En el ejemplo, “.b*”esta indicando que nos interesan todos los nombres de ficheros que comiencen con“.b” y les siga una secuencia arbitraria de caracteres. Si nos interesara, por ejemplo,

22 de 51

Page 23: Manejo de terminal de Linux (Programación II, Dpto. de Informática e Ingeniería de ...webdiis.unizar.es/asignaturas/PROG2/doc/programacionCPP/... · 2020-02-12 · Manejo de terminal

Manejo de terminal de LinuxProgramacion II

Dpto. de Informatica e Ingenierıa de Sistemas

Mascara Descripcion* Coincidencia con cualquier caracter(0 o mas)? Coincidencia con un unico caracter

[caracteres] Coincidencia con cualquier caracterdel conjunto expresadoentre corchetes

[!caracteres] Coincidencia con cualquier caracterque no esta en el conjuntoexpresado entre corchetes

[0-9[ Coincidencia con cualquier dıgito[[:clase:]] Coincidencia con cualquier caracterde la clase especificada

Tabla 4: Tipos de mascaras.

Mascara Descripcion[:alnum:] Coincide con cualquier caracteralfanumerico[:alpha:] Coincide con cualquier caracteralfabetico[:digit:] Coincide con cualquier dıgito[:lower:] Coincide con cualquier letra minuscula[:upper:] Coincide con cualquier letra mayuscula

Tabla 5: Tipos de clases de mascaras.

especificar un unico caracterpuede usarse el caracterespecial “?”. La Tabla 4 resumelas mascaras que existen en Linux.

Los tipos de clases que existen se resumen en la Tabla 5. Algunos ejemplos del usode mascaras son:

La mascara [abc]* devolverıa cualquier fichero que comenzara con las letras “a”,“b”, o “c”.

La mascara BACKUP.[0-9][0-9][0-9] devolverıa cualquier fichero cuyo nombrecomience por “BACKUP”, seguido exactamente de tres dıgitos.

La mascara [[:upper:]]* coincide con cualquier fichero cuyo nombre comienzacon una letra mayuscula.

La mascara [![:digit:]]* coincide con cualquier fichero cuyo nombre no co-mience por un dıgito.

La mascara *[[:lower:]123] coincide con cualquier fichero cuyo nombre acabeen una letra minuscula o en los dıgitos “1”, “2” o “3”.

23 de 51

Page 24: Manejo de terminal de Linux (Programación II, Dpto. de Informática e Ingeniería de ...webdiis.unizar.es/asignaturas/PROG2/doc/programacionCPP/... · 2020-02-12 · Manejo de terminal

Manejo de terminal de LinuxProgramacion II

Dpto. de Informatica e Ingenierıa de Sistemas

Tarea 5.Abre una sesion de terminal y, estando en el directorio “/usr/bin” prueba losdiferentes tipos de mascaras posibles con el comando ls. Verifica que los resul-tados que te muestra tienen sentido (puedes abrir y mantener otra sesion determinal donde visualizar todo el contenido de ese directorio para verificarlo).

Un comando que puede resultar util algunas veces es el comando touch. Este coman-do sirve para crear en el sistema un nuevo fichero. Ası, si ejecutamos touch ejemplo

en una terminal veremos que se crea un fichero vacıo con nombre “ejemplo”. Com-pruebalo por ti mismo en una sesion de terminal, siendo el directorio de trabajo tucarpeta personal:

alumno@programacion -II:~$ touch ejemplo

alumno@programacion -II:~$ ls -l ejemplo

-rw-r--r-- 1 alumno alumno 0 Oct 26 12:49 ejemplo

El comando anterior solo crea ficheros, pero no directorios. Para crear directoriostienes que usar el comando mkdir, del ingles make directory. Ası, si ejecutas en unaterminal:

alumno@programacion -II:~$ mkdir directorio

alumno@programacion -II:~$ ls -ld directorio

drwxr -xr-x 2 alumno alumno 4096 Oct 26 12:49 directorio

Veras como se ha creado un directorio llamado “directorio” en tu carpeta personal.Puedes navegar tambien por tu carpeta personal con el explorador de ficheros paracomprobarlo (accesible desde el boton de inicio del XFCE4). Este comando admitemultiples argumentos, pudiendo ası crear mas de un directorio a la vez.

El comando cp sirve para copiar ficheros o directorios. Puedes usarlo de dos formasdistintas:

cp archivo1 archivo2

Ası, se crea un nuevo archivo llamado “archivo2” que es una copia del “archivo1”.O tambien:

cp archivo1 archivo2 ... directorio

Ası, se copian los archivos de nombre “archivo1”, “archivo2”, etc. al directorio denombre “directorio”.

Tarea 6.Estando en una terminal y en tu directorio personal, con los comandos apren-didos, crea dos ficheros vacıos de nombre “ejemplo1” y “ejemplo2” y copialosa la carpeta “Escritorio” de tu directorio personal. Si lo has hecho correcta-mente, veras aparecer ambos ficheros en tu pantalla del Escritorio. Intentaahora copiar la carpeta “Escritorio” a otra carpeta llamada “Escritorio2”.¿Has podido?

24 de 51

Page 25: Manejo de terminal de Linux (Programación II, Dpto. de Informática e Ingeniería de ...webdiis.unizar.es/asignaturas/PROG2/doc/programacionCPP/... · 2020-02-12 · Manejo de terminal

Manejo de terminal de LinuxProgramacion II

Dpto. de Informatica e Ingenierıa de Sistemas

Opcion Opcion larga Descripcion-a --archive Copia los archivos y directorios manteniendo todos sus atri-

butos, incluyendo propietarios y permisos. Por defecto, lascopias toman los atributos por defecto del usuario que reali-za la operacion de copia.

-r --recursive Realiza la copia de directorios y sus contenidos de manerarecursiva. Esta opcion (o la opcion -a) es necesaria cuandose quieren copiar directorios.

-i --interactive Pregunta al usuario por confirmacion antes de sobrescribirun fichero existente. Sin esta opcion, si existe el ficherose sobrescribe sin informar al usuario.

-u --update Cuando realiza una copia entre directorios, solo copia losficheros que no existen o que son mas nuevos que los exis-tentes.

-v --verbose Muestra informacion de progreso de la operacion de copia.

Tabla 6: Opciones del comando cp.

Este comando tiene algunas opciones que son importantes que conozcas, mostradasen la Tabla 6.

Tarea 7.Usando las opciones del comando cp que consideres necesario, repite ahora laoperacion de copiar la carpeta “Escritorio” a otra carpeta llamada “Escrito-rio2”.

El comando mv sirve tanto para mover ficheros de un lugar a otro como para cambiarel nombre, dependiendo de como se use. Su uso es muy similar al comando cp:

mv archivo1 archivo2

Ası, se renombra el “archivo1” a “archivo2”. O tambien:

mv archivo1 archivo2 ... directorio

Ası, se mueven los archivos de nombre “archivo1”, “archivo2”, etc. al directorio denombre “directorio”.

El comando mv comparte las opciones -i, -u y -v del comando cp, teniendo el mismoefecto.

Para borrar los ficheros, existe el comando rm (del ingles remove). Este comandoadmite uno o mas argumentos, pudiendo ası borrar varios ficheros de vez. Abre unasesion de terminal y vete a la carpeta “Escritorio2” que has creado en la ultima tarea.Allı, ejecuta primero un comando ls para visualizar el contenido del directorio, y luegoelimina ambos ficheros con:

rm ejemplo1 ejemplo2

25 de 51

Page 26: Manejo de terminal de Linux (Programación II, Dpto. de Informática e Ingeniería de ...webdiis.unizar.es/asignaturas/PROG2/doc/programacionCPP/... · 2020-02-12 · Manejo de terminal

Manejo de terminal de LinuxProgramacion II

Dpto. de Informatica e Ingenierıa de Sistemas

Opcion Opcion larga Descripcion-i --interactive Pregunta al usuario por confirmacion antes de eliminar un

fichero existente. Si esta opcion no se especifica, el fi-chero se borra sin esperar confirmacion.

-r --recursive Borra directorios de manera recursiva. Es decir, si el directo-rio tiene algun subdirectorio, tambien se borra. Esta opcionpermite borrar directorios.

-f --force Ignora los archivos no existentes y no espera confirmaciondel usuario. Es la opcion contraria al -i.

-v --verbose Muestra informacion de progreso de la operacion de borrado.

Tabla 7: Opciones del comando cp.

Si despues vuelves a ejecutar el comando ls, veras que los ficheros han desaparecido.Si intentas borrar un directorio con rm (y sin opciones) veras que no te lo permite,

dado que es un directorio. Para borrar directorios existe el comando rmdir. Si intentasborrar un directorio que tiene contenido, el comando rmdir te informara al respecto ytampoco te dejara borrar el directorio. El comando rm tiene algunas opciones que ayu-dan a este respecto, como la opcion -r que permite borrar un directorio aun teniendocontenido. Puedes consultar las opciones disponibles en la Tabla 7.

Hay que tener especial cuidado cuando se usa el comando rm y las mascaras, dadoque por defecto no espera confirmacion del usuario antes de eliminar el fichero. Comoconsejo, antes de usar el comando rm con mascaras en tu maquina, usa el comando ls

y verifica que los ficheros que obtienes son los que deseas eliminar y no otros.El comando ln sirve para crear enlaces (llamados accesos directos, en la jerga de

Windows) a archivos o directorios. Ası, si se ejecuta

ln archivo enlace

Se esta creando un enlace duro llamado “enlace” al fichero de nombre “archivo”. Sise ejecuta con la opcion -s:

ln -s archivo enlace

Se esta creando un enlace simbolico llamado “enlace” al fichero de nombre “archivo”.En Linux, existen dos tipos de enlaces:

Enlace duro: por defecto, cuando hemos creado un fichero en realidad se hacreado un enlace duro a ese fichero. Si creamos un nuevo enlace duro, esta-mos creando otra referencia adicional a ese fichero. Los enlaces duros tienen dosgrandes limitaciones: 1) un enlace duro no puede referenciar a un fichero quese encuentre en diferente particion; 2) un enlace duro no puede referenciar a undirectorio.

Ademas, un enlace duro es indistinguible del fichero al que enlaza. Es decir,cuando eliminamos un enlace duro estamos eliminando dicho enlace pero no el

26 de 51

Page 27: Manejo de terminal de Linux (Programación II, Dpto. de Informática e Ingeniería de ...webdiis.unizar.es/asignaturas/PROG2/doc/programacionCPP/... · 2020-02-12 · Manejo de terminal

Manejo de terminal de LinuxProgramacion II

Dpto. de Informatica e Ingenierıa de Sistemas

fichero. El fichero quedara eliminado cuando no exista ningun otro enlace duroque referencie al fichero.

Enlace simbolico: este tipo de enlaces nacio para superar las limitaciones delos enlaces duros. Un enlace simbolico no es mas que un puntero que referenciaal fichero o directorio real. Son similares a los accesos directos de Windows quecomentabamos anteriormente. Cuando se borra un enlace simbolico, se eliminaunicamente esa referencia al fichero. A diferencia de los enlaces duros, podrıaocurrir que se eliminara un fichero apuntado por un enlace simbolico. Estassituaciones se distinguen claramente con el comando ls, dado que si el fichero odirectorio al que apunta un enlace simbolico no se encuentra, este aparecera encolor rojo.

Poniendo en practica los conocimientos adquiridos

Dado que lo que has aprendido aquı implica manipular ficheros, vamos a crear unentorno donde poder practicar con estos comandos de manera segura. Abre una nuevasesion de terminal y crea un directorio en tu carpeta personal con el nombre “pruebas”:

alumno@programacion -II:~$ cd

alumno@programacion -II:~$ mkdir pruebas

Ahora, dentro de este directorio, vamos a crear dos nuevos directorios “dir1” y“dir2”. Para ello, usa el comando cd y el comando mkdir:

alumno@programacion -II:~$ cd pruebas

alumno@programacion -II:~/ pruebas$ mkdir dir1 dir2

Copia ahora el fichero “/etc/passwd” al directorio de trabajo actual:

alumno@programacion -II:~/ pruebas$ cp /etc/passwd .

Fıjate que has realizado la copia usando la abreviatura del directorio actual detrabajo, el sımbolo “.”. Si ahora listas el contenido del directorio con ls -l:

alumno@programacion -II:~/ pruebas$ $ ls -l

total 12

drwxrwxr -x 2 alumno alumno 4096 2008 -01 -10 16:40 dir1

drwxrwxr -x 2 alumno alumno 4096 2008 -01 -10 16:40 dir2

-rw-r--r-- 1 alumno alumno 1650 2008 -01 -10 16:07 passwd

Este fichero contiene la informacion de todos los usuarios que se encuentran definidosen el sistema. En concreto, informa sobre el nombre completo y el nombre de la cuenta,entre otros elementos. Puedes echar un vistazo a este documento con los comandos quehas aprendido anteriormente (less o more).

Vuelve a copiar el fichero, pero esta vez con la opcion -v para observar su compor-tamiento:

alumno@programacion -II:~/ pruebas$ cp -v /etc/passwd .

`/etc/passwd ' -> `./passwd '

27 de 51

Page 28: Manejo de terminal de Linux (Programación II, Dpto. de Informática e Ingeniería de ...webdiis.unizar.es/asignaturas/PROG2/doc/programacionCPP/... · 2020-02-12 · Manejo de terminal

Manejo de terminal de LinuxProgramacion II

Dpto. de Informatica e Ingenierıa de Sistemas

La copia del fichero se realiza de nuevo, y fıjate que no se indica en ningun momentoque el fichero previo se esta sobrescribiendo. Simplemente se muestra un texto indican-do el proceso de copia. Para conseguir un mensaje de aviso, recuerda que tendrıamosque usar la opcion -i:

alumno@programacion -II:~/ pruebas$ cp -i /etc/passwd .

cp: ¿sobreescribir `./passwd '? (s/n)

Si respondes una “s”, el fichero se copiara sobrescribiendo el anterior. En cambio, sirespondes con una “n”, el fichero no se copiara.

Vamos ahora a usar el comando mv. Renombra el fichero “passwd” de tu carpeta“pruebas” a “cuentas”:

alumno@programacion -II:~/ pruebas$ mv passwd cuentas

Ahora, mueve el fichero “cuentas” a la carpeta “dir1”:

alumno@programacion -II:~/ pruebas$ mv cuentas dir1

Vuelve a moverlo desde “dir1” a la carpeta “dir2”:

alumno@programacion -II:~/ pruebas$ mv dir1/cuentas dir2

Y vuelve a dejarlo en la carpeta “pruebas”:

alumno@programacion -II:~/ pruebas$ mv dir2/cuentas .

Vamos ahora a mover directorios directamente. Primero, vuelve a mover el fichero“cuentas” a “dir1”:

alumno@programacion -II:~/ pruebas$ mv cuentas dir1

Ahora, mueve el directorio “dir1” dentro del directorio “dir2” y comprueba que laoperacion se ha realizado correctamente con el comando ls:

alumno@programacion -II:~/ pruebas$ mv dir1 dir2

alumno@programacion -II:~/ pruebas$ ls -l dir2

total 4

drwxrwxr -x 2 alumno alumno 4096 oct 22 13:06 dir1

alumno@programacion -II:~/ pruebas$ ls -l dir2/dir1

total 4

-rw-r--r-- 1 alumno alumno 1882 oct 22 12:33 cuentas

Fıjate que como el directorio “dir2” ya existıa, lo que ha hecho el comando mv hasido mover un directorio dentro de otro. Si el directorio “dir2” no hubiera existido, elcomando mv habrıa simplemente renombrado el directorio “dir1” como “dir2”.

Vuelve a dejar todo como estaba inicialmente:

alumno@programacion -II:~/ pruebas$ mv dir2/dir1 .

alumno@programacion -II:~/ pruebas$ mv dir1/cuentas .

Vamos ahora a crear diferentes enlaces. Crea primero una serie de enlaces duros:

28 de 51

Page 29: Manejo de terminal de Linux (Programación II, Dpto. de Informática e Ingeniería de ...webdiis.unizar.es/asignaturas/PROG2/doc/programacionCPP/... · 2020-02-12 · Manejo de terminal

Manejo de terminal de LinuxProgramacion II

Dpto. de Informatica e Ingenierıa de Sistemas

alumno@programacion -II:~/ pruebas$ ln cuentas cuentas -duro

alumno@programacion -II:~/ pruebas$ ln cuentas dir1/cuentas -duro

alumno@programacion -II:~/ pruebas$ ln cuentas dir2/cuentas -duro

Con esto que has hecho, has creado 4 instancias (elementos) del mismo fichero “cuen-tas”. Ejecuta ahora el comando ls -l en tu carpeta de “pruebas” y observa el resul-tado:

alumno@programacion -II:~/ pruebas$ ls -l

total 16

drwxrwxr -x 2 alumno alumno 4096 oct 22 12:30 dir1

drwxrwxr -x 2 alumno alumno 4096 oct 22 12:30 dir2

-rw-r--r-- 4 alumno alumno 1882 oct 22 12:33 cuentas

-rw-r--r-- 4 alumno alumno 1882 oct 22 12:33 cuentas -duro

Fıjate que ahora el segundo campo del listado en formato largo, para los ficheros“cuentas” y “cuentas-duro”, tiene el valor 4. Este numero indica el numero de enlacesduros que existen a ese fichero. Recuerda que siempre, por defecto, cuando se crea unfichero en el sistema se crea un enlace duro y por tanto, el numero mınimo que tendraun fichero en ese campo es el valor 1.

Sin embargo, lo que no se sabe viendo este listado es que realmente los ficheros“cuentas” y “cuentas-duro” son el mismo fichero. Ambos tienen el mismo tamano yla misma fecha, pero esos indicativos no son suficientes. Existe una forma de podervisualizarlo. Cuando uno habla de enlaces duros, puede imaginar que los ficheros estancompuestos por dos partes: por un lado, sus datos (el contenido) y por otro, su nombre.Cuando se crea un enlace duro, se crea una parte nueva de nombre, pero la parte delcontenido siempre sigue siendo la misma. En Linux, los ficheros se almacenan en eldisco en una secuencia de bloques llamada inodos. A cada inodo, luego se le asigna unnombre. Por tanto, cada enlace duro esta referenciando a un inodo especıfico dentrodel disco duro, que es el que contiene los datos del fichero. Si ejecutas de nuevo elcomando ls, pero con la opcion -i veras esta informacion que acabamos de describir:

alumno@programacion -II:~/ pruebas$ ls -li

total 16

12353539 drwxrwxr -x 2 alumno alumno 4096 oct 22 12:30 dir1

12353540 drwxrwxr -x 2 alumno alumno 4096 oct 22 12:30 dir2

12353542 -rw-r--r-- 4 alumno alumno 1882 oct 22 12:33 cuentas

12353542 -rw-r--r-- 4 alumno alumno 1882 oct 22 12:33 cuentas -duro

El primer campo de este listado largo es el numero del inodo. Como puedes ver,tanto el fichero “cuentas” como el fichero “cuentas-duro” comparten el mismo numerode inodo.

Vamos ahora a crear enlaces simbolicos. Recuerda que tienen ciertas ventajas respec-to a los enlaces duros, como que pueden referenciar a archivos en diferentes dispositivosy a directorios (los enlaces duros sirven para referenciar unicamente a archivos).

El comando para crear enlaces simbolicos es similar al anterior, pero con la opcion-s. Ejecuta los siguientes comandos:

29 de 51

Page 30: Manejo de terminal de Linux (Programación II, Dpto. de Informática e Ingeniería de ...webdiis.unizar.es/asignaturas/PROG2/doc/programacionCPP/... · 2020-02-12 · Manejo de terminal

Manejo de terminal de LinuxProgramacion II

Dpto. de Informatica e Ingenierıa de Sistemas

alumno@programacion -II:~/ pruebas$ ln -s cuentas cuentas -sym

alumno@programacion -II:~/ pruebas$ ln -s ../ cuentas dir1/cuentas -sym

alumno@programacion -II:~/ pruebas$ ln -s ../ cuentas dir2/cuentas -sym

El primer comando esta creando un enlace simbolico al fichero “cuentas” en el propiodirectorio de trabajo. Los otros dos comandos, sin embargo, estan creando los mismosenlaces simbolicos pero dentro de cada uno de los directorios “dir1” y “dir2”. Observaque el fichero referenciado en ambos casos aparece precedido por “../”. Esto se debea que el fichero enlazado siempre tiene que estar referenciado desde el punto de vistadesde donde se encuentra el enlace. Observa ahora el resultado del comando ls paralistar el contenido del directorio “dir1”:

alumno@programacion -II:~/ pruebas$ ls -l dir1

total 4

-rw-r--r-- 4 alumno alumno 1882 oct 22 12:33 cuentas -duro

lrwxrwxrwx 1 alumno alumno 10 oct 22 12:37 cuentas -sym -> ../ cuentas

Fıjate que el sımbolo del primer campo del fichero “cuentas-sym” es el caracter“l”.Este caracterindica que el fichero es un enlace simbolico. Observa tambien que elfichero “cuentas-sym” apunta a “../cuentas”, lo que es correcto. Por ultimo, observaque el tamano de este enlace simbolico es 10. Este numero corresponde con la longituddel nombre del fichero referenciado, que no tiene que ver con el tamano del ficheroreferenciado.

Crea tambien un enlace simbolico al directorio “dir1” en tu carpeta “pruebas” ycomprueba su resultado con el comando ls -l:

alumno@programacion -II:~/ pruebas$ ln -s dir1 dir1 -sym

alumno@programacion -II:~/ pruebas$ ls -l

total 16

drwxrwxr -x 2 alumno alumno 4096 oct 22 12:30 dir1

lrwxrwxrwx 1 alumno alumno 4 oct 22 12:45 dir1 -sym -> dir1

drwxrwxr -x 2 alumno alumno 4096 oct 22 12:30 dir2

-rw-r--r-- 4 alumno alumno 1882 oct 22 12:33 cuentas

-rw-r--r-- 4 alumno alumno 1882 oct 22 12:33 cuentas -duro

lrwxrwxrwx 1 alumno alumno 7 oct 22 12:37 cuentas -sym -> cuentas

Para acabar, vamos a borrar todo lo que hemos ido creando. Elimina primero elenlace duro que has creado previamente en tu carpeta de “pruebas”:

alumno@programacion -II:~/ pruebas$ rm cuentas -duro

alumno@programacion -II:~/ pruebas$ ls -l

total 12

drwxrwxr -x 2 alumno alumno 4096 oct 22 12:30 dir1

lrwxrwxrwx 1 alumno alumno 4 oct 22 12:45 dir1 -sym -> dir1

drwxrwxr -x 2 alumno alumno 4096 oct 22 12:30 dir2

-rw-r--r-- 3 alumno alumno 1882 oct 22 12:33 cuentas

lrwxrwxrwx 1 alumno alumno 7 oct 22 12:37 cuentas -sym -> cuentas

30 de 51

Page 31: Manejo de terminal de Linux (Programación II, Dpto. de Informática e Ingeniería de ...webdiis.unizar.es/asignaturas/PROG2/doc/programacionCPP/... · 2020-02-12 · Manejo de terminal

Manejo de terminal de LinuxProgramacion II

Dpto. de Informatica e Ingenierıa de Sistemas

Observa que efectivamente se ha eliminado el fichero “cuentas-duro”, y que ademas,el numero de enlaces duros al fichero “cuentas” se ha decrementado en una unidad.Vamos ahora a eliminar el fichero “cuentas” pero con la opcion -i:

alumno@programacion -II:~/ pruebas$ rm -i cuentas

rm: ¿borrar el fichero regular 'cuentas '? (s/n)

Presionando la tecla “s”, el fichero se eliminara. Sin embargo, esto acaba de crearuna inconsistencia dado que el enlace simbolico creado anteriormente apuntaba a estefichero. Observa el resultado ahora de ejecutar el comando ls -l. Deberıas de ver queel enlace simbolico aparece en color rojo, indicando que el enlace se ha roto.

Si intentaras ahora leer el contenido del fichero, observarıas un mensaje de errorindicando que el fichero ya no existe:

alumno@programacion -II:~/ pruebas$ less cuentas -sym

cuentas -sym: No existe el fichero o el directorio

Borra ahora los enlaces simbolicos creados anteriormente:

alumno@programacion -II:~/ pruebas$ rm cuentas -sym dir1 -sym

alumno@programacion -II:~/ pruebas$ ls -l

total 8

drwxrwxr -x 2 alumno alumno 4096 oct 22 12:30 dir1

drwxrwxr -x 2 alumno alumno 4096 oct 22 12:30 dir2

Una cosa importante de los enlaces simbolicos es que la mayorıa de las operacionesque se hacen a traves de comandos se realizan sobre el fichero referenciado, no sobre elenlace. El comando rm, sin embargo, es una excepcion. Cuando se elimina un enlace,se elimina el enlace y no el fichero enlazado.

Para acabar, vamos a volver a nuestra carpeta personal y a eliminar el directorioque hemos creado para hacer pruebas:

alumno@programacion -II:~/ pruebas$ cd

alumno@programacion -II:~$ rm -r pruebas

Recuerda que si no usamos la opcion -r, el comando rm no nos va a dejar realizarla eliminacion del directorio “pruebas” dado que contiene elementos.

6. Trabajando con los comandos

Hasta ahora, has estado trabajando con una serie de comandos, cada uno con unaserie de opciones y argumentos. Pero, ¿que son exactamente estos comandos? En estaparte del documento vamos a tratar de aclarar un poco mas este concepto de comandos.

Existen cuatro tipos diferentes de comandos:

Un programa ejecutable, como todos aquellos ficheros que has visto en la carpeta“/usr/bin”. Estos programas son ejecutables binarios compilados, escritos enlenguajes de programacion como C o C++, o en lenguajes de scripting comoPython, Perl, Ruby, etc.

31 de 51

Page 32: Manejo de terminal de Linux (Programación II, Dpto. de Informática e Ingeniería de ...webdiis.unizar.es/asignaturas/PROG2/doc/programacionCPP/... · 2020-02-12 · Manejo de terminal

Manejo de terminal de LinuxProgramacion II

Dpto. de Informatica e Ingenierıa de Sistemas

Un comando interno de la propia terminal. La terminal bash incorpora unmonton de funcionalidades internas, accesibles a traves de comandos. Por ejem-plo, el comando cd es uno de ellos.

Una funcion de shell. Existen pequenas funciones de shell en el entorno del usua-rio. Simplemente es necesario que conozcas que existen, pero no vamos a entraren mas profundidad.

Un alias, que son comandos que podemos definir nosotros mismos como acorta-ciones de otros comandos. Por ejemplo, es muy habitual definirse el comando ll

como alias de ls -l.

Para saber el tipo de comando, existe el comando type. Abre una nueva termina yejecuta los siguientes comandos:

alumno@programacion -II:~$ type type

type es una orden interna del shell

alumno@programacion -II:~$ type ls

ls es un alias de 'ls --color=auto'

alumno@programacion -II:~$ type cp

cp est a asociado (/usr/bin/cp)

Como ves, nos esta informando sobre tres comandos, cada uno de un tipo diferente.Como ves, el comando ls en realidad es un alias al propio comando con la opcion decolor en automatico. Esto es lo que hace que cuando usas el comando ls su resultadoaparezca en color.

Para conocer donde se encuentra un comando en particular, se usa el comandowhich. Este comando recibe por argumento el comando a consultar. Ası, si escribes enuna terminal:

alumno@programacion -II:~$ which ls

/usr/bin/ls

Este comando which solo funciona para programas ejecutables, no funciona ni paracomandos internos de la propia terminal ni para alias. Si intentas usar el comandowhich con un comando interno de la propia terminal (como por ejemplo cd), veras uncomportamiento similar a:

alumno@programacion -II:~$ which cd

alumno@programacion -II:~$

Fıjate que no te muestra nada, y vuelve a sacar la prompt de la terminal. Uno delos comandos mas utiles que puedes aprender es help. Este comando interno de bash

permite visualizar la ayuda de cada uno de los comandos internos que se pueden usaren la terminal. Por ejemplo:

alumno@programacion -II:~$ help cd

cd: cd [-L|[-P] [-e]]] [dir]

Modifica el directorio de trabajo de la shell.

32 de 51

Page 33: Manejo de terminal de Linux (Programación II, Dpto. de Informática e Ingeniería de ...webdiis.unizar.es/asignaturas/PROG2/doc/programacionCPP/... · 2020-02-12 · Manejo de terminal

Manejo de terminal de LinuxProgramacion II

Dpto. de Informatica e Ingenierıa de Sistemas

[... Resto de informaci on omitida por claridad ...]

Respecto a la notacion de las opciones que nos esta mostrando, la aparicion deopciones entre corchetes indica que la opcion es opcional. Del mismo modo, un caracterbarra vertical “|” indica que son elementos mutuamente exclusivos (es decir, una u otraopcion, pero no ambas). Por ejemplo, en el caso anterior del comando cd tenemos:

cd [-L|[-P [-e]]] [dir]

Esto indica que el comando cd puede ir seguido opcionalmente por “-L” o por “-P” y que ademas, si se especifica la opcion “-P”, puede especificarse tambien unaopcion “-e”. Por ultimo, tiene otro parametro opcional “dir”. La ayuda del comandocd especifica para que se usan cada una de las opciones. Ahora mismo no es importanteprofundizar en esto, unicamente es necesario que sepas la existencia del comando help

y como interpretar su salida.Muchos programas tienen ademas la opcion --help o -h, que permite mostrar la

ayuda del comando en cuestion. Por ejemplo, si ejecutas:

alumno@programacion -II:~$ mkdir --help

Modo de empleo: mkdir [OPCI ON]... DIRECTORIO ...

Crea los DIRECTORIO(s), si no existen ya.

[... Resto de informaci on omitida por claridad ...]

Veras que se muestra la ayuda del comando mkdir explicado anteriormente. No todoslos programas incorporan esta opcion, pero conviene intentar usarla. Normalmente, sino la tiene incorporada aparecera un mensaje informativo indicando como se usa elprograma, revelando ası tambien la informacion de uso del mismo.

Otro comando de interes para conocer la ayuda de un programa es el comando man.Este comando muestra el manual o pagina man de un comando pasado por argumento.

Las paginas de man pueden variar mınimamente en formato pero generalmentecontienen un tıtulo, un resumen de la sintaxis del comando, una descripcion de paraque se usa y un listado y descripcion de cada una de las opciones del comando. Nosuelen incluir ejemplos, dado que el objetivo de estas paginas es servir de referencia,no ser un tutorial al uso. Ejecuta en una terminal:

alumno@programacion -II:~$ man ls

Veras que se muestra la pagina de manual del comando ls, explicado anteriormente.En la mayorıa de los sistemas Linux, el comando man usa el comando less para mostrarla informacion del manual, con lo que los comandos de less pueden usarse mientrasse visualiza la pagina del manual.

Es importante que sepas que en realidad las paginas del manual se dividen en di-ferentes secciones, dado que el manual cubre no solo los comandos de usuario si notambien otros comandos de administracion de sistemas, interfaces de programa, forma-tos de fichero y otros. En la Tabla 8 tienes una descripcion de las diferentes seccionesque existen en man.

33 de 51

Page 34: Manejo de terminal de Linux (Programación II, Dpto. de Informática e Ingeniería de ...webdiis.unizar.es/asignaturas/PROG2/doc/programacionCPP/... · 2020-02-12 · Manejo de terminal

Manejo de terminal de LinuxProgramacion II

Dpto. de Informatica e Ingenierıa de Sistemas

Seccion Descripcion del contenido1 Comandos de usuario. Por defecto, es la seccion que se consulta.2 Interfaz de programacion (llamadas a sistema del nucleo)3 Interfaz de programacion (llamadas a la librerıa de C)4 Archivos especiales como dispositivos y drivers5 Formatos de ficheros6 Juegos y otros entretenimientos7 Miscelanea8 Comandos de administracion de sistema

Tabla 8: Organizacion de las secciones de man.

Para especificar una entrada concreta del manual, hay que usar el comando man

como:

man numeroseccion comando

Por ejemplo, observa la diferencia entre ejecutar los siguientes comandos:

man passwd

y

man 5 passwd

Mientras que el primer comando (man passwd) nos informa de la aplicacion de ad-ministracion de sistemas passwd, usada para el cambio de contrasena de la cuenta deusuarios, el segundo comando (man 5 passwd) nos informa sobre como es el formatodel fichero “/etc/passwd”.

Un comando que resulta util para encontrar las posibles paginas del manual quehacen referencia a un termino de busqueda en concreto es apropos. Por ejemplo, parabuscar todas las referencias en el manual al comando mkdir podemos ejecutar en unaterminal lo siguiente:

alumno@programacion -II:~$ apropos mkdir

mkdir (1) - crea directorios

mkdir (2) - crea un directorio

gvfs -mkdir (1) - (asunto desconocido)

El primer campo del resultado de la busqueda corresponde con el nombre de la paginadel manual, mientras que el segundo valor corresponde con el numero de seccion. Estecomando apropos es equivalente al comando man con la opcion -k.

Por ultimo, otro comando util es whatis. Este comando muestra el nombre y unadescripcion en una lınea de cada pagina del manual que coincide con el termino bus-cado. Por ejemplo, si ejecutas en la terminal whatis ls veras la descripcion corta delcomando ls:

34 de 51

Page 35: Manejo de terminal de Linux (Programación II, Dpto. de Informática e Ingeniería de ...webdiis.unizar.es/asignaturas/PROG2/doc/programacionCPP/... · 2020-02-12 · Manejo de terminal

Manejo de terminal de LinuxProgramacion II

Dpto. de Informatica e Ingenierıa de Sistemas

alumno@programacion -II:~$ whatis ls

ls (1) - listan los contenidos de directorios

Para acabar con esta parte, vamos a ver como crear tus propios alias. Antes decontinuar, conviene que conozcas que podemos ejecutar mas de un comando en unasola lınea de terminal usando el caracter “;” como separador de comandos. Por ejemplo,si ejecutamos en una terminal lo siguiente:

alumno@programacion -II:~$ cd /usr; ls; cd -

bin games include lib lib32 lib64 libexec libx32 local

sbin share src

/home/alumno

alumno@programacion -II:~$

Como puedes observar, hemos ejecutado los tres comandos en una unica lınea: pri-mero, hemos cambiado el directorio de trabajo a “/usr”. Despues, hemos listado sucontenido (ls) y por ultimo hemos vuelto al directorio de trabajo anterior con cd -.

Vamos a ver ahora como definir un nuevo comando que nos permita usar esta secuen-cia de instrucciones con un alias. Un alias no es mas que la definicion de un comandonuevo. La definicion de alias nos permite trabajar con nuestro sistema de una ma-nera mas agil y rapido, dado que podemos definirnos alias de aquellas secuencias decomandos que ejecutemos con bastante frecuencia.

Para definir un alias, tenemos que hacer uso del comando alias, con la siguienteestructura:

alias nombre='cadena '

Despues del comando alias tenemos que definir el nombre que le damos a estenuevo comando. Por supuesto, este nombre no debe de coincidir con algun otro co-mando existente (recuerda que acabas de aprender diferentes comandos para conocersi un comando existe ya o no). Despues de esta cadena, sin ningun tipo de espacio niseparacion, aparece el sımbolo “=”, seguido por una cadena entrecomillada (comillasimple). Esta cadena es el comando que se ejecutara cuando se ejecute nuestro alias.Ası, por ejemplo, para definir un alias de la secuencia de comandos anteriormentedescrita basta con ejecutar en una terminal:

alumno@programacion -II:~$ alias foo='cd /usr; ls; cd -'

alumno@programacion -II:~$ foo

bin games include lib lib32 lib64 libexec libx32 local

sbin share src

/home/alumno

Como ves, despues de definir el alias hemos usado el nuevo comando foo, cuyaejecucion ha sido identica a la anteriormente descrita. Observa ahora el efecto delcomando type aprendido anteriormente:

alumno@programacion -II:~$ type foo

foo es un alias de `cd /usr; ls; cd -'

35 de 51

Page 36: Manejo de terminal de Linux (Programación II, Dpto. de Informática e Ingeniería de ...webdiis.unizar.es/asignaturas/PROG2/doc/programacionCPP/... · 2020-02-12 · Manejo de terminal

Manejo de terminal de LinuxProgramacion II

Dpto. de Informatica e Ingenierıa de Sistemas

Para borrar un alias definido, podemos usar el comando unalias:

alumno@programacion -II:~$ unalias foo

alumno@programacion -II:~$ type foo

bash: type: foo: no encontrado

El comando alias tambien se puede usar para conocer cuales son los alias definidosactualmente en nuestro entorno de ejecucion. Para ello, hay que ejecutarlo sin ninguntipo de parametros:

alumno@programacion -II:~$ alias

alias ls='ls --color=auto'

Como ves, estos son los alias definidos en nuestro entorno de ejecucion actual. Unacosa importante que tienes que saber de los alias es que son volatiles: es decir, en cuantoacabe la sesion de terminal, desaparecen. Esto se puede solucionar anadiendo nuestrosalias a los ficheros de configuracion de entorno, como aprenderemos mas adelante.

7. Redireccion

En esta parte vas a aprender una de las cosas mas potentes que tiene la terminal,que es la redireccion de la entrada/salida. Vas a ver como se puede redireccionar laentrada o la salida de un comando a un fichero, ası como conectar entre sı diferentescomandos a traves de tuberıas.

Muchos de los programas que has visto hasta ahora producen algun tipo de salida.Esta salida pueden ser datos, cuando el programa se ejecuta correctamente, o unmensaje de error (junto con un estado de error) que nos indica que es lo que ha queha ido mal al ejecutar el comando.

Los sistemas Unix se caracterizan por el motto “todo es un fichero”. Ası, la sali-da normal de los comandos siempre se escriben a un fichero especial llamado “salidaestandar” (o stdout), mientras que los mensajes de error se escriben a un fichero es-pecial llamado “salida estandar de error” (o stderr). Por defecto, ambas salidas estanvinculadas a la terminal y no se salvan a un fichero de disco. La “entrada estandar”(o stdin) es por donde reciben la entrada de datos los programas y, por defecto, seencuentra vinculada al teclado del ordenador.

La redireccion de entrada y salida es lo que nos va a permitir cambiar este comporta-miento en los programas. Por ejemplo, la salida estandar se puede redirigir a un ficheromediante el sımbolo “>”, seguido del nombre de un fichero. Esto cambiara la salidaestandar del comando previo a “>”, de modo que todo lo que escribiera el programapor pantalla ira en este caso a un fichero de texto. Por ejemplo, si ejecutamos:

alumno@programacion -II:~$ ls -l /usr/bin > ls-usr -bin.txt

Se habra creado un fichero con nombre “ls-usr-bin.txt” que contiene en realidad ellistado del directorio “/usr/bin”, en formato largo (recuerda el comando ls con suopcion -l). Observa el tamano del fichero con el mismo comando ls:

36 de 51

Page 37: Manejo de terminal de Linux (Programación II, Dpto. de Informática e Ingeniería de ...webdiis.unizar.es/asignaturas/PROG2/doc/programacionCPP/... · 2020-02-12 · Manejo de terminal

Manejo de terminal de LinuxProgramacion II

Dpto. de Informatica e Ingenierıa de Sistemas

alumno@programacion -II:~$ ls -l ls-usr -bin.txt

Tarea 8.Lista el contenido de tu carpeta personal, en formato largo, y guardalo en unfichero “salida.txt”. Visualiza ahora el contenido de este fichero creado conless.

Por tanto, con “¿” hemos redirigido la salida estandar a un fichero. Pero ¿que sucedecon la salida estandar de error? Prueba a ejecutar lo siguiente:

alumno@programacion -II:~$ ls -l /bin/usr > ls-usr -bin.txt

ls: no se puede acceder a '/bin/usr': No existe el fichero o el directorio

Como ves, el mensaje de error ha aparecido en la pantalla, y si observamos el tamanodel fichero creado, veremos que no tiene contenido:

alumno@programacion -II:~$ ls -l ls-usr -bin.txt

-rw-r--r-- 1 alumno alumno 0 nov 1 19:51 ls-usr -bin.txt

Recuerda que antes, sin embargo, sı que tenıa contenido. El sımbolo “>” es impor-tante que sepas que trunca el contenido del fichero si existe, y si no existe, crea unfichero vacıo. Si queremos anadir nuevo contenido a un fichero existente, debemos deusar “>>”. Prueba a ejecutar ahora lo siguiente:

alumno@programacion -II:~$ ls -l /usr/bin > ls-usr -bin.txt

alumno@programacion -II:~$ ls -l /usr/bin >> ls-usr -bin.txt

alumno@programacion -II:~$ ls -l /usr/bin >> ls-usr -bin.txt

alumno@programacion -II:~$ ls -l ls-usr -bin.txt

-rw-r--r-- 1 alumno alumno 181212 nov 1 19:52 ls-usr -bin.txt

Como ves, el tamano del fichero “ls-usr-bin.txt” se ha triplicado, dado que contieneel listado del directorio “/usr/bin” tres veces.

Respecto a la redireccion de la salida estandar de error, esto se hace precediendo elsımbolo “>” con un 2. Esto se debe a que, en realidad, la entrada estandar se refiereal numero 0, la salida estandar al numero 1 y la salida estandar de error al numero 3.Estos numeros se llaman descriptores de fichero. Por tanto, la salida de error se puederedireccionar como:

alumno@programacion -II:~$ ls -l /bin/usr 2> ls-error.txt

alumno@programacion -II:~$ ls -l ls-error.txt

-rw-r--r-- 1 alumno alumno 75 nov 1 19:52 ls-error.txt

Como ves, ahora no aparece ningun mensaje de error por la terminal y el fichero“ls-error.txt” tiene contenido.

Tarea 9.Observa el contenido del fichero “ls-error.txt”.

37 de 51

Page 38: Manejo de terminal de Linux (Programación II, Dpto. de Informática e Ingeniería de ...webdiis.unizar.es/asignaturas/PROG2/doc/programacionCPP/... · 2020-02-12 · Manejo de terminal

Manejo de terminal de LinuxProgramacion II

Dpto. de Informatica e Ingenierıa de Sistemas

Ambas redirecciones se pueden combinar de modo que la salida estandar y la salidaestandar de error se redirijan a un unico fichero. Esto se consigue como sigue:

alumno@programacion -II:~$ ls -l /bin/usr > ls-error.txt 2>&1

alumno@programacion -II:~$ ls -l ls-error.txt

-rw-r--r-- 1 alumno alumno 75 nov 1 19:52 ls-error.txt

Primero se ha redirigido la salida estandar al fichero “ls-error.txt” y despues el des-criptor 2 (la salida estandar de error) se ha redirigido al descriptor 1, que actualmenteesta redirigido al fichero “ls-error.txt”.

Es importante, por tanto, respetar el orden de las redirecciones. En el ejemploanterior, si se cambiara el orden no funcionarıa la redireccion con el efecto deseado.

Hay algunas veces que no nos interesa el contenido de la salida de un comando ysimplemente queremos “descartarlo”. El sistema Linux proporciona un fichero espe-cial para esto, mediante la redireccion de la salida a “/dev/null”. Este archivo es enrealidad un dispositivo del sistema que acepta cualquier entrada y no hace nada conella. Observa la ejecucion del siguiente comando:

alumno@programacion -II:~$ ls -l /bin/usr 2> /dev/null

Hasta ahora, hemos jugado con la redireccion de la salida estandar. Vamos ahoraa aprender como redireccionar la entrada. Antes de continuar, vamos a introducir unnuevo comando que facilitara la comprension de esta parte: el comando cat.

El comando cat lee uno o mas ficheros y los copia a la salida estandar. El comandoacepta uno o mas ficheros opcionales como argumentos, que es lo que muestra porpantalla. Es importante decir que los muestra sin paginar, es decir, no permite ningunainteraccion con el resultado mostrado (a diferencia de los comandos more o less).Ejecuta el siguiente comando en la terminal:

alumno@programacion -II:~$ cat ls -usr -bin.txt

El resultado de la ejecucion sera la visualizacion por la salida estandar (la terminal)del contenido del fichero “ls-usr-bin.txt”.

Como el comando cat sirve para mostrar uno o mas archivos, puede usarse paraunir ficheros. Supon que te has descargado un archivo digital en diferentes partes, yquieres unificarlos para recuperar el fichero original. Si los nombres de los ficherosson movie.mpeg.part01, movie.mpeg.part02, . . . , movie.mpeg.part99, ejecutandoel siguiente comando:

cat movie.mpeg.part* > movie.mpeg

Estarıamos agregando las diferentes partes del fichero para crear un unico archivo.Como la mascara que hemos puesto se expandira de modo ordenado (es decir, laprimera coincidencia sera el fichero movie.mpeg.part01, luego el movie.mpeg.part02y ası), los argumentos estan en el orden correcto para recuperar el fichero original.

Tarea 10.Ejecuta ahora el comando cat sin argumentos en una terminal. ¿Que sucede?

38 de 51

Page 39: Manejo de terminal de Linux (Programación II, Dpto. de Informática e Ingeniería de ...webdiis.unizar.es/asignaturas/PROG2/doc/programacionCPP/... · 2020-02-12 · Manejo de terminal

Manejo de terminal de LinuxProgramacion II

Dpto. de Informatica e Ingenierıa de Sistemas

Como puedes observar, la ejecucion del comando cat sin argumentos provoca que elcomando se queda esperando a que escribamos algo. De hecho, si escribimos cualquiercosa y presionamos la tecla el comando cat nos devuelve el mismo texto que hemosescrito. Para salir de esta interaccion con el comando cat tenemos que indicarle quehemos alcanzado el “final del fichero”, y esto se realiza presionando la tecla de Ctrl yla tecla “d” simultaneamente (es decir, Ctrl + D ).

Este comportamiento puede usarse para conseguir crear ficheros con texto de formarapida. Por ejemplo, ejecuta el siguiente comando en la terminal e introduce algunafrase de ejemplo:

alumno@programacion -II:~$ cat > texto.txt

Esto es una prueba de un editor de texto en lınea de comandos

Recuerda que despues de escribir lo que quieras, tendras que presionar Ctrl + D

para salir del comando cat. Si ahora usas el comando cat para mostrar en pantalla elcontenido del fichero “texto.txt” que acabas de crear:

alumno@programacion -II:~$ cat texto.txt

Esto es una prueba de un editor de texto en lınea de comandos

Como hemos comentado anteriormente, el comando cat acepta tambien texto in-troducido por la entrada estandar. Observa el comportamiento de ejecutar lo siguienteen una terminal:

alumno@programacion -II:~$ cat < texto.txt

Esto es una prueba de un editor de texto en lınea de comandos

Como puedes ver, el sımbolo “<” permite redireccionar la entrada estandar. En estecaso, hemos ejecutado el comando cat redireccionando la entrada estandar desde unfichero. El comportamiento en este caso es identico a ejecutar el comando cat con elfichero como argumento, pero el interes de esta parte era que aprendieras a redirigirla entrada estandar.

Esta habilidad que tienen los programas para leer datos de la entrada estandar yescribirlos por la salida estandar puede aprovecharse en una terminal mediante unacaracterıstica de la terminal llamada tuberıa (o pipeline, del ingles). Usando el operadortuberıa (sımbolo de la barra vertical, “|”), podemos enlazar la salida de un comandocon la entrada de otro:

comando1 | comando2

Para acabar de comprender las ventajas de este operador, vamos a enlazar la salidade un comando con el comando less, que tambien admite entrada estandar y permiteusar los comandos propios para visualizacion (recuerda lo visto anteriormente en laSeccion 4). Abre una sesion de terminal y ejecuta:

alumno@programacion -II:~$ ls -l /usr/bin | less

39 de 51

Page 40: Manejo de terminal de Linux (Programación II, Dpto. de Informática e Ingeniería de ...webdiis.unizar.es/asignaturas/PROG2/doc/programacionCPP/... · 2020-02-12 · Manejo de terminal

Manejo de terminal de LinuxProgramacion II

Dpto. de Informatica e Ingenierıa de Sistemas

Observaras que la salida del comando ls -l /usr/bin esta siendo visualizada atraves del comando less, y puedes avanzar o retroceder en la visualizacion sin proble-mas.

Antes de continuar, me gustarıa hacer una observacion. Aunque estes pensando queel operador “>” y el operador “|” hacen lo mismo, no es ası. Recuerda que el operador“>” redirige la salida del comando y la escribe en donde se especifica, mientras que eloperador “|” simplemente enlaza la salida de un comando con la entrada del otro. Esdecir, imagina que estando en el directorio “/usr/bin” y teniendo permisos suficientes,escribes en la terminal:

ls -l > less

Con la ejecucion de este comando estarıas sobrescribiendo el programa less, en vezde redirigir la salida del primer comando a la entrada del otro.

Las tuberıas son especialmente utiles cuando queremos realizar operaciones mascomplejas con datos. La ventaja es que ademas podemos enlazar varios comandos atraves de tuberıas. Estos comandos intermedios suelen denominarse filtros, dado querecogen una entrada, la manipulan y devuelven una salida. Imagina que queremosobtener una lista ordenada de todos los elementos que tenemos en dos directorios denuestro sistema, por ejemplo “/bin” y “/usr/bin”. Observa el resultado de la ejecuciondel siguiente comando:

ls /bin /usr/bin | sort | less

Tarea 11.Compara la ejecucion del comando anterior con ls /bin /usr/bin | less.¿Que diferencias encuentras entre las salidas de ambos comandos?

Como puedes ver, hemos obtenido una lista ordenada de todos los archivos que seencuentran en esos directorios, en vez de una lista ordenada por directorio. Habras ob-servado que, desgraciadamente, en ese listado que hemos obtenido tenemos elementosrepetidos. Podemos anadir otro comando a nuestra lista de comandos que se encarga defiltrar los datos repetidos, el comando uniq. Observa ahora la ejecucion del comando:

ls /bin /usr/bin | sort | uniq | less

Como ves, la lista de resultados no contiene elementos repetidos. Si en cambio estasinteresado en los duplicados, el comando uniq admite la opcion -d para quedarnosunicamente con los duplicados. Ejecuta ahora y observa el resultado del siguientecomando:

ls /bin /usr/bin | sort | uniq -d | less

Otro comando que puede resultarte de interes es el comando wc. Este comando tedevuelve el numero de lıneas, de palabras y de bytes que contiene un fichero. Ejecutael siguiente comando:

40 de 51

Page 41: Manejo de terminal de Linux (Programación II, Dpto. de Informática e Ingeniería de ...webdiis.unizar.es/asignaturas/PROG2/doc/programacionCPP/... · 2020-02-12 · Manejo de terminal

Manejo de terminal de LinuxProgramacion II

Dpto. de Informatica e Ingenierıa de Sistemas

alumno@programacion -II:~$ wc texto.txt

1 13 63 texto.txt

Como ves, el comando escribe tres numeros y despues el nombre del fichero. El primernumero corresponde con el numero de lıneas, el segundo con el numero de palabras y elultimo con el numero de bytes. Este comando acepta tambien entrada estandar, con loque se puede combinar mediante tuberıas en nuestros comandos. Ademas, incorporadiferentes opciones por si estamos interesados en conocer unicamente el numero delıneas, de palabras o de bytes.

Tarea 12.Consulta la ayuda del comando wc. ¿Que opciones admite este comando y quecambio provocan en su ejecucion?

Otro comando que es especialmente util es grep. Este comando permite buscar lospatrones especificados y mostrar unicamente las lıneas que contienen los patrones bus-cados. Este comando permite especificar los patrones mediante expresiones complejas,llamadas expresiones regulares, aunque por ahora unicamente vamos a utilizar estecomando en su version mas simple: los patrones seran cadenas de texto.

Supon que estas interesado en conocer todos los ficheros en “/bin” y “/usr/bin”que contienen la palabra “pass”. Para ello, simplemente ejecutando la secuencia decomandos:

ls /bin /usr/bin/ | sort | uniq | grep pass

Obtendrıamos todos aquellos ficheros que contienen la palabra “pass”. Ejecuta elcomando anterior en una terminal y observa su resultado. Una opcion que puederesultarte de interes de este comando es la opcion -i, que indica a grep que ignore lasmayusculas o minusculas a la hora de buscar el patron.

Tarea 13.Consulta la ayuda del comando grep. ¿Existe alguna opcion para eliminar delos resultados aquellos contenidos que coincidan con cierto patron?

Otros comandos de interes para el tratamiento de datos son los comandos head ytail. El comando head me permite mostrar unicamente las primeras 10 lıneas de unfichero, mientras que el comando tail me permite mostrar las 10 ultimas. El numero delıneas que muestran puede cambiarse con la opcion -n. Ejecuta los siguientes comandosen una terminal y comprueba su funcionamiento:

alumno@programacion -II:~$ head -n 5 ls-usr -bin.txt

total 98252

-rwxr -xr-x 1 root root 60064 ago 6 20:45 [

-rwxr -xr-x 1 root root 31096 oct 6 14:49 aa-enabled

-rwxr -xr-x 1 root root 31096 oct 6 14:49 aa-exec

-rwxr -xr-x 1 root root 26704 jul 28 17:14 addpart

alumno@programacion -II:~$ tail -n 5 ls-usr -bin.txt

41 de 51

Page 42: Manejo de terminal de Linux (Programación II, Dpto. de Informática e Ingeniería de ...webdiis.unizar.es/asignaturas/PROG2/doc/programacionCPP/... · 2020-02-12 · Manejo de terminal

Manejo de terminal de LinuxProgramacion II

Dpto. de Informatica e Ingenierıa de Sistemas

-rwxr -xr-x 1 root root 7584 ago 24 05:20 zgrep

-rwxr -xr-x 1 root root 50718 oct 27 17:52 zipdetails

-rwxr -xr-x 1 root root 2205 ago 24 05:20 zless

-rwxr -xr-x 1 root root 1841 ago 24 05:20 zmore

-rwxr -xr-x 1 root root 4552 ago 24 05:20 znew

Estos comandos tambien se pueden incorporar en una secuencia de comandos conla tuberıa. Observa el resultado de la ejecucion de la siguiente secuencia:

ls /usr/bin | tail -n 5

Como puedes ver, se muestran las ultimas 5 lıneas del listado de elementos de “/us-r/bin”.

Para acabar con las redirecciones, vamos a hablar del comando tee. Este comandopermite leer de la entrada estandar y copiar el contenido tanto a la salida estanar comoa uno o mas ficheros. Esto permite que, si lo anadimos en medio de una secuenciade comandos enlazados con tuberıas, el “flujo” continue entre los comandos. Estecomando resulta util cuando se desea capturar el contenido de una tuberıa en algunpaso intermedio de procesamiento. Por ejemplo, si ejecutamos el siguiente comando enuna terminal:

ls /bin /usr/bin | tee ls.txt | grep passwd

Veras que se crea un fichero de nombre “ls.txt” que contiene el listado de archivoscontenido en los directorios “/bin” y “/usr/bin”.

8. Permisos

Una de las caracterısticas principales del sistema Linux, ademas de ser un sistemamultitarea, es que es un sistema multi-usuario. Es decir, podemos tener mas de unusuario a la vez usando el mismo sistema. Tienes que pensar que aunque en un or-denador normal solo hay un raton y un teclado (y por tanto, solo un usuario estarafısicamente usando el ordenador), si el ordenador esta conectado a una red o a Internetpuede estar usando a la vez por mas de un usuario.

Para permitir este tipo de interaccion, tiene que haber algun tipo de mecanismo queproteja a unos usuarios de otros, evitando posibles interacciones que pudieran resultarperjudiciales. A ningun usuario le gustarıa que por culpa de un tercero el ordenadorse colgara o que modificara sus ficheros sin ninguna dificultad.

Intenta ejecutar estos comandos en una nueva terminal:

alumno@programacion -II:~$ file /etc/shadow

/etc/shadow: regular file , no read permission

alumno@programacion -II:~$ cat /etc/shadow

cat: /etc/shadow: Permiso denegado

Como puedes ver, nos informa de que como usuarios normales, no tenemos permisospara leer ese fichero. Ese fichero contiene informacion sobre las contrasenas de acceso

42 de 51

Page 43: Manejo de terminal de Linux (Programación II, Dpto. de Informática e Ingeniería de ...webdiis.unizar.es/asignaturas/PROG2/doc/programacionCPP/... · 2020-02-12 · Manejo de terminal

Manejo de terminal de LinuxProgramacion II

Dpto. de Informatica e Ingenierıa de Sistemas

de los usuarios al sistema, y como tal, su contenido esta protegido frente a usuariosnormales. En el modelo de seguridad de Linux, un usuario es propietario de archivosy directorios. Cuando un usuario es el propietario de un archivo o un directorio, tienetotal control sobre su acceso. Los usuarios, ademas, pueden pertenecer a uno o masgrupos. Un grupo es un conjunto de usuarios a los que se les da cierto acceso a archivosy directorios. Ademas de a un grupo, un usuario puede tambien permitir el acceso acualquier otro usuario, lo que se conoce como otros en sistemas Unix.

Para saber a que grupos pertenece un usuario, existe el comando id. Si lo ejecutamosen una terminal:

alumno@programacion -II:~$ id

uid =1000( alumno) gid =1000( alumno) grupos =1000( alumno ),24( cdrom ),25( floppy ),29( audio ),30(dip),44( video ),46( plugdev ),109( netdev ),111( bluetooth)

Nos informa sobre el usuario y el grupo principal al que pertenece el usuario alumno,que es el usuario con quien hemos iniciado sesion en este equipo virtual. Respecto ala salida, observa que aparece un numero entre parentesis. Cuando se crea un usuarioen el sistema, a este se le asigna un numero identificador llamado uid o user identifer,al que se mapea su nombre de usuario. Al usuario, ademas, se le asigna un grupoprimario (que tambien tiene su propio identificador de grupo unico llamado gid ogroup identifer). Ademas, un usuario puede pertenecer a mas de un grupo, como nosinforma en grupos.

Este comando tambien nos permite consultar informacion sobre otros usuarios delsistema simplemente pasando como argumento al comando el nombre del usuario quese quiere consultar. Ejecuta el siguiente comando y observa su resultado:

alumno@programacion -II:~$ id root

uid=0( root) gid =0( root) grupos =0( root)

Como ves, nos muestra la informacion del usuario root. En un sistema Linux, esteusuario es el usuario administrador. Es decir, es el usuario con mayores privilegios detodo el sistema. Literalmente, puede hacer lo que quiera en el sistema.

La informacion mostrada por el comando id esta definida dentro del fichero “/etc/-passwd”, que contiene la informacion de todas las cuentas de usuario del sistema. Lainformacion de los grupos esta contenida en el fichero “/etc/groups”.

Tarea 14.Observa el contenido de los ficheros “/etc/passwd” y “/etc/groups” y utiliza elcomando id para consultar la informacion de diferentes usuarios del sistema.

Muchos de los usuarios que estan configurados en el sistema son en realidad procesosde sistema, definidos por diferentes herramientas de Linux y necesarios para el normalfuncionamiento del sistema. Si observa el fichero “/etc/passwd” con detenimiento,veras que muchos de estos “usuarios” acaban con la cadena “/usr/sbin/nologin”. Laultima tupla de cada usuario determina la terminal que se lanza en ejecucion cuandoel usuario inicia sesion en el sistema. En este caso, “/usr/sbin/nologin” indica que esosusuarios no pueden iniciar sesion en el sistema.

43 de 51

Page 44: Manejo de terminal de Linux (Programación II, Dpto. de Informática e Ingeniería de ...webdiis.unizar.es/asignaturas/PROG2/doc/programacionCPP/... · 2020-02-12 · Manejo de terminal

Manejo de terminal de LinuxProgramacion II

Dpto. de Informatica e Ingenierıa de Sistemas

Atributo Descripcion- Un fichero regular (normal).d Un directorio.l Un enlace simbolico. Cuando tenemos un enlace simbolico, el

resto de atributos siempre sera “rwxrwxrwx”. Estos valores sonvalores inocuos, dado que los atributos reales del fichero son losdel fichero referenciado por el enlace simbolico.

c Un tipo de fichero especial de caracteres, se refiere a un dispositi-vo que trata los datos como un flujo de bytes, como una terminalo un modem.

b Un tipo de fichero especial de bloques, se refiere a un dispositivoque trata los datos en bloques, como un disco duro o un lectorde CD-ROM.

Tabla 9: Tipos de fichero.

Los permisos de acceso a archivos y directorios en Linux se definen en terminos delectura, escritura y ejecucion. Ejecuta los siguientes comandos:

alumno@programacion -II:~$ > foo.txt

alumno@programacion -II:~$ ls -l foo.txt

-rw-r--r-- 1 alumno alumno 0 nov 1 19:55 foo.txt

Los primeros 10 caracteres del listado muestran los atributos del fichero. El primerode ellos indica el tipo de fichero. Existen diferentes tipos de fichero, como se muestranen la Tabla 9.

Los 9 caracteres restantes representan los atributos del fichero, y en concreto los tresprimeros son los permisos de lectura (“r”), escritura (“w”) y ejecucion (“x”) para elpropietario del fichero, los tres siguientes para el grupo del propietario del fichero, y lostres ultimos para cualquier otro usuario del sistema. Estos atributos tienen diferenteefecto segun se asignen a un archivo o a un directorio, segun se muestra en la Tabla 10.

Veamos algunos ejemplos de los atributos de un fichero y su significado:

-rwx------: indica que el fichero es un archivo regular, y que el propietario tienepermisos de lectura, escritura y ejecucion. Nadie mas tiene acceso al fichero.

-rw-r--r--: indica que el fichero es un archivo regular y que el propietario tienepermisos de lectura y escritura. Ademas, el contenido del fichero puede ser leıdopor cualquier miembro del grupo del propietario y por cualquier otro usuario.

-rwxr-xr-x: indica que el fichero es un archivo regular y que el propietariotiene permisos de lectura, escritura y ejecucion. Ademas, el contenido del ficheropuede ser leıdo y ejecutado por cualquier miembro del grupo del propietario ypor cualquier otro usuario.

-rw-rw----: indica que el fichero es un archivo regular y que el propietario

44 de 51

Page 45: Manejo de terminal de Linux (Programación II, Dpto. de Informática e Ingeniería de ...webdiis.unizar.es/asignaturas/PROG2/doc/programacionCPP/... · 2020-02-12 · Manejo de terminal

Manejo de terminal de LinuxProgramacion II

Dpto. de Informatica e Ingenierıa de Sistemas

Atributo Significado en archivos Significado en directoriosr Permite abrir y leer un archivo. Permite listar los contenidos de un

directorio, siempre y cuando tam-bien se encuentre el atributo deejecucion activado.

w Permite escribir o truncar un fiche-ro, pero no permite renombrar oborrar un fichero. Estas dos acti-vidades se determinan por los atri-butos del directorio.

Permite crear, borrar y renombrarficheros en el directorio, siemprey cuando tambien se encuentre elatributo de ejecucion activado.

x Permite tratar al fichero como unprograma ejecutable y lanzarlo enejecucion. Normalmente, un archi-vo que sea un script requerira tenerlos permisos de lectura y ejecucionpara poder utilizarlo.

Permite acceder a un directorio(e.g., usar el comando cd).

Tabla 10: Significado de atributos en ficheros y directorios.

tiene permisos de lectura y escritura. Ademas, cualquier miembro del grupo delpropietario tambien dispone de los permisos de escritura y ejecucion.

lrwxrwxrwx: un enlace simbolico. Los atributos del enlace son inocuos, y preva-lecen los atributos del fichero referenciado por el enlace simbolico.

drwxrwx---: indica que el fichero es un directorio. Tanto el propietario del di-rectorio como otros miembros del grupo pueden acceder al directorio y modificarlos ficheros contenidos en el directorio.

drwxr-x---: indica que el fichero es un directorio. El propietario tiene permisospara acceder al contenido y modificar los ficheros libremente, pero otros miembrosdel grupo solo puede ver el contenido, no pueden ni crear, ni borrar ni renombrarlos ficheros.

Ahora que ya conoces un poco mas sobre los permisos, vamos a ver como se puedenmodificar los permisos de ficheros ya existentes. Existe un comando que nos permitemodificar los permisos tanto de archivos como de directorios: el comando chmod.

Este comando admite dos formas diferentes para especificar los nuevos permisos: ennotacion octal o en notacion simbolica. Con notacion octal usaremos numeros pararepresentar los permisos deseados. Dado que en notacion octal cada numero se re-presenta por tres dıgitos, existe un mapeo perfecto entre los permisos y los posiblesvalores. En la Tabla 11 encontraras este mapeo.

Ası, podemos cambiar los permisos de la siguiente forma:

alumno@programacion -II:~$ > foo.txt

alumno@programacion -II:~$ ls -l foo.txt

45 de 51

Page 46: Manejo de terminal de Linux (Programación II, Dpto. de Informática e Ingeniería de ...webdiis.unizar.es/asignaturas/PROG2/doc/programacionCPP/... · 2020-02-12 · Manejo de terminal

Manejo de terminal de LinuxProgramacion II

Dpto. de Informatica e Ingenierıa de Sistemas

Octal Binario Significado0 000 —1 001 –x2 010 -w-3 011 -wx4 100 r–5 101 r-x6 110 rw-7 111 rwx

Tabla 11: Notacion octal para los permisos.

-rw-r--r-- 1 alumno alumno 0 nov 1 19:55 foo.txt

alumno@programacion -II:~$ chmod 600 foo.txt

alumno@programacion -II:~$ ls -l foo.txt

-rw------- 1 alumno alumno 0 nov 1 19:55 foo.txt

Como ves, pasando como parametro el valor 600 al comando chmod se han cambiadolos permisos del fichero “foo.txt” a permisos de lectura y escritura para su propietario.

El comando chmod tambien admite especificar los modos de los ficheros mediantenotacion simbolica. Esta notacion se divide en tres partes: a quien afecta el permiso,que operacion hay que realizar (anadir o quitar permiso) y a que permiso se refiere.Para especificar a quien afecta, se puede usar una combinacion de los caracteres “u”(para el propietario del fichero), “g” (para el grupo), “o” (para los otros usuarios) yla “a” (para todos; representa la combinacion de los tres anteriores).

Si no se especifica nada, por defecto se asume “a”. En cuanto a la operacion, sepuede especificar con el caracter “+” si se quiere anadir un permiso, “-” para eliminarun permiso o “=” para especificar que solo los permisos especificados se van a aplicary el resto deben de eliminarse. Los permisos se representan por los caracteres “r”, “w”y “x”. Como ejemplo, vamos a ver una serie de notacion simbolica:

u+x: anade el permiso de ejecucion al propietario del fichero.

u-x: elimina el permiso de ejecucion al propietario del fichero.

+x: anade el permiso de ejecucion al propietario, al grupo, y al resto de usuarios.

o-rw: elimina los permisos de lectura y escritura de cualquier usuario (menos delpropietario y su grupo).

go=rw: establece los permisos del grupo y de cualquier usuario a lectura y escri-tura, eliminando cualquier otro permiso que tuviera el fichero previamente.

u+x,go=rx: anade el permiso de ejecucion para el usuario y stablece los permisosdel grupo y de cualquier usuario a lectura y ejecucion, eliminando cualquier otropermiso que tuviera el fichero previamente.

46 de 51

Page 47: Manejo de terminal de Linux (Programación II, Dpto. de Informática e Ingeniería de ...webdiis.unizar.es/asignaturas/PROG2/doc/programacionCPP/... · 2020-02-12 · Manejo de terminal

Manejo de terminal de LinuxProgramacion II

Dpto. de Informatica e Ingenierıa de Sistemas

Como has visto en el ultimo ejemplo, se pueden especificar mas de un conjunto depermisos mediante comas.

Tarea 15.Crea un par de directorios en tu carpeta personal y un par de archivos de textoen cada uno de ellos con los comandos aprendidos anteriormente. Modifica lospermisos de cada archivo y de cada directorio y comprueba su efecto cuandointentas acceder al contenido del archivo o del directorio.

Llegados hasta aquı, es importante que conozcas como controlar los permisos pordefecto. Cuando se crea un nuevo fichero en el sistema, se crea con unos permisospredefinidos. Estos permisos por defecto se controlan mediante el comando umask. Estecomando usa notacion octal para expresar la mascara de bits que se tiene que aplicar alos atributos del fichero que se crea. Veamos su funcionamiento con un ejemplo. Abreuna nueva terminal y ejecuta la siguiente secuencia de comandos:

alumno@programacion -II:~$ rm -f foo.txt

alumno@programacion -II:~$ umask

0022

alumno@programacion -II:~$ > foo.txt

alumno@programacion -II:~$ ls -l foo.txt

-rw-r--r-- 1 alumno alumno 0 nov 1 19:55 foo.txt

Fıjate que primero hemos eliminado el archivo “foo.txt” en caso de que existiera.Despues, hemos ejecutado el comando umask sin argumentos para conocer cuales sonlos permisos por defecto actuales. La respuesta del comando ha sido 0022, que esla representacion en octal de la mascara actual. Si a continuacion creamos un nuevofichero “foo.txt” y observamos sus permisos, podemos ver que solo el propietario delfichero obtiene los permisos de lectura y escritura sobre el fichero, mientras que elgrupo y otros usuarios obtienen unicamente permiso de lectura. Esto se debe al valorde la mascara.

Vamos a comprender el funcionamiento de la mascara en mas detalle con otro ejem-plo, colocando nosotros mismos otra mascara. Para ello, tenemos que pasar un argu-mento al comando umask, correspondiente a la notacion en octal de la mascara que sequiere aplicar:

alumno@programacion -II:~$ rm -f foo.txt

alumno@programacion -II:~$ umask 0000

alumno@programacion -II:~$ > foo.txt

alumno@programacion -II:~$ ls -l foo.txt

-rw-rw-rw- 1 alumno alumno 0 nov 1 19:57 foo.txt

Cuando colocamos una mascara de 0000 (que quiere decir que desactivamos suefecto), el nuevo fichero tiene permisos de escritura para todo el mundo. Para entendercomo funciona la mascara, compara como quedan los permisos del fichero originalmente(sin mascara) y cuando aplicamos la mascara por defecto anterior (valor 0022):

47 de 51

Page 48: Manejo de terminal de Linux (Programación II, Dpto. de Informática e Ingeniería de ...webdiis.unizar.es/asignaturas/PROG2/doc/programacionCPP/... · 2020-02-12 · Manejo de terminal

Manejo de terminal de LinuxProgramacion II

Dpto. de Informatica e Ingenierıa de Sistemas

Permisos originales --- rw- rw- rw-

Mascara 000 000 010 010

Resultado --- rw- r-- r--Como ves, el resultado de aplicar la mascara consiste en eliminar los permisos allı

donde aparezca un valor 1. Ası, los permisos de escritura para el grupo y otros usuariosse han eliminado.

El cambio de mascara para los permisos por defectos realizado a traves del comandoumask es un valor de entorno de ejecucion. Es decir, si cierras la terminal y vuelves aabrir otra nueva sesion, volveras al valor de mascara que habıa inicialmente.

Por ultimo, conviene comentar algo en relacion al primer octeto. Este octeto esespecial y se usa para especificar unos permisos especiales sobre los ficheros que no sonde interes comentar ahora.

Para cambiar de usuario en una terminal puedes hacerlo a traves del comando su.Este comando permite empezar una sesion de terminal con otro usuario. La sintaxisde este comando es:

su [-[l]] [usuario]

Si se anade la opcion -l, la nueva sesion de terminal sera una sesion de terminalpara el usuario especificado, es decir, se cargara el entorno de usuario y el directoriode trabajo sera su carpeta personal. Esta opcion puede simplificarse con simplementeun guion (sımbolo “-”). Si no se especifica el usuario, se asume que es el superusuario(usuario root). Logicamente, para poder iniciar una sesion con otro usuario tendremosque saber su contrasena para ası poder iniciar la sesion.

Para comenzar una sesion de superusuario, simplemente con la secuencia de coman-dos es suficiente:

alumno@programacion -II:~$ su -

Contrase~na:

root@programacion -II:~#

Despues de colocar la contrasena correctamente (recuerda que es toor), vemos quecambia la sintaxis de la terminal y aparece el sımbolo “#” en vez de “$” y que ademasel directorio de trabajo ha cambiado a la carpeta personal del superusuario (directorio“/root”).

Tarea 16.Comprueba el directorio de trabajo actual en la terminal con el comando pwd,explicado anteriormente.

Cualquier comando que se ejecutara en esa terminal lo harıa con permisos de su-perusuario. Para salir de la sesion de superusuario y volver a la terminal anterior (delusuario “alumno”), simplemente usa el comando exit. Este comando tambien sirvepara cerrar cualquier sesion de terminal que se encuentre abierta:

root@programacion -II:~# exit

alumno@programacion -II:~$

48 de 51

Page 49: Manejo de terminal de Linux (Programación II, Dpto. de Informática e Ingeniería de ...webdiis.unizar.es/asignaturas/PROG2/doc/programacionCPP/... · 2020-02-12 · Manejo de terminal

Manejo de terminal de LinuxProgramacion II

Dpto. de Informatica e Ingenierıa de Sistemas

El comando su tambien nos permite ejecutar unicamente un comando con los per-misos de otros usuarios, en vez de comenzar una sesion de terminal. Para ello, hay queusar la opcion -c seguida del comando que se quiere ejecutar entrecomillado simple:

su -c 'comando '

Ası, por ejemplo, si queremos simplemente saber el contenido del directorio “/root”,podemos ejecutar el siguiente comando:

alumno@programacion -II:~$ su -c 'ls -l /root/*'

Contrase~na:

total 0

alumno@programacion -II:~$

Un comando relacionado con el comando su es sudo. Este comando permite a unusuario normal ejecutar comandos como si fuera un usuario diferente (normalmente,el superusuario) en una manera muy controlada. El particular, este comando sudo

permite poder restringir esta ejecucion con otro usuario a determinados comandos yno a todos. Ademas, el comando sudo no requiere la contrasena del superusuario, sino unicamente la contrasena del propio usuario. Este comando por defecto no vienecon un sistema Linux, siendo necesaria su instalacion. Mas adelante instalaremos esteprograma y aprenderemos a configurarlo.

Para cambiar el usuario propietario y el grupo propietario de un archivo o directorioexiste el comando chown. Este comando requiere permisos de superusuario para poderejecutarlo. Su sintaxis es la siguiente:

chown [propietario ][:[ grupo]] fichero ...

El comando chown puede cambiar el propietario del fichero y/o el grupo propietarioen funcion de los argumentos que se le pasan. Por ejemplo:

chown ricardo foo.txt Cambia el propietario del fichero “foo.txt” del propietarioactual al usuario ricardo.

chown ricardo:users foo.txt Cambia el propietario del fichero “foo.txt” del pro-pietario actual al usuario ricardo y el grupo propietario al grupo users.

chown :users foo.txt Cambia el grupo propietario al grupo users, dejando elpropietario inalterado.

chown ricardo: foo.txt Cambia el propietario del fichero “foo.txt” del propie-tario actual al usuario ricardo y el grupo propietario al grupo principal delusuario ricardo.

El cambio de grupo propietario de un fichero tambien puede realizarse a traves delcomando chgrp, aunque su uso tiene mas limitaciones que el comando chown.

Tarea 17.Consulta la ayuda del manual del comando chgrp y comprueba que comandosserıan equivalentes a los comandos dados como ejemplo con chown para cambiode grupo propietario de un fichero.

49 de 51

Page 50: Manejo de terminal de Linux (Programación II, Dpto. de Informática e Ingeniería de ...webdiis.unizar.es/asignaturas/PROG2/doc/programacionCPP/... · 2020-02-12 · Manejo de terminal

Manejo de terminal de LinuxProgramacion II

Dpto. de Informatica e Ingenierıa de Sistemas

Para acabar con esta parte de permisos y usuarios, el ultimo comando que debesconocer es passwd. Este comando me permite cambiar la contrasena de un usuario. Lasintaxis del comando es:

passwd [usuario]

Si no se especifica el usuario, se cambia la contrasena del usuario actual. En casode especificarse algun usuario, se cambiara la contrasena de acceso del usuario especi-ficado. Logicamente, para poder cambiar la contrasena necesitaremos en primer lugarintroducir la contrasena actual.

Tarea 18.Hasta este momento hemos aprendido a gestionar los permisos de ficheros dediferentes usuarios. Para acabar, crea un usuario nuevo en el sistema llamado“nuevo” y un nuevo grupo llamado “grupo”. Quizas te interesa mirar la ayudadel comando adduser y del comando addgroup.

Tarea 19.Anade el usuario “alumno” al nuevo grupo creado “grupo”. Quizas te interesamirar la ayuda del comando usermod. Verifica que efectivamente se ha anadidoel grupo mediante el comando id (quizas tengas que abrir una nueva sesionde terminal despues de la modificacion de grupos).

Tarea 20.Observa los efectos producidos por los comandos anteriores en los ficheros“/etc/passwd” y “/etc/groups”.

Tarea 21.Elimina el nuevo usuario y el nuevo grupo creados. Quizas te interesa mirarla ayuda del comando deluser y del comando delgroup.

9. Edicion de textos

En esta seccion, vas a aprender un editor de textos desde la terminal. Podrıamosentrar a discutir cual es mejor (emacs, vim, nano, etc.), pero estarıamos discutiendoacerca de las virtudes y desvirtudes de cada uno hasta el dıa siguiente ¨ .

Por simplificar, vamos a introducir el editor nano, ya que es bastante sencillo deentender. Abre una sesion de terminal y ejecuta el comando nano. Tras presionar latecla , veras que aparece algo similar a la Figura 7 en la terminal.

Se trata de la pantalla principal del editor de textos nano. Aquı, podras escribir loque desees. En la parte de abajo del programa aparecen las diferentes opciones quetiene el programa. Normalmente, estas opciones las encontramos en un menu de la

50 de 51

Page 51: Manejo de terminal de Linux (Programación II, Dpto. de Informática e Ingeniería de ...webdiis.unizar.es/asignaturas/PROG2/doc/programacionCPP/... · 2020-02-12 · Manejo de terminal

Manejo de terminal de LinuxProgramacion II

Dpto. de Informatica e Ingenierıa de Sistemas

Figura 7: Editor de textos nano.

ventana grafica, pero aquı estamos en una terminal. Por ello, la forma de acceder a lasmismas es diferente.

Por ejemplo, fıjate que la opcion de “ Salir’ del programa viene precedida por ∧X.Esto indica que para ejecutar esta opcion debemos de presionar la combinacion deteclas Ctrl + X .

Este comando acepta como argumento el nombre del fichero que quieres editar. Porejemplo, ejecuta la siguiente secuencia de comandos en una nueva terminal:

alumno@programacion -II:~$ echo "Fichero con lınea de texto" > fichero.txt

alumno@programacion -II:~$ nano fichero.txt

Despues de la ultima orden, debe de aparecerte el editor de textos nano y el con-tenido del fichero “fichero.txt”, que contendra el texto escrito anteriormente medianteel comando echo.

51 de 51