<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="es">
		<id>https://1984.lsi.us.es/wiki-ssoo/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Marramfer12</id>
		<title>Wiki de Sistemas Operativos - Contribuciones del usuario [es]</title>
		<link rel="self" type="application/atom+xml" href="https://1984.lsi.us.es/wiki-ssoo/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Marramfer12"/>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php/Especial:Contribuciones/Marramfer12"/>
		<updated>2026-04-16T09:29:51Z</updated>
		<subtitle>Contribuciones del usuario</subtitle>
		<generator>MediaWiki 1.29.0</generator>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Contenedores&amp;diff=4697</id>
		<title>Contenedores</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Contenedores&amp;diff=4697"/>
				<updated>2020-01-15T16:09:16Z</updated>
		
		<summary type="html">&lt;p&gt;Marramfer12: /* Ejercicio 3: mysql */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;En esta práctica aprenderemos a utilizar [https://es.wikipedia.org/wiki/Docker_(software) docker] para desplegar contenedores.&lt;br /&gt;
&lt;br /&gt;
= Paso 1: Instalar docker =&lt;br /&gt;
&lt;br /&gt;
Vamos a añadir un nuevo repositorio, ya que docker no está en los repositorios&lt;br /&gt;
oficiales:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt update&lt;br /&gt;
sudo apt install docker.io&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para ver si está todo bien y se ha instalado correctamente, comprobaremos que el&lt;br /&gt;
servicio está activo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo service docker status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Debería mostrar algo similar a lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
● docker.service - Docker Application Container Engine&lt;br /&gt;
   Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)&lt;br /&gt;
   Active: active (running) since Mon 2019-08-26 09:41:40 UTC; 37s ago&lt;br /&gt;
     Docs: https://docs.docker.com&lt;br /&gt;
 Main PID: 3630 (dockerd)&lt;br /&gt;
    Tasks: 8&lt;br /&gt;
   CGroup: /system.slice/docker.service&lt;br /&gt;
           └─3630 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pulsamos la tecla 'q' para salir.&lt;br /&gt;
&lt;br /&gt;
Si el servicio aparece inactivo, puedes lanzarlo con:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo service docker start&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Paso 2: Ejecutar docker con nuestro usuario =&lt;br /&gt;
&lt;br /&gt;
Para no necesitar sudo al utilizar docker, añadiremos a nuestro usuario al grupo&lt;br /&gt;
docker:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo usermod -aG docker ubuntu&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para que el cambio tenga efecto, tendremos que cerrar la sesión de nuestro&lt;br /&gt;
usuario y abrirla de nuevo. Podemos hacerlo fácilmente pulsando CTRL + D y&lt;br /&gt;
volviendo a insertar nuestras credenciales.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Paso 3: Repositorio de imágenes de contenedores DockerHub =&lt;br /&gt;
&lt;br /&gt;
Docker ofrece un servicio de nube denominado ''DockerHub'' que puede ser empleado como red social para compartir tus imágenes de Docker. En ''DockerHub'' existen además imágenes de contenedores preconfiguradas de software, muchas de ellas oficiales (ofrecidas por el propio fabricante del software) que se podrán emplear como base para construir nuevas imágenes adaptadas a nuestras necesidades.&lt;br /&gt;
&lt;br /&gt;
Podremos realizar búsquedas en este repositorio ''DockerHub'' puedes emplear el siguiente comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker search hello-world&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para descargarnos la imagen de ''hello-world'' podemos usar la orden ''pull'':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker pull hello-world&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
También podemos publicar imágenes propias, esto require '''registro de usuario''' en la nube de ''DockerHub'', lo que '''no''' es obligatorio para la realización de esta práctica. Para subir una imagen, hay que validarse como usuario en la nube de ''DockerHub'':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker login&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tras introducir tu usuario y contraseña, puedes comenzar a publicar tus propias imágenes.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker push MI_IMAGEN&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Paso 4: Comprobar imágenes en nuestra máquina =&lt;br /&gt;
&lt;br /&gt;
Para ver las imágenes que tenemos en nuestra máquina, utilizaremos el comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker images&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Inicialmente, no tenemos imágenes en almacenamiento, podemos descargarnos la imagen oficial de Ubuntu:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker pull ubuntu:latest&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ahora si, ya debería de aparecernos la imagen ''ubuntu''.&lt;br /&gt;
&lt;br /&gt;
Comentar también que cada imagen puede tener varias etiquetas, por ejemplo, la imagen ubuntu, cuando la hemos visto en el listado de imágenes, venía con el tag latest, que es el tag que se descarga por defecto, pero nosotros podemos especificar otro, por ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker pull ubuntu:bionic&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para traernos la versión de la imagen de Ubuntu ''bionic'' (18.04).&lt;br /&gt;
&lt;br /&gt;
Ahora tendremos dos imágenes con diferente etiqueta, que serían como las diferentes versiones de cada imagen.&lt;br /&gt;
&lt;br /&gt;
= Paso 5: Lanzar un contenedor =&lt;br /&gt;
&lt;br /&gt;
Un contenedor no es más que una imagen de docker ejecutándose, sería similar a&lt;br /&gt;
una máquina virtual, aunque mucho más liviano.&lt;br /&gt;
&lt;br /&gt;
Para crear un contenedor, utilizaremos una imagen, en este caso, la imagen&lt;br /&gt;
hello-world. Hacemos lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker run hello-world&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Esto nos mostrará el siguiente mensaje si todo está correcto:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
Hello from Docker!&lt;br /&gt;
This message shows that your installation appears to be working correctly.&lt;br /&gt;
&lt;br /&gt;
To generate this message, Docker took the following steps:&lt;br /&gt;
 1. The Docker client contacted the Docker daemon.&lt;br /&gt;
 2. The Docker daemon pulled the &amp;quot;hello-world&amp;quot; image from the Docker Hub.&lt;br /&gt;
    (amd64)&lt;br /&gt;
 3. The Docker daemon created a new container from that image which runs the&lt;br /&gt;
    executable that produces the output you are currently reading.&lt;br /&gt;
 4. The Docker daemon streamed that output to the Docker client, which sent it&lt;br /&gt;
    to your terminal.&lt;br /&gt;
&lt;br /&gt;
To try something more ambitious, you can run an Ubuntu container with:&lt;br /&gt;
 $ docker run -it ubuntu bash&lt;br /&gt;
&lt;br /&gt;
Share images, automate workflows, and more with a free Docker ID:&lt;br /&gt;
 https://hub.docker.com/&lt;br /&gt;
&lt;br /&gt;
For more examples and ideas, visit:&lt;br /&gt;
 https://docs.docker.com/get-started/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al crear los contenedores utilizando el comando 'run', tenemos varias opciones:&lt;br /&gt;
&lt;br /&gt;
== Paso 5.1: Ejecutar una terminal en el contenedor en modo interactivo (-ti) ==&lt;br /&gt;
&lt;br /&gt;
Para este ejemplo vamos a utilizar otra imagen diferente, en este caso vamos a utilizar una imagen de ubuntu.&lt;br /&gt;
&lt;br /&gt;
Vamos a lanzar un contenedor y ejecutar una terminal en el que se va a ejecutar el programa '''bash''' que me ofrece un interprete de órdenes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker run -ti ubuntu bash&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La opción ''-t'' indica que se crea un terminal en el contenedor. Y la opción ''-i'' indica que el contenedor se ejecuta en modo interactivo.&lt;br /&gt;
&lt;br /&gt;
Al acceder al contenedor de ''ubuntu'' nos aparece un ''hash'' en el prompt de la shell, que identifica a la instancia del contenedor (es valor es similar al que muestra la orden ''docker container ls'').&lt;br /&gt;
&lt;br /&gt;
Para salir del contenedor, escribimos 'exit' o pulsamos 'CTRL + D'&lt;br /&gt;
&lt;br /&gt;
== Paso 5.2 Ejecutar en segundo plano (-d) ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker run -d hello-world&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nos mostrará el id del contenedor y se ejecutará en segundo plano, por lo que la salida que antes obtuvimos, ahora no se muestra. Para poder ver esta salida,&lt;br /&gt;
podemos utilizar el comando logs y el id mostrador anteriormente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker logs 2ec1daae4676a4e84dc04fd91399c1dfe92119544ff12ee307991fe573d3db64&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Paso 5.3: Añadir variables de entorno a un contenedor ==&lt;br /&gt;
&lt;br /&gt;
Utilizaremos la imagen anterior, y vamos a añadir una variable de entorno&lt;br /&gt;
llamada TEST que contenga el valor 'test'. A parte, también ejecutaremos la&lt;br /&gt;
terminal como antes, para comprobar con el comando echo, que la variable de&lt;br /&gt;
entorno está creada correctamente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker run -ti -e TEST=test ubuntu bash&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ahora, desde el contenedor podemos comprobar el valor de la variable de entorno ''$TEST''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo $TEST&lt;br /&gt;
test&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Paso 6: Listar contenedores en ejecución =&lt;br /&gt;
&lt;br /&gt;
Hemos estado haciendo pruebas y ejecutando contenedores en el paso anterior, vamos a ver donde se encuentran estos contenedores que hemos ejecutado, y después veremos algunas opciones más del comando run.&lt;br /&gt;
&lt;br /&gt;
Tenemos dos opciones para ver los contenedores:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker container ls -a&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
o la versión corta:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker ps -a&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ambas hacen lo mismo, y debería de mostrarnos una salida similar a la siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES&lt;br /&gt;
e2bde5f5500c        ubuntu              &amp;quot;bash&amp;quot;               6 minutes ago       Exited (0) 2 seconds ago                        pensive_sammet&lt;br /&gt;
544ad27dbc3c        ubuntu              &amp;quot;bash&amp;quot;               7 minutes ago       Exited (0) 7 minutes ago                        serene_elgamal&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En la información veremos que el contenedor tiene el estado exited, eso quiere decir que no se está ejecutando y ya ha finalizado. Vamos a hacer una prueba para ver un contendor ejecutándose:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker run -d ubuntu sleep 30&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Con el comando sleep 30 esperamos 30 segundos hasta que termine el comando, asíque durante esos 30 segundos, el contenedor estará ejecutándose, veámoslo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker ps -a&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES&lt;br /&gt;
eacceb27d52d        ubuntu              &amp;quot;sleep 30&amp;quot;          12 seconds ago      Up 11 seconds                                   sharp_pasteur&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vamos a ver alguna opciones más de la orden ''run''.&lt;br /&gt;
&lt;br /&gt;
== Paso 6.1: Dar un nombre al contenedor (--name) ==&lt;br /&gt;
&lt;br /&gt;
Por defecto, docker creará automáticamente un nombre como hemos visto en las salidas del comando ''docker ps -a''. Podemos establecer el nombre del contenedor que queramos con la opción ''--name'':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker run -d --name mi_ubuntu ubuntu&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Paso 6.2: Eliminar contenedor cuando termine (--rm) ==&lt;br /&gt;
&lt;br /&gt;
Vamos a mezclar todo lo visto anteriormente:&lt;br /&gt;
&lt;br /&gt;
* Lanzar en segundo plano (-d)&lt;br /&gt;
* Ejecutar contenedor durante 30 segundos (sleep 30)&lt;br /&gt;
* Dar un nombre a la imagen (--name)&lt;br /&gt;
* Eliminar contenedor cuando termine (--rm)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker run -d --rm --name bye-bye ubuntu sleep 30&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Antes y una vez pasados los 30 segundos, podemos comprobar que el contenedor ha desaparecido.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker ps -a&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Paso 7: Parar y eliminar contenedores =&lt;br /&gt;
&lt;br /&gt;
Los contenedores podemos pararlos o eliminarlos, veamos como hacerlo. Antes que&lt;br /&gt;
nada, borraremos todos los contenedores que estén terminados, para ello:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker container prune&lt;br /&gt;
docker ps -a&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ya lo hemos dejado todo limpio para seguir, ahora vamos a crear un contenedor,&lt;br /&gt;
utilizando un comando de linux que no termina, para que así se quede&lt;br /&gt;
ejecutándose el contenedor infinitamente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker run -d -ti --name my_container ubuntu bash&lt;br /&gt;
docker ps -a&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vamos a pararlo (podemos utilizar el nombre dado o el id):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker stop my_container&lt;br /&gt;
docker stop e4901956f108&lt;br /&gt;
docker ps -a&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Veremos que ya ha terminado, y ahora vamos a eliminarlo, pero solo este&lt;br /&gt;
contenedor, no como previamente que eliminamos todos. Lo mismo que para pararlo,&lt;br /&gt;
podemos utilizar el nombre o el id.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker container rm my_container&lt;br /&gt;
docker container rm my_container&lt;br /&gt;
docker ps -a&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Veremos que ya no tenemos el contenedor y está correctamente eliminado.&lt;br /&gt;
&lt;br /&gt;
= Paso 8: Conectarnos a un contenedor que se está ejecutando en segundo plano =&lt;br /&gt;
&lt;br /&gt;
Vamos a ejecutar de nuevo un contenedor que no termine:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker run -d -ti --name to_attach ubuntu bash&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ahora, vamos a conectarnos a este contenedor que está ejecutándose en segundo&lt;br /&gt;
plano:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker attach to_attach&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Veremos la orden bash ejecutándose, para terminar, hacemos un 'CTRL + C', y ahora, veremos que ha pasado con el contenedor:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker ps -a&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Lo veremos parado, por que lo que hemos hecho ha sido conectarnos al contenedor&lt;br /&gt;
y parar el comando que se estaba ejecutando, así que ahora tenemos el contenedor&lt;br /&gt;
finalizado.&lt;br /&gt;
&lt;br /&gt;
= Paso 9: Ejecutar en un contenedor otro comando =&lt;br /&gt;
&lt;br /&gt;
Vamos a ver otresta vez como ejecutar un comando en un contenedor que ya está&lt;br /&gt;
ejecutándose:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker run -d -ti --name to_exec ubuntu bash&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ahora, vamos a ejecutar un comando en ese contenedor. El comando exec es similar&lt;br /&gt;
al comando run, pero para ejecutar un comando dentro de un contenedor:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker exec -ti to_exec ls&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ahora estamos dentro del contenedor creado anteriormente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ps -a&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aquí veremos en el listado de procesos que hay en ejecución.&lt;br /&gt;
&lt;br /&gt;
Ahora vamos a salirnos del contenedor, escribiendo 'exit' o 'CTRL + D', y&lt;br /&gt;
comprobemos el estado del contenedor:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker ps -a&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ahora veremos que el contenedor se sigue ejecutando, no como en el paso anterior.&lt;br /&gt;
&lt;br /&gt;
= Paso 10: Persistencia en contenedores =&lt;br /&gt;
&lt;br /&gt;
Vamos a ver que los contenedores no mantienen los datos por defecto, solo nos&lt;br /&gt;
dan un servicio pero los datos NO son persistentes. Creemos un contenedor que&lt;br /&gt;
vamos a dejar ejecutándose:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker run -d -ti --name to_expire ubuntu bash&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ahora, vamos a crear una carpeta en el contenedor y comprobar que esa carpeta&lt;br /&gt;
existe:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker exec to_expire mkdir test&lt;br /&gt;
docker exec to_expire ls&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Veremos que la carpeta existe, pero, ¿qué ocurre si eliminamos el contedor y&lt;br /&gt;
volvemos a crear uno?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker container stop to_expire&lt;br /&gt;
docker container rm to_expire&lt;br /&gt;
docker run -d -ti --name to_expire ubuntu bash&lt;br /&gt;
docker exec to_expire ls&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podemos comprobar que la carpeta creada anteriormente, no existe si el&lt;br /&gt;
contenedor termina. Si quisíeramos mantener una persistencia de datos, tenemos&lt;br /&gt;
varias opciones:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Paso 10.1: Mantener la persistencia cambiando la imagen base ==&lt;br /&gt;
&lt;br /&gt;
Repetimos los pasos anteriores, pero antes de parar el contenedor, vamos a&lt;br /&gt;
guardar el estado del contener en la imagen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker run -d -ti --name to_save ubuntu bash&lt;br /&gt;
docker exec to_save mkdir test&lt;br /&gt;
docker commit to_save ubuntu&lt;br /&gt;
docker stop to_save&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ahora, vamos a para el contenedor y ejecutar uno nuevo para probar que los datos&lt;br /&gt;
han persistido:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker run -d -ti --name to_save_v2 ubuntu:con_directorio_test bash&lt;br /&gt;
docker exec to_save_v2 ls&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Esto crea una imagen ubuntu con la etiqueta &amp;quot;con_directorio_test&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Paso 10.2: Mantener la persistencia creando volúmenes ==&lt;br /&gt;
&lt;br /&gt;
La otra opción para mantener los datos es montar un volumen al ejecutar el&lt;br /&gt;
contenedor. Primero crearemos una carpeta que hará de volumen en nuestra&lt;br /&gt;
máquina, que será la que luego montemos para docker:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkdir /home/ubuntu/volumen&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ahora vamos a montar la carpeta al ejecutar el contenedor, lo hacemos con la&lt;br /&gt;
opción -v, la cual tiene 3 campos separados por ':':&lt;br /&gt;
&lt;br /&gt;
# El volumen en nuestra máquina&lt;br /&gt;
# Donde se montará el volumen dentro del contenedor&lt;br /&gt;
# Opciones de mmontaje, por ejemplo rw (read and write) o ro (read only)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker run --rm -ti -v /home/ubuntu/volumen:/volumen:rw ubuntu bash&lt;br /&gt;
mkdir /volumen/test&lt;br /&gt;
touch /volumen/test/file&lt;br /&gt;
exit&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Una vez nos salgamos del contenedor, podemos ver que en nuestra máquina están&lt;br /&gt;
los datos:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls /home/ubuntu/volumen/&lt;br /&gt;
ls /home/ubuntu/volumen/test&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La próxima vez que ejecutemos un contenedor, si montamos ese volumen, los datos&lt;br /&gt;
estarán ahí, además esta forma tiene el beneficio de compartir datos entre&lt;br /&gt;
nuestra máquina y el contenedor de forma sencilla.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Paso 11: Crear nuestra propia imagen docker =&lt;br /&gt;
&lt;br /&gt;
Para crear una imagen de un contenedor con una aplicación de Python hug, creamos en primer lugar la carpeta que contendrá los ficheros que nos permiten crear la imagen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkdir miapp&lt;br /&gt;
cd miapp&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Definimos un fichero ''Dockerfile'' para definir la imagen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
FROM python:alpine&lt;br /&gt;
&lt;br /&gt;
ENV USERNAME=&amp;quot;username&amp;quot;&lt;br /&gt;
RUN mkdir /app&lt;br /&gt;
RUN pip install hug&lt;br /&gt;
COPY endpoint.py /app&lt;br /&gt;
WORKDIR /app&lt;br /&gt;
CMD hug -f endpoint.py&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
	 &lt;br /&gt;
Alternativamente, puedes crear un [[Creando imagen propia usando Ubuntu de base|Dockerfile empleando la imagen de Ubuntu]] como base en lugar de Alpine.&lt;br /&gt;
&lt;br /&gt;
Y añadimos el fichero ''endpoint.py'' que emplea el framework Python hug con el contenido siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
import hug&lt;br /&gt;
&lt;br /&gt;
@hug.get('/welcome')&lt;br /&gt;
def welcome(username=&amp;quot;unknown&amp;quot;):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot; Say welcome to username &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    return &amp;quot;Welcome &amp;quot; + username&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Este fichero es un ejemplo de uso de Python hug. Si hacemos una petición a /welcome?username=&amp;quot;LSO&amp;quot;, esto nos devolverá el mensaje &amp;quot;Welcome LSO&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Una vez tengamos los dos ficheros creados en nuestra máquina virtual, podemos construir nuestra imagen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker build -t app:v1 -f Dockerfile .&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vamos a explicar para que sirve cada línea:&lt;br /&gt;
&lt;br /&gt;
* FROM: servirá para basarnos en una imagen existente, en este caso, una imagen de python alpine, que contiene python y no ocupa mucho espacio&lt;br /&gt;
* ENV: para crear variables de entorno&lt;br /&gt;
* RUN: para ejecutar comandos, ya sea para crear una carpeta, instalar dependencias o cualquier otra opción que necesitemos&lt;br /&gt;
* COPY: para copiar datos desde nuestra máquina a la imagen&lt;br /&gt;
* WORKDIR: para cambiar el directorio de trabajo&lt;br /&gt;
* CMD: este comando será ejecutado por defecto al iniciar un contenedor a partir de esta imagen&lt;br /&gt;
&lt;br /&gt;
Esto construirá una imagen docker basada en python:alpine, en la cual hemos&lt;br /&gt;
guardado nuestra pequeña aplicación y se va a ejecutar cuando ejecutemos un&lt;br /&gt;
contenedor basado en esa imagen. Para comprobar que la imagen se ha creado&lt;br /&gt;
correctamente, listamos las imagenes, y debería de aparecernos una imagen con&lt;br /&gt;
nombre 'app' y tag 'v1':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker images&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ahora vamos a crear un contenedor de nuestra imagen, y vamos a añadir una nueva&lt;br /&gt;
opción, -p 8001:8000. Esta opción hará que el puerto interno 8000 del contenedor&lt;br /&gt;
sea expuesto en el puerto 8001 de nuestra máquina:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker run --name my-app --rm -d -p 8001:8000 app:v1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ahora vamos a probar que funciona nuestra imagen y nuestro código. En nuestra&lt;br /&gt;
máquina haremos:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
curl -X GET http://localhost:8001/welcome?username=LSO&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Comprobaremos que la salida del comando curl, es &amp;quot;Welcome LSO&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Antes de terminar, vamos a comprobar otro pequeño detalle que añadimos en&lt;br /&gt;
nuestra imagen, la variable de entorno USERNAME, vamos a comprobar que funciona:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker exec -ti my-app ash&lt;br /&gt;
echo $USERNAME&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Funciona correctamente, pero al ejecutar el contenedor, podemos cambiar esta&lt;br /&gt;
variable de entorno como vimos en uno de los pasos anteriores:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker run --rm -ti -e USERNAME=me app:v1 ash&lt;br /&gt;
echo $USERNAME&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Esto nos servirá para tener opciones por defecto y que el usuario pueda&lt;br /&gt;
cambiarlo a su antojo, como por ejemplo contraseñas u otros detalles.&lt;br /&gt;
&lt;br /&gt;
= Paso 12: Eliminar imágenes =&lt;br /&gt;
&lt;br /&gt;
Veremos que después de todas las pruebas que hemos estado haciendo, tenemos&lt;br /&gt;
muchas imágenes, y algunas de las cuales no nos servirán o no las utilizaremos,&lt;br /&gt;
así que podemos borrarlas para ahorrar espacio.&lt;br /&gt;
&lt;br /&gt;
Al igual que con los contenedores, tenemos una opción para borrar imágenes que&lt;br /&gt;
no se utilicen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker image prune&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Esto borrará imágenes intermedias que se utilizan a veces para construir&lt;br /&gt;
nuestras imágenes o imágenes que hemos intentado construir y nos han fallado.&lt;br /&gt;
&lt;br /&gt;
La otra opción para borrar imágenes una a una, sería utilizando el comando&lt;br /&gt;
docker rmi y utilizar el nombre de la imagen o el id. Si esta es la salida de&lt;br /&gt;
'docker images':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE&lt;br /&gt;
app                 v1                  18609c517d32        14 minutes ago      109MB&lt;br /&gt;
python              alpine              39fb80313465        23 hours ago        98.7MB&lt;br /&gt;
debian              latest              85c4fd36a543        13 days ago         114MB&lt;br /&gt;
hello-world         latest              fce289e99eb9        7 months ago        1.84kB&lt;br /&gt;
hello-world         linux               fce289e99eb9        7 months ago        1.84kB&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podemos eliminar las imágenes de hello-world:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker rmi hello-world&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ó&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker rmi fce289e99eb9&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Paso 13: Varios docker a la vez (docker-compose) =&lt;br /&gt;
&lt;br /&gt;
Antes de comenzar, vamos a parar todos los contenedores que tengamos abiertos,&lt;br /&gt;
para dejar el entorno de docker limpio, que nos vendrá bien para esta parte.&lt;br /&gt;
&lt;br /&gt;
Cuando queremos ejecutar varios contenedores a la vez y que estén conectados&lt;br /&gt;
entre ellos fácilmente, utilizaremos docker-compose, donde con un fichero de&lt;br /&gt;
configuración simple en yaml, tendremos toda la configuración de lo que vamos a&lt;br /&gt;
ejecutar.&lt;br /&gt;
&lt;br /&gt;
Primero vamos a instalar docker-compose:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt install docker-compose&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ahora veamos un pequeño ejemplo donde explicaremos todos los detalles para crear&lt;br /&gt;
un docker-compose, en este caso, el nombre por defecto de los ficheros suele ser&lt;br /&gt;
docker-compose.yml, y el contenido será similar a:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
version: '3'&lt;br /&gt;
&lt;br /&gt;
services:&lt;br /&gt;
  web:&lt;br /&gt;
    container_name: web&lt;br /&gt;
    restart: always&lt;br /&gt;
    build:&lt;br /&gt;
      context: .&lt;br /&gt;
    ports:&lt;br /&gt;
      - &amp;quot;8000:8000&amp;quot;&lt;br /&gt;
    volumes:&lt;br /&gt;
      - /home/ubuntu/volume:/volumen:rw&lt;br /&gt;
    environment:&lt;br /&gt;
      USERNAME: test&lt;br /&gt;
  web2:&lt;br /&gt;
    container_name: web2&lt;br /&gt;
    build:&lt;br /&gt;
      dockerfile: Dockerfile&lt;br /&gt;
      context: .&lt;br /&gt;
    depends_on:&lt;br /&gt;
      - web&lt;br /&gt;
    command: touch web2&lt;br /&gt;
  web3:&lt;br /&gt;
    container_name: web3&lt;br /&gt;
    restart: on-failure&lt;br /&gt;
    image: pstauffer/curl&lt;br /&gt;
    depends_on:&lt;br /&gt;
      - web&lt;br /&gt;
    command: curl -X GET web:8000/welcome?username=web3&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En el docker-compose definimos diferentes servicios a ejecutar, en nuestro caso&lt;br /&gt;
hemos iniciado tres servicios diferentes, web, web2 y web3:&lt;br /&gt;
&lt;br /&gt;
El primer servicio, web:&lt;br /&gt;
&lt;br /&gt;
* container_name: para darle un nombre por defecto al contenedor cuando se cree&lt;br /&gt;
* restart: pueden ser:&lt;br /&gt;
** &amp;quot;no&amp;quot;: si la máquina termina, no se vuelve a iniciar (opción por defecto)&lt;br /&gt;
** always: siempre que el contenedor termine, intenta iniciarse de nuevo&lt;br /&gt;
** on-failure: solo intenta reiniciarse si el contenedor termina con fallo&lt;br /&gt;
** unless-stopped: solo reinicia el contenedor si el usuario es el que lo termina&lt;br /&gt;
* Utilizará el fichero Dockerfile creado en el paso 11 para generar la imagen a   usar.&lt;br /&gt;
* Expondrá el puerto 8000 del contenedor en el 8000 de nuestra máquina&lt;br /&gt;
* Montará un volumen, se hace de forma similar a la línea de comandos&lt;br /&gt;
* Creará una variable de entorno&lt;br /&gt;
&lt;br /&gt;
El segundo servicio, web2:&lt;br /&gt;
&lt;br /&gt;
* Utilizará el fichero Dockerfile también, la diferencia entre este y el primer servicio, es que si el nombre del Dockerfile cambia, tendremos que hacerlo de esta segunda forma, la primera por defecto solo buscará el fichero Dockerfile&lt;br /&gt;
* depends_on hará que para ejecutar este servicio, su dependencia tenga ya que estar iniciada&lt;br /&gt;
* Ejecutaremos un comando el cual sustituirá al comando de la imagen&lt;br /&gt;
&lt;br /&gt;
El tercer servicio, web3:&lt;br /&gt;
&lt;br /&gt;
* Utilizará la imagen ostauffer/curl que es un imagen mínima que contiene el comando curl&lt;br /&gt;
* restart: en este caso, hasta que el comando no se ejecute correctamente, se seguirá reiniciando el contenedor&lt;br /&gt;
* depends_on igual que el servicio 2, dependerá del servicio 1&lt;br /&gt;
* Ejecutaremos un comando para llamar desde el servicio 3 al servicio 1&lt;br /&gt;
&lt;br /&gt;
== Paso 13.1: Construir docker-compose ==&lt;br /&gt;
&lt;br /&gt;
En el caso de existir servicios que tengan Dockerfiles, esto hará que se construyan previamente, como hacer un docker build de cada uno de los servicios que contenga un Dockerfile:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker-compose build&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Con esto se generarán las imágenes necesarias para ejecutar todos los servicios.&lt;br /&gt;
&lt;br /&gt;
== Paso 13.2: Iniciar docker-compose ==&lt;br /&gt;
&lt;br /&gt;
Para iniciar todos los servicios, ejecutaremos:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker-compose up -d&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Después de esto podremos ver el logs de todos los servicios:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker-compose logs -f&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aquí veremos que el servicio 3 ha conseguido llamar correctamente al servicio 1.&lt;br /&gt;
&lt;br /&gt;
Ahora veremos como docker-compose ha creado los contenedores:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker ps -a&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La salida será similar a la siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                     PORTS                    NAMES&lt;br /&gt;
219a4118244c        pstauffer/curl      &amp;quot;curl -X GET web:800…&amp;quot;   6 seconds ago       Exited (0) 3 seconds ago                            web3&lt;br /&gt;
c97e894cb3ae        ubuntu_web2         &amp;quot;touch web2&amp;quot;             6 seconds ago       Exited (0) 4 seconds ago                            web2&lt;br /&gt;
f35d034204fc        ubuntu_web          &amp;quot;/bin/sh -c 'hug -f …&amp;quot;   6 seconds ago       Up 5 seconds               0.0.0.0:8000-&amp;gt;8000/tcp   web&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aquí vemos varios detalles:&lt;br /&gt;
&lt;br /&gt;
* El nombre que le hemos dado en el docker-compose ha funcionado correctamente&lt;br /&gt;
* Vemos que los comandos son los correctos también&lt;br /&gt;
* web2 está parado por que la política de reinicio es apagar cuando se termine de ejecutar un comando&lt;br /&gt;
* web 3 está parado por que el comando ha terminado con un salida correcta&lt;br /&gt;
&lt;br /&gt;
Vamos a comprobar ahora que en el servicio web está todo correcto:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker exec -ti web ash&lt;br /&gt;
echo $USERNAME&lt;br /&gt;
ls /volumen&lt;br /&gt;
exit&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podemos comprobar que tanto cambiar la variable de entorno como crear un&lt;br /&gt;
volumen ha funcionado correctamente.&lt;br /&gt;
&lt;br /&gt;
== Paso 13.3: Parar docker-compose ==&lt;br /&gt;
&lt;br /&gt;
Para parar todos los servicios:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker-compose down&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Comprobamos:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker ps -a&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vemos que han desaparecido todos los contenedores.&lt;br /&gt;
&lt;br /&gt;
= Paso 14: Ejercicios =&lt;br /&gt;
&lt;br /&gt;
== Ejercicio 1: Variante de httpd ==&lt;br /&gt;
&lt;br /&gt;
 Construya una imagen ''httpd-hola-mundo'' a partir de la imagen ''httpd''. El fichero de index.html de la carpeta htdocs/ tiene que mostrar el mensaje &amp;quot;hola mundo&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker pull httpd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Edita el fichero Dockerfile:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
nano Dockerfile&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Añada este contenido:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
FROM httpd&lt;br /&gt;
&lt;br /&gt;
COPY index.html htdocs/index.html&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Edita el fichero index.html:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
nano index.html&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Añada este contenido:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;hola mundo&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Construye la imagen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker build -t mihttpd -f Dockerfile .&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ahora vamos a crear un contenedor de nuestra imagen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo docker run --name mihttpd -d -p 8080:80 mihttpd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ahora vamos a probar que funciona nuestra imagen y nuestro código:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
curl -X GET http://localhost:8080&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tiene que salir por pantalla esto:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;hola mundo&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Ejercicio 2: aplicación flask ==&lt;br /&gt;
&lt;br /&gt;
Flask es un framework python para implementar webs. Cree una imagen &amp;quot;miapp-flask&amp;quot; a partir de la imagen de &amp;quot;python&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
* Instale flask mediante: pip install flask&lt;br /&gt;
* Cree la carpeta &amp;quot;app&amp;quot;&lt;br /&gt;
* Establezca la variable FLASK_APP a &amp;quot;hello.py&amp;quot;&lt;br /&gt;
* Añada el fichero &amp;quot;hello.py&amp;quot;&lt;br /&gt;
* Establezca el directorio de trabajo a &amp;quot;/app&amp;quot;&lt;br /&gt;
&lt;br /&gt;
El fichero hello.py contiene un &amp;quot;hola mundo&amp;quot; para Flask:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
from flask import Flask&lt;br /&gt;
app = Flask(__name__)&lt;br /&gt;
&lt;br /&gt;
@app.route(&amp;quot;/&amp;quot;)&lt;br /&gt;
def hello():&lt;br /&gt;
    return &amp;quot;Hello World!&amp;quot;&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    app.run()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Solución con alpine:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
FROM python:alpine&lt;br /&gt;
&lt;br /&gt;
RUN mkdir /app&lt;br /&gt;
RUN pip install flask&lt;br /&gt;
ENV FLASK_APP=&amp;quot;app/hello.py&amp;quot;&lt;br /&gt;
COPY hello.py&lt;br /&gt;
WORKDIR /&lt;br /&gt;
CMD flask run --host=0.0.0.0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Solución con Ubuntu:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
FROM ubuntu:bionic&lt;br /&gt;
&lt;br /&gt;
RUN apt-get update&lt;br /&gt;
RUN apt-get -y install python python-pip wget&lt;br /&gt;
RUN pip install Flask&lt;br /&gt;
ENV FLASK_APP=&amp;quot;app/hello.py&amp;quot;&lt;br /&gt;
RUN mkdir /app&lt;br /&gt;
COPY hello.py /app&lt;br /&gt;
CMD flask run --host=0.0.0.0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Ejercicio 3: mysql ==&lt;br /&gt;
&lt;br /&gt;
'''EN LA MÁQUINA VIRTUAL:'''&lt;br /&gt;
&lt;br /&gt;
mkdir miapp&lt;br /&gt;
&lt;br /&gt;
cd miapp&lt;br /&gt;
&lt;br /&gt;
sudo docker pull mysql&lt;br /&gt;
&lt;br /&gt;
nano Dockerfile&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
FROM mysql&lt;br /&gt;
ENV MYSQL_ROOT_PASSWORD=&amp;quot;lacontraseñaqueyoquiera&amp;quot;&lt;br /&gt;
RUN mkdir /app&lt;br /&gt;
WORKDIR /app&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
CTRL+O , ENTER Y CTRL+X (para guardar Dockerfile y salir)&lt;br /&gt;
&lt;br /&gt;
sudo docker build -ti mrfdocker -f Dockerfile .&lt;br /&gt;
&lt;br /&gt;
sudo docker run --name mymrf --rm -p 8001:3306 mrfdocker&lt;br /&gt;
&lt;br /&gt;
sudo docker images&lt;br /&gt;
&lt;br /&gt;
'''EN LA TERMINAL DEL HOST:'''&lt;br /&gt;
&lt;br /&gt;
''Instalación de mysql:''&lt;br /&gt;
&lt;br /&gt;
sudo apt install mysql-client-core-5.7&lt;br /&gt;
&lt;br /&gt;
&amp;gt; sudo apt-get install mysql-server&lt;br /&gt;
&lt;br /&gt;
&amp;gt; sudo service mysql start&lt;br /&gt;
&lt;br /&gt;
''Para entrar:''&lt;br /&gt;
&lt;br /&gt;
sudo mysql -u root -p -P 8001&lt;br /&gt;
&lt;br /&gt;
Una vez dentro de msql:&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; show databases;&lt;br /&gt;
''&lt;br /&gt;
Para salir:''&lt;br /&gt;
&lt;br /&gt;
exit&lt;/div&gt;</summary>
		<author><name>Marramfer12</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Contenedores&amp;diff=4693</id>
		<title>Contenedores</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Contenedores&amp;diff=4693"/>
				<updated>2020-01-15T16:05:52Z</updated>
		
		<summary type="html">&lt;p&gt;Marramfer12: /* Ejercicio 3: mysql */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;En esta práctica aprenderemos a utilizar [https://es.wikipedia.org/wiki/Docker_(software) docker] para desplegar contenedores.&lt;br /&gt;
&lt;br /&gt;
= Paso 1: Instalar docker =&lt;br /&gt;
&lt;br /&gt;
Vamos a añadir un nuevo repositorio, ya que docker no está en los repositorios&lt;br /&gt;
oficiales:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt update&lt;br /&gt;
sudo apt install docker.io&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para ver si está todo bien y se ha instalado correctamente, comprobaremos que el&lt;br /&gt;
servicio está activo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo service docker status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Debería mostrar algo similar a lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
● docker.service - Docker Application Container Engine&lt;br /&gt;
   Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)&lt;br /&gt;
   Active: active (running) since Mon 2019-08-26 09:41:40 UTC; 37s ago&lt;br /&gt;
     Docs: https://docs.docker.com&lt;br /&gt;
 Main PID: 3630 (dockerd)&lt;br /&gt;
    Tasks: 8&lt;br /&gt;
   CGroup: /system.slice/docker.service&lt;br /&gt;
           └─3630 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pulsamos la tecla 'q' para salir.&lt;br /&gt;
&lt;br /&gt;
Si el servicio aparece inactivo, puedes lanzarlo con:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo service docker start&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Paso 2: Ejecutar docker con nuestro usuario =&lt;br /&gt;
&lt;br /&gt;
Para no necesitar sudo al utilizar docker, añadiremos a nuestro usuario al grupo&lt;br /&gt;
docker:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo usermod -aG docker ubuntu&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para que el cambio tenga efecto, tendremos que cerrar la sesión de nuestro&lt;br /&gt;
usuario y abrirla de nuevo. Podemos hacerlo fácilmente pulsando CTRL + D y&lt;br /&gt;
volviendo a insertar nuestras credenciales.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Paso 3: Repositorio de imágenes de contenedores DockerHub =&lt;br /&gt;
&lt;br /&gt;
Docker ofrece un servicio de nube denominado ''DockerHub'' que puede ser empleado como red social para compartir tus imágenes de Docker. En ''DockerHub'' existen además imágenes de contenedores preconfiguradas de software, muchas de ellas oficiales (ofrecidas por el propio fabricante del software) que se podrán emplear como base para construir nuevas imágenes adaptadas a nuestras necesidades.&lt;br /&gt;
&lt;br /&gt;
Podremos realizar búsquedas en este repositorio ''DockerHub'' puedes emplear el siguiente comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker search hello-world&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para descargarnos la imagen de ''hello-world'' podemos usar la orden ''pull'':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker pull hello-world&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
También podemos publicar imágenes propias, esto require '''registro de usuario''' en la nube de ''DockerHub'', lo que '''no''' es obligatorio para la realización de esta práctica. Para subir una imagen, hay que validarse como usuario en la nube de ''DockerHub'':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker login&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tras introducir tu usuario y contraseña, puedes comenzar a publicar tus propias imágenes.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker push MI_IMAGEN&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Paso 4: Comprobar imágenes en nuestra máquina =&lt;br /&gt;
&lt;br /&gt;
Para ver las imágenes que tenemos en nuestra máquina, utilizaremos el comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker images&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Inicialmente, no tenemos imágenes en almacenamiento, podemos descargarnos la imagen oficial de Ubuntu:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker pull ubuntu:latest&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ahora si, ya debería de aparecernos la imagen ''ubuntu''.&lt;br /&gt;
&lt;br /&gt;
Comentar también que cada imagen puede tener varias etiquetas, por ejemplo, la imagen ubuntu, cuando la hemos visto en el listado de imágenes, venía con el tag latest, que es el tag que se descarga por defecto, pero nosotros podemos especificar otro, por ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker pull ubuntu:bionic&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para traernos la versión de la imagen de Ubuntu ''bionic'' (18.04).&lt;br /&gt;
&lt;br /&gt;
Ahora tendremos dos imágenes con diferente etiqueta, que serían como las diferentes versiones de cada imagen.&lt;br /&gt;
&lt;br /&gt;
= Paso 5: Lanzar un contenedor =&lt;br /&gt;
&lt;br /&gt;
Un contenedor no es más que una imagen de docker ejecutándose, sería similar a&lt;br /&gt;
una máquina virtual, aunque mucho más liviano.&lt;br /&gt;
&lt;br /&gt;
Para crear un contenedor, utilizaremos una imagen, en este caso, la imagen&lt;br /&gt;
hello-world. Hacemos lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker run hello-world&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Esto nos mostrará el siguiente mensaje si todo está correcto:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
Hello from Docker!&lt;br /&gt;
This message shows that your installation appears to be working correctly.&lt;br /&gt;
&lt;br /&gt;
To generate this message, Docker took the following steps:&lt;br /&gt;
 1. The Docker client contacted the Docker daemon.&lt;br /&gt;
 2. The Docker daemon pulled the &amp;quot;hello-world&amp;quot; image from the Docker Hub.&lt;br /&gt;
    (amd64)&lt;br /&gt;
 3. The Docker daemon created a new container from that image which runs the&lt;br /&gt;
    executable that produces the output you are currently reading.&lt;br /&gt;
 4. The Docker daemon streamed that output to the Docker client, which sent it&lt;br /&gt;
    to your terminal.&lt;br /&gt;
&lt;br /&gt;
To try something more ambitious, you can run an Ubuntu container with:&lt;br /&gt;
 $ docker run -it ubuntu bash&lt;br /&gt;
&lt;br /&gt;
Share images, automate workflows, and more with a free Docker ID:&lt;br /&gt;
 https://hub.docker.com/&lt;br /&gt;
&lt;br /&gt;
For more examples and ideas, visit:&lt;br /&gt;
 https://docs.docker.com/get-started/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al crear los contenedores utilizando el comando 'run', tenemos varias opciones:&lt;br /&gt;
&lt;br /&gt;
== Paso 5.1: Ejecutar una terminal en el contenedor en modo interactivo (-ti) ==&lt;br /&gt;
&lt;br /&gt;
Para este ejemplo vamos a utilizar otra imagen diferente, en este caso vamos a utilizar una imagen de ubuntu.&lt;br /&gt;
&lt;br /&gt;
Vamos a lanzar un contenedor y ejecutar una terminal en el que se va a ejecutar el programa '''bash''' que me ofrece un interprete de órdenes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker run -ti ubuntu bash&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La opción ''-t'' indica que se crea un terminal en el contenedor. Y la opción ''-i'' indica que el contenedor se ejecuta en modo interactivo.&lt;br /&gt;
&lt;br /&gt;
Al acceder al contenedor de ''ubuntu'' nos aparece un ''hash'' en el prompt de la shell, que identifica a la instancia del contenedor (es valor es similar al que muestra la orden ''docker container ls'').&lt;br /&gt;
&lt;br /&gt;
Para salir del contenedor, escribimos 'exit' o pulsamos 'CTRL + D'&lt;br /&gt;
&lt;br /&gt;
== Paso 5.2 Ejecutar en segundo plano (-d) ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker run -d hello-world&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nos mostrará el id del contenedor y se ejecutará en segundo plano, por lo que la salida que antes obtuvimos, ahora no se muestra. Para poder ver esta salida,&lt;br /&gt;
podemos utilizar el comando logs y el id mostrador anteriormente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker logs 2ec1daae4676a4e84dc04fd91399c1dfe92119544ff12ee307991fe573d3db64&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Paso 5.3: Añadir variables de entorno a un contenedor ==&lt;br /&gt;
&lt;br /&gt;
Utilizaremos la imagen anterior, y vamos a añadir una variable de entorno&lt;br /&gt;
llamada TEST que contenga el valor 'test'. A parte, también ejecutaremos la&lt;br /&gt;
terminal como antes, para comprobar con el comando echo, que la variable de&lt;br /&gt;
entorno está creada correctamente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker run -ti -e TEST=test ubuntu bash&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ahora, desde el contenedor podemos comprobar el valor de la variable de entorno ''$TEST''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo $TEST&lt;br /&gt;
test&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Paso 6: Listar contenedores en ejecución =&lt;br /&gt;
&lt;br /&gt;
Hemos estado haciendo pruebas y ejecutando contenedores en el paso anterior, vamos a ver donde se encuentran estos contenedores que hemos ejecutado, y después veremos algunas opciones más del comando run.&lt;br /&gt;
&lt;br /&gt;
Tenemos dos opciones para ver los contenedores:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker container ls -a&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
o la versión corta:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker ps -a&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ambas hacen lo mismo, y debería de mostrarnos una salida similar a la siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES&lt;br /&gt;
e2bde5f5500c        ubuntu              &amp;quot;bash&amp;quot;               6 minutes ago       Exited (0) 2 seconds ago                        pensive_sammet&lt;br /&gt;
544ad27dbc3c        ubuntu              &amp;quot;bash&amp;quot;               7 minutes ago       Exited (0) 7 minutes ago                        serene_elgamal&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En la información veremos que el contenedor tiene el estado exited, eso quiere decir que no se está ejecutando y ya ha finalizado. Vamos a hacer una prueba para ver un contendor ejecutándose:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker run -d ubuntu sleep 30&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Con el comando sleep 30 esperamos 30 segundos hasta que termine el comando, asíque durante esos 30 segundos, el contenedor estará ejecutándose, veámoslo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker ps -a&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES&lt;br /&gt;
eacceb27d52d        ubuntu              &amp;quot;sleep 30&amp;quot;          12 seconds ago      Up 11 seconds                                   sharp_pasteur&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vamos a ver alguna opciones más de la orden ''run''.&lt;br /&gt;
&lt;br /&gt;
== Paso 6.1: Dar un nombre al contenedor (--name) ==&lt;br /&gt;
&lt;br /&gt;
Por defecto, docker creará automáticamente un nombre como hemos visto en las salidas del comando ''docker ps -a''. Podemos establecer el nombre del contenedor que queramos con la opción ''--name'':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker run -d --name mi_ubuntu ubuntu&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Paso 6.2: Eliminar contenedor cuando termine (--rm) ==&lt;br /&gt;
&lt;br /&gt;
Vamos a mezclar todo lo visto anteriormente:&lt;br /&gt;
&lt;br /&gt;
* Lanzar en segundo plano (-d)&lt;br /&gt;
* Ejecutar contenedor durante 30 segundos (sleep 30)&lt;br /&gt;
* Dar un nombre a la imagen (--name)&lt;br /&gt;
* Eliminar contenedor cuando termine (--rm)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker run -d --rm --name bye-bye ubuntu sleep 30&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Antes y una vez pasados los 30 segundos, podemos comprobar que el contenedor ha desaparecido.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker ps -a&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Paso 7: Parar y eliminar contenedores =&lt;br /&gt;
&lt;br /&gt;
Los contenedores podemos pararlos o eliminarlos, veamos como hacerlo. Antes que&lt;br /&gt;
nada, borraremos todos los contenedores que estén terminados, para ello:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker container prune&lt;br /&gt;
docker ps -a&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ya lo hemos dejado todo limpio para seguir, ahora vamos a crear un contenedor,&lt;br /&gt;
utilizando un comando de linux que no termina, para que así se quede&lt;br /&gt;
ejecutándose el contenedor infinitamente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker run -d -ti --name my_container ubuntu bash&lt;br /&gt;
docker ps -a&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vamos a pararlo (podemos utilizar el nombre dado o el id):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker stop my_container&lt;br /&gt;
docker stop e4901956f108&lt;br /&gt;
docker ps -a&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Veremos que ya ha terminado, y ahora vamos a eliminarlo, pero solo este&lt;br /&gt;
contenedor, no como previamente que eliminamos todos. Lo mismo que para pararlo,&lt;br /&gt;
podemos utilizar el nombre o el id.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker container rm my_container&lt;br /&gt;
docker container rm my_container&lt;br /&gt;
docker ps -a&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Veremos que ya no tenemos el contenedor y está correctamente eliminado.&lt;br /&gt;
&lt;br /&gt;
= Paso 8: Conectarnos a un contenedor que se está ejecutando en segundo plano =&lt;br /&gt;
&lt;br /&gt;
Vamos a ejecutar de nuevo un contenedor que no termine:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker run -d -ti --name to_attach ubuntu bash&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ahora, vamos a conectarnos a este contenedor que está ejecutándose en segundo&lt;br /&gt;
plano:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker attach to_attach&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Veremos la orden bash ejecutándose, para terminar, hacemos un 'CTRL + C', y ahora, veremos que ha pasado con el contenedor:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker ps -a&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Lo veremos parado, por que lo que hemos hecho ha sido conectarnos al contenedor&lt;br /&gt;
y parar el comando que se estaba ejecutando, así que ahora tenemos el contenedor&lt;br /&gt;
finalizado.&lt;br /&gt;
&lt;br /&gt;
= Paso 9: Ejecutar en un contenedor otro comando =&lt;br /&gt;
&lt;br /&gt;
Vamos a ver otresta vez como ejecutar un comando en un contenedor que ya está&lt;br /&gt;
ejecutándose:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker run -d -ti --name to_exec ubuntu bash&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ahora, vamos a ejecutar un comando en ese contenedor. El comando exec es similar&lt;br /&gt;
al comando run, pero para ejecutar un comando dentro de un contenedor:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker exec -ti to_exec ls&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ahora estamos dentro del contenedor creado anteriormente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ps -a&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aquí veremos en el listado de procesos que hay en ejecución.&lt;br /&gt;
&lt;br /&gt;
Ahora vamos a salirnos del contenedor, escribiendo 'exit' o 'CTRL + D', y&lt;br /&gt;
comprobemos el estado del contenedor:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker ps -a&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ahora veremos que el contenedor se sigue ejecutando, no como en el paso anterior.&lt;br /&gt;
&lt;br /&gt;
= Paso 10: Persistencia en contenedores =&lt;br /&gt;
&lt;br /&gt;
Vamos a ver que los contenedores no mantienen los datos por defecto, solo nos&lt;br /&gt;
dan un servicio pero los datos NO son persistentes. Creemos un contenedor que&lt;br /&gt;
vamos a dejar ejecutándose:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker run -d -ti --name to_expire ubuntu bash&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ahora, vamos a crear una carpeta en el contenedor y comprobar que esa carpeta&lt;br /&gt;
existe:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker exec to_expire mkdir test&lt;br /&gt;
docker exec to_expire ls&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Veremos que la carpeta existe, pero, ¿qué ocurre si eliminamos el contedor y&lt;br /&gt;
volvemos a crear uno?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker container stop to_expire&lt;br /&gt;
docker container rm to_expire&lt;br /&gt;
docker run -d -ti --name to_expire ubuntu bash&lt;br /&gt;
docker exec to_expire ls&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podemos comprobar que la carpeta creada anteriormente, no existe si el&lt;br /&gt;
contenedor termina. Si quisíeramos mantener una persistencia de datos, tenemos&lt;br /&gt;
varias opciones:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Paso 10.1: Mantener la persistencia cambiando la imagen base ==&lt;br /&gt;
&lt;br /&gt;
Repetimos los pasos anteriores, pero antes de parar el contenedor, vamos a&lt;br /&gt;
guardar el estado del contener en la imagen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker run -d -ti --name to_save ubuntu bash&lt;br /&gt;
docker exec to_save mkdir test&lt;br /&gt;
docker commit to_save ubuntu&lt;br /&gt;
docker stop to_save&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ahora, vamos a para el contenedor y ejecutar uno nuevo para probar que los datos&lt;br /&gt;
han persistido:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker run -d -ti --name to_save_v2 ubuntu:con_directorio_test bash&lt;br /&gt;
docker exec to_save_v2 ls&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Esto crea una imagen ubuntu con la etiqueta &amp;quot;con_directorio_test&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Paso 10.2: Mantener la persistencia creando volúmenes ==&lt;br /&gt;
&lt;br /&gt;
La otra opción para mantener los datos es montar un volumen al ejecutar el&lt;br /&gt;
contenedor. Primero crearemos una carpeta que hará de volumen en nuestra&lt;br /&gt;
máquina, que será la que luego montemos para docker:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkdir /home/ubuntu/volumen&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ahora vamos a montar la carpeta al ejecutar el contenedor, lo hacemos con la&lt;br /&gt;
opción -v, la cual tiene 3 campos separados por ':':&lt;br /&gt;
&lt;br /&gt;
# El volumen en nuestra máquina&lt;br /&gt;
# Donde se montará el volumen dentro del contenedor&lt;br /&gt;
# Opciones de mmontaje, por ejemplo rw (read and write) o ro (read only)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker run --rm -ti -v /home/ubuntu/volumen:/volumen:rw ubuntu bash&lt;br /&gt;
mkdir /volumen/test&lt;br /&gt;
touch /volumen/test/file&lt;br /&gt;
exit&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Una vez nos salgamos del contenedor, podemos ver que en nuestra máquina están&lt;br /&gt;
los datos:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls /home/ubuntu/volumen/&lt;br /&gt;
ls /home/ubuntu/volumen/test&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La próxima vez que ejecutemos un contenedor, si montamos ese volumen, los datos&lt;br /&gt;
estarán ahí, además esta forma tiene el beneficio de compartir datos entre&lt;br /&gt;
nuestra máquina y el contenedor de forma sencilla.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Paso 11: Crear nuestra propia imagen docker =&lt;br /&gt;
&lt;br /&gt;
Para crear una imagen de un contenedor con una aplicación de Python hug, creamos en primer lugar la carpeta que contendrá los ficheros que nos permiten crear la imagen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkdir miapp&lt;br /&gt;
cd miapp&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Definimos un fichero ''Dockerfile'' para definir la imagen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
FROM python:alpine&lt;br /&gt;
&lt;br /&gt;
ENV USERNAME=&amp;quot;username&amp;quot;&lt;br /&gt;
RUN mkdir /app&lt;br /&gt;
RUN pip install hug&lt;br /&gt;
COPY endpoint.py /app&lt;br /&gt;
WORKDIR /app&lt;br /&gt;
CMD hug -f endpoint.py&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
	 &lt;br /&gt;
Alternativamente, puedes crear un [[Creando imagen propia usando Ubuntu de base|Dockerfile empleando la imagen de Ubuntu]] como base en lugar de Alpine.&lt;br /&gt;
&lt;br /&gt;
Y añadimos el fichero ''endpoint.py'' que emplea el framework Python hug con el contenido siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
import hug&lt;br /&gt;
&lt;br /&gt;
@hug.get('/welcome')&lt;br /&gt;
def welcome(username=&amp;quot;unknown&amp;quot;):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot; Say welcome to username &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    return &amp;quot;Welcome &amp;quot; + username&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Este fichero es un ejemplo de uso de Python hug. Si hacemos una petición a /welcome?username=&amp;quot;LSO&amp;quot;, esto nos devolverá el mensaje &amp;quot;Welcome LSO&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Una vez tengamos los dos ficheros creados en nuestra máquina virtual, podemos construir nuestra imagen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker build -t app:v1 -f Dockerfile .&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vamos a explicar para que sirve cada línea:&lt;br /&gt;
&lt;br /&gt;
* FROM: servirá para basarnos en una imagen existente, en este caso, una imagen de python alpine, que contiene python y no ocupa mucho espacio&lt;br /&gt;
* ENV: para crear variables de entorno&lt;br /&gt;
* RUN: para ejecutar comandos, ya sea para crear una carpeta, instalar dependencias o cualquier otra opción que necesitemos&lt;br /&gt;
* COPY: para copiar datos desde nuestra máquina a la imagen&lt;br /&gt;
* WORKDIR: para cambiar el directorio de trabajo&lt;br /&gt;
* CMD: este comando será ejecutado por defecto al iniciar un contenedor a partir de esta imagen&lt;br /&gt;
&lt;br /&gt;
Esto construirá una imagen docker basada en python:alpine, en la cual hemos&lt;br /&gt;
guardado nuestra pequeña aplicación y se va a ejecutar cuando ejecutemos un&lt;br /&gt;
contenedor basado en esa imagen. Para comprobar que la imagen se ha creado&lt;br /&gt;
correctamente, listamos las imagenes, y debería de aparecernos una imagen con&lt;br /&gt;
nombre 'app' y tag 'v1':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker images&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ahora vamos a crear un contenedor de nuestra imagen, y vamos a añadir una nueva&lt;br /&gt;
opción, -p 8001:8000. Esta opción hará que el puerto interno 8000 del contenedor&lt;br /&gt;
sea expuesto en el puerto 8001 de nuestra máquina:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker run --name my-app --rm -d -p 8001:8000 app:v1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ahora vamos a probar que funciona nuestra imagen y nuestro código. En nuestra&lt;br /&gt;
máquina haremos:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
curl -X GET http://localhost:8001/welcome?username=LSO&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Comprobaremos que la salida del comando curl, es &amp;quot;Welcome LSO&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Antes de terminar, vamos a comprobar otro pequeño detalle que añadimos en&lt;br /&gt;
nuestra imagen, la variable de entorno USERNAME, vamos a comprobar que funciona:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker exec -ti my-app ash&lt;br /&gt;
echo $USERNAME&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Funciona correctamente, pero al ejecutar el contenedor, podemos cambiar esta&lt;br /&gt;
variable de entorno como vimos en uno de los pasos anteriores:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker run --rm -ti -e USERNAME=me app:v1 ash&lt;br /&gt;
echo $USERNAME&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Esto nos servirá para tener opciones por defecto y que el usuario pueda&lt;br /&gt;
cambiarlo a su antojo, como por ejemplo contraseñas u otros detalles.&lt;br /&gt;
&lt;br /&gt;
= Paso 12: Eliminar imágenes =&lt;br /&gt;
&lt;br /&gt;
Veremos que después de todas las pruebas que hemos estado haciendo, tenemos&lt;br /&gt;
muchas imágenes, y algunas de las cuales no nos servirán o no las utilizaremos,&lt;br /&gt;
así que podemos borrarlas para ahorrar espacio.&lt;br /&gt;
&lt;br /&gt;
Al igual que con los contenedores, tenemos una opción para borrar imágenes que&lt;br /&gt;
no se utilicen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker image prune&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Esto borrará imágenes intermedias que se utilizan a veces para construir&lt;br /&gt;
nuestras imágenes o imágenes que hemos intentado construir y nos han fallado.&lt;br /&gt;
&lt;br /&gt;
La otra opción para borrar imágenes una a una, sería utilizando el comando&lt;br /&gt;
docker rmi y utilizar el nombre de la imagen o el id. Si esta es la salida de&lt;br /&gt;
'docker images':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE&lt;br /&gt;
app                 v1                  18609c517d32        14 minutes ago      109MB&lt;br /&gt;
python              alpine              39fb80313465        23 hours ago        98.7MB&lt;br /&gt;
debian              latest              85c4fd36a543        13 days ago         114MB&lt;br /&gt;
hello-world         latest              fce289e99eb9        7 months ago        1.84kB&lt;br /&gt;
hello-world         linux               fce289e99eb9        7 months ago        1.84kB&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podemos eliminar las imágenes de hello-world:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker rmi hello-world&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ó&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker rmi fce289e99eb9&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Paso 13: Varios docker a la vez (docker-compose) =&lt;br /&gt;
&lt;br /&gt;
Antes de comenzar, vamos a parar todos los contenedores que tengamos abiertos,&lt;br /&gt;
para dejar el entorno de docker limpio, que nos vendrá bien para esta parte.&lt;br /&gt;
&lt;br /&gt;
Cuando queremos ejecutar varios contenedores a la vez y que estén conectados&lt;br /&gt;
entre ellos fácilmente, utilizaremos docker-compose, donde con un fichero de&lt;br /&gt;
configuración simple en yaml, tendremos toda la configuración de lo que vamos a&lt;br /&gt;
ejecutar.&lt;br /&gt;
&lt;br /&gt;
Primero vamos a instalar docker-compose:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt install docker-compose&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ahora veamos un pequeño ejemplo donde explicaremos todos los detalles para crear&lt;br /&gt;
un docker-compose, en este caso, el nombre por defecto de los ficheros suele ser&lt;br /&gt;
docker-compose.yml, y el contenido será similar a:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
version: '3'&lt;br /&gt;
&lt;br /&gt;
services:&lt;br /&gt;
  web:&lt;br /&gt;
    container_name: web&lt;br /&gt;
    restart: always&lt;br /&gt;
    build:&lt;br /&gt;
      context: .&lt;br /&gt;
    ports:&lt;br /&gt;
      - &amp;quot;8000:8000&amp;quot;&lt;br /&gt;
    volumes:&lt;br /&gt;
      - /home/ubuntu/volume:/volumen:rw&lt;br /&gt;
    environment:&lt;br /&gt;
      USERNAME: test&lt;br /&gt;
  web2:&lt;br /&gt;
    container_name: web2&lt;br /&gt;
    build:&lt;br /&gt;
      dockerfile: Dockerfile&lt;br /&gt;
      context: .&lt;br /&gt;
    depends_on:&lt;br /&gt;
      - web&lt;br /&gt;
    command: touch web2&lt;br /&gt;
  web3:&lt;br /&gt;
    container_name: web3&lt;br /&gt;
    restart: on-failure&lt;br /&gt;
    image: pstauffer/curl&lt;br /&gt;
    depends_on:&lt;br /&gt;
      - web&lt;br /&gt;
    command: curl -X GET web:8000/welcome?username=web3&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En el docker-compose definimos diferentes servicios a ejecutar, en nuestro caso&lt;br /&gt;
hemos iniciado tres servicios diferentes, web, web2 y web3:&lt;br /&gt;
&lt;br /&gt;
El primer servicio, web:&lt;br /&gt;
&lt;br /&gt;
* container_name: para darle un nombre por defecto al contenedor cuando se cree&lt;br /&gt;
* restart: pueden ser:&lt;br /&gt;
** &amp;quot;no&amp;quot;: si la máquina termina, no se vuelve a iniciar (opción por defecto)&lt;br /&gt;
** always: siempre que el contenedor termine, intenta iniciarse de nuevo&lt;br /&gt;
** on-failure: solo intenta reiniciarse si el contenedor termina con fallo&lt;br /&gt;
** unless-stopped: solo reinicia el contenedor si el usuario es el que lo termina&lt;br /&gt;
* Utilizará el fichero Dockerfile creado en el paso 11 para generar la imagen a   usar.&lt;br /&gt;
* Expondrá el puerto 8000 del contenedor en el 8000 de nuestra máquina&lt;br /&gt;
* Montará un volumen, se hace de forma similar a la línea de comandos&lt;br /&gt;
* Creará una variable de entorno&lt;br /&gt;
&lt;br /&gt;
El segundo servicio, web2:&lt;br /&gt;
&lt;br /&gt;
* Utilizará el fichero Dockerfile también, la diferencia entre este y el primer servicio, es que si el nombre del Dockerfile cambia, tendremos que hacerlo de esta segunda forma, la primera por defecto solo buscará el fichero Dockerfile&lt;br /&gt;
* depends_on hará que para ejecutar este servicio, su dependencia tenga ya que estar iniciada&lt;br /&gt;
* Ejecutaremos un comando el cual sustituirá al comando de la imagen&lt;br /&gt;
&lt;br /&gt;
El tercer servicio, web3:&lt;br /&gt;
&lt;br /&gt;
* Utilizará la imagen ostauffer/curl que es un imagen mínima que contiene el comando curl&lt;br /&gt;
* restart: en este caso, hasta que el comando no se ejecute correctamente, se seguirá reiniciando el contenedor&lt;br /&gt;
* depends_on igual que el servicio 2, dependerá del servicio 1&lt;br /&gt;
* Ejecutaremos un comando para llamar desde el servicio 3 al servicio 1&lt;br /&gt;
&lt;br /&gt;
== Paso 13.1: Construir docker-compose ==&lt;br /&gt;
&lt;br /&gt;
En el caso de existir servicios que tengan Dockerfiles, esto hará que se construyan previamente, como hacer un docker build de cada uno de los servicios que contenga un Dockerfile:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker-compose build&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Con esto se generarán las imágenes necesarias para ejecutar todos los servicios.&lt;br /&gt;
&lt;br /&gt;
== Paso 13.2: Iniciar docker-compose ==&lt;br /&gt;
&lt;br /&gt;
Para iniciar todos los servicios, ejecutaremos:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker-compose up -d&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Después de esto podremos ver el logs de todos los servicios:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker-compose logs -f&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aquí veremos que el servicio 3 ha conseguido llamar correctamente al servicio 1.&lt;br /&gt;
&lt;br /&gt;
Ahora veremos como docker-compose ha creado los contenedores:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker ps -a&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La salida será similar a la siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                     PORTS                    NAMES&lt;br /&gt;
219a4118244c        pstauffer/curl      &amp;quot;curl -X GET web:800…&amp;quot;   6 seconds ago       Exited (0) 3 seconds ago                            web3&lt;br /&gt;
c97e894cb3ae        ubuntu_web2         &amp;quot;touch web2&amp;quot;             6 seconds ago       Exited (0) 4 seconds ago                            web2&lt;br /&gt;
f35d034204fc        ubuntu_web          &amp;quot;/bin/sh -c 'hug -f …&amp;quot;   6 seconds ago       Up 5 seconds               0.0.0.0:8000-&amp;gt;8000/tcp   web&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aquí vemos varios detalles:&lt;br /&gt;
&lt;br /&gt;
* El nombre que le hemos dado en el docker-compose ha funcionado correctamente&lt;br /&gt;
* Vemos que los comandos son los correctos también&lt;br /&gt;
* web2 está parado por que la política de reinicio es apagar cuando se termine de ejecutar un comando&lt;br /&gt;
* web 3 está parado por que el comando ha terminado con un salida correcta&lt;br /&gt;
&lt;br /&gt;
Vamos a comprobar ahora que en el servicio web está todo correcto:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker exec -ti web ash&lt;br /&gt;
echo $USERNAME&lt;br /&gt;
ls /volumen&lt;br /&gt;
exit&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podemos comprobar que tanto cambiar la variable de entorno como crear un&lt;br /&gt;
volumen ha funcionado correctamente.&lt;br /&gt;
&lt;br /&gt;
== Paso 13.3: Parar docker-compose ==&lt;br /&gt;
&lt;br /&gt;
Para parar todos los servicios:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker-compose down&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Comprobamos:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker ps -a&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vemos que han desaparecido todos los contenedores.&lt;br /&gt;
&lt;br /&gt;
= Paso 14: Ejercicios =&lt;br /&gt;
&lt;br /&gt;
== Ejercicio 1: Variante de httpd ==&lt;br /&gt;
&lt;br /&gt;
 Construya una imagen ''httpd-hola-mundo'' a partir de la imagen ''httpd''. El fichero de index.html de la carpeta htdocs/ tiene que mostrar el mensaje &amp;quot;hola mundo&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker pull httpd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Edita el fichero Dockerfile:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
nano Dockerfile&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Añada este contenido:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
FROM httpd&lt;br /&gt;
&lt;br /&gt;
COPY index.html htdocs/index.html&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Edita el fichero index.html:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
nano index.html&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Añada este contenido:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;hola mundo&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Construye la imagen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker build -t mihttpd -f Dockerfile .&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ahora vamos a crear un contenedor de nuestra imagen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo docker run --name mihttpd -d -p 8080:80 mihttpd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ahora vamos a probar que funciona nuestra imagen y nuestro código:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
curl -X GET http://localhost:8080&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tiene que salir por pantalla esto:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;hola mundo&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Ejercicio 2: aplicación flask ==&lt;br /&gt;
&lt;br /&gt;
Flask es un framework python para implementar webs. Cree una imagen &amp;quot;miapp-flask&amp;quot; a partir de la imagen de &amp;quot;python&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
* Instale flask mediante: pip install flask&lt;br /&gt;
* Cree la carpeta &amp;quot;app&amp;quot;&lt;br /&gt;
* Establezca la variable FLASK_APP a &amp;quot;hello.py&amp;quot;&lt;br /&gt;
* Añada el fichero &amp;quot;hello.py&amp;quot;&lt;br /&gt;
* Establezca el directorio de trabajo a &amp;quot;/app&amp;quot;&lt;br /&gt;
&lt;br /&gt;
El fichero hello.py contiene un &amp;quot;hola mundo&amp;quot; para Flask:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
from flask import Flask&lt;br /&gt;
app = Flask(__name__)&lt;br /&gt;
&lt;br /&gt;
@app.route(&amp;quot;/&amp;quot;)&lt;br /&gt;
def hello():&lt;br /&gt;
    return &amp;quot;Hello World!&amp;quot;&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    app.run()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Solución con alpine:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
FROM python:alpine&lt;br /&gt;
&lt;br /&gt;
RUN mkdir /app&lt;br /&gt;
RUN pip install flask&lt;br /&gt;
ENV FLASK_APP=&amp;quot;app/hello.py&amp;quot;&lt;br /&gt;
COPY hello.py&lt;br /&gt;
WORKDIR /&lt;br /&gt;
CMD flask run --host=0.0.0.0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Solución con Ubuntu:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
FROM ubuntu:bionic&lt;br /&gt;
&lt;br /&gt;
RUN apt-get update&lt;br /&gt;
RUN apt-get -y install python python-pip wget&lt;br /&gt;
RUN pip install Flask&lt;br /&gt;
ENV FLASK_APP=&amp;quot;app/hello.py&amp;quot;&lt;br /&gt;
RUN mkdir /app&lt;br /&gt;
COPY hello.py /app&lt;br /&gt;
CMD flask run --host=0.0.0.0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Ejercicio 3: mysql ==&lt;br /&gt;
&lt;br /&gt;
'''EN LA MÁQUINA VIRTUAL:'''&lt;br /&gt;
&lt;br /&gt;
mkdir miapp&lt;br /&gt;
&lt;br /&gt;
cd miapp&lt;br /&gt;
&lt;br /&gt;
sudo docker pull mysql&lt;br /&gt;
&lt;br /&gt;
nano Dockerfile&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
FROM mysql&lt;br /&gt;
ENV MYSQL_ROOT_PASSWORD=&amp;quot;lacontraseñaqueyoquiera&amp;quot;&lt;br /&gt;
RUN mkdir /app&lt;br /&gt;
WORKDIR /app&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
CTRL+O , ENTER Y CTRL+X (para guardar Dockerfile y salir)&lt;br /&gt;
&lt;br /&gt;
sudo docker build -ti mrfdocker -f Dockerfile .&lt;br /&gt;
&lt;br /&gt;
sudo docker run --name mymrf --rm -p 8001:3306 mrfdocker&lt;br /&gt;
&lt;br /&gt;
sudo docker images&lt;br /&gt;
'''&lt;br /&gt;
EN LA TERMINAL DEL HOST:'''&lt;br /&gt;
&lt;br /&gt;
''Instalación de mysql:''&lt;br /&gt;
&lt;br /&gt;
sudo apt install mysql-client-core-5.7&lt;br /&gt;
&lt;br /&gt;
&amp;gt; sudo apt-get install mysql-server&lt;br /&gt;
&lt;br /&gt;
&amp;gt; sudo service mysql start&lt;br /&gt;
&lt;br /&gt;
''Para entrar:''&lt;br /&gt;
&lt;br /&gt;
sudo mysql -u root -p -P 8001&lt;br /&gt;
&lt;br /&gt;
Una vez dentro de msql:&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; show databases;&lt;br /&gt;
''&lt;br /&gt;
Para salir:''&lt;br /&gt;
&lt;br /&gt;
exit&lt;/div&gt;</summary>
		<author><name>Marramfer12</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Contenedores&amp;diff=4692</id>
		<title>Contenedores</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Contenedores&amp;diff=4692"/>
				<updated>2020-01-15T16:03:04Z</updated>
		
		<summary type="html">&lt;p&gt;Marramfer12: mysql&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;En esta práctica aprenderemos a utilizar [https://es.wikipedia.org/wiki/Docker_(software) docker] para desplegar contenedores.&lt;br /&gt;
&lt;br /&gt;
= Paso 1: Instalar docker =&lt;br /&gt;
&lt;br /&gt;
Vamos a añadir un nuevo repositorio, ya que docker no está en los repositorios&lt;br /&gt;
oficiales:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt update&lt;br /&gt;
sudo apt install docker.io&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para ver si está todo bien y se ha instalado correctamente, comprobaremos que el&lt;br /&gt;
servicio está activo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo service docker status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Debería mostrar algo similar a lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
● docker.service - Docker Application Container Engine&lt;br /&gt;
   Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)&lt;br /&gt;
   Active: active (running) since Mon 2019-08-26 09:41:40 UTC; 37s ago&lt;br /&gt;
     Docs: https://docs.docker.com&lt;br /&gt;
 Main PID: 3630 (dockerd)&lt;br /&gt;
    Tasks: 8&lt;br /&gt;
   CGroup: /system.slice/docker.service&lt;br /&gt;
           └─3630 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pulsamos la tecla 'q' para salir.&lt;br /&gt;
&lt;br /&gt;
Si el servicio aparece inactivo, puedes lanzarlo con:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo service docker start&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Paso 2: Ejecutar docker con nuestro usuario =&lt;br /&gt;
&lt;br /&gt;
Para no necesitar sudo al utilizar docker, añadiremos a nuestro usuario al grupo&lt;br /&gt;
docker:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo usermod -aG docker ubuntu&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para que el cambio tenga efecto, tendremos que cerrar la sesión de nuestro&lt;br /&gt;
usuario y abrirla de nuevo. Podemos hacerlo fácilmente pulsando CTRL + D y&lt;br /&gt;
volviendo a insertar nuestras credenciales.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Paso 3: Repositorio de imágenes de contenedores DockerHub =&lt;br /&gt;
&lt;br /&gt;
Docker ofrece un servicio de nube denominado ''DockerHub'' que puede ser empleado como red social para compartir tus imágenes de Docker. En ''DockerHub'' existen además imágenes de contenedores preconfiguradas de software, muchas de ellas oficiales (ofrecidas por el propio fabricante del software) que se podrán emplear como base para construir nuevas imágenes adaptadas a nuestras necesidades.&lt;br /&gt;
&lt;br /&gt;
Podremos realizar búsquedas en este repositorio ''DockerHub'' puedes emplear el siguiente comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker search hello-world&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para descargarnos la imagen de ''hello-world'' podemos usar la orden ''pull'':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker pull hello-world&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
También podemos publicar imágenes propias, esto require '''registro de usuario''' en la nube de ''DockerHub'', lo que '''no''' es obligatorio para la realización de esta práctica. Para subir una imagen, hay que validarse como usuario en la nube de ''DockerHub'':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker login&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tras introducir tu usuario y contraseña, puedes comenzar a publicar tus propias imágenes.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker push MI_IMAGEN&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Paso 4: Comprobar imágenes en nuestra máquina =&lt;br /&gt;
&lt;br /&gt;
Para ver las imágenes que tenemos en nuestra máquina, utilizaremos el comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker images&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Inicialmente, no tenemos imágenes en almacenamiento, podemos descargarnos la imagen oficial de Ubuntu:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker pull ubuntu:latest&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ahora si, ya debería de aparecernos la imagen ''ubuntu''.&lt;br /&gt;
&lt;br /&gt;
Comentar también que cada imagen puede tener varias etiquetas, por ejemplo, la imagen ubuntu, cuando la hemos visto en el listado de imágenes, venía con el tag latest, que es el tag que se descarga por defecto, pero nosotros podemos especificar otro, por ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker pull ubuntu:bionic&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para traernos la versión de la imagen de Ubuntu ''bionic'' (18.04).&lt;br /&gt;
&lt;br /&gt;
Ahora tendremos dos imágenes con diferente etiqueta, que serían como las diferentes versiones de cada imagen.&lt;br /&gt;
&lt;br /&gt;
= Paso 5: Lanzar un contenedor =&lt;br /&gt;
&lt;br /&gt;
Un contenedor no es más que una imagen de docker ejecutándose, sería similar a&lt;br /&gt;
una máquina virtual, aunque mucho más liviano.&lt;br /&gt;
&lt;br /&gt;
Para crear un contenedor, utilizaremos una imagen, en este caso, la imagen&lt;br /&gt;
hello-world. Hacemos lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker run hello-world&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Esto nos mostrará el siguiente mensaje si todo está correcto:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
Hello from Docker!&lt;br /&gt;
This message shows that your installation appears to be working correctly.&lt;br /&gt;
&lt;br /&gt;
To generate this message, Docker took the following steps:&lt;br /&gt;
 1. The Docker client contacted the Docker daemon.&lt;br /&gt;
 2. The Docker daemon pulled the &amp;quot;hello-world&amp;quot; image from the Docker Hub.&lt;br /&gt;
    (amd64)&lt;br /&gt;
 3. The Docker daemon created a new container from that image which runs the&lt;br /&gt;
    executable that produces the output you are currently reading.&lt;br /&gt;
 4. The Docker daemon streamed that output to the Docker client, which sent it&lt;br /&gt;
    to your terminal.&lt;br /&gt;
&lt;br /&gt;
To try something more ambitious, you can run an Ubuntu container with:&lt;br /&gt;
 $ docker run -it ubuntu bash&lt;br /&gt;
&lt;br /&gt;
Share images, automate workflows, and more with a free Docker ID:&lt;br /&gt;
 https://hub.docker.com/&lt;br /&gt;
&lt;br /&gt;
For more examples and ideas, visit:&lt;br /&gt;
 https://docs.docker.com/get-started/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al crear los contenedores utilizando el comando 'run', tenemos varias opciones:&lt;br /&gt;
&lt;br /&gt;
== Paso 5.1: Ejecutar una terminal en el contenedor en modo interactivo (-ti) ==&lt;br /&gt;
&lt;br /&gt;
Para este ejemplo vamos a utilizar otra imagen diferente, en este caso vamos a utilizar una imagen de ubuntu.&lt;br /&gt;
&lt;br /&gt;
Vamos a lanzar un contenedor y ejecutar una terminal en el que se va a ejecutar el programa '''bash''' que me ofrece un interprete de órdenes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker run -ti ubuntu bash&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La opción ''-t'' indica que se crea un terminal en el contenedor. Y la opción ''-i'' indica que el contenedor se ejecuta en modo interactivo.&lt;br /&gt;
&lt;br /&gt;
Al acceder al contenedor de ''ubuntu'' nos aparece un ''hash'' en el prompt de la shell, que identifica a la instancia del contenedor (es valor es similar al que muestra la orden ''docker container ls'').&lt;br /&gt;
&lt;br /&gt;
Para salir del contenedor, escribimos 'exit' o pulsamos 'CTRL + D'&lt;br /&gt;
&lt;br /&gt;
== Paso 5.2 Ejecutar en segundo plano (-d) ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker run -d hello-world&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nos mostrará el id del contenedor y se ejecutará en segundo plano, por lo que la salida que antes obtuvimos, ahora no se muestra. Para poder ver esta salida,&lt;br /&gt;
podemos utilizar el comando logs y el id mostrador anteriormente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker logs 2ec1daae4676a4e84dc04fd91399c1dfe92119544ff12ee307991fe573d3db64&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Paso 5.3: Añadir variables de entorno a un contenedor ==&lt;br /&gt;
&lt;br /&gt;
Utilizaremos la imagen anterior, y vamos a añadir una variable de entorno&lt;br /&gt;
llamada TEST que contenga el valor 'test'. A parte, también ejecutaremos la&lt;br /&gt;
terminal como antes, para comprobar con el comando echo, que la variable de&lt;br /&gt;
entorno está creada correctamente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker run -ti -e TEST=test ubuntu bash&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ahora, desde el contenedor podemos comprobar el valor de la variable de entorno ''$TEST''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo $TEST&lt;br /&gt;
test&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Paso 6: Listar contenedores en ejecución =&lt;br /&gt;
&lt;br /&gt;
Hemos estado haciendo pruebas y ejecutando contenedores en el paso anterior, vamos a ver donde se encuentran estos contenedores que hemos ejecutado, y después veremos algunas opciones más del comando run.&lt;br /&gt;
&lt;br /&gt;
Tenemos dos opciones para ver los contenedores:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker container ls -a&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
o la versión corta:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker ps -a&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ambas hacen lo mismo, y debería de mostrarnos una salida similar a la siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES&lt;br /&gt;
e2bde5f5500c        ubuntu              &amp;quot;bash&amp;quot;               6 minutes ago       Exited (0) 2 seconds ago                        pensive_sammet&lt;br /&gt;
544ad27dbc3c        ubuntu              &amp;quot;bash&amp;quot;               7 minutes ago       Exited (0) 7 minutes ago                        serene_elgamal&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En la información veremos que el contenedor tiene el estado exited, eso quiere decir que no se está ejecutando y ya ha finalizado. Vamos a hacer una prueba para ver un contendor ejecutándose:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker run -d ubuntu sleep 30&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Con el comando sleep 30 esperamos 30 segundos hasta que termine el comando, asíque durante esos 30 segundos, el contenedor estará ejecutándose, veámoslo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker ps -a&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES&lt;br /&gt;
eacceb27d52d        ubuntu              &amp;quot;sleep 30&amp;quot;          12 seconds ago      Up 11 seconds                                   sharp_pasteur&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vamos a ver alguna opciones más de la orden ''run''.&lt;br /&gt;
&lt;br /&gt;
== Paso 6.1: Dar un nombre al contenedor (--name) ==&lt;br /&gt;
&lt;br /&gt;
Por defecto, docker creará automáticamente un nombre como hemos visto en las salidas del comando ''docker ps -a''. Podemos establecer el nombre del contenedor que queramos con la opción ''--name'':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker run -d --name mi_ubuntu ubuntu&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Paso 6.2: Eliminar contenedor cuando termine (--rm) ==&lt;br /&gt;
&lt;br /&gt;
Vamos a mezclar todo lo visto anteriormente:&lt;br /&gt;
&lt;br /&gt;
* Lanzar en segundo plano (-d)&lt;br /&gt;
* Ejecutar contenedor durante 30 segundos (sleep 30)&lt;br /&gt;
* Dar un nombre a la imagen (--name)&lt;br /&gt;
* Eliminar contenedor cuando termine (--rm)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker run -d --rm --name bye-bye ubuntu sleep 30&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Antes y una vez pasados los 30 segundos, podemos comprobar que el contenedor ha desaparecido.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker ps -a&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Paso 7: Parar y eliminar contenedores =&lt;br /&gt;
&lt;br /&gt;
Los contenedores podemos pararlos o eliminarlos, veamos como hacerlo. Antes que&lt;br /&gt;
nada, borraremos todos los contenedores que estén terminados, para ello:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker container prune&lt;br /&gt;
docker ps -a&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ya lo hemos dejado todo limpio para seguir, ahora vamos a crear un contenedor,&lt;br /&gt;
utilizando un comando de linux que no termina, para que así se quede&lt;br /&gt;
ejecutándose el contenedor infinitamente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker run -d -ti --name my_container ubuntu bash&lt;br /&gt;
docker ps -a&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vamos a pararlo (podemos utilizar el nombre dado o el id):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker stop my_container&lt;br /&gt;
docker stop e4901956f108&lt;br /&gt;
docker ps -a&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Veremos que ya ha terminado, y ahora vamos a eliminarlo, pero solo este&lt;br /&gt;
contenedor, no como previamente que eliminamos todos. Lo mismo que para pararlo,&lt;br /&gt;
podemos utilizar el nombre o el id.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker container rm my_container&lt;br /&gt;
docker container rm my_container&lt;br /&gt;
docker ps -a&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Veremos que ya no tenemos el contenedor y está correctamente eliminado.&lt;br /&gt;
&lt;br /&gt;
= Paso 8: Conectarnos a un contenedor que se está ejecutando en segundo plano =&lt;br /&gt;
&lt;br /&gt;
Vamos a ejecutar de nuevo un contenedor que no termine:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker run -d -ti --name to_attach ubuntu bash&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ahora, vamos a conectarnos a este contenedor que está ejecutándose en segundo&lt;br /&gt;
plano:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker attach to_attach&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Veremos la orden bash ejecutándose, para terminar, hacemos un 'CTRL + C', y ahora, veremos que ha pasado con el contenedor:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker ps -a&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Lo veremos parado, por que lo que hemos hecho ha sido conectarnos al contenedor&lt;br /&gt;
y parar el comando que se estaba ejecutando, así que ahora tenemos el contenedor&lt;br /&gt;
finalizado.&lt;br /&gt;
&lt;br /&gt;
= Paso 9: Ejecutar en un contenedor otro comando =&lt;br /&gt;
&lt;br /&gt;
Vamos a ver otresta vez como ejecutar un comando en un contenedor que ya está&lt;br /&gt;
ejecutándose:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker run -d -ti --name to_exec ubuntu bash&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ahora, vamos a ejecutar un comando en ese contenedor. El comando exec es similar&lt;br /&gt;
al comando run, pero para ejecutar un comando dentro de un contenedor:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker exec -ti to_exec ls&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ahora estamos dentro del contenedor creado anteriormente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ps -a&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aquí veremos en el listado de procesos que hay en ejecución.&lt;br /&gt;
&lt;br /&gt;
Ahora vamos a salirnos del contenedor, escribiendo 'exit' o 'CTRL + D', y&lt;br /&gt;
comprobemos el estado del contenedor:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker ps -a&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ahora veremos que el contenedor se sigue ejecutando, no como en el paso anterior.&lt;br /&gt;
&lt;br /&gt;
= Paso 10: Persistencia en contenedores =&lt;br /&gt;
&lt;br /&gt;
Vamos a ver que los contenedores no mantienen los datos por defecto, solo nos&lt;br /&gt;
dan un servicio pero los datos NO son persistentes. Creemos un contenedor que&lt;br /&gt;
vamos a dejar ejecutándose:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker run -d -ti --name to_expire ubuntu bash&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ahora, vamos a crear una carpeta en el contenedor y comprobar que esa carpeta&lt;br /&gt;
existe:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker exec to_expire mkdir test&lt;br /&gt;
docker exec to_expire ls&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Veremos que la carpeta existe, pero, ¿qué ocurre si eliminamos el contedor y&lt;br /&gt;
volvemos a crear uno?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker container stop to_expire&lt;br /&gt;
docker container rm to_expire&lt;br /&gt;
docker run -d -ti --name to_expire ubuntu bash&lt;br /&gt;
docker exec to_expire ls&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podemos comprobar que la carpeta creada anteriormente, no existe si el&lt;br /&gt;
contenedor termina. Si quisíeramos mantener una persistencia de datos, tenemos&lt;br /&gt;
varias opciones:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Paso 10.1: Mantener la persistencia cambiando la imagen base ==&lt;br /&gt;
&lt;br /&gt;
Repetimos los pasos anteriores, pero antes de parar el contenedor, vamos a&lt;br /&gt;
guardar el estado del contener en la imagen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker run -d -ti --name to_save ubuntu bash&lt;br /&gt;
docker exec to_save mkdir test&lt;br /&gt;
docker commit to_save ubuntu&lt;br /&gt;
docker stop to_save&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ahora, vamos a para el contenedor y ejecutar uno nuevo para probar que los datos&lt;br /&gt;
han persistido:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker run -d -ti --name to_save_v2 ubuntu:con_directorio_test bash&lt;br /&gt;
docker exec to_save_v2 ls&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Esto crea una imagen ubuntu con la etiqueta &amp;quot;con_directorio_test&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Paso 10.2: Mantener la persistencia creando volúmenes ==&lt;br /&gt;
&lt;br /&gt;
La otra opción para mantener los datos es montar un volumen al ejecutar el&lt;br /&gt;
contenedor. Primero crearemos una carpeta que hará de volumen en nuestra&lt;br /&gt;
máquina, que será la que luego montemos para docker:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkdir /home/ubuntu/volumen&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ahora vamos a montar la carpeta al ejecutar el contenedor, lo hacemos con la&lt;br /&gt;
opción -v, la cual tiene 3 campos separados por ':':&lt;br /&gt;
&lt;br /&gt;
# El volumen en nuestra máquina&lt;br /&gt;
# Donde se montará el volumen dentro del contenedor&lt;br /&gt;
# Opciones de mmontaje, por ejemplo rw (read and write) o ro (read only)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker run --rm -ti -v /home/ubuntu/volumen:/volumen:rw ubuntu bash&lt;br /&gt;
mkdir /volumen/test&lt;br /&gt;
touch /volumen/test/file&lt;br /&gt;
exit&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Una vez nos salgamos del contenedor, podemos ver que en nuestra máquina están&lt;br /&gt;
los datos:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls /home/ubuntu/volumen/&lt;br /&gt;
ls /home/ubuntu/volumen/test&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La próxima vez que ejecutemos un contenedor, si montamos ese volumen, los datos&lt;br /&gt;
estarán ahí, además esta forma tiene el beneficio de compartir datos entre&lt;br /&gt;
nuestra máquina y el contenedor de forma sencilla.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Paso 11: Crear nuestra propia imagen docker =&lt;br /&gt;
&lt;br /&gt;
Para crear una imagen de un contenedor con una aplicación de Python hug, creamos en primer lugar la carpeta que contendrá los ficheros que nos permiten crear la imagen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkdir miapp&lt;br /&gt;
cd miapp&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Definimos un fichero ''Dockerfile'' para definir la imagen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
FROM python:alpine&lt;br /&gt;
&lt;br /&gt;
ENV USERNAME=&amp;quot;username&amp;quot;&lt;br /&gt;
RUN mkdir /app&lt;br /&gt;
RUN pip install hug&lt;br /&gt;
COPY endpoint.py /app&lt;br /&gt;
WORKDIR /app&lt;br /&gt;
CMD hug -f endpoint.py&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
	 &lt;br /&gt;
Alternativamente, puedes crear un [[Creando imagen propia usando Ubuntu de base|Dockerfile empleando la imagen de Ubuntu]] como base en lugar de Alpine.&lt;br /&gt;
&lt;br /&gt;
Y añadimos el fichero ''endpoint.py'' que emplea el framework Python hug con el contenido siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
import hug&lt;br /&gt;
&lt;br /&gt;
@hug.get('/welcome')&lt;br /&gt;
def welcome(username=&amp;quot;unknown&amp;quot;):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot; Say welcome to username &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    return &amp;quot;Welcome &amp;quot; + username&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Este fichero es un ejemplo de uso de Python hug. Si hacemos una petición a /welcome?username=&amp;quot;LSO&amp;quot;, esto nos devolverá el mensaje &amp;quot;Welcome LSO&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Una vez tengamos los dos ficheros creados en nuestra máquina virtual, podemos construir nuestra imagen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker build -t app:v1 -f Dockerfile .&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vamos a explicar para que sirve cada línea:&lt;br /&gt;
&lt;br /&gt;
* FROM: servirá para basarnos en una imagen existente, en este caso, una imagen de python alpine, que contiene python y no ocupa mucho espacio&lt;br /&gt;
* ENV: para crear variables de entorno&lt;br /&gt;
* RUN: para ejecutar comandos, ya sea para crear una carpeta, instalar dependencias o cualquier otra opción que necesitemos&lt;br /&gt;
* COPY: para copiar datos desde nuestra máquina a la imagen&lt;br /&gt;
* WORKDIR: para cambiar el directorio de trabajo&lt;br /&gt;
* CMD: este comando será ejecutado por defecto al iniciar un contenedor a partir de esta imagen&lt;br /&gt;
&lt;br /&gt;
Esto construirá una imagen docker basada en python:alpine, en la cual hemos&lt;br /&gt;
guardado nuestra pequeña aplicación y se va a ejecutar cuando ejecutemos un&lt;br /&gt;
contenedor basado en esa imagen. Para comprobar que la imagen se ha creado&lt;br /&gt;
correctamente, listamos las imagenes, y debería de aparecernos una imagen con&lt;br /&gt;
nombre 'app' y tag 'v1':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker images&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ahora vamos a crear un contenedor de nuestra imagen, y vamos a añadir una nueva&lt;br /&gt;
opción, -p 8001:8000. Esta opción hará que el puerto interno 8000 del contenedor&lt;br /&gt;
sea expuesto en el puerto 8001 de nuestra máquina:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker run --name my-app --rm -d -p 8001:8000 app:v1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ahora vamos a probar que funciona nuestra imagen y nuestro código. En nuestra&lt;br /&gt;
máquina haremos:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
curl -X GET http://localhost:8001/welcome?username=LSO&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Comprobaremos que la salida del comando curl, es &amp;quot;Welcome LSO&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Antes de terminar, vamos a comprobar otro pequeño detalle que añadimos en&lt;br /&gt;
nuestra imagen, la variable de entorno USERNAME, vamos a comprobar que funciona:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker exec -ti my-app ash&lt;br /&gt;
echo $USERNAME&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Funciona correctamente, pero al ejecutar el contenedor, podemos cambiar esta&lt;br /&gt;
variable de entorno como vimos en uno de los pasos anteriores:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker run --rm -ti -e USERNAME=me app:v1 ash&lt;br /&gt;
echo $USERNAME&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Esto nos servirá para tener opciones por defecto y que el usuario pueda&lt;br /&gt;
cambiarlo a su antojo, como por ejemplo contraseñas u otros detalles.&lt;br /&gt;
&lt;br /&gt;
= Paso 12: Eliminar imágenes =&lt;br /&gt;
&lt;br /&gt;
Veremos que después de todas las pruebas que hemos estado haciendo, tenemos&lt;br /&gt;
muchas imágenes, y algunas de las cuales no nos servirán o no las utilizaremos,&lt;br /&gt;
así que podemos borrarlas para ahorrar espacio.&lt;br /&gt;
&lt;br /&gt;
Al igual que con los contenedores, tenemos una opción para borrar imágenes que&lt;br /&gt;
no se utilicen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker image prune&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Esto borrará imágenes intermedias que se utilizan a veces para construir&lt;br /&gt;
nuestras imágenes o imágenes que hemos intentado construir y nos han fallado.&lt;br /&gt;
&lt;br /&gt;
La otra opción para borrar imágenes una a una, sería utilizando el comando&lt;br /&gt;
docker rmi y utilizar el nombre de la imagen o el id. Si esta es la salida de&lt;br /&gt;
'docker images':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE&lt;br /&gt;
app                 v1                  18609c517d32        14 minutes ago      109MB&lt;br /&gt;
python              alpine              39fb80313465        23 hours ago        98.7MB&lt;br /&gt;
debian              latest              85c4fd36a543        13 days ago         114MB&lt;br /&gt;
hello-world         latest              fce289e99eb9        7 months ago        1.84kB&lt;br /&gt;
hello-world         linux               fce289e99eb9        7 months ago        1.84kB&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podemos eliminar las imágenes de hello-world:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker rmi hello-world&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ó&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker rmi fce289e99eb9&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Paso 13: Varios docker a la vez (docker-compose) =&lt;br /&gt;
&lt;br /&gt;
Antes de comenzar, vamos a parar todos los contenedores que tengamos abiertos,&lt;br /&gt;
para dejar el entorno de docker limpio, que nos vendrá bien para esta parte.&lt;br /&gt;
&lt;br /&gt;
Cuando queremos ejecutar varios contenedores a la vez y que estén conectados&lt;br /&gt;
entre ellos fácilmente, utilizaremos docker-compose, donde con un fichero de&lt;br /&gt;
configuración simple en yaml, tendremos toda la configuración de lo que vamos a&lt;br /&gt;
ejecutar.&lt;br /&gt;
&lt;br /&gt;
Primero vamos a instalar docker-compose:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt install docker-compose&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ahora veamos un pequeño ejemplo donde explicaremos todos los detalles para crear&lt;br /&gt;
un docker-compose, en este caso, el nombre por defecto de los ficheros suele ser&lt;br /&gt;
docker-compose.yml, y el contenido será similar a:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
version: '3'&lt;br /&gt;
&lt;br /&gt;
services:&lt;br /&gt;
  web:&lt;br /&gt;
    container_name: web&lt;br /&gt;
    restart: always&lt;br /&gt;
    build:&lt;br /&gt;
      context: .&lt;br /&gt;
    ports:&lt;br /&gt;
      - &amp;quot;8000:8000&amp;quot;&lt;br /&gt;
    volumes:&lt;br /&gt;
      - /home/ubuntu/volume:/volumen:rw&lt;br /&gt;
    environment:&lt;br /&gt;
      USERNAME: test&lt;br /&gt;
  web2:&lt;br /&gt;
    container_name: web2&lt;br /&gt;
    build:&lt;br /&gt;
      dockerfile: Dockerfile&lt;br /&gt;
      context: .&lt;br /&gt;
    depends_on:&lt;br /&gt;
      - web&lt;br /&gt;
    command: touch web2&lt;br /&gt;
  web3:&lt;br /&gt;
    container_name: web3&lt;br /&gt;
    restart: on-failure&lt;br /&gt;
    image: pstauffer/curl&lt;br /&gt;
    depends_on:&lt;br /&gt;
      - web&lt;br /&gt;
    command: curl -X GET web:8000/welcome?username=web3&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En el docker-compose definimos diferentes servicios a ejecutar, en nuestro caso&lt;br /&gt;
hemos iniciado tres servicios diferentes, web, web2 y web3:&lt;br /&gt;
&lt;br /&gt;
El primer servicio, web:&lt;br /&gt;
&lt;br /&gt;
* container_name: para darle un nombre por defecto al contenedor cuando se cree&lt;br /&gt;
* restart: pueden ser:&lt;br /&gt;
** &amp;quot;no&amp;quot;: si la máquina termina, no se vuelve a iniciar (opción por defecto)&lt;br /&gt;
** always: siempre que el contenedor termine, intenta iniciarse de nuevo&lt;br /&gt;
** on-failure: solo intenta reiniciarse si el contenedor termina con fallo&lt;br /&gt;
** unless-stopped: solo reinicia el contenedor si el usuario es el que lo termina&lt;br /&gt;
* Utilizará el fichero Dockerfile creado en el paso 11 para generar la imagen a   usar.&lt;br /&gt;
* Expondrá el puerto 8000 del contenedor en el 8000 de nuestra máquina&lt;br /&gt;
* Montará un volumen, se hace de forma similar a la línea de comandos&lt;br /&gt;
* Creará una variable de entorno&lt;br /&gt;
&lt;br /&gt;
El segundo servicio, web2:&lt;br /&gt;
&lt;br /&gt;
* Utilizará el fichero Dockerfile también, la diferencia entre este y el primer servicio, es que si el nombre del Dockerfile cambia, tendremos que hacerlo de esta segunda forma, la primera por defecto solo buscará el fichero Dockerfile&lt;br /&gt;
* depends_on hará que para ejecutar este servicio, su dependencia tenga ya que estar iniciada&lt;br /&gt;
* Ejecutaremos un comando el cual sustituirá al comando de la imagen&lt;br /&gt;
&lt;br /&gt;
El tercer servicio, web3:&lt;br /&gt;
&lt;br /&gt;
* Utilizará la imagen ostauffer/curl que es un imagen mínima que contiene el comando curl&lt;br /&gt;
* restart: en este caso, hasta que el comando no se ejecute correctamente, se seguirá reiniciando el contenedor&lt;br /&gt;
* depends_on igual que el servicio 2, dependerá del servicio 1&lt;br /&gt;
* Ejecutaremos un comando para llamar desde el servicio 3 al servicio 1&lt;br /&gt;
&lt;br /&gt;
== Paso 13.1: Construir docker-compose ==&lt;br /&gt;
&lt;br /&gt;
En el caso de existir servicios que tengan Dockerfiles, esto hará que se construyan previamente, como hacer un docker build de cada uno de los servicios que contenga un Dockerfile:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker-compose build&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Con esto se generarán las imágenes necesarias para ejecutar todos los servicios.&lt;br /&gt;
&lt;br /&gt;
== Paso 13.2: Iniciar docker-compose ==&lt;br /&gt;
&lt;br /&gt;
Para iniciar todos los servicios, ejecutaremos:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker-compose up -d&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Después de esto podremos ver el logs de todos los servicios:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker-compose logs -f&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aquí veremos que el servicio 3 ha conseguido llamar correctamente al servicio 1.&lt;br /&gt;
&lt;br /&gt;
Ahora veremos como docker-compose ha creado los contenedores:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker ps -a&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La salida será similar a la siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                     PORTS                    NAMES&lt;br /&gt;
219a4118244c        pstauffer/curl      &amp;quot;curl -X GET web:800…&amp;quot;   6 seconds ago       Exited (0) 3 seconds ago                            web3&lt;br /&gt;
c97e894cb3ae        ubuntu_web2         &amp;quot;touch web2&amp;quot;             6 seconds ago       Exited (0) 4 seconds ago                            web2&lt;br /&gt;
f35d034204fc        ubuntu_web          &amp;quot;/bin/sh -c 'hug -f …&amp;quot;   6 seconds ago       Up 5 seconds               0.0.0.0:8000-&amp;gt;8000/tcp   web&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aquí vemos varios detalles:&lt;br /&gt;
&lt;br /&gt;
* El nombre que le hemos dado en el docker-compose ha funcionado correctamente&lt;br /&gt;
* Vemos que los comandos son los correctos también&lt;br /&gt;
* web2 está parado por que la política de reinicio es apagar cuando se termine de ejecutar un comando&lt;br /&gt;
* web 3 está parado por que el comando ha terminado con un salida correcta&lt;br /&gt;
&lt;br /&gt;
Vamos a comprobar ahora que en el servicio web está todo correcto:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker exec -ti web ash&lt;br /&gt;
echo $USERNAME&lt;br /&gt;
ls /volumen&lt;br /&gt;
exit&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podemos comprobar que tanto cambiar la variable de entorno como crear un&lt;br /&gt;
volumen ha funcionado correctamente.&lt;br /&gt;
&lt;br /&gt;
== Paso 13.3: Parar docker-compose ==&lt;br /&gt;
&lt;br /&gt;
Para parar todos los servicios:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker-compose down&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Comprobamos:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker ps -a&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vemos que han desaparecido todos los contenedores.&lt;br /&gt;
&lt;br /&gt;
= Paso 14: Ejercicios =&lt;br /&gt;
&lt;br /&gt;
== Ejercicio 1: Variante de httpd ==&lt;br /&gt;
&lt;br /&gt;
 Construya una imagen ''httpd-hola-mundo'' a partir de la imagen ''httpd''. El fichero de index.html de la carpeta htdocs/ tiene que mostrar el mensaje &amp;quot;hola mundo&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker pull httpd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Edita el fichero Dockerfile:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
nano Dockerfile&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Añada este contenido:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
FROM httpd&lt;br /&gt;
&lt;br /&gt;
COPY index.html htdocs/index.html&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Edita el fichero index.html:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
nano index.html&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Añada este contenido:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;hola mundo&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Construye la imagen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker build -t mihttpd -f Dockerfile .&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ahora vamos a crear un contenedor de nuestra imagen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo docker run --name mihttpd -d -p 8080:80 mihttpd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ahora vamos a probar que funciona nuestra imagen y nuestro código:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
curl -X GET http://localhost:8080&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tiene que salir por pantalla esto:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;hola mundo&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Ejercicio 2: aplicación flask ==&lt;br /&gt;
&lt;br /&gt;
Flask es un framework python para implementar webs. Cree una imagen &amp;quot;miapp-flask&amp;quot; a partir de la imagen de &amp;quot;python&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
* Instale flask mediante: pip install flask&lt;br /&gt;
* Cree la carpeta &amp;quot;app&amp;quot;&lt;br /&gt;
* Establezca la variable FLASK_APP a &amp;quot;hello.py&amp;quot;&lt;br /&gt;
* Añada el fichero &amp;quot;hello.py&amp;quot;&lt;br /&gt;
* Establezca el directorio de trabajo a &amp;quot;/app&amp;quot;&lt;br /&gt;
&lt;br /&gt;
El fichero hello.py contiene un &amp;quot;hola mundo&amp;quot; para Flask:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
from flask import Flask&lt;br /&gt;
app = Flask(__name__)&lt;br /&gt;
&lt;br /&gt;
@app.route(&amp;quot;/&amp;quot;)&lt;br /&gt;
def hello():&lt;br /&gt;
    return &amp;quot;Hello World!&amp;quot;&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    app.run()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Solución con alpine:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
FROM python:alpine&lt;br /&gt;
&lt;br /&gt;
RUN mkdir /app&lt;br /&gt;
RUN pip install flask&lt;br /&gt;
ENV FLASK_APP=&amp;quot;app/hello.py&amp;quot;&lt;br /&gt;
COPY hello.py&lt;br /&gt;
WORKDIR /&lt;br /&gt;
CMD flask run --host=0.0.0.0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Solución con Ubuntu:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
FROM ubuntu:bionic&lt;br /&gt;
&lt;br /&gt;
RUN apt-get update&lt;br /&gt;
RUN apt-get -y install python python-pip wget&lt;br /&gt;
RUN pip install Flask&lt;br /&gt;
ENV FLASK_APP=&amp;quot;app/hello.py&amp;quot;&lt;br /&gt;
RUN mkdir /app&lt;br /&gt;
COPY hello.py /app&lt;br /&gt;
CMD flask run --host=0.0.0.0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Ejercicio 3: mysql ==&lt;br /&gt;
&lt;br /&gt;
EN LA MÁQUINA VIRTUAL:&lt;br /&gt;
&lt;br /&gt;
mkdir miapp&lt;br /&gt;
cd miapp&lt;br /&gt;
&lt;br /&gt;
sudo docker pull mysql&lt;br /&gt;
&lt;br /&gt;
nano Dockerfile&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
FROM mysql&lt;br /&gt;
ENV MYSQL_ROOT_PASSWORD=&amp;quot;lacontraseñaqueyoquiera&amp;quot;&lt;br /&gt;
RUN mkdir /app&lt;br /&gt;
WORKDIR /app&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
CTRL+O , ENTER Y CTRL+X (para guardar Dockerfile y salir)&lt;br /&gt;
&lt;br /&gt;
sudo docker build -ti mrfdocker -f Dockerfile .&lt;br /&gt;
&lt;br /&gt;
sudo docker run --name mymrf --rm -p 8001:3306 mrfdocker&lt;br /&gt;
&lt;br /&gt;
sudo docker images&lt;br /&gt;
&lt;br /&gt;
EN LA TERMINAL DEL HOST:&lt;br /&gt;
&lt;br /&gt;
Instalación de mysql:&lt;br /&gt;
&lt;br /&gt;
sudo apt install mysql-client-core-5.7&lt;br /&gt;
&lt;br /&gt;
&amp;gt; sudo apt-get install mysql-server&lt;br /&gt;
&lt;br /&gt;
&amp;gt; sudo service mysql start&lt;br /&gt;
&lt;br /&gt;
Para entrar:&lt;br /&gt;
&lt;br /&gt;
sudo mysql -u root -p -P 8001&lt;br /&gt;
&lt;br /&gt;
Una vez dentro de msql:&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; show databases;&lt;br /&gt;
&lt;br /&gt;
Para salir: exit&lt;/div&gt;</summary>
		<author><name>Marramfer12</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Ssh&amp;diff=4604</id>
		<title>Ssh</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Ssh&amp;diff=4604"/>
				<updated>2019-11-30T11:18:42Z</updated>
		
		<summary type="html">&lt;p&gt;Marramfer12: /* SSH, SECURE SHELL */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== SSH, SECURE SHELL ==&lt;br /&gt;
&lt;br /&gt;
SSH (Secure Shell), es un '''protocolo de administración remota''' que facilita las comunicaciones seguras entre dos sistemas usando una arquitectura cliente/servidor. Permite a los usuarios conectarse, controlar y modificar sus servidores remotos, directamente desde la ventana del terminal ( Linux o MacOs ) mediante un mecanismo de autenticación. En cambio, los usuarios de Windows deben usar los clientes SSH como Putty.&lt;br /&gt;
&lt;br /&gt;
El servicio utiliza técnicas criptográficas para garantizar que todas las comunicaciones realizadas, hacia y desde el servidor remoto, estén encriptadas.&lt;br /&gt;
Es muy práctico ya que puedes ejecutar comandos shell como si estuvieras operando físicamente el equipo remoto. Se puede realizar prácticamente cualquier tarea, especialmente si se trata de un servidor remoto Linux que es compatible 100% con los comandos de SSH y es mucho más manejable que un sistema Windows a través de un terminal CMD.&lt;br /&gt;
&lt;br /&gt;
Primero hay que '''instalar el paquete openssh-server''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install openssh-server&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para '''conectarnos al servidor SSH''' debemos escribir en nuestro terminal el siguiente comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    ssh usuario@[IP]:[puerto]        &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Como podemos observar, el comando SHH, consta de tres partes:  ssh {user}@{host}&lt;br /&gt;
&lt;br /&gt;
* {user} representa la cuenta a la que deseas acceder.&lt;br /&gt;
* {host} hace referencia al equipo al que quieres acceder ( puede ser una dirección IP o un nombre de dominio &amp;lt;www.mrf.com&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Una vez introducida la contraseña el cliente SSH se conectará al servidor y nos cambiará tanto el usuario como el dominio de nuestro terminal.&lt;br /&gt;
Al pulsar enter, se te pedirá que escribas la contraseña de la cuenta solicitada. Una vez introducida y mandada mediante Enter, se estará transmitiendo. Si la contraseña es correcta, verás una ventana de terminal remota.&lt;br /&gt;
&lt;br /&gt;
Para '''cerrar la conexión''' debemos teclear:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
exit&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Archivo:ShhN.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Para saber la IP de nuestra virtualización :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ip address&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Si no tenemos IP forzamos la obtención mediante:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo dhclient ens3&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Importante poner '''sudo''' delante del comando.&lt;/div&gt;</summary>
		<author><name>Marramfer12</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Archivo:ShhN.jpg&amp;diff=4603</id>
		<title>Archivo:ShhN.jpg</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Archivo:ShhN.jpg&amp;diff=4603"/>
				<updated>2019-11-30T11:18:02Z</updated>
		
		<summary type="html">&lt;p&gt;Marramfer12: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Marramfer12</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Ssh&amp;diff=4602</id>
		<title>Ssh</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Ssh&amp;diff=4602"/>
				<updated>2019-11-30T10:42:51Z</updated>
		
		<summary type="html">&lt;p&gt;Marramfer12: /* SSH, SECURE SHELL */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== SSH, SECURE SHELL ==&lt;br /&gt;
&lt;br /&gt;
SSH (Secure Shell), es un '''protocolo de administración remota''' que facilita las comunicaciones seguras entre dos sistemas usando una arquitectura cliente/servidor. Permite a los usuarios conectarse, controlar y modificar sus servidores remotos, directamente desde la ventana del terminal ( Linux o MacOs ) mediante un mecanismo de autenticación. En cambio, los usuarios de Windows deben usar los clientes SSH como Putty.&lt;br /&gt;
&lt;br /&gt;
El servicio utiliza técnicas criptográficas para garantizar que todas las comunicaciones realizadas, hacia y desde el servidor remoto, estén encriptadas.&lt;br /&gt;
Es muy práctico ya que puedes ejecutar comandos shell como si estuvieras operando físicamente el equipo remoto. Se puede realizar prácticamente cualquier tarea, especialmente si se trata de un servidor remoto Linux que es compatible 100% con los comandos de SSH y es mucho más manejable que un sistema Windows a través de un terminal CMD.&lt;br /&gt;
&lt;br /&gt;
Primero hay que '''instalar el paquete openssh-server''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install openssh-server&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para '''conectarnos al servidor SSH''' debemos escribir en nuestro terminal el siguiente comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    ssh usuario@[IP]:[puerto]        &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Como podemos observar, el comando SHH, consta de tres partes:  ssh {user}@{host}&lt;br /&gt;
&lt;br /&gt;
* {user} representa la cuenta a la que deseas acceder.&lt;br /&gt;
* {host} hace referencia al equipo al que quieres acceder ( puede ser una dirección IP o un nombre de dominio &amp;lt;www.mrf.com&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Una vez introducida la contraseña el cliente SSH se conectará al servidor y nos cambiará tanto el usuario como el dominio de nuestro terminal.&lt;br /&gt;
Al pulsar enter, se te pedirá que escribas la contraseña de la cuenta solicitada. Una vez introducida y mandada mediante Enter, se estará transmitiendo. Si la contraseña es correcta, verás una ventana de terminal remota.&lt;br /&gt;
&lt;br /&gt;
Para '''cerrar la conexión''' debemos teclear:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
exit&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Archivo:Shh_.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Para saber la IP de nuestra virtualización :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ip address&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Si no tenemos IP forzamos la obtención mediante:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo dhclient ens3&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Importante poner '''sudo''' delante del comando.&lt;/div&gt;</summary>
		<author><name>Marramfer12</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Ssh&amp;diff=4580</id>
		<title>Ssh</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Ssh&amp;diff=4580"/>
				<updated>2019-11-17T11:20:30Z</updated>
		
		<summary type="html">&lt;p&gt;Marramfer12: /* SSH, SECURE SHELL */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== SSH, SECURE SHELL ==&lt;br /&gt;
&lt;br /&gt;
SSH (Secure Shell), es un '''protocolo de administración remota''' que facilita las comunicaciones seguras entre dos sistemas usando una arquitectura cliente/servidor. Permite a los usuarios conectarse, controlar y modificar sus servidores remotos, directamente desde la ventana del terminal ( Linux o MacOs ) mediante un mecanismo de autenticación. En cambio, los usuarios de Windows deben usar los clientes SSH como Putty.&lt;br /&gt;
&lt;br /&gt;
El servicio utiliza técnicas criptográficas para garantizar que todas las comunicaciones realizadas, hacia y desde el servidor remoto, estén encriptadas.&lt;br /&gt;
Es muy práctico ya que puedes ejecutar comandos shell como si estuvieras operando físicamente el equipo remoto. Se puede realizar prácticamente cualquier tarea, especialmente si se trata de un servidor remoto Linux que es compatible 100% con los comandos de SSH y es mucho más manejable que un sistema Windows a través de un terminal CMD.&lt;br /&gt;
&lt;br /&gt;
Primero hay que '''instalar el paquete openssh-server''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install openssh-server&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para '''conectarnos al servidor SSH''' debemos escribir en nuestro terminal el siguiente comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    ssh usuario@[IP]:[puerto]        &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Como podemos observar, el comando SHH, consta de tres partes:  ssh {user}@{host}&lt;br /&gt;
&lt;br /&gt;
* {user} representa la cuenta a la que deseas acceder.&lt;br /&gt;
* {host} hace referencia al equipo al que quieres acceder ( puede ser una dirección IP o un nombre de dominio &amp;lt;www.mrf.com&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Una vez introducida la contraseña el cliente SSH se conectará al servidor y nos cambiará tanto el usuario como el dominio de nuestro terminal.&lt;br /&gt;
Al pulsar enter, se te pedirá que escribas la contraseña de la cuenta solicitada. Una vez introducida y mandada mediante Enter, se estará transmitiendo. Si la contraseña es correcta, verás una ventana de terminal remota.&lt;br /&gt;
&lt;br /&gt;
Para '''cerrar la conexión''' debemos teclear:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
exit&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Archivo:Shh_.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Para saber la IP de nuestra virtualización :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo dhclient ens3&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Importante poner '''sudo''' delante del comando.&lt;/div&gt;</summary>
		<author><name>Marramfer12</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Administraci%C3%B3n_b%C3%A1sica&amp;diff=4579</id>
		<title>Administración básica</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Administraci%C3%B3n_b%C3%A1sica&amp;diff=4579"/>
				<updated>2019-11-17T11:19:41Z</updated>
		
		<summary type="html">&lt;p&gt;Marramfer12: /* Paso 9: Administración remota con ssh */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Para realizar esta práctica utilizaremos una de las máquinas virtuales que generamos en la práctica anterior.&lt;br /&gt;
&lt;br /&gt;
En esta práctica aprenderemos a utilizar el interprete de ordenes (también conocido como ''[https://www.traficantes.net/sites/default/files/pdfs/En%20el%20principio%20fue...-TdS.pdf línea de comandos]'') y a aprender nociones básicas de administración de sistemas Linux.&lt;br /&gt;
&lt;br /&gt;
= Paso 0: Breve introducción al sistema Linux =&lt;br /&gt;
&lt;br /&gt;
== Estructura básica del sistema de archivos ==&lt;br /&gt;
&lt;br /&gt;
En un sistema Linux, todas las carpetas y ficheros en el sistema de fichero pende de la carpeta raíz que se representa con la /.&lt;br /&gt;
&lt;br /&gt;
 /&lt;br /&gt;
 ├── bin&lt;br /&gt;
 ├── usr&lt;br /&gt;
 │   ├── local&lt;br /&gt;
 │   ├── bin&lt;br /&gt;
 │   └── ...&lt;br /&gt;
 ├── dev&lt;br /&gt;
 │   ├── sda&lt;br /&gt;
 │   ├── sda1&lt;br /&gt;
 │   └── ...&lt;br /&gt;
 ├── home&lt;br /&gt;
 │   ├── practica&lt;br /&gt;
 │   │   ├── tema1.pdf&lt;br /&gt;
 │   │   ├── boletin1.pdf&lt;br /&gt;
 │   │   └── ...&lt;br /&gt;
 │   ├── profesor&lt;br /&gt;
 │   └── ...&lt;br /&gt;
 └── etc&lt;br /&gt;
     ├── firefox&lt;br /&gt;
     ├── libvirt&lt;br /&gt;
     ├── ...&lt;br /&gt;
     └── ...&lt;br /&gt;
&lt;br /&gt;
Como puedes observar, el sistema de fichero emplea una estructura de árbol.&lt;br /&gt;
&lt;br /&gt;
== Nociones básicas ==&lt;br /&gt;
&lt;br /&gt;
·Aplicaciones con nombres compuestos: usar guion entre palabras&lt;br /&gt;
&lt;br /&gt;
·Nombres con espacios en blanco: Escribir entre comillas dobles&lt;br /&gt;
&lt;br /&gt;
·Espacios en blanco para separar ordenes (ej: instalar varios paquetes )&lt;br /&gt;
&lt;br /&gt;
·Formato general de una orden: comando [-opciones] [argumentos]&lt;br /&gt;
&lt;br /&gt;
·'''IMPORTANTE''': Diferencia entre mayúsculas y minúsculas&lt;br /&gt;
&lt;br /&gt;
== Carpetas . y .. ==&lt;br /&gt;
&lt;br /&gt;
Toda carpeta en un sistema Linux dispone de dos pseudocarpetas, la '''.''' y la '''..'':&lt;br /&gt;
&lt;br /&gt;
* La pseudocarpeta '''..''' hace referencia a la carpeta padre que contiene a esta carpeta.&lt;br /&gt;
* La pseudocarpeta '''.''' hace referencia a la carpeta actual, es por tanto una autoreferencia.&lt;br /&gt;
&lt;br /&gt;
En el caso de la carpeta raíz, la pseudocarpeta '''.''' y '''..''' hacen referencia a la propia carpeta raíz, se trata, por tanto de una excepción.&lt;br /&gt;
&lt;br /&gt;
== Directorio de trabajo actual y la orden cd ==&lt;br /&gt;
&lt;br /&gt;
Cada interprete de ordenes dispone de una ''carpeta de trabajo actual'' ('''c'''urrent '''w''orking '''d''irectory, en inglés). La carpeta de trabajo actual se puede modificar con la orden '''cd''' ('''c'''hange '''d'''irectory, en inglés).&lt;br /&gt;
&lt;br /&gt;
Por ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ cd ..&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nos situaría en la carpeta padre, empleando una ruta relativa.&lt;br /&gt;
&lt;br /&gt;
Si volvemos a escribir desde /home &amp;quot; cd .. &amp;quot; nos lleva a '''/$''' &lt;br /&gt;
&lt;br /&gt;
Para situarnos en el raíz, podemos emplear una ruta absoluta:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ cd /&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En caso de que queramos volver a la carpeta de usuario, bastaría con invocar a '''cd''' sin más o ''' cd ~ '''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ cd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''MUY IMPORTANTE''': No es lo mismo cd.. que ''' cd .. ''', es necesario el espacio después del cd.&lt;br /&gt;
&lt;br /&gt;
== Rutas absolutas, rutas relativas ==&lt;br /&gt;
&lt;br /&gt;
Para hacer referencia a un fichero o una carpeta se usan ruta absolutas o rutas relativas.&lt;br /&gt;
&lt;br /&gt;
Las rutas absolutas siempre empieza por /, de manera que toman como punto de referencia la carpeta raíz (/). Por ejemplo, una ruta absoluta a la carpeta '''prueba''' que está almacenada en la carpeta del usuario '''ubuntu''' es '/home/ubuntu/prueba/'.&lt;br /&gt;
&lt;br /&gt;
Las ruta relativa toma como referencia la carpeta de trabajo actual. Para averiguar la carpeta de trabajo actual disponemos de la orden '''pwd'''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ pwd&lt;br /&gt;
/home/ubuntu&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En base a la carpeta de trabajo actual, empleando la pseudocarpeta '''..''', se puede construir rutas relativas. Por ejemplo, para referenciar un fichero '''fichero.txt''' en la carpeta temporal, podemos emplear la ruta relativa '''../../tmp/fichero.txt'''.&lt;br /&gt;
&lt;br /&gt;
Aunque probablemente sea más cómodo emplear una ruta absoluta en este caso, que sería '''/tmp/fichero.txt'''.&lt;br /&gt;
&lt;br /&gt;
== Intérprete de órdenes ==&lt;br /&gt;
&lt;br /&gt;
El intérprete de órdenes es un lanzador de aplicaciones textual que emplea el teclado como dispositivo de entrada de datos. Mediante el teclado, se escribe el nombre del programa que se quiere lanzar y al pulsa la tecla ''intro'' el intérprete de ordenes ejecutara dicho programa. Por defecto, el intérprete de ordenes que emplea Ubuntu por defecto es '''bash'''.&lt;br /&gt;
&lt;br /&gt;
== man: ver la página de manual de una orden ==&lt;br /&gt;
&lt;br /&gt;
La orden '''man''' te será útil para ver las páginas de manual.&lt;br /&gt;
&lt;br /&gt;
Su estructura básica es:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
man &amp;lt;comando&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aunque también se utiliza con la opción ''' -a ''' de All, que también muestra las entradas comenzadas por '''.''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
man -a &amp;lt;comando&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Este programa toma como entrada el nombre de la orden de la que quieres consultar su página de manual, por ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
man ls&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nos da información del manual de la orden '''ls'''.&lt;br /&gt;
&lt;br /&gt;
Para salir de la página de manual, pulsa la tecla '''q''' (la primera letra de la palabra '''quit''', en inglés).&lt;br /&gt;
&lt;br /&gt;
quit = salir&lt;br /&gt;
&lt;br /&gt;
Normalmente, los programas ofrecen opciones de ayuda, como '''--help'''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
man --help&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
También se puede emplear la versión compacta a la hora de especificar opciones.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
man -h&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En general, todas las ordenes suelen ofrecer una opción de ayuda.&lt;br /&gt;
&lt;br /&gt;
= Paso 1: Operaciones básicas con el sistema de ficheros =&lt;br /&gt;
&lt;br /&gt;
== ls ==&lt;br /&gt;
&lt;br /&gt;
Lista los ficheros y carpetas. Si no se especifica nada, muestra los ficheros y carpetas que contiene la carpeta de trabajo actual.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Si se especifica una ruta, muestra las carpetas y ficheros contenidos en dicha ruta, por ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ ls /&lt;br /&gt;
bin  boot  data  dev  etc  home  initrd.img  initrd.img.old  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  snap  srv  sys  tmp  usr  var  vmlinuz  vmlinuz.old&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al emplear '''/''' como ruta absoluta, muestra el contenido de la carpeta raíz.&lt;br /&gt;
&lt;br /&gt;
Las opciones más usadas de este programa suelen ser:&lt;br /&gt;
&lt;br /&gt;
* -a: muestra los ficheros y carpetas ''ocultos''. En Linux, cualquier fichero o carpeta cuyo nombre empiece por . se considera ''oculto''. Esto incluye también en el listado las pseudocarpetas . y ..&lt;br /&gt;
&lt;br /&gt;
* -l: se muestra en lista y aporta datos como la fecha de última modificación, propietario, grupo, tamaño en bytes y nombre:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ ls -a&lt;br /&gt;
&lt;br /&gt;
.  ..  .bash_history  .bash_logout  .bashrc  .profile  .ssh&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ambas opciones se puede combinar:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ ls -la /&lt;br /&gt;
&lt;br /&gt;
total 92&lt;br /&gt;
drwxr-xr-x  24 root root  4096 Aug 28 09:50 .&lt;br /&gt;
drwxr-xr-x  24 root root  4096 Aug 28 09:50 ..&lt;br /&gt;
drwxr-xr-x   2 root root  4096 Aug 22 12:37 bin&lt;br /&gt;
drwxr-xr-x   4 root root  4096 Aug 22 12:37 boot&lt;br /&gt;
drwx------   3 root root  4096 Aug 28 09:50 data&lt;br /&gt;
drwxr-xr-x  18 root root  3780 Aug 28 09:46 dev&lt;br /&gt;
[...]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Otras opciones útiles son:&lt;br /&gt;
&lt;br /&gt;
* -s : muestra el tamaño en bloques de cada archivo&lt;br /&gt;
&lt;br /&gt;
* -t : aporta el día y la hora de modificación&lt;br /&gt;
&lt;br /&gt;
* -R : lista también las subcarpetas &lt;br /&gt;
&lt;br /&gt;
* --color : muestra el contenido coloreado&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Los '''permisos''' se emplean en base a tres capacidades:&lt;br /&gt;
&lt;br /&gt;
* Lectura, que se codifica con '''r''' (read, en inglés).&lt;br /&gt;
* Escritura, que se codifica con '''w''' (write, en inglés).&lt;br /&gt;
* Ejecutación, que se codifica con '''x''' (execute, en inglés).&lt;br /&gt;
&lt;br /&gt;
La primera columna muestra los permisos que codifican:&lt;br /&gt;
&lt;br /&gt;
* Tipo de entrada: '''d''' indica ''directorio'' (''carpeta'').&lt;br /&gt;
* Permisos del propietario, primera terna de rwx&lt;br /&gt;
* Permisos del grupo, segunda terna de rwx&lt;br /&gt;
* Permisos para el resto del mundo, tercera terna de rwx.&lt;br /&gt;
&lt;br /&gt;
A continuación, aparecen el propietario y el grupo, seguidos de la fecha de última modificación y el nombre del fichero o carpeta.&lt;br /&gt;
&lt;br /&gt;
La ayuda ( help ) en ls solo funciona con ''' ls --help ''' no con ls -h&lt;br /&gt;
&lt;br /&gt;
== mkdir ==&lt;br /&gt;
&lt;br /&gt;
Crea un nuevo directorio.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ mkdir test&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Crea una carpeta test en el directorio actual.&lt;br /&gt;
&lt;br /&gt;
Comprobemos que se ha creado bien:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ ls&lt;br /&gt;
test&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Con la opción '''-p''', permite crear sucesivas carpetas anidadas de una sola vez, por ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ mkdir -p a/b/c&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Que crea la siguiente estructura de carpetas.&lt;br /&gt;
&lt;br /&gt;
 a&lt;br /&gt;
 └── b&lt;br /&gt;
     └── c&lt;br /&gt;
&lt;br /&gt;
== touch ==&lt;br /&gt;
&lt;br /&gt;
Crea un nuevo fichero vacío (sin contenido) con el nombre que especifiquemos.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ touch file.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Comprobamos que el fichero se ha creado correctamente.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ ls&lt;br /&gt;
file.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== cp ==&lt;br /&gt;
&lt;br /&gt;
Copia un fichero o directorio.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ cp file.txt file_copy.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para copiar una carpeta y su contenido tenemos que usar la opción -r (recursivo).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ cp -r test test_copy&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Comprobamos el resultado con la orden '''ls'''.&lt;br /&gt;
&lt;br /&gt;
* Si nos encontramos en la carpeta destino, la estructura sería la siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ cp &amp;lt;nombre ruta origen&amp;gt; &amp;lt;nombre archivo&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== mv ==&lt;br /&gt;
&lt;br /&gt;
Mueve fichero o carpeta.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mv file_copy.txt file2.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
También se emplea para renombrar.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mv test_copy test_copy2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== rm ==&lt;br /&gt;
&lt;br /&gt;
* Borra un fichero o carpeta vacía:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rm &amp;lt;nombre&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Para borrar una carpeta no vacía y su contenido:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rm -r &amp;lt;nombre&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''IMPORTANTE''': No hacer jamás ''' rm -r * '''&lt;br /&gt;
&lt;br /&gt;
* EJERCICIOS:&lt;br /&gt;
&lt;br /&gt;
# Crear la siguiente estructura dentro del directorio /tmp (usar los comandos mkdir, touch y cp):&lt;br /&gt;
&lt;br /&gt;
 /tmp&lt;br /&gt;
 ├── carpeta1&lt;br /&gt;
 ├── carpeta2&lt;br /&gt;
 │   ├── fichero1.txt&lt;br /&gt;
 │   └── fichero2.md&lt;br /&gt;
 └── carpeta3&lt;br /&gt;
     ├── fichero1.txt&lt;br /&gt;
     └── fichero2.md&lt;br /&gt;
&lt;br /&gt;
# Basándonos en el ejercicio anterior, cambiar la estructura a la siguiente (usar comandos mv y rm):&lt;br /&gt;
&lt;br /&gt;
 /tmp&lt;br /&gt;
 └── carpeta&lt;br /&gt;
     ├── fichero1.txt&lt;br /&gt;
     └── fichero2.md&lt;br /&gt;
&lt;br /&gt;
= Paso 2: Impresión por pantalla y redirección de salida =&lt;br /&gt;
&lt;br /&gt;
== echo ==&lt;br /&gt;
&lt;br /&gt;
Sirve para imprimir una línea de texto por pantalla o variables de entorno. Además, nos permite escribir en ficheros.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo &amp;lt;opción&amp;gt; &amp;lt;texto&amp;gt; &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Opciones curiosas: &lt;br /&gt;
&lt;br /&gt;
-e &amp;lt;PALABRA \bPALABRA&amp;gt;   Se eliminan los espacios entre las palabras&lt;br /&gt;
&lt;br /&gt;
-e &amp;lt;PALABRA \nPALABRA&amp;gt;	 Se añaden saltos de línea&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Una variable de entorno es una variable editada con algún valor, por defecto existen algunas creadas, como por ejemplo la variable HOME, que contiene el directorio del usuario:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo $HOME&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aprovecharemos y crearemos una variable nosotros:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ME=&amp;quot;my name&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Comprobamos:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo $ME&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Redirección de salida ==&lt;br /&gt;
&lt;br /&gt;
&amp;gt; y &amp;gt;&amp;gt; sirve para redirigir una salida. Por ejemplo, utilizando el comando echo,&lt;br /&gt;
podemos enviar un texto dentro de un fichero:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo &amp;quot;Esto es una prueba&amp;quot; &amp;gt; file.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La diferencia entre &amp;gt; y &amp;gt;&amp;gt; es que &amp;gt; sobrescribe lo que haya en el fichero y&lt;br /&gt;
añade el contenido, y &amp;gt;&amp;gt; no sobrescribe, solo añade el nuevo contenido.&lt;br /&gt;
&lt;br /&gt;
Hagamos la prueba:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo &amp;quot;Esto es una prueba&amp;quot; &amp;gt; file.txt&lt;br /&gt;
echo &amp;quot;Esto es una prueba2&amp;quot; &amp;gt; file.txt&lt;br /&gt;
echo &amp;quot;Esto es una prueba&amp;quot; &amp;gt;&amp;gt; file2.txt&lt;br /&gt;
echo &amp;quot;Esto es una prueba2&amp;quot; &amp;gt;&amp;gt; file2.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En cualquier caso, si el fichero no existe, se crea.&lt;br /&gt;
&lt;br /&gt;
= Paso 3: Manejo de ficheros y carpetas avanzado =&lt;br /&gt;
&lt;br /&gt;
== cat ==&lt;br /&gt;
&lt;br /&gt;
* Muestra el contenido de un fichero:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat file.txt&lt;br /&gt;
cat &amp;lt;fichero1&amp;gt; &amp;lt;fichero2&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Crea un fichero:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat &amp;gt;&amp;lt;nombre archivo&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
GUARDAR FICHERO: Pulsamos ENTER y luego CTRL + D&lt;br /&gt;
&lt;br /&gt;
* Añadir más lineas al fichero: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat &amp;gt;&amp;gt;&amp;lt;nombre fichero&amp;gt; &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Concatenar ficheros:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat &amp;lt;fichero1&amp;gt; &amp;lt;fichero2&amp;gt; &amp;gt; &amp;lt;fichero3&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Editar ficheros:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat&lt;br /&gt;
&lt;br /&gt;
hola&lt;br /&gt;
que pasa&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; &amp;lt;fichero4&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== grep ==&lt;br /&gt;
&lt;br /&gt;
Sirve para localizar coincidencias de un cierto patrón en ficheros y muestra la coincidencia, en caso de encontrarla, por pantalla.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
grep &amp;lt;opción&amp;gt; &amp;lt;patrón&amp;gt; &amp;lt;archivos donde buscar&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Por ejemplo, para buscar el patrón ''prueba'' en el fichero ''fichero.txt''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ grep -n prueba fichero.txt&lt;br /&gt;
1:Esto es una prueba&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Principales opciones del comando:&lt;br /&gt;
&lt;br /&gt;
-c : Escribe el número de líneas encontradas.&lt;br /&gt;
&lt;br /&gt;
-i : No distingue entre mayúsculas y minúsculas.&lt;br /&gt;
&lt;br /&gt;
-l : Muestra los nombres de los ficheros que contienen los caracteres buscados.&lt;br /&gt;
&lt;br /&gt;
-n : Cada línea es precedida por su número en el fichero.&lt;br /&gt;
&lt;br /&gt;
-s : No se muestran los mensajes que indican que no se puede abrir un fichero.&lt;br /&gt;
&lt;br /&gt;
-v : Muestra sólo las líneas que no cumplen la condición.&lt;br /&gt;
&lt;br /&gt;
== wc ==&lt;br /&gt;
&lt;br /&gt;
Sirve para contar el número de palabras, caracteres, líneas o bytes que contiene un fichero.&lt;br /&gt;
&lt;br /&gt;
Las opciones más utilizadas son:&lt;br /&gt;
&lt;br /&gt;
* -l: muestra el número de líneas que contiene el fichero.&lt;br /&gt;
* -w: muestra el número de palabras.&lt;br /&gt;
* -m: muestra el número de caracteres&lt;br /&gt;
* -c: muestra el número de bytes&lt;br /&gt;
&lt;br /&gt;
Probemos y contemos todo en el fichero file2.txt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
wc -l file2.txt&lt;br /&gt;
wc -w file2.txt&lt;br /&gt;
wc -m file2.txt&lt;br /&gt;
wc -c file2.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podemos contar más de un fichero a la vez:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
wc -l file.txt file2.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nos mostrará el conteo de cada fichero y el total.&lt;br /&gt;
&lt;br /&gt;
== Tubería (|) ==&lt;br /&gt;
&lt;br /&gt;
La tubería nos servirá para conectar varios comandos al mismo tiempo, veamos&lt;br /&gt;
unos ejemplos, que siempre se entiende mejor:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat file2.txt | grep prueba&lt;br /&gt;
grep -nr prueba file2.txt | wc -l&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En el primer ejemplo, mostramos el contenido de file2.txt, y esta salida se la&lt;br /&gt;
pasamos al comando grep, el cual busca las líneas que contengan prueba.&lt;br /&gt;
&lt;br /&gt;
En el segundo, buscamos todas las líneas que contengan la palabra prueba, y esta&lt;br /&gt;
salida se la pasamos al comando wc, el cual cuenta las líneas de la salida del&lt;br /&gt;
comando grep.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Redirecciones ==&lt;br /&gt;
&lt;br /&gt;
Vamos a ver unos conceptos antes de seguir:&lt;br /&gt;
&lt;br /&gt;
* Entrada estándar: representa los datos que necesita una aplicación para funcionar, como por ejemplo un archivo de datos o información ingresada desde la terminal y es representado en la terminal como el tipo 0.&lt;br /&gt;
* Salida estándar: es la vía que utilizan las aplicaciones para mostrarte información, allí podemos ver el progreso o simplemente los mensajes que la  aplicación quiera darte en determinado momento y es representado en la terminal como el tipo 1.&lt;br /&gt;
* Error estándar: es la forma en que los programas te informan sobre los problemas que pueden encontrarse al momento de la ejecución y es representado en la terminal como el tipo 2.&lt;br /&gt;
&lt;br /&gt;
Las redirecciones nos sirven para mover la información de un tipo a otro.&lt;br /&gt;
&lt;br /&gt;
Ya vimos previamente el uso de &amp;gt; y &amp;gt;&amp;gt;, y también el |, veamos algunas más:&lt;br /&gt;
&lt;br /&gt;
* comando &amp;lt; fichero: Toma la entrada de fichero&lt;br /&gt;
* comando 2&amp;gt; fichero: Envía la salida de error de comando a fichero&lt;br /&gt;
* comando 2&amp;gt;&amp;amp;1: Envía la salida de error a la salida estándar&lt;br /&gt;
* comando &amp;amp;&amp;gt; fichero: Envía la salida estándar y de error a fichero; equivale a comando &amp;gt; fichero 2&amp;gt;&amp;amp;1&lt;br /&gt;
&lt;br /&gt;
= Paso 4: Usuarios y grupos =&lt;br /&gt;
&lt;br /&gt;
== whoami ==&lt;br /&gt;
&lt;br /&gt;
Sirve para obtener el usuario actual.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
whoami&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Lo más seguro es que nos aparezca ubuntu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== who ==&lt;br /&gt;
&lt;br /&gt;
Es para saber quien está ahora mismo en la máquina conectado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
who&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Seguramente solo estemos nosotros:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ubuntu   pts/0        2019-08-28 13:51 (192.168.122.1)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== su y sudo ==&lt;br /&gt;
&lt;br /&gt;
su (substitute user): sirve para cambiar de usuario. Por ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
su root&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aquí nos pedirá la contraseña del usuario al que queramos cambiar.&lt;br /&gt;
&lt;br /&gt;
sudo (super user do): no todas las distribuciones lo integran, porque es menos&lt;br /&gt;
seguro que su, este comando nos permite ejecutar un comando siendo otro usuario,&lt;br /&gt;
por defecto, si no le damos usuario, lo hará con el usuario root. Si sudo nos&lt;br /&gt;
pide contraseña, nos pide la contraseña del usuario, ya que el usuario es que el&lt;br /&gt;
tiene permisos para usar sudo o no.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo ls -a /root&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Si tuviéramos por ejemplo un usuario 'practica' y quisíeramos ejecutar un&lt;br /&gt;
comando en su nombre:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo -u practica ls&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== adduser y useradd ==&lt;br /&gt;
&lt;br /&gt;
Ambos comandos sirven para crear un nuevo usuario, pero tienen sus diferencias.&lt;br /&gt;
&lt;br /&gt;
useradd es un comando del sistema, y adduser es un script escrito en perl que&lt;br /&gt;
utiliza el comando useradd. La diferencia así de primeras es que adduser nos&lt;br /&gt;
crear el directorio /home/usuario y useradd necesita la opción -m para hacer lo&lt;br /&gt;
mismo. Se puede utilizar el que se quiera, aunque es más recomendable useradd,&lt;br /&gt;
ya que funcionará igual en todas las distribuciones.&lt;br /&gt;
&lt;br /&gt;
Vamos a añadir un usuario practica con su directorio en /home (notemos que&lt;br /&gt;
necesitamos permisos de super usuario para realizar esta tarea):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo useradd -m practica&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vamos a comprobar que el directorio home está creado y que el usuario practica&lt;br /&gt;
funciona:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls /home  # veremos el directorio practica&lt;br /&gt;
sudo -u practica whoami  # nos dirá que somo el usuario practica&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== passwd ==&lt;br /&gt;
&lt;br /&gt;
Sirve para modificar la contraseña de un usuario, por ejemplo, vamos a modificar&lt;br /&gt;
la contraseña del usuario que hemos creado previamente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo passwd practica&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nos preguntará dos veces la contraseña, y ya la tendremos actualizadas. Vamos&lt;br /&gt;
ahora a probar ahora el comando su para cambiar de usuario:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
su practica&lt;br /&gt;
whoami&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Veremos que hemos cambiado de usuario, para cerrar este usuario, escribimos&lt;br /&gt;
'exit' o pulsamos 'CTLR + D'&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== deluser y userdel ==&lt;br /&gt;
&lt;br /&gt;
Ambos sirven para borrar un usuario, similar a adduser y useradd, userdel es el&lt;br /&gt;
comando y deluser el script.&lt;br /&gt;
&lt;br /&gt;
Vamos a borrar el usuario que hemos creado, incluyendo el borrado de su /home&lt;br /&gt;
(opción -r):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
userdel -r practica&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Comprobemos que ya no tenemos usuario ni /home:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls /home&lt;br /&gt;
sudo -u practica whoami&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== addgroup y groupadd ==&lt;br /&gt;
&lt;br /&gt;
Ambos sirven para crear un grupo. Los grupos sirven para agrupar a los usuarios&lt;br /&gt;
y que estos tengan unos mismos permisos. Por ejemplo, cuando instalamos algunas&lt;br /&gt;
herramientas como por ejemplo docker, este crea el grupo docker automáticamente&lt;br /&gt;
para que fácilmente podamos añadir a un usuario al grupo, y este tenga los&lt;br /&gt;
permisos para trabajar con dicha herramienta.&lt;br /&gt;
&lt;br /&gt;
Vamos a crear un nuevo grupo, vamos a llamarle invitado:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo groupadd invitado&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== usermod y groups ==&lt;br /&gt;
&lt;br /&gt;
usermod es utilizado para asignar un grupo a un usuario.&lt;br /&gt;
&lt;br /&gt;
groups es utilizado para ver los grupos a los que pertenece un usuario.&lt;br /&gt;
&lt;br /&gt;
Vamos a añadir a un usuario practica, lo vamos a añadir al grupo invitado y&lt;br /&gt;
veremos los grupos a los que pertenece:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo useradd -m practica&lt;br /&gt;
sudo usermod -G invitado practica&lt;br /&gt;
groups practica&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Veremos que el usuario práctica pertenece al grupo invitado.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== delgroup y groupdel ==&lt;br /&gt;
&lt;br /&gt;
Ambos sirven para eliminar un grupo. Vamos a eliminar el grupo que hemos creado&lt;br /&gt;
anteriormente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo groupdel invitado&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podemos observar ahora que el usuario practica no pertenece al grupo invitado:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
groups practica&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Paso 5: Permisos =&lt;br /&gt;
&lt;br /&gt;
== Nomenclatura rwx y numérica ==&lt;br /&gt;
&lt;br /&gt;
Si hacemos un ls -l, la primera cadena que nos aparece son los permisos del&lt;br /&gt;
fichero (-rwxrw-r--), podemos dividirlo en 4 elementos:&lt;br /&gt;
&lt;br /&gt;
-    (rwx)   (rw-)  (r--)&lt;br /&gt;
|      |       |      |&lt;br /&gt;
type  owner   group  others&lt;br /&gt;
&lt;br /&gt;
* type: el tipo de fichero, pudiendo ser d (directorio), l (enlace simbólico), - (fichero normal)&lt;br /&gt;
* owner: permisos de propietario&lt;br /&gt;
* group: permisos de grupo&lt;br /&gt;
* others: permisos para los demás usuarios&lt;br /&gt;
&lt;br /&gt;
Significado de los permisos:&lt;br /&gt;
&lt;br /&gt;
* r: permisos de lectura&lt;br /&gt;
* w: permisos de escritura&lt;br /&gt;
* x: permisos de ejecución&lt;br /&gt;
&lt;br /&gt;
Por último, existe un modo abreviado para estos permisos que se utiliza con&lt;br /&gt;
números.&lt;br /&gt;
&lt;br /&gt;
rwx&lt;br /&gt;
001 en binario es 1 en decimal. Permisos de ejecución&lt;br /&gt;
010 en binario es 2 en decimal. Permisos de escritura&lt;br /&gt;
100 en binario es 4 en decimal. Permisos de lectura&lt;br /&gt;
&lt;br /&gt;
La suma de los permisos, nos da el valor numérico. Veamos un ejemplo:&lt;br /&gt;
rwx rw- r--&lt;br /&gt;
111 110 100&lt;br /&gt;
 7   6   4&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== chmod ==&lt;br /&gt;
&lt;br /&gt;
Permite cambiar los permisos de acceso a un fichero o directorio. Podemos dar&lt;br /&gt;
permisos de dos formas diferentes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== modo carácter ===&lt;br /&gt;
&lt;br /&gt;
Veamos primero unos detalles:&lt;br /&gt;
&lt;br /&gt;
Clases de usuario:&lt;br /&gt;
&lt;br /&gt;
* owner (u)&lt;br /&gt;
* group (g)&lt;br /&gt;
* others (o)&lt;br /&gt;
* all (a)&lt;br /&gt;
&lt;br /&gt;
Modificador:&lt;br /&gt;
&lt;br /&gt;
* añadir (+)&lt;br /&gt;
* eliminar (-)&lt;br /&gt;
* sobrescribir (=)&lt;br /&gt;
&lt;br /&gt;
Para dar permisos tendríamos que seleccionar la clase de usuario el modificador&lt;br /&gt;
y los permisos, veamos un ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chmod u+x file  # añadimos permisos de ejecución al usuario&lt;br /&gt;
chmod go-w file  # quitamos permisos de escritura al grupo y a otros usuarios&lt;br /&gt;
chmod u=rwx,go=r file  # Al usuario le damos todos los permisos, y al grupo y otros solo le damos permisos de lectura&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Modo octal ===&lt;br /&gt;
&lt;br /&gt;
Con el modo octacl, es como si siempre utilizáramos el modificar sobrescribir,&lt;br /&gt;
pongamos algunos ejemplos:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chmod 744 file  # Al usuario le damos todos los permisos, y al grupo y otros solo le damos permisos de lectura&lt;br /&gt;
chmod 777 file  # Todos tienen permisos para todo&lt;br /&gt;
chmod 600 file  # solo el propietario tiene permisos de lectura y escritura&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Ejemplos ===&lt;br /&gt;
&lt;br /&gt;
Vamos a ver como funciona el tema de permisos con unos ejemplos. Vamos a crear&lt;br /&gt;
un fichero pruebas y le vamos a quitar los permisos de escritura a nuestro&lt;br /&gt;
usuario, y le vamos a dar permisos de escritura a otros:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
touch pruebas&lt;br /&gt;
ls -l pruebas  # de esta forma veremos que por defecto los permisos son rw-rw-r--&lt;br /&gt;
chmod u-w,o+w pruebas&lt;br /&gt;
ls -l pruebas  # ahora los permisos deberían ser -w-rw-rw-&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Una vez dado los permisos, veamos que con nuestro usuario podemos leer pero no&lt;br /&gt;
escribir:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat pruebas&lt;br /&gt;
echo &amp;quot;probando&amp;quot; &amp;gt; pruebas&lt;br /&gt;
exit&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Y ahora vamos a ver que el usuario pruebas, puede leer y escribir:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
su practica&lt;br /&gt;
cat pruebas&lt;br /&gt;
echo &amp;quot;probando&amp;quot; &amp;gt; pruebas&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== chown ==&lt;br /&gt;
&lt;br /&gt;
Permite cambiar el propietario de un fichero o directorio.&lt;br /&gt;
&lt;br /&gt;
Vamos por ejemplo a pasarle ahora el fichero pruebas al usuario practica:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo chown practica pruebas&lt;br /&gt;
ls -l pruebas&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Veremos que el usuario actual ahora es pruebas, aunque vemos que el ls muestra&lt;br /&gt;
lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
-r--rw-rw- 1 practica ubuntu 9 Aug 29 09:34 pruebas&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hay que comentar un detalle, y es que los ficheros y directorios tienen asignado&lt;br /&gt;
un usuario y un grupo, por defecto se utiliza el mismo usuario como grupo&lt;br /&gt;
cuando creamos un nuevo fichero o directorio. Si queremos que cuando cambiemos&lt;br /&gt;
el propietario, cambiar tambien el grupo del fichero, podemos hacerlo de la&lt;br /&gt;
siguiente forma:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo chown practica:practica pruebas&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Una vez hecho esto, vamos ahora a probar que los permisos siguen funcionando&lt;br /&gt;
como antes, ahora con el usuario ubuntu, deberíamos de poder leer y escribir en&lt;br /&gt;
el fichero pruebas, y con el usuario practica, solo leer, esto es así por que&lt;br /&gt;
ahora el propitario es practica:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Pruebas usuario ubuntu&lt;br /&gt;
cat pruebas&lt;br /&gt;
echo test &amp;gt;&amp;gt; pruebas&lt;br /&gt;
# Pruebas usuario practica&lt;br /&gt;
su practica&lt;br /&gt;
cat pruebas&lt;br /&gt;
echo &amp;quot;probando&amp;quot; &amp;gt; pruebas&lt;br /&gt;
exit&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Paso 6: Procesos =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== ps ==&lt;br /&gt;
&lt;br /&gt;
Sirve para ver que procesos están ejecutándose en el sistema, veamos un ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ps aux  # con la opción aux mostraremos todos los procesos del sistema&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cada línea es un proceso, y cada proceso muestra su PID, usuario, cantidad de&lt;br /&gt;
memoria y cpu utilizada, comando y otros detalles.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
man kill &amp;amp;  # añadir el &amp;amp; al final de un comando hace que este se ejecute en segundo plano, por lo que se quedará abierto&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La salida de este comando nos mostrará el PID que tiene ese proceso que acabamos&lt;br /&gt;
de ejecutar, vamos a comprobarlo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ps aux | grep &amp;quot;man kill&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Veremos que el PID coincide.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== kill ==&lt;br /&gt;
&lt;br /&gt;
Este comando nos servirá para matar un proceso. kill se utiliza seguido de una&lt;br /&gt;
señal para enviar al proceso seguido de uno o varios PID. para ver las señales&lt;br /&gt;
disponibles, podemos listarlas:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kill -l&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Las más utilizadas suele ser SIGTERM y SIGKILL, la primera intenta terminar el&lt;br /&gt;
proceso de forma poco abrupta, y la segunda suele utilizarse cuando el proceso&lt;br /&gt;
no atiende a esta primera señal. Vamos ahora a terminar el proceso que creamos&lt;br /&gt;
antes, si no recordamos el PID, busquémoslo de nuevo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ps aux | grep &amp;quot;man kill&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enviamos señal para terminar el proceso y comprobamos que ha terminado:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kill -SIGTERM 8470&lt;br /&gt;
ps aux | grep &amp;quot;man kill&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
También podemos notar que en el listado de señales, hay unos números, podemos&lt;br /&gt;
utilizar esos números en vez de las palabras, por ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
man kill &amp;amp;&lt;br /&gt;
kill -15 PID_COMANDO_PREVIO&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Comprobamos que el proceso ha terminado correctamente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ps aux | grep &amp;quot;man kill&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Paso 7: Estado CPU, RAM y Disco =&lt;br /&gt;
&lt;br /&gt;
== top ==&lt;br /&gt;
&lt;br /&gt;
Este comando nos servirá para ver el listado de procesos y el estado de la CPU y&lt;br /&gt;
memoria.&lt;br /&gt;
&lt;br /&gt;
Probemos el comando y observemos detalladamente la salida:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
top&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para salir, pulsamos q.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== df y du ==&lt;br /&gt;
&lt;br /&gt;
df (disk free) y du (disk usage). Ambas son utilidades para mostrar el uso de&lt;br /&gt;
los discos.&lt;br /&gt;
&lt;br /&gt;
Con df mostraremos la información del espacio en cada dispositivo montado:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
df&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Estos comandos que nos muestran el tamaño de los ficheros, casi siempre tienen&lt;br /&gt;
una opción para mostrarlo en un formato más legible (-h)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
df -h&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mucho mejor.&lt;br /&gt;
&lt;br /&gt;
Ahora veamos el comando du, el cual nos mostrará el tamaño de un fichero o&lt;br /&gt;
directorio y sus subdirectorios, no olvidemos el -h:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
du -h /home/ubuntu&lt;br /&gt;
du -h /home/ubuntu/pruebas&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Si solo quisíeramos saber el total de una carpeta y nos nos interesan sus&lt;br /&gt;
subcarpetas, podemos utilizar la opción -s:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
du -sh /home/ubuntu&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== free ==&lt;br /&gt;
&lt;br /&gt;
Sirve para ver el estado de la memoria, como siempre, opción -h:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
free -h&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== lsblk ==&lt;br /&gt;
&lt;br /&gt;
Nos muestra la información de todos los dispositivos de bloques (discos duros,&lt;br /&gt;
pendrivers, CD_ROM, SSD, ...).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lsblk&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En la siguiente práctica se utilizará más a fondo este comando, ya que&lt;br /&gt;
trabajaremos con dispositivos.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Paso 8: Gestión de paquetes de software y repositorios =&lt;br /&gt;
&lt;br /&gt;
Los sistemas Linux incluyen, además de las herramientas básicas del sistema operativo, repositorios de software que puede ser opcionalmente instalados por el administrador del sistema. Los fabricantes de las distribuciones de Linux incluyen paquetes de software listos para ser instalados que se integran con el sistema.&lt;br /&gt;
&lt;br /&gt;
Un paquete incluye el software necesario para que una cierta aplicación funcione correctamente, así como sus paquetes de dependencia.&lt;br /&gt;
&lt;br /&gt;
En Ubuntu, la herramienta de gestión de paquetes de software y repositorios se llama '''apt'''.&lt;br /&gt;
&lt;br /&gt;
=== Listado de repositorios de paquetes de software ===&lt;br /&gt;
&lt;br /&gt;
En Ubuntu el listado de repositorios se encuentra en el fichero /etc/apt/sources.list. Podemos comprobar que repositorios tenemos añadido:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat /etc/apt/sources.list&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Actualización del listado de paquetes de software ===&lt;br /&gt;
&lt;br /&gt;
Para actualizar el listado de paquetes utilizaremos el comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt update&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Instalación un nuevo paquete ===&lt;br /&gt;
&lt;br /&gt;
Para instalar un nuevo paquete, utilizaremos la orden install, por ejemplo, vamos a instalar tree, similar al ls pero muestra el arbol de directorios:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt install tree&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Desinstalación de un paquete ===&lt;br /&gt;
&lt;br /&gt;
Usaremos la orden purge o la orden remove, purge nos lo eliminad todo, y remove mantiene la configuración en el caso de que el paquete la tuviese. Vamos a eliminar el paquete instalado previamente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt purge tree&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Paso 9: Administración remota con ssh =&lt;br /&gt;
&lt;br /&gt;
''ssh'' (Secure SHell) permite administrar de manera remota un sistema desde el intérprete de órdenes. Para poder acceder a la máquina virtual por medio de ''[[ssh]]'', hay que instalar el paquete ''openssh-server''.&lt;br /&gt;
&lt;br /&gt;
 sudo apt-get install openssh-server&lt;br /&gt;
&lt;br /&gt;
Una vez instalado, tenemos que consultar la dirección IP de la máquina virtual&lt;br /&gt;
&lt;br /&gt;
 ip address&lt;br /&gt;
&lt;br /&gt;
Desde el hipervisor podemos acceder por ''ssh'' a la máquina virtual con la orden:&lt;br /&gt;
&lt;br /&gt;
 ssh usuario@ip&lt;br /&gt;
&lt;br /&gt;
Siendo ''usuario'' el nombre de usuario con el que accedes a la máquina virtual y la dirección ''ip'' que nos muestra la orden ''ip address''.&lt;br /&gt;
&lt;br /&gt;
Por ejemplo, si el usuario seleccionado es ''ubuntu'' y la IP es 192.168.122.123, entonces la invocación a ''ssh'' es la siguiente:&lt;br /&gt;
&lt;br /&gt;
 ssh ubuntu@192.168.122.123&lt;br /&gt;
&lt;br /&gt;
= Paso 10: Módulos =&lt;br /&gt;
&lt;br /&gt;
Los módulos del kernel de Linux son partes que podemos añadir o quitar de forma&lt;br /&gt;
sencilla con el fin de añadir o quitar funcionalidad. Por ejemplo, algunas de&lt;br /&gt;
estas funcionalidades son:&lt;br /&gt;
&lt;br /&gt;
* Registrar temperaturas de nuestros componentes&lt;br /&gt;
* Hacer funcionr la tarjeta de red wifi&lt;br /&gt;
* Cargar los drivers de una tarjeta gráfica&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== lsmod ==&lt;br /&gt;
&lt;br /&gt;
Comando para ver los módulos que estamos usando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lsmod&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== lspci y usb-devices ==&lt;br /&gt;
&lt;br /&gt;
Estos comandos nos servirán para ver el hardware que está conectado a nuestro&lt;br /&gt;
ordenador. Con lspci veremos el listado del hardware integrado y con usb-devices&lt;br /&gt;
el que está conectado por hardware.&lt;br /&gt;
&lt;br /&gt;
Normalmente, como los módulos se utilizan para dar funcionalidad un hardware,&lt;br /&gt;
aquí en los listado de hardware podremos ver que módulo está utilizando cada&lt;br /&gt;
hardware:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lspci -v&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Veremos una línea en algunos dispositivos que nos diga que módulo estamos&lt;br /&gt;
usando, pongo un pequeño trozo de la salida del comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
00:1f.2 SATA controller: Intel Corporation 82801IR/IO/IH (ICH9R/DO/DH) 6 port SATA Controller [AHCI mode] (rev 02) (prog-if 01 [AHCI 1.0])&lt;br /&gt;
    Subsystem: Red Hat, Inc. QEMU Virtual Machine&lt;br /&gt;
    Flags: bus master, fast devsel, latency 0, IRQ 35&lt;br /&gt;
    I/O ports at c0c0 [size=32]&lt;br /&gt;
    Memory at fcc1d000 (32-bit, non-prefetchable) [size=4K]&lt;br /&gt;
    Capabilities: &amp;lt;access denied&amp;gt;&lt;br /&gt;
    Kernel driver in use: ahci&lt;br /&gt;
    Kernel modules: ahci&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vemos que el hardware INTEl Corporation está utilizando el módulo ahci.&lt;br /&gt;
&lt;br /&gt;
Probemos ahora con usb-devices:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
usb-devices&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Veamos un trozo de código:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
T:  Bus=01 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#=  2 Spd=480 MxCh= 0&lt;br /&gt;
D:  Ver= 2.00 Cls=00(&amp;gt;ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs=  1&lt;br /&gt;
P:  Vendor=0627 ProdID=0001 Rev=00.00&lt;br /&gt;
S:  Manufacturer=QEMU&lt;br /&gt;
S:  Product=QEMU USB Tablet&lt;br /&gt;
S:  SerialNumber=42&lt;br /&gt;
C:  #Ifs= 1 Cfg#= 1 Atr=a0 MxPwr=100mA&lt;br /&gt;
I:  If#= 0 Alt= 0 #EPs= 1 Cls=03(HID  ) Sub=00 Prot=00 Driver=usbhid&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vemos que el teclado está utilizando el módulo usbhid&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== insmod ==&lt;br /&gt;
&lt;br /&gt;
Sirve para cargar un módulo en el kernel, imaginemos que tenemos un módulo que&lt;br /&gt;
se llama modulo1:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo insmod modulo1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== rmmod ==&lt;br /&gt;
&lt;br /&gt;
Sirve para eliminar un módulo de kernel. Imaginemos que queremos borrar un&lt;br /&gt;
módulo cargado anteriormente con el nombre modulo1:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo rmmod modulo1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Ejercicios =&lt;br /&gt;
&lt;br /&gt;
# Cree un fichero vacio llamado 123.txt&lt;br /&gt;
# Añada al fichero las siguientes tres lineas:&lt;br /&gt;
&lt;br /&gt;
        Hola mundo&lt;br /&gt;
        Probando 1 2 3&lt;br /&gt;
        Adios&lt;br /&gt;
&lt;br /&gt;
# Añada una linea más al fichero con el siguiente contenido:&lt;br /&gt;
&lt;br /&gt;
        Prueba&lt;br /&gt;
&lt;br /&gt;
# Renombre el fichero 123.txt a 456.txt&lt;br /&gt;
# Haga una copia del fichero 456.txt al fichero 789.txt&lt;br /&gt;
# Cree la carpeta xyz&lt;br /&gt;
# Mueva el fichero 789.txt a la carpeta xyz&lt;br /&gt;
# Mueva el fichero 456.txt al temporal&lt;br /&gt;
# Borre el fichero 456.txt&lt;br /&gt;
# Compruebe si el fichero 789.txt contiene la palabra “mundo”&lt;br /&gt;
# Borre la carpeta xyz y su contenido&lt;br /&gt;
# Liste el contenido de la carpeta temporal mostrando los permisos asociados a los ficheros y carpetas, almacene el resultado en el fichero temporal.txt&lt;br /&gt;
# Cree la carpeta ‘x’ y dentro de ella, la carpeta ‘y’&lt;br /&gt;
# Mueva el fichero temporal.txt dentro de la carpeta ‘y’&lt;br /&gt;
# Cuente el número de ficheros y directorios en la carpeta tmp&lt;/div&gt;</summary>
		<author><name>Marramfer12</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Ssh&amp;diff=4578</id>
		<title>Ssh</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Ssh&amp;diff=4578"/>
				<updated>2019-11-17T11:17:33Z</updated>
		
		<summary type="html">&lt;p&gt;Marramfer12: /* SSH, SECURE SHELL */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== SSH, SECURE SHELL ==&lt;br /&gt;
&lt;br /&gt;
SSH (Secure Shell), es un '''protocolo de administración remota''' que facilita las comunicaciones seguras entre dos sistemas usando una arquitectura cliente/servidor. Permite a los usuarios conectarse, controlar y modificar sus servidores remotos, directamente desde la ventana del terminal ( Linux o MacOs ) mediante un mecanismo de autenticación. En cambio, los usuarios de Windows deben usar los clientes SSH como Putty.&lt;br /&gt;
&lt;br /&gt;
El servicio utiliza técnicas criptográficas para garantizar que todas las comunicaciones realizadas, hacia y desde el servidor remoto, estén encriptadas.&lt;br /&gt;
Es muy práctico ya que puedes ejecutar comandos shell como si estuvieras operando físicamente el equipo remoto. Se puede realizar prácticamente cualquier tarea, especialmente si se trata de un servidor remoto Linux que es compatible 100% con los comandos de SSH y es mucho más manejable que un sistema Windows a través de un terminal CMD.&lt;br /&gt;
&lt;br /&gt;
Primero hay que instalar el paquete openssh-server:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install openssh-server&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para '''conectarnos al servidor SSH''' debemos escribir en nuestro terminal el siguiente comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    ssh usuario@[IP]:[puerto]        &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Como podemos observar, el comando SHH, consta de tres partes:  ssh {user}@{host}&lt;br /&gt;
&lt;br /&gt;
* {user} representa la cuenta a la que deseas acceder.&lt;br /&gt;
* {host} hace referencia al equipo al que quieres acceder ( puede ser una dirección IP o un nombre de dominio &amp;lt;www.mrf.com&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Una vez introducida la contraseña el cliente SSH se conectará al servidor y nos cambiará tanto el usuario como el dominio de nuestro terminal.&lt;br /&gt;
Al pulsar enter, se te pedirá que escribas la contraseña de la cuenta solicitada. Una vez introducida y mandada mediante Enter, se estará transmitiendo. Si la contraseña es correcta, verás una ventana de terminal remota.&lt;br /&gt;
&lt;br /&gt;
Para '''cerrar la conexión''' debemos teclear:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
exit&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Archivo:Shh_.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Para saber la IP de nuestra virtualización :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo dhclient ens3&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Importante poner '''sudo''' delante del comando.&lt;/div&gt;</summary>
		<author><name>Marramfer12</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Ssh&amp;diff=4577</id>
		<title>Ssh</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Ssh&amp;diff=4577"/>
				<updated>2019-11-17T10:11:20Z</updated>
		
		<summary type="html">&lt;p&gt;Marramfer12: /* SSH, SECURE SHELL */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== SSH, SECURE SHELL ==&lt;br /&gt;
&lt;br /&gt;
SSH (Secure Shell), es un '''protocolo de administración remota''' que facilita las comunicaciones seguras entre dos sistemas usando una arquitectura cliente/servidor. Permite a los usuarios conectarse, controlar y modificar sus servidores remotos, directamente desde la ventana del terminal ( Linux o MacOs ) mediante un mecanismo de autenticación. En cambio, los usuarios de Windows deben usar los clientes SSH como Putty.&lt;br /&gt;
&lt;br /&gt;
El servicio utiliza técnicas criptográficas para garantizar que todas las comunicaciones realizadas, hacia y desde el servidor remoto, estén encriptadas.&lt;br /&gt;
Es muy práctico ya que puedes ejecutar comandos shell como si estuvieras operando físicamente el equipo remoto. Se puede realizar prácticamente cualquier tarea, especialmente si se trata de un servidor remoto Linux que es compatible 100% con los comandos de SSH y es mucho más manejable que un sistema Windows a través de un terminal CMD.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Para '''conectarnos al servidor SSH''' debemos escribir en nuestro terminal el siguiente comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    ssh usuario@[IP]:[puerto]        &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Como podemos observar, el comando SHH, consta de tres partes:  ssh {user}@{host}&lt;br /&gt;
&lt;br /&gt;
* {user} representa la cuenta a la que deseas acceder.&lt;br /&gt;
* {host} hace referencia al equipo al que quieres acceder ( puede ser una dirección IP o un nombre de dominio &amp;lt;www.mrf.com&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Una vez introducida la contraseña el cliente SSH se conectará al servidor y nos cambiará tanto el usuario como el dominio de nuestro terminal.&lt;br /&gt;
Al pulsar enter, se te pedirá que escribas la contraseña de la cuenta solicitada. Una vez introducida y mandada mediante Enter, se estará transmitiendo. Si la contraseña es correcta, verás una ventana de terminal remota.&lt;br /&gt;
&lt;br /&gt;
Para '''cerrar la conexión''' debemos teclear:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
exit&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Archivo:Shh_.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Para saber la IP de nuestra virtualización :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo dhclient ens3&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Importante poner '''sudo''' delante del comando.&lt;/div&gt;</summary>
		<author><name>Marramfer12</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Ssh&amp;diff=4576</id>
		<title>Ssh</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Ssh&amp;diff=4576"/>
				<updated>2019-11-17T10:08:08Z</updated>
		
		<summary type="html">&lt;p&gt;Marramfer12: /* SSH, SECURE SHELL */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== SSH, SECURE SHELL ==&lt;br /&gt;
&lt;br /&gt;
SSH (Secure Shell), es un '''protocolo de administración remota''' que facilita las comunicaciones seguras entre dos sistemas usando una arquitectura cliente/servidor. Permite a los usuarios conectarse, controlar y modificar sus servidores remotos, directamente desde la ventana del terminal ( Linux o MacOs ) mediante un mecanismo de autenticación. En cambio, los usuarios de Windows deben usar los clientes SSH como Putty.&lt;br /&gt;
&lt;br /&gt;
El servicio utiliza técnicas criptográficas para garantizar que todas las comunicaciones realizadas, hacia y desde el servidor remoto, estén encriptadas.&lt;br /&gt;
Es muy práctico ya que puedes ejecutar comandos shell como si estuvieras operando físicamente el equipo remoto. Se puede realizar prácticamente cualquier tarea, especialmente si se trata de un servidor remoto Linux que es compatible 100% con los comandos de SSH y es mucho más manejable que un sistema Windows a través de un terminal CMD.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Para '''conectarnos al servidor SSH''' debemos escribir en nuestro terminal el siguiente comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    ssh usuario@[IP]:[puerto]        &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Como podemos observar, el comando SHH, consta de tres partes:  ssh {user}@{host}&lt;br /&gt;
&lt;br /&gt;
* {user} representa la cuenta a la que deseas acceder.&lt;br /&gt;
* {host} hace referencia al equipo al que quieres acceder ( puede ser una dirección IP o un nombre de dominio &amp;lt;www.mrf.com&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Una vez introducida la contraseña el cliente SSH se conectará al servidor y nos cambiará tanto el usuario como el dominio de nuestro terminal.&lt;br /&gt;
Al pulsar enter, se te pedirá que escribas la contraseña de la cuenta solicitada. Una vez introducida y mandada mediante Enter, se estará transmitiendo. Si la contraseña es correcta, verás una ventana de terminal remota.&lt;br /&gt;
&lt;br /&gt;
Para '''cerrar la conexión''' debemos teclear:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
exit&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Archivo:Shh_.png]]&lt;/div&gt;</summary>
		<author><name>Marramfer12</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Archivo:Shh_.png&amp;diff=4575</id>
		<title>Archivo:Shh .png</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Archivo:Shh_.png&amp;diff=4575"/>
				<updated>2019-11-17T10:07:49Z</updated>
		
		<summary type="html">&lt;p&gt;Marramfer12: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Marramfer12</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Ssh&amp;diff=4574</id>
		<title>Ssh</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Ssh&amp;diff=4574"/>
				<updated>2019-11-17T09:33:10Z</updated>
		
		<summary type="html">&lt;p&gt;Marramfer12: /* SSH, SECURE SHELL */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== SSH, SECURE SHELL ==&lt;br /&gt;
&lt;br /&gt;
SSH (Secure Shell), es un '''protocolo de administración remota''' que facilita las comunicaciones seguras entre dos sistemas usando una arquitectura cliente/servidor. Permite a los usuarios conectarse, controlar y modificar sus servidores remotos, directamente desde la ventana del terminal ( Linux o MacOs ) mediante un mecanismo de autenticación. En cambio, los usuarios de Windows deben usar los clientes SSH como Putty.&lt;br /&gt;
&lt;br /&gt;
El servicio utiliza técnicas criptográficas para garantizar que todas las comunicaciones realizadas, hacia y desde el servidor remoto, estén encriptadas.&lt;br /&gt;
Es muy práctico ya que puedes ejecutar comandos shell como si estuvieras operando físicamente el equipo remoto. Se puede realizar prácticamente cualquier tarea, especialmente si se trata de un servidor remoto Linux que es compatible 100% con los comandos de SSH y es mucho más manejable que un sistema Windows a través de un terminal CMD.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Para '''conectarnos al servidor SSH''' debemos escribir en nuestro terminal el siguiente comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    ssh usuario@[IP]:[puerto]        &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Como podemos observar, el comando SHH, consta de tres partes:  ssh {user}@{host}&lt;br /&gt;
&lt;br /&gt;
* {user} representa la cuenta a la que deseas acceder.&lt;br /&gt;
* {host} hace referencia al equipo al que quieres acceder ( puede ser una dirección IP o un nombre de dominio &amp;lt;www.mrf.com&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Una vez introducida la contraseña el cliente SSH se conectará al servidor y nos cambiará tanto el usuario como el dominio de nuestro terminal.&lt;br /&gt;
Al pulsar enter, se te pedirá que escribas la contraseña de la cuenta solicitada. Una vez introducida y mandada mediante Enter, se estará transmitiendo. Si la contraseña es correcta, verás una ventana de terminal remota.&lt;br /&gt;
&lt;br /&gt;
Para '''cerrar la conexión''' debemos teclear:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
exit&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Marramfer12</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Ssh&amp;diff=4573</id>
		<title>Ssh</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Ssh&amp;diff=4573"/>
				<updated>2019-11-17T09:24:14Z</updated>
		
		<summary type="html">&lt;p&gt;Marramfer12: /* SSH, SECURE SHELL */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== SSH, SECURE SHELL ==&lt;br /&gt;
&lt;br /&gt;
SSH (Secure Shell), es un '''protocolo de administración remota''' que facilita las comunicaciones seguras entre dos sistemas usando una arquitectura cliente/servidor. Permite a los usuarios conectarse, controlar y modificar sus servidores remotos, directamente desde la ventana del terminal ( Linux o MacOs ) mediante un mecanismo de autenticación. En cambio, los usuarios de Windows deben usar los clientes SSH como Putty.&lt;br /&gt;
&lt;br /&gt;
El servicio utiliza técnicas criptográficas para garantizar que todas las comunicaciones realizadas, hacia y desde el servidor remoto, estén encriptadas.&lt;br /&gt;
Es muy práctico ya que puedes ejecutar comandos shell como si estuvieras operando físicamente el equipo remoto. Se puede realizar prácticamente cualquier tarea, especialmente si se trata de un servidor remoto Linux que es compatible 100% con los comandos de SSH y es mucho más manejable que un sistema Windows a través de un terminal CMD.&lt;br /&gt;
&lt;br /&gt;
Para '''conectarnos al servidor SSH''' debemos escribir en nuestro terminal el siguiente comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    ssh usuario@[IP]:[puerto]        &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Como podemos observar, el comando SHH, consta de tres partes:  ssh {user}@{host}&lt;br /&gt;
&lt;br /&gt;
* {user} representa la cuenta a la que deseas acceder.&lt;br /&gt;
* {host} hace referencia al equipo al que quieres acceder ( puede ser una dirección IP o un nombre de dominio &amp;lt;www.mrf.com&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Una vez introducida la contraseña el cliente SSH se conectará al servidor y nos cambiará tanto el usuario como el dominio de nuestro terminal.&lt;br /&gt;
Al pulsar enter, se te pedirá que escribas la contraseña de la cuenta solicitada. Una vez introducida y mandada mediante Enter, se estará transmitiendo. Si la contraseña es correcta, verás una ventana de terminal remota.&lt;br /&gt;
&lt;br /&gt;
Para '''cerrar la conexión''' debemos teclear:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
exit&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Marramfer12</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Ssh&amp;diff=4572</id>
		<title>Ssh</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Ssh&amp;diff=4572"/>
				<updated>2019-11-17T09:21:45Z</updated>
		
		<summary type="html">&lt;p&gt;Marramfer12: Protocolo SHH&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== SSH, SECURE SHELL ==&lt;br /&gt;
&lt;br /&gt;
SSH (Secure Shell), es un '''protocolo de administración remota''' que facilita las comunicaciones seguras entre dos sistemas usando una arquitectura cliente/servidor y que permite a los usuarios conectarse, controlar y modificar sus servidores remotos, directamente desde la ventana del terminal ( Linux o MacOs ) mediante un mecanismo de autenticación. En cambio, los usuarios de Windows deben usar los clientes SSH como Putty.&lt;br /&gt;
&lt;br /&gt;
El servicio utiliza técnicas criptográficas para garantizar que todas las comunicaciones realizadas hacia y desde el servidor remoto estén encriptadas.&lt;br /&gt;
Es muy práctico ya que puedes ejecutar comandos shell como si estuvieras operando físicamente el equipo remoto. Se puede realizar prácticamente cualquier tarea, especialmente si se trata de un servidor remoto Linux que es compatible 100% con los comandos de SSH y es mucho más manejable que un sistema Windows a través de un terminal CMD.&lt;br /&gt;
&lt;br /&gt;
Para '''conectarnos al servidor SSH''' debemos escribir en nuestro terminal el siguiente comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    ssh usuario@[IP]:[puerto]        &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Como podemos observar, el comando SHH, consta de tres partes:  ssh {user}@{host}&lt;br /&gt;
&lt;br /&gt;
* {user} representa la cuenta a la que deseas acceder.&lt;br /&gt;
* {host} hace referencia al equipo al que quieres acceder ( puede ser una dirección IP o un nombre de dominio &amp;lt;www.mrf.com&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Una vez introducida la contraseña el cliente SSH se conectará al servidor y nos cambiará tanto el usuario como el dominio de nuestro terminal.&lt;br /&gt;
Al pulsar enter, se te pedirá que escribas la contraseña de la cuenta solicitada. Una vez introducida y mandada mediante Enter, se estará transmitiendo. Si la contraseña es correcta, verás una ventana de terminal remota.&lt;br /&gt;
&lt;br /&gt;
Para '''cerrar la conexión''' debemos teclear:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
exit&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Marramfer12</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Administraci%C3%B3n_b%C3%A1sica&amp;diff=4560</id>
		<title>Administración básica</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Administraci%C3%B3n_b%C3%A1sica&amp;diff=4560"/>
				<updated>2019-11-13T14:59:34Z</updated>
		
		<summary type="html">&lt;p&gt;Marramfer12: /* cat */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Para realizar esta práctica utilizaremos una de las máquinas virtuales que generamos en la práctica anterior.&lt;br /&gt;
&lt;br /&gt;
En esta práctica aprenderemos a utilizar el interprete de ordenes (también conocido como ''[https://www.traficantes.net/sites/default/files/pdfs/En%20el%20principio%20fue...-TdS.pdf línea de comandos]'') y a aprender nociones básicas de administración de sistemas Linux.&lt;br /&gt;
&lt;br /&gt;
= Paso 0: Breve introducción al sistema Linux =&lt;br /&gt;
&lt;br /&gt;
== Estructura básica del sistema de archivos ==&lt;br /&gt;
&lt;br /&gt;
En un sistema Linux, todas las carpetas y ficheros en el sistema de fichero pende de la carpeta raíz que se representa con la /.&lt;br /&gt;
&lt;br /&gt;
 /&lt;br /&gt;
 ├── bin&lt;br /&gt;
 ├── usr&lt;br /&gt;
 │   ├── local&lt;br /&gt;
 │   ├── bin&lt;br /&gt;
 │   └── ...&lt;br /&gt;
 ├── dev&lt;br /&gt;
 │   ├── sda&lt;br /&gt;
 │   ├── sda1&lt;br /&gt;
 │   └── ...&lt;br /&gt;
 ├── home&lt;br /&gt;
 │   ├── practica&lt;br /&gt;
 │   │   ├── tema1.pdf&lt;br /&gt;
 │   │   ├── boletin1.pdf&lt;br /&gt;
 │   │   └── ...&lt;br /&gt;
 │   ├── profesor&lt;br /&gt;
 │   └── ...&lt;br /&gt;
 └── etc&lt;br /&gt;
     ├── firefox&lt;br /&gt;
     ├── libvirt&lt;br /&gt;
     ├── ...&lt;br /&gt;
     └── ...&lt;br /&gt;
&lt;br /&gt;
Como puedes observar, el sistema de fichero emplea una estructura de árbol.&lt;br /&gt;
&lt;br /&gt;
== Nociones básicas ==&lt;br /&gt;
&lt;br /&gt;
·Aplicaciones con nombres compuestos: usar guion entre palabras&lt;br /&gt;
&lt;br /&gt;
·Nombres con espacios en blanco: Escribir entre comillas dobles&lt;br /&gt;
&lt;br /&gt;
·Espacios en blanco para separar ordenes (ej: instalar varios paquetes )&lt;br /&gt;
&lt;br /&gt;
·Formato general de una orden: comando [-opciones] [argumentos]&lt;br /&gt;
&lt;br /&gt;
·'''IMPORTANTE''': Diferencia entre mayúsculas y minúsculas&lt;br /&gt;
&lt;br /&gt;
== Carpetas . y .. ==&lt;br /&gt;
&lt;br /&gt;
Toda carpeta en un sistema Linux dispone de dos pseudocarpetas, la '''.''' y la '''..'':&lt;br /&gt;
&lt;br /&gt;
* La pseudocarpeta '''..''' hace referencia a la carpeta padre que contiene a esta carpeta.&lt;br /&gt;
* La pseudocarpeta '''.''' hace referencia a la carpeta actual, es por tanto una autoreferencia.&lt;br /&gt;
&lt;br /&gt;
En el caso de la carpeta raíz, la pseudocarpeta '''.''' y '''..''' hacen referencia a la propia carpeta raíz, se trata, por tanto de una excepción.&lt;br /&gt;
&lt;br /&gt;
== Directorio de trabajo actual y la orden cd ==&lt;br /&gt;
&lt;br /&gt;
Cada interprete de ordenes dispone de una ''carpeta de trabajo actual'' ('''c'''urrent '''w''orking '''d''irectory, en inglés). La carpeta de trabajo actual se puede modificar con la orden '''cd''' ('''c'''hange '''d'''irectory, en inglés).&lt;br /&gt;
&lt;br /&gt;
Por ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ cd ..&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nos situaría en la carpeta padre, empleando una ruta relativa.&lt;br /&gt;
&lt;br /&gt;
Si volvemos a escribir desde /home &amp;quot; cd .. &amp;quot; nos lleva a '''/$''' &lt;br /&gt;
&lt;br /&gt;
Para situarnos en el raíz, podemos emplear una ruta absoluta:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ cd /&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En caso de que queramos volver a la carpeta de usuario, bastaría con invocar a '''cd''' sin más o ''' cd ~ '''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ cd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''MUY IMPORTANTE''': No es lo mismo cd.. que ''' cd .. ''', es necesario el espacio después del cd.&lt;br /&gt;
&lt;br /&gt;
== Rutas absolutas, rutas relativas ==&lt;br /&gt;
&lt;br /&gt;
Para hacer referencia a un fichero o una carpeta se usan ruta absolutas o rutas relativas.&lt;br /&gt;
&lt;br /&gt;
Las rutas absolutas siempre empieza por /, de manera que toman como punto de referencia la carpeta raíz (/). Por ejemplo, una ruta absoluta a la carpeta '''prueba''' que está almacenada en la carpeta del usuario '''ubuntu''' es '/home/ubuntu/prueba/'.&lt;br /&gt;
&lt;br /&gt;
Las ruta relativa toma como referencia la carpeta de trabajo actual. Para averiguar la carpeta de trabajo actual disponemos de la orden '''pwd'''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ pwd&lt;br /&gt;
/home/ubuntu&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En base a la carpeta de trabajo actual, empleando la pseudocarpeta '''..''', se puede construir rutas relativas. Por ejemplo, para referenciar un fichero '''fichero.txt''' en la carpeta temporal, podemos emplear la ruta relativa '''../../tmp/fichero.txt'''.&lt;br /&gt;
&lt;br /&gt;
Aunque probablemente sea más cómodo emplear una ruta absoluta en este caso, que sería '''/tmp/fichero.txt'''.&lt;br /&gt;
&lt;br /&gt;
== Intérprete de órdenes ==&lt;br /&gt;
&lt;br /&gt;
El intérprete de órdenes es un lanzador de aplicaciones textual que emplea el teclado como dispositivo de entrada de datos. Mediante el teclado, se escribe el nombre del programa que se quiere lanzar y al pulsa la tecla ''intro'' el intérprete de ordenes ejecutara dicho programa. Por defecto, el intérprete de ordenes que emplea Ubuntu por defecto es '''bash'''.&lt;br /&gt;
&lt;br /&gt;
== man: ver la página de manual de una orden ==&lt;br /&gt;
&lt;br /&gt;
La orden '''man''' te será útil para ver las páginas de manual.&lt;br /&gt;
&lt;br /&gt;
Su estructura básica es:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
man &amp;lt;comando&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aunque también se utiliza con la opción ''' -a ''' de All, que también muestra las entradas comenzadas por '''.''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
man -a &amp;lt;comando&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Este programa toma como entrada el nombre de la orden de la que quieres consultar su página de manual, por ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
man ls&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nos da información del manual de la orden '''ls'''.&lt;br /&gt;
&lt;br /&gt;
Para salir de la página de manual, pulsa la tecla '''q''' (la primera letra de la palabra '''quit''', en inglés).&lt;br /&gt;
&lt;br /&gt;
quit = salir&lt;br /&gt;
&lt;br /&gt;
Normalmente, los programas ofrecen opciones de ayuda, como '''--help'''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
man --help&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
También se puede emplear la versión compacta a la hora de especificar opciones.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
man -h&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En general, todas las ordenes suelen ofrecer una opción de ayuda.&lt;br /&gt;
&lt;br /&gt;
= Paso 1: Operaciones básicas con el sistema de ficheros =&lt;br /&gt;
&lt;br /&gt;
== ls ==&lt;br /&gt;
&lt;br /&gt;
Lista los ficheros y carpetas. Si no se especifica nada, muestra los ficheros y carpetas que contiene la carpeta de trabajo actual.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Si se especifica una ruta, muestra las carpetas y ficheros contenidos en dicha ruta, por ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ ls /&lt;br /&gt;
bin  boot  data  dev  etc  home  initrd.img  initrd.img.old  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  snap  srv  sys  tmp  usr  var  vmlinuz  vmlinuz.old&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al emplear '''/''' como ruta absoluta, muestra el contenido de la carpeta raíz.&lt;br /&gt;
&lt;br /&gt;
Las opciones más usadas de este programa suelen ser:&lt;br /&gt;
&lt;br /&gt;
* -a: muestra los ficheros y carpetas ''ocultos''. En Linux, cualquier fichero o carpeta cuyo nombre empiece por . se considera ''oculto''. Esto incluye también en el listado las pseudocarpetas . y ..&lt;br /&gt;
&lt;br /&gt;
* -l: se muestra en lista y aporta datos como la fecha de última modificación, propietario, grupo, tamaño en bytes y nombre:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ ls -a&lt;br /&gt;
&lt;br /&gt;
.  ..  .bash_history  .bash_logout  .bashrc  .profile  .ssh&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ambas opciones se puede combinar:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ ls -la /&lt;br /&gt;
&lt;br /&gt;
total 92&lt;br /&gt;
drwxr-xr-x  24 root root  4096 Aug 28 09:50 .&lt;br /&gt;
drwxr-xr-x  24 root root  4096 Aug 28 09:50 ..&lt;br /&gt;
drwxr-xr-x   2 root root  4096 Aug 22 12:37 bin&lt;br /&gt;
drwxr-xr-x   4 root root  4096 Aug 22 12:37 boot&lt;br /&gt;
drwx------   3 root root  4096 Aug 28 09:50 data&lt;br /&gt;
drwxr-xr-x  18 root root  3780 Aug 28 09:46 dev&lt;br /&gt;
[...]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Otras opciones útiles son:&lt;br /&gt;
&lt;br /&gt;
* -s : muestra el tamaño en bloques de cada archivo&lt;br /&gt;
&lt;br /&gt;
* -t : aporta el día y la hora de modificación&lt;br /&gt;
&lt;br /&gt;
* -R : lista también las subcarpetas &lt;br /&gt;
&lt;br /&gt;
* --color : muestra el contenido coloreado&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Los '''permisos''' se emplean en base a tres capacidades:&lt;br /&gt;
&lt;br /&gt;
* Lectura, que se codifica con '''r''' (read, en inglés).&lt;br /&gt;
* Escritura, que se codifica con '''w''' (write, en inglés).&lt;br /&gt;
* Ejecutación, que se codifica con '''x''' (execute, en inglés).&lt;br /&gt;
&lt;br /&gt;
La primera columna muestra los permisos que codifican:&lt;br /&gt;
&lt;br /&gt;
* Tipo de entrada: '''d''' indica ''directorio'' (''carpeta'').&lt;br /&gt;
* Permisos del propietario, primera terna de rwx&lt;br /&gt;
* Permisos del grupo, segunda terna de rwx&lt;br /&gt;
* Permisos para el resto del mundo, tercera terna de rwx.&lt;br /&gt;
&lt;br /&gt;
A continuación, aparecen el propietario y el grupo, seguidos de la fecha de última modificación y el nombre del fichero o carpeta.&lt;br /&gt;
&lt;br /&gt;
La ayuda ( help ) en ls solo funciona con ''' ls --help ''' no con ls -h&lt;br /&gt;
&lt;br /&gt;
== mkdir ==&lt;br /&gt;
&lt;br /&gt;
Crea un nuevo directorio.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ mkdir test&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Crea una carpeta test en el directorio actual.&lt;br /&gt;
&lt;br /&gt;
Comprobemos que se ha creado bien:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ ls&lt;br /&gt;
test&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Con la opción '''-p''', permite crear sucesivas carpetas anidadas de una sola vez, por ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ mkdir -p a/b/c&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Que crea la siguiente estructura de carpetas.&lt;br /&gt;
&lt;br /&gt;
 a&lt;br /&gt;
 └── b&lt;br /&gt;
     └── c&lt;br /&gt;
&lt;br /&gt;
== touch ==&lt;br /&gt;
&lt;br /&gt;
Crea un nuevo fichero vacío (sin contenido) con el nombre que especifiquemos.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ touch file.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Comprobamos que el fichero se ha creado correctamente.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ ls&lt;br /&gt;
file.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== cp ==&lt;br /&gt;
&lt;br /&gt;
Copia un fichero o directorio.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ cp file.txt file_copy.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para copiar una carpeta y su contenido tenemos que usar la opción -r (recursivo).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ cp -r test test_copy&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Comprobamos el resultado con la orden '''ls'''.&lt;br /&gt;
&lt;br /&gt;
* Si nos encontramos en la carpeta destino, la estructura sería la siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ cp &amp;lt;nombre ruta origen&amp;gt; &amp;lt;nombre archivo&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== mv ==&lt;br /&gt;
&lt;br /&gt;
Mueve fichero o carpeta.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mv file_copy.txt file2.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
También se emplea para renombrar.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mv test_copy test_copy2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== rm ==&lt;br /&gt;
&lt;br /&gt;
* Borra un fichero o carpeta vacía:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rm &amp;lt;nombre&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Para borrar una carpeta no vacía y su contenido:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rm -r &amp;lt;nombre&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''IMPORTANTE''': No hacer jamás ''' rm -r * '''&lt;br /&gt;
&lt;br /&gt;
* EJERCICIOS:&lt;br /&gt;
&lt;br /&gt;
# Crear la siguiente estructura dentro del directorio /tmp (usar los comandos mkdir, touch y cp):&lt;br /&gt;
&lt;br /&gt;
 /tmp&lt;br /&gt;
 ├── carpeta1&lt;br /&gt;
 ├── carpeta2&lt;br /&gt;
 │   ├── fichero1.txt&lt;br /&gt;
 │   └── fichero2.md&lt;br /&gt;
 └── carpeta3&lt;br /&gt;
     ├── fichero1.txt&lt;br /&gt;
     └── fichero2.md&lt;br /&gt;
&lt;br /&gt;
# Basándonos en el ejercicio anterior, cambiar la estructura a la siguiente (usar comandos mv y rm):&lt;br /&gt;
&lt;br /&gt;
 /tmp&lt;br /&gt;
 └── carpeta&lt;br /&gt;
     ├── fichero1.txt&lt;br /&gt;
     └── fichero2.md&lt;br /&gt;
&lt;br /&gt;
= Paso 2: Impresión por pantalla y redirección de salida =&lt;br /&gt;
&lt;br /&gt;
== echo ==&lt;br /&gt;
&lt;br /&gt;
Sirve para imprimir una línea de texto por pantalla o variables de entorno. Además, nos permite escribir en ficheros.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo &amp;lt;opción&amp;gt; &amp;lt;texto&amp;gt; &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Opciones curiosas: &lt;br /&gt;
&lt;br /&gt;
-e &amp;lt;PALABRA \bPALABRA&amp;gt;   Se eliminan los espacios entre las palabras&lt;br /&gt;
&lt;br /&gt;
-e &amp;lt;PALABRA \nPALABRA&amp;gt;	 Se añaden saltos de línea&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Una variable de entorno es una variable editada con algún valor, por defecto existen algunas creadas, como por ejemplo la variable HOME, que contiene el directorio del usuario:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo $HOME&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aprovecharemos y crearemos una variable nosotros:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ME=&amp;quot;my name&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Comprobamos:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo $ME&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Redirección de salida ==&lt;br /&gt;
&lt;br /&gt;
&amp;gt; y &amp;gt;&amp;gt; sirve para redirigir una salida. Por ejemplo, utilizando el comando echo,&lt;br /&gt;
podemos enviar un texto dentro de un fichero:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo &amp;quot;Esto es una prueba&amp;quot; &amp;gt; file.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La diferencia entre &amp;gt; y &amp;gt;&amp;gt; es que &amp;gt; sobrescribe lo que haya en el fichero y&lt;br /&gt;
añade el contenido, y &amp;gt;&amp;gt; no sobrescribe, solo añade el nuevo contenido.&lt;br /&gt;
&lt;br /&gt;
Hagamos la prueba:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo &amp;quot;Esto es una prueba&amp;quot; &amp;gt; file.txt&lt;br /&gt;
echo &amp;quot;Esto es una prueba2&amp;quot; &amp;gt; file.txt&lt;br /&gt;
echo &amp;quot;Esto es una prueba&amp;quot; &amp;gt;&amp;gt; file2.txt&lt;br /&gt;
echo &amp;quot;Esto es una prueba2&amp;quot; &amp;gt;&amp;gt; file2.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En cualquier caso, si el fichero no existe, se crea.&lt;br /&gt;
&lt;br /&gt;
= Paso 3: Manejo de ficheros y carpetas avanzado =&lt;br /&gt;
&lt;br /&gt;
== cat ==&lt;br /&gt;
&lt;br /&gt;
* Muestra el contenido de un fichero:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat file.txt&lt;br /&gt;
cat &amp;lt;fichero1&amp;gt; &amp;lt;fichero2&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Crea un fichero:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat &amp;gt;&amp;lt;nombre archivo&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
GUARDAR FICHERO: Pulsamos ENTER y luego CTRL + D&lt;br /&gt;
&lt;br /&gt;
* Añadir más lineas al fichero: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat &amp;gt;&amp;gt;&amp;lt;nombre fichero&amp;gt; &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Concatenar ficheros:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat &amp;lt;fichero1&amp;gt; &amp;lt;fichero2&amp;gt; &amp;gt; &amp;lt;fichero3&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Editar ficheros:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat&lt;br /&gt;
&lt;br /&gt;
hola&lt;br /&gt;
que pasa&lt;br /&gt;
&lt;br /&gt;
cat &amp;gt; &amp;lt;fichero4&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== grep ==&lt;br /&gt;
&lt;br /&gt;
Sirve para localizar coincidencias de un cierto patrón en ficheros y muestra la coincidencia, en caso de encontrarla, por pantalla.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
grep &amp;lt;opción&amp;gt; &amp;lt;patrón&amp;gt; &amp;lt;archivos donde buscar&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Por ejemplo, para buscar el patrón ''prueba'' en el fichero ''fichero.txt''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ grep -n prueba fichero.txt&lt;br /&gt;
1:Esto es una prueba&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Principales opciones del comando:&lt;br /&gt;
&lt;br /&gt;
-c : Escribe el número de líneas encontradas.&lt;br /&gt;
&lt;br /&gt;
-i : No distingue entre mayúsculas y minúsculas.&lt;br /&gt;
&lt;br /&gt;
-l : Muestra los nombres de los ficheros que contienen los caracteres buscados.&lt;br /&gt;
&lt;br /&gt;
-n : Cada línea es precedida por su número en el fichero.&lt;br /&gt;
&lt;br /&gt;
-s : No se muestran los mensajes que indican que no se puede abrir un fichero.&lt;br /&gt;
&lt;br /&gt;
-v : Muestra sólo las líneas que no cumplen la condición.&lt;br /&gt;
&lt;br /&gt;
== wc ==&lt;br /&gt;
&lt;br /&gt;
Sirve para contar el número de palabras, caracteres, líneas o bytes que contiene un fichero.&lt;br /&gt;
&lt;br /&gt;
Las opciones más utilizadas son:&lt;br /&gt;
&lt;br /&gt;
* -l: muestra el número de líneas que contiene el fichero.&lt;br /&gt;
* -w: muestra el número de palabras.&lt;br /&gt;
* -m: muestra el número de caracteres&lt;br /&gt;
* -c: muestra el número de bytes&lt;br /&gt;
&lt;br /&gt;
Probemos y contemos todo en el fichero file2.txt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
wc -l file2.txt&lt;br /&gt;
wc -w file2.txt&lt;br /&gt;
wc -m file2.txt&lt;br /&gt;
wc -c file2.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podemos contar más de un fichero a la vez:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
wc -l file.txt file2.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nos mostrará el conteo de cada fichero y el total.&lt;br /&gt;
&lt;br /&gt;
== Tubería (|) ==&lt;br /&gt;
&lt;br /&gt;
La tubería nos servirá para conectar varios comandos al mismo tiempo, veamos&lt;br /&gt;
unos ejemplos, que siempre se entiende mejor:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat file2.txt | grep prueba&lt;br /&gt;
grep -nr prueba file2.txt | wc -l&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En el primer ejemplo, mostramos el contenido de file2.txt, y esta salida se la&lt;br /&gt;
pasamos al comando grep, el cual busca las líneas que contengan prueba.&lt;br /&gt;
&lt;br /&gt;
En el segundo, buscamos todas las líneas que contengan la palabra prueba, y esta&lt;br /&gt;
salida se la pasamos al comando wc, el cual cuenta las líneas de la salida del&lt;br /&gt;
comando grep.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Redirecciones ==&lt;br /&gt;
&lt;br /&gt;
Vamos a ver unos conceptos antes de seguir:&lt;br /&gt;
&lt;br /&gt;
* Entrada estándar: representa los datos que necesita una aplicación para funcionar, como por ejemplo un archivo de datos o información ingresada desde la terminal y es representado en la terminal como el tipo 0.&lt;br /&gt;
* Salida estándar: es la vía que utilizan las aplicaciones para mostrarte información, allí podemos ver el progreso o simplemente los mensajes que la  aplicación quiera darte en determinado momento y es representado en la terminal como el tipo 1.&lt;br /&gt;
* Error estándar: es la forma en que los programas te informan sobre los problemas que pueden encontrarse al momento de la ejecución y es representado en la terminal como el tipo 2.&lt;br /&gt;
&lt;br /&gt;
Las redirecciones nos sirven para mover la información de un tipo a otro.&lt;br /&gt;
&lt;br /&gt;
Ya vimos previamente el uso de &amp;gt; y &amp;gt;&amp;gt;, y también el |, veamos algunas más:&lt;br /&gt;
&lt;br /&gt;
* comando &amp;lt; fichero: Toma la entrada de fichero&lt;br /&gt;
* comando 2&amp;gt; fichero: Envía la salida de error de comando a fichero&lt;br /&gt;
* comando 2&amp;gt;&amp;amp;1: Envía la salida de error a la salida estándar&lt;br /&gt;
* comando &amp;amp;&amp;gt; fichero: Envía la salida estándar y de error a fichero; equivale a comando &amp;gt; fichero 2&amp;gt;&amp;amp;1&lt;br /&gt;
&lt;br /&gt;
= Paso 4: Usuarios y grupos =&lt;br /&gt;
&lt;br /&gt;
== whoami ==&lt;br /&gt;
&lt;br /&gt;
Sirve para obtener el usuario actual.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
whoami&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Lo más seguro es que nos aparezca ubuntu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== who ==&lt;br /&gt;
&lt;br /&gt;
Es para saber quien está ahora mismo en la máquina conectado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
who&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Seguramente solo estemos nosotros:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ubuntu   pts/0        2019-08-28 13:51 (192.168.122.1)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== su y sudo ==&lt;br /&gt;
&lt;br /&gt;
su (substitute user): sirve para cambiar de usuario. Por ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
su root&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aquí nos pedirá la contraseña del usuario al que queramos cambiar.&lt;br /&gt;
&lt;br /&gt;
sudo (super user do): no todas las distribuciones lo integran, porque es menos&lt;br /&gt;
seguro que su, este comando nos permite ejecutar un comando siendo otro usuario,&lt;br /&gt;
por defecto, si no le damos usuario, lo hará con el usuario root. Si sudo nos&lt;br /&gt;
pide contraseña, nos pide la contraseña del usuario, ya que el usuario es que el&lt;br /&gt;
tiene permisos para usar sudo o no.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo ls -a /root&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Si tuviéramos por ejemplo un usuario 'practica' y quisíeramos ejecutar un&lt;br /&gt;
comando en su nombre:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo -u practica ls&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== adduser y useradd ==&lt;br /&gt;
&lt;br /&gt;
Ambos comandos sirven para crear un nuevo usuario, pero tienen sus diferencias.&lt;br /&gt;
&lt;br /&gt;
useradd es un comando del sistema, y adduser es un script escrito en perl que&lt;br /&gt;
utiliza el comando useradd. La diferencia así de primeras es que adduser nos&lt;br /&gt;
crear el directorio /home/usuario y useradd necesita la opción -m para hacer lo&lt;br /&gt;
mismo. Se puede utilizar el que se quiera, aunque es más recomendable useradd,&lt;br /&gt;
ya que funcionará igual en todas las distribuciones.&lt;br /&gt;
&lt;br /&gt;
Vamos a añadir un usuario practica con su directorio en /home (notemos que&lt;br /&gt;
necesitamos permisos de super usuario para realizar esta tarea):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo useradd -m practica&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vamos a comprobar que el directorio home está creado y que el usuario practica&lt;br /&gt;
funciona:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls /home  # veremos el directorio practica&lt;br /&gt;
sudo -u practica whoami  # nos dirá que somo el usuario practica&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== passwd ==&lt;br /&gt;
&lt;br /&gt;
Sirve para modificar la contraseña de un usuario, por ejemplo, vamos a modificar&lt;br /&gt;
la contraseña del usuario que hemos creado previamente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo passwd practica&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nos preguntará dos veces la contraseña, y ya la tendremos actualizadas. Vamos&lt;br /&gt;
ahora a probar ahora el comando su para cambiar de usuario:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
su practica&lt;br /&gt;
whoami&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Veremos que hemos cambiado de usuario, para cerrar este usuario, escribimos&lt;br /&gt;
'exit' o pulsamos 'CTLR + D'&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== deluser y userdel ==&lt;br /&gt;
&lt;br /&gt;
Ambos sirven para borrar un usuario, similar a adduser y useradd, userdel es el&lt;br /&gt;
comando y deluser el script.&lt;br /&gt;
&lt;br /&gt;
Vamos a borrar el usuario que hemos creado, incluyendo el borrado de su /home&lt;br /&gt;
(opción -r):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
userdel -r practica&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Comprobemos que ya no tenemos usuario ni /home:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls /home&lt;br /&gt;
sudo -u practica whoami&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== addgroup y groupadd ==&lt;br /&gt;
&lt;br /&gt;
Ambos sirven para crear un grupo. Los grupos sirven para agrupar a los usuarios&lt;br /&gt;
y que estos tengan unos mismos permisos. Por ejemplo, cuando instalamos algunas&lt;br /&gt;
herramientas como por ejemplo docker, este crea el grupo docker automáticamente&lt;br /&gt;
para que fácilmente podamos añadir a un usuario al grupo, y este tenga los&lt;br /&gt;
permisos para trabajar con dicha herramienta.&lt;br /&gt;
&lt;br /&gt;
Vamos a crear un nuevo grupo, vamos a llamarle invitado:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo groupadd invitado&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== usermod y groups ==&lt;br /&gt;
&lt;br /&gt;
usermod es utilizado para asignar un grupo a un usuario.&lt;br /&gt;
&lt;br /&gt;
groups es utilizado para ver los grupos a los que pertenece un usuario.&lt;br /&gt;
&lt;br /&gt;
Vamos a añadir a un usuario practica, lo vamos a añadir al grupo invitado y&lt;br /&gt;
veremos los grupos a los que pertenece:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo useradd -m practica&lt;br /&gt;
sudo usermod -G invitado practica&lt;br /&gt;
groups practica&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Veremos que el usuario práctica pertenece al grupo invitado.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== delgroup y groupdel ==&lt;br /&gt;
&lt;br /&gt;
Ambos sirven para eliminar un grupo. Vamos a eliminar el grupo que hemos creado&lt;br /&gt;
anteriormente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo groupdel invitado&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podemos observar ahora que el usuario practica no pertenece al grupo invitado:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
groups practica&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Paso 5: Permisos =&lt;br /&gt;
&lt;br /&gt;
== Nomenclatura rwx y numérica ==&lt;br /&gt;
&lt;br /&gt;
Si hacemos un ls -l, la primera cadena que nos aparece son los permisos del&lt;br /&gt;
fichero (-rwxrw-r--), podemos dividirlo en 4 elementos:&lt;br /&gt;
&lt;br /&gt;
-    (rwx)   (rw-)  (r--)&lt;br /&gt;
|      |       |      |&lt;br /&gt;
type  owner   group  others&lt;br /&gt;
&lt;br /&gt;
* type: el tipo de fichero, pudiendo ser d (directorio), l (enlace simbólico), - (fichero normal)&lt;br /&gt;
* owner: permisos de propietario&lt;br /&gt;
* group: permisos de grupo&lt;br /&gt;
* others: permisos para los demás usuarios&lt;br /&gt;
&lt;br /&gt;
Significado de los permisos:&lt;br /&gt;
&lt;br /&gt;
* r: permisos de lectura&lt;br /&gt;
* w: permisos de escritura&lt;br /&gt;
* x: permisos de ejecución&lt;br /&gt;
&lt;br /&gt;
Por último, existe un modo abreviado para estos permisos que se utiliza con&lt;br /&gt;
números.&lt;br /&gt;
&lt;br /&gt;
rwx&lt;br /&gt;
001 en binario es 1 en decimal. Permisos de ejecución&lt;br /&gt;
010 en binario es 2 en decimal. Permisos de escritura&lt;br /&gt;
100 en binario es 4 en decimal. Permisos de lectura&lt;br /&gt;
&lt;br /&gt;
La suma de los permisos, nos da el valor numérico. Veamos un ejemplo:&lt;br /&gt;
rwx rw- r--&lt;br /&gt;
111 110 100&lt;br /&gt;
 7   6   4&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== chmod ==&lt;br /&gt;
&lt;br /&gt;
Permite cambiar los permisos de acceso a un fichero o directorio. Podemos dar&lt;br /&gt;
permisos de dos formas diferentes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== modo carácter ===&lt;br /&gt;
&lt;br /&gt;
Veamos primero unos detalles:&lt;br /&gt;
&lt;br /&gt;
Clases de usuario:&lt;br /&gt;
&lt;br /&gt;
* owner (u)&lt;br /&gt;
* group (g)&lt;br /&gt;
* others (o)&lt;br /&gt;
* all (a)&lt;br /&gt;
&lt;br /&gt;
Modificador:&lt;br /&gt;
&lt;br /&gt;
* añadir (+)&lt;br /&gt;
* eliminar (-)&lt;br /&gt;
* sobrescribir (=)&lt;br /&gt;
&lt;br /&gt;
Para dar permisos tendríamos que seleccionar la clase de usuario el modificador&lt;br /&gt;
y los permisos, veamos un ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chmod u+x file  # añadimos permisos de ejecución al usuario&lt;br /&gt;
chmod go-w file  # quitamos permisos de escritura al grupo y a otros usuarios&lt;br /&gt;
chmod u=rwx,go=r file  # Al usuario le damos todos los permisos, y al grupo y otros solo le damos permisos de lectura&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Modo octal ===&lt;br /&gt;
&lt;br /&gt;
Con el modo octacl, es como si siempre utilizáramos el modificar sobrescribir,&lt;br /&gt;
pongamos algunos ejemplos:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chmod 744 file  # Al usuario le damos todos los permisos, y al grupo y otros solo le damos permisos de lectura&lt;br /&gt;
chmod 777 file  # Todos tienen permisos para todo&lt;br /&gt;
chmod 600 file  # solo el propietario tiene permisos de lectura y escritura&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Ejemplos ===&lt;br /&gt;
&lt;br /&gt;
Vamos a ver como funciona el tema de permisos con unos ejemplos. Vamos a crear&lt;br /&gt;
un fichero pruebas y le vamos a quitar los permisos de escritura a nuestro&lt;br /&gt;
usuario, y le vamos a dar permisos de escritura a otros:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
touch pruebas&lt;br /&gt;
ls -l pruebas  # de esta forma veremos que por defecto los permisos son rw-rw-r--&lt;br /&gt;
chmod u-w,o+w pruebas&lt;br /&gt;
ls -l pruebas  # ahora los permisos deberían ser -w-rw-rw-&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Una vez dado los permisos, veamos que con nuestro usuario podemos leer pero no&lt;br /&gt;
escribir:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat pruebas&lt;br /&gt;
echo &amp;quot;probando&amp;quot; &amp;gt; pruebas&lt;br /&gt;
exit&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Y ahora vamos a ver que el usuario pruebas, puede leer y escribir:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
su practica&lt;br /&gt;
cat pruebas&lt;br /&gt;
echo &amp;quot;probando&amp;quot; &amp;gt; pruebas&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== chown ==&lt;br /&gt;
&lt;br /&gt;
Permite cambiar el propietario de un fichero o directorio.&lt;br /&gt;
&lt;br /&gt;
Vamos por ejemplo a pasarle ahora el fichero pruebas al usuario practica:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo chown practica pruebas&lt;br /&gt;
ls -l pruebas&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Veremos que el usuario actual ahora es pruebas, aunque vemos que el ls muestra&lt;br /&gt;
lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
-r--rw-rw- 1 practica ubuntu 9 Aug 29 09:34 pruebas&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hay que comentar un detalle, y es que los ficheros y directorios tienen asignado&lt;br /&gt;
un usuario y un grupo, por defecto se utiliza el mismo usuario como grupo&lt;br /&gt;
cuando creamos un nuevo fichero o directorio. Si queremos que cuando cambiemos&lt;br /&gt;
el propietario, cambiar tambien el grupo del fichero, podemos hacerlo de la&lt;br /&gt;
siguiente forma:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo chown practica:practica pruebas&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Una vez hecho esto, vamos ahora a probar que los permisos siguen funcionando&lt;br /&gt;
como antes, ahora con el usuario ubuntu, deberíamos de poder leer y escribir en&lt;br /&gt;
el fichero pruebas, y con el usuario practica, solo leer, esto es así por que&lt;br /&gt;
ahora el propitario es practica:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Pruebas usuario ubuntu&lt;br /&gt;
cat pruebas&lt;br /&gt;
echo test &amp;gt;&amp;gt; pruebas&lt;br /&gt;
# Pruebas usuario practica&lt;br /&gt;
su practica&lt;br /&gt;
cat pruebas&lt;br /&gt;
echo &amp;quot;probando&amp;quot; &amp;gt; pruebas&lt;br /&gt;
exit&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Paso 6: Procesos =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== ps ==&lt;br /&gt;
&lt;br /&gt;
Sirve para ver que procesos están ejecutándose en el sistema, veamos un ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ps aux  # con la opción aux mostraremos todos los procesos del sistema&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cada línea es un proceso, y cada proceso muestra su PID, usuario, cantidad de&lt;br /&gt;
memoria y cpu utilizada, comando y otros detalles.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
man kill &amp;amp;  # añadir el &amp;amp; al final de un comando hace que este se ejecute en segundo plano, por lo que se quedará abierto&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La salida de este comando nos mostrará el PID que tiene ese proceso que acabamos&lt;br /&gt;
de ejecutar, vamos a comprobarlo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ps aux | grep &amp;quot;man kill&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Veremos que el PID coincide.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== kill ==&lt;br /&gt;
&lt;br /&gt;
Este comando nos servirá para matar un proceso. kill se utiliza seguido de una&lt;br /&gt;
señal para enviar al proceso seguido de uno o varios PID. para ver las señales&lt;br /&gt;
disponibles, podemos listarlas:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kill -l&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Las más utilizadas suele ser SIGTERM y SIGKILL, la primera intenta terminar el&lt;br /&gt;
proceso de forma poco abrupta, y la segunda suele utilizarse cuando el proceso&lt;br /&gt;
no atiende a esta primera señal. Vamos ahora a terminar el proceso que creamos&lt;br /&gt;
antes, si no recordamos el PID, busquémoslo de nuevo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ps aux | grep &amp;quot;man kill&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enviamos señal para terminar el proceso y comprobamos que ha terminado:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kill -SIGTERM 8470&lt;br /&gt;
ps aux | grep &amp;quot;man kill&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
También podemos notar que en el listado de señales, hay unos números, podemos&lt;br /&gt;
utilizar esos números en vez de las palabras, por ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
man kill &amp;amp;&lt;br /&gt;
kill -15 PID_COMANDO_PREVIO&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Comprobamos que el proceso ha terminado correctamente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ps aux | grep &amp;quot;man kill&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Paso 7: Estado CPU, RAM y Disco =&lt;br /&gt;
&lt;br /&gt;
== top ==&lt;br /&gt;
&lt;br /&gt;
Este comando nos servirá para ver el listado de procesos y el estado de la CPU y&lt;br /&gt;
memoria.&lt;br /&gt;
&lt;br /&gt;
Probemos el comando y observemos detalladamente la salida:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
top&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para salir, pulsamos q.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== df y du ==&lt;br /&gt;
&lt;br /&gt;
df (disk free) y du (disk usage). Ambas son utilidades para mostrar el uso de&lt;br /&gt;
los discos.&lt;br /&gt;
&lt;br /&gt;
Con df mostraremos la información del espacio en cada dispositivo montado:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
df&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Estos comandos que nos muestran el tamaño de los ficheros, casi siempre tienen&lt;br /&gt;
una opción para mostrarlo en un formato más legible (-h)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
df -h&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mucho mejor.&lt;br /&gt;
&lt;br /&gt;
Ahora veamos el comando du, el cual nos mostrará el tamaño de un fichero o&lt;br /&gt;
directorio y sus subdirectorios, no olvidemos el -h:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
du -h /home/ubuntu&lt;br /&gt;
du -h /home/ubuntu/pruebas&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Si solo quisíeramos saber el total de una carpeta y nos nos interesan sus&lt;br /&gt;
subcarpetas, podemos utilizar la opción -s:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
du -sh /home/ubuntu&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== free ==&lt;br /&gt;
&lt;br /&gt;
Sirve para ver el estado de la memoria, como siempre, opción -h:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
free -h&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== lsblk ==&lt;br /&gt;
&lt;br /&gt;
Nos muestra la información de todos los dispositivos de bloques (discos duros,&lt;br /&gt;
pendrivers, CD_ROM, SSD, ...).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lsblk&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En la siguiente práctica se utilizará más a fondo este comando, ya que&lt;br /&gt;
trabajaremos con dispositivos.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Paso 8: Gestión de paquetes de software y repositorios =&lt;br /&gt;
&lt;br /&gt;
Los sistemas Linux incluyen, además de las herramientas básicas del sistema operativo, repositorios de software que puede ser opcionalmente instalados por el administrador del sistema. Los fabricantes de las distribuciones de Linux incluyen paquetes de software listos para ser instalados que se integran con el sistema.&lt;br /&gt;
&lt;br /&gt;
Un paquete incluye el software necesario para que una cierta aplicación funcione correctamente, así como sus paquetes de dependencia.&lt;br /&gt;
&lt;br /&gt;
En Ubuntu, la herramienta de gestión de paquetes de software y repositorios se llama '''apt'''.&lt;br /&gt;
&lt;br /&gt;
=== Listado de repositorios de paquetes de software ===&lt;br /&gt;
&lt;br /&gt;
En Ubuntu el listado de repositorios se encuentra en el fichero /etc/apt/sources.list. Podemos comprobar que repositorios tenemos añadido:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat /etc/apt/sources.list&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Actualización del listado de paquetes de software ===&lt;br /&gt;
&lt;br /&gt;
Para actualizar el listado de paquetes utilizaremos el comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt update&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Instalación un nuevo paquete ===&lt;br /&gt;
&lt;br /&gt;
Para instalar un nuevo paquete, utilizaremos la orden install, por ejemplo, vamos a instalar tree, similar al ls pero muestra el arbol de directorios:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt install tree&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Desinstalación de un paquete ===&lt;br /&gt;
&lt;br /&gt;
Usaremos la orden purge o la orden remove, purge nos lo eliminad todo, y remove mantiene la configuración en el caso de que el paquete la tuviese. Vamos a eliminar el paquete instalado previamente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt purge tree&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Paso 9: Módulos =&lt;br /&gt;
&lt;br /&gt;
Los módulos del kernel de Linux son partes que podemos añadir o quitar de forma&lt;br /&gt;
sencilla con el fin de añadir o quitar funcionalidad. Por ejemplo, algunas de&lt;br /&gt;
estas funcionalidades son:&lt;br /&gt;
&lt;br /&gt;
* Registrar temperaturas de nuestros componentes&lt;br /&gt;
* Hacer funcionr la tarjeta de red wifi&lt;br /&gt;
* Cargar los drivers de una tarjeta gráfica&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== lsmod ==&lt;br /&gt;
&lt;br /&gt;
Comando para ver los módulos que estamos usando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lsmod&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== lspci y usb-devices ==&lt;br /&gt;
&lt;br /&gt;
Estos comandos nos servirán para ver el hardware que está conectado a nuestro&lt;br /&gt;
ordenador. Con lspci veremos el listado del hardware integrado y con usb-devices&lt;br /&gt;
el que está conectado por hardware.&lt;br /&gt;
&lt;br /&gt;
Normalmente, como los módulos se utilizan para dar funcionalidad un hardware,&lt;br /&gt;
aquí en los listado de hardware podremos ver que módulo está utilizando cada&lt;br /&gt;
hardware:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lspci -v&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Veremos una línea en algunos dispositivos que nos diga que módulo estamos&lt;br /&gt;
usando, pongo un pequeño trozo de la salida del comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
00:1f.2 SATA controller: Intel Corporation 82801IR/IO/IH (ICH9R/DO/DH) 6 port SATA Controller [AHCI mode] (rev 02) (prog-if 01 [AHCI 1.0])&lt;br /&gt;
    Subsystem: Red Hat, Inc. QEMU Virtual Machine&lt;br /&gt;
    Flags: bus master, fast devsel, latency 0, IRQ 35&lt;br /&gt;
    I/O ports at c0c0 [size=32]&lt;br /&gt;
    Memory at fcc1d000 (32-bit, non-prefetchable) [size=4K]&lt;br /&gt;
    Capabilities: &amp;lt;access denied&amp;gt;&lt;br /&gt;
    Kernel driver in use: ahci&lt;br /&gt;
    Kernel modules: ahci&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vemos que el hardware INTEl Corporation está utilizando el módulo ahci.&lt;br /&gt;
&lt;br /&gt;
Probemos ahora con usb-devices:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
usb-devices&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Veamos un trozo de código:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
T:  Bus=01 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#=  2 Spd=480 MxCh= 0&lt;br /&gt;
D:  Ver= 2.00 Cls=00(&amp;gt;ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs=  1&lt;br /&gt;
P:  Vendor=0627 ProdID=0001 Rev=00.00&lt;br /&gt;
S:  Manufacturer=QEMU&lt;br /&gt;
S:  Product=QEMU USB Tablet&lt;br /&gt;
S:  SerialNumber=42&lt;br /&gt;
C:  #Ifs= 1 Cfg#= 1 Atr=a0 MxPwr=100mA&lt;br /&gt;
I:  If#= 0 Alt= 0 #EPs= 1 Cls=03(HID  ) Sub=00 Prot=00 Driver=usbhid&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vemos que el teclado está utilizando el módulo usbhid&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== insmod ==&lt;br /&gt;
&lt;br /&gt;
Sirve para cargar un módulo en el kernel, imaginemos que tenemos un módulo que&lt;br /&gt;
se llama modulo1:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo insmod modulo1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== rmmod ==&lt;br /&gt;
&lt;br /&gt;
Sirve para eliminar un módulo de kernel. Imaginemos que queremos borrar un&lt;br /&gt;
módulo cargado anteriormente con el nombre modulo1:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo rmmod modulo1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Marramfer12</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Administraci%C3%B3n_b%C3%A1sica&amp;diff=4559</id>
		<title>Administración básica</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Administraci%C3%B3n_b%C3%A1sica&amp;diff=4559"/>
				<updated>2019-11-13T14:53:15Z</updated>
		
		<summary type="html">&lt;p&gt;Marramfer12: /* grep */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Para realizar esta práctica utilizaremos una de las máquinas virtuales que generamos en la práctica anterior.&lt;br /&gt;
&lt;br /&gt;
En esta práctica aprenderemos a utilizar el interprete de ordenes (también conocido como ''[https://www.traficantes.net/sites/default/files/pdfs/En%20el%20principio%20fue...-TdS.pdf línea de comandos]'') y a aprender nociones básicas de administración de sistemas Linux.&lt;br /&gt;
&lt;br /&gt;
= Paso 0: Breve introducción al sistema Linux =&lt;br /&gt;
&lt;br /&gt;
== Estructura básica del sistema de archivos ==&lt;br /&gt;
&lt;br /&gt;
En un sistema Linux, todas las carpetas y ficheros en el sistema de fichero pende de la carpeta raíz que se representa con la /.&lt;br /&gt;
&lt;br /&gt;
 /&lt;br /&gt;
 ├── bin&lt;br /&gt;
 ├── usr&lt;br /&gt;
 │   ├── local&lt;br /&gt;
 │   ├── bin&lt;br /&gt;
 │   └── ...&lt;br /&gt;
 ├── dev&lt;br /&gt;
 │   ├── sda&lt;br /&gt;
 │   ├── sda1&lt;br /&gt;
 │   └── ...&lt;br /&gt;
 ├── home&lt;br /&gt;
 │   ├── practica&lt;br /&gt;
 │   │   ├── tema1.pdf&lt;br /&gt;
 │   │   ├── boletin1.pdf&lt;br /&gt;
 │   │   └── ...&lt;br /&gt;
 │   ├── profesor&lt;br /&gt;
 │   └── ...&lt;br /&gt;
 └── etc&lt;br /&gt;
     ├── firefox&lt;br /&gt;
     ├── libvirt&lt;br /&gt;
     ├── ...&lt;br /&gt;
     └── ...&lt;br /&gt;
&lt;br /&gt;
Como puedes observar, el sistema de fichero emplea una estructura de árbol.&lt;br /&gt;
&lt;br /&gt;
== Nociones básicas ==&lt;br /&gt;
&lt;br /&gt;
·Aplicaciones con nombres compuestos: usar guion entre palabras&lt;br /&gt;
&lt;br /&gt;
·Nombres con espacios en blanco: Escribir entre comillas dobles&lt;br /&gt;
&lt;br /&gt;
·Espacios en blanco para separar ordenes (ej: instalar varios paquetes )&lt;br /&gt;
&lt;br /&gt;
·Formato general de una orden: comando [-opciones] [argumentos]&lt;br /&gt;
&lt;br /&gt;
·'''IMPORTANTE''': Diferencia entre mayúsculas y minúsculas&lt;br /&gt;
&lt;br /&gt;
== Carpetas . y .. ==&lt;br /&gt;
&lt;br /&gt;
Toda carpeta en un sistema Linux dispone de dos pseudocarpetas, la '''.''' y la '''..'':&lt;br /&gt;
&lt;br /&gt;
* La pseudocarpeta '''..''' hace referencia a la carpeta padre que contiene a esta carpeta.&lt;br /&gt;
* La pseudocarpeta '''.''' hace referencia a la carpeta actual, es por tanto una autoreferencia.&lt;br /&gt;
&lt;br /&gt;
En el caso de la carpeta raíz, la pseudocarpeta '''.''' y '''..''' hacen referencia a la propia carpeta raíz, se trata, por tanto de una excepción.&lt;br /&gt;
&lt;br /&gt;
== Directorio de trabajo actual y la orden cd ==&lt;br /&gt;
&lt;br /&gt;
Cada interprete de ordenes dispone de una ''carpeta de trabajo actual'' ('''c'''urrent '''w''orking '''d''irectory, en inglés). La carpeta de trabajo actual se puede modificar con la orden '''cd''' ('''c'''hange '''d'''irectory, en inglés).&lt;br /&gt;
&lt;br /&gt;
Por ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ cd ..&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nos situaría en la carpeta padre, empleando una ruta relativa.&lt;br /&gt;
&lt;br /&gt;
Si volvemos a escribir desde /home &amp;quot; cd .. &amp;quot; nos lleva a '''/$''' &lt;br /&gt;
&lt;br /&gt;
Para situarnos en el raíz, podemos emplear una ruta absoluta:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ cd /&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En caso de que queramos volver a la carpeta de usuario, bastaría con invocar a '''cd''' sin más o ''' cd ~ '''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ cd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''MUY IMPORTANTE''': No es lo mismo cd.. que ''' cd .. ''', es necesario el espacio después del cd.&lt;br /&gt;
&lt;br /&gt;
== Rutas absolutas, rutas relativas ==&lt;br /&gt;
&lt;br /&gt;
Para hacer referencia a un fichero o una carpeta se usan ruta absolutas o rutas relativas.&lt;br /&gt;
&lt;br /&gt;
Las rutas absolutas siempre empieza por /, de manera que toman como punto de referencia la carpeta raíz (/). Por ejemplo, una ruta absoluta a la carpeta '''prueba''' que está almacenada en la carpeta del usuario '''ubuntu''' es '/home/ubuntu/prueba/'.&lt;br /&gt;
&lt;br /&gt;
Las ruta relativa toma como referencia la carpeta de trabajo actual. Para averiguar la carpeta de trabajo actual disponemos de la orden '''pwd'''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ pwd&lt;br /&gt;
/home/ubuntu&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En base a la carpeta de trabajo actual, empleando la pseudocarpeta '''..''', se puede construir rutas relativas. Por ejemplo, para referenciar un fichero '''fichero.txt''' en la carpeta temporal, podemos emplear la ruta relativa '''../../tmp/fichero.txt'''.&lt;br /&gt;
&lt;br /&gt;
Aunque probablemente sea más cómodo emplear una ruta absoluta en este caso, que sería '''/tmp/fichero.txt'''.&lt;br /&gt;
&lt;br /&gt;
== Intérprete de órdenes ==&lt;br /&gt;
&lt;br /&gt;
El intérprete de órdenes es un lanzador de aplicaciones textual que emplea el teclado como dispositivo de entrada de datos. Mediante el teclado, se escribe el nombre del programa que se quiere lanzar y al pulsa la tecla ''intro'' el intérprete de ordenes ejecutara dicho programa. Por defecto, el intérprete de ordenes que emplea Ubuntu por defecto es '''bash'''.&lt;br /&gt;
&lt;br /&gt;
== man: ver la página de manual de una orden ==&lt;br /&gt;
&lt;br /&gt;
La orden '''man''' te será útil para ver las páginas de manual.&lt;br /&gt;
&lt;br /&gt;
Su estructura básica es:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
man &amp;lt;comando&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aunque también se utiliza con la opción ''' -a ''' de All, que también muestra las entradas comenzadas por '''.''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
man -a &amp;lt;comando&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Este programa toma como entrada el nombre de la orden de la que quieres consultar su página de manual, por ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
man ls&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nos da información del manual de la orden '''ls'''.&lt;br /&gt;
&lt;br /&gt;
Para salir de la página de manual, pulsa la tecla '''q''' (la primera letra de la palabra '''quit''', en inglés).&lt;br /&gt;
&lt;br /&gt;
quit = salir&lt;br /&gt;
&lt;br /&gt;
Normalmente, los programas ofrecen opciones de ayuda, como '''--help'''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
man --help&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
También se puede emplear la versión compacta a la hora de especificar opciones.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
man -h&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En general, todas las ordenes suelen ofrecer una opción de ayuda.&lt;br /&gt;
&lt;br /&gt;
= Paso 1: Operaciones básicas con el sistema de ficheros =&lt;br /&gt;
&lt;br /&gt;
== ls ==&lt;br /&gt;
&lt;br /&gt;
Lista los ficheros y carpetas. Si no se especifica nada, muestra los ficheros y carpetas que contiene la carpeta de trabajo actual.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Si se especifica una ruta, muestra las carpetas y ficheros contenidos en dicha ruta, por ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ ls /&lt;br /&gt;
bin  boot  data  dev  etc  home  initrd.img  initrd.img.old  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  snap  srv  sys  tmp  usr  var  vmlinuz  vmlinuz.old&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al emplear '''/''' como ruta absoluta, muestra el contenido de la carpeta raíz.&lt;br /&gt;
&lt;br /&gt;
Las opciones más usadas de este programa suelen ser:&lt;br /&gt;
&lt;br /&gt;
* -a: muestra los ficheros y carpetas ''ocultos''. En Linux, cualquier fichero o carpeta cuyo nombre empiece por . se considera ''oculto''. Esto incluye también en el listado las pseudocarpetas . y ..&lt;br /&gt;
&lt;br /&gt;
* -l: se muestra en lista y aporta datos como la fecha de última modificación, propietario, grupo, tamaño en bytes y nombre:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ ls -a&lt;br /&gt;
&lt;br /&gt;
.  ..  .bash_history  .bash_logout  .bashrc  .profile  .ssh&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ambas opciones se puede combinar:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ ls -la /&lt;br /&gt;
&lt;br /&gt;
total 92&lt;br /&gt;
drwxr-xr-x  24 root root  4096 Aug 28 09:50 .&lt;br /&gt;
drwxr-xr-x  24 root root  4096 Aug 28 09:50 ..&lt;br /&gt;
drwxr-xr-x   2 root root  4096 Aug 22 12:37 bin&lt;br /&gt;
drwxr-xr-x   4 root root  4096 Aug 22 12:37 boot&lt;br /&gt;
drwx------   3 root root  4096 Aug 28 09:50 data&lt;br /&gt;
drwxr-xr-x  18 root root  3780 Aug 28 09:46 dev&lt;br /&gt;
[...]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Otras opciones útiles son:&lt;br /&gt;
&lt;br /&gt;
* -s : muestra el tamaño en bloques de cada archivo&lt;br /&gt;
&lt;br /&gt;
* -t : aporta el día y la hora de modificación&lt;br /&gt;
&lt;br /&gt;
* -R : lista también las subcarpetas &lt;br /&gt;
&lt;br /&gt;
* --color : muestra el contenido coloreado&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Los '''permisos''' se emplean en base a tres capacidades:&lt;br /&gt;
&lt;br /&gt;
* Lectura, que se codifica con '''r''' (read, en inglés).&lt;br /&gt;
* Escritura, que se codifica con '''w''' (write, en inglés).&lt;br /&gt;
* Ejecutación, que se codifica con '''x''' (execute, en inglés).&lt;br /&gt;
&lt;br /&gt;
La primera columna muestra los permisos que codifican:&lt;br /&gt;
&lt;br /&gt;
* Tipo de entrada: '''d''' indica ''directorio'' (''carpeta'').&lt;br /&gt;
* Permisos del propietario, primera terna de rwx&lt;br /&gt;
* Permisos del grupo, segunda terna de rwx&lt;br /&gt;
* Permisos para el resto del mundo, tercera terna de rwx.&lt;br /&gt;
&lt;br /&gt;
A continuación, aparecen el propietario y el grupo, seguidos de la fecha de última modificación y el nombre del fichero o carpeta.&lt;br /&gt;
&lt;br /&gt;
La ayuda ( help ) en ls solo funciona con ''' ls --help ''' no con ls -h&lt;br /&gt;
&lt;br /&gt;
== mkdir ==&lt;br /&gt;
&lt;br /&gt;
Crea un nuevo directorio.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ mkdir test&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Crea una carpeta test en el directorio actual.&lt;br /&gt;
&lt;br /&gt;
Comprobemos que se ha creado bien:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ ls&lt;br /&gt;
test&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Con la opción '''-p''', permite crear sucesivas carpetas anidadas de una sola vez, por ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ mkdir -p a/b/c&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Que crea la siguiente estructura de carpetas.&lt;br /&gt;
&lt;br /&gt;
 a&lt;br /&gt;
 └── b&lt;br /&gt;
     └── c&lt;br /&gt;
&lt;br /&gt;
== touch ==&lt;br /&gt;
&lt;br /&gt;
Crea un nuevo fichero vacío (sin contenido) con el nombre que especifiquemos.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ touch file.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Comprobamos que el fichero se ha creado correctamente.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ ls&lt;br /&gt;
file.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== cp ==&lt;br /&gt;
&lt;br /&gt;
Copia un fichero o directorio.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ cp file.txt file_copy.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para copiar una carpeta y su contenido tenemos que usar la opción -r (recursivo).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ cp -r test test_copy&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Comprobamos el resultado con la orden '''ls'''.&lt;br /&gt;
&lt;br /&gt;
* Si nos encontramos en la carpeta destino, la estructura sería la siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ cp &amp;lt;nombre ruta origen&amp;gt; &amp;lt;nombre archivo&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== mv ==&lt;br /&gt;
&lt;br /&gt;
Mueve fichero o carpeta.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mv file_copy.txt file2.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
También se emplea para renombrar.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mv test_copy test_copy2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== rm ==&lt;br /&gt;
&lt;br /&gt;
* Borra un fichero o carpeta vacía:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rm &amp;lt;nombre&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Para borrar una carpeta no vacía y su contenido:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rm -r &amp;lt;nombre&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''IMPORTANTE''': No hacer jamás ''' rm -r * '''&lt;br /&gt;
&lt;br /&gt;
* EJERCICIOS:&lt;br /&gt;
&lt;br /&gt;
# Crear la siguiente estructura dentro del directorio /tmp (usar los comandos mkdir, touch y cp):&lt;br /&gt;
&lt;br /&gt;
 /tmp&lt;br /&gt;
 ├── carpeta1&lt;br /&gt;
 ├── carpeta2&lt;br /&gt;
 │   ├── fichero1.txt&lt;br /&gt;
 │   └── fichero2.md&lt;br /&gt;
 └── carpeta3&lt;br /&gt;
     ├── fichero1.txt&lt;br /&gt;
     └── fichero2.md&lt;br /&gt;
&lt;br /&gt;
# Basándonos en el ejercicio anterior, cambiar la estructura a la siguiente (usar comandos mv y rm):&lt;br /&gt;
&lt;br /&gt;
 /tmp&lt;br /&gt;
 └── carpeta&lt;br /&gt;
     ├── fichero1.txt&lt;br /&gt;
     └── fichero2.md&lt;br /&gt;
&lt;br /&gt;
= Paso 2: Impresión por pantalla y redirección de salida =&lt;br /&gt;
&lt;br /&gt;
== echo ==&lt;br /&gt;
&lt;br /&gt;
Sirve para imprimir una línea de texto por pantalla o variables de entorno. Además, nos permite escribir en ficheros.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo &amp;lt;opción&amp;gt; &amp;lt;texto&amp;gt; &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Opciones curiosas: &lt;br /&gt;
&lt;br /&gt;
-e &amp;lt;PALABRA \bPALABRA&amp;gt;   Se eliminan los espacios entre las palabras&lt;br /&gt;
&lt;br /&gt;
-e &amp;lt;PALABRA \nPALABRA&amp;gt;	 Se añaden saltos de línea&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Una variable de entorno es una variable editada con algún valor, por defecto existen algunas creadas, como por ejemplo la variable HOME, que contiene el directorio del usuario:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo $HOME&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aprovecharemos y crearemos una variable nosotros:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ME=&amp;quot;my name&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Comprobamos:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo $ME&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Redirección de salida ==&lt;br /&gt;
&lt;br /&gt;
&amp;gt; y &amp;gt;&amp;gt; sirve para redirigir una salida. Por ejemplo, utilizando el comando echo,&lt;br /&gt;
podemos enviar un texto dentro de un fichero:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo &amp;quot;Esto es una prueba&amp;quot; &amp;gt; file.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La diferencia entre &amp;gt; y &amp;gt;&amp;gt; es que &amp;gt; sobrescribe lo que haya en el fichero y&lt;br /&gt;
añade el contenido, y &amp;gt;&amp;gt; no sobrescribe, solo añade el nuevo contenido.&lt;br /&gt;
&lt;br /&gt;
Hagamos la prueba:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo &amp;quot;Esto es una prueba&amp;quot; &amp;gt; file.txt&lt;br /&gt;
echo &amp;quot;Esto es una prueba2&amp;quot; &amp;gt; file.txt&lt;br /&gt;
echo &amp;quot;Esto es una prueba&amp;quot; &amp;gt;&amp;gt; file2.txt&lt;br /&gt;
echo &amp;quot;Esto es una prueba2&amp;quot; &amp;gt;&amp;gt; file2.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En cualquier caso, si el fichero no existe, se crea.&lt;br /&gt;
&lt;br /&gt;
= Paso 3: Manejo de ficheros y carpetas avanzado =&lt;br /&gt;
&lt;br /&gt;
== cat ==&lt;br /&gt;
&lt;br /&gt;
* Muestra el contenido de un fichero:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat file.txt&lt;br /&gt;
cat &amp;lt;fichero1&amp;gt; &amp;lt;fichero2&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Crea un fichero:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat &amp;gt;&amp;lt;nombre archivo&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
GUARDAR FICHERO: Pulsamos ENTER y luego CTRL + D&lt;br /&gt;
&lt;br /&gt;
* Añadir más lineas al fichero: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat &amp;gt;&amp;gt;&amp;lt;nombre fichero&amp;gt; &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== grep ==&lt;br /&gt;
&lt;br /&gt;
Sirve para localizar coincidencias de un cierto patrón en ficheros y muestra la coincidencia, en caso de encontrarla, por pantalla.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
grep &amp;lt;opción&amp;gt; &amp;lt;patrón&amp;gt; &amp;lt;archivos donde buscar&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Por ejemplo, para buscar el patrón ''prueba'' en el fichero ''fichero.txt''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ grep -n prueba fichero.txt&lt;br /&gt;
1:Esto es una prueba&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Principales opciones del comando:&lt;br /&gt;
&lt;br /&gt;
-c : Escribe el número de líneas encontradas.&lt;br /&gt;
&lt;br /&gt;
-i : No distingue entre mayúsculas y minúsculas.&lt;br /&gt;
&lt;br /&gt;
-l : Muestra los nombres de los ficheros que contienen los caracteres buscados.&lt;br /&gt;
&lt;br /&gt;
-n : Cada línea es precedida por su número en el fichero.&lt;br /&gt;
&lt;br /&gt;
-s : No se muestran los mensajes que indican que no se puede abrir un fichero.&lt;br /&gt;
&lt;br /&gt;
-v : Muestra sólo las líneas que no cumplen la condición.&lt;br /&gt;
&lt;br /&gt;
== wc ==&lt;br /&gt;
&lt;br /&gt;
Sirve para contar el número de palabras, caracteres, líneas o bytes que contiene un fichero.&lt;br /&gt;
&lt;br /&gt;
Las opciones más utilizadas son:&lt;br /&gt;
&lt;br /&gt;
* -l: muestra el número de líneas que contiene el fichero.&lt;br /&gt;
* -w: muestra el número de palabras.&lt;br /&gt;
* -m: muestra el número de caracteres&lt;br /&gt;
* -c: muestra el número de bytes&lt;br /&gt;
&lt;br /&gt;
Probemos y contemos todo en el fichero file2.txt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
wc -l file2.txt&lt;br /&gt;
wc -w file2.txt&lt;br /&gt;
wc -m file2.txt&lt;br /&gt;
wc -c file2.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podemos contar más de un fichero a la vez:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
wc -l file.txt file2.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nos mostrará el conteo de cada fichero y el total.&lt;br /&gt;
&lt;br /&gt;
== Tubería (|) ==&lt;br /&gt;
&lt;br /&gt;
La tubería nos servirá para conectar varios comandos al mismo tiempo, veamos&lt;br /&gt;
unos ejemplos, que siempre se entiende mejor:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat file2.txt | grep prueba&lt;br /&gt;
grep -nr prueba file2.txt | wc -l&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En el primer ejemplo, mostramos el contenido de file2.txt, y esta salida se la&lt;br /&gt;
pasamos al comando grep, el cual busca las líneas que contengan prueba.&lt;br /&gt;
&lt;br /&gt;
En el segundo, buscamos todas las líneas que contengan la palabra prueba, y esta&lt;br /&gt;
salida se la pasamos al comando wc, el cual cuenta las líneas de la salida del&lt;br /&gt;
comando grep.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Redirecciones ==&lt;br /&gt;
&lt;br /&gt;
Vamos a ver unos conceptos antes de seguir:&lt;br /&gt;
&lt;br /&gt;
* Entrada estándar: representa los datos que necesita una aplicación para funcionar, como por ejemplo un archivo de datos o información ingresada desde la terminal y es representado en la terminal como el tipo 0.&lt;br /&gt;
* Salida estándar: es la vía que utilizan las aplicaciones para mostrarte información, allí podemos ver el progreso o simplemente los mensajes que la  aplicación quiera darte en determinado momento y es representado en la terminal como el tipo 1.&lt;br /&gt;
* Error estándar: es la forma en que los programas te informan sobre los problemas que pueden encontrarse al momento de la ejecución y es representado en la terminal como el tipo 2.&lt;br /&gt;
&lt;br /&gt;
Las redirecciones nos sirven para mover la información de un tipo a otro.&lt;br /&gt;
&lt;br /&gt;
Ya vimos previamente el uso de &amp;gt; y &amp;gt;&amp;gt;, y también el |, veamos algunas más:&lt;br /&gt;
&lt;br /&gt;
* comando &amp;lt; fichero: Toma la entrada de fichero&lt;br /&gt;
* comando 2&amp;gt; fichero: Envía la salida de error de comando a fichero&lt;br /&gt;
* comando 2&amp;gt;&amp;amp;1: Envía la salida de error a la salida estándar&lt;br /&gt;
* comando &amp;amp;&amp;gt; fichero: Envía la salida estándar y de error a fichero; equivale a comando &amp;gt; fichero 2&amp;gt;&amp;amp;1&lt;br /&gt;
&lt;br /&gt;
= Paso 4: Usuarios y grupos =&lt;br /&gt;
&lt;br /&gt;
== whoami ==&lt;br /&gt;
&lt;br /&gt;
Sirve para obtener el usuario actual.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
whoami&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Lo más seguro es que nos aparezca ubuntu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== who ==&lt;br /&gt;
&lt;br /&gt;
Es para saber quien está ahora mismo en la máquina conectado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
who&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Seguramente solo estemos nosotros:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ubuntu   pts/0        2019-08-28 13:51 (192.168.122.1)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== su y sudo ==&lt;br /&gt;
&lt;br /&gt;
su (substitute user): sirve para cambiar de usuario. Por ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
su root&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aquí nos pedirá la contraseña del usuario al que queramos cambiar.&lt;br /&gt;
&lt;br /&gt;
sudo (super user do): no todas las distribuciones lo integran, porque es menos&lt;br /&gt;
seguro que su, este comando nos permite ejecutar un comando siendo otro usuario,&lt;br /&gt;
por defecto, si no le damos usuario, lo hará con el usuario root. Si sudo nos&lt;br /&gt;
pide contraseña, nos pide la contraseña del usuario, ya que el usuario es que el&lt;br /&gt;
tiene permisos para usar sudo o no.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo ls -a /root&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Si tuviéramos por ejemplo un usuario 'practica' y quisíeramos ejecutar un&lt;br /&gt;
comando en su nombre:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo -u practica ls&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== adduser y useradd ==&lt;br /&gt;
&lt;br /&gt;
Ambos comandos sirven para crear un nuevo usuario, pero tienen sus diferencias.&lt;br /&gt;
&lt;br /&gt;
useradd es un comando del sistema, y adduser es un script escrito en perl que&lt;br /&gt;
utiliza el comando useradd. La diferencia así de primeras es que adduser nos&lt;br /&gt;
crear el directorio /home/usuario y useradd necesita la opción -m para hacer lo&lt;br /&gt;
mismo. Se puede utilizar el que se quiera, aunque es más recomendable useradd,&lt;br /&gt;
ya que funcionará igual en todas las distribuciones.&lt;br /&gt;
&lt;br /&gt;
Vamos a añadir un usuario practica con su directorio en /home (notemos que&lt;br /&gt;
necesitamos permisos de super usuario para realizar esta tarea):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo useradd -m practica&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vamos a comprobar que el directorio home está creado y que el usuario practica&lt;br /&gt;
funciona:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls /home  # veremos el directorio practica&lt;br /&gt;
sudo -u practica whoami  # nos dirá que somo el usuario practica&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== passwd ==&lt;br /&gt;
&lt;br /&gt;
Sirve para modificar la contraseña de un usuario, por ejemplo, vamos a modificar&lt;br /&gt;
la contraseña del usuario que hemos creado previamente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo passwd practica&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nos preguntará dos veces la contraseña, y ya la tendremos actualizadas. Vamos&lt;br /&gt;
ahora a probar ahora el comando su para cambiar de usuario:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
su practica&lt;br /&gt;
whoami&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Veremos que hemos cambiado de usuario, para cerrar este usuario, escribimos&lt;br /&gt;
'exit' o pulsamos 'CTLR + D'&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== deluser y userdel ==&lt;br /&gt;
&lt;br /&gt;
Ambos sirven para borrar un usuario, similar a adduser y useradd, userdel es el&lt;br /&gt;
comando y deluser el script.&lt;br /&gt;
&lt;br /&gt;
Vamos a borrar el usuario que hemos creado, incluyendo el borrado de su /home&lt;br /&gt;
(opción -r):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
userdel -r practica&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Comprobemos que ya no tenemos usuario ni /home:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls /home&lt;br /&gt;
sudo -u practica whoami&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== addgroup y groupadd ==&lt;br /&gt;
&lt;br /&gt;
Ambos sirven para crear un grupo. Los grupos sirven para agrupar a los usuarios&lt;br /&gt;
y que estos tengan unos mismos permisos. Por ejemplo, cuando instalamos algunas&lt;br /&gt;
herramientas como por ejemplo docker, este crea el grupo docker automáticamente&lt;br /&gt;
para que fácilmente podamos añadir a un usuario al grupo, y este tenga los&lt;br /&gt;
permisos para trabajar con dicha herramienta.&lt;br /&gt;
&lt;br /&gt;
Vamos a crear un nuevo grupo, vamos a llamarle invitado:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo groupadd invitado&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== usermod y groups ==&lt;br /&gt;
&lt;br /&gt;
usermod es utilizado para asignar un grupo a un usuario.&lt;br /&gt;
&lt;br /&gt;
groups es utilizado para ver los grupos a los que pertenece un usuario.&lt;br /&gt;
&lt;br /&gt;
Vamos a añadir a un usuario practica, lo vamos a añadir al grupo invitado y&lt;br /&gt;
veremos los grupos a los que pertenece:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo useradd -m practica&lt;br /&gt;
sudo usermod -G invitado practica&lt;br /&gt;
groups practica&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Veremos que el usuario práctica pertenece al grupo invitado.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== delgroup y groupdel ==&lt;br /&gt;
&lt;br /&gt;
Ambos sirven para eliminar un grupo. Vamos a eliminar el grupo que hemos creado&lt;br /&gt;
anteriormente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo groupdel invitado&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podemos observar ahora que el usuario practica no pertenece al grupo invitado:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
groups practica&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Paso 5: Permisos =&lt;br /&gt;
&lt;br /&gt;
== Nomenclatura rwx y numérica ==&lt;br /&gt;
&lt;br /&gt;
Si hacemos un ls -l, la primera cadena que nos aparece son los permisos del&lt;br /&gt;
fichero (-rwxrw-r--), podemos dividirlo en 4 elementos:&lt;br /&gt;
&lt;br /&gt;
-    (rwx)   (rw-)  (r--)&lt;br /&gt;
|      |       |      |&lt;br /&gt;
type  owner   group  others&lt;br /&gt;
&lt;br /&gt;
* type: el tipo de fichero, pudiendo ser d (directorio), l (enlace simbólico), - (fichero normal)&lt;br /&gt;
* owner: permisos de propietario&lt;br /&gt;
* group: permisos de grupo&lt;br /&gt;
* others: permisos para los demás usuarios&lt;br /&gt;
&lt;br /&gt;
Significado de los permisos:&lt;br /&gt;
&lt;br /&gt;
* r: permisos de lectura&lt;br /&gt;
* w: permisos de escritura&lt;br /&gt;
* x: permisos de ejecución&lt;br /&gt;
&lt;br /&gt;
Por último, existe un modo abreviado para estos permisos que se utiliza con&lt;br /&gt;
números.&lt;br /&gt;
&lt;br /&gt;
rwx&lt;br /&gt;
001 en binario es 1 en decimal. Permisos de ejecución&lt;br /&gt;
010 en binario es 2 en decimal. Permisos de escritura&lt;br /&gt;
100 en binario es 4 en decimal. Permisos de lectura&lt;br /&gt;
&lt;br /&gt;
La suma de los permisos, nos da el valor numérico. Veamos un ejemplo:&lt;br /&gt;
rwx rw- r--&lt;br /&gt;
111 110 100&lt;br /&gt;
 7   6   4&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== chmod ==&lt;br /&gt;
&lt;br /&gt;
Permite cambiar los permisos de acceso a un fichero o directorio. Podemos dar&lt;br /&gt;
permisos de dos formas diferentes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== modo carácter ===&lt;br /&gt;
&lt;br /&gt;
Veamos primero unos detalles:&lt;br /&gt;
&lt;br /&gt;
Clases de usuario:&lt;br /&gt;
&lt;br /&gt;
* owner (u)&lt;br /&gt;
* group (g)&lt;br /&gt;
* others (o)&lt;br /&gt;
* all (a)&lt;br /&gt;
&lt;br /&gt;
Modificador:&lt;br /&gt;
&lt;br /&gt;
* añadir (+)&lt;br /&gt;
* eliminar (-)&lt;br /&gt;
* sobrescribir (=)&lt;br /&gt;
&lt;br /&gt;
Para dar permisos tendríamos que seleccionar la clase de usuario el modificador&lt;br /&gt;
y los permisos, veamos un ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chmod u+x file  # añadimos permisos de ejecución al usuario&lt;br /&gt;
chmod go-w file  # quitamos permisos de escritura al grupo y a otros usuarios&lt;br /&gt;
chmod u=rwx,go=r file  # Al usuario le damos todos los permisos, y al grupo y otros solo le damos permisos de lectura&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Modo octal ===&lt;br /&gt;
&lt;br /&gt;
Con el modo octacl, es como si siempre utilizáramos el modificar sobrescribir,&lt;br /&gt;
pongamos algunos ejemplos:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chmod 744 file  # Al usuario le damos todos los permisos, y al grupo y otros solo le damos permisos de lectura&lt;br /&gt;
chmod 777 file  # Todos tienen permisos para todo&lt;br /&gt;
chmod 600 file  # solo el propietario tiene permisos de lectura y escritura&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Ejemplos ===&lt;br /&gt;
&lt;br /&gt;
Vamos a ver como funciona el tema de permisos con unos ejemplos. Vamos a crear&lt;br /&gt;
un fichero pruebas y le vamos a quitar los permisos de escritura a nuestro&lt;br /&gt;
usuario, y le vamos a dar permisos de escritura a otros:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
touch pruebas&lt;br /&gt;
ls -l pruebas  # de esta forma veremos que por defecto los permisos son rw-rw-r--&lt;br /&gt;
chmod u-w,o+w pruebas&lt;br /&gt;
ls -l pruebas  # ahora los permisos deberían ser -w-rw-rw-&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Una vez dado los permisos, veamos que con nuestro usuario podemos leer pero no&lt;br /&gt;
escribir:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat pruebas&lt;br /&gt;
echo &amp;quot;probando&amp;quot; &amp;gt; pruebas&lt;br /&gt;
exit&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Y ahora vamos a ver que el usuario pruebas, puede leer y escribir:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
su practica&lt;br /&gt;
cat pruebas&lt;br /&gt;
echo &amp;quot;probando&amp;quot; &amp;gt; pruebas&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== chown ==&lt;br /&gt;
&lt;br /&gt;
Permite cambiar el propietario de un fichero o directorio.&lt;br /&gt;
&lt;br /&gt;
Vamos por ejemplo a pasarle ahora el fichero pruebas al usuario practica:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo chown practica pruebas&lt;br /&gt;
ls -l pruebas&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Veremos que el usuario actual ahora es pruebas, aunque vemos que el ls muestra&lt;br /&gt;
lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
-r--rw-rw- 1 practica ubuntu 9 Aug 29 09:34 pruebas&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hay que comentar un detalle, y es que los ficheros y directorios tienen asignado&lt;br /&gt;
un usuario y un grupo, por defecto se utiliza el mismo usuario como grupo&lt;br /&gt;
cuando creamos un nuevo fichero o directorio. Si queremos que cuando cambiemos&lt;br /&gt;
el propietario, cambiar tambien el grupo del fichero, podemos hacerlo de la&lt;br /&gt;
siguiente forma:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo chown practica:practica pruebas&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Una vez hecho esto, vamos ahora a probar que los permisos siguen funcionando&lt;br /&gt;
como antes, ahora con el usuario ubuntu, deberíamos de poder leer y escribir en&lt;br /&gt;
el fichero pruebas, y con el usuario practica, solo leer, esto es así por que&lt;br /&gt;
ahora el propitario es practica:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Pruebas usuario ubuntu&lt;br /&gt;
cat pruebas&lt;br /&gt;
echo test &amp;gt;&amp;gt; pruebas&lt;br /&gt;
# Pruebas usuario practica&lt;br /&gt;
su practica&lt;br /&gt;
cat pruebas&lt;br /&gt;
echo &amp;quot;probando&amp;quot; &amp;gt; pruebas&lt;br /&gt;
exit&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Paso 6: Procesos =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== ps ==&lt;br /&gt;
&lt;br /&gt;
Sirve para ver que procesos están ejecutándose en el sistema, veamos un ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ps aux  # con la opción aux mostraremos todos los procesos del sistema&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cada línea es un proceso, y cada proceso muestra su PID, usuario, cantidad de&lt;br /&gt;
memoria y cpu utilizada, comando y otros detalles.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
man kill &amp;amp;  # añadir el &amp;amp; al final de un comando hace que este se ejecute en segundo plano, por lo que se quedará abierto&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La salida de este comando nos mostrará el PID que tiene ese proceso que acabamos&lt;br /&gt;
de ejecutar, vamos a comprobarlo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ps aux | grep &amp;quot;man kill&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Veremos que el PID coincide.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== kill ==&lt;br /&gt;
&lt;br /&gt;
Este comando nos servirá para matar un proceso. kill se utiliza seguido de una&lt;br /&gt;
señal para enviar al proceso seguido de uno o varios PID. para ver las señales&lt;br /&gt;
disponibles, podemos listarlas:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kill -l&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Las más utilizadas suele ser SIGTERM y SIGKILL, la primera intenta terminar el&lt;br /&gt;
proceso de forma poco abrupta, y la segunda suele utilizarse cuando el proceso&lt;br /&gt;
no atiende a esta primera señal. Vamos ahora a terminar el proceso que creamos&lt;br /&gt;
antes, si no recordamos el PID, busquémoslo de nuevo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ps aux | grep &amp;quot;man kill&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enviamos señal para terminar el proceso y comprobamos que ha terminado:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kill -SIGTERM 8470&lt;br /&gt;
ps aux | grep &amp;quot;man kill&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
También podemos notar que en el listado de señales, hay unos números, podemos&lt;br /&gt;
utilizar esos números en vez de las palabras, por ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
man kill &amp;amp;&lt;br /&gt;
kill -15 PID_COMANDO_PREVIO&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Comprobamos que el proceso ha terminado correctamente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ps aux | grep &amp;quot;man kill&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Paso 7: Estado CPU, RAM y Disco =&lt;br /&gt;
&lt;br /&gt;
== top ==&lt;br /&gt;
&lt;br /&gt;
Este comando nos servirá para ver el listado de procesos y el estado de la CPU y&lt;br /&gt;
memoria.&lt;br /&gt;
&lt;br /&gt;
Probemos el comando y observemos detalladamente la salida:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
top&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para salir, pulsamos q.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== df y du ==&lt;br /&gt;
&lt;br /&gt;
df (disk free) y du (disk usage). Ambas son utilidades para mostrar el uso de&lt;br /&gt;
los discos.&lt;br /&gt;
&lt;br /&gt;
Con df mostraremos la información del espacio en cada dispositivo montado:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
df&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Estos comandos que nos muestran el tamaño de los ficheros, casi siempre tienen&lt;br /&gt;
una opción para mostrarlo en un formato más legible (-h)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
df -h&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mucho mejor.&lt;br /&gt;
&lt;br /&gt;
Ahora veamos el comando du, el cual nos mostrará el tamaño de un fichero o&lt;br /&gt;
directorio y sus subdirectorios, no olvidemos el -h:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
du -h /home/ubuntu&lt;br /&gt;
du -h /home/ubuntu/pruebas&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Si solo quisíeramos saber el total de una carpeta y nos nos interesan sus&lt;br /&gt;
subcarpetas, podemos utilizar la opción -s:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
du -sh /home/ubuntu&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== free ==&lt;br /&gt;
&lt;br /&gt;
Sirve para ver el estado de la memoria, como siempre, opción -h:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
free -h&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== lsblk ==&lt;br /&gt;
&lt;br /&gt;
Nos muestra la información de todos los dispositivos de bloques (discos duros,&lt;br /&gt;
pendrivers, CD_ROM, SSD, ...).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lsblk&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En la siguiente práctica se utilizará más a fondo este comando, ya que&lt;br /&gt;
trabajaremos con dispositivos.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Paso 8: Gestión de paquetes de software y repositorios =&lt;br /&gt;
&lt;br /&gt;
Los sistemas Linux incluyen, además de las herramientas básicas del sistema operativo, repositorios de software que puede ser opcionalmente instalados por el administrador del sistema. Los fabricantes de las distribuciones de Linux incluyen paquetes de software listos para ser instalados que se integran con el sistema.&lt;br /&gt;
&lt;br /&gt;
Un paquete incluye el software necesario para que una cierta aplicación funcione correctamente, así como sus paquetes de dependencia.&lt;br /&gt;
&lt;br /&gt;
En Ubuntu, la herramienta de gestión de paquetes de software y repositorios se llama '''apt'''.&lt;br /&gt;
&lt;br /&gt;
=== Listado de repositorios de paquetes de software ===&lt;br /&gt;
&lt;br /&gt;
En Ubuntu el listado de repositorios se encuentra en el fichero /etc/apt/sources.list. Podemos comprobar que repositorios tenemos añadido:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat /etc/apt/sources.list&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Actualización del listado de paquetes de software ===&lt;br /&gt;
&lt;br /&gt;
Para actualizar el listado de paquetes utilizaremos el comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt update&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Instalación un nuevo paquete ===&lt;br /&gt;
&lt;br /&gt;
Para instalar un nuevo paquete, utilizaremos la orden install, por ejemplo, vamos a instalar tree, similar al ls pero muestra el arbol de directorios:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt install tree&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Desinstalación de un paquete ===&lt;br /&gt;
&lt;br /&gt;
Usaremos la orden purge o la orden remove, purge nos lo eliminad todo, y remove mantiene la configuración en el caso de que el paquete la tuviese. Vamos a eliminar el paquete instalado previamente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt purge tree&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Paso 9: Módulos =&lt;br /&gt;
&lt;br /&gt;
Los módulos del kernel de Linux son partes que podemos añadir o quitar de forma&lt;br /&gt;
sencilla con el fin de añadir o quitar funcionalidad. Por ejemplo, algunas de&lt;br /&gt;
estas funcionalidades son:&lt;br /&gt;
&lt;br /&gt;
* Registrar temperaturas de nuestros componentes&lt;br /&gt;
* Hacer funcionr la tarjeta de red wifi&lt;br /&gt;
* Cargar los drivers de una tarjeta gráfica&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== lsmod ==&lt;br /&gt;
&lt;br /&gt;
Comando para ver los módulos que estamos usando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lsmod&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== lspci y usb-devices ==&lt;br /&gt;
&lt;br /&gt;
Estos comandos nos servirán para ver el hardware que está conectado a nuestro&lt;br /&gt;
ordenador. Con lspci veremos el listado del hardware integrado y con usb-devices&lt;br /&gt;
el que está conectado por hardware.&lt;br /&gt;
&lt;br /&gt;
Normalmente, como los módulos se utilizan para dar funcionalidad un hardware,&lt;br /&gt;
aquí en los listado de hardware podremos ver que módulo está utilizando cada&lt;br /&gt;
hardware:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lspci -v&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Veremos una línea en algunos dispositivos que nos diga que módulo estamos&lt;br /&gt;
usando, pongo un pequeño trozo de la salida del comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
00:1f.2 SATA controller: Intel Corporation 82801IR/IO/IH (ICH9R/DO/DH) 6 port SATA Controller [AHCI mode] (rev 02) (prog-if 01 [AHCI 1.0])&lt;br /&gt;
    Subsystem: Red Hat, Inc. QEMU Virtual Machine&lt;br /&gt;
    Flags: bus master, fast devsel, latency 0, IRQ 35&lt;br /&gt;
    I/O ports at c0c0 [size=32]&lt;br /&gt;
    Memory at fcc1d000 (32-bit, non-prefetchable) [size=4K]&lt;br /&gt;
    Capabilities: &amp;lt;access denied&amp;gt;&lt;br /&gt;
    Kernel driver in use: ahci&lt;br /&gt;
    Kernel modules: ahci&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vemos que el hardware INTEl Corporation está utilizando el módulo ahci.&lt;br /&gt;
&lt;br /&gt;
Probemos ahora con usb-devices:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
usb-devices&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Veamos un trozo de código:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
T:  Bus=01 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#=  2 Spd=480 MxCh= 0&lt;br /&gt;
D:  Ver= 2.00 Cls=00(&amp;gt;ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs=  1&lt;br /&gt;
P:  Vendor=0627 ProdID=0001 Rev=00.00&lt;br /&gt;
S:  Manufacturer=QEMU&lt;br /&gt;
S:  Product=QEMU USB Tablet&lt;br /&gt;
S:  SerialNumber=42&lt;br /&gt;
C:  #Ifs= 1 Cfg#= 1 Atr=a0 MxPwr=100mA&lt;br /&gt;
I:  If#= 0 Alt= 0 #EPs= 1 Cls=03(HID  ) Sub=00 Prot=00 Driver=usbhid&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vemos que el teclado está utilizando el módulo usbhid&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== insmod ==&lt;br /&gt;
&lt;br /&gt;
Sirve para cargar un módulo en el kernel, imaginemos que tenemos un módulo que&lt;br /&gt;
se llama modulo1:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo insmod modulo1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== rmmod ==&lt;br /&gt;
&lt;br /&gt;
Sirve para eliminar un módulo de kernel. Imaginemos que queremos borrar un&lt;br /&gt;
módulo cargado anteriormente con el nombre modulo1:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo rmmod modulo1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Marramfer12</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Virtualizaci%C3%B3n_con_libvirt&amp;diff=4558</id>
		<title>Virtualización con libvirt</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Virtualizaci%C3%B3n_con_libvirt&amp;diff=4558"/>
				<updated>2019-11-13T14:41:30Z</updated>
		
		<summary type="html">&lt;p&gt;Marramfer12: /* Paso 8: Instalación Manual de SO en VVM */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Para la realización de esta práctica necesitará de una imagen de Ubuntu Cloud que descargaremos de https://cloud-images.ubuntu.com/ y necesitaremos un&lt;br /&gt;
sistema anfitrión con Ubuntu 18.04.&lt;br /&gt;
&lt;br /&gt;
En esta práctica se empleará la imagen descargada de la web Ubuntu Cloud y se hará uso de la herramienta '''cloud-init''' para configurarla.&lt;br /&gt;
&lt;br /&gt;
A continuación, utilizaremos la imagen de Ubuntu ya configurada para ser importada al software de virtualización '''libvirt'''.&lt;br /&gt;
&lt;br /&gt;
= Paso 1: Descarga de la imagen Ubuntu Cloud =&lt;br /&gt;
&lt;br /&gt;
Entramos en https://cloud-images.ubuntu.com/ y descargamos la imagen de Ubuntu 18.04 LTS (Long Time Support).&lt;br /&gt;
&lt;br /&gt;
Puedes descargarla directamente con la orden ''wget'':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
wget https://cloud-images.ubuntu.com/bionic/current/bionic-server-cloudimg-amd64.img&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
si comenzó a descargar verás una salida similar a esta:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
-2019-08-06 12:26:26--  https://cloud-images.ubuntu.com/bionic/current/bionic-server-cloudimg-amd64.img&lt;br /&gt;
Resolviendo cloud-images.ubuntu.com (cloud-images.ubuntu.com)... 91.189.88.89, 2001:67c:1560:8001::8001&lt;br /&gt;
Conectando con cloud-images.ubuntu.com (cloud-images.ubuntu.com)[91.189.88.89]:443... conectado.&lt;br /&gt;
Petición HTTP enviada, esperando respuesta... 200 OK&lt;br /&gt;
Longitud: 343474176 (328M) [application/octet-stream]&lt;br /&gt;
Grabando a: “bionic-server-cloudimg-amd64.img”&lt;br /&gt;
&lt;br /&gt;
bionic-server-cloudimg-amd64.img.   0%[                                                              ]   2,21M   472KB/s    eta 14m 6s&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Espera hasta que la imagen esté descargada al 100%.&lt;br /&gt;
&lt;br /&gt;
= Paso 2: Instalación del paquete cloud-init =&lt;br /&gt;
&lt;br /&gt;
A continuación, tienes que instalar los [[paquetes]] que ofrecen la herramienta ''cloud-init'' para configurar la imagen de Ubuntu que has descargado, estos paquetes son:&lt;br /&gt;
&lt;br /&gt;
* '''cloud-init''': herramienta para configurar una imagen de Ubuntu cloud.&lt;br /&gt;
* '''cloud-image-utils''': esta herramienta es complementaria a cloud-init y sirve para modificar imágenes de Ubuntu cloud.&lt;br /&gt;
&lt;br /&gt;
Podemos instalar estos paquetes con la herramienta '''apt''' desde el intérprete de órdenes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt install cloud-init cloud-image-utils&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''En los ordenadores del aula de prácticas estos paquetes ya estarán preinstalados, con lo que puedes saltarte este paso''.&lt;br /&gt;
&lt;br /&gt;
= Paso 3: Configuración de la imagen de Ubuntu con cloud-init =&lt;br /&gt;
&lt;br /&gt;
Para configurar la imagen de Ubuntu cloud, hay que crear un fichero de configuración para la herramienta '''cloud-init'''. Este fichero empieza siempre por la línea #cloud-config y se estructura en formato [https://es.wikipedia.org/wiki/YAML yaml], el contenido del fichero ''cloud.cfg'' sería el siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#cloud-config&lt;br /&gt;
password: qwerty123&lt;br /&gt;
chpasswd: { expire: False }&lt;br /&gt;
ssh_pwauth: True&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
El ejemplo anterior muestra cómo configurar la imagen descargada para que disponga del usuario ''ubuntu'', y en este caso, la contraseña es ''querty123'', y que se pueda acceder a dicho usuario por medio de ''[[ssh]]''.&lt;br /&gt;
&lt;br /&gt;
Podemos configurar la imagen para que apliquen estos cambios con el siguiente comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cloud-localds media.img cloud.cfg&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Esta aplicación genera un fichero imagen que será empleado para configurar la imagen de Ubuntu cloud que has descargado.&lt;br /&gt;
&lt;br /&gt;
Dispones de más información suplementaria sobre como usar [[cloud-init]].&lt;br /&gt;
&lt;br /&gt;
= Paso 4: Instalación de libvirt e importación de imagenes =&lt;br /&gt;
&lt;br /&gt;
Para instalar libvirt lo hacemos con la herramienta '''apt''' desde el intérprete de órdenes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt install virt-manager&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''En los ordenadores del aula de prácticas este paquete ya estará preinstalado, con lo que puedes saltarte la orden anterior''.&lt;br /&gt;
&lt;br /&gt;
[[Archivo:virt-manager.png|thumb|Interfaz de virt-manager.]]&lt;br /&gt;
&lt;br /&gt;
Una vez instalada podemos lanzar virt-manager desde el intérprete de órdenes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virt-manager&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para importar la imagen de Ubuntu cloud que hemos descargado a la máquina virtual, desde un intérprete de órdenes en el anfitrión (¡sin cerrar la ventana de virt-manager de la que ya disponemos!), vamos a copiar la imagen descargada en el paso 1 y la imagen generada en el paso 3 en el directorio de trabajo de virt-manager que se encuentra en ''/var/lib/libvirt/images''. Para ello, desde el intérprete de órdenes que hemos lanzado y desde el directorio donde tengamos las imágenes anteriormente generadas, invocamos las siguientes ordenes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo cp bionic-server-cloudimg-amd64.img /var/lib/libvirt/images&lt;br /&gt;
sudo cp media.img /var/lib/libvirt/images&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Con estas ordenes, estas copiando la imagen de Ubuntu cloud descargada y la imagen generada por cloud-localds en la carpeta''/var/lib/libvirt/images'' que contiene las imagenes de las que dispone la virt-manager.&lt;br /&gt;
&lt;br /&gt;
[[Archivo:virt-manager-paso4-5.png|thumb|Seleccionar imagen de Ubuntu descargada.]]&lt;br /&gt;
&lt;br /&gt;
Volvemos a la interfaz gráfica de virt-manager una vez copiadas las imágenes y creamos una nueva máquina virtual empleando dichas imágenes:&lt;br /&gt;
&lt;br /&gt;
# Desde la interfaz de virt-manager creamos una nueva Máquina Virtual ''(Archivo --&amp;gt; Nueva máquina virtual)''&lt;br /&gt;
# En la nueva ventana que se abre, seleccionamos ''Medio de instalación local'' y pulsamos ''Adelante''&lt;br /&gt;
# En ''Choose ISO or CDROM install media'' seleccionamos la imagen de ''media.img''' creada en el paso 3; y desmarcamos la casilla de ''Detección automática'' para seleccionar nuestro Sistema Operativo, en este caso, Ubuntu 18.04 LTS. Vemos que todo queda como en la imagen y pulsamos ''Adelante'' [[Archivo:virt-manager-paso4-3.png|thumb|Elegir imagen de configuración y SO.]]&lt;br /&gt;
# Seleccionamos la cantidad de memoria y de CPU que queremos, por defecto 2048 de Memoria y 1 CPU está bien.&lt;br /&gt;
# En el almacenamiento, vamos a seleccionar un almacenaje personalizado, y aquí sera donde seleccionemos la imagen de ubuntu descargada, en nuestro caso ''bionic-server-cloudimg-amd64.img'' y pulsamos ''Adelante'' &lt;br /&gt;
# En el último paso, podremos selecionar la red, por ahora dejaremos [[NAT]] por defecto y pulsamos '''Finalizar''' (Si nos pregunta si queremos crear una red [[NAT]] porque no está creada, le decimos que sí).&lt;br /&gt;
&lt;br /&gt;
Ya tenemos nuestra máquina virtual creada con nuestra configuración. Ahora vamos a probar que todo funciona correctamente. La máquina debería de estar arrancando y debería de aparecer el mensaje de login. [[Archivo:virt-manager-login.png|thumb|Login de ubuntu.]]&lt;br /&gt;
&lt;br /&gt;
Utilizamos como usuario ''ubuntu'', que es el usuario por defecto y como contraseña empleamos la que hayamos elegido en el paso 3. Con esto nos validamos en el sistema con éxito. [[Archivo:virt-manager-logged.png|thumb|Usuario ya validado, en el intérprete de ordenes]]&lt;br /&gt;
&lt;br /&gt;
Ya disponemos de un intérprete de ordenes en nuestro sistema operativo Ubuntu cloud que corre sobre nuestra máquina virtual.&lt;br /&gt;
&lt;br /&gt;
'''Nota''': El teclado de la imagen de Ubuntu cloud que corre en la máquina virtual está en inglés, puedes cambiarlo con la siguiente orden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo loadkeys es&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Paso 5: Configuración de la red en libvirt =&lt;br /&gt;
&lt;br /&gt;
Antes de ver los detalles de red, vamos a hacer una pequeña diferencia entre las dos ventanas que tenemos abiertas, virt-manager principal y virt-manager máquina de ubuntu ejecutándose. En la primera tendremos las configuraciones generales y en la segunda tendremos las configuraciones de una máquina virtual concreta, en nuestro caso, la configuración de la máquina virtual de ubuntu.&lt;br /&gt;
&lt;br /&gt;
Con esto, veremos dos formas de saber la IP de nuestra máquina virtual:&lt;br /&gt;
&lt;br /&gt;
# En la ventana de nuestra máquina virtual de ubuntu, vamos a cambiar la vista y ver los detalles de nuestra máquina. ''Vista --&amp;gt; Detalles''. Aquí tenemos toda la configuración de nuestra máquina, pero solo vamos a centrarnos en la Interfaz de red virtual, que es donde podremos ver cual es pa IP que tiene asiganada nuestra máquina y cual es la fuente de red que se está utilizando. [[Archivo:virt-manager-nic.png|thumb|Interfaz de red virtual.]]&lt;br /&gt;
# La otra opción es utilizando comandos, podemos utilizar ''ip address'' en la consola de nuestra máquina virtual.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ sudo ip address&lt;br /&gt;
1: lo: &amp;lt;LOOPBACK,UP,LOWER_UP&amp;gt; mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000&lt;br /&gt;
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00&lt;br /&gt;
    inet 127.0.0.1/8 scope host lo&lt;br /&gt;
       valid_lft forever preferred_lft forever&lt;br /&gt;
    inet6 ::1/128 scope host &lt;br /&gt;
       valid_lft forever preferred_lft forever&lt;br /&gt;
2: ens3: &amp;lt;BROADCAST,MULTICAST,UP,LOWER_UP&amp;gt; mtu 1500 qdisc pfifo_fast state UP group default qlen 1000&lt;br /&gt;
    link/ether 3d:f0:ee:49:aa:22 brd ff:ff:ff:ff:ff:ff&lt;br /&gt;
    inet 192.168.100.168/24 brd 192.168.2.255 scope global eth0&lt;br /&gt;
       valid_lft forever preferred_lft forever&lt;br /&gt;
    inet6 fe80::3e97:eff:fe39:dd20/64 scope link &lt;br /&gt;
       valid_lft forever preferred_lft forever&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Que nos permite comprobar que estamos utilizando la dirección IP 192.168.100.168.&lt;br /&gt;
&lt;br /&gt;
Si la interfaz no muestra una dirección IP, puedes forzar la obtención de una dirección IP desde la máquina virtual para la interfaz ''ens3'' con la orden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo dhclient ens3&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vamos a comprobar ahora desde un terminal en el anfitrión que alcanzamos a nuestra máquina virtual.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ping 192.168.100.168&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Deberíamos de ver una salida similar a la siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
PING 192.168.100.168 (192.168.100.168) 56(84) bytes of data.&lt;br /&gt;
64 bytes from 192.168.100.168: icmp_seq=1 ttl=64 time=0.397 ms&lt;br /&gt;
64 bytes from 192.168.100.168: icmp_seq=2 ttl=64 time=0.409 ms&lt;br /&gt;
64 bytes from 192.168.100.168: icmp_seq=3 ttl=64 time=0.321 ms&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Si hubiere algún problema de conectividad la salida sería de este tipo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
PING 192.168.100.168 (192.168.100.168) 56(84) bytes of data.&lt;br /&gt;
From 192.168.100.1 icmp_seq=1 Destination Host Unreachable&lt;br /&gt;
From 192.168.100.1 icmp_seq=2 Destination Host Unreachable&lt;br /&gt;
From 192.168.100.1 icmp_seq=3 Destination Host Unreachable&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En dicho caso, puedes forzar la obtención de una dirección IP con la orden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo dhclient ens3&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Esto quiere decir que la configuración de red es incorrecta, o quizás que la dirección IP de tu máquina virtual no es 192.168.100.168 :-).&lt;br /&gt;
&lt;br /&gt;
Dispones de más información suplementaria sobre la [[configuración de red en libvirt]].&lt;br /&gt;
&lt;br /&gt;
= Paso 6: Clonado de máquinas virtuales =&lt;br /&gt;
&lt;br /&gt;
Vamos a reutilizar la configuración y la máquina virtual creada, para crear varias iguales. Empecemos:&lt;br /&gt;
&lt;br /&gt;
# Apagamos la máquina virtual si la tenemos encendida, para que nos permita hacer un clonado. ''Máquina virtual --&amp;gt; Apagar --&amp;gt; Apagar''&lt;br /&gt;
# En la ventana principal, pulsar botón derecho encima de la máquina virtual que queramos clonar, y pulsar ''Clonar ...''&lt;br /&gt;
# En la ventana que nos aparece, por defecto seleccionará la misma red y creará una MAC diferente para la nueva máquina y clonará la imagen de ubuntu que usamos de almacenamiento. Le damos un nuevo nombre a nuestra máquina, y pulsamos en ''Clonar''.&lt;br /&gt;
# Repetimos este paso hasta que tengamos toda las máquinas virtuales deseadas, en nuestro caso, solo crearemos una para probar los detalles de red.&lt;br /&gt;
&lt;br /&gt;
Ahora arrancaremos la máquina original y la clonada, y vamos a comprobar que ambas están en la misma red y que pueden verse entre ellas. Como comentamos en el paso anterior, comprobaremos la IP de la máquina virtual original y de la clonada, y haremos ping desde dentro de las máquinas para comprobar que se ven.&lt;br /&gt;
&lt;br /&gt;
Ejemplo:&lt;br /&gt;
&lt;br /&gt;
* Máquina original tiene IP 192.168.100.168&lt;br /&gt;
* Máquina clonada tiene IP 192.168.100.169&lt;br /&gt;
* Desde la máquina original haremos un ping 192.168.100.169&lt;br /&gt;
* Desde la máquina clonada haremos un ping 192.168.100.168&lt;br /&gt;
* Desde ambas máquinas, comprobaremos que la puerta de enlace es la misma, haciendo un ''ip route''.&lt;br /&gt;
* Desde la máquina host, deberíamos de obtener ping hacía las dos máquinas&lt;br /&gt;
&lt;br /&gt;
= Paso 7: Instantáneas de máquinas virtuales =&lt;br /&gt;
&lt;br /&gt;
Las instantáneas nos permiten almacenar una captura del estado de la ejecución de una máquina virtual en un cierto instante tiempo que podremos restaurar cuando sea necesario. Las instantáneas te serán útiles si tienes trabajo a medio hacer en la máquina virtual, de manera que quieras guardar lo que has hecho para restaurarlo posteriormente.&lt;br /&gt;
&lt;br /&gt;
Para crear una instantánea, accedemos a la máquina virtual en ejecución y desplegamos el menú ''Vista'' y pinchamos sobre ''Capturas de Pantalla'' (Snapshot). Después pulsamos en el botón ''+'' que aparece abajo a la izquierda, indicamos el nombre de la instantánea y le damos a ''Finalizar'.&lt;br /&gt;
&lt;br /&gt;
La creación de instantáneas toma algo de tiempo, sé paciente. Puedes almacenar tantas instantáneas como quieras. El nombre ''Captura de pantalla'' es una traducción poco afortunada del inglés ''snapshot'' que se refiere al término ''instantánea''.&lt;br /&gt;
&lt;br /&gt;
= Paso 8: Instalación Manual de SO en VVM =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1) Ubuntu net install (ubuntu minimalCD):&lt;br /&gt;
	64bit 18.04&lt;br /&gt;
&lt;br /&gt;
[[Archivo:WEB DONDE INSTALARLA .png|200px|thumb|right|texto alternativo]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:DESCARGAR UBUNTU .png|200px|thumb|right|texto alternativo]]&lt;br /&gt;
&lt;br /&gt;
2) Creamos una nueva máquina virtual:&lt;br /&gt;
	(medio de instalación local (imagen ISO o CDROM))&lt;br /&gt;
&lt;br /&gt;
3) Install&lt;br /&gt;
&lt;br /&gt;
[[Archivo:INSTALL.png|200px|thumb|right|texto alternativo]]&lt;br /&gt;
&lt;br /&gt;
4) Idioma -&amp;gt; Spanish&lt;br /&gt;
&lt;br /&gt;
5) Teclado: DETECT? NO -&amp;gt; Spanish&lt;br /&gt;
	(Dvorak es similar a la máquina de escribir inglesa) -&amp;gt; NO&lt;br /&gt;
&lt;br /&gt;
[[Archivo:CONFIGURACIÓN TECLADO.png |200px|thumb|right|texto alternativo]]&lt;br /&gt;
&lt;br /&gt;
6) Escoger réplica ubuntu: Spanish, en blanco y continuamos&lt;br /&gt;
&lt;br /&gt;
[[Archivo:RÉPLICA DE UBUNTU .png |200px|thumb|right|texto alternativo]]&lt;br /&gt;
&lt;br /&gt;
7) Nombre de usuario: MARINARF&lt;br /&gt;
&lt;br /&gt;
8) Nombre para la cuenta: marinarf&lt;br /&gt;
&lt;br /&gt;
9) Contraseña: qwerty123&lt;br /&gt;
&lt;br /&gt;
10) Configurar el reloj: NO, continuar y marcar Península&lt;br /&gt;
&lt;br /&gt;
11) Método de particionado: Guiado -&amp;gt; utilizar todo el disco&lt;br /&gt;
&lt;br /&gt;
12) Sí&lt;br /&gt;
&lt;br /&gt;
13) Administrar actualizaciones: SIN ACTUALIZACIONES AUTOMÁTICAS&lt;br /&gt;
&lt;br /&gt;
[[Archivo:SIN ACTUALIZACIONES AUTOMÁTICAS.png|200px|thumb|right|texto alternativo]]&lt;br /&gt;
&lt;br /&gt;
14) Programas a instalar: Lotes de paquetes de software &lt;br /&gt;
	(Si marcas alguno, tarda más en instalar)&lt;br /&gt;
&lt;br /&gt;
15) GRUB: Sí&lt;br /&gt;
&lt;br /&gt;
16) Hora UTC: Sí&lt;br /&gt;
&lt;br /&gt;
FIN&lt;br /&gt;
&lt;br /&gt;
_____________________________________________________________________________________&lt;br /&gt;
&lt;br /&gt;
 ·) INSTALACIÓN DE WINDOWS:&lt;br /&gt;
&lt;br /&gt;
&amp;gt; Versión de evaluación de Windows: windows 2016 evaluation &lt;br /&gt;
&lt;br /&gt;
&amp;gt; hhtps://dennisnotes.com/note/20180614-ubuntu-18 ...  (libvirt install windows)&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
 ·) EXTRAS:&lt;br /&gt;
&lt;br /&gt;
· Nas: Network Attack Story = smart&lt;br /&gt;
&lt;br /&gt;
· Carpeta temporal rutkit seguir en el sistema sin que lo sepa el dueño = Peligro&lt;br /&gt;
- Si quitamos lo temporal = más seguridad&lt;/div&gt;</summary>
		<author><name>Marramfer12</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Virtualizaci%C3%B3n_con_libvirt&amp;diff=4557</id>
		<title>Virtualización con libvirt</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Virtualizaci%C3%B3n_con_libvirt&amp;diff=4557"/>
				<updated>2019-11-13T14:39:59Z</updated>
		
		<summary type="html">&lt;p&gt;Marramfer12: /* Paso 8: Instalación Manual de SO en VVM */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Para la realización de esta práctica necesitará de una imagen de Ubuntu Cloud que descargaremos de https://cloud-images.ubuntu.com/ y necesitaremos un&lt;br /&gt;
sistema anfitrión con Ubuntu 18.04.&lt;br /&gt;
&lt;br /&gt;
En esta práctica se empleará la imagen descargada de la web Ubuntu Cloud y se hará uso de la herramienta '''cloud-init''' para configurarla.&lt;br /&gt;
&lt;br /&gt;
A continuación, utilizaremos la imagen de Ubuntu ya configurada para ser importada al software de virtualización '''libvirt'''.&lt;br /&gt;
&lt;br /&gt;
= Paso 1: Descarga de la imagen Ubuntu Cloud =&lt;br /&gt;
&lt;br /&gt;
Entramos en https://cloud-images.ubuntu.com/ y descargamos la imagen de Ubuntu 18.04 LTS (Long Time Support).&lt;br /&gt;
&lt;br /&gt;
Puedes descargarla directamente con la orden ''wget'':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
wget https://cloud-images.ubuntu.com/bionic/current/bionic-server-cloudimg-amd64.img&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
si comenzó a descargar verás una salida similar a esta:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
-2019-08-06 12:26:26--  https://cloud-images.ubuntu.com/bionic/current/bionic-server-cloudimg-amd64.img&lt;br /&gt;
Resolviendo cloud-images.ubuntu.com (cloud-images.ubuntu.com)... 91.189.88.89, 2001:67c:1560:8001::8001&lt;br /&gt;
Conectando con cloud-images.ubuntu.com (cloud-images.ubuntu.com)[91.189.88.89]:443... conectado.&lt;br /&gt;
Petición HTTP enviada, esperando respuesta... 200 OK&lt;br /&gt;
Longitud: 343474176 (328M) [application/octet-stream]&lt;br /&gt;
Grabando a: “bionic-server-cloudimg-amd64.img”&lt;br /&gt;
&lt;br /&gt;
bionic-server-cloudimg-amd64.img.   0%[                                                              ]   2,21M   472KB/s    eta 14m 6s&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Espera hasta que la imagen esté descargada al 100%.&lt;br /&gt;
&lt;br /&gt;
= Paso 2: Instalación del paquete cloud-init =&lt;br /&gt;
&lt;br /&gt;
A continuación, tienes que instalar los [[paquetes]] que ofrecen la herramienta ''cloud-init'' para configurar la imagen de Ubuntu que has descargado, estos paquetes son:&lt;br /&gt;
&lt;br /&gt;
* '''cloud-init''': herramienta para configurar una imagen de Ubuntu cloud.&lt;br /&gt;
* '''cloud-image-utils''': esta herramienta es complementaria a cloud-init y sirve para modificar imágenes de Ubuntu cloud.&lt;br /&gt;
&lt;br /&gt;
Podemos instalar estos paquetes con la herramienta '''apt''' desde el intérprete de órdenes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt install cloud-init cloud-image-utils&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''En los ordenadores del aula de prácticas estos paquetes ya estarán preinstalados, con lo que puedes saltarte este paso''.&lt;br /&gt;
&lt;br /&gt;
= Paso 3: Configuración de la imagen de Ubuntu con cloud-init =&lt;br /&gt;
&lt;br /&gt;
Para configurar la imagen de Ubuntu cloud, hay que crear un fichero de configuración para la herramienta '''cloud-init'''. Este fichero empieza siempre por la línea #cloud-config y se estructura en formato [https://es.wikipedia.org/wiki/YAML yaml], el contenido del fichero ''cloud.cfg'' sería el siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#cloud-config&lt;br /&gt;
password: qwerty123&lt;br /&gt;
chpasswd: { expire: False }&lt;br /&gt;
ssh_pwauth: True&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
El ejemplo anterior muestra cómo configurar la imagen descargada para que disponga del usuario ''ubuntu'', y en este caso, la contraseña es ''querty123'', y que se pueda acceder a dicho usuario por medio de ''[[ssh]]''.&lt;br /&gt;
&lt;br /&gt;
Podemos configurar la imagen para que apliquen estos cambios con el siguiente comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cloud-localds media.img cloud.cfg&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Esta aplicación genera un fichero imagen que será empleado para configurar la imagen de Ubuntu cloud que has descargado.&lt;br /&gt;
&lt;br /&gt;
Dispones de más información suplementaria sobre como usar [[cloud-init]].&lt;br /&gt;
&lt;br /&gt;
= Paso 4: Instalación de libvirt e importación de imagenes =&lt;br /&gt;
&lt;br /&gt;
Para instalar libvirt lo hacemos con la herramienta '''apt''' desde el intérprete de órdenes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt install virt-manager&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''En los ordenadores del aula de prácticas este paquete ya estará preinstalado, con lo que puedes saltarte la orden anterior''.&lt;br /&gt;
&lt;br /&gt;
[[Archivo:virt-manager.png|thumb|Interfaz de virt-manager.]]&lt;br /&gt;
&lt;br /&gt;
Una vez instalada podemos lanzar virt-manager desde el intérprete de órdenes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virt-manager&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para importar la imagen de Ubuntu cloud que hemos descargado a la máquina virtual, desde un intérprete de órdenes en el anfitrión (¡sin cerrar la ventana de virt-manager de la que ya disponemos!), vamos a copiar la imagen descargada en el paso 1 y la imagen generada en el paso 3 en el directorio de trabajo de virt-manager que se encuentra en ''/var/lib/libvirt/images''. Para ello, desde el intérprete de órdenes que hemos lanzado y desde el directorio donde tengamos las imágenes anteriormente generadas, invocamos las siguientes ordenes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo cp bionic-server-cloudimg-amd64.img /var/lib/libvirt/images&lt;br /&gt;
sudo cp media.img /var/lib/libvirt/images&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Con estas ordenes, estas copiando la imagen de Ubuntu cloud descargada y la imagen generada por cloud-localds en la carpeta''/var/lib/libvirt/images'' que contiene las imagenes de las que dispone la virt-manager.&lt;br /&gt;
&lt;br /&gt;
[[Archivo:virt-manager-paso4-5.png|thumb|Seleccionar imagen de Ubuntu descargada.]]&lt;br /&gt;
&lt;br /&gt;
Volvemos a la interfaz gráfica de virt-manager una vez copiadas las imágenes y creamos una nueva máquina virtual empleando dichas imágenes:&lt;br /&gt;
&lt;br /&gt;
# Desde la interfaz de virt-manager creamos una nueva Máquina Virtual ''(Archivo --&amp;gt; Nueva máquina virtual)''&lt;br /&gt;
# En la nueva ventana que se abre, seleccionamos ''Medio de instalación local'' y pulsamos ''Adelante''&lt;br /&gt;
# En ''Choose ISO or CDROM install media'' seleccionamos la imagen de ''media.img''' creada en el paso 3; y desmarcamos la casilla de ''Detección automática'' para seleccionar nuestro Sistema Operativo, en este caso, Ubuntu 18.04 LTS. Vemos que todo queda como en la imagen y pulsamos ''Adelante'' [[Archivo:virt-manager-paso4-3.png|thumb|Elegir imagen de configuración y SO.]]&lt;br /&gt;
# Seleccionamos la cantidad de memoria y de CPU que queremos, por defecto 2048 de Memoria y 1 CPU está bien.&lt;br /&gt;
# En el almacenamiento, vamos a seleccionar un almacenaje personalizado, y aquí sera donde seleccionemos la imagen de ubuntu descargada, en nuestro caso ''bionic-server-cloudimg-amd64.img'' y pulsamos ''Adelante'' &lt;br /&gt;
# En el último paso, podremos selecionar la red, por ahora dejaremos [[NAT]] por defecto y pulsamos '''Finalizar''' (Si nos pregunta si queremos crear una red [[NAT]] porque no está creada, le decimos que sí).&lt;br /&gt;
&lt;br /&gt;
Ya tenemos nuestra máquina virtual creada con nuestra configuración. Ahora vamos a probar que todo funciona correctamente. La máquina debería de estar arrancando y debería de aparecer el mensaje de login. [[Archivo:virt-manager-login.png|thumb|Login de ubuntu.]]&lt;br /&gt;
&lt;br /&gt;
Utilizamos como usuario ''ubuntu'', que es el usuario por defecto y como contraseña empleamos la que hayamos elegido en el paso 3. Con esto nos validamos en el sistema con éxito. [[Archivo:virt-manager-logged.png|thumb|Usuario ya validado, en el intérprete de ordenes]]&lt;br /&gt;
&lt;br /&gt;
Ya disponemos de un intérprete de ordenes en nuestro sistema operativo Ubuntu cloud que corre sobre nuestra máquina virtual.&lt;br /&gt;
&lt;br /&gt;
'''Nota''': El teclado de la imagen de Ubuntu cloud que corre en la máquina virtual está en inglés, puedes cambiarlo con la siguiente orden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo loadkeys es&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Paso 5: Configuración de la red en libvirt =&lt;br /&gt;
&lt;br /&gt;
Antes de ver los detalles de red, vamos a hacer una pequeña diferencia entre las dos ventanas que tenemos abiertas, virt-manager principal y virt-manager máquina de ubuntu ejecutándose. En la primera tendremos las configuraciones generales y en la segunda tendremos las configuraciones de una máquina virtual concreta, en nuestro caso, la configuración de la máquina virtual de ubuntu.&lt;br /&gt;
&lt;br /&gt;
Con esto, veremos dos formas de saber la IP de nuestra máquina virtual:&lt;br /&gt;
&lt;br /&gt;
# En la ventana de nuestra máquina virtual de ubuntu, vamos a cambiar la vista y ver los detalles de nuestra máquina. ''Vista --&amp;gt; Detalles''. Aquí tenemos toda la configuración de nuestra máquina, pero solo vamos a centrarnos en la Interfaz de red virtual, que es donde podremos ver cual es pa IP que tiene asiganada nuestra máquina y cual es la fuente de red que se está utilizando. [[Archivo:virt-manager-nic.png|thumb|Interfaz de red virtual.]]&lt;br /&gt;
# La otra opción es utilizando comandos, podemos utilizar ''ip address'' en la consola de nuestra máquina virtual.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ sudo ip address&lt;br /&gt;
1: lo: &amp;lt;LOOPBACK,UP,LOWER_UP&amp;gt; mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000&lt;br /&gt;
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00&lt;br /&gt;
    inet 127.0.0.1/8 scope host lo&lt;br /&gt;
       valid_lft forever preferred_lft forever&lt;br /&gt;
    inet6 ::1/128 scope host &lt;br /&gt;
       valid_lft forever preferred_lft forever&lt;br /&gt;
2: ens3: &amp;lt;BROADCAST,MULTICAST,UP,LOWER_UP&amp;gt; mtu 1500 qdisc pfifo_fast state UP group default qlen 1000&lt;br /&gt;
    link/ether 3d:f0:ee:49:aa:22 brd ff:ff:ff:ff:ff:ff&lt;br /&gt;
    inet 192.168.100.168/24 brd 192.168.2.255 scope global eth0&lt;br /&gt;
       valid_lft forever preferred_lft forever&lt;br /&gt;
    inet6 fe80::3e97:eff:fe39:dd20/64 scope link &lt;br /&gt;
       valid_lft forever preferred_lft forever&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Que nos permite comprobar que estamos utilizando la dirección IP 192.168.100.168.&lt;br /&gt;
&lt;br /&gt;
Si la interfaz no muestra una dirección IP, puedes forzar la obtención de una dirección IP desde la máquina virtual para la interfaz ''ens3'' con la orden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo dhclient ens3&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vamos a comprobar ahora desde un terminal en el anfitrión que alcanzamos a nuestra máquina virtual.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ping 192.168.100.168&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Deberíamos de ver una salida similar a la siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
PING 192.168.100.168 (192.168.100.168) 56(84) bytes of data.&lt;br /&gt;
64 bytes from 192.168.100.168: icmp_seq=1 ttl=64 time=0.397 ms&lt;br /&gt;
64 bytes from 192.168.100.168: icmp_seq=2 ttl=64 time=0.409 ms&lt;br /&gt;
64 bytes from 192.168.100.168: icmp_seq=3 ttl=64 time=0.321 ms&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Si hubiere algún problema de conectividad la salida sería de este tipo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
PING 192.168.100.168 (192.168.100.168) 56(84) bytes of data.&lt;br /&gt;
From 192.168.100.1 icmp_seq=1 Destination Host Unreachable&lt;br /&gt;
From 192.168.100.1 icmp_seq=2 Destination Host Unreachable&lt;br /&gt;
From 192.168.100.1 icmp_seq=3 Destination Host Unreachable&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En dicho caso, puedes forzar la obtención de una dirección IP con la orden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo dhclient ens3&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Esto quiere decir que la configuración de red es incorrecta, o quizás que la dirección IP de tu máquina virtual no es 192.168.100.168 :-).&lt;br /&gt;
&lt;br /&gt;
Dispones de más información suplementaria sobre la [[configuración de red en libvirt]].&lt;br /&gt;
&lt;br /&gt;
= Paso 6: Clonado de máquinas virtuales =&lt;br /&gt;
&lt;br /&gt;
Vamos a reutilizar la configuración y la máquina virtual creada, para crear varias iguales. Empecemos:&lt;br /&gt;
&lt;br /&gt;
# Apagamos la máquina virtual si la tenemos encendida, para que nos permita hacer un clonado. ''Máquina virtual --&amp;gt; Apagar --&amp;gt; Apagar''&lt;br /&gt;
# En la ventana principal, pulsar botón derecho encima de la máquina virtual que queramos clonar, y pulsar ''Clonar ...''&lt;br /&gt;
# En la ventana que nos aparece, por defecto seleccionará la misma red y creará una MAC diferente para la nueva máquina y clonará la imagen de ubuntu que usamos de almacenamiento. Le damos un nuevo nombre a nuestra máquina, y pulsamos en ''Clonar''.&lt;br /&gt;
# Repetimos este paso hasta que tengamos toda las máquinas virtuales deseadas, en nuestro caso, solo crearemos una para probar los detalles de red.&lt;br /&gt;
&lt;br /&gt;
Ahora arrancaremos la máquina original y la clonada, y vamos a comprobar que ambas están en la misma red y que pueden verse entre ellas. Como comentamos en el paso anterior, comprobaremos la IP de la máquina virtual original y de la clonada, y haremos ping desde dentro de las máquinas para comprobar que se ven.&lt;br /&gt;
&lt;br /&gt;
Ejemplo:&lt;br /&gt;
&lt;br /&gt;
* Máquina original tiene IP 192.168.100.168&lt;br /&gt;
* Máquina clonada tiene IP 192.168.100.169&lt;br /&gt;
* Desde la máquina original haremos un ping 192.168.100.169&lt;br /&gt;
* Desde la máquina clonada haremos un ping 192.168.100.168&lt;br /&gt;
* Desde ambas máquinas, comprobaremos que la puerta de enlace es la misma, haciendo un ''ip route''.&lt;br /&gt;
* Desde la máquina host, deberíamos de obtener ping hacía las dos máquinas&lt;br /&gt;
&lt;br /&gt;
= Paso 7: Instantáneas de máquinas virtuales =&lt;br /&gt;
&lt;br /&gt;
Las instantáneas nos permiten almacenar una captura del estado de la ejecución de una máquina virtual en un cierto instante tiempo que podremos restaurar cuando sea necesario. Las instantáneas te serán útiles si tienes trabajo a medio hacer en la máquina virtual, de manera que quieras guardar lo que has hecho para restaurarlo posteriormente.&lt;br /&gt;
&lt;br /&gt;
Para crear una instantánea, accedemos a la máquina virtual en ejecución y desplegamos el menú ''Vista'' y pinchamos sobre ''Capturas de Pantalla'' (Snapshot). Después pulsamos en el botón ''+'' que aparece abajo a la izquierda, indicamos el nombre de la instantánea y le damos a ''Finalizar'.&lt;br /&gt;
&lt;br /&gt;
La creación de instantáneas toma algo de tiempo, sé paciente. Puedes almacenar tantas instantáneas como quieras. El nombre ''Captura de pantalla'' es una traducción poco afortunada del inglés ''snapshot'' que se refiere al término ''instantánea''.&lt;br /&gt;
&lt;br /&gt;
= Paso 8: Instalación Manual de SO en VVM =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1) Ubuntu net install (ubuntu minimalCD):&lt;br /&gt;
	64bit 18.04&lt;br /&gt;
&lt;br /&gt;
[[Archivo:WEB DONDE INSTALARLA .png|200px|thumb|left|texto alternativo]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:DESCARGAR UBUNTU .png|200px|thumb|left|texto alternativo]]&lt;br /&gt;
&lt;br /&gt;
2) Creamos una nueva máquina virtual:&lt;br /&gt;
	(medio de instalación local (imagen ISO o CDROM))&lt;br /&gt;
&lt;br /&gt;
3) Install&lt;br /&gt;
&lt;br /&gt;
[[Archivo:INSTALL.png|200px|thumb|left|texto alternativo]]&lt;br /&gt;
&lt;br /&gt;
4) Idioma -&amp;gt; Spanish&lt;br /&gt;
&lt;br /&gt;
5) Teclado: DETECT? NO -&amp;gt; Spanish&lt;br /&gt;
	(Dvorak es similar a la máquina de escribir inglesa) -&amp;gt; NO&lt;br /&gt;
&lt;br /&gt;
[[Archivo:CONFIGURACIÓN TECLADO.png |200px|thumb|left|texto alternativo]]&lt;br /&gt;
&lt;br /&gt;
6) Escoger réplica ubuntu: Spanish, en blanco y continuamos&lt;br /&gt;
&lt;br /&gt;
[[Archivo:RÉPLICA DE UBUNTU .png |200px|thumb|left|texto alternativo]]&lt;br /&gt;
&lt;br /&gt;
7) Nombre de usuario: MARINARF&lt;br /&gt;
&lt;br /&gt;
8) Nombre para la cuenta: marinarf&lt;br /&gt;
&lt;br /&gt;
9) Contraseña: qwerty123&lt;br /&gt;
&lt;br /&gt;
10) Configurar el reloj: NO, continuar y marcar Península&lt;br /&gt;
&lt;br /&gt;
11) Método de particionado: Guiado -&amp;gt; utilizar todo el disco&lt;br /&gt;
&lt;br /&gt;
12) Sí&lt;br /&gt;
&lt;br /&gt;
13) Administrar actualizaciones: SIN ACTUALIZACIONES AUTOMÁTICAS&lt;br /&gt;
&lt;br /&gt;
[[Archivo:SIN ACTUALIZACIONES AUTOMÁTICAS.png|200px|thumb|left|texto alternativo]]&lt;br /&gt;
&lt;br /&gt;
14) Programas a instalar: Lotes de paquetes de software &lt;br /&gt;
	(Si marcas alguno, tarda más en instalar)&lt;br /&gt;
&lt;br /&gt;
15) GRUB: Sí&lt;br /&gt;
&lt;br /&gt;
16) Hora UTC: Sí&lt;br /&gt;
&lt;br /&gt;
FIN&lt;br /&gt;
&lt;br /&gt;
_____________________________________________________________________________________&lt;br /&gt;
&lt;br /&gt;
 ·) INSTALACIÓN DE WINDOWS:&lt;br /&gt;
&lt;br /&gt;
&amp;gt; Versión de evaluación de Windows: windows 2016 evaluation &lt;br /&gt;
&lt;br /&gt;
&amp;gt; hhtps://dennisnotes.com/note/20180614-ubuntu-18 ...  (libvirt install windows)&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
 ·) EXTRAS:&lt;br /&gt;
&lt;br /&gt;
· Nas: Network Attack Story = smart&lt;br /&gt;
&lt;br /&gt;
· Carpeta temporal rutkit seguir en el sistema sin que lo sepa el dueño = Peligro&lt;br /&gt;
- Si quitamos lo temporal = más seguridad&lt;/div&gt;</summary>
		<author><name>Marramfer12</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Administraci%C3%B3n_b%C3%A1sica&amp;diff=4556</id>
		<title>Administración básica</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Administraci%C3%B3n_b%C3%A1sica&amp;diff=4556"/>
				<updated>2019-11-13T14:36:45Z</updated>
		
		<summary type="html">&lt;p&gt;Marramfer12: /* cat */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Para realizar esta práctica utilizaremos una de las máquinas virtuales que generamos en la práctica anterior.&lt;br /&gt;
&lt;br /&gt;
En esta práctica aprenderemos a utilizar el interprete de ordenes (también conocido como ''[https://www.traficantes.net/sites/default/files/pdfs/En%20el%20principio%20fue...-TdS.pdf línea de comandos]'') y a aprender nociones básicas de administración de sistemas Linux.&lt;br /&gt;
&lt;br /&gt;
= Paso 0: Breve introducción al sistema Linux =&lt;br /&gt;
&lt;br /&gt;
== Estructura básica del sistema de archivos ==&lt;br /&gt;
&lt;br /&gt;
En un sistema Linux, todas las carpetas y ficheros en el sistema de fichero pende de la carpeta raíz que se representa con la /.&lt;br /&gt;
&lt;br /&gt;
 /&lt;br /&gt;
 ├── bin&lt;br /&gt;
 ├── usr&lt;br /&gt;
 │   ├── local&lt;br /&gt;
 │   ├── bin&lt;br /&gt;
 │   └── ...&lt;br /&gt;
 ├── dev&lt;br /&gt;
 │   ├── sda&lt;br /&gt;
 │   ├── sda1&lt;br /&gt;
 │   └── ...&lt;br /&gt;
 ├── home&lt;br /&gt;
 │   ├── practica&lt;br /&gt;
 │   │   ├── tema1.pdf&lt;br /&gt;
 │   │   ├── boletin1.pdf&lt;br /&gt;
 │   │   └── ...&lt;br /&gt;
 │   ├── profesor&lt;br /&gt;
 │   └── ...&lt;br /&gt;
 └── etc&lt;br /&gt;
     ├── firefox&lt;br /&gt;
     ├── libvirt&lt;br /&gt;
     ├── ...&lt;br /&gt;
     └── ...&lt;br /&gt;
&lt;br /&gt;
Como puedes observar, el sistema de fichero emplea una estructura de árbol.&lt;br /&gt;
&lt;br /&gt;
== Nociones básicas ==&lt;br /&gt;
&lt;br /&gt;
·Aplicaciones con nombres compuestos: usar guion entre palabras&lt;br /&gt;
&lt;br /&gt;
·Nombres con espacios en blanco: Escribir entre comillas dobles&lt;br /&gt;
&lt;br /&gt;
·Espacios en blanco para separar ordenes (ej: instalar varios paquetes )&lt;br /&gt;
&lt;br /&gt;
·Formato general de una orden: comando [-opciones] [argumentos]&lt;br /&gt;
&lt;br /&gt;
·'''IMPORTANTE''': Diferencia entre mayúsculas y minúsculas&lt;br /&gt;
&lt;br /&gt;
== Carpetas . y .. ==&lt;br /&gt;
&lt;br /&gt;
Toda carpeta en un sistema Linux dispone de dos pseudocarpetas, la '''.''' y la '''..'':&lt;br /&gt;
&lt;br /&gt;
* La pseudocarpeta '''..''' hace referencia a la carpeta padre que contiene a esta carpeta.&lt;br /&gt;
* La pseudocarpeta '''.''' hace referencia a la carpeta actual, es por tanto una autoreferencia.&lt;br /&gt;
&lt;br /&gt;
En el caso de la carpeta raíz, la pseudocarpeta '''.''' y '''..''' hacen referencia a la propia carpeta raíz, se trata, por tanto de una excepción.&lt;br /&gt;
&lt;br /&gt;
== Directorio de trabajo actual y la orden cd ==&lt;br /&gt;
&lt;br /&gt;
Cada interprete de ordenes dispone de una ''carpeta de trabajo actual'' ('''c'''urrent '''w''orking '''d''irectory, en inglés). La carpeta de trabajo actual se puede modificar con la orden '''cd''' ('''c'''hange '''d'''irectory, en inglés).&lt;br /&gt;
&lt;br /&gt;
Por ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ cd ..&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nos situaría en la carpeta padre, empleando una ruta relativa.&lt;br /&gt;
&lt;br /&gt;
Si volvemos a escribir desde /home &amp;quot; cd .. &amp;quot; nos lleva a '''/$''' &lt;br /&gt;
&lt;br /&gt;
Para situarnos en el raíz, podemos emplear una ruta absoluta:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ cd /&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En caso de que queramos volver a la carpeta de usuario, bastaría con invocar a '''cd''' sin más o ''' cd ~ '''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ cd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''MUY IMPORTANTE''': No es lo mismo cd.. que ''' cd .. ''', es necesario el espacio después del cd.&lt;br /&gt;
&lt;br /&gt;
== Rutas absolutas, rutas relativas ==&lt;br /&gt;
&lt;br /&gt;
Para hacer referencia a un fichero o una carpeta se usan ruta absolutas o rutas relativas.&lt;br /&gt;
&lt;br /&gt;
Las rutas absolutas siempre empieza por /, de manera que toman como punto de referencia la carpeta raíz (/). Por ejemplo, una ruta absoluta a la carpeta '''prueba''' que está almacenada en la carpeta del usuario '''ubuntu''' es '/home/ubuntu/prueba/'.&lt;br /&gt;
&lt;br /&gt;
Las ruta relativa toma como referencia la carpeta de trabajo actual. Para averiguar la carpeta de trabajo actual disponemos de la orden '''pwd'''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ pwd&lt;br /&gt;
/home/ubuntu&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En base a la carpeta de trabajo actual, empleando la pseudocarpeta '''..''', se puede construir rutas relativas. Por ejemplo, para referenciar un fichero '''fichero.txt''' en la carpeta temporal, podemos emplear la ruta relativa '''../../tmp/fichero.txt'''.&lt;br /&gt;
&lt;br /&gt;
Aunque probablemente sea más cómodo emplear una ruta absoluta en este caso, que sería '''/tmp/fichero.txt'''.&lt;br /&gt;
&lt;br /&gt;
== Intérprete de órdenes ==&lt;br /&gt;
&lt;br /&gt;
El intérprete de órdenes es un lanzador de aplicaciones textual que emplea el teclado como dispositivo de entrada de datos. Mediante el teclado, se escribe el nombre del programa que se quiere lanzar y al pulsa la tecla ''intro'' el intérprete de ordenes ejecutara dicho programa. Por defecto, el intérprete de ordenes que emplea Ubuntu por defecto es '''bash'''.&lt;br /&gt;
&lt;br /&gt;
== man: ver la página de manual de una orden ==&lt;br /&gt;
&lt;br /&gt;
La orden '''man''' te será útil para ver las páginas de manual.&lt;br /&gt;
&lt;br /&gt;
Su estructura básica es:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
man &amp;lt;comando&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aunque también se utiliza con la opción ''' -a ''' de All, que también muestra las entradas comenzadas por '''.''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
man -a &amp;lt;comando&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Este programa toma como entrada el nombre de la orden de la que quieres consultar su página de manual, por ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
man ls&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nos da información del manual de la orden '''ls'''.&lt;br /&gt;
&lt;br /&gt;
Para salir de la página de manual, pulsa la tecla '''q''' (la primera letra de la palabra '''quit''', en inglés).&lt;br /&gt;
&lt;br /&gt;
quit = salir&lt;br /&gt;
&lt;br /&gt;
Normalmente, los programas ofrecen opciones de ayuda, como '''--help'''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
man --help&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
También se puede emplear la versión compacta a la hora de especificar opciones.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
man -h&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En general, todas las ordenes suelen ofrecer una opción de ayuda.&lt;br /&gt;
&lt;br /&gt;
= Paso 1: Operaciones básicas con el sistema de ficheros =&lt;br /&gt;
&lt;br /&gt;
== ls ==&lt;br /&gt;
&lt;br /&gt;
Lista los ficheros y carpetas. Si no se especifica nada, muestra los ficheros y carpetas que contiene la carpeta de trabajo actual.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Si se especifica una ruta, muestra las carpetas y ficheros contenidos en dicha ruta, por ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ ls /&lt;br /&gt;
bin  boot  data  dev  etc  home  initrd.img  initrd.img.old  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  snap  srv  sys  tmp  usr  var  vmlinuz  vmlinuz.old&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al emplear '''/''' como ruta absoluta, muestra el contenido de la carpeta raíz.&lt;br /&gt;
&lt;br /&gt;
Las opciones más usadas de este programa suelen ser:&lt;br /&gt;
&lt;br /&gt;
* -a: muestra los ficheros y carpetas ''ocultos''. En Linux, cualquier fichero o carpeta cuyo nombre empiece por . se considera ''oculto''. Esto incluye también en el listado las pseudocarpetas . y ..&lt;br /&gt;
&lt;br /&gt;
* -l: se muestra en lista y aporta datos como la fecha de última modificación, propietario, grupo, tamaño en bytes y nombre:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ ls -a&lt;br /&gt;
&lt;br /&gt;
.  ..  .bash_history  .bash_logout  .bashrc  .profile  .ssh&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ambas opciones se puede combinar:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ ls -la /&lt;br /&gt;
&lt;br /&gt;
total 92&lt;br /&gt;
drwxr-xr-x  24 root root  4096 Aug 28 09:50 .&lt;br /&gt;
drwxr-xr-x  24 root root  4096 Aug 28 09:50 ..&lt;br /&gt;
drwxr-xr-x   2 root root  4096 Aug 22 12:37 bin&lt;br /&gt;
drwxr-xr-x   4 root root  4096 Aug 22 12:37 boot&lt;br /&gt;
drwx------   3 root root  4096 Aug 28 09:50 data&lt;br /&gt;
drwxr-xr-x  18 root root  3780 Aug 28 09:46 dev&lt;br /&gt;
[...]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Otras opciones útiles son:&lt;br /&gt;
&lt;br /&gt;
* -s : muestra el tamaño en bloques de cada archivo&lt;br /&gt;
&lt;br /&gt;
* -t : aporta el día y la hora de modificación&lt;br /&gt;
&lt;br /&gt;
* -R : lista también las subcarpetas &lt;br /&gt;
&lt;br /&gt;
* --color : muestra el contenido coloreado&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Los '''permisos''' se emplean en base a tres capacidades:&lt;br /&gt;
&lt;br /&gt;
* Lectura, que se codifica con '''r''' (read, en inglés).&lt;br /&gt;
* Escritura, que se codifica con '''w''' (write, en inglés).&lt;br /&gt;
* Ejecutación, que se codifica con '''x''' (execute, en inglés).&lt;br /&gt;
&lt;br /&gt;
La primera columna muestra los permisos que codifican:&lt;br /&gt;
&lt;br /&gt;
* Tipo de entrada: '''d''' indica ''directorio'' (''carpeta'').&lt;br /&gt;
* Permisos del propietario, primera terna de rwx&lt;br /&gt;
* Permisos del grupo, segunda terna de rwx&lt;br /&gt;
* Permisos para el resto del mundo, tercera terna de rwx.&lt;br /&gt;
&lt;br /&gt;
A continuación, aparecen el propietario y el grupo, seguidos de la fecha de última modificación y el nombre del fichero o carpeta.&lt;br /&gt;
&lt;br /&gt;
La ayuda ( help ) en ls solo funciona con ''' ls --help ''' no con ls -h&lt;br /&gt;
&lt;br /&gt;
== mkdir ==&lt;br /&gt;
&lt;br /&gt;
Crea un nuevo directorio.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ mkdir test&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Crea una carpeta test en el directorio actual.&lt;br /&gt;
&lt;br /&gt;
Comprobemos que se ha creado bien:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ ls&lt;br /&gt;
test&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Con la opción '''-p''', permite crear sucesivas carpetas anidadas de una sola vez, por ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ mkdir -p a/b/c&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Que crea la siguiente estructura de carpetas.&lt;br /&gt;
&lt;br /&gt;
 a&lt;br /&gt;
 └── b&lt;br /&gt;
     └── c&lt;br /&gt;
&lt;br /&gt;
== touch ==&lt;br /&gt;
&lt;br /&gt;
Crea un nuevo fichero vacío (sin contenido) con el nombre que especifiquemos.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ touch file.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Comprobamos que el fichero se ha creado correctamente.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ ls&lt;br /&gt;
file.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== cp ==&lt;br /&gt;
&lt;br /&gt;
Copia un fichero o directorio.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ cp file.txt file_copy.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para copiar una carpeta y su contenido tenemos que usar la opción -r (recursivo).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ cp -r test test_copy&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Comprobamos el resultado con la orden '''ls'''.&lt;br /&gt;
&lt;br /&gt;
* Si nos encontramos en la carpeta destino, la estructura sería la siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ cp &amp;lt;nombre ruta origen&amp;gt; &amp;lt;nombre archivo&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== mv ==&lt;br /&gt;
&lt;br /&gt;
Mueve fichero o carpeta.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mv file_copy.txt file2.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
También se emplea para renombrar.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mv test_copy test_copy2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== rm ==&lt;br /&gt;
&lt;br /&gt;
* Borra un fichero o carpeta vacía:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rm &amp;lt;nombre&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Para borrar una carpeta no vacía y su contenido:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rm -r &amp;lt;nombre&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''IMPORTANTE''': No hacer jamás ''' rm -r * '''&lt;br /&gt;
&lt;br /&gt;
* EJERCICIOS:&lt;br /&gt;
&lt;br /&gt;
# Crear la siguiente estructura dentro del directorio /tmp (usar los comandos mkdir, touch y cp):&lt;br /&gt;
&lt;br /&gt;
 /tmp&lt;br /&gt;
 ├── carpeta1&lt;br /&gt;
 ├── carpeta2&lt;br /&gt;
 │   ├── fichero1.txt&lt;br /&gt;
 │   └── fichero2.md&lt;br /&gt;
 └── carpeta3&lt;br /&gt;
     ├── fichero1.txt&lt;br /&gt;
     └── fichero2.md&lt;br /&gt;
&lt;br /&gt;
# Basándonos en el ejercicio anterior, cambiar la estructura a la siguiente (usar comandos mv y rm):&lt;br /&gt;
&lt;br /&gt;
 /tmp&lt;br /&gt;
 └── carpeta&lt;br /&gt;
     ├── fichero1.txt&lt;br /&gt;
     └── fichero2.md&lt;br /&gt;
&lt;br /&gt;
= Paso 2: Impresión por pantalla y redirección de salida =&lt;br /&gt;
&lt;br /&gt;
== echo ==&lt;br /&gt;
&lt;br /&gt;
Sirve para imprimir una línea de texto por pantalla o variables de entorno. Además, nos permite escribir en ficheros.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo &amp;lt;opción&amp;gt; &amp;lt;texto&amp;gt; &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Opciones curiosas: &lt;br /&gt;
&lt;br /&gt;
-e &amp;lt;PALABRA \bPALABRA&amp;gt;   Se eliminan los espacios entre las palabras&lt;br /&gt;
&lt;br /&gt;
-e &amp;lt;PALABRA \nPALABRA&amp;gt;	 Se añaden saltos de línea&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Una variable de entorno es una variable editada con algún valor, por defecto existen algunas creadas, como por ejemplo la variable HOME, que contiene el directorio del usuario:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo $HOME&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aprovecharemos y crearemos una variable nosotros:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ME=&amp;quot;my name&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Comprobamos:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo $ME&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Redirección de salida ==&lt;br /&gt;
&lt;br /&gt;
&amp;gt; y &amp;gt;&amp;gt; sirve para redirigir una salida. Por ejemplo, utilizando el comando echo,&lt;br /&gt;
podemos enviar un texto dentro de un fichero:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo &amp;quot;Esto es una prueba&amp;quot; &amp;gt; file.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La diferencia entre &amp;gt; y &amp;gt;&amp;gt; es que &amp;gt; sobrescribe lo que haya en el fichero y&lt;br /&gt;
añade el contenido, y &amp;gt;&amp;gt; no sobrescribe, solo añade el nuevo contenido.&lt;br /&gt;
&lt;br /&gt;
Hagamos la prueba:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo &amp;quot;Esto es una prueba&amp;quot; &amp;gt; file.txt&lt;br /&gt;
echo &amp;quot;Esto es una prueba2&amp;quot; &amp;gt; file.txt&lt;br /&gt;
echo &amp;quot;Esto es una prueba&amp;quot; &amp;gt;&amp;gt; file2.txt&lt;br /&gt;
echo &amp;quot;Esto es una prueba2&amp;quot; &amp;gt;&amp;gt; file2.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En cualquier caso, si el fichero no existe, se crea.&lt;br /&gt;
&lt;br /&gt;
= Paso 3: Manejo de ficheros y carpetas avanzado =&lt;br /&gt;
&lt;br /&gt;
== cat ==&lt;br /&gt;
&lt;br /&gt;
* Muestra el contenido de un fichero:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat file.txt&lt;br /&gt;
cat &amp;lt;fichero1&amp;gt; &amp;lt;fichero2&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Crea un fichero:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat &amp;gt;&amp;lt;nombre archivo&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
GUARDAR FICHERO: Pulsamos ENTER y luego CTRL + D&lt;br /&gt;
&lt;br /&gt;
* Añadir más lineas al fichero: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat &amp;gt;&amp;gt;&amp;lt;nombre fichero&amp;gt; &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== grep ==&lt;br /&gt;
&lt;br /&gt;
Sirve para buscar coincidencia de un cierto patrón en ficheros y muestra la coincidencia, en caso de encontrarla, por pantalla.&lt;br /&gt;
&lt;br /&gt;
Por ejemplo, para buscar el patrón ''prueba'' en el fichero ''fichero.txt''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ grep -n prueba fichero.txt&lt;br /&gt;
1:Esto es una prueba&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La opción '''-n''' muestra el número de línea.&lt;br /&gt;
&lt;br /&gt;
== wc ==&lt;br /&gt;
&lt;br /&gt;
Sirve para contar el número de palabras, caracteres, líneas o bytes que contiene un fichero.&lt;br /&gt;
&lt;br /&gt;
Las opciones más utilizadas son:&lt;br /&gt;
&lt;br /&gt;
* -l: muestra el número de líneas que contiene el fichero.&lt;br /&gt;
* -w: muestra el número de palabras.&lt;br /&gt;
* -m: muestra el número de caracteres&lt;br /&gt;
* -c: muestra el número de bytes&lt;br /&gt;
&lt;br /&gt;
Probemos y contemos todo en el fichero file2.txt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
wc -l file2.txt&lt;br /&gt;
wc -w file2.txt&lt;br /&gt;
wc -m file2.txt&lt;br /&gt;
wc -c file2.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podemos contar más de un fichero a la vez:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
wc -l file.txt file2.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nos mostrará el conteo de cada fichero y el total.&lt;br /&gt;
&lt;br /&gt;
== Tubería (|) ==&lt;br /&gt;
&lt;br /&gt;
La tubería nos servirá para conectar varios comandos al mismo tiempo, veamos&lt;br /&gt;
unos ejemplos, que siempre se entiende mejor:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat file2.txt | grep prueba&lt;br /&gt;
grep -nr prueba file2.txt | wc -l&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En el primer ejemplo, mostramos el contenido de file2.txt, y esta salida se la&lt;br /&gt;
pasamos al comando grep, el cual busca las líneas que contengan prueba.&lt;br /&gt;
&lt;br /&gt;
En el segundo, buscamos todas las líneas que contengan la palabra prueba, y esta&lt;br /&gt;
salida se la pasamos al comando wc, el cual cuenta las líneas de la salida del&lt;br /&gt;
comando grep.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Redirecciones ==&lt;br /&gt;
&lt;br /&gt;
Vamos a ver unos conceptos antes de seguir:&lt;br /&gt;
&lt;br /&gt;
* Entrada estándar: representa los datos que necesita una aplicación para funcionar, como por ejemplo un archivo de datos o información ingresada desde la terminal y es representado en la terminal como el tipo 0.&lt;br /&gt;
* Salida estándar: es la vía que utilizan las aplicaciones para mostrarte información, allí podemos ver el progreso o simplemente los mensajes que la  aplicación quiera darte en determinado momento y es representado en la terminal como el tipo 1.&lt;br /&gt;
* Error estándar: es la forma en que los programas te informan sobre los problemas que pueden encontrarse al momento de la ejecución y es representado en la terminal como el tipo 2.&lt;br /&gt;
&lt;br /&gt;
Las redirecciones nos sirven para mover la información de un tipo a otro.&lt;br /&gt;
&lt;br /&gt;
Ya vimos previamente el uso de &amp;gt; y &amp;gt;&amp;gt;, y también el |, veamos algunas más:&lt;br /&gt;
&lt;br /&gt;
* comando &amp;lt; fichero: Toma la entrada de fichero&lt;br /&gt;
* comando 2&amp;gt; fichero: Envía la salida de error de comando a fichero&lt;br /&gt;
* comando 2&amp;gt;&amp;amp;1: Envía la salida de error a la salida estándar&lt;br /&gt;
* comando &amp;amp;&amp;gt; fichero: Envía la salida estándar y de error a fichero; equivale a comando &amp;gt; fichero 2&amp;gt;&amp;amp;1&lt;br /&gt;
&lt;br /&gt;
= Paso 4: Usuarios y grupos =&lt;br /&gt;
&lt;br /&gt;
== whoami ==&lt;br /&gt;
&lt;br /&gt;
Sirve para obtener el usuario actual.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
whoami&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Lo más seguro es que nos aparezca ubuntu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== who ==&lt;br /&gt;
&lt;br /&gt;
Es para saber quien está ahora mismo en la máquina conectado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
who&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Seguramente solo estemos nosotros:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ubuntu   pts/0        2019-08-28 13:51 (192.168.122.1)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== su y sudo ==&lt;br /&gt;
&lt;br /&gt;
su (substitute user): sirve para cambiar de usuario. Por ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
su root&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aquí nos pedirá la contraseña del usuario al que queramos cambiar.&lt;br /&gt;
&lt;br /&gt;
sudo (super user do): no todas las distribuciones lo integran, porque es menos&lt;br /&gt;
seguro que su, este comando nos permite ejecutar un comando siendo otro usuario,&lt;br /&gt;
por defecto, si no le damos usuario, lo hará con el usuario root. Si sudo nos&lt;br /&gt;
pide contraseña, nos pide la contraseña del usuario, ya que el usuario es que el&lt;br /&gt;
tiene permisos para usar sudo o no.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo ls -a /root&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Si tuviéramos por ejemplo un usuario 'practica' y quisíeramos ejecutar un&lt;br /&gt;
comando en su nombre:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo -u practica ls&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== adduser y useradd ==&lt;br /&gt;
&lt;br /&gt;
Ambos comandos sirven para crear un nuevo usuario, pero tienen sus diferencias.&lt;br /&gt;
&lt;br /&gt;
useradd es un comando del sistema, y adduser es un script escrito en perl que&lt;br /&gt;
utiliza el comando useradd. La diferencia así de primeras es que adduser nos&lt;br /&gt;
crear el directorio /home/usuario y useradd necesita la opción -m para hacer lo&lt;br /&gt;
mismo. Se puede utilizar el que se quiera, aunque es más recomendable useradd,&lt;br /&gt;
ya que funcionará igual en todas las distribuciones.&lt;br /&gt;
&lt;br /&gt;
Vamos a añadir un usuario practica con su directorio en /home (notemos que&lt;br /&gt;
necesitamos permisos de super usuario para realizar esta tarea):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo useradd -m practica&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vamos a comprobar que el directorio home está creado y que el usuario practica&lt;br /&gt;
funciona:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls /home  # veremos el directorio practica&lt;br /&gt;
sudo -u practica whoami  # nos dirá que somo el usuario practica&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== passwd ==&lt;br /&gt;
&lt;br /&gt;
Sirve para modificar la contraseña de un usuario, por ejemplo, vamos a modificar&lt;br /&gt;
la contraseña del usuario que hemos creado previamente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo passwd practica&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nos preguntará dos veces la contraseña, y ya la tendremos actualizadas. Vamos&lt;br /&gt;
ahora a probar ahora el comando su para cambiar de usuario:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
su practica&lt;br /&gt;
whoami&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Veremos que hemos cambiado de usuario, para cerrar este usuario, escribimos&lt;br /&gt;
'exit' o pulsamos 'CTLR + D'&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== deluser y userdel ==&lt;br /&gt;
&lt;br /&gt;
Ambos sirven para borrar un usuario, similar a adduser y useradd, userdel es el&lt;br /&gt;
comando y deluser el script.&lt;br /&gt;
&lt;br /&gt;
Vamos a borrar el usuario que hemos creado, incluyendo el borrado de su /home&lt;br /&gt;
(opción -r):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
userdel -r practica&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Comprobemos que ya no tenemos usuario ni /home:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls /home&lt;br /&gt;
sudo -u practica whoami&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== addgroup y groupadd ==&lt;br /&gt;
&lt;br /&gt;
Ambos sirven para crear un grupo. Los grupos sirven para agrupar a los usuarios&lt;br /&gt;
y que estos tengan unos mismos permisos. Por ejemplo, cuando instalamos algunas&lt;br /&gt;
herramientas como por ejemplo docker, este crea el grupo docker automáticamente&lt;br /&gt;
para que fácilmente podamos añadir a un usuario al grupo, y este tenga los&lt;br /&gt;
permisos para trabajar con dicha herramienta.&lt;br /&gt;
&lt;br /&gt;
Vamos a crear un nuevo grupo, vamos a llamarle invitado:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo groupadd invitado&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== usermod y groups ==&lt;br /&gt;
&lt;br /&gt;
usermod es utilizado para asignar un grupo a un usuario.&lt;br /&gt;
&lt;br /&gt;
groups es utilizado para ver los grupos a los que pertenece un usuario.&lt;br /&gt;
&lt;br /&gt;
Vamos a añadir a un usuario practica, lo vamos a añadir al grupo invitado y&lt;br /&gt;
veremos los grupos a los que pertenece:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo useradd -m practica&lt;br /&gt;
sudo usermod -G invitado practica&lt;br /&gt;
groups practica&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Veremos que el usuario práctica pertenece al grupo invitado.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== delgroup y groupdel ==&lt;br /&gt;
&lt;br /&gt;
Ambos sirven para eliminar un grupo. Vamos a eliminar el grupo que hemos creado&lt;br /&gt;
anteriormente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo groupdel invitado&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podemos observar ahora que el usuario practica no pertenece al grupo invitado:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
groups practica&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Paso 5: Permisos =&lt;br /&gt;
&lt;br /&gt;
== Nomenclatura rwx y numérica ==&lt;br /&gt;
&lt;br /&gt;
Si hacemos un ls -l, la primera cadena que nos aparece son los permisos del&lt;br /&gt;
fichero (-rwxrw-r--), podemos dividirlo en 4 elementos:&lt;br /&gt;
&lt;br /&gt;
-    (rwx)   (rw-)  (r--)&lt;br /&gt;
|      |       |      |&lt;br /&gt;
type  owner   group  others&lt;br /&gt;
&lt;br /&gt;
* type: el tipo de fichero, pudiendo ser d (directorio), l (enlace simbólico), - (fichero normal)&lt;br /&gt;
* owner: permisos de propietario&lt;br /&gt;
* group: permisos de grupo&lt;br /&gt;
* others: permisos para los demás usuarios&lt;br /&gt;
&lt;br /&gt;
Significado de los permisos:&lt;br /&gt;
&lt;br /&gt;
* r: permisos de lectura&lt;br /&gt;
* w: permisos de escritura&lt;br /&gt;
* x: permisos de ejecución&lt;br /&gt;
&lt;br /&gt;
Por último, existe un modo abreviado para estos permisos que se utiliza con&lt;br /&gt;
números.&lt;br /&gt;
&lt;br /&gt;
rwx&lt;br /&gt;
001 en binario es 1 en decimal. Permisos de ejecución&lt;br /&gt;
010 en binario es 2 en decimal. Permisos de escritura&lt;br /&gt;
100 en binario es 4 en decimal. Permisos de lectura&lt;br /&gt;
&lt;br /&gt;
La suma de los permisos, nos da el valor numérico. Veamos un ejemplo:&lt;br /&gt;
rwx rw- r--&lt;br /&gt;
111 110 100&lt;br /&gt;
 7   6   4&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== chmod ==&lt;br /&gt;
&lt;br /&gt;
Permite cambiar los permisos de acceso a un fichero o directorio. Podemos dar&lt;br /&gt;
permisos de dos formas diferentes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== modo carácter ===&lt;br /&gt;
&lt;br /&gt;
Veamos primero unos detalles:&lt;br /&gt;
&lt;br /&gt;
Clases de usuario:&lt;br /&gt;
&lt;br /&gt;
* owner (u)&lt;br /&gt;
* group (g)&lt;br /&gt;
* others (o)&lt;br /&gt;
* all (a)&lt;br /&gt;
&lt;br /&gt;
Modificador:&lt;br /&gt;
&lt;br /&gt;
* añadir (+)&lt;br /&gt;
* eliminar (-)&lt;br /&gt;
* sobrescribir (=)&lt;br /&gt;
&lt;br /&gt;
Para dar permisos tendríamos que seleccionar la clase de usuario el modificador&lt;br /&gt;
y los permisos, veamos un ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chmod u+x file  # añadimos permisos de ejecución al usuario&lt;br /&gt;
chmod go-w file  # quitamos permisos de escritura al grupo y a otros usuarios&lt;br /&gt;
chmod u=rwx,go=r file  # Al usuario le damos todos los permisos, y al grupo y otros solo le damos permisos de lectura&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Modo octal ===&lt;br /&gt;
&lt;br /&gt;
Con el modo octacl, es como si siempre utilizáramos el modificar sobrescribir,&lt;br /&gt;
pongamos algunos ejemplos:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chmod 744 file  # Al usuario le damos todos los permisos, y al grupo y otros solo le damos permisos de lectura&lt;br /&gt;
chmod 777 file  # Todos tienen permisos para todo&lt;br /&gt;
chmod 600 file  # solo el propietario tiene permisos de lectura y escritura&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Ejemplos ===&lt;br /&gt;
&lt;br /&gt;
Vamos a ver como funciona el tema de permisos con unos ejemplos. Vamos a crear&lt;br /&gt;
un fichero pruebas y le vamos a quitar los permisos de escritura a nuestro&lt;br /&gt;
usuario, y le vamos a dar permisos de escritura a otros:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
touch pruebas&lt;br /&gt;
ls -l pruebas  # de esta forma veremos que por defecto los permisos son rw-rw-r--&lt;br /&gt;
chmod u-w,o+w pruebas&lt;br /&gt;
ls -l pruebas  # ahora los permisos deberían ser -w-rw-rw-&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Una vez dado los permisos, veamos que con nuestro usuario podemos leer pero no&lt;br /&gt;
escribir:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat pruebas&lt;br /&gt;
echo &amp;quot;probando&amp;quot; &amp;gt; pruebas&lt;br /&gt;
exit&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Y ahora vamos a ver que el usuario pruebas, puede leer y escribir:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
su practica&lt;br /&gt;
cat pruebas&lt;br /&gt;
echo &amp;quot;probando&amp;quot; &amp;gt; pruebas&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== chown ==&lt;br /&gt;
&lt;br /&gt;
Permite cambiar el propietario de un fichero o directorio.&lt;br /&gt;
&lt;br /&gt;
Vamos por ejemplo a pasarle ahora el fichero pruebas al usuario practica:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo chown practica pruebas&lt;br /&gt;
ls -l pruebas&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Veremos que el usuario actual ahora es pruebas, aunque vemos que el ls muestra&lt;br /&gt;
lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
-r--rw-rw- 1 practica ubuntu 9 Aug 29 09:34 pruebas&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hay que comentar un detalle, y es que los ficheros y directorios tienen asignado&lt;br /&gt;
un usuario y un grupo, por defecto se utiliza el mismo usuario como grupo&lt;br /&gt;
cuando creamos un nuevo fichero o directorio. Si queremos que cuando cambiemos&lt;br /&gt;
el propietario, cambiar tambien el grupo del fichero, podemos hacerlo de la&lt;br /&gt;
siguiente forma:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo chown practica:practica pruebas&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Una vez hecho esto, vamos ahora a probar que los permisos siguen funcionando&lt;br /&gt;
como antes, ahora con el usuario ubuntu, deberíamos de poder leer y escribir en&lt;br /&gt;
el fichero pruebas, y con el usuario practica, solo leer, esto es así por que&lt;br /&gt;
ahora el propitario es practica:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Pruebas usuario ubuntu&lt;br /&gt;
cat pruebas&lt;br /&gt;
echo test &amp;gt;&amp;gt; pruebas&lt;br /&gt;
# Pruebas usuario practica&lt;br /&gt;
su practica&lt;br /&gt;
cat pruebas&lt;br /&gt;
echo &amp;quot;probando&amp;quot; &amp;gt; pruebas&lt;br /&gt;
exit&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Paso 6: Procesos =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== ps ==&lt;br /&gt;
&lt;br /&gt;
Sirve para ver que procesos están ejecutándose en el sistema, veamos un ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ps aux  # con la opción aux mostraremos todos los procesos del sistema&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cada línea es un proceso, y cada proceso muestra su PID, usuario, cantidad de&lt;br /&gt;
memoria y cpu utilizada, comando y otros detalles.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
man kill &amp;amp;  # añadir el &amp;amp; al final de un comando hace que este se ejecute en segundo plano, por lo que se quedará abierto&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La salida de este comando nos mostrará el PID que tiene ese proceso que acabamos&lt;br /&gt;
de ejecutar, vamos a comprobarlo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ps aux | grep &amp;quot;man kill&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Veremos que el PID coincide.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== kill ==&lt;br /&gt;
&lt;br /&gt;
Este comando nos servirá para matar un proceso. kill se utiliza seguido de una&lt;br /&gt;
señal para enviar al proceso seguido de uno o varios PID. para ver las señales&lt;br /&gt;
disponibles, podemos listarlas:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kill -l&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Las más utilizadas suele ser SIGTERM y SIGKILL, la primera intenta terminar el&lt;br /&gt;
proceso de forma poco abrupta, y la segunda suele utilizarse cuando el proceso&lt;br /&gt;
no atiende a esta primera señal. Vamos ahora a terminar el proceso que creamos&lt;br /&gt;
antes, si no recordamos el PID, busquémoslo de nuevo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ps aux | grep &amp;quot;man kill&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enviamos señal para terminar el proceso y comprobamos que ha terminado:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kill -SIGTERM 8470&lt;br /&gt;
ps aux | grep &amp;quot;man kill&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
También podemos notar que en el listado de señales, hay unos números, podemos&lt;br /&gt;
utilizar esos números en vez de las palabras, por ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
man kill &amp;amp;&lt;br /&gt;
kill -15 PID_COMANDO_PREVIO&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Comprobamos que el proceso ha terminado correctamente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ps aux | grep &amp;quot;man kill&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Paso 7: Estado CPU, RAM y Disco =&lt;br /&gt;
&lt;br /&gt;
== top ==&lt;br /&gt;
&lt;br /&gt;
Este comando nos servirá para ver el listado de procesos y el estado de la CPU y&lt;br /&gt;
memoria.&lt;br /&gt;
&lt;br /&gt;
Probemos el comando y observemos detalladamente la salida:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
top&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para salir, pulsamos q.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== df y du ==&lt;br /&gt;
&lt;br /&gt;
df (disk free) y du (disk usage). Ambas son utilidades para mostrar el uso de&lt;br /&gt;
los discos.&lt;br /&gt;
&lt;br /&gt;
Con df mostraremos la información del espacio en cada dispositivo montado:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
df&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Estos comandos que nos muestran el tamaño de los ficheros, casi siempre tienen&lt;br /&gt;
una opción para mostrarlo en un formato más legible (-h)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
df -h&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mucho mejor.&lt;br /&gt;
&lt;br /&gt;
Ahora veamos el comando du, el cual nos mostrará el tamaño de un fichero o&lt;br /&gt;
directorio y sus subdirectorios, no olvidemos el -h:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
du -h /home/ubuntu&lt;br /&gt;
du -h /home/ubuntu/pruebas&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Si solo quisíeramos saber el total de una carpeta y nos nos interesan sus&lt;br /&gt;
subcarpetas, podemos utilizar la opción -s:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
du -sh /home/ubuntu&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== free ==&lt;br /&gt;
&lt;br /&gt;
Sirve para ver el estado de la memoria, como siempre, opción -h:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
free -h&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== lsblk ==&lt;br /&gt;
&lt;br /&gt;
Nos muestra la información de todos los dispositivos de bloques (discos duros,&lt;br /&gt;
pendrivers, CD_ROM, SSD, ...).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lsblk&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En la siguiente práctica se utilizará más a fondo este comando, ya que&lt;br /&gt;
trabajaremos con dispositivos.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Paso 8: Gestión de paquetes de software y repositorios =&lt;br /&gt;
&lt;br /&gt;
Los sistemas Linux incluyen, además de las herramientas básicas del sistema operativo, repositorios de software que puede ser opcionalmente instalados por el administrador del sistema. Los fabricantes de las distribuciones de Linux incluyen paquetes de software listos para ser instalados que se integran con el sistema.&lt;br /&gt;
&lt;br /&gt;
Un paquete incluye el software necesario para que una cierta aplicación funcione correctamente, así como sus paquetes de dependencia.&lt;br /&gt;
&lt;br /&gt;
En Ubuntu, la herramienta de gestión de paquetes de software y repositorios se llama '''apt'''.&lt;br /&gt;
&lt;br /&gt;
=== Listado de repositorios de paquetes de software ===&lt;br /&gt;
&lt;br /&gt;
En Ubuntu el listado de repositorios se encuentra en el fichero /etc/apt/sources.list. Podemos comprobar que repositorios tenemos añadido:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat /etc/apt/sources.list&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Actualización del listado de paquetes de software ===&lt;br /&gt;
&lt;br /&gt;
Para actualizar el listado de paquetes utilizaremos el comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt update&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Instalación un nuevo paquete ===&lt;br /&gt;
&lt;br /&gt;
Para instalar un nuevo paquete, utilizaremos la orden install, por ejemplo, vamos a instalar tree, similar al ls pero muestra el arbol de directorios:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt install tree&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Desinstalación de un paquete ===&lt;br /&gt;
&lt;br /&gt;
Usaremos la orden purge o la orden remove, purge nos lo eliminad todo, y remove mantiene la configuración en el caso de que el paquete la tuviese. Vamos a eliminar el paquete instalado previamente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt purge tree&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Paso 9: Módulos =&lt;br /&gt;
&lt;br /&gt;
Los módulos del kernel de Linux son partes que podemos añadir o quitar de forma&lt;br /&gt;
sencilla con el fin de añadir o quitar funcionalidad. Por ejemplo, algunas de&lt;br /&gt;
estas funcionalidades son:&lt;br /&gt;
&lt;br /&gt;
* Registrar temperaturas de nuestros componentes&lt;br /&gt;
* Hacer funcionr la tarjeta de red wifi&lt;br /&gt;
* Cargar los drivers de una tarjeta gráfica&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== lsmod ==&lt;br /&gt;
&lt;br /&gt;
Comando para ver los módulos que estamos usando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lsmod&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== lspci y usb-devices ==&lt;br /&gt;
&lt;br /&gt;
Estos comandos nos servirán para ver el hardware que está conectado a nuestro&lt;br /&gt;
ordenador. Con lspci veremos el listado del hardware integrado y con usb-devices&lt;br /&gt;
el que está conectado por hardware.&lt;br /&gt;
&lt;br /&gt;
Normalmente, como los módulos se utilizan para dar funcionalidad un hardware,&lt;br /&gt;
aquí en los listado de hardware podremos ver que módulo está utilizando cada&lt;br /&gt;
hardware:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lspci -v&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Veremos una línea en algunos dispositivos que nos diga que módulo estamos&lt;br /&gt;
usando, pongo un pequeño trozo de la salida del comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
00:1f.2 SATA controller: Intel Corporation 82801IR/IO/IH (ICH9R/DO/DH) 6 port SATA Controller [AHCI mode] (rev 02) (prog-if 01 [AHCI 1.0])&lt;br /&gt;
    Subsystem: Red Hat, Inc. QEMU Virtual Machine&lt;br /&gt;
    Flags: bus master, fast devsel, latency 0, IRQ 35&lt;br /&gt;
    I/O ports at c0c0 [size=32]&lt;br /&gt;
    Memory at fcc1d000 (32-bit, non-prefetchable) [size=4K]&lt;br /&gt;
    Capabilities: &amp;lt;access denied&amp;gt;&lt;br /&gt;
    Kernel driver in use: ahci&lt;br /&gt;
    Kernel modules: ahci&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vemos que el hardware INTEl Corporation está utilizando el módulo ahci.&lt;br /&gt;
&lt;br /&gt;
Probemos ahora con usb-devices:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
usb-devices&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Veamos un trozo de código:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
T:  Bus=01 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#=  2 Spd=480 MxCh= 0&lt;br /&gt;
D:  Ver= 2.00 Cls=00(&amp;gt;ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs=  1&lt;br /&gt;
P:  Vendor=0627 ProdID=0001 Rev=00.00&lt;br /&gt;
S:  Manufacturer=QEMU&lt;br /&gt;
S:  Product=QEMU USB Tablet&lt;br /&gt;
S:  SerialNumber=42&lt;br /&gt;
C:  #Ifs= 1 Cfg#= 1 Atr=a0 MxPwr=100mA&lt;br /&gt;
I:  If#= 0 Alt= 0 #EPs= 1 Cls=03(HID  ) Sub=00 Prot=00 Driver=usbhid&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vemos que el teclado está utilizando el módulo usbhid&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== insmod ==&lt;br /&gt;
&lt;br /&gt;
Sirve para cargar un módulo en el kernel, imaginemos que tenemos un módulo que&lt;br /&gt;
se llama modulo1:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo insmod modulo1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== rmmod ==&lt;br /&gt;
&lt;br /&gt;
Sirve para eliminar un módulo de kernel. Imaginemos que queremos borrar un&lt;br /&gt;
módulo cargado anteriormente con el nombre modulo1:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo rmmod modulo1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Marramfer12</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Administraci%C3%B3n_b%C3%A1sica&amp;diff=4555</id>
		<title>Administración básica</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Administraci%C3%B3n_b%C3%A1sica&amp;diff=4555"/>
				<updated>2019-11-13T14:28:52Z</updated>
		
		<summary type="html">&lt;p&gt;Marramfer12: /* cat */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Para realizar esta práctica utilizaremos una de las máquinas virtuales que generamos en la práctica anterior.&lt;br /&gt;
&lt;br /&gt;
En esta práctica aprenderemos a utilizar el interprete de ordenes (también conocido como ''[https://www.traficantes.net/sites/default/files/pdfs/En%20el%20principio%20fue...-TdS.pdf línea de comandos]'') y a aprender nociones básicas de administración de sistemas Linux.&lt;br /&gt;
&lt;br /&gt;
= Paso 0: Breve introducción al sistema Linux =&lt;br /&gt;
&lt;br /&gt;
== Estructura básica del sistema de archivos ==&lt;br /&gt;
&lt;br /&gt;
En un sistema Linux, todas las carpetas y ficheros en el sistema de fichero pende de la carpeta raíz que se representa con la /.&lt;br /&gt;
&lt;br /&gt;
 /&lt;br /&gt;
 ├── bin&lt;br /&gt;
 ├── usr&lt;br /&gt;
 │   ├── local&lt;br /&gt;
 │   ├── bin&lt;br /&gt;
 │   └── ...&lt;br /&gt;
 ├── dev&lt;br /&gt;
 │   ├── sda&lt;br /&gt;
 │   ├── sda1&lt;br /&gt;
 │   └── ...&lt;br /&gt;
 ├── home&lt;br /&gt;
 │   ├── practica&lt;br /&gt;
 │   │   ├── tema1.pdf&lt;br /&gt;
 │   │   ├── boletin1.pdf&lt;br /&gt;
 │   │   └── ...&lt;br /&gt;
 │   ├── profesor&lt;br /&gt;
 │   └── ...&lt;br /&gt;
 └── etc&lt;br /&gt;
     ├── firefox&lt;br /&gt;
     ├── libvirt&lt;br /&gt;
     ├── ...&lt;br /&gt;
     └── ...&lt;br /&gt;
&lt;br /&gt;
Como puedes observar, el sistema de fichero emplea una estructura de árbol.&lt;br /&gt;
&lt;br /&gt;
== Nociones básicas ==&lt;br /&gt;
&lt;br /&gt;
·Aplicaciones con nombres compuestos: usar guion entre palabras&lt;br /&gt;
&lt;br /&gt;
·Nombres con espacios en blanco: Escribir entre comillas dobles&lt;br /&gt;
&lt;br /&gt;
·Espacios en blanco para separar ordenes (ej: instalar varios paquetes )&lt;br /&gt;
&lt;br /&gt;
·Formato general de una orden: comando [-opciones] [argumentos]&lt;br /&gt;
&lt;br /&gt;
·'''IMPORTANTE''': Diferencia entre mayúsculas y minúsculas&lt;br /&gt;
&lt;br /&gt;
== Carpetas . y .. ==&lt;br /&gt;
&lt;br /&gt;
Toda carpeta en un sistema Linux dispone de dos pseudocarpetas, la '''.''' y la '''..'':&lt;br /&gt;
&lt;br /&gt;
* La pseudocarpeta '''..''' hace referencia a la carpeta padre que contiene a esta carpeta.&lt;br /&gt;
* La pseudocarpeta '''.''' hace referencia a la carpeta actual, es por tanto una autoreferencia.&lt;br /&gt;
&lt;br /&gt;
En el caso de la carpeta raíz, la pseudocarpeta '''.''' y '''..''' hacen referencia a la propia carpeta raíz, se trata, por tanto de una excepción.&lt;br /&gt;
&lt;br /&gt;
== Directorio de trabajo actual y la orden cd ==&lt;br /&gt;
&lt;br /&gt;
Cada interprete de ordenes dispone de una ''carpeta de trabajo actual'' ('''c'''urrent '''w''orking '''d''irectory, en inglés). La carpeta de trabajo actual se puede modificar con la orden '''cd''' ('''c'''hange '''d'''irectory, en inglés).&lt;br /&gt;
&lt;br /&gt;
Por ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ cd ..&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nos situaría en la carpeta padre, empleando una ruta relativa.&lt;br /&gt;
&lt;br /&gt;
Si volvemos a escribir desde /home &amp;quot; cd .. &amp;quot; nos lleva a '''/$''' &lt;br /&gt;
&lt;br /&gt;
Para situarnos en el raíz, podemos emplear una ruta absoluta:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ cd /&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En caso de que queramos volver a la carpeta de usuario, bastaría con invocar a '''cd''' sin más o ''' cd ~ '''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ cd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''MUY IMPORTANTE''': No es lo mismo cd.. que ''' cd .. ''', es necesario el espacio después del cd.&lt;br /&gt;
&lt;br /&gt;
== Rutas absolutas, rutas relativas ==&lt;br /&gt;
&lt;br /&gt;
Para hacer referencia a un fichero o una carpeta se usan ruta absolutas o rutas relativas.&lt;br /&gt;
&lt;br /&gt;
Las rutas absolutas siempre empieza por /, de manera que toman como punto de referencia la carpeta raíz (/). Por ejemplo, una ruta absoluta a la carpeta '''prueba''' que está almacenada en la carpeta del usuario '''ubuntu''' es '/home/ubuntu/prueba/'.&lt;br /&gt;
&lt;br /&gt;
Las ruta relativa toma como referencia la carpeta de trabajo actual. Para averiguar la carpeta de trabajo actual disponemos de la orden '''pwd'''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ pwd&lt;br /&gt;
/home/ubuntu&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En base a la carpeta de trabajo actual, empleando la pseudocarpeta '''..''', se puede construir rutas relativas. Por ejemplo, para referenciar un fichero '''fichero.txt''' en la carpeta temporal, podemos emplear la ruta relativa '''../../tmp/fichero.txt'''.&lt;br /&gt;
&lt;br /&gt;
Aunque probablemente sea más cómodo emplear una ruta absoluta en este caso, que sería '''/tmp/fichero.txt'''.&lt;br /&gt;
&lt;br /&gt;
== Intérprete de órdenes ==&lt;br /&gt;
&lt;br /&gt;
El intérprete de órdenes es un lanzador de aplicaciones textual que emplea el teclado como dispositivo de entrada de datos. Mediante el teclado, se escribe el nombre del programa que se quiere lanzar y al pulsa la tecla ''intro'' el intérprete de ordenes ejecutara dicho programa. Por defecto, el intérprete de ordenes que emplea Ubuntu por defecto es '''bash'''.&lt;br /&gt;
&lt;br /&gt;
== man: ver la página de manual de una orden ==&lt;br /&gt;
&lt;br /&gt;
La orden '''man''' te será útil para ver las páginas de manual.&lt;br /&gt;
&lt;br /&gt;
Su estructura básica es:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
man &amp;lt;comando&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aunque también se utiliza con la opción ''' -a ''' de All, que también muestra las entradas comenzadas por '''.''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
man -a &amp;lt;comando&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Este programa toma como entrada el nombre de la orden de la que quieres consultar su página de manual, por ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
man ls&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nos da información del manual de la orden '''ls'''.&lt;br /&gt;
&lt;br /&gt;
Para salir de la página de manual, pulsa la tecla '''q''' (la primera letra de la palabra '''quit''', en inglés).&lt;br /&gt;
&lt;br /&gt;
quit = salir&lt;br /&gt;
&lt;br /&gt;
Normalmente, los programas ofrecen opciones de ayuda, como '''--help'''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
man --help&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
También se puede emplear la versión compacta a la hora de especificar opciones.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
man -h&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En general, todas las ordenes suelen ofrecer una opción de ayuda.&lt;br /&gt;
&lt;br /&gt;
= Paso 1: Operaciones básicas con el sistema de ficheros =&lt;br /&gt;
&lt;br /&gt;
== ls ==&lt;br /&gt;
&lt;br /&gt;
Lista los ficheros y carpetas. Si no se especifica nada, muestra los ficheros y carpetas que contiene la carpeta de trabajo actual.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Si se especifica una ruta, muestra las carpetas y ficheros contenidos en dicha ruta, por ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ ls /&lt;br /&gt;
bin  boot  data  dev  etc  home  initrd.img  initrd.img.old  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  snap  srv  sys  tmp  usr  var  vmlinuz  vmlinuz.old&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al emplear '''/''' como ruta absoluta, muestra el contenido de la carpeta raíz.&lt;br /&gt;
&lt;br /&gt;
Las opciones más usadas de este programa suelen ser:&lt;br /&gt;
&lt;br /&gt;
* -a: muestra los ficheros y carpetas ''ocultos''. En Linux, cualquier fichero o carpeta cuyo nombre empiece por . se considera ''oculto''. Esto incluye también en el listado las pseudocarpetas . y ..&lt;br /&gt;
&lt;br /&gt;
* -l: se muestra en lista y aporta datos como la fecha de última modificación, propietario, grupo, tamaño en bytes y nombre:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ ls -a&lt;br /&gt;
&lt;br /&gt;
.  ..  .bash_history  .bash_logout  .bashrc  .profile  .ssh&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ambas opciones se puede combinar:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ ls -la /&lt;br /&gt;
&lt;br /&gt;
total 92&lt;br /&gt;
drwxr-xr-x  24 root root  4096 Aug 28 09:50 .&lt;br /&gt;
drwxr-xr-x  24 root root  4096 Aug 28 09:50 ..&lt;br /&gt;
drwxr-xr-x   2 root root  4096 Aug 22 12:37 bin&lt;br /&gt;
drwxr-xr-x   4 root root  4096 Aug 22 12:37 boot&lt;br /&gt;
drwx------   3 root root  4096 Aug 28 09:50 data&lt;br /&gt;
drwxr-xr-x  18 root root  3780 Aug 28 09:46 dev&lt;br /&gt;
[...]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Otras opciones útiles son:&lt;br /&gt;
&lt;br /&gt;
* -s : muestra el tamaño en bloques de cada archivo&lt;br /&gt;
&lt;br /&gt;
* -t : aporta el día y la hora de modificación&lt;br /&gt;
&lt;br /&gt;
* -R : lista también las subcarpetas &lt;br /&gt;
&lt;br /&gt;
* --color : muestra el contenido coloreado&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Los '''permisos''' se emplean en base a tres capacidades:&lt;br /&gt;
&lt;br /&gt;
* Lectura, que se codifica con '''r''' (read, en inglés).&lt;br /&gt;
* Escritura, que se codifica con '''w''' (write, en inglés).&lt;br /&gt;
* Ejecutación, que se codifica con '''x''' (execute, en inglés).&lt;br /&gt;
&lt;br /&gt;
La primera columna muestra los permisos que codifican:&lt;br /&gt;
&lt;br /&gt;
* Tipo de entrada: '''d''' indica ''directorio'' (''carpeta'').&lt;br /&gt;
* Permisos del propietario, primera terna de rwx&lt;br /&gt;
* Permisos del grupo, segunda terna de rwx&lt;br /&gt;
* Permisos para el resto del mundo, tercera terna de rwx.&lt;br /&gt;
&lt;br /&gt;
A continuación, aparecen el propietario y el grupo, seguidos de la fecha de última modificación y el nombre del fichero o carpeta.&lt;br /&gt;
&lt;br /&gt;
La ayuda ( help ) en ls solo funciona con ''' ls --help ''' no con ls -h&lt;br /&gt;
&lt;br /&gt;
== mkdir ==&lt;br /&gt;
&lt;br /&gt;
Crea un nuevo directorio.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ mkdir test&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Crea una carpeta test en el directorio actual.&lt;br /&gt;
&lt;br /&gt;
Comprobemos que se ha creado bien:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ ls&lt;br /&gt;
test&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Con la opción '''-p''', permite crear sucesivas carpetas anidadas de una sola vez, por ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ mkdir -p a/b/c&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Que crea la siguiente estructura de carpetas.&lt;br /&gt;
&lt;br /&gt;
 a&lt;br /&gt;
 └── b&lt;br /&gt;
     └── c&lt;br /&gt;
&lt;br /&gt;
== touch ==&lt;br /&gt;
&lt;br /&gt;
Crea un nuevo fichero vacío (sin contenido) con el nombre que especifiquemos.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ touch file.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Comprobamos que el fichero se ha creado correctamente.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ ls&lt;br /&gt;
file.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== cp ==&lt;br /&gt;
&lt;br /&gt;
Copia un fichero o directorio.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ cp file.txt file_copy.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para copiar una carpeta y su contenido tenemos que usar la opción -r (recursivo).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ cp -r test test_copy&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Comprobamos el resultado con la orden '''ls'''.&lt;br /&gt;
&lt;br /&gt;
* Si nos encontramos en la carpeta destino, la estructura sería la siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ cp &amp;lt;nombre ruta origen&amp;gt; &amp;lt;nombre archivo&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== mv ==&lt;br /&gt;
&lt;br /&gt;
Mueve fichero o carpeta.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mv file_copy.txt file2.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
También se emplea para renombrar.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mv test_copy test_copy2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== rm ==&lt;br /&gt;
&lt;br /&gt;
* Borra un fichero o carpeta vacía:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rm &amp;lt;nombre&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Para borrar una carpeta no vacía y su contenido:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rm -r &amp;lt;nombre&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''IMPORTANTE''': No hacer jamás ''' rm -r * '''&lt;br /&gt;
&lt;br /&gt;
* EJERCICIOS:&lt;br /&gt;
&lt;br /&gt;
# Crear la siguiente estructura dentro del directorio /tmp (usar los comandos mkdir, touch y cp):&lt;br /&gt;
&lt;br /&gt;
 /tmp&lt;br /&gt;
 ├── carpeta1&lt;br /&gt;
 ├── carpeta2&lt;br /&gt;
 │   ├── fichero1.txt&lt;br /&gt;
 │   └── fichero2.md&lt;br /&gt;
 └── carpeta3&lt;br /&gt;
     ├── fichero1.txt&lt;br /&gt;
     └── fichero2.md&lt;br /&gt;
&lt;br /&gt;
# Basándonos en el ejercicio anterior, cambiar la estructura a la siguiente (usar comandos mv y rm):&lt;br /&gt;
&lt;br /&gt;
 /tmp&lt;br /&gt;
 └── carpeta&lt;br /&gt;
     ├── fichero1.txt&lt;br /&gt;
     └── fichero2.md&lt;br /&gt;
&lt;br /&gt;
= Paso 2: Impresión por pantalla y redirección de salida =&lt;br /&gt;
&lt;br /&gt;
== echo ==&lt;br /&gt;
&lt;br /&gt;
Sirve para imprimir una línea de texto por pantalla o variables de entorno. Además, nos permite escribir en ficheros.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo &amp;lt;opción&amp;gt; &amp;lt;texto&amp;gt; &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Opciones curiosas: &lt;br /&gt;
&lt;br /&gt;
-e &amp;lt;PALABRA \bPALABRA&amp;gt;   Se eliminan los espacios entre las palabras&lt;br /&gt;
&lt;br /&gt;
-e &amp;lt;PALABRA \nPALABRA&amp;gt;	 Se añaden saltos de línea&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Una variable de entorno es una variable editada con algún valor, por defecto existen algunas creadas, como por ejemplo la variable HOME, que contiene el directorio del usuario:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo $HOME&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aprovecharemos y crearemos una variable nosotros:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ME=&amp;quot;my name&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Comprobamos:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo $ME&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Redirección de salida ==&lt;br /&gt;
&lt;br /&gt;
&amp;gt; y &amp;gt;&amp;gt; sirve para redirigir una salida. Por ejemplo, utilizando el comando echo,&lt;br /&gt;
podemos enviar un texto dentro de un fichero:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo &amp;quot;Esto es una prueba&amp;quot; &amp;gt; file.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La diferencia entre &amp;gt; y &amp;gt;&amp;gt; es que &amp;gt; sobrescribe lo que haya en el fichero y&lt;br /&gt;
añade el contenido, y &amp;gt;&amp;gt; no sobrescribe, solo añade el nuevo contenido.&lt;br /&gt;
&lt;br /&gt;
Hagamos la prueba:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo &amp;quot;Esto es una prueba&amp;quot; &amp;gt; file.txt&lt;br /&gt;
echo &amp;quot;Esto es una prueba2&amp;quot; &amp;gt; file.txt&lt;br /&gt;
echo &amp;quot;Esto es una prueba&amp;quot; &amp;gt;&amp;gt; file2.txt&lt;br /&gt;
echo &amp;quot;Esto es una prueba2&amp;quot; &amp;gt;&amp;gt; file2.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En cualquier caso, si el fichero no existe, se crea.&lt;br /&gt;
&lt;br /&gt;
= Paso 3: Manejo de ficheros y carpetas avanzado =&lt;br /&gt;
&lt;br /&gt;
== cat ==&lt;br /&gt;
&lt;br /&gt;
* Muestra el contenido de un fichero:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat file.txt&lt;br /&gt;
cat &amp;lt;fichero1&amp;gt; &amp;lt;fichero2&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Crea un fichero:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat &amp;gt;&amp;lt;nombre archivo&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
GUARDAR FICHERO: Pulsamos ENTER y luego CTRL + D&lt;br /&gt;
&lt;br /&gt;
* Añadir más lineas al fichero: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat &amp;gt;&amp;gt;&amp;lt;nombre fichero&amp;gt; &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Archivo: CAT.png|200px|thumb|left|Ejemplo]]&lt;br /&gt;
&lt;br /&gt;
== grep ==&lt;br /&gt;
&lt;br /&gt;
Sirve para buscar coincidencia de un cierto patrón en ficheros y muestra la coincidencia, en caso de encontrarla, por pantalla.&lt;br /&gt;
&lt;br /&gt;
Por ejemplo, para buscar el patrón ''prueba'' en el fichero ''fichero.txt''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ grep -n prueba fichero.txt&lt;br /&gt;
1:Esto es una prueba&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La opción '''-n''' muestra el número de línea.&lt;br /&gt;
&lt;br /&gt;
== wc ==&lt;br /&gt;
&lt;br /&gt;
Sirve para contar el número de palabras, caracteres, líneas o bytes que contiene un fichero.&lt;br /&gt;
&lt;br /&gt;
Las opciones más utilizadas son:&lt;br /&gt;
&lt;br /&gt;
* -l: muestra el número de líneas que contiene el fichero.&lt;br /&gt;
* -w: muestra el número de palabras.&lt;br /&gt;
* -m: muestra el número de caracteres&lt;br /&gt;
* -c: muestra el número de bytes&lt;br /&gt;
&lt;br /&gt;
Probemos y contemos todo en el fichero file2.txt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
wc -l file2.txt&lt;br /&gt;
wc -w file2.txt&lt;br /&gt;
wc -m file2.txt&lt;br /&gt;
wc -c file2.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podemos contar más de un fichero a la vez:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
wc -l file.txt file2.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nos mostrará el conteo de cada fichero y el total.&lt;br /&gt;
&lt;br /&gt;
== Tubería (|) ==&lt;br /&gt;
&lt;br /&gt;
La tubería nos servirá para conectar varios comandos al mismo tiempo, veamos&lt;br /&gt;
unos ejemplos, que siempre se entiende mejor:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat file2.txt | grep prueba&lt;br /&gt;
grep -nr prueba file2.txt | wc -l&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En el primer ejemplo, mostramos el contenido de file2.txt, y esta salida se la&lt;br /&gt;
pasamos al comando grep, el cual busca las líneas que contengan prueba.&lt;br /&gt;
&lt;br /&gt;
En el segundo, buscamos todas las líneas que contengan la palabra prueba, y esta&lt;br /&gt;
salida se la pasamos al comando wc, el cual cuenta las líneas de la salida del&lt;br /&gt;
comando grep.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Redirecciones ==&lt;br /&gt;
&lt;br /&gt;
Vamos a ver unos conceptos antes de seguir:&lt;br /&gt;
&lt;br /&gt;
* Entrada estándar: representa los datos que necesita una aplicación para funcionar, como por ejemplo un archivo de datos o información ingresada desde la terminal y es representado en la terminal como el tipo 0.&lt;br /&gt;
* Salida estándar: es la vía que utilizan las aplicaciones para mostrarte información, allí podemos ver el progreso o simplemente los mensajes que la  aplicación quiera darte en determinado momento y es representado en la terminal como el tipo 1.&lt;br /&gt;
* Error estándar: es la forma en que los programas te informan sobre los problemas que pueden encontrarse al momento de la ejecución y es representado en la terminal como el tipo 2.&lt;br /&gt;
&lt;br /&gt;
Las redirecciones nos sirven para mover la información de un tipo a otro.&lt;br /&gt;
&lt;br /&gt;
Ya vimos previamente el uso de &amp;gt; y &amp;gt;&amp;gt;, y también el |, veamos algunas más:&lt;br /&gt;
&lt;br /&gt;
* comando &amp;lt; fichero: Toma la entrada de fichero&lt;br /&gt;
* comando 2&amp;gt; fichero: Envía la salida de error de comando a fichero&lt;br /&gt;
* comando 2&amp;gt;&amp;amp;1: Envía la salida de error a la salida estándar&lt;br /&gt;
* comando &amp;amp;&amp;gt; fichero: Envía la salida estándar y de error a fichero; equivale a comando &amp;gt; fichero 2&amp;gt;&amp;amp;1&lt;br /&gt;
&lt;br /&gt;
= Paso 4: Usuarios y grupos =&lt;br /&gt;
&lt;br /&gt;
== whoami ==&lt;br /&gt;
&lt;br /&gt;
Sirve para obtener el usuario actual.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
whoami&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Lo más seguro es que nos aparezca ubuntu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== who ==&lt;br /&gt;
&lt;br /&gt;
Es para saber quien está ahora mismo en la máquina conectado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
who&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Seguramente solo estemos nosotros:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ubuntu   pts/0        2019-08-28 13:51 (192.168.122.1)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== su y sudo ==&lt;br /&gt;
&lt;br /&gt;
su (substitute user): sirve para cambiar de usuario. Por ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
su root&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aquí nos pedirá la contraseña del usuario al que queramos cambiar.&lt;br /&gt;
&lt;br /&gt;
sudo (super user do): no todas las distribuciones lo integran, porque es menos&lt;br /&gt;
seguro que su, este comando nos permite ejecutar un comando siendo otro usuario,&lt;br /&gt;
por defecto, si no le damos usuario, lo hará con el usuario root. Si sudo nos&lt;br /&gt;
pide contraseña, nos pide la contraseña del usuario, ya que el usuario es que el&lt;br /&gt;
tiene permisos para usar sudo o no.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo ls -a /root&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Si tuviéramos por ejemplo un usuario 'practica' y quisíeramos ejecutar un&lt;br /&gt;
comando en su nombre:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo -u practica ls&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== adduser y useradd ==&lt;br /&gt;
&lt;br /&gt;
Ambos comandos sirven para crear un nuevo usuario, pero tienen sus diferencias.&lt;br /&gt;
&lt;br /&gt;
useradd es un comando del sistema, y adduser es un script escrito en perl que&lt;br /&gt;
utiliza el comando useradd. La diferencia así de primeras es que adduser nos&lt;br /&gt;
crear el directorio /home/usuario y useradd necesita la opción -m para hacer lo&lt;br /&gt;
mismo. Se puede utilizar el que se quiera, aunque es más recomendable useradd,&lt;br /&gt;
ya que funcionará igual en todas las distribuciones.&lt;br /&gt;
&lt;br /&gt;
Vamos a añadir un usuario practica con su directorio en /home (notemos que&lt;br /&gt;
necesitamos permisos de super usuario para realizar esta tarea):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo useradd -m practica&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vamos a comprobar que el directorio home está creado y que el usuario practica&lt;br /&gt;
funciona:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls /home  # veremos el directorio practica&lt;br /&gt;
sudo -u practica whoami  # nos dirá que somo el usuario practica&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== passwd ==&lt;br /&gt;
&lt;br /&gt;
Sirve para modificar la contraseña de un usuario, por ejemplo, vamos a modificar&lt;br /&gt;
la contraseña del usuario que hemos creado previamente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo passwd practica&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nos preguntará dos veces la contraseña, y ya la tendremos actualizadas. Vamos&lt;br /&gt;
ahora a probar ahora el comando su para cambiar de usuario:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
su practica&lt;br /&gt;
whoami&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Veremos que hemos cambiado de usuario, para cerrar este usuario, escribimos&lt;br /&gt;
'exit' o pulsamos 'CTLR + D'&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== deluser y userdel ==&lt;br /&gt;
&lt;br /&gt;
Ambos sirven para borrar un usuario, similar a adduser y useradd, userdel es el&lt;br /&gt;
comando y deluser el script.&lt;br /&gt;
&lt;br /&gt;
Vamos a borrar el usuario que hemos creado, incluyendo el borrado de su /home&lt;br /&gt;
(opción -r):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
userdel -r practica&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Comprobemos que ya no tenemos usuario ni /home:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls /home&lt;br /&gt;
sudo -u practica whoami&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== addgroup y groupadd ==&lt;br /&gt;
&lt;br /&gt;
Ambos sirven para crear un grupo. Los grupos sirven para agrupar a los usuarios&lt;br /&gt;
y que estos tengan unos mismos permisos. Por ejemplo, cuando instalamos algunas&lt;br /&gt;
herramientas como por ejemplo docker, este crea el grupo docker automáticamente&lt;br /&gt;
para que fácilmente podamos añadir a un usuario al grupo, y este tenga los&lt;br /&gt;
permisos para trabajar con dicha herramienta.&lt;br /&gt;
&lt;br /&gt;
Vamos a crear un nuevo grupo, vamos a llamarle invitado:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo groupadd invitado&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== usermod y groups ==&lt;br /&gt;
&lt;br /&gt;
usermod es utilizado para asignar un grupo a un usuario.&lt;br /&gt;
&lt;br /&gt;
groups es utilizado para ver los grupos a los que pertenece un usuario.&lt;br /&gt;
&lt;br /&gt;
Vamos a añadir a un usuario practica, lo vamos a añadir al grupo invitado y&lt;br /&gt;
veremos los grupos a los que pertenece:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo useradd -m practica&lt;br /&gt;
sudo usermod -G invitado practica&lt;br /&gt;
groups practica&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Veremos que el usuario práctica pertenece al grupo invitado.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== delgroup y groupdel ==&lt;br /&gt;
&lt;br /&gt;
Ambos sirven para eliminar un grupo. Vamos a eliminar el grupo que hemos creado&lt;br /&gt;
anteriormente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo groupdel invitado&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podemos observar ahora que el usuario practica no pertenece al grupo invitado:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
groups practica&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Paso 5: Permisos =&lt;br /&gt;
&lt;br /&gt;
== Nomenclatura rwx y numérica ==&lt;br /&gt;
&lt;br /&gt;
Si hacemos un ls -l, la primera cadena que nos aparece son los permisos del&lt;br /&gt;
fichero (-rwxrw-r--), podemos dividirlo en 4 elementos:&lt;br /&gt;
&lt;br /&gt;
-    (rwx)   (rw-)  (r--)&lt;br /&gt;
|      |       |      |&lt;br /&gt;
type  owner   group  others&lt;br /&gt;
&lt;br /&gt;
* type: el tipo de fichero, pudiendo ser d (directorio), l (enlace simbólico), - (fichero normal)&lt;br /&gt;
* owner: permisos de propietario&lt;br /&gt;
* group: permisos de grupo&lt;br /&gt;
* others: permisos para los demás usuarios&lt;br /&gt;
&lt;br /&gt;
Significado de los permisos:&lt;br /&gt;
&lt;br /&gt;
* r: permisos de lectura&lt;br /&gt;
* w: permisos de escritura&lt;br /&gt;
* x: permisos de ejecución&lt;br /&gt;
&lt;br /&gt;
Por último, existe un modo abreviado para estos permisos que se utiliza con&lt;br /&gt;
números.&lt;br /&gt;
&lt;br /&gt;
rwx&lt;br /&gt;
001 en binario es 1 en decimal. Permisos de ejecución&lt;br /&gt;
010 en binario es 2 en decimal. Permisos de escritura&lt;br /&gt;
100 en binario es 4 en decimal. Permisos de lectura&lt;br /&gt;
&lt;br /&gt;
La suma de los permisos, nos da el valor numérico. Veamos un ejemplo:&lt;br /&gt;
rwx rw- r--&lt;br /&gt;
111 110 100&lt;br /&gt;
 7   6   4&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== chmod ==&lt;br /&gt;
&lt;br /&gt;
Permite cambiar los permisos de acceso a un fichero o directorio. Podemos dar&lt;br /&gt;
permisos de dos formas diferentes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== modo carácter ===&lt;br /&gt;
&lt;br /&gt;
Veamos primero unos detalles:&lt;br /&gt;
&lt;br /&gt;
Clases de usuario:&lt;br /&gt;
&lt;br /&gt;
* owner (u)&lt;br /&gt;
* group (g)&lt;br /&gt;
* others (o)&lt;br /&gt;
* all (a)&lt;br /&gt;
&lt;br /&gt;
Modificador:&lt;br /&gt;
&lt;br /&gt;
* añadir (+)&lt;br /&gt;
* eliminar (-)&lt;br /&gt;
* sobrescribir (=)&lt;br /&gt;
&lt;br /&gt;
Para dar permisos tendríamos que seleccionar la clase de usuario el modificador&lt;br /&gt;
y los permisos, veamos un ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chmod u+x file  # añadimos permisos de ejecución al usuario&lt;br /&gt;
chmod go-w file  # quitamos permisos de escritura al grupo y a otros usuarios&lt;br /&gt;
chmod u=rwx,go=r file  # Al usuario le damos todos los permisos, y al grupo y otros solo le damos permisos de lectura&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Modo octal ===&lt;br /&gt;
&lt;br /&gt;
Con el modo octacl, es como si siempre utilizáramos el modificar sobrescribir,&lt;br /&gt;
pongamos algunos ejemplos:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chmod 744 file  # Al usuario le damos todos los permisos, y al grupo y otros solo le damos permisos de lectura&lt;br /&gt;
chmod 777 file  # Todos tienen permisos para todo&lt;br /&gt;
chmod 600 file  # solo el propietario tiene permisos de lectura y escritura&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Ejemplos ===&lt;br /&gt;
&lt;br /&gt;
Vamos a ver como funciona el tema de permisos con unos ejemplos. Vamos a crear&lt;br /&gt;
un fichero pruebas y le vamos a quitar los permisos de escritura a nuestro&lt;br /&gt;
usuario, y le vamos a dar permisos de escritura a otros:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
touch pruebas&lt;br /&gt;
ls -l pruebas  # de esta forma veremos que por defecto los permisos son rw-rw-r--&lt;br /&gt;
chmod u-w,o+w pruebas&lt;br /&gt;
ls -l pruebas  # ahora los permisos deberían ser -w-rw-rw-&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Una vez dado los permisos, veamos que con nuestro usuario podemos leer pero no&lt;br /&gt;
escribir:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat pruebas&lt;br /&gt;
echo &amp;quot;probando&amp;quot; &amp;gt; pruebas&lt;br /&gt;
exit&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Y ahora vamos a ver que el usuario pruebas, puede leer y escribir:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
su practica&lt;br /&gt;
cat pruebas&lt;br /&gt;
echo &amp;quot;probando&amp;quot; &amp;gt; pruebas&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== chown ==&lt;br /&gt;
&lt;br /&gt;
Permite cambiar el propietario de un fichero o directorio.&lt;br /&gt;
&lt;br /&gt;
Vamos por ejemplo a pasarle ahora el fichero pruebas al usuario practica:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo chown practica pruebas&lt;br /&gt;
ls -l pruebas&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Veremos que el usuario actual ahora es pruebas, aunque vemos que el ls muestra&lt;br /&gt;
lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
-r--rw-rw- 1 practica ubuntu 9 Aug 29 09:34 pruebas&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hay que comentar un detalle, y es que los ficheros y directorios tienen asignado&lt;br /&gt;
un usuario y un grupo, por defecto se utiliza el mismo usuario como grupo&lt;br /&gt;
cuando creamos un nuevo fichero o directorio. Si queremos que cuando cambiemos&lt;br /&gt;
el propietario, cambiar tambien el grupo del fichero, podemos hacerlo de la&lt;br /&gt;
siguiente forma:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo chown practica:practica pruebas&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Una vez hecho esto, vamos ahora a probar que los permisos siguen funcionando&lt;br /&gt;
como antes, ahora con el usuario ubuntu, deberíamos de poder leer y escribir en&lt;br /&gt;
el fichero pruebas, y con el usuario practica, solo leer, esto es así por que&lt;br /&gt;
ahora el propitario es practica:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Pruebas usuario ubuntu&lt;br /&gt;
cat pruebas&lt;br /&gt;
echo test &amp;gt;&amp;gt; pruebas&lt;br /&gt;
# Pruebas usuario practica&lt;br /&gt;
su practica&lt;br /&gt;
cat pruebas&lt;br /&gt;
echo &amp;quot;probando&amp;quot; &amp;gt; pruebas&lt;br /&gt;
exit&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Paso 6: Procesos =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== ps ==&lt;br /&gt;
&lt;br /&gt;
Sirve para ver que procesos están ejecutándose en el sistema, veamos un ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ps aux  # con la opción aux mostraremos todos los procesos del sistema&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cada línea es un proceso, y cada proceso muestra su PID, usuario, cantidad de&lt;br /&gt;
memoria y cpu utilizada, comando y otros detalles.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
man kill &amp;amp;  # añadir el &amp;amp; al final de un comando hace que este se ejecute en segundo plano, por lo que se quedará abierto&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La salida de este comando nos mostrará el PID que tiene ese proceso que acabamos&lt;br /&gt;
de ejecutar, vamos a comprobarlo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ps aux | grep &amp;quot;man kill&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Veremos que el PID coincide.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== kill ==&lt;br /&gt;
&lt;br /&gt;
Este comando nos servirá para matar un proceso. kill se utiliza seguido de una&lt;br /&gt;
señal para enviar al proceso seguido de uno o varios PID. para ver las señales&lt;br /&gt;
disponibles, podemos listarlas:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kill -l&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Las más utilizadas suele ser SIGTERM y SIGKILL, la primera intenta terminar el&lt;br /&gt;
proceso de forma poco abrupta, y la segunda suele utilizarse cuando el proceso&lt;br /&gt;
no atiende a esta primera señal. Vamos ahora a terminar el proceso que creamos&lt;br /&gt;
antes, si no recordamos el PID, busquémoslo de nuevo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ps aux | grep &amp;quot;man kill&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enviamos señal para terminar el proceso y comprobamos que ha terminado:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kill -SIGTERM 8470&lt;br /&gt;
ps aux | grep &amp;quot;man kill&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
También podemos notar que en el listado de señales, hay unos números, podemos&lt;br /&gt;
utilizar esos números en vez de las palabras, por ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
man kill &amp;amp;&lt;br /&gt;
kill -15 PID_COMANDO_PREVIO&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Comprobamos que el proceso ha terminado correctamente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ps aux | grep &amp;quot;man kill&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Paso 7: Estado CPU, RAM y Disco =&lt;br /&gt;
&lt;br /&gt;
== top ==&lt;br /&gt;
&lt;br /&gt;
Este comando nos servirá para ver el listado de procesos y el estado de la CPU y&lt;br /&gt;
memoria.&lt;br /&gt;
&lt;br /&gt;
Probemos el comando y observemos detalladamente la salida:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
top&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para salir, pulsamos q.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== df y du ==&lt;br /&gt;
&lt;br /&gt;
df (disk free) y du (disk usage). Ambas son utilidades para mostrar el uso de&lt;br /&gt;
los discos.&lt;br /&gt;
&lt;br /&gt;
Con df mostraremos la información del espacio en cada dispositivo montado:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
df&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Estos comandos que nos muestran el tamaño de los ficheros, casi siempre tienen&lt;br /&gt;
una opción para mostrarlo en un formato más legible (-h)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
df -h&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mucho mejor.&lt;br /&gt;
&lt;br /&gt;
Ahora veamos el comando du, el cual nos mostrará el tamaño de un fichero o&lt;br /&gt;
directorio y sus subdirectorios, no olvidemos el -h:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
du -h /home/ubuntu&lt;br /&gt;
du -h /home/ubuntu/pruebas&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Si solo quisíeramos saber el total de una carpeta y nos nos interesan sus&lt;br /&gt;
subcarpetas, podemos utilizar la opción -s:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
du -sh /home/ubuntu&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== free ==&lt;br /&gt;
&lt;br /&gt;
Sirve para ver el estado de la memoria, como siempre, opción -h:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
free -h&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== lsblk ==&lt;br /&gt;
&lt;br /&gt;
Nos muestra la información de todos los dispositivos de bloques (discos duros,&lt;br /&gt;
pendrivers, CD_ROM, SSD, ...).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lsblk&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En la siguiente práctica se utilizará más a fondo este comando, ya que&lt;br /&gt;
trabajaremos con dispositivos.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Paso 8: Gestión de paquetes de software y repositorios =&lt;br /&gt;
&lt;br /&gt;
Los sistemas Linux incluyen, además de las herramientas básicas del sistema operativo, repositorios de software que puede ser opcionalmente instalados por el administrador del sistema. Los fabricantes de las distribuciones de Linux incluyen paquetes de software listos para ser instalados que se integran con el sistema.&lt;br /&gt;
&lt;br /&gt;
Un paquete incluye el software necesario para que una cierta aplicación funcione correctamente, así como sus paquetes de dependencia.&lt;br /&gt;
&lt;br /&gt;
En Ubuntu, la herramienta de gestión de paquetes de software y repositorios se llama '''apt'''.&lt;br /&gt;
&lt;br /&gt;
=== Listado de repositorios de paquetes de software ===&lt;br /&gt;
&lt;br /&gt;
En Ubuntu el listado de repositorios se encuentra en el fichero /etc/apt/sources.list. Podemos comprobar que repositorios tenemos añadido:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat /etc/apt/sources.list&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Actualización del listado de paquetes de software ===&lt;br /&gt;
&lt;br /&gt;
Para actualizar el listado de paquetes utilizaremos el comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt update&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Instalación un nuevo paquete ===&lt;br /&gt;
&lt;br /&gt;
Para instalar un nuevo paquete, utilizaremos la orden install, por ejemplo, vamos a instalar tree, similar al ls pero muestra el arbol de directorios:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt install tree&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Desinstalación de un paquete ===&lt;br /&gt;
&lt;br /&gt;
Usaremos la orden purge o la orden remove, purge nos lo eliminad todo, y remove mantiene la configuración en el caso de que el paquete la tuviese. Vamos a eliminar el paquete instalado previamente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt purge tree&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Paso 9: Módulos =&lt;br /&gt;
&lt;br /&gt;
Los módulos del kernel de Linux son partes que podemos añadir o quitar de forma&lt;br /&gt;
sencilla con el fin de añadir o quitar funcionalidad. Por ejemplo, algunas de&lt;br /&gt;
estas funcionalidades son:&lt;br /&gt;
&lt;br /&gt;
* Registrar temperaturas de nuestros componentes&lt;br /&gt;
* Hacer funcionr la tarjeta de red wifi&lt;br /&gt;
* Cargar los drivers de una tarjeta gráfica&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== lsmod ==&lt;br /&gt;
&lt;br /&gt;
Comando para ver los módulos que estamos usando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lsmod&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== lspci y usb-devices ==&lt;br /&gt;
&lt;br /&gt;
Estos comandos nos servirán para ver el hardware que está conectado a nuestro&lt;br /&gt;
ordenador. Con lspci veremos el listado del hardware integrado y con usb-devices&lt;br /&gt;
el que está conectado por hardware.&lt;br /&gt;
&lt;br /&gt;
Normalmente, como los módulos se utilizan para dar funcionalidad un hardware,&lt;br /&gt;
aquí en los listado de hardware podremos ver que módulo está utilizando cada&lt;br /&gt;
hardware:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lspci -v&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Veremos una línea en algunos dispositivos que nos diga que módulo estamos&lt;br /&gt;
usando, pongo un pequeño trozo de la salida del comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
00:1f.2 SATA controller: Intel Corporation 82801IR/IO/IH (ICH9R/DO/DH) 6 port SATA Controller [AHCI mode] (rev 02) (prog-if 01 [AHCI 1.0])&lt;br /&gt;
    Subsystem: Red Hat, Inc. QEMU Virtual Machine&lt;br /&gt;
    Flags: bus master, fast devsel, latency 0, IRQ 35&lt;br /&gt;
    I/O ports at c0c0 [size=32]&lt;br /&gt;
    Memory at fcc1d000 (32-bit, non-prefetchable) [size=4K]&lt;br /&gt;
    Capabilities: &amp;lt;access denied&amp;gt;&lt;br /&gt;
    Kernel driver in use: ahci&lt;br /&gt;
    Kernel modules: ahci&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vemos que el hardware INTEl Corporation está utilizando el módulo ahci.&lt;br /&gt;
&lt;br /&gt;
Probemos ahora con usb-devices:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
usb-devices&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Veamos un trozo de código:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
T:  Bus=01 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#=  2 Spd=480 MxCh= 0&lt;br /&gt;
D:  Ver= 2.00 Cls=00(&amp;gt;ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs=  1&lt;br /&gt;
P:  Vendor=0627 ProdID=0001 Rev=00.00&lt;br /&gt;
S:  Manufacturer=QEMU&lt;br /&gt;
S:  Product=QEMU USB Tablet&lt;br /&gt;
S:  SerialNumber=42&lt;br /&gt;
C:  #Ifs= 1 Cfg#= 1 Atr=a0 MxPwr=100mA&lt;br /&gt;
I:  If#= 0 Alt= 0 #EPs= 1 Cls=03(HID  ) Sub=00 Prot=00 Driver=usbhid&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vemos que el teclado está utilizando el módulo usbhid&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== insmod ==&lt;br /&gt;
&lt;br /&gt;
Sirve para cargar un módulo en el kernel, imaginemos que tenemos un módulo que&lt;br /&gt;
se llama modulo1:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo insmod modulo1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== rmmod ==&lt;br /&gt;
&lt;br /&gt;
Sirve para eliminar un módulo de kernel. Imaginemos que queremos borrar un&lt;br /&gt;
módulo cargado anteriormente con el nombre modulo1:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo rmmod modulo1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Marramfer12</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Administraci%C3%B3n_b%C3%A1sica&amp;diff=4554</id>
		<title>Administración básica</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Administraci%C3%B3n_b%C3%A1sica&amp;diff=4554"/>
				<updated>2019-11-13T14:13:05Z</updated>
		
		<summary type="html">&lt;p&gt;Marramfer12: /* echo */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Para realizar esta práctica utilizaremos una de las máquinas virtuales que generamos en la práctica anterior.&lt;br /&gt;
&lt;br /&gt;
En esta práctica aprenderemos a utilizar el interprete de ordenes (también conocido como ''[https://www.traficantes.net/sites/default/files/pdfs/En%20el%20principio%20fue...-TdS.pdf línea de comandos]'') y a aprender nociones básicas de administración de sistemas Linux.&lt;br /&gt;
&lt;br /&gt;
= Paso 0: Breve introducción al sistema Linux =&lt;br /&gt;
&lt;br /&gt;
== Estructura básica del sistema de archivos ==&lt;br /&gt;
&lt;br /&gt;
En un sistema Linux, todas las carpetas y ficheros en el sistema de fichero pende de la carpeta raíz que se representa con la /.&lt;br /&gt;
&lt;br /&gt;
 /&lt;br /&gt;
 ├── bin&lt;br /&gt;
 ├── usr&lt;br /&gt;
 │   ├── local&lt;br /&gt;
 │   ├── bin&lt;br /&gt;
 │   └── ...&lt;br /&gt;
 ├── dev&lt;br /&gt;
 │   ├── sda&lt;br /&gt;
 │   ├── sda1&lt;br /&gt;
 │   └── ...&lt;br /&gt;
 ├── home&lt;br /&gt;
 │   ├── practica&lt;br /&gt;
 │   │   ├── tema1.pdf&lt;br /&gt;
 │   │   ├── boletin1.pdf&lt;br /&gt;
 │   │   └── ...&lt;br /&gt;
 │   ├── profesor&lt;br /&gt;
 │   └── ...&lt;br /&gt;
 └── etc&lt;br /&gt;
     ├── firefox&lt;br /&gt;
     ├── libvirt&lt;br /&gt;
     ├── ...&lt;br /&gt;
     └── ...&lt;br /&gt;
&lt;br /&gt;
Como puedes observar, el sistema de fichero emplea una estructura de árbol.&lt;br /&gt;
&lt;br /&gt;
== Nociones básicas ==&lt;br /&gt;
&lt;br /&gt;
·Aplicaciones con nombres compuestos: usar guion entre palabras&lt;br /&gt;
&lt;br /&gt;
·Nombres con espacios en blanco: Escribir entre comillas dobles&lt;br /&gt;
&lt;br /&gt;
·Espacios en blanco para separar ordenes (ej: instalar varios paquetes )&lt;br /&gt;
&lt;br /&gt;
·Formato general de una orden: comando [-opciones] [argumentos]&lt;br /&gt;
&lt;br /&gt;
·'''IMPORTANTE''': Diferencia entre mayúsculas y minúsculas&lt;br /&gt;
&lt;br /&gt;
== Carpetas . y .. ==&lt;br /&gt;
&lt;br /&gt;
Toda carpeta en un sistema Linux dispone de dos pseudocarpetas, la '''.''' y la '''..'':&lt;br /&gt;
&lt;br /&gt;
* La pseudocarpeta '''..''' hace referencia a la carpeta padre que contiene a esta carpeta.&lt;br /&gt;
* La pseudocarpeta '''.''' hace referencia a la carpeta actual, es por tanto una autoreferencia.&lt;br /&gt;
&lt;br /&gt;
En el caso de la carpeta raíz, la pseudocarpeta '''.''' y '''..''' hacen referencia a la propia carpeta raíz, se trata, por tanto de una excepción.&lt;br /&gt;
&lt;br /&gt;
== Directorio de trabajo actual y la orden cd ==&lt;br /&gt;
&lt;br /&gt;
Cada interprete de ordenes dispone de una ''carpeta de trabajo actual'' ('''c'''urrent '''w''orking '''d''irectory, en inglés). La carpeta de trabajo actual se puede modificar con la orden '''cd''' ('''c'''hange '''d'''irectory, en inglés).&lt;br /&gt;
&lt;br /&gt;
Por ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ cd ..&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nos situaría en la carpeta padre, empleando una ruta relativa.&lt;br /&gt;
&lt;br /&gt;
Si volvemos a escribir desde /home &amp;quot; cd .. &amp;quot; nos lleva a '''/$''' &lt;br /&gt;
&lt;br /&gt;
Para situarnos en el raíz, podemos emplear una ruta absoluta:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ cd /&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En caso de que queramos volver a la carpeta de usuario, bastaría con invocar a '''cd''' sin más o ''' cd ~ '''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ cd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''MUY IMPORTANTE''': No es lo mismo cd.. que ''' cd .. ''', es necesario el espacio después del cd.&lt;br /&gt;
&lt;br /&gt;
== Rutas absolutas, rutas relativas ==&lt;br /&gt;
&lt;br /&gt;
Para hacer referencia a un fichero o una carpeta se usan ruta absolutas o rutas relativas.&lt;br /&gt;
&lt;br /&gt;
Las rutas absolutas siempre empieza por /, de manera que toman como punto de referencia la carpeta raíz (/). Por ejemplo, una ruta absoluta a la carpeta '''prueba''' que está almacenada en la carpeta del usuario '''ubuntu''' es '/home/ubuntu/prueba/'.&lt;br /&gt;
&lt;br /&gt;
Las ruta relativa toma como referencia la carpeta de trabajo actual. Para averiguar la carpeta de trabajo actual disponemos de la orden '''pwd'''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ pwd&lt;br /&gt;
/home/ubuntu&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En base a la carpeta de trabajo actual, empleando la pseudocarpeta '''..''', se puede construir rutas relativas. Por ejemplo, para referenciar un fichero '''fichero.txt''' en la carpeta temporal, podemos emplear la ruta relativa '''../../tmp/fichero.txt'''.&lt;br /&gt;
&lt;br /&gt;
Aunque probablemente sea más cómodo emplear una ruta absoluta en este caso, que sería '''/tmp/fichero.txt'''.&lt;br /&gt;
&lt;br /&gt;
== Intérprete de órdenes ==&lt;br /&gt;
&lt;br /&gt;
El intérprete de órdenes es un lanzador de aplicaciones textual que emplea el teclado como dispositivo de entrada de datos. Mediante el teclado, se escribe el nombre del programa que se quiere lanzar y al pulsa la tecla ''intro'' el intérprete de ordenes ejecutara dicho programa. Por defecto, el intérprete de ordenes que emplea Ubuntu por defecto es '''bash'''.&lt;br /&gt;
&lt;br /&gt;
== man: ver la página de manual de una orden ==&lt;br /&gt;
&lt;br /&gt;
La orden '''man''' te será útil para ver las páginas de manual.&lt;br /&gt;
&lt;br /&gt;
Su estructura básica es:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
man &amp;lt;comando&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aunque también se utiliza con la opción ''' -a ''' de All, que también muestra las entradas comenzadas por '''.''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
man -a &amp;lt;comando&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Este programa toma como entrada el nombre de la orden de la que quieres consultar su página de manual, por ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
man ls&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nos da información del manual de la orden '''ls'''.&lt;br /&gt;
&lt;br /&gt;
Para salir de la página de manual, pulsa la tecla '''q''' (la primera letra de la palabra '''quit''', en inglés).&lt;br /&gt;
&lt;br /&gt;
quit = salir&lt;br /&gt;
&lt;br /&gt;
Normalmente, los programas ofrecen opciones de ayuda, como '''--help'''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
man --help&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
También se puede emplear la versión compacta a la hora de especificar opciones.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
man -h&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En general, todas las ordenes suelen ofrecer una opción de ayuda.&lt;br /&gt;
&lt;br /&gt;
= Paso 1: Operaciones básicas con el sistema de ficheros =&lt;br /&gt;
&lt;br /&gt;
== ls ==&lt;br /&gt;
&lt;br /&gt;
Lista los ficheros y carpetas. Si no se especifica nada, muestra los ficheros y carpetas que contiene la carpeta de trabajo actual.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Si se especifica una ruta, muestra las carpetas y ficheros contenidos en dicha ruta, por ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ ls /&lt;br /&gt;
bin  boot  data  dev  etc  home  initrd.img  initrd.img.old  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  snap  srv  sys  tmp  usr  var  vmlinuz  vmlinuz.old&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al emplear '''/''' como ruta absoluta, muestra el contenido de la carpeta raíz.&lt;br /&gt;
&lt;br /&gt;
Las opciones más usadas de este programa suelen ser:&lt;br /&gt;
&lt;br /&gt;
* -a: muestra los ficheros y carpetas ''ocultos''. En Linux, cualquier fichero o carpeta cuyo nombre empiece por . se considera ''oculto''. Esto incluye también en el listado las pseudocarpetas . y ..&lt;br /&gt;
&lt;br /&gt;
* -l: se muestra en lista y aporta datos como la fecha de última modificación, propietario, grupo, tamaño en bytes y nombre:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ ls -a&lt;br /&gt;
&lt;br /&gt;
.  ..  .bash_history  .bash_logout  .bashrc  .profile  .ssh&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ambas opciones se puede combinar:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ ls -la /&lt;br /&gt;
&lt;br /&gt;
total 92&lt;br /&gt;
drwxr-xr-x  24 root root  4096 Aug 28 09:50 .&lt;br /&gt;
drwxr-xr-x  24 root root  4096 Aug 28 09:50 ..&lt;br /&gt;
drwxr-xr-x   2 root root  4096 Aug 22 12:37 bin&lt;br /&gt;
drwxr-xr-x   4 root root  4096 Aug 22 12:37 boot&lt;br /&gt;
drwx------   3 root root  4096 Aug 28 09:50 data&lt;br /&gt;
drwxr-xr-x  18 root root  3780 Aug 28 09:46 dev&lt;br /&gt;
[...]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Otras opciones útiles son:&lt;br /&gt;
&lt;br /&gt;
* -s : muestra el tamaño en bloques de cada archivo&lt;br /&gt;
&lt;br /&gt;
* -t : aporta el día y la hora de modificación&lt;br /&gt;
&lt;br /&gt;
* -R : lista también las subcarpetas &lt;br /&gt;
&lt;br /&gt;
* --color : muestra el contenido coloreado&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Los '''permisos''' se emplean en base a tres capacidades:&lt;br /&gt;
&lt;br /&gt;
* Lectura, que se codifica con '''r''' (read, en inglés).&lt;br /&gt;
* Escritura, que se codifica con '''w''' (write, en inglés).&lt;br /&gt;
* Ejecutación, que se codifica con '''x''' (execute, en inglés).&lt;br /&gt;
&lt;br /&gt;
La primera columna muestra los permisos que codifican:&lt;br /&gt;
&lt;br /&gt;
* Tipo de entrada: '''d''' indica ''directorio'' (''carpeta'').&lt;br /&gt;
* Permisos del propietario, primera terna de rwx&lt;br /&gt;
* Permisos del grupo, segunda terna de rwx&lt;br /&gt;
* Permisos para el resto del mundo, tercera terna de rwx.&lt;br /&gt;
&lt;br /&gt;
A continuación, aparecen el propietario y el grupo, seguidos de la fecha de última modificación y el nombre del fichero o carpeta.&lt;br /&gt;
&lt;br /&gt;
La ayuda ( help ) en ls solo funciona con ''' ls --help ''' no con ls -h&lt;br /&gt;
&lt;br /&gt;
== mkdir ==&lt;br /&gt;
&lt;br /&gt;
Crea un nuevo directorio.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ mkdir test&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Crea una carpeta test en el directorio actual.&lt;br /&gt;
&lt;br /&gt;
Comprobemos que se ha creado bien:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ ls&lt;br /&gt;
test&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Con la opción '''-p''', permite crear sucesivas carpetas anidadas de una sola vez, por ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ mkdir -p a/b/c&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Que crea la siguiente estructura de carpetas.&lt;br /&gt;
&lt;br /&gt;
 a&lt;br /&gt;
 └── b&lt;br /&gt;
     └── c&lt;br /&gt;
&lt;br /&gt;
== touch ==&lt;br /&gt;
&lt;br /&gt;
Crea un nuevo fichero vacío (sin contenido) con el nombre que especifiquemos.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ touch file.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Comprobamos que el fichero se ha creado correctamente.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ ls&lt;br /&gt;
file.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== cp ==&lt;br /&gt;
&lt;br /&gt;
Copia un fichero o directorio.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ cp file.txt file_copy.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para copiar una carpeta y su contenido tenemos que usar la opción -r (recursivo).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ cp -r test test_copy&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Comprobamos el resultado con la orden '''ls'''.&lt;br /&gt;
&lt;br /&gt;
* Si nos encontramos en la carpeta destino, la estructura sería la siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ cp &amp;lt;nombre ruta origen&amp;gt; &amp;lt;nombre archivo&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== mv ==&lt;br /&gt;
&lt;br /&gt;
Mueve fichero o carpeta.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mv file_copy.txt file2.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
También se emplea para renombrar.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mv test_copy test_copy2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== rm ==&lt;br /&gt;
&lt;br /&gt;
* Borra un fichero o carpeta vacía:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rm &amp;lt;nombre&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Para borrar una carpeta no vacía y su contenido:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rm -r &amp;lt;nombre&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''IMPORTANTE''': No hacer jamás ''' rm -r * '''&lt;br /&gt;
&lt;br /&gt;
* EJERCICIOS:&lt;br /&gt;
&lt;br /&gt;
# Crear la siguiente estructura dentro del directorio /tmp (usar los comandos mkdir, touch y cp):&lt;br /&gt;
&lt;br /&gt;
 /tmp&lt;br /&gt;
 ├── carpeta1&lt;br /&gt;
 ├── carpeta2&lt;br /&gt;
 │   ├── fichero1.txt&lt;br /&gt;
 │   └── fichero2.md&lt;br /&gt;
 └── carpeta3&lt;br /&gt;
     ├── fichero1.txt&lt;br /&gt;
     └── fichero2.md&lt;br /&gt;
&lt;br /&gt;
# Basándonos en el ejercicio anterior, cambiar la estructura a la siguiente (usar comandos mv y rm):&lt;br /&gt;
&lt;br /&gt;
 /tmp&lt;br /&gt;
 └── carpeta&lt;br /&gt;
     ├── fichero1.txt&lt;br /&gt;
     └── fichero2.md&lt;br /&gt;
&lt;br /&gt;
= Paso 2: Impresión por pantalla y redirección de salida =&lt;br /&gt;
&lt;br /&gt;
== echo ==&lt;br /&gt;
&lt;br /&gt;
Sirve para imprimir una línea de texto por pantalla o variables de entorno. Además, nos permite escribir en ficheros.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo &amp;lt;opción&amp;gt; &amp;lt;texto&amp;gt; &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Opciones curiosas: &lt;br /&gt;
&lt;br /&gt;
-e &amp;lt;PALABRA \bPALABRA&amp;gt;   Se eliminan los espacios entre las palabras&lt;br /&gt;
&lt;br /&gt;
-e &amp;lt;PALABRA \nPALABRA&amp;gt;	 Se añaden saltos de línea&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Una variable de entorno es una variable editada con algún valor, por defecto existen algunas creadas, como por ejemplo la variable HOME, que contiene el directorio del usuario:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo $HOME&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aprovecharemos y crearemos una variable nosotros:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ME=&amp;quot;my name&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Comprobamos:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo $ME&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Redirección de salida ==&lt;br /&gt;
&lt;br /&gt;
&amp;gt; y &amp;gt;&amp;gt; sirve para redirigir una salida. Por ejemplo, utilizando el comando echo,&lt;br /&gt;
podemos enviar un texto dentro de un fichero:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo &amp;quot;Esto es una prueba&amp;quot; &amp;gt; file.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La diferencia entre &amp;gt; y &amp;gt;&amp;gt; es que &amp;gt; sobrescribe lo que haya en el fichero y&lt;br /&gt;
añade el contenido, y &amp;gt;&amp;gt; no sobrescribe, solo añade el nuevo contenido.&lt;br /&gt;
&lt;br /&gt;
Hagamos la prueba:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo &amp;quot;Esto es una prueba&amp;quot; &amp;gt; file.txt&lt;br /&gt;
echo &amp;quot;Esto es una prueba2&amp;quot; &amp;gt; file.txt&lt;br /&gt;
echo &amp;quot;Esto es una prueba&amp;quot; &amp;gt;&amp;gt; file2.txt&lt;br /&gt;
echo &amp;quot;Esto es una prueba2&amp;quot; &amp;gt;&amp;gt; file2.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En cualquier caso, si el fichero no existe, se crea.&lt;br /&gt;
&lt;br /&gt;
= Paso 3: Manejo de ficheros y carpetas avanzado =&lt;br /&gt;
&lt;br /&gt;
== cat ==&lt;br /&gt;
&lt;br /&gt;
Muestra el contenido de un fichero.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat file.txt&lt;br /&gt;
cat file2.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== grep ==&lt;br /&gt;
&lt;br /&gt;
Sirve para buscar coincidencia de un cierto patrón en ficheros y muestra la coincidencia, en caso de encontrarla, por pantalla.&lt;br /&gt;
&lt;br /&gt;
Por ejemplo, para buscar el patrón ''prueba'' en el fichero ''fichero.txt''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ grep -n prueba fichero.txt&lt;br /&gt;
1:Esto es una prueba&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La opción '''-n''' muestra el número de línea.&lt;br /&gt;
&lt;br /&gt;
== wc ==&lt;br /&gt;
&lt;br /&gt;
Sirve para contar el número de palabras, caracteres, líneas o bytes que contiene un fichero.&lt;br /&gt;
&lt;br /&gt;
Las opciones más utilizadas son:&lt;br /&gt;
&lt;br /&gt;
* -l: muestra el número de líneas que contiene el fichero.&lt;br /&gt;
* -w: muestra el número de palabras.&lt;br /&gt;
* -m: muestra el número de caracteres&lt;br /&gt;
* -c: muestra el número de bytes&lt;br /&gt;
&lt;br /&gt;
Probemos y contemos todo en el fichero file2.txt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
wc -l file2.txt&lt;br /&gt;
wc -w file2.txt&lt;br /&gt;
wc -m file2.txt&lt;br /&gt;
wc -c file2.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podemos contar más de un fichero a la vez:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
wc -l file.txt file2.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nos mostrará el conteo de cada fichero y el total.&lt;br /&gt;
&lt;br /&gt;
== Tubería (|) ==&lt;br /&gt;
&lt;br /&gt;
La tubería nos servirá para conectar varios comandos al mismo tiempo, veamos&lt;br /&gt;
unos ejemplos, que siempre se entiende mejor:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat file2.txt | grep prueba&lt;br /&gt;
grep -nr prueba file2.txt | wc -l&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En el primer ejemplo, mostramos el contenido de file2.txt, y esta salida se la&lt;br /&gt;
pasamos al comando grep, el cual busca las líneas que contengan prueba.&lt;br /&gt;
&lt;br /&gt;
En el segundo, buscamos todas las líneas que contengan la palabra prueba, y esta&lt;br /&gt;
salida se la pasamos al comando wc, el cual cuenta las líneas de la salida del&lt;br /&gt;
comando grep.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Redirecciones ==&lt;br /&gt;
&lt;br /&gt;
Vamos a ver unos conceptos antes de seguir:&lt;br /&gt;
&lt;br /&gt;
* Entrada estándar: representa los datos que necesita una aplicación para funcionar, como por ejemplo un archivo de datos o información ingresada desde la terminal y es representado en la terminal como el tipo 0.&lt;br /&gt;
* Salida estándar: es la vía que utilizan las aplicaciones para mostrarte información, allí podemos ver el progreso o simplemente los mensajes que la  aplicación quiera darte en determinado momento y es representado en la terminal como el tipo 1.&lt;br /&gt;
* Error estándar: es la forma en que los programas te informan sobre los problemas que pueden encontrarse al momento de la ejecución y es representado en la terminal como el tipo 2.&lt;br /&gt;
&lt;br /&gt;
Las redirecciones nos sirven para mover la información de un tipo a otro.&lt;br /&gt;
&lt;br /&gt;
Ya vimos previamente el uso de &amp;gt; y &amp;gt;&amp;gt;, y también el |, veamos algunas más:&lt;br /&gt;
&lt;br /&gt;
* comando &amp;lt; fichero: Toma la entrada de fichero&lt;br /&gt;
* comando 2&amp;gt; fichero: Envía la salida de error de comando a fichero&lt;br /&gt;
* comando 2&amp;gt;&amp;amp;1: Envía la salida de error a la salida estándar&lt;br /&gt;
* comando &amp;amp;&amp;gt; fichero: Envía la salida estándar y de error a fichero; equivale a comando &amp;gt; fichero 2&amp;gt;&amp;amp;1&lt;br /&gt;
&lt;br /&gt;
= Paso 4: Usuarios y grupos =&lt;br /&gt;
&lt;br /&gt;
== whoami ==&lt;br /&gt;
&lt;br /&gt;
Sirve para obtener el usuario actual.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
whoami&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Lo más seguro es que nos aparezca ubuntu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== who ==&lt;br /&gt;
&lt;br /&gt;
Es para saber quien está ahora mismo en la máquina conectado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
who&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Seguramente solo estemos nosotros:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ubuntu   pts/0        2019-08-28 13:51 (192.168.122.1)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== su y sudo ==&lt;br /&gt;
&lt;br /&gt;
su (substitute user): sirve para cambiar de usuario. Por ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
su root&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aquí nos pedirá la contraseña del usuario al que queramos cambiar.&lt;br /&gt;
&lt;br /&gt;
sudo (super user do): no todas las distribuciones lo integran, porque es menos&lt;br /&gt;
seguro que su, este comando nos permite ejecutar un comando siendo otro usuario,&lt;br /&gt;
por defecto, si no le damos usuario, lo hará con el usuario root. Si sudo nos&lt;br /&gt;
pide contraseña, nos pide la contraseña del usuario, ya que el usuario es que el&lt;br /&gt;
tiene permisos para usar sudo o no.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo ls -a /root&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Si tuviéramos por ejemplo un usuario 'practica' y quisíeramos ejecutar un&lt;br /&gt;
comando en su nombre:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo -u practica ls&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== adduser y useradd ==&lt;br /&gt;
&lt;br /&gt;
Ambos comandos sirven para crear un nuevo usuario, pero tienen sus diferencias.&lt;br /&gt;
&lt;br /&gt;
useradd es un comando del sistema, y adduser es un script escrito en perl que&lt;br /&gt;
utiliza el comando useradd. La diferencia así de primeras es que adduser nos&lt;br /&gt;
crear el directorio /home/usuario y useradd necesita la opción -m para hacer lo&lt;br /&gt;
mismo. Se puede utilizar el que se quiera, aunque es más recomendable useradd,&lt;br /&gt;
ya que funcionará igual en todas las distribuciones.&lt;br /&gt;
&lt;br /&gt;
Vamos a añadir un usuario practica con su directorio en /home (notemos que&lt;br /&gt;
necesitamos permisos de super usuario para realizar esta tarea):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo useradd -m practica&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vamos a comprobar que el directorio home está creado y que el usuario practica&lt;br /&gt;
funciona:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls /home  # veremos el directorio practica&lt;br /&gt;
sudo -u practica whoami  # nos dirá que somo el usuario practica&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== passwd ==&lt;br /&gt;
&lt;br /&gt;
Sirve para modificar la contraseña de un usuario, por ejemplo, vamos a modificar&lt;br /&gt;
la contraseña del usuario que hemos creado previamente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo passwd practica&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nos preguntará dos veces la contraseña, y ya la tendremos actualizadas. Vamos&lt;br /&gt;
ahora a probar ahora el comando su para cambiar de usuario:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
su practica&lt;br /&gt;
whoami&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Veremos que hemos cambiado de usuario, para cerrar este usuario, escribimos&lt;br /&gt;
'exit' o pulsamos 'CTLR + D'&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== deluser y userdel ==&lt;br /&gt;
&lt;br /&gt;
Ambos sirven para borrar un usuario, similar a adduser y useradd, userdel es el&lt;br /&gt;
comando y deluser el script.&lt;br /&gt;
&lt;br /&gt;
Vamos a borrar el usuario que hemos creado, incluyendo el borrado de su /home&lt;br /&gt;
(opción -r):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
userdel -r practica&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Comprobemos que ya no tenemos usuario ni /home:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls /home&lt;br /&gt;
sudo -u practica whoami&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== addgroup y groupadd ==&lt;br /&gt;
&lt;br /&gt;
Ambos sirven para crear un grupo. Los grupos sirven para agrupar a los usuarios&lt;br /&gt;
y que estos tengan unos mismos permisos. Por ejemplo, cuando instalamos algunas&lt;br /&gt;
herramientas como por ejemplo docker, este crea el grupo docker automáticamente&lt;br /&gt;
para que fácilmente podamos añadir a un usuario al grupo, y este tenga los&lt;br /&gt;
permisos para trabajar con dicha herramienta.&lt;br /&gt;
&lt;br /&gt;
Vamos a crear un nuevo grupo, vamos a llamarle invitado:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo groupadd invitado&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== usermod y groups ==&lt;br /&gt;
&lt;br /&gt;
usermod es utilizado para asignar un grupo a un usuario.&lt;br /&gt;
&lt;br /&gt;
groups es utilizado para ver los grupos a los que pertenece un usuario.&lt;br /&gt;
&lt;br /&gt;
Vamos a añadir a un usuario practica, lo vamos a añadir al grupo invitado y&lt;br /&gt;
veremos los grupos a los que pertenece:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo useradd -m practica&lt;br /&gt;
sudo usermod -G invitado practica&lt;br /&gt;
groups practica&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Veremos que el usuario práctica pertenece al grupo invitado.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== delgroup y groupdel ==&lt;br /&gt;
&lt;br /&gt;
Ambos sirven para eliminar un grupo. Vamos a eliminar el grupo que hemos creado&lt;br /&gt;
anteriormente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo groupdel invitado&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podemos observar ahora que el usuario practica no pertenece al grupo invitado:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
groups practica&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Paso 5: Permisos =&lt;br /&gt;
&lt;br /&gt;
== Nomenclatura rwx y numérica ==&lt;br /&gt;
&lt;br /&gt;
Si hacemos un ls -l, la primera cadena que nos aparece son los permisos del&lt;br /&gt;
fichero (-rwxrw-r--), podemos dividirlo en 4 elementos:&lt;br /&gt;
&lt;br /&gt;
-    (rwx)   (rw-)  (r--)&lt;br /&gt;
|      |       |      |&lt;br /&gt;
type  owner   group  others&lt;br /&gt;
&lt;br /&gt;
* type: el tipo de fichero, pudiendo ser d (directorio), l (enlace simbólico), - (fichero normal)&lt;br /&gt;
* owner: permisos de propietario&lt;br /&gt;
* group: permisos de grupo&lt;br /&gt;
* others: permisos para los demás usuarios&lt;br /&gt;
&lt;br /&gt;
Significado de los permisos:&lt;br /&gt;
&lt;br /&gt;
* r: permisos de lectura&lt;br /&gt;
* w: permisos de escritura&lt;br /&gt;
* x: permisos de ejecución&lt;br /&gt;
&lt;br /&gt;
Por último, existe un modo abreviado para estos permisos que se utiliza con&lt;br /&gt;
números.&lt;br /&gt;
&lt;br /&gt;
rwx&lt;br /&gt;
001 en binario es 1 en decimal. Permisos de ejecución&lt;br /&gt;
010 en binario es 2 en decimal. Permisos de escritura&lt;br /&gt;
100 en binario es 4 en decimal. Permisos de lectura&lt;br /&gt;
&lt;br /&gt;
La suma de los permisos, nos da el valor numérico. Veamos un ejemplo:&lt;br /&gt;
rwx rw- r--&lt;br /&gt;
111 110 100&lt;br /&gt;
 7   6   4&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== chmod ==&lt;br /&gt;
&lt;br /&gt;
Permite cambiar los permisos de acceso a un fichero o directorio. Podemos dar&lt;br /&gt;
permisos de dos formas diferentes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== modo carácter ===&lt;br /&gt;
&lt;br /&gt;
Veamos primero unos detalles:&lt;br /&gt;
&lt;br /&gt;
Clases de usuario:&lt;br /&gt;
&lt;br /&gt;
* owner (u)&lt;br /&gt;
* group (g)&lt;br /&gt;
* others (o)&lt;br /&gt;
* all (a)&lt;br /&gt;
&lt;br /&gt;
Modificador:&lt;br /&gt;
&lt;br /&gt;
* añadir (+)&lt;br /&gt;
* eliminar (-)&lt;br /&gt;
* sobrescribir (=)&lt;br /&gt;
&lt;br /&gt;
Para dar permisos tendríamos que seleccionar la clase de usuario el modificador&lt;br /&gt;
y los permisos, veamos un ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chmod u+x file  # añadimos permisos de ejecución al usuario&lt;br /&gt;
chmod go-w file  # quitamos permisos de escritura al grupo y a otros usuarios&lt;br /&gt;
chmod u=rwx,go=r file  # Al usuario le damos todos los permisos, y al grupo y otros solo le damos permisos de lectura&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Modo octal ===&lt;br /&gt;
&lt;br /&gt;
Con el modo octacl, es como si siempre utilizáramos el modificar sobrescribir,&lt;br /&gt;
pongamos algunos ejemplos:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chmod 744 file  # Al usuario le damos todos los permisos, y al grupo y otros solo le damos permisos de lectura&lt;br /&gt;
chmod 777 file  # Todos tienen permisos para todo&lt;br /&gt;
chmod 600 file  # solo el propietario tiene permisos de lectura y escritura&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Ejemplos ===&lt;br /&gt;
&lt;br /&gt;
Vamos a ver como funciona el tema de permisos con unos ejemplos. Vamos a crear&lt;br /&gt;
un fichero pruebas y le vamos a quitar los permisos de escritura a nuestro&lt;br /&gt;
usuario, y le vamos a dar permisos de escritura a otros:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
touch pruebas&lt;br /&gt;
ls -l pruebas  # de esta forma veremos que por defecto los permisos son rw-rw-r--&lt;br /&gt;
chmod u-w,o+w pruebas&lt;br /&gt;
ls -l pruebas  # ahora los permisos deberían ser -w-rw-rw-&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Una vez dado los permisos, veamos que con nuestro usuario podemos leer pero no&lt;br /&gt;
escribir:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat pruebas&lt;br /&gt;
echo &amp;quot;probando&amp;quot; &amp;gt; pruebas&lt;br /&gt;
exit&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Y ahora vamos a ver que el usuario pruebas, puede leer y escribir:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
su practica&lt;br /&gt;
cat pruebas&lt;br /&gt;
echo &amp;quot;probando&amp;quot; &amp;gt; pruebas&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== chown ==&lt;br /&gt;
&lt;br /&gt;
Permite cambiar el propietario de un fichero o directorio.&lt;br /&gt;
&lt;br /&gt;
Vamos por ejemplo a pasarle ahora el fichero pruebas al usuario practica:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo chown practica pruebas&lt;br /&gt;
ls -l pruebas&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Veremos que el usuario actual ahora es pruebas, aunque vemos que el ls muestra&lt;br /&gt;
lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
-r--rw-rw- 1 practica ubuntu 9 Aug 29 09:34 pruebas&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hay que comentar un detalle, y es que los ficheros y directorios tienen asignado&lt;br /&gt;
un usuario y un grupo, por defecto se utiliza el mismo usuario como grupo&lt;br /&gt;
cuando creamos un nuevo fichero o directorio. Si queremos que cuando cambiemos&lt;br /&gt;
el propietario, cambiar tambien el grupo del fichero, podemos hacerlo de la&lt;br /&gt;
siguiente forma:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo chown practica:practica pruebas&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Una vez hecho esto, vamos ahora a probar que los permisos siguen funcionando&lt;br /&gt;
como antes, ahora con el usuario ubuntu, deberíamos de poder leer y escribir en&lt;br /&gt;
el fichero pruebas, y con el usuario practica, solo leer, esto es así por que&lt;br /&gt;
ahora el propitario es practica:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Pruebas usuario ubuntu&lt;br /&gt;
cat pruebas&lt;br /&gt;
echo test &amp;gt;&amp;gt; pruebas&lt;br /&gt;
# Pruebas usuario practica&lt;br /&gt;
su practica&lt;br /&gt;
cat pruebas&lt;br /&gt;
echo &amp;quot;probando&amp;quot; &amp;gt; pruebas&lt;br /&gt;
exit&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Paso 6: Procesos =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== ps ==&lt;br /&gt;
&lt;br /&gt;
Sirve para ver que procesos están ejecutándose en el sistema, veamos un ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ps aux  # con la opción aux mostraremos todos los procesos del sistema&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cada línea es un proceso, y cada proceso muestra su PID, usuario, cantidad de&lt;br /&gt;
memoria y cpu utilizada, comando y otros detalles.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
man kill &amp;amp;  # añadir el &amp;amp; al final de un comando hace que este se ejecute en segundo plano, por lo que se quedará abierto&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La salida de este comando nos mostrará el PID que tiene ese proceso que acabamos&lt;br /&gt;
de ejecutar, vamos a comprobarlo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ps aux | grep &amp;quot;man kill&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Veremos que el PID coincide.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== kill ==&lt;br /&gt;
&lt;br /&gt;
Este comando nos servirá para matar un proceso. kill se utiliza seguido de una&lt;br /&gt;
señal para enviar al proceso seguido de uno o varios PID. para ver las señales&lt;br /&gt;
disponibles, podemos listarlas:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kill -l&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Las más utilizadas suele ser SIGTERM y SIGKILL, la primera intenta terminar el&lt;br /&gt;
proceso de forma poco abrupta, y la segunda suele utilizarse cuando el proceso&lt;br /&gt;
no atiende a esta primera señal. Vamos ahora a terminar el proceso que creamos&lt;br /&gt;
antes, si no recordamos el PID, busquémoslo de nuevo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ps aux | grep &amp;quot;man kill&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enviamos señal para terminar el proceso y comprobamos que ha terminado:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kill -SIGTERM 8470&lt;br /&gt;
ps aux | grep &amp;quot;man kill&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
También podemos notar que en el listado de señales, hay unos números, podemos&lt;br /&gt;
utilizar esos números en vez de las palabras, por ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
man kill &amp;amp;&lt;br /&gt;
kill -15 PID_COMANDO_PREVIO&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Comprobamos que el proceso ha terminado correctamente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ps aux | grep &amp;quot;man kill&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Paso 7: Estado CPU, RAM y Disco =&lt;br /&gt;
&lt;br /&gt;
== top ==&lt;br /&gt;
&lt;br /&gt;
Este comando nos servirá para ver el listado de procesos y el estado de la CPU y&lt;br /&gt;
memoria.&lt;br /&gt;
&lt;br /&gt;
Probemos el comando y observemos detalladamente la salida:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
top&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para salir, pulsamos q.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== df y du ==&lt;br /&gt;
&lt;br /&gt;
df (disk free) y du (disk usage). Ambas son utilidades para mostrar el uso de&lt;br /&gt;
los discos.&lt;br /&gt;
&lt;br /&gt;
Con df mostraremos la información del espacio en cada dispositivo montado:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
df&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Estos comandos que nos muestran el tamaño de los ficheros, casi siempre tienen&lt;br /&gt;
una opción para mostrarlo en un formato más legible (-h)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
df -h&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mucho mejor.&lt;br /&gt;
&lt;br /&gt;
Ahora veamos el comando du, el cual nos mostrará el tamaño de un fichero o&lt;br /&gt;
directorio y sus subdirectorios, no olvidemos el -h:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
du -h /home/ubuntu&lt;br /&gt;
du -h /home/ubuntu/pruebas&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Si solo quisíeramos saber el total de una carpeta y nos nos interesan sus&lt;br /&gt;
subcarpetas, podemos utilizar la opción -s:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
du -sh /home/ubuntu&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== free ==&lt;br /&gt;
&lt;br /&gt;
Sirve para ver el estado de la memoria, como siempre, opción -h:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
free -h&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== lsblk ==&lt;br /&gt;
&lt;br /&gt;
Nos muestra la información de todos los dispositivos de bloques (discos duros,&lt;br /&gt;
pendrivers, CD_ROM, SSD, ...).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lsblk&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En la siguiente práctica se utilizará más a fondo este comando, ya que&lt;br /&gt;
trabajaremos con dispositivos.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Paso 8: Gestión de paquetes de software y repositorios =&lt;br /&gt;
&lt;br /&gt;
Los sistemas Linux incluyen, además de las herramientas básicas del sistema operativo, repositorios de software que puede ser opcionalmente instalados por el administrador del sistema. Los fabricantes de las distribuciones de Linux incluyen paquetes de software listos para ser instalados que se integran con el sistema.&lt;br /&gt;
&lt;br /&gt;
Un paquete incluye el software necesario para que una cierta aplicación funcione correctamente, así como sus paquetes de dependencia.&lt;br /&gt;
&lt;br /&gt;
En Ubuntu, la herramienta de gestión de paquetes de software y repositorios se llama '''apt'''.&lt;br /&gt;
&lt;br /&gt;
=== Listado de repositorios de paquetes de software ===&lt;br /&gt;
&lt;br /&gt;
En Ubuntu el listado de repositorios se encuentra en el fichero /etc/apt/sources.list. Podemos comprobar que repositorios tenemos añadido:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat /etc/apt/sources.list&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Actualización del listado de paquetes de software ===&lt;br /&gt;
&lt;br /&gt;
Para actualizar el listado de paquetes utilizaremos el comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt update&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Instalación un nuevo paquete ===&lt;br /&gt;
&lt;br /&gt;
Para instalar un nuevo paquete, utilizaremos la orden install, por ejemplo, vamos a instalar tree, similar al ls pero muestra el arbol de directorios:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt install tree&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Desinstalación de un paquete ===&lt;br /&gt;
&lt;br /&gt;
Usaremos la orden purge o la orden remove, purge nos lo eliminad todo, y remove mantiene la configuración en el caso de que el paquete la tuviese. Vamos a eliminar el paquete instalado previamente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt purge tree&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Paso 9: Módulos =&lt;br /&gt;
&lt;br /&gt;
Los módulos del kernel de Linux son partes que podemos añadir o quitar de forma&lt;br /&gt;
sencilla con el fin de añadir o quitar funcionalidad. Por ejemplo, algunas de&lt;br /&gt;
estas funcionalidades son:&lt;br /&gt;
&lt;br /&gt;
* Registrar temperaturas de nuestros componentes&lt;br /&gt;
* Hacer funcionr la tarjeta de red wifi&lt;br /&gt;
* Cargar los drivers de una tarjeta gráfica&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== lsmod ==&lt;br /&gt;
&lt;br /&gt;
Comando para ver los módulos que estamos usando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lsmod&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== lspci y usb-devices ==&lt;br /&gt;
&lt;br /&gt;
Estos comandos nos servirán para ver el hardware que está conectado a nuestro&lt;br /&gt;
ordenador. Con lspci veremos el listado del hardware integrado y con usb-devices&lt;br /&gt;
el que está conectado por hardware.&lt;br /&gt;
&lt;br /&gt;
Normalmente, como los módulos se utilizan para dar funcionalidad un hardware,&lt;br /&gt;
aquí en los listado de hardware podremos ver que módulo está utilizando cada&lt;br /&gt;
hardware:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lspci -v&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Veremos una línea en algunos dispositivos que nos diga que módulo estamos&lt;br /&gt;
usando, pongo un pequeño trozo de la salida del comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
00:1f.2 SATA controller: Intel Corporation 82801IR/IO/IH (ICH9R/DO/DH) 6 port SATA Controller [AHCI mode] (rev 02) (prog-if 01 [AHCI 1.0])&lt;br /&gt;
    Subsystem: Red Hat, Inc. QEMU Virtual Machine&lt;br /&gt;
    Flags: bus master, fast devsel, latency 0, IRQ 35&lt;br /&gt;
    I/O ports at c0c0 [size=32]&lt;br /&gt;
    Memory at fcc1d000 (32-bit, non-prefetchable) [size=4K]&lt;br /&gt;
    Capabilities: &amp;lt;access denied&amp;gt;&lt;br /&gt;
    Kernel driver in use: ahci&lt;br /&gt;
    Kernel modules: ahci&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vemos que el hardware INTEl Corporation está utilizando el módulo ahci.&lt;br /&gt;
&lt;br /&gt;
Probemos ahora con usb-devices:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
usb-devices&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Veamos un trozo de código:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
T:  Bus=01 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#=  2 Spd=480 MxCh= 0&lt;br /&gt;
D:  Ver= 2.00 Cls=00(&amp;gt;ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs=  1&lt;br /&gt;
P:  Vendor=0627 ProdID=0001 Rev=00.00&lt;br /&gt;
S:  Manufacturer=QEMU&lt;br /&gt;
S:  Product=QEMU USB Tablet&lt;br /&gt;
S:  SerialNumber=42&lt;br /&gt;
C:  #Ifs= 1 Cfg#= 1 Atr=a0 MxPwr=100mA&lt;br /&gt;
I:  If#= 0 Alt= 0 #EPs= 1 Cls=03(HID  ) Sub=00 Prot=00 Driver=usbhid&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vemos que el teclado está utilizando el módulo usbhid&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== insmod ==&lt;br /&gt;
&lt;br /&gt;
Sirve para cargar un módulo en el kernel, imaginemos que tenemos un módulo que&lt;br /&gt;
se llama modulo1:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo insmod modulo1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== rmmod ==&lt;br /&gt;
&lt;br /&gt;
Sirve para eliminar un módulo de kernel. Imaginemos que queremos borrar un&lt;br /&gt;
módulo cargado anteriormente con el nombre modulo1:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo rmmod modulo1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Marramfer12</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Administraci%C3%B3n_b%C3%A1sica&amp;diff=4553</id>
		<title>Administración básica</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Administraci%C3%B3n_b%C3%A1sica&amp;diff=4553"/>
				<updated>2019-11-13T14:11:53Z</updated>
		
		<summary type="html">&lt;p&gt;Marramfer12: /* echo */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Para realizar esta práctica utilizaremos una de las máquinas virtuales que generamos en la práctica anterior.&lt;br /&gt;
&lt;br /&gt;
En esta práctica aprenderemos a utilizar el interprete de ordenes (también conocido como ''[https://www.traficantes.net/sites/default/files/pdfs/En%20el%20principio%20fue...-TdS.pdf línea de comandos]'') y a aprender nociones básicas de administración de sistemas Linux.&lt;br /&gt;
&lt;br /&gt;
= Paso 0: Breve introducción al sistema Linux =&lt;br /&gt;
&lt;br /&gt;
== Estructura básica del sistema de archivos ==&lt;br /&gt;
&lt;br /&gt;
En un sistema Linux, todas las carpetas y ficheros en el sistema de fichero pende de la carpeta raíz que se representa con la /.&lt;br /&gt;
&lt;br /&gt;
 /&lt;br /&gt;
 ├── bin&lt;br /&gt;
 ├── usr&lt;br /&gt;
 │   ├── local&lt;br /&gt;
 │   ├── bin&lt;br /&gt;
 │   └── ...&lt;br /&gt;
 ├── dev&lt;br /&gt;
 │   ├── sda&lt;br /&gt;
 │   ├── sda1&lt;br /&gt;
 │   └── ...&lt;br /&gt;
 ├── home&lt;br /&gt;
 │   ├── practica&lt;br /&gt;
 │   │   ├── tema1.pdf&lt;br /&gt;
 │   │   ├── boletin1.pdf&lt;br /&gt;
 │   │   └── ...&lt;br /&gt;
 │   ├── profesor&lt;br /&gt;
 │   └── ...&lt;br /&gt;
 └── etc&lt;br /&gt;
     ├── firefox&lt;br /&gt;
     ├── libvirt&lt;br /&gt;
     ├── ...&lt;br /&gt;
     └── ...&lt;br /&gt;
&lt;br /&gt;
Como puedes observar, el sistema de fichero emplea una estructura de árbol.&lt;br /&gt;
&lt;br /&gt;
== Nociones básicas ==&lt;br /&gt;
&lt;br /&gt;
·Aplicaciones con nombres compuestos: usar guion entre palabras&lt;br /&gt;
&lt;br /&gt;
·Nombres con espacios en blanco: Escribir entre comillas dobles&lt;br /&gt;
&lt;br /&gt;
·Espacios en blanco para separar ordenes (ej: instalar varios paquetes )&lt;br /&gt;
&lt;br /&gt;
·Formato general de una orden: comando [-opciones] [argumentos]&lt;br /&gt;
&lt;br /&gt;
·'''IMPORTANTE''': Diferencia entre mayúsculas y minúsculas&lt;br /&gt;
&lt;br /&gt;
== Carpetas . y .. ==&lt;br /&gt;
&lt;br /&gt;
Toda carpeta en un sistema Linux dispone de dos pseudocarpetas, la '''.''' y la '''..'':&lt;br /&gt;
&lt;br /&gt;
* La pseudocarpeta '''..''' hace referencia a la carpeta padre que contiene a esta carpeta.&lt;br /&gt;
* La pseudocarpeta '''.''' hace referencia a la carpeta actual, es por tanto una autoreferencia.&lt;br /&gt;
&lt;br /&gt;
En el caso de la carpeta raíz, la pseudocarpeta '''.''' y '''..''' hacen referencia a la propia carpeta raíz, se trata, por tanto de una excepción.&lt;br /&gt;
&lt;br /&gt;
== Directorio de trabajo actual y la orden cd ==&lt;br /&gt;
&lt;br /&gt;
Cada interprete de ordenes dispone de una ''carpeta de trabajo actual'' ('''c'''urrent '''w''orking '''d''irectory, en inglés). La carpeta de trabajo actual se puede modificar con la orden '''cd''' ('''c'''hange '''d'''irectory, en inglés).&lt;br /&gt;
&lt;br /&gt;
Por ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ cd ..&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nos situaría en la carpeta padre, empleando una ruta relativa.&lt;br /&gt;
&lt;br /&gt;
Si volvemos a escribir desde /home &amp;quot; cd .. &amp;quot; nos lleva a '''/$''' &lt;br /&gt;
&lt;br /&gt;
Para situarnos en el raíz, podemos emplear una ruta absoluta:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ cd /&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En caso de que queramos volver a la carpeta de usuario, bastaría con invocar a '''cd''' sin más o ''' cd ~ '''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ cd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''MUY IMPORTANTE''': No es lo mismo cd.. que ''' cd .. ''', es necesario el espacio después del cd.&lt;br /&gt;
&lt;br /&gt;
== Rutas absolutas, rutas relativas ==&lt;br /&gt;
&lt;br /&gt;
Para hacer referencia a un fichero o una carpeta se usan ruta absolutas o rutas relativas.&lt;br /&gt;
&lt;br /&gt;
Las rutas absolutas siempre empieza por /, de manera que toman como punto de referencia la carpeta raíz (/). Por ejemplo, una ruta absoluta a la carpeta '''prueba''' que está almacenada en la carpeta del usuario '''ubuntu''' es '/home/ubuntu/prueba/'.&lt;br /&gt;
&lt;br /&gt;
Las ruta relativa toma como referencia la carpeta de trabajo actual. Para averiguar la carpeta de trabajo actual disponemos de la orden '''pwd'''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ pwd&lt;br /&gt;
/home/ubuntu&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En base a la carpeta de trabajo actual, empleando la pseudocarpeta '''..''', se puede construir rutas relativas. Por ejemplo, para referenciar un fichero '''fichero.txt''' en la carpeta temporal, podemos emplear la ruta relativa '''../../tmp/fichero.txt'''.&lt;br /&gt;
&lt;br /&gt;
Aunque probablemente sea más cómodo emplear una ruta absoluta en este caso, que sería '''/tmp/fichero.txt'''.&lt;br /&gt;
&lt;br /&gt;
== Intérprete de órdenes ==&lt;br /&gt;
&lt;br /&gt;
El intérprete de órdenes es un lanzador de aplicaciones textual que emplea el teclado como dispositivo de entrada de datos. Mediante el teclado, se escribe el nombre del programa que se quiere lanzar y al pulsa la tecla ''intro'' el intérprete de ordenes ejecutara dicho programa. Por defecto, el intérprete de ordenes que emplea Ubuntu por defecto es '''bash'''.&lt;br /&gt;
&lt;br /&gt;
== man: ver la página de manual de una orden ==&lt;br /&gt;
&lt;br /&gt;
La orden '''man''' te será útil para ver las páginas de manual.&lt;br /&gt;
&lt;br /&gt;
Su estructura básica es:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
man &amp;lt;comando&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aunque también se utiliza con la opción ''' -a ''' de All, que también muestra las entradas comenzadas por '''.''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
man -a &amp;lt;comando&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Este programa toma como entrada el nombre de la orden de la que quieres consultar su página de manual, por ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
man ls&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nos da información del manual de la orden '''ls'''.&lt;br /&gt;
&lt;br /&gt;
Para salir de la página de manual, pulsa la tecla '''q''' (la primera letra de la palabra '''quit''', en inglés).&lt;br /&gt;
&lt;br /&gt;
quit = salir&lt;br /&gt;
&lt;br /&gt;
Normalmente, los programas ofrecen opciones de ayuda, como '''--help'''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
man --help&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
También se puede emplear la versión compacta a la hora de especificar opciones.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
man -h&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En general, todas las ordenes suelen ofrecer una opción de ayuda.&lt;br /&gt;
&lt;br /&gt;
= Paso 1: Operaciones básicas con el sistema de ficheros =&lt;br /&gt;
&lt;br /&gt;
== ls ==&lt;br /&gt;
&lt;br /&gt;
Lista los ficheros y carpetas. Si no se especifica nada, muestra los ficheros y carpetas que contiene la carpeta de trabajo actual.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Si se especifica una ruta, muestra las carpetas y ficheros contenidos en dicha ruta, por ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ ls /&lt;br /&gt;
bin  boot  data  dev  etc  home  initrd.img  initrd.img.old  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  snap  srv  sys  tmp  usr  var  vmlinuz  vmlinuz.old&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al emplear '''/''' como ruta absoluta, muestra el contenido de la carpeta raíz.&lt;br /&gt;
&lt;br /&gt;
Las opciones más usadas de este programa suelen ser:&lt;br /&gt;
&lt;br /&gt;
* -a: muestra los ficheros y carpetas ''ocultos''. En Linux, cualquier fichero o carpeta cuyo nombre empiece por . se considera ''oculto''. Esto incluye también en el listado las pseudocarpetas . y ..&lt;br /&gt;
&lt;br /&gt;
* -l: se muestra en lista y aporta datos como la fecha de última modificación, propietario, grupo, tamaño en bytes y nombre:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ ls -a&lt;br /&gt;
&lt;br /&gt;
.  ..  .bash_history  .bash_logout  .bashrc  .profile  .ssh&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ambas opciones se puede combinar:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ ls -la /&lt;br /&gt;
&lt;br /&gt;
total 92&lt;br /&gt;
drwxr-xr-x  24 root root  4096 Aug 28 09:50 .&lt;br /&gt;
drwxr-xr-x  24 root root  4096 Aug 28 09:50 ..&lt;br /&gt;
drwxr-xr-x   2 root root  4096 Aug 22 12:37 bin&lt;br /&gt;
drwxr-xr-x   4 root root  4096 Aug 22 12:37 boot&lt;br /&gt;
drwx------   3 root root  4096 Aug 28 09:50 data&lt;br /&gt;
drwxr-xr-x  18 root root  3780 Aug 28 09:46 dev&lt;br /&gt;
[...]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Otras opciones útiles son:&lt;br /&gt;
&lt;br /&gt;
* -s : muestra el tamaño en bloques de cada archivo&lt;br /&gt;
&lt;br /&gt;
* -t : aporta el día y la hora de modificación&lt;br /&gt;
&lt;br /&gt;
* -R : lista también las subcarpetas &lt;br /&gt;
&lt;br /&gt;
* --color : muestra el contenido coloreado&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Los '''permisos''' se emplean en base a tres capacidades:&lt;br /&gt;
&lt;br /&gt;
* Lectura, que se codifica con '''r''' (read, en inglés).&lt;br /&gt;
* Escritura, que se codifica con '''w''' (write, en inglés).&lt;br /&gt;
* Ejecutación, que se codifica con '''x''' (execute, en inglés).&lt;br /&gt;
&lt;br /&gt;
La primera columna muestra los permisos que codifican:&lt;br /&gt;
&lt;br /&gt;
* Tipo de entrada: '''d''' indica ''directorio'' (''carpeta'').&lt;br /&gt;
* Permisos del propietario, primera terna de rwx&lt;br /&gt;
* Permisos del grupo, segunda terna de rwx&lt;br /&gt;
* Permisos para el resto del mundo, tercera terna de rwx.&lt;br /&gt;
&lt;br /&gt;
A continuación, aparecen el propietario y el grupo, seguidos de la fecha de última modificación y el nombre del fichero o carpeta.&lt;br /&gt;
&lt;br /&gt;
La ayuda ( help ) en ls solo funciona con ''' ls --help ''' no con ls -h&lt;br /&gt;
&lt;br /&gt;
== mkdir ==&lt;br /&gt;
&lt;br /&gt;
Crea un nuevo directorio.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ mkdir test&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Crea una carpeta test en el directorio actual.&lt;br /&gt;
&lt;br /&gt;
Comprobemos que se ha creado bien:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ ls&lt;br /&gt;
test&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Con la opción '''-p''', permite crear sucesivas carpetas anidadas de una sola vez, por ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ mkdir -p a/b/c&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Que crea la siguiente estructura de carpetas.&lt;br /&gt;
&lt;br /&gt;
 a&lt;br /&gt;
 └── b&lt;br /&gt;
     └── c&lt;br /&gt;
&lt;br /&gt;
== touch ==&lt;br /&gt;
&lt;br /&gt;
Crea un nuevo fichero vacío (sin contenido) con el nombre que especifiquemos.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ touch file.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Comprobamos que el fichero se ha creado correctamente.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ ls&lt;br /&gt;
file.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== cp ==&lt;br /&gt;
&lt;br /&gt;
Copia un fichero o directorio.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ cp file.txt file_copy.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para copiar una carpeta y su contenido tenemos que usar la opción -r (recursivo).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ cp -r test test_copy&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Comprobamos el resultado con la orden '''ls'''.&lt;br /&gt;
&lt;br /&gt;
* Si nos encontramos en la carpeta destino, la estructura sería la siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ cp &amp;lt;nombre ruta origen&amp;gt; &amp;lt;nombre archivo&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== mv ==&lt;br /&gt;
&lt;br /&gt;
Mueve fichero o carpeta.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mv file_copy.txt file2.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
También se emplea para renombrar.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mv test_copy test_copy2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== rm ==&lt;br /&gt;
&lt;br /&gt;
* Borra un fichero o carpeta vacía:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rm &amp;lt;nombre&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Para borrar una carpeta no vacía y su contenido:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rm -r &amp;lt;nombre&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''IMPORTANTE''': No hacer jamás ''' rm -r * '''&lt;br /&gt;
&lt;br /&gt;
* EJERCICIOS:&lt;br /&gt;
&lt;br /&gt;
# Crear la siguiente estructura dentro del directorio /tmp (usar los comandos mkdir, touch y cp):&lt;br /&gt;
&lt;br /&gt;
 /tmp&lt;br /&gt;
 ├── carpeta1&lt;br /&gt;
 ├── carpeta2&lt;br /&gt;
 │   ├── fichero1.txt&lt;br /&gt;
 │   └── fichero2.md&lt;br /&gt;
 └── carpeta3&lt;br /&gt;
     ├── fichero1.txt&lt;br /&gt;
     └── fichero2.md&lt;br /&gt;
&lt;br /&gt;
# Basándonos en el ejercicio anterior, cambiar la estructura a la siguiente (usar comandos mv y rm):&lt;br /&gt;
&lt;br /&gt;
 /tmp&lt;br /&gt;
 └── carpeta&lt;br /&gt;
     ├── fichero1.txt&lt;br /&gt;
     └── fichero2.md&lt;br /&gt;
&lt;br /&gt;
= Paso 2: Impresión por pantalla y redirección de salida =&lt;br /&gt;
&lt;br /&gt;
== echo ==&lt;br /&gt;
&lt;br /&gt;
Sirve para imprimir una línea de texto por pantalla o variables de entorno. Además, nos permite escribir en ficheros.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo &amp;lt;opción&amp;gt; &amp;lt;texto&amp;gt; &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Opciones curiosas: &lt;br /&gt;
&lt;br /&gt;
-e &amp;lt;PALABRA \bPALABRA&amp;gt;   Se eliminan los espacios entre las palabras&lt;br /&gt;
-e &amp;lt;PALABRA \nPALABRA&amp;gt;	 Se añaden saltos de línea&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Una variable de entorno es una variable editada con algún valor, por defecto existen algunas creadas, como por ejemplo la variable HOME, que contiene el directorio del usuario:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo $HOME&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aprovecharemos y crearemos una variable nosotros:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ME=&amp;quot;my name&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Comprobamos:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo $ME&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Redirección de salida ==&lt;br /&gt;
&lt;br /&gt;
&amp;gt; y &amp;gt;&amp;gt; sirve para redirigir una salida. Por ejemplo, utilizando el comando echo,&lt;br /&gt;
podemos enviar un texto dentro de un fichero:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo &amp;quot;Esto es una prueba&amp;quot; &amp;gt; file.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La diferencia entre &amp;gt; y &amp;gt;&amp;gt; es que &amp;gt; sobrescribe lo que haya en el fichero y&lt;br /&gt;
añade el contenido, y &amp;gt;&amp;gt; no sobrescribe, solo añade el nuevo contenido.&lt;br /&gt;
&lt;br /&gt;
Hagamos la prueba:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo &amp;quot;Esto es una prueba&amp;quot; &amp;gt; file.txt&lt;br /&gt;
echo &amp;quot;Esto es una prueba2&amp;quot; &amp;gt; file.txt&lt;br /&gt;
echo &amp;quot;Esto es una prueba&amp;quot; &amp;gt;&amp;gt; file2.txt&lt;br /&gt;
echo &amp;quot;Esto es una prueba2&amp;quot; &amp;gt;&amp;gt; file2.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En cualquier caso, si el fichero no existe, se crea.&lt;br /&gt;
&lt;br /&gt;
= Paso 3: Manejo de ficheros y carpetas avanzado =&lt;br /&gt;
&lt;br /&gt;
== cat ==&lt;br /&gt;
&lt;br /&gt;
Muestra el contenido de un fichero.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat file.txt&lt;br /&gt;
cat file2.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== grep ==&lt;br /&gt;
&lt;br /&gt;
Sirve para buscar coincidencia de un cierto patrón en ficheros y muestra la coincidencia, en caso de encontrarla, por pantalla.&lt;br /&gt;
&lt;br /&gt;
Por ejemplo, para buscar el patrón ''prueba'' en el fichero ''fichero.txt''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ grep -n prueba fichero.txt&lt;br /&gt;
1:Esto es una prueba&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La opción '''-n''' muestra el número de línea.&lt;br /&gt;
&lt;br /&gt;
== wc ==&lt;br /&gt;
&lt;br /&gt;
Sirve para contar el número de palabras, caracteres, líneas o bytes que contiene un fichero.&lt;br /&gt;
&lt;br /&gt;
Las opciones más utilizadas son:&lt;br /&gt;
&lt;br /&gt;
* -l: muestra el número de líneas que contiene el fichero.&lt;br /&gt;
* -w: muestra el número de palabras.&lt;br /&gt;
* -m: muestra el número de caracteres&lt;br /&gt;
* -c: muestra el número de bytes&lt;br /&gt;
&lt;br /&gt;
Probemos y contemos todo en el fichero file2.txt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
wc -l file2.txt&lt;br /&gt;
wc -w file2.txt&lt;br /&gt;
wc -m file2.txt&lt;br /&gt;
wc -c file2.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podemos contar más de un fichero a la vez:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
wc -l file.txt file2.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nos mostrará el conteo de cada fichero y el total.&lt;br /&gt;
&lt;br /&gt;
== Tubería (|) ==&lt;br /&gt;
&lt;br /&gt;
La tubería nos servirá para conectar varios comandos al mismo tiempo, veamos&lt;br /&gt;
unos ejemplos, que siempre se entiende mejor:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat file2.txt | grep prueba&lt;br /&gt;
grep -nr prueba file2.txt | wc -l&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En el primer ejemplo, mostramos el contenido de file2.txt, y esta salida se la&lt;br /&gt;
pasamos al comando grep, el cual busca las líneas que contengan prueba.&lt;br /&gt;
&lt;br /&gt;
En el segundo, buscamos todas las líneas que contengan la palabra prueba, y esta&lt;br /&gt;
salida se la pasamos al comando wc, el cual cuenta las líneas de la salida del&lt;br /&gt;
comando grep.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Redirecciones ==&lt;br /&gt;
&lt;br /&gt;
Vamos a ver unos conceptos antes de seguir:&lt;br /&gt;
&lt;br /&gt;
* Entrada estándar: representa los datos que necesita una aplicación para funcionar, como por ejemplo un archivo de datos o información ingresada desde la terminal y es representado en la terminal como el tipo 0.&lt;br /&gt;
* Salida estándar: es la vía que utilizan las aplicaciones para mostrarte información, allí podemos ver el progreso o simplemente los mensajes que la  aplicación quiera darte en determinado momento y es representado en la terminal como el tipo 1.&lt;br /&gt;
* Error estándar: es la forma en que los programas te informan sobre los problemas que pueden encontrarse al momento de la ejecución y es representado en la terminal como el tipo 2.&lt;br /&gt;
&lt;br /&gt;
Las redirecciones nos sirven para mover la información de un tipo a otro.&lt;br /&gt;
&lt;br /&gt;
Ya vimos previamente el uso de &amp;gt; y &amp;gt;&amp;gt;, y también el |, veamos algunas más:&lt;br /&gt;
&lt;br /&gt;
* comando &amp;lt; fichero: Toma la entrada de fichero&lt;br /&gt;
* comando 2&amp;gt; fichero: Envía la salida de error de comando a fichero&lt;br /&gt;
* comando 2&amp;gt;&amp;amp;1: Envía la salida de error a la salida estándar&lt;br /&gt;
* comando &amp;amp;&amp;gt; fichero: Envía la salida estándar y de error a fichero; equivale a comando &amp;gt; fichero 2&amp;gt;&amp;amp;1&lt;br /&gt;
&lt;br /&gt;
= Paso 4: Usuarios y grupos =&lt;br /&gt;
&lt;br /&gt;
== whoami ==&lt;br /&gt;
&lt;br /&gt;
Sirve para obtener el usuario actual.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
whoami&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Lo más seguro es que nos aparezca ubuntu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== who ==&lt;br /&gt;
&lt;br /&gt;
Es para saber quien está ahora mismo en la máquina conectado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
who&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Seguramente solo estemos nosotros:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ubuntu   pts/0        2019-08-28 13:51 (192.168.122.1)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== su y sudo ==&lt;br /&gt;
&lt;br /&gt;
su (substitute user): sirve para cambiar de usuario. Por ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
su root&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aquí nos pedirá la contraseña del usuario al que queramos cambiar.&lt;br /&gt;
&lt;br /&gt;
sudo (super user do): no todas las distribuciones lo integran, porque es menos&lt;br /&gt;
seguro que su, este comando nos permite ejecutar un comando siendo otro usuario,&lt;br /&gt;
por defecto, si no le damos usuario, lo hará con el usuario root. Si sudo nos&lt;br /&gt;
pide contraseña, nos pide la contraseña del usuario, ya que el usuario es que el&lt;br /&gt;
tiene permisos para usar sudo o no.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo ls -a /root&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Si tuviéramos por ejemplo un usuario 'practica' y quisíeramos ejecutar un&lt;br /&gt;
comando en su nombre:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo -u practica ls&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== adduser y useradd ==&lt;br /&gt;
&lt;br /&gt;
Ambos comandos sirven para crear un nuevo usuario, pero tienen sus diferencias.&lt;br /&gt;
&lt;br /&gt;
useradd es un comando del sistema, y adduser es un script escrito en perl que&lt;br /&gt;
utiliza el comando useradd. La diferencia así de primeras es que adduser nos&lt;br /&gt;
crear el directorio /home/usuario y useradd necesita la opción -m para hacer lo&lt;br /&gt;
mismo. Se puede utilizar el que se quiera, aunque es más recomendable useradd,&lt;br /&gt;
ya que funcionará igual en todas las distribuciones.&lt;br /&gt;
&lt;br /&gt;
Vamos a añadir un usuario practica con su directorio en /home (notemos que&lt;br /&gt;
necesitamos permisos de super usuario para realizar esta tarea):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo useradd -m practica&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vamos a comprobar que el directorio home está creado y que el usuario practica&lt;br /&gt;
funciona:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls /home  # veremos el directorio practica&lt;br /&gt;
sudo -u practica whoami  # nos dirá que somo el usuario practica&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== passwd ==&lt;br /&gt;
&lt;br /&gt;
Sirve para modificar la contraseña de un usuario, por ejemplo, vamos a modificar&lt;br /&gt;
la contraseña del usuario que hemos creado previamente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo passwd practica&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nos preguntará dos veces la contraseña, y ya la tendremos actualizadas. Vamos&lt;br /&gt;
ahora a probar ahora el comando su para cambiar de usuario:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
su practica&lt;br /&gt;
whoami&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Veremos que hemos cambiado de usuario, para cerrar este usuario, escribimos&lt;br /&gt;
'exit' o pulsamos 'CTLR + D'&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== deluser y userdel ==&lt;br /&gt;
&lt;br /&gt;
Ambos sirven para borrar un usuario, similar a adduser y useradd, userdel es el&lt;br /&gt;
comando y deluser el script.&lt;br /&gt;
&lt;br /&gt;
Vamos a borrar el usuario que hemos creado, incluyendo el borrado de su /home&lt;br /&gt;
(opción -r):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
userdel -r practica&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Comprobemos que ya no tenemos usuario ni /home:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls /home&lt;br /&gt;
sudo -u practica whoami&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== addgroup y groupadd ==&lt;br /&gt;
&lt;br /&gt;
Ambos sirven para crear un grupo. Los grupos sirven para agrupar a los usuarios&lt;br /&gt;
y que estos tengan unos mismos permisos. Por ejemplo, cuando instalamos algunas&lt;br /&gt;
herramientas como por ejemplo docker, este crea el grupo docker automáticamente&lt;br /&gt;
para que fácilmente podamos añadir a un usuario al grupo, y este tenga los&lt;br /&gt;
permisos para trabajar con dicha herramienta.&lt;br /&gt;
&lt;br /&gt;
Vamos a crear un nuevo grupo, vamos a llamarle invitado:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo groupadd invitado&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== usermod y groups ==&lt;br /&gt;
&lt;br /&gt;
usermod es utilizado para asignar un grupo a un usuario.&lt;br /&gt;
&lt;br /&gt;
groups es utilizado para ver los grupos a los que pertenece un usuario.&lt;br /&gt;
&lt;br /&gt;
Vamos a añadir a un usuario practica, lo vamos a añadir al grupo invitado y&lt;br /&gt;
veremos los grupos a los que pertenece:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo useradd -m practica&lt;br /&gt;
sudo usermod -G invitado practica&lt;br /&gt;
groups practica&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Veremos que el usuario práctica pertenece al grupo invitado.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== delgroup y groupdel ==&lt;br /&gt;
&lt;br /&gt;
Ambos sirven para eliminar un grupo. Vamos a eliminar el grupo que hemos creado&lt;br /&gt;
anteriormente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo groupdel invitado&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podemos observar ahora que el usuario practica no pertenece al grupo invitado:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
groups practica&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Paso 5: Permisos =&lt;br /&gt;
&lt;br /&gt;
== Nomenclatura rwx y numérica ==&lt;br /&gt;
&lt;br /&gt;
Si hacemos un ls -l, la primera cadena que nos aparece son los permisos del&lt;br /&gt;
fichero (-rwxrw-r--), podemos dividirlo en 4 elementos:&lt;br /&gt;
&lt;br /&gt;
-    (rwx)   (rw-)  (r--)&lt;br /&gt;
|      |       |      |&lt;br /&gt;
type  owner   group  others&lt;br /&gt;
&lt;br /&gt;
* type: el tipo de fichero, pudiendo ser d (directorio), l (enlace simbólico), - (fichero normal)&lt;br /&gt;
* owner: permisos de propietario&lt;br /&gt;
* group: permisos de grupo&lt;br /&gt;
* others: permisos para los demás usuarios&lt;br /&gt;
&lt;br /&gt;
Significado de los permisos:&lt;br /&gt;
&lt;br /&gt;
* r: permisos de lectura&lt;br /&gt;
* w: permisos de escritura&lt;br /&gt;
* x: permisos de ejecución&lt;br /&gt;
&lt;br /&gt;
Por último, existe un modo abreviado para estos permisos que se utiliza con&lt;br /&gt;
números.&lt;br /&gt;
&lt;br /&gt;
rwx&lt;br /&gt;
001 en binario es 1 en decimal. Permisos de ejecución&lt;br /&gt;
010 en binario es 2 en decimal. Permisos de escritura&lt;br /&gt;
100 en binario es 4 en decimal. Permisos de lectura&lt;br /&gt;
&lt;br /&gt;
La suma de los permisos, nos da el valor numérico. Veamos un ejemplo:&lt;br /&gt;
rwx rw- r--&lt;br /&gt;
111 110 100&lt;br /&gt;
 7   6   4&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== chmod ==&lt;br /&gt;
&lt;br /&gt;
Permite cambiar los permisos de acceso a un fichero o directorio. Podemos dar&lt;br /&gt;
permisos de dos formas diferentes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== modo carácter ===&lt;br /&gt;
&lt;br /&gt;
Veamos primero unos detalles:&lt;br /&gt;
&lt;br /&gt;
Clases de usuario:&lt;br /&gt;
&lt;br /&gt;
* owner (u)&lt;br /&gt;
* group (g)&lt;br /&gt;
* others (o)&lt;br /&gt;
* all (a)&lt;br /&gt;
&lt;br /&gt;
Modificador:&lt;br /&gt;
&lt;br /&gt;
* añadir (+)&lt;br /&gt;
* eliminar (-)&lt;br /&gt;
* sobrescribir (=)&lt;br /&gt;
&lt;br /&gt;
Para dar permisos tendríamos que seleccionar la clase de usuario el modificador&lt;br /&gt;
y los permisos, veamos un ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chmod u+x file  # añadimos permisos de ejecución al usuario&lt;br /&gt;
chmod go-w file  # quitamos permisos de escritura al grupo y a otros usuarios&lt;br /&gt;
chmod u=rwx,go=r file  # Al usuario le damos todos los permisos, y al grupo y otros solo le damos permisos de lectura&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Modo octal ===&lt;br /&gt;
&lt;br /&gt;
Con el modo octacl, es como si siempre utilizáramos el modificar sobrescribir,&lt;br /&gt;
pongamos algunos ejemplos:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chmod 744 file  # Al usuario le damos todos los permisos, y al grupo y otros solo le damos permisos de lectura&lt;br /&gt;
chmod 777 file  # Todos tienen permisos para todo&lt;br /&gt;
chmod 600 file  # solo el propietario tiene permisos de lectura y escritura&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Ejemplos ===&lt;br /&gt;
&lt;br /&gt;
Vamos a ver como funciona el tema de permisos con unos ejemplos. Vamos a crear&lt;br /&gt;
un fichero pruebas y le vamos a quitar los permisos de escritura a nuestro&lt;br /&gt;
usuario, y le vamos a dar permisos de escritura a otros:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
touch pruebas&lt;br /&gt;
ls -l pruebas  # de esta forma veremos que por defecto los permisos son rw-rw-r--&lt;br /&gt;
chmod u-w,o+w pruebas&lt;br /&gt;
ls -l pruebas  # ahora los permisos deberían ser -w-rw-rw-&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Una vez dado los permisos, veamos que con nuestro usuario podemos leer pero no&lt;br /&gt;
escribir:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat pruebas&lt;br /&gt;
echo &amp;quot;probando&amp;quot; &amp;gt; pruebas&lt;br /&gt;
exit&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Y ahora vamos a ver que el usuario pruebas, puede leer y escribir:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
su practica&lt;br /&gt;
cat pruebas&lt;br /&gt;
echo &amp;quot;probando&amp;quot; &amp;gt; pruebas&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== chown ==&lt;br /&gt;
&lt;br /&gt;
Permite cambiar el propietario de un fichero o directorio.&lt;br /&gt;
&lt;br /&gt;
Vamos por ejemplo a pasarle ahora el fichero pruebas al usuario practica:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo chown practica pruebas&lt;br /&gt;
ls -l pruebas&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Veremos que el usuario actual ahora es pruebas, aunque vemos que el ls muestra&lt;br /&gt;
lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
-r--rw-rw- 1 practica ubuntu 9 Aug 29 09:34 pruebas&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hay que comentar un detalle, y es que los ficheros y directorios tienen asignado&lt;br /&gt;
un usuario y un grupo, por defecto se utiliza el mismo usuario como grupo&lt;br /&gt;
cuando creamos un nuevo fichero o directorio. Si queremos que cuando cambiemos&lt;br /&gt;
el propietario, cambiar tambien el grupo del fichero, podemos hacerlo de la&lt;br /&gt;
siguiente forma:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo chown practica:practica pruebas&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Una vez hecho esto, vamos ahora a probar que los permisos siguen funcionando&lt;br /&gt;
como antes, ahora con el usuario ubuntu, deberíamos de poder leer y escribir en&lt;br /&gt;
el fichero pruebas, y con el usuario practica, solo leer, esto es así por que&lt;br /&gt;
ahora el propitario es practica:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Pruebas usuario ubuntu&lt;br /&gt;
cat pruebas&lt;br /&gt;
echo test &amp;gt;&amp;gt; pruebas&lt;br /&gt;
# Pruebas usuario practica&lt;br /&gt;
su practica&lt;br /&gt;
cat pruebas&lt;br /&gt;
echo &amp;quot;probando&amp;quot; &amp;gt; pruebas&lt;br /&gt;
exit&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Paso 6: Procesos =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== ps ==&lt;br /&gt;
&lt;br /&gt;
Sirve para ver que procesos están ejecutándose en el sistema, veamos un ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ps aux  # con la opción aux mostraremos todos los procesos del sistema&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cada línea es un proceso, y cada proceso muestra su PID, usuario, cantidad de&lt;br /&gt;
memoria y cpu utilizada, comando y otros detalles.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
man kill &amp;amp;  # añadir el &amp;amp; al final de un comando hace que este se ejecute en segundo plano, por lo que se quedará abierto&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La salida de este comando nos mostrará el PID que tiene ese proceso que acabamos&lt;br /&gt;
de ejecutar, vamos a comprobarlo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ps aux | grep &amp;quot;man kill&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Veremos que el PID coincide.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== kill ==&lt;br /&gt;
&lt;br /&gt;
Este comando nos servirá para matar un proceso. kill se utiliza seguido de una&lt;br /&gt;
señal para enviar al proceso seguido de uno o varios PID. para ver las señales&lt;br /&gt;
disponibles, podemos listarlas:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kill -l&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Las más utilizadas suele ser SIGTERM y SIGKILL, la primera intenta terminar el&lt;br /&gt;
proceso de forma poco abrupta, y la segunda suele utilizarse cuando el proceso&lt;br /&gt;
no atiende a esta primera señal. Vamos ahora a terminar el proceso que creamos&lt;br /&gt;
antes, si no recordamos el PID, busquémoslo de nuevo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ps aux | grep &amp;quot;man kill&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enviamos señal para terminar el proceso y comprobamos que ha terminado:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kill -SIGTERM 8470&lt;br /&gt;
ps aux | grep &amp;quot;man kill&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
También podemos notar que en el listado de señales, hay unos números, podemos&lt;br /&gt;
utilizar esos números en vez de las palabras, por ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
man kill &amp;amp;&lt;br /&gt;
kill -15 PID_COMANDO_PREVIO&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Comprobamos que el proceso ha terminado correctamente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ps aux | grep &amp;quot;man kill&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Paso 7: Estado CPU, RAM y Disco =&lt;br /&gt;
&lt;br /&gt;
== top ==&lt;br /&gt;
&lt;br /&gt;
Este comando nos servirá para ver el listado de procesos y el estado de la CPU y&lt;br /&gt;
memoria.&lt;br /&gt;
&lt;br /&gt;
Probemos el comando y observemos detalladamente la salida:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
top&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para salir, pulsamos q.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== df y du ==&lt;br /&gt;
&lt;br /&gt;
df (disk free) y du (disk usage). Ambas son utilidades para mostrar el uso de&lt;br /&gt;
los discos.&lt;br /&gt;
&lt;br /&gt;
Con df mostraremos la información del espacio en cada dispositivo montado:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
df&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Estos comandos que nos muestran el tamaño de los ficheros, casi siempre tienen&lt;br /&gt;
una opción para mostrarlo en un formato más legible (-h)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
df -h&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mucho mejor.&lt;br /&gt;
&lt;br /&gt;
Ahora veamos el comando du, el cual nos mostrará el tamaño de un fichero o&lt;br /&gt;
directorio y sus subdirectorios, no olvidemos el -h:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
du -h /home/ubuntu&lt;br /&gt;
du -h /home/ubuntu/pruebas&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Si solo quisíeramos saber el total de una carpeta y nos nos interesan sus&lt;br /&gt;
subcarpetas, podemos utilizar la opción -s:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
du -sh /home/ubuntu&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== free ==&lt;br /&gt;
&lt;br /&gt;
Sirve para ver el estado de la memoria, como siempre, opción -h:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
free -h&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== lsblk ==&lt;br /&gt;
&lt;br /&gt;
Nos muestra la información de todos los dispositivos de bloques (discos duros,&lt;br /&gt;
pendrivers, CD_ROM, SSD, ...).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lsblk&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En la siguiente práctica se utilizará más a fondo este comando, ya que&lt;br /&gt;
trabajaremos con dispositivos.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Paso 8: Gestión de paquetes de software y repositorios =&lt;br /&gt;
&lt;br /&gt;
Los sistemas Linux incluyen, además de las herramientas básicas del sistema operativo, repositorios de software que puede ser opcionalmente instalados por el administrador del sistema. Los fabricantes de las distribuciones de Linux incluyen paquetes de software listos para ser instalados que se integran con el sistema.&lt;br /&gt;
&lt;br /&gt;
Un paquete incluye el software necesario para que una cierta aplicación funcione correctamente, así como sus paquetes de dependencia.&lt;br /&gt;
&lt;br /&gt;
En Ubuntu, la herramienta de gestión de paquetes de software y repositorios se llama '''apt'''.&lt;br /&gt;
&lt;br /&gt;
=== Listado de repositorios de paquetes de software ===&lt;br /&gt;
&lt;br /&gt;
En Ubuntu el listado de repositorios se encuentra en el fichero /etc/apt/sources.list. Podemos comprobar que repositorios tenemos añadido:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat /etc/apt/sources.list&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Actualización del listado de paquetes de software ===&lt;br /&gt;
&lt;br /&gt;
Para actualizar el listado de paquetes utilizaremos el comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt update&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Instalación un nuevo paquete ===&lt;br /&gt;
&lt;br /&gt;
Para instalar un nuevo paquete, utilizaremos la orden install, por ejemplo, vamos a instalar tree, similar al ls pero muestra el arbol de directorios:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt install tree&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Desinstalación de un paquete ===&lt;br /&gt;
&lt;br /&gt;
Usaremos la orden purge o la orden remove, purge nos lo eliminad todo, y remove mantiene la configuración en el caso de que el paquete la tuviese. Vamos a eliminar el paquete instalado previamente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt purge tree&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Paso 9: Módulos =&lt;br /&gt;
&lt;br /&gt;
Los módulos del kernel de Linux son partes que podemos añadir o quitar de forma&lt;br /&gt;
sencilla con el fin de añadir o quitar funcionalidad. Por ejemplo, algunas de&lt;br /&gt;
estas funcionalidades son:&lt;br /&gt;
&lt;br /&gt;
* Registrar temperaturas de nuestros componentes&lt;br /&gt;
* Hacer funcionr la tarjeta de red wifi&lt;br /&gt;
* Cargar los drivers de una tarjeta gráfica&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== lsmod ==&lt;br /&gt;
&lt;br /&gt;
Comando para ver los módulos que estamos usando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lsmod&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== lspci y usb-devices ==&lt;br /&gt;
&lt;br /&gt;
Estos comandos nos servirán para ver el hardware que está conectado a nuestro&lt;br /&gt;
ordenador. Con lspci veremos el listado del hardware integrado y con usb-devices&lt;br /&gt;
el que está conectado por hardware.&lt;br /&gt;
&lt;br /&gt;
Normalmente, como los módulos se utilizan para dar funcionalidad un hardware,&lt;br /&gt;
aquí en los listado de hardware podremos ver que módulo está utilizando cada&lt;br /&gt;
hardware:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lspci -v&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Veremos una línea en algunos dispositivos que nos diga que módulo estamos&lt;br /&gt;
usando, pongo un pequeño trozo de la salida del comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
00:1f.2 SATA controller: Intel Corporation 82801IR/IO/IH (ICH9R/DO/DH) 6 port SATA Controller [AHCI mode] (rev 02) (prog-if 01 [AHCI 1.0])&lt;br /&gt;
    Subsystem: Red Hat, Inc. QEMU Virtual Machine&lt;br /&gt;
    Flags: bus master, fast devsel, latency 0, IRQ 35&lt;br /&gt;
    I/O ports at c0c0 [size=32]&lt;br /&gt;
    Memory at fcc1d000 (32-bit, non-prefetchable) [size=4K]&lt;br /&gt;
    Capabilities: &amp;lt;access denied&amp;gt;&lt;br /&gt;
    Kernel driver in use: ahci&lt;br /&gt;
    Kernel modules: ahci&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vemos que el hardware INTEl Corporation está utilizando el módulo ahci.&lt;br /&gt;
&lt;br /&gt;
Probemos ahora con usb-devices:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
usb-devices&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Veamos un trozo de código:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
T:  Bus=01 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#=  2 Spd=480 MxCh= 0&lt;br /&gt;
D:  Ver= 2.00 Cls=00(&amp;gt;ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs=  1&lt;br /&gt;
P:  Vendor=0627 ProdID=0001 Rev=00.00&lt;br /&gt;
S:  Manufacturer=QEMU&lt;br /&gt;
S:  Product=QEMU USB Tablet&lt;br /&gt;
S:  SerialNumber=42&lt;br /&gt;
C:  #Ifs= 1 Cfg#= 1 Atr=a0 MxPwr=100mA&lt;br /&gt;
I:  If#= 0 Alt= 0 #EPs= 1 Cls=03(HID  ) Sub=00 Prot=00 Driver=usbhid&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vemos que el teclado está utilizando el módulo usbhid&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== insmod ==&lt;br /&gt;
&lt;br /&gt;
Sirve para cargar un módulo en el kernel, imaginemos que tenemos un módulo que&lt;br /&gt;
se llama modulo1:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo insmod modulo1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== rmmod ==&lt;br /&gt;
&lt;br /&gt;
Sirve para eliminar un módulo de kernel. Imaginemos que queremos borrar un&lt;br /&gt;
módulo cargado anteriormente con el nombre modulo1:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo rmmod modulo1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Marramfer12</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Administraci%C3%B3n_b%C3%A1sica&amp;diff=4552</id>
		<title>Administración básica</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Administraci%C3%B3n_b%C3%A1sica&amp;diff=4552"/>
				<updated>2019-11-13T11:10:06Z</updated>
		
		<summary type="html">&lt;p&gt;Marramfer12: /* rm */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Para realizar esta práctica utilizaremos una de las máquinas virtuales que generamos en la práctica anterior.&lt;br /&gt;
&lt;br /&gt;
En esta práctica aprenderemos a utilizar el interprete de ordenes (también conocido como ''[https://www.traficantes.net/sites/default/files/pdfs/En%20el%20principio%20fue...-TdS.pdf línea de comandos]'') y a aprender nociones básicas de administración de sistemas Linux.&lt;br /&gt;
&lt;br /&gt;
= Paso 0: Breve introducción al sistema Linux =&lt;br /&gt;
&lt;br /&gt;
== Estructura básica del sistema de archivos ==&lt;br /&gt;
&lt;br /&gt;
En un sistema Linux, todas las carpetas y ficheros en el sistema de fichero pende de la carpeta raíz que se representa con la /.&lt;br /&gt;
&lt;br /&gt;
 /&lt;br /&gt;
 ├── bin&lt;br /&gt;
 ├── usr&lt;br /&gt;
 │   ├── local&lt;br /&gt;
 │   ├── bin&lt;br /&gt;
 │   └── ...&lt;br /&gt;
 ├── dev&lt;br /&gt;
 │   ├── sda&lt;br /&gt;
 │   ├── sda1&lt;br /&gt;
 │   └── ...&lt;br /&gt;
 ├── home&lt;br /&gt;
 │   ├── practica&lt;br /&gt;
 │   │   ├── tema1.pdf&lt;br /&gt;
 │   │   ├── boletin1.pdf&lt;br /&gt;
 │   │   └── ...&lt;br /&gt;
 │   ├── profesor&lt;br /&gt;
 │   └── ...&lt;br /&gt;
 └── etc&lt;br /&gt;
     ├── firefox&lt;br /&gt;
     ├── libvirt&lt;br /&gt;
     ├── ...&lt;br /&gt;
     └── ...&lt;br /&gt;
&lt;br /&gt;
Como puedes observar, el sistema de fichero emplea una estructura de árbol.&lt;br /&gt;
&lt;br /&gt;
== Nociones básicas ==&lt;br /&gt;
&lt;br /&gt;
·Aplicaciones con nombres compuestos: usar guion entre palabras&lt;br /&gt;
&lt;br /&gt;
·Nombres con espacios en blanco: Escribir entre comillas dobles&lt;br /&gt;
&lt;br /&gt;
·Espacios en blanco para separar ordenes (ej: instalar varios paquetes )&lt;br /&gt;
&lt;br /&gt;
·Formato general de una orden: comando [-opciones] [argumentos]&lt;br /&gt;
&lt;br /&gt;
·'''IMPORTANTE''': Diferencia entre mayúsculas y minúsculas&lt;br /&gt;
&lt;br /&gt;
== Carpetas . y .. ==&lt;br /&gt;
&lt;br /&gt;
Toda carpeta en un sistema Linux dispone de dos pseudocarpetas, la '''.''' y la '''..'':&lt;br /&gt;
&lt;br /&gt;
* La pseudocarpeta '''..''' hace referencia a la carpeta padre que contiene a esta carpeta.&lt;br /&gt;
* La pseudocarpeta '''.''' hace referencia a la carpeta actual, es por tanto una autoreferencia.&lt;br /&gt;
&lt;br /&gt;
En el caso de la carpeta raíz, la pseudocarpeta '''.''' y '''..''' hacen referencia a la propia carpeta raíz, se trata, por tanto de una excepción.&lt;br /&gt;
&lt;br /&gt;
== Directorio de trabajo actual y la orden cd ==&lt;br /&gt;
&lt;br /&gt;
Cada interprete de ordenes dispone de una ''carpeta de trabajo actual'' ('''c'''urrent '''w''orking '''d''irectory, en inglés). La carpeta de trabajo actual se puede modificar con la orden '''cd''' ('''c'''hange '''d'''irectory, en inglés).&lt;br /&gt;
&lt;br /&gt;
Por ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ cd ..&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nos situaría en la carpeta padre, empleando una ruta relativa.&lt;br /&gt;
&lt;br /&gt;
Si volvemos a escribir desde /home &amp;quot; cd .. &amp;quot; nos lleva a '''/$''' &lt;br /&gt;
&lt;br /&gt;
Para situarnos en el raíz, podemos emplear una ruta absoluta:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ cd /&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En caso de que queramos volver a la carpeta de usuario, bastaría con invocar a '''cd''' sin más o ''' cd ~ '''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ cd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''MUY IMPORTANTE''': No es lo mismo cd.. que ''' cd .. ''', es necesario el espacio después del cd.&lt;br /&gt;
&lt;br /&gt;
== Rutas absolutas, rutas relativas ==&lt;br /&gt;
&lt;br /&gt;
Para hacer referencia a un fichero o una carpeta se usan ruta absolutas o rutas relativas.&lt;br /&gt;
&lt;br /&gt;
Las rutas absolutas siempre empieza por /, de manera que toman como punto de referencia la carpeta raíz (/). Por ejemplo, una ruta absoluta a la carpeta '''prueba''' que está almacenada en la carpeta del usuario '''ubuntu''' es '/home/ubuntu/prueba/'.&lt;br /&gt;
&lt;br /&gt;
Las ruta relativa toma como referencia la carpeta de trabajo actual. Para averiguar la carpeta de trabajo actual disponemos de la orden '''pwd'''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ pwd&lt;br /&gt;
/home/ubuntu&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En base a la carpeta de trabajo actual, empleando la pseudocarpeta '''..''', se puede construir rutas relativas. Por ejemplo, para referenciar un fichero '''fichero.txt''' en la carpeta temporal, podemos emplear la ruta relativa '''../../tmp/fichero.txt'''.&lt;br /&gt;
&lt;br /&gt;
Aunque probablemente sea más cómodo emplear una ruta absoluta en este caso, que sería '''/tmp/fichero.txt'''.&lt;br /&gt;
&lt;br /&gt;
== Intérprete de órdenes ==&lt;br /&gt;
&lt;br /&gt;
El intérprete de órdenes es un lanzador de aplicaciones textual que emplea el teclado como dispositivo de entrada de datos. Mediante el teclado, se escribe el nombre del programa que se quiere lanzar y al pulsa la tecla ''intro'' el intérprete de ordenes ejecutara dicho programa. Por defecto, el intérprete de ordenes que emplea Ubuntu por defecto es '''bash'''.&lt;br /&gt;
&lt;br /&gt;
== man: ver la página de manual de una orden ==&lt;br /&gt;
&lt;br /&gt;
La orden '''man''' te será útil para ver las páginas de manual.&lt;br /&gt;
&lt;br /&gt;
Su estructura básica es:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
man &amp;lt;comando&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aunque también se utiliza con la opción ''' -a ''' de All, que también muestra las entradas comenzadas por '''.''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
man -a &amp;lt;comando&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Este programa toma como entrada el nombre de la orden de la que quieres consultar su página de manual, por ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
man ls&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nos da información del manual de la orden '''ls'''.&lt;br /&gt;
&lt;br /&gt;
Para salir de la página de manual, pulsa la tecla '''q''' (la primera letra de la palabra '''quit''', en inglés).&lt;br /&gt;
&lt;br /&gt;
quit = salir&lt;br /&gt;
&lt;br /&gt;
Normalmente, los programas ofrecen opciones de ayuda, como '''--help'''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
man --help&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
También se puede emplear la versión compacta a la hora de especificar opciones.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
man -h&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En general, todas las ordenes suelen ofrecer una opción de ayuda.&lt;br /&gt;
&lt;br /&gt;
= Paso 1: Operaciones básicas con el sistema de ficheros =&lt;br /&gt;
&lt;br /&gt;
== ls ==&lt;br /&gt;
&lt;br /&gt;
Lista los ficheros y carpetas. Si no se especifica nada, muestra los ficheros y carpetas que contiene la carpeta de trabajo actual.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Si se especifica una ruta, muestra las carpetas y ficheros contenidos en dicha ruta, por ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ ls /&lt;br /&gt;
bin  boot  data  dev  etc  home  initrd.img  initrd.img.old  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  snap  srv  sys  tmp  usr  var  vmlinuz  vmlinuz.old&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al emplear '''/''' como ruta absoluta, muestra el contenido de la carpeta raíz.&lt;br /&gt;
&lt;br /&gt;
Las opciones más usadas de este programa suelen ser:&lt;br /&gt;
&lt;br /&gt;
* -a: muestra los ficheros y carpetas ''ocultos''. En Linux, cualquier fichero o carpeta cuyo nombre empiece por . se considera ''oculto''. Esto incluye también en el listado las pseudocarpetas . y ..&lt;br /&gt;
&lt;br /&gt;
* -l: se muestra en lista y aporta datos como la fecha de última modificación, propietario, grupo, tamaño en bytes y nombre:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ ls -a&lt;br /&gt;
&lt;br /&gt;
.  ..  .bash_history  .bash_logout  .bashrc  .profile  .ssh&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ambas opciones se puede combinar:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ ls -la /&lt;br /&gt;
&lt;br /&gt;
total 92&lt;br /&gt;
drwxr-xr-x  24 root root  4096 Aug 28 09:50 .&lt;br /&gt;
drwxr-xr-x  24 root root  4096 Aug 28 09:50 ..&lt;br /&gt;
drwxr-xr-x   2 root root  4096 Aug 22 12:37 bin&lt;br /&gt;
drwxr-xr-x   4 root root  4096 Aug 22 12:37 boot&lt;br /&gt;
drwx------   3 root root  4096 Aug 28 09:50 data&lt;br /&gt;
drwxr-xr-x  18 root root  3780 Aug 28 09:46 dev&lt;br /&gt;
[...]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Otras opciones útiles son:&lt;br /&gt;
&lt;br /&gt;
* -s : muestra el tamaño en bloques de cada archivo&lt;br /&gt;
&lt;br /&gt;
* -t : aporta el día y la hora de modificación&lt;br /&gt;
&lt;br /&gt;
* -R : lista también las subcarpetas &lt;br /&gt;
&lt;br /&gt;
* --color : muestra el contenido coloreado&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Los '''permisos''' se emplean en base a tres capacidades:&lt;br /&gt;
&lt;br /&gt;
* Lectura, que se codifica con '''r''' (read, en inglés).&lt;br /&gt;
* Escritura, que se codifica con '''w''' (write, en inglés).&lt;br /&gt;
* Ejecutación, que se codifica con '''x''' (execute, en inglés).&lt;br /&gt;
&lt;br /&gt;
La primera columna muestra los permisos que codifican:&lt;br /&gt;
&lt;br /&gt;
* Tipo de entrada: '''d''' indica ''directorio'' (''carpeta'').&lt;br /&gt;
* Permisos del propietario, primera terna de rwx&lt;br /&gt;
* Permisos del grupo, segunda terna de rwx&lt;br /&gt;
* Permisos para el resto del mundo, tercera terna de rwx.&lt;br /&gt;
&lt;br /&gt;
A continuación, aparecen el propietario y el grupo, seguidos de la fecha de última modificación y el nombre del fichero o carpeta.&lt;br /&gt;
&lt;br /&gt;
La ayuda ( help ) en ls solo funciona con ''' ls --help ''' no con ls -h&lt;br /&gt;
&lt;br /&gt;
== mkdir ==&lt;br /&gt;
&lt;br /&gt;
Crea un nuevo directorio.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ mkdir test&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Crea una carpeta test en el directorio actual.&lt;br /&gt;
&lt;br /&gt;
Comprobemos que se ha creado bien:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ ls&lt;br /&gt;
test&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Con la opción '''-p''', permite crear sucesivas carpetas anidadas de una sola vez, por ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ mkdir -p a/b/c&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Que crea la siguiente estructura de carpetas.&lt;br /&gt;
&lt;br /&gt;
 a&lt;br /&gt;
 └── b&lt;br /&gt;
     └── c&lt;br /&gt;
&lt;br /&gt;
== touch ==&lt;br /&gt;
&lt;br /&gt;
Crea un nuevo fichero vacío (sin contenido) con el nombre que especifiquemos.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ touch file.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Comprobamos que el fichero se ha creado correctamente.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ ls&lt;br /&gt;
file.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== cp ==&lt;br /&gt;
&lt;br /&gt;
Copia un fichero o directorio.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ cp file.txt file_copy.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para copiar una carpeta y su contenido tenemos que usar la opción -r (recursivo).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ cp -r test test_copy&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Comprobamos el resultado con la orden '''ls'''.&lt;br /&gt;
&lt;br /&gt;
* Si nos encontramos en la carpeta destino, la estructura sería la siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ cp &amp;lt;nombre ruta origen&amp;gt; &amp;lt;nombre archivo&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== mv ==&lt;br /&gt;
&lt;br /&gt;
Mueve fichero o carpeta.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mv file_copy.txt file2.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
También se emplea para renombrar.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mv test_copy test_copy2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== rm ==&lt;br /&gt;
&lt;br /&gt;
* Borra un fichero o carpeta vacía:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rm &amp;lt;nombre&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Para borrar una carpeta no vacía y su contenido:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rm -r &amp;lt;nombre&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''IMPORTANTE''': No hacer jamás ''' rm -r * '''&lt;br /&gt;
&lt;br /&gt;
* EJERCICIOS:&lt;br /&gt;
&lt;br /&gt;
# Crear la siguiente estructura dentro del directorio /tmp (usar los comandos mkdir, touch y cp):&lt;br /&gt;
&lt;br /&gt;
 /tmp&lt;br /&gt;
 ├── carpeta1&lt;br /&gt;
 ├── carpeta2&lt;br /&gt;
 │   ├── fichero1.txt&lt;br /&gt;
 │   └── fichero2.md&lt;br /&gt;
 └── carpeta3&lt;br /&gt;
     ├── fichero1.txt&lt;br /&gt;
     └── fichero2.md&lt;br /&gt;
&lt;br /&gt;
# Basándonos en el ejercicio anterior, cambiar la estructura a la siguiente (usar comandos mv y rm):&lt;br /&gt;
&lt;br /&gt;
 /tmp&lt;br /&gt;
 └── carpeta&lt;br /&gt;
     ├── fichero1.txt&lt;br /&gt;
     └── fichero2.md&lt;br /&gt;
&lt;br /&gt;
= Paso 2: Impresión por pantalla y redirección de salida =&lt;br /&gt;
&lt;br /&gt;
== echo ==&lt;br /&gt;
&lt;br /&gt;
Sirve para imprimir una línea de texto por pantalla o imprimir variables de&lt;br /&gt;
entorno.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo &amp;quot;Hola&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Una variable de entorno es una variable editada con algún valor, por defecto&lt;br /&gt;
existen algunas creadas, como por ejemplo la variable HOME, que contiene el&lt;br /&gt;
directorio del usuario:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo $HOME&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aprovecharemos y crearemos una variable nosotros:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ME=&amp;quot;my name&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Comprobamos:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo $ME&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Redirección de salida ==&lt;br /&gt;
&lt;br /&gt;
&amp;gt; y &amp;gt;&amp;gt; sirve para redirigir una salida. Por ejemplo, utilizando el comando echo,&lt;br /&gt;
podemos enviar un texto dentro de un fichero:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo &amp;quot;Esto es una prueba&amp;quot; &amp;gt; file.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La diferencia entre &amp;gt; y &amp;gt;&amp;gt; es que &amp;gt; sobrescribe lo que haya en el fichero y&lt;br /&gt;
añade el contenido, y &amp;gt;&amp;gt; no sobrescribe, solo añade el nuevo contenido.&lt;br /&gt;
&lt;br /&gt;
Hagamos la prueba:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo &amp;quot;Esto es una prueba&amp;quot; &amp;gt; file.txt&lt;br /&gt;
echo &amp;quot;Esto es una prueba2&amp;quot; &amp;gt; file.txt&lt;br /&gt;
echo &amp;quot;Esto es una prueba&amp;quot; &amp;gt;&amp;gt; file2.txt&lt;br /&gt;
echo &amp;quot;Esto es una prueba2&amp;quot; &amp;gt;&amp;gt; file2.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En cualquier caso, si el fichero no existe, se crea.&lt;br /&gt;
&lt;br /&gt;
= Paso 3: Manejo de ficheros y carpetas avanzado =&lt;br /&gt;
&lt;br /&gt;
== cat ==&lt;br /&gt;
&lt;br /&gt;
Muestra el contenido de un fichero.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat file.txt&lt;br /&gt;
cat file2.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== grep ==&lt;br /&gt;
&lt;br /&gt;
Sirve para buscar coincidencia de un cierto patrón en ficheros y muestra la coincidencia, en caso de encontrarla, por pantalla.&lt;br /&gt;
&lt;br /&gt;
Por ejemplo, para buscar el patrón ''prueba'' en el fichero ''fichero.txt''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ grep -n prueba fichero.txt&lt;br /&gt;
1:Esto es una prueba&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La opción '''-n''' muestra el número de línea.&lt;br /&gt;
&lt;br /&gt;
== wc ==&lt;br /&gt;
&lt;br /&gt;
Sirve para contar el número de palabras, caracteres, líneas o bytes que contiene un fichero.&lt;br /&gt;
&lt;br /&gt;
Las opciones más utilizadas son:&lt;br /&gt;
&lt;br /&gt;
* -l: muestra el número de líneas que contiene el fichero.&lt;br /&gt;
* -w: muestra el número de palabras.&lt;br /&gt;
* -m: muestra el número de caracteres&lt;br /&gt;
* -c: muestra el número de bytes&lt;br /&gt;
&lt;br /&gt;
Probemos y contemos todo en el fichero file2.txt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
wc -l file2.txt&lt;br /&gt;
wc -w file2.txt&lt;br /&gt;
wc -m file2.txt&lt;br /&gt;
wc -c file2.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podemos contar más de un fichero a la vez:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
wc -l file.txt file2.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nos mostrará el conteo de cada fichero y el total.&lt;br /&gt;
&lt;br /&gt;
== Tubería (|) ==&lt;br /&gt;
&lt;br /&gt;
La tubería nos servirá para conectar varios comandos al mismo tiempo, veamos&lt;br /&gt;
unos ejemplos, que siempre se entiende mejor:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat file2.txt | grep prueba&lt;br /&gt;
grep -nr prueba file2.txt | wc -l&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En el primer ejemplo, mostramos el contenido de file2.txt, y esta salida se la&lt;br /&gt;
pasamos al comando grep, el cual busca las líneas que contengan prueba.&lt;br /&gt;
&lt;br /&gt;
En el segundo, buscamos todas las líneas que contengan la palabra prueba, y esta&lt;br /&gt;
salida se la pasamos al comando wc, el cual cuenta las líneas de la salida del&lt;br /&gt;
comando grep.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Redirecciones ==&lt;br /&gt;
&lt;br /&gt;
Vamos a ver unos conceptos antes de seguir:&lt;br /&gt;
&lt;br /&gt;
* Entrada estándar: representa los datos que necesita una aplicación para funcionar, como por ejemplo un archivo de datos o información ingresada desde la terminal y es representado en la terminal como el tipo 0.&lt;br /&gt;
* Salida estándar: es la vía que utilizan las aplicaciones para mostrarte información, allí podemos ver el progreso o simplemente los mensajes que la  aplicación quiera darte en determinado momento y es representado en la terminal como el tipo 1.&lt;br /&gt;
* Error estándar: es la forma en que los programas te informan sobre los problemas que pueden encontrarse al momento de la ejecución y es representado en la terminal como el tipo 2.&lt;br /&gt;
&lt;br /&gt;
Las redirecciones nos sirven para mover la información de un tipo a otro.&lt;br /&gt;
&lt;br /&gt;
Ya vimos previamente el uso de &amp;gt; y &amp;gt;&amp;gt;, y también el |, veamos algunas más:&lt;br /&gt;
&lt;br /&gt;
* comando &amp;lt; fichero: Toma la entrada de fichero&lt;br /&gt;
* comando 2&amp;gt; fichero: Envía la salida de error de comando a fichero&lt;br /&gt;
* comando 2&amp;gt;&amp;amp;1: Envía la salida de error a la salida estándar&lt;br /&gt;
* comando &amp;amp;&amp;gt; fichero: Envía la salida estándar y de error a fichero; equivale a comando &amp;gt; fichero 2&amp;gt;&amp;amp;1&lt;br /&gt;
&lt;br /&gt;
= Paso 4: Usuarios y grupos =&lt;br /&gt;
&lt;br /&gt;
== whoami ==&lt;br /&gt;
&lt;br /&gt;
Sirve para obtener el usuario actual.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
whoami&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Lo más seguro es que nos aparezca ubuntu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== who ==&lt;br /&gt;
&lt;br /&gt;
Es para saber quien está ahora mismo en la máquina conectado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
who&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Seguramente solo estemos nosotros:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ubuntu   pts/0        2019-08-28 13:51 (192.168.122.1)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== su y sudo ==&lt;br /&gt;
&lt;br /&gt;
su (substitute user): sirve para cambiar de usuario. Por ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
su root&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aquí nos pedirá la contraseña del usuario al que queramos cambiar.&lt;br /&gt;
&lt;br /&gt;
sudo (super user do): no todas las distribuciones lo integran, porque es menos&lt;br /&gt;
seguro que su, este comando nos permite ejecutar un comando siendo otro usuario,&lt;br /&gt;
por defecto, si no le damos usuario, lo hará con el usuario root. Si sudo nos&lt;br /&gt;
pide contraseña, nos pide la contraseña del usuario, ya que el usuario es que el&lt;br /&gt;
tiene permisos para usar sudo o no.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo ls -a /root&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Si tuviéramos por ejemplo un usuario 'practica' y quisíeramos ejecutar un&lt;br /&gt;
comando en su nombre:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo -u practica ls&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== adduser y useradd ==&lt;br /&gt;
&lt;br /&gt;
Ambos comandos sirven para crear un nuevo usuario, pero tienen sus diferencias.&lt;br /&gt;
&lt;br /&gt;
useradd es un comando del sistema, y adduser es un script escrito en perl que&lt;br /&gt;
utiliza el comando useradd. La diferencia así de primeras es que adduser nos&lt;br /&gt;
crear el directorio /home/usuario y useradd necesita la opción -m para hacer lo&lt;br /&gt;
mismo. Se puede utilizar el que se quiera, aunque es más recomendable useradd,&lt;br /&gt;
ya que funcionará igual en todas las distribuciones.&lt;br /&gt;
&lt;br /&gt;
Vamos a añadir un usuario practica con su directorio en /home (notemos que&lt;br /&gt;
necesitamos permisos de super usuario para realizar esta tarea):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo useradd -m practica&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vamos a comprobar que el directorio home está creado y que el usuario practica&lt;br /&gt;
funciona:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls /home  # veremos el directorio practica&lt;br /&gt;
sudo -u practica whoami  # nos dirá que somo el usuario practica&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== passwd ==&lt;br /&gt;
&lt;br /&gt;
Sirve para modificar la contraseña de un usuario, por ejemplo, vamos a modificar&lt;br /&gt;
la contraseña del usuario que hemos creado previamente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo passwd practica&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nos preguntará dos veces la contraseña, y ya la tendremos actualizadas. Vamos&lt;br /&gt;
ahora a probar ahora el comando su para cambiar de usuario:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
su practica&lt;br /&gt;
whoami&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Veremos que hemos cambiado de usuario, para cerrar este usuario, escribimos&lt;br /&gt;
'exit' o pulsamos 'CTLR + D'&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== deluser y userdel ==&lt;br /&gt;
&lt;br /&gt;
Ambos sirven para borrar un usuario, similar a adduser y useradd, userdel es el&lt;br /&gt;
comando y deluser el script.&lt;br /&gt;
&lt;br /&gt;
Vamos a borrar el usuario que hemos creado, incluyendo el borrado de su /home&lt;br /&gt;
(opción -r):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
userdel -r practica&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Comprobemos que ya no tenemos usuario ni /home:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls /home&lt;br /&gt;
sudo -u practica whoami&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== addgroup y groupadd ==&lt;br /&gt;
&lt;br /&gt;
Ambos sirven para crear un grupo. Los grupos sirven para agrupar a los usuarios&lt;br /&gt;
y que estos tengan unos mismos permisos. Por ejemplo, cuando instalamos algunas&lt;br /&gt;
herramientas como por ejemplo docker, este crea el grupo docker automáticamente&lt;br /&gt;
para que fácilmente podamos añadir a un usuario al grupo, y este tenga los&lt;br /&gt;
permisos para trabajar con dicha herramienta.&lt;br /&gt;
&lt;br /&gt;
Vamos a crear un nuevo grupo, vamos a llamarle invitado:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo groupadd invitado&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== usermod y groups ==&lt;br /&gt;
&lt;br /&gt;
usermod es utilizado para asignar un grupo a un usuario.&lt;br /&gt;
&lt;br /&gt;
groups es utilizado para ver los grupos a los que pertenece un usuario.&lt;br /&gt;
&lt;br /&gt;
Vamos a añadir a un usuario practica, lo vamos a añadir al grupo invitado y&lt;br /&gt;
veremos los grupos a los que pertenece:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo useradd -m practica&lt;br /&gt;
sudo usermod -G invitado practica&lt;br /&gt;
groups practica&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Veremos que el usuario práctica pertenece al grupo invitado.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== delgroup y groupdel ==&lt;br /&gt;
&lt;br /&gt;
Ambos sirven para eliminar un grupo. Vamos a eliminar el grupo que hemos creado&lt;br /&gt;
anteriormente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo groupdel invitado&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podemos observar ahora que el usuario practica no pertenece al grupo invitado:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
groups practica&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Paso 5: Permisos =&lt;br /&gt;
&lt;br /&gt;
== Nomenclatura rwx y numérica ==&lt;br /&gt;
&lt;br /&gt;
Si hacemos un ls -l, la primera cadena que nos aparece son los permisos del&lt;br /&gt;
fichero (-rwxrw-r--), podemos dividirlo en 4 elementos:&lt;br /&gt;
&lt;br /&gt;
-    (rwx)   (rw-)  (r--)&lt;br /&gt;
|      |       |      |&lt;br /&gt;
type  owner   group  others&lt;br /&gt;
&lt;br /&gt;
* type: el tipo de fichero, pudiendo ser d (directorio), l (enlace simbólico), - (fichero normal)&lt;br /&gt;
* owner: permisos de propietario&lt;br /&gt;
* group: permisos de grupo&lt;br /&gt;
* others: permisos para los demás usuarios&lt;br /&gt;
&lt;br /&gt;
Significado de los permisos:&lt;br /&gt;
&lt;br /&gt;
* r: permisos de lectura&lt;br /&gt;
* w: permisos de escritura&lt;br /&gt;
* x: permisos de ejecución&lt;br /&gt;
&lt;br /&gt;
Por último, existe un modo abreviado para estos permisos que se utiliza con&lt;br /&gt;
números.&lt;br /&gt;
&lt;br /&gt;
rwx&lt;br /&gt;
001 en binario es 1 en decimal. Permisos de ejecución&lt;br /&gt;
010 en binario es 2 en decimal. Permisos de escritura&lt;br /&gt;
100 en binario es 4 en decimal. Permisos de lectura&lt;br /&gt;
&lt;br /&gt;
La suma de los permisos, nos da el valor numérico. Veamos un ejemplo:&lt;br /&gt;
rwx rw- r--&lt;br /&gt;
111 110 100&lt;br /&gt;
 7   6   4&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== chmod ==&lt;br /&gt;
&lt;br /&gt;
Permite cambiar los permisos de acceso a un fichero o directorio. Podemos dar&lt;br /&gt;
permisos de dos formas diferentes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== modo carácter ===&lt;br /&gt;
&lt;br /&gt;
Veamos primero unos detalles:&lt;br /&gt;
&lt;br /&gt;
Clases de usuario:&lt;br /&gt;
&lt;br /&gt;
* owner (u)&lt;br /&gt;
* group (g)&lt;br /&gt;
* others (o)&lt;br /&gt;
* all (a)&lt;br /&gt;
&lt;br /&gt;
Modificador:&lt;br /&gt;
&lt;br /&gt;
* añadir (+)&lt;br /&gt;
* eliminar (-)&lt;br /&gt;
* sobrescribir (=)&lt;br /&gt;
&lt;br /&gt;
Para dar permisos tendríamos que seleccionar la clase de usuario el modificador&lt;br /&gt;
y los permisos, veamos un ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chmod u+x file  # añadimos permisos de ejecución al usuario&lt;br /&gt;
chmod go-w file  # quitamos permisos de escritura al grupo y a otros usuarios&lt;br /&gt;
chmod u=rwx,go=r file  # Al usuario le damos todos los permisos, y al grupo y otros solo le damos permisos de lectura&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Modo octal ===&lt;br /&gt;
&lt;br /&gt;
Con el modo octacl, es como si siempre utilizáramos el modificar sobrescribir,&lt;br /&gt;
pongamos algunos ejemplos:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chmod 744 file  # Al usuario le damos todos los permisos, y al grupo y otros solo le damos permisos de lectura&lt;br /&gt;
chmod 777 file  # Todos tienen permisos para todo&lt;br /&gt;
chmod 600 file  # solo el propietario tiene permisos de lectura y escritura&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Ejemplos ===&lt;br /&gt;
&lt;br /&gt;
Vamos a ver como funciona el tema de permisos con unos ejemplos. Vamos a crear&lt;br /&gt;
un fichero pruebas y le vamos a quitar los permisos de escritura a nuestro&lt;br /&gt;
usuario, y le vamos a dar permisos de escritura a otros:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
touch pruebas&lt;br /&gt;
ls -l pruebas  # de esta forma veremos que por defecto los permisos son rw-rw-r--&lt;br /&gt;
chmod u-w,o+w pruebas&lt;br /&gt;
ls -l pruebas  # ahora los permisos deberían ser -w-rw-rw-&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Una vez dado los permisos, veamos que con nuestro usuario podemos leer pero no&lt;br /&gt;
escribir:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat pruebas&lt;br /&gt;
echo &amp;quot;probando&amp;quot; &amp;gt; pruebas&lt;br /&gt;
exit&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Y ahora vamos a ver que el usuario pruebas, puede leer y escribir:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
su practica&lt;br /&gt;
cat pruebas&lt;br /&gt;
echo &amp;quot;probando&amp;quot; &amp;gt; pruebas&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== chown ==&lt;br /&gt;
&lt;br /&gt;
Permite cambiar el propietario de un fichero o directorio.&lt;br /&gt;
&lt;br /&gt;
Vamos por ejemplo a pasarle ahora el fichero pruebas al usuario practica:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo chown practica pruebas&lt;br /&gt;
ls -l pruebas&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Veremos que el usuario actual ahora es pruebas, aunque vemos que el ls muestra&lt;br /&gt;
lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
-r--rw-rw- 1 practica ubuntu 9 Aug 29 09:34 pruebas&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hay que comentar un detalle, y es que los ficheros y directorios tienen asignado&lt;br /&gt;
un usuario y un grupo, por defecto se utiliza el mismo usuario como grupo&lt;br /&gt;
cuando creamos un nuevo fichero o directorio. Si queremos que cuando cambiemos&lt;br /&gt;
el propietario, cambiar tambien el grupo del fichero, podemos hacerlo de la&lt;br /&gt;
siguiente forma:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo chown practica:practica pruebas&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Una vez hecho esto, vamos ahora a probar que los permisos siguen funcionando&lt;br /&gt;
como antes, ahora con el usuario ubuntu, deberíamos de poder leer y escribir en&lt;br /&gt;
el fichero pruebas, y con el usuario practica, solo leer, esto es así por que&lt;br /&gt;
ahora el propitario es practica:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Pruebas usuario ubuntu&lt;br /&gt;
cat pruebas&lt;br /&gt;
echo test &amp;gt;&amp;gt; pruebas&lt;br /&gt;
# Pruebas usuario practica&lt;br /&gt;
su practica&lt;br /&gt;
cat pruebas&lt;br /&gt;
echo &amp;quot;probando&amp;quot; &amp;gt; pruebas&lt;br /&gt;
exit&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Paso 6: Procesos =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== ps ==&lt;br /&gt;
&lt;br /&gt;
Sirve para ver que procesos están ejecutándose en el sistema, veamos un ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ps aux  # con la opción aux mostraremos todos los procesos del sistema&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cada línea es un proceso, y cada proceso muestra su PID, usuario, cantidad de&lt;br /&gt;
memoria y cpu utilizada, comando y otros detalles.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
man kill &amp;amp;  # añadir el &amp;amp; al final de un comando hace que este se ejecute en segundo plano, por lo que se quedará abierto&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La salida de este comando nos mostrará el PID que tiene ese proceso que acabamos&lt;br /&gt;
de ejecutar, vamos a comprobarlo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ps aux | grep &amp;quot;man kill&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Veremos que el PID coincide.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== kill ==&lt;br /&gt;
&lt;br /&gt;
Este comando nos servirá para matar un proceso. kill se utiliza seguido de una&lt;br /&gt;
señal para enviar al proceso seguido de uno o varios PID. para ver las señales&lt;br /&gt;
disponibles, podemos listarlas:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kill -l&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Las más utilizadas suele ser SIGTERM y SIGKILL, la primera intenta terminar el&lt;br /&gt;
proceso de forma poco abrupta, y la segunda suele utilizarse cuando el proceso&lt;br /&gt;
no atiende a esta primera señal. Vamos ahora a terminar el proceso que creamos&lt;br /&gt;
antes, si no recordamos el PID, busquémoslo de nuevo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ps aux | grep &amp;quot;man kill&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enviamos señal para terminar el proceso y comprobamos que ha terminado:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kill -SIGTERM 8470&lt;br /&gt;
ps aux | grep &amp;quot;man kill&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
También podemos notar que en el listado de señales, hay unos números, podemos&lt;br /&gt;
utilizar esos números en vez de las palabras, por ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
man kill &amp;amp;&lt;br /&gt;
kill -15 PID_COMANDO_PREVIO&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Comprobamos que el proceso ha terminado correctamente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ps aux | grep &amp;quot;man kill&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Paso 7: Estado CPU, RAM y Disco =&lt;br /&gt;
&lt;br /&gt;
== top ==&lt;br /&gt;
&lt;br /&gt;
Este comando nos servirá para ver el listado de procesos y el estado de la CPU y&lt;br /&gt;
memoria.&lt;br /&gt;
&lt;br /&gt;
Probemos el comando y observemos detalladamente la salida:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
top&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para salir, pulsamos q.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== df y du ==&lt;br /&gt;
&lt;br /&gt;
df (disk free) y du (disk usage). Ambas son utilidades para mostrar el uso de&lt;br /&gt;
los discos.&lt;br /&gt;
&lt;br /&gt;
Con df mostraremos la información del espacio en cada dispositivo montado:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
df&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Estos comandos que nos muestran el tamaño de los ficheros, casi siempre tienen&lt;br /&gt;
una opción para mostrarlo en un formato más legible (-h)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
df -h&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mucho mejor.&lt;br /&gt;
&lt;br /&gt;
Ahora veamos el comando du, el cual nos mostrará el tamaño de un fichero o&lt;br /&gt;
directorio y sus subdirectorios, no olvidemos el -h:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
du -h /home/ubuntu&lt;br /&gt;
du -h /home/ubuntu/pruebas&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Si solo quisíeramos saber el total de una carpeta y nos nos interesan sus&lt;br /&gt;
subcarpetas, podemos utilizar la opción -s:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
du -sh /home/ubuntu&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== free ==&lt;br /&gt;
&lt;br /&gt;
Sirve para ver el estado de la memoria, como siempre, opción -h:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
free -h&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== lsblk ==&lt;br /&gt;
&lt;br /&gt;
Nos muestra la información de todos los dispositivos de bloques (discos duros,&lt;br /&gt;
pendrivers, CD_ROM, SSD, ...).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lsblk&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En la siguiente práctica se utilizará más a fondo este comando, ya que&lt;br /&gt;
trabajaremos con dispositivos.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Paso 8: Gestión de paquetes de software y repositorios =&lt;br /&gt;
&lt;br /&gt;
Los sistemas Linux incluyen, además de las herramientas básicas del sistema operativo, repositorios de software que puede ser opcionalmente instalados por el administrador del sistema. Los fabricantes de las distribuciones de Linux incluyen paquetes de software listos para ser instalados que se integran con el sistema.&lt;br /&gt;
&lt;br /&gt;
Un paquete incluye el software necesario para que una cierta aplicación funcione correctamente, así como sus paquetes de dependencia.&lt;br /&gt;
&lt;br /&gt;
En Ubuntu, la herramienta de gestión de paquetes de software y repositorios se llama '''apt'''.&lt;br /&gt;
&lt;br /&gt;
=== Listado de repositorios de paquetes de software ===&lt;br /&gt;
&lt;br /&gt;
En Ubuntu el listado de repositorios se encuentra en el fichero /etc/apt/sources.list. Podemos comprobar que repositorios tenemos añadido:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat /etc/apt/sources.list&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Actualización del listado de paquetes de software ===&lt;br /&gt;
&lt;br /&gt;
Para actualizar el listado de paquetes utilizaremos el comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt update&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Instalación un nuevo paquete ===&lt;br /&gt;
&lt;br /&gt;
Para instalar un nuevo paquete, utilizaremos la orden install, por ejemplo, vamos a instalar tree, similar al ls pero muestra el arbol de directorios:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt install tree&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Desinstalación de un paquete ===&lt;br /&gt;
&lt;br /&gt;
Usaremos la orden purge o la orden remove, purge nos lo eliminad todo, y remove mantiene la configuración en el caso de que el paquete la tuviese. Vamos a eliminar el paquete instalado previamente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt purge tree&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Paso 9: Módulos =&lt;br /&gt;
&lt;br /&gt;
Los módulos del kernel de Linux son partes que podemos añadir o quitar de forma&lt;br /&gt;
sencilla con el fin de añadir o quitar funcionalidad. Por ejemplo, algunas de&lt;br /&gt;
estas funcionalidades son:&lt;br /&gt;
&lt;br /&gt;
* Registrar temperaturas de nuestros componentes&lt;br /&gt;
* Hacer funcionr la tarjeta de red wifi&lt;br /&gt;
* Cargar los drivers de una tarjeta gráfica&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== lsmod ==&lt;br /&gt;
&lt;br /&gt;
Comando para ver los módulos que estamos usando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lsmod&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== lspci y usb-devices ==&lt;br /&gt;
&lt;br /&gt;
Estos comandos nos servirán para ver el hardware que está conectado a nuestro&lt;br /&gt;
ordenador. Con lspci veremos el listado del hardware integrado y con usb-devices&lt;br /&gt;
el que está conectado por hardware.&lt;br /&gt;
&lt;br /&gt;
Normalmente, como los módulos se utilizan para dar funcionalidad un hardware,&lt;br /&gt;
aquí en los listado de hardware podremos ver que módulo está utilizando cada&lt;br /&gt;
hardware:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lspci -v&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Veremos una línea en algunos dispositivos que nos diga que módulo estamos&lt;br /&gt;
usando, pongo un pequeño trozo de la salida del comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
00:1f.2 SATA controller: Intel Corporation 82801IR/IO/IH (ICH9R/DO/DH) 6 port SATA Controller [AHCI mode] (rev 02) (prog-if 01 [AHCI 1.0])&lt;br /&gt;
    Subsystem: Red Hat, Inc. QEMU Virtual Machine&lt;br /&gt;
    Flags: bus master, fast devsel, latency 0, IRQ 35&lt;br /&gt;
    I/O ports at c0c0 [size=32]&lt;br /&gt;
    Memory at fcc1d000 (32-bit, non-prefetchable) [size=4K]&lt;br /&gt;
    Capabilities: &amp;lt;access denied&amp;gt;&lt;br /&gt;
    Kernel driver in use: ahci&lt;br /&gt;
    Kernel modules: ahci&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vemos que el hardware INTEl Corporation está utilizando el módulo ahci.&lt;br /&gt;
&lt;br /&gt;
Probemos ahora con usb-devices:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
usb-devices&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Veamos un trozo de código:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
T:  Bus=01 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#=  2 Spd=480 MxCh= 0&lt;br /&gt;
D:  Ver= 2.00 Cls=00(&amp;gt;ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs=  1&lt;br /&gt;
P:  Vendor=0627 ProdID=0001 Rev=00.00&lt;br /&gt;
S:  Manufacturer=QEMU&lt;br /&gt;
S:  Product=QEMU USB Tablet&lt;br /&gt;
S:  SerialNumber=42&lt;br /&gt;
C:  #Ifs= 1 Cfg#= 1 Atr=a0 MxPwr=100mA&lt;br /&gt;
I:  If#= 0 Alt= 0 #EPs= 1 Cls=03(HID  ) Sub=00 Prot=00 Driver=usbhid&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vemos que el teclado está utilizando el módulo usbhid&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== insmod ==&lt;br /&gt;
&lt;br /&gt;
Sirve para cargar un módulo en el kernel, imaginemos que tenemos un módulo que&lt;br /&gt;
se llama modulo1:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo insmod modulo1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== rmmod ==&lt;br /&gt;
&lt;br /&gt;
Sirve para eliminar un módulo de kernel. Imaginemos que queremos borrar un&lt;br /&gt;
módulo cargado anteriormente con el nombre modulo1:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo rmmod modulo1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Marramfer12</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Administraci%C3%B3n_b%C3%A1sica&amp;diff=4551</id>
		<title>Administración básica</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Administraci%C3%B3n_b%C3%A1sica&amp;diff=4551"/>
				<updated>2019-11-13T11:03:33Z</updated>
		
		<summary type="html">&lt;p&gt;Marramfer12: /* cp */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Para realizar esta práctica utilizaremos una de las máquinas virtuales que generamos en la práctica anterior.&lt;br /&gt;
&lt;br /&gt;
En esta práctica aprenderemos a utilizar el interprete de ordenes (también conocido como ''[https://www.traficantes.net/sites/default/files/pdfs/En%20el%20principio%20fue...-TdS.pdf línea de comandos]'') y a aprender nociones básicas de administración de sistemas Linux.&lt;br /&gt;
&lt;br /&gt;
= Paso 0: Breve introducción al sistema Linux =&lt;br /&gt;
&lt;br /&gt;
== Estructura básica del sistema de archivos ==&lt;br /&gt;
&lt;br /&gt;
En un sistema Linux, todas las carpetas y ficheros en el sistema de fichero pende de la carpeta raíz que se representa con la /.&lt;br /&gt;
&lt;br /&gt;
 /&lt;br /&gt;
 ├── bin&lt;br /&gt;
 ├── usr&lt;br /&gt;
 │   ├── local&lt;br /&gt;
 │   ├── bin&lt;br /&gt;
 │   └── ...&lt;br /&gt;
 ├── dev&lt;br /&gt;
 │   ├── sda&lt;br /&gt;
 │   ├── sda1&lt;br /&gt;
 │   └── ...&lt;br /&gt;
 ├── home&lt;br /&gt;
 │   ├── practica&lt;br /&gt;
 │   │   ├── tema1.pdf&lt;br /&gt;
 │   │   ├── boletin1.pdf&lt;br /&gt;
 │   │   └── ...&lt;br /&gt;
 │   ├── profesor&lt;br /&gt;
 │   └── ...&lt;br /&gt;
 └── etc&lt;br /&gt;
     ├── firefox&lt;br /&gt;
     ├── libvirt&lt;br /&gt;
     ├── ...&lt;br /&gt;
     └── ...&lt;br /&gt;
&lt;br /&gt;
Como puedes observar, el sistema de fichero emplea una estructura de árbol.&lt;br /&gt;
&lt;br /&gt;
== Nociones básicas ==&lt;br /&gt;
&lt;br /&gt;
·Aplicaciones con nombres compuestos: usar guion entre palabras&lt;br /&gt;
&lt;br /&gt;
·Nombres con espacios en blanco: Escribir entre comillas dobles&lt;br /&gt;
&lt;br /&gt;
·Espacios en blanco para separar ordenes (ej: instalar varios paquetes )&lt;br /&gt;
&lt;br /&gt;
·Formato general de una orden: comando [-opciones] [argumentos]&lt;br /&gt;
&lt;br /&gt;
·'''IMPORTANTE''': Diferencia entre mayúsculas y minúsculas&lt;br /&gt;
&lt;br /&gt;
== Carpetas . y .. ==&lt;br /&gt;
&lt;br /&gt;
Toda carpeta en un sistema Linux dispone de dos pseudocarpetas, la '''.''' y la '''..'':&lt;br /&gt;
&lt;br /&gt;
* La pseudocarpeta '''..''' hace referencia a la carpeta padre que contiene a esta carpeta.&lt;br /&gt;
* La pseudocarpeta '''.''' hace referencia a la carpeta actual, es por tanto una autoreferencia.&lt;br /&gt;
&lt;br /&gt;
En el caso de la carpeta raíz, la pseudocarpeta '''.''' y '''..''' hacen referencia a la propia carpeta raíz, se trata, por tanto de una excepción.&lt;br /&gt;
&lt;br /&gt;
== Directorio de trabajo actual y la orden cd ==&lt;br /&gt;
&lt;br /&gt;
Cada interprete de ordenes dispone de una ''carpeta de trabajo actual'' ('''c'''urrent '''w''orking '''d''irectory, en inglés). La carpeta de trabajo actual se puede modificar con la orden '''cd''' ('''c'''hange '''d'''irectory, en inglés).&lt;br /&gt;
&lt;br /&gt;
Por ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ cd ..&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nos situaría en la carpeta padre, empleando una ruta relativa.&lt;br /&gt;
&lt;br /&gt;
Si volvemos a escribir desde /home &amp;quot; cd .. &amp;quot; nos lleva a '''/$''' &lt;br /&gt;
&lt;br /&gt;
Para situarnos en el raíz, podemos emplear una ruta absoluta:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ cd /&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En caso de que queramos volver a la carpeta de usuario, bastaría con invocar a '''cd''' sin más o ''' cd ~ '''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ cd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''MUY IMPORTANTE''': No es lo mismo cd.. que ''' cd .. ''', es necesario el espacio después del cd.&lt;br /&gt;
&lt;br /&gt;
== Rutas absolutas, rutas relativas ==&lt;br /&gt;
&lt;br /&gt;
Para hacer referencia a un fichero o una carpeta se usan ruta absolutas o rutas relativas.&lt;br /&gt;
&lt;br /&gt;
Las rutas absolutas siempre empieza por /, de manera que toman como punto de referencia la carpeta raíz (/). Por ejemplo, una ruta absoluta a la carpeta '''prueba''' que está almacenada en la carpeta del usuario '''ubuntu''' es '/home/ubuntu/prueba/'.&lt;br /&gt;
&lt;br /&gt;
Las ruta relativa toma como referencia la carpeta de trabajo actual. Para averiguar la carpeta de trabajo actual disponemos de la orden '''pwd'''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ pwd&lt;br /&gt;
/home/ubuntu&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En base a la carpeta de trabajo actual, empleando la pseudocarpeta '''..''', se puede construir rutas relativas. Por ejemplo, para referenciar un fichero '''fichero.txt''' en la carpeta temporal, podemos emplear la ruta relativa '''../../tmp/fichero.txt'''.&lt;br /&gt;
&lt;br /&gt;
Aunque probablemente sea más cómodo emplear una ruta absoluta en este caso, que sería '''/tmp/fichero.txt'''.&lt;br /&gt;
&lt;br /&gt;
== Intérprete de órdenes ==&lt;br /&gt;
&lt;br /&gt;
El intérprete de órdenes es un lanzador de aplicaciones textual que emplea el teclado como dispositivo de entrada de datos. Mediante el teclado, se escribe el nombre del programa que se quiere lanzar y al pulsa la tecla ''intro'' el intérprete de ordenes ejecutara dicho programa. Por defecto, el intérprete de ordenes que emplea Ubuntu por defecto es '''bash'''.&lt;br /&gt;
&lt;br /&gt;
== man: ver la página de manual de una orden ==&lt;br /&gt;
&lt;br /&gt;
La orden '''man''' te será útil para ver las páginas de manual.&lt;br /&gt;
&lt;br /&gt;
Su estructura básica es:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
man &amp;lt;comando&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aunque también se utiliza con la opción ''' -a ''' de All, que también muestra las entradas comenzadas por '''.''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
man -a &amp;lt;comando&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Este programa toma como entrada el nombre de la orden de la que quieres consultar su página de manual, por ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
man ls&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nos da información del manual de la orden '''ls'''.&lt;br /&gt;
&lt;br /&gt;
Para salir de la página de manual, pulsa la tecla '''q''' (la primera letra de la palabra '''quit''', en inglés).&lt;br /&gt;
&lt;br /&gt;
quit = salir&lt;br /&gt;
&lt;br /&gt;
Normalmente, los programas ofrecen opciones de ayuda, como '''--help'''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
man --help&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
También se puede emplear la versión compacta a la hora de especificar opciones.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
man -h&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En general, todas las ordenes suelen ofrecer una opción de ayuda.&lt;br /&gt;
&lt;br /&gt;
= Paso 1: Operaciones básicas con el sistema de ficheros =&lt;br /&gt;
&lt;br /&gt;
== ls ==&lt;br /&gt;
&lt;br /&gt;
Lista los ficheros y carpetas. Si no se especifica nada, muestra los ficheros y carpetas que contiene la carpeta de trabajo actual.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Si se especifica una ruta, muestra las carpetas y ficheros contenidos en dicha ruta, por ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ ls /&lt;br /&gt;
bin  boot  data  dev  etc  home  initrd.img  initrd.img.old  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  snap  srv  sys  tmp  usr  var  vmlinuz  vmlinuz.old&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al emplear '''/''' como ruta absoluta, muestra el contenido de la carpeta raíz.&lt;br /&gt;
&lt;br /&gt;
Las opciones más usadas de este programa suelen ser:&lt;br /&gt;
&lt;br /&gt;
* -a: muestra los ficheros y carpetas ''ocultos''. En Linux, cualquier fichero o carpeta cuyo nombre empiece por . se considera ''oculto''. Esto incluye también en el listado las pseudocarpetas . y ..&lt;br /&gt;
&lt;br /&gt;
* -l: se muestra en lista y aporta datos como la fecha de última modificación, propietario, grupo, tamaño en bytes y nombre:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ ls -a&lt;br /&gt;
&lt;br /&gt;
.  ..  .bash_history  .bash_logout  .bashrc  .profile  .ssh&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ambas opciones se puede combinar:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ ls -la /&lt;br /&gt;
&lt;br /&gt;
total 92&lt;br /&gt;
drwxr-xr-x  24 root root  4096 Aug 28 09:50 .&lt;br /&gt;
drwxr-xr-x  24 root root  4096 Aug 28 09:50 ..&lt;br /&gt;
drwxr-xr-x   2 root root  4096 Aug 22 12:37 bin&lt;br /&gt;
drwxr-xr-x   4 root root  4096 Aug 22 12:37 boot&lt;br /&gt;
drwx------   3 root root  4096 Aug 28 09:50 data&lt;br /&gt;
drwxr-xr-x  18 root root  3780 Aug 28 09:46 dev&lt;br /&gt;
[...]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Otras opciones útiles son:&lt;br /&gt;
&lt;br /&gt;
* -s : muestra el tamaño en bloques de cada archivo&lt;br /&gt;
&lt;br /&gt;
* -t : aporta el día y la hora de modificación&lt;br /&gt;
&lt;br /&gt;
* -R : lista también las subcarpetas &lt;br /&gt;
&lt;br /&gt;
* --color : muestra el contenido coloreado&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Los '''permisos''' se emplean en base a tres capacidades:&lt;br /&gt;
&lt;br /&gt;
* Lectura, que se codifica con '''r''' (read, en inglés).&lt;br /&gt;
* Escritura, que se codifica con '''w''' (write, en inglés).&lt;br /&gt;
* Ejecutación, que se codifica con '''x''' (execute, en inglés).&lt;br /&gt;
&lt;br /&gt;
La primera columna muestra los permisos que codifican:&lt;br /&gt;
&lt;br /&gt;
* Tipo de entrada: '''d''' indica ''directorio'' (''carpeta'').&lt;br /&gt;
* Permisos del propietario, primera terna de rwx&lt;br /&gt;
* Permisos del grupo, segunda terna de rwx&lt;br /&gt;
* Permisos para el resto del mundo, tercera terna de rwx.&lt;br /&gt;
&lt;br /&gt;
A continuación, aparecen el propietario y el grupo, seguidos de la fecha de última modificación y el nombre del fichero o carpeta.&lt;br /&gt;
&lt;br /&gt;
La ayuda ( help ) en ls solo funciona con ''' ls --help ''' no con ls -h&lt;br /&gt;
&lt;br /&gt;
== mkdir ==&lt;br /&gt;
&lt;br /&gt;
Crea un nuevo directorio.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ mkdir test&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Crea una carpeta test en el directorio actual.&lt;br /&gt;
&lt;br /&gt;
Comprobemos que se ha creado bien:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ ls&lt;br /&gt;
test&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Con la opción '''-p''', permite crear sucesivas carpetas anidadas de una sola vez, por ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ mkdir -p a/b/c&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Que crea la siguiente estructura de carpetas.&lt;br /&gt;
&lt;br /&gt;
 a&lt;br /&gt;
 └── b&lt;br /&gt;
     └── c&lt;br /&gt;
&lt;br /&gt;
== touch ==&lt;br /&gt;
&lt;br /&gt;
Crea un nuevo fichero vacío (sin contenido) con el nombre que especifiquemos.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ touch file.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Comprobamos que el fichero se ha creado correctamente.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ ls&lt;br /&gt;
file.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== cp ==&lt;br /&gt;
&lt;br /&gt;
Copia un fichero o directorio.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ cp file.txt file_copy.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para copiar una carpeta y su contenido tenemos que usar la opción -r (recursivo).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ cp -r test test_copy&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Comprobamos el resultado con la orden '''ls'''.&lt;br /&gt;
&lt;br /&gt;
* Si nos encontramos en la carpeta destino, la estructura sería la siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ cp &amp;lt;nombre ruta origen&amp;gt; &amp;lt;nombre archivo&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== mv ==&lt;br /&gt;
&lt;br /&gt;
Mueve fichero o carpeta.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mv file_copy.txt file2.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
También se emplea para renombrar.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mv test_copy test_copy2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== rm ==&lt;br /&gt;
&lt;br /&gt;
Borra un fichero o directorio&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rm file2.txt&lt;br /&gt;
rm -r test2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Comprobamos:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ejercicios:&lt;br /&gt;
&lt;br /&gt;
# Crear la siguiente estructura dentro del directorio /tmp (usar los comandos mkdir, touch y cp):&lt;br /&gt;
&lt;br /&gt;
 /tmp&lt;br /&gt;
 ├── carpeta1&lt;br /&gt;
 ├── carpeta2&lt;br /&gt;
 │   ├── fichero1.txt&lt;br /&gt;
 │   └── fichero2.md&lt;br /&gt;
 └── carpeta3&lt;br /&gt;
     ├── fichero1.txt&lt;br /&gt;
     └── fichero2.md&lt;br /&gt;
&lt;br /&gt;
# Basándonos en el ejercicio anterior, cambiar la estructura a la siguiente (usar comandos mv y rm):&lt;br /&gt;
&lt;br /&gt;
 /tmp&lt;br /&gt;
 └── carpeta&lt;br /&gt;
     ├── fichero1.txt&lt;br /&gt;
     └── fichero2.md&lt;br /&gt;
&lt;br /&gt;
= Paso 2: Impresión por pantalla y redirección de salida =&lt;br /&gt;
&lt;br /&gt;
== echo ==&lt;br /&gt;
&lt;br /&gt;
Sirve para imprimir una línea de texto por pantalla o imprimir variables de&lt;br /&gt;
entorno.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo &amp;quot;Hola&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Una variable de entorno es una variable editada con algún valor, por defecto&lt;br /&gt;
existen algunas creadas, como por ejemplo la variable HOME, que contiene el&lt;br /&gt;
directorio del usuario:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo $HOME&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aprovecharemos y crearemos una variable nosotros:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ME=&amp;quot;my name&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Comprobamos:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo $ME&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Redirección de salida ==&lt;br /&gt;
&lt;br /&gt;
&amp;gt; y &amp;gt;&amp;gt; sirve para redirigir una salida. Por ejemplo, utilizando el comando echo,&lt;br /&gt;
podemos enviar un texto dentro de un fichero:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo &amp;quot;Esto es una prueba&amp;quot; &amp;gt; file.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La diferencia entre &amp;gt; y &amp;gt;&amp;gt; es que &amp;gt; sobrescribe lo que haya en el fichero y&lt;br /&gt;
añade el contenido, y &amp;gt;&amp;gt; no sobrescribe, solo añade el nuevo contenido.&lt;br /&gt;
&lt;br /&gt;
Hagamos la prueba:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo &amp;quot;Esto es una prueba&amp;quot; &amp;gt; file.txt&lt;br /&gt;
echo &amp;quot;Esto es una prueba2&amp;quot; &amp;gt; file.txt&lt;br /&gt;
echo &amp;quot;Esto es una prueba&amp;quot; &amp;gt;&amp;gt; file2.txt&lt;br /&gt;
echo &amp;quot;Esto es una prueba2&amp;quot; &amp;gt;&amp;gt; file2.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En cualquier caso, si el fichero no existe, se crea.&lt;br /&gt;
&lt;br /&gt;
= Paso 3: Manejo de ficheros y carpetas avanzado =&lt;br /&gt;
&lt;br /&gt;
== cat ==&lt;br /&gt;
&lt;br /&gt;
Muestra el contenido de un fichero.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat file.txt&lt;br /&gt;
cat file2.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== grep ==&lt;br /&gt;
&lt;br /&gt;
Sirve para buscar coincidencia de un cierto patrón en ficheros y muestra la coincidencia, en caso de encontrarla, por pantalla.&lt;br /&gt;
&lt;br /&gt;
Por ejemplo, para buscar el patrón ''prueba'' en el fichero ''fichero.txt''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ grep -n prueba fichero.txt&lt;br /&gt;
1:Esto es una prueba&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La opción '''-n''' muestra el número de línea.&lt;br /&gt;
&lt;br /&gt;
== wc ==&lt;br /&gt;
&lt;br /&gt;
Sirve para contar el número de palabras, caracteres, líneas o bytes que contiene un fichero.&lt;br /&gt;
&lt;br /&gt;
Las opciones más utilizadas son:&lt;br /&gt;
&lt;br /&gt;
* -l: muestra el número de líneas que contiene el fichero.&lt;br /&gt;
* -w: muestra el número de palabras.&lt;br /&gt;
* -m: muestra el número de caracteres&lt;br /&gt;
* -c: muestra el número de bytes&lt;br /&gt;
&lt;br /&gt;
Probemos y contemos todo en el fichero file2.txt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
wc -l file2.txt&lt;br /&gt;
wc -w file2.txt&lt;br /&gt;
wc -m file2.txt&lt;br /&gt;
wc -c file2.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podemos contar más de un fichero a la vez:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
wc -l file.txt file2.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nos mostrará el conteo de cada fichero y el total.&lt;br /&gt;
&lt;br /&gt;
== Tubería (|) ==&lt;br /&gt;
&lt;br /&gt;
La tubería nos servirá para conectar varios comandos al mismo tiempo, veamos&lt;br /&gt;
unos ejemplos, que siempre se entiende mejor:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat file2.txt | grep prueba&lt;br /&gt;
grep -nr prueba file2.txt | wc -l&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En el primer ejemplo, mostramos el contenido de file2.txt, y esta salida se la&lt;br /&gt;
pasamos al comando grep, el cual busca las líneas que contengan prueba.&lt;br /&gt;
&lt;br /&gt;
En el segundo, buscamos todas las líneas que contengan la palabra prueba, y esta&lt;br /&gt;
salida se la pasamos al comando wc, el cual cuenta las líneas de la salida del&lt;br /&gt;
comando grep.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Redirecciones ==&lt;br /&gt;
&lt;br /&gt;
Vamos a ver unos conceptos antes de seguir:&lt;br /&gt;
&lt;br /&gt;
* Entrada estándar: representa los datos que necesita una aplicación para funcionar, como por ejemplo un archivo de datos o información ingresada desde la terminal y es representado en la terminal como el tipo 0.&lt;br /&gt;
* Salida estándar: es la vía que utilizan las aplicaciones para mostrarte información, allí podemos ver el progreso o simplemente los mensajes que la  aplicación quiera darte en determinado momento y es representado en la terminal como el tipo 1.&lt;br /&gt;
* Error estándar: es la forma en que los programas te informan sobre los problemas que pueden encontrarse al momento de la ejecución y es representado en la terminal como el tipo 2.&lt;br /&gt;
&lt;br /&gt;
Las redirecciones nos sirven para mover la información de un tipo a otro.&lt;br /&gt;
&lt;br /&gt;
Ya vimos previamente el uso de &amp;gt; y &amp;gt;&amp;gt;, y también el |, veamos algunas más:&lt;br /&gt;
&lt;br /&gt;
* comando &amp;lt; fichero: Toma la entrada de fichero&lt;br /&gt;
* comando 2&amp;gt; fichero: Envía la salida de error de comando a fichero&lt;br /&gt;
* comando 2&amp;gt;&amp;amp;1: Envía la salida de error a la salida estándar&lt;br /&gt;
* comando &amp;amp;&amp;gt; fichero: Envía la salida estándar y de error a fichero; equivale a comando &amp;gt; fichero 2&amp;gt;&amp;amp;1&lt;br /&gt;
&lt;br /&gt;
= Paso 4: Usuarios y grupos =&lt;br /&gt;
&lt;br /&gt;
== whoami ==&lt;br /&gt;
&lt;br /&gt;
Sirve para obtener el usuario actual.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
whoami&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Lo más seguro es que nos aparezca ubuntu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== who ==&lt;br /&gt;
&lt;br /&gt;
Es para saber quien está ahora mismo en la máquina conectado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
who&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Seguramente solo estemos nosotros:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ubuntu   pts/0        2019-08-28 13:51 (192.168.122.1)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== su y sudo ==&lt;br /&gt;
&lt;br /&gt;
su (substitute user): sirve para cambiar de usuario. Por ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
su root&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aquí nos pedirá la contraseña del usuario al que queramos cambiar.&lt;br /&gt;
&lt;br /&gt;
sudo (super user do): no todas las distribuciones lo integran, porque es menos&lt;br /&gt;
seguro que su, este comando nos permite ejecutar un comando siendo otro usuario,&lt;br /&gt;
por defecto, si no le damos usuario, lo hará con el usuario root. Si sudo nos&lt;br /&gt;
pide contraseña, nos pide la contraseña del usuario, ya que el usuario es que el&lt;br /&gt;
tiene permisos para usar sudo o no.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo ls -a /root&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Si tuviéramos por ejemplo un usuario 'practica' y quisíeramos ejecutar un&lt;br /&gt;
comando en su nombre:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo -u practica ls&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== adduser y useradd ==&lt;br /&gt;
&lt;br /&gt;
Ambos comandos sirven para crear un nuevo usuario, pero tienen sus diferencias.&lt;br /&gt;
&lt;br /&gt;
useradd es un comando del sistema, y adduser es un script escrito en perl que&lt;br /&gt;
utiliza el comando useradd. La diferencia así de primeras es que adduser nos&lt;br /&gt;
crear el directorio /home/usuario y useradd necesita la opción -m para hacer lo&lt;br /&gt;
mismo. Se puede utilizar el que se quiera, aunque es más recomendable useradd,&lt;br /&gt;
ya que funcionará igual en todas las distribuciones.&lt;br /&gt;
&lt;br /&gt;
Vamos a añadir un usuario practica con su directorio en /home (notemos que&lt;br /&gt;
necesitamos permisos de super usuario para realizar esta tarea):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo useradd -m practica&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vamos a comprobar que el directorio home está creado y que el usuario practica&lt;br /&gt;
funciona:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls /home  # veremos el directorio practica&lt;br /&gt;
sudo -u practica whoami  # nos dirá que somo el usuario practica&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== passwd ==&lt;br /&gt;
&lt;br /&gt;
Sirve para modificar la contraseña de un usuario, por ejemplo, vamos a modificar&lt;br /&gt;
la contraseña del usuario que hemos creado previamente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo passwd practica&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nos preguntará dos veces la contraseña, y ya la tendremos actualizadas. Vamos&lt;br /&gt;
ahora a probar ahora el comando su para cambiar de usuario:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
su practica&lt;br /&gt;
whoami&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Veremos que hemos cambiado de usuario, para cerrar este usuario, escribimos&lt;br /&gt;
'exit' o pulsamos 'CTLR + D'&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== deluser y userdel ==&lt;br /&gt;
&lt;br /&gt;
Ambos sirven para borrar un usuario, similar a adduser y useradd, userdel es el&lt;br /&gt;
comando y deluser el script.&lt;br /&gt;
&lt;br /&gt;
Vamos a borrar el usuario que hemos creado, incluyendo el borrado de su /home&lt;br /&gt;
(opción -r):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
userdel -r practica&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Comprobemos que ya no tenemos usuario ni /home:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls /home&lt;br /&gt;
sudo -u practica whoami&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== addgroup y groupadd ==&lt;br /&gt;
&lt;br /&gt;
Ambos sirven para crear un grupo. Los grupos sirven para agrupar a los usuarios&lt;br /&gt;
y que estos tengan unos mismos permisos. Por ejemplo, cuando instalamos algunas&lt;br /&gt;
herramientas como por ejemplo docker, este crea el grupo docker automáticamente&lt;br /&gt;
para que fácilmente podamos añadir a un usuario al grupo, y este tenga los&lt;br /&gt;
permisos para trabajar con dicha herramienta.&lt;br /&gt;
&lt;br /&gt;
Vamos a crear un nuevo grupo, vamos a llamarle invitado:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo groupadd invitado&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== usermod y groups ==&lt;br /&gt;
&lt;br /&gt;
usermod es utilizado para asignar un grupo a un usuario.&lt;br /&gt;
&lt;br /&gt;
groups es utilizado para ver los grupos a los que pertenece un usuario.&lt;br /&gt;
&lt;br /&gt;
Vamos a añadir a un usuario practica, lo vamos a añadir al grupo invitado y&lt;br /&gt;
veremos los grupos a los que pertenece:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo useradd -m practica&lt;br /&gt;
sudo usermod -G invitado practica&lt;br /&gt;
groups practica&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Veremos que el usuario práctica pertenece al grupo invitado.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== delgroup y groupdel ==&lt;br /&gt;
&lt;br /&gt;
Ambos sirven para eliminar un grupo. Vamos a eliminar el grupo que hemos creado&lt;br /&gt;
anteriormente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo groupdel invitado&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podemos observar ahora que el usuario practica no pertenece al grupo invitado:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
groups practica&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Paso 5: Permisos =&lt;br /&gt;
&lt;br /&gt;
== Nomenclatura rwx y numérica ==&lt;br /&gt;
&lt;br /&gt;
Si hacemos un ls -l, la primera cadena que nos aparece son los permisos del&lt;br /&gt;
fichero (-rwxrw-r--), podemos dividirlo en 4 elementos:&lt;br /&gt;
&lt;br /&gt;
-    (rwx)   (rw-)  (r--)&lt;br /&gt;
|      |       |      |&lt;br /&gt;
type  owner   group  others&lt;br /&gt;
&lt;br /&gt;
* type: el tipo de fichero, pudiendo ser d (directorio), l (enlace simbólico), - (fichero normal)&lt;br /&gt;
* owner: permisos de propietario&lt;br /&gt;
* group: permisos de grupo&lt;br /&gt;
* others: permisos para los demás usuarios&lt;br /&gt;
&lt;br /&gt;
Significado de los permisos:&lt;br /&gt;
&lt;br /&gt;
* r: permisos de lectura&lt;br /&gt;
* w: permisos de escritura&lt;br /&gt;
* x: permisos de ejecución&lt;br /&gt;
&lt;br /&gt;
Por último, existe un modo abreviado para estos permisos que se utiliza con&lt;br /&gt;
números.&lt;br /&gt;
&lt;br /&gt;
rwx&lt;br /&gt;
001 en binario es 1 en decimal. Permisos de ejecución&lt;br /&gt;
010 en binario es 2 en decimal. Permisos de escritura&lt;br /&gt;
100 en binario es 4 en decimal. Permisos de lectura&lt;br /&gt;
&lt;br /&gt;
La suma de los permisos, nos da el valor numérico. Veamos un ejemplo:&lt;br /&gt;
rwx rw- r--&lt;br /&gt;
111 110 100&lt;br /&gt;
 7   6   4&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== chmod ==&lt;br /&gt;
&lt;br /&gt;
Permite cambiar los permisos de acceso a un fichero o directorio. Podemos dar&lt;br /&gt;
permisos de dos formas diferentes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== modo carácter ===&lt;br /&gt;
&lt;br /&gt;
Veamos primero unos detalles:&lt;br /&gt;
&lt;br /&gt;
Clases de usuario:&lt;br /&gt;
&lt;br /&gt;
* owner (u)&lt;br /&gt;
* group (g)&lt;br /&gt;
* others (o)&lt;br /&gt;
* all (a)&lt;br /&gt;
&lt;br /&gt;
Modificador:&lt;br /&gt;
&lt;br /&gt;
* añadir (+)&lt;br /&gt;
* eliminar (-)&lt;br /&gt;
* sobrescribir (=)&lt;br /&gt;
&lt;br /&gt;
Para dar permisos tendríamos que seleccionar la clase de usuario el modificador&lt;br /&gt;
y los permisos, veamos un ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chmod u+x file  # añadimos permisos de ejecución al usuario&lt;br /&gt;
chmod go-w file  # quitamos permisos de escritura al grupo y a otros usuarios&lt;br /&gt;
chmod u=rwx,go=r file  # Al usuario le damos todos los permisos, y al grupo y otros solo le damos permisos de lectura&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Modo octal ===&lt;br /&gt;
&lt;br /&gt;
Con el modo octacl, es como si siempre utilizáramos el modificar sobrescribir,&lt;br /&gt;
pongamos algunos ejemplos:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chmod 744 file  # Al usuario le damos todos los permisos, y al grupo y otros solo le damos permisos de lectura&lt;br /&gt;
chmod 777 file  # Todos tienen permisos para todo&lt;br /&gt;
chmod 600 file  # solo el propietario tiene permisos de lectura y escritura&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Ejemplos ===&lt;br /&gt;
&lt;br /&gt;
Vamos a ver como funciona el tema de permisos con unos ejemplos. Vamos a crear&lt;br /&gt;
un fichero pruebas y le vamos a quitar los permisos de escritura a nuestro&lt;br /&gt;
usuario, y le vamos a dar permisos de escritura a otros:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
touch pruebas&lt;br /&gt;
ls -l pruebas  # de esta forma veremos que por defecto los permisos son rw-rw-r--&lt;br /&gt;
chmod u-w,o+w pruebas&lt;br /&gt;
ls -l pruebas  # ahora los permisos deberían ser -w-rw-rw-&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Una vez dado los permisos, veamos que con nuestro usuario podemos leer pero no&lt;br /&gt;
escribir:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat pruebas&lt;br /&gt;
echo &amp;quot;probando&amp;quot; &amp;gt; pruebas&lt;br /&gt;
exit&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Y ahora vamos a ver que el usuario pruebas, puede leer y escribir:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
su practica&lt;br /&gt;
cat pruebas&lt;br /&gt;
echo &amp;quot;probando&amp;quot; &amp;gt; pruebas&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== chown ==&lt;br /&gt;
&lt;br /&gt;
Permite cambiar el propietario de un fichero o directorio.&lt;br /&gt;
&lt;br /&gt;
Vamos por ejemplo a pasarle ahora el fichero pruebas al usuario practica:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo chown practica pruebas&lt;br /&gt;
ls -l pruebas&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Veremos que el usuario actual ahora es pruebas, aunque vemos que el ls muestra&lt;br /&gt;
lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
-r--rw-rw- 1 practica ubuntu 9 Aug 29 09:34 pruebas&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hay que comentar un detalle, y es que los ficheros y directorios tienen asignado&lt;br /&gt;
un usuario y un grupo, por defecto se utiliza el mismo usuario como grupo&lt;br /&gt;
cuando creamos un nuevo fichero o directorio. Si queremos que cuando cambiemos&lt;br /&gt;
el propietario, cambiar tambien el grupo del fichero, podemos hacerlo de la&lt;br /&gt;
siguiente forma:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo chown practica:practica pruebas&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Una vez hecho esto, vamos ahora a probar que los permisos siguen funcionando&lt;br /&gt;
como antes, ahora con el usuario ubuntu, deberíamos de poder leer y escribir en&lt;br /&gt;
el fichero pruebas, y con el usuario practica, solo leer, esto es así por que&lt;br /&gt;
ahora el propitario es practica:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Pruebas usuario ubuntu&lt;br /&gt;
cat pruebas&lt;br /&gt;
echo test &amp;gt;&amp;gt; pruebas&lt;br /&gt;
# Pruebas usuario practica&lt;br /&gt;
su practica&lt;br /&gt;
cat pruebas&lt;br /&gt;
echo &amp;quot;probando&amp;quot; &amp;gt; pruebas&lt;br /&gt;
exit&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Paso 6: Procesos =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== ps ==&lt;br /&gt;
&lt;br /&gt;
Sirve para ver que procesos están ejecutándose en el sistema, veamos un ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ps aux  # con la opción aux mostraremos todos los procesos del sistema&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cada línea es un proceso, y cada proceso muestra su PID, usuario, cantidad de&lt;br /&gt;
memoria y cpu utilizada, comando y otros detalles.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
man kill &amp;amp;  # añadir el &amp;amp; al final de un comando hace que este se ejecute en segundo plano, por lo que se quedará abierto&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La salida de este comando nos mostrará el PID que tiene ese proceso que acabamos&lt;br /&gt;
de ejecutar, vamos a comprobarlo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ps aux | grep &amp;quot;man kill&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Veremos que el PID coincide.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== kill ==&lt;br /&gt;
&lt;br /&gt;
Este comando nos servirá para matar un proceso. kill se utiliza seguido de una&lt;br /&gt;
señal para enviar al proceso seguido de uno o varios PID. para ver las señales&lt;br /&gt;
disponibles, podemos listarlas:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kill -l&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Las más utilizadas suele ser SIGTERM y SIGKILL, la primera intenta terminar el&lt;br /&gt;
proceso de forma poco abrupta, y la segunda suele utilizarse cuando el proceso&lt;br /&gt;
no atiende a esta primera señal. Vamos ahora a terminar el proceso que creamos&lt;br /&gt;
antes, si no recordamos el PID, busquémoslo de nuevo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ps aux | grep &amp;quot;man kill&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enviamos señal para terminar el proceso y comprobamos que ha terminado:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kill -SIGTERM 8470&lt;br /&gt;
ps aux | grep &amp;quot;man kill&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
También podemos notar que en el listado de señales, hay unos números, podemos&lt;br /&gt;
utilizar esos números en vez de las palabras, por ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
man kill &amp;amp;&lt;br /&gt;
kill -15 PID_COMANDO_PREVIO&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Comprobamos que el proceso ha terminado correctamente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ps aux | grep &amp;quot;man kill&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Paso 7: Estado CPU, RAM y Disco =&lt;br /&gt;
&lt;br /&gt;
== top ==&lt;br /&gt;
&lt;br /&gt;
Este comando nos servirá para ver el listado de procesos y el estado de la CPU y&lt;br /&gt;
memoria.&lt;br /&gt;
&lt;br /&gt;
Probemos el comando y observemos detalladamente la salida:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
top&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para salir, pulsamos q.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== df y du ==&lt;br /&gt;
&lt;br /&gt;
df (disk free) y du (disk usage). Ambas son utilidades para mostrar el uso de&lt;br /&gt;
los discos.&lt;br /&gt;
&lt;br /&gt;
Con df mostraremos la información del espacio en cada dispositivo montado:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
df&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Estos comandos que nos muestran el tamaño de los ficheros, casi siempre tienen&lt;br /&gt;
una opción para mostrarlo en un formato más legible (-h)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
df -h&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mucho mejor.&lt;br /&gt;
&lt;br /&gt;
Ahora veamos el comando du, el cual nos mostrará el tamaño de un fichero o&lt;br /&gt;
directorio y sus subdirectorios, no olvidemos el -h:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
du -h /home/ubuntu&lt;br /&gt;
du -h /home/ubuntu/pruebas&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Si solo quisíeramos saber el total de una carpeta y nos nos interesan sus&lt;br /&gt;
subcarpetas, podemos utilizar la opción -s:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
du -sh /home/ubuntu&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== free ==&lt;br /&gt;
&lt;br /&gt;
Sirve para ver el estado de la memoria, como siempre, opción -h:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
free -h&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== lsblk ==&lt;br /&gt;
&lt;br /&gt;
Nos muestra la información de todos los dispositivos de bloques (discos duros,&lt;br /&gt;
pendrivers, CD_ROM, SSD, ...).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lsblk&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En la siguiente práctica se utilizará más a fondo este comando, ya que&lt;br /&gt;
trabajaremos con dispositivos.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Paso 8: Gestión de paquetes de software y repositorios =&lt;br /&gt;
&lt;br /&gt;
Los sistemas Linux incluyen, además de las herramientas básicas del sistema operativo, repositorios de software que puede ser opcionalmente instalados por el administrador del sistema. Los fabricantes de las distribuciones de Linux incluyen paquetes de software listos para ser instalados que se integran con el sistema.&lt;br /&gt;
&lt;br /&gt;
Un paquete incluye el software necesario para que una cierta aplicación funcione correctamente, así como sus paquetes de dependencia.&lt;br /&gt;
&lt;br /&gt;
En Ubuntu, la herramienta de gestión de paquetes de software y repositorios se llama '''apt'''.&lt;br /&gt;
&lt;br /&gt;
=== Listado de repositorios de paquetes de software ===&lt;br /&gt;
&lt;br /&gt;
En Ubuntu el listado de repositorios se encuentra en el fichero /etc/apt/sources.list. Podemos comprobar que repositorios tenemos añadido:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat /etc/apt/sources.list&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Actualización del listado de paquetes de software ===&lt;br /&gt;
&lt;br /&gt;
Para actualizar el listado de paquetes utilizaremos el comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt update&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Instalación un nuevo paquete ===&lt;br /&gt;
&lt;br /&gt;
Para instalar un nuevo paquete, utilizaremos la orden install, por ejemplo, vamos a instalar tree, similar al ls pero muestra el arbol de directorios:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt install tree&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Desinstalación de un paquete ===&lt;br /&gt;
&lt;br /&gt;
Usaremos la orden purge o la orden remove, purge nos lo eliminad todo, y remove mantiene la configuración en el caso de que el paquete la tuviese. Vamos a eliminar el paquete instalado previamente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt purge tree&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Paso 9: Módulos =&lt;br /&gt;
&lt;br /&gt;
Los módulos del kernel de Linux son partes que podemos añadir o quitar de forma&lt;br /&gt;
sencilla con el fin de añadir o quitar funcionalidad. Por ejemplo, algunas de&lt;br /&gt;
estas funcionalidades son:&lt;br /&gt;
&lt;br /&gt;
* Registrar temperaturas de nuestros componentes&lt;br /&gt;
* Hacer funcionr la tarjeta de red wifi&lt;br /&gt;
* Cargar los drivers de una tarjeta gráfica&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== lsmod ==&lt;br /&gt;
&lt;br /&gt;
Comando para ver los módulos que estamos usando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lsmod&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== lspci y usb-devices ==&lt;br /&gt;
&lt;br /&gt;
Estos comandos nos servirán para ver el hardware que está conectado a nuestro&lt;br /&gt;
ordenador. Con lspci veremos el listado del hardware integrado y con usb-devices&lt;br /&gt;
el que está conectado por hardware.&lt;br /&gt;
&lt;br /&gt;
Normalmente, como los módulos se utilizan para dar funcionalidad un hardware,&lt;br /&gt;
aquí en los listado de hardware podremos ver que módulo está utilizando cada&lt;br /&gt;
hardware:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lspci -v&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Veremos una línea en algunos dispositivos que nos diga que módulo estamos&lt;br /&gt;
usando, pongo un pequeño trozo de la salida del comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
00:1f.2 SATA controller: Intel Corporation 82801IR/IO/IH (ICH9R/DO/DH) 6 port SATA Controller [AHCI mode] (rev 02) (prog-if 01 [AHCI 1.0])&lt;br /&gt;
    Subsystem: Red Hat, Inc. QEMU Virtual Machine&lt;br /&gt;
    Flags: bus master, fast devsel, latency 0, IRQ 35&lt;br /&gt;
    I/O ports at c0c0 [size=32]&lt;br /&gt;
    Memory at fcc1d000 (32-bit, non-prefetchable) [size=4K]&lt;br /&gt;
    Capabilities: &amp;lt;access denied&amp;gt;&lt;br /&gt;
    Kernel driver in use: ahci&lt;br /&gt;
    Kernel modules: ahci&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vemos que el hardware INTEl Corporation está utilizando el módulo ahci.&lt;br /&gt;
&lt;br /&gt;
Probemos ahora con usb-devices:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
usb-devices&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Veamos un trozo de código:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
T:  Bus=01 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#=  2 Spd=480 MxCh= 0&lt;br /&gt;
D:  Ver= 2.00 Cls=00(&amp;gt;ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs=  1&lt;br /&gt;
P:  Vendor=0627 ProdID=0001 Rev=00.00&lt;br /&gt;
S:  Manufacturer=QEMU&lt;br /&gt;
S:  Product=QEMU USB Tablet&lt;br /&gt;
S:  SerialNumber=42&lt;br /&gt;
C:  #Ifs= 1 Cfg#= 1 Atr=a0 MxPwr=100mA&lt;br /&gt;
I:  If#= 0 Alt= 0 #EPs= 1 Cls=03(HID  ) Sub=00 Prot=00 Driver=usbhid&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vemos que el teclado está utilizando el módulo usbhid&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== insmod ==&lt;br /&gt;
&lt;br /&gt;
Sirve para cargar un módulo en el kernel, imaginemos que tenemos un módulo que&lt;br /&gt;
se llama modulo1:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo insmod modulo1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== rmmod ==&lt;br /&gt;
&lt;br /&gt;
Sirve para eliminar un módulo de kernel. Imaginemos que queremos borrar un&lt;br /&gt;
módulo cargado anteriormente con el nombre modulo1:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo rmmod modulo1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Marramfer12</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Administraci%C3%B3n_b%C3%A1sica&amp;diff=4550</id>
		<title>Administración básica</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Administraci%C3%B3n_b%C3%A1sica&amp;diff=4550"/>
				<updated>2019-11-13T10:38:17Z</updated>
		
		<summary type="html">&lt;p&gt;Marramfer12: /* ls */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Para realizar esta práctica utilizaremos una de las máquinas virtuales que generamos en la práctica anterior.&lt;br /&gt;
&lt;br /&gt;
En esta práctica aprenderemos a utilizar el interprete de ordenes (también conocido como ''[https://www.traficantes.net/sites/default/files/pdfs/En%20el%20principio%20fue...-TdS.pdf línea de comandos]'') y a aprender nociones básicas de administración de sistemas Linux.&lt;br /&gt;
&lt;br /&gt;
= Paso 0: Breve introducción al sistema Linux =&lt;br /&gt;
&lt;br /&gt;
== Estructura básica del sistema de archivos ==&lt;br /&gt;
&lt;br /&gt;
En un sistema Linux, todas las carpetas y ficheros en el sistema de fichero pende de la carpeta raíz que se representa con la /.&lt;br /&gt;
&lt;br /&gt;
 /&lt;br /&gt;
 ├── bin&lt;br /&gt;
 ├── usr&lt;br /&gt;
 │   ├── local&lt;br /&gt;
 │   ├── bin&lt;br /&gt;
 │   └── ...&lt;br /&gt;
 ├── dev&lt;br /&gt;
 │   ├── sda&lt;br /&gt;
 │   ├── sda1&lt;br /&gt;
 │   └── ...&lt;br /&gt;
 ├── home&lt;br /&gt;
 │   ├── practica&lt;br /&gt;
 │   │   ├── tema1.pdf&lt;br /&gt;
 │   │   ├── boletin1.pdf&lt;br /&gt;
 │   │   └── ...&lt;br /&gt;
 │   ├── profesor&lt;br /&gt;
 │   └── ...&lt;br /&gt;
 └── etc&lt;br /&gt;
     ├── firefox&lt;br /&gt;
     ├── libvirt&lt;br /&gt;
     ├── ...&lt;br /&gt;
     └── ...&lt;br /&gt;
&lt;br /&gt;
Como puedes observar, el sistema de fichero emplea una estructura de árbol.&lt;br /&gt;
&lt;br /&gt;
== Nociones básicas ==&lt;br /&gt;
&lt;br /&gt;
·Aplicaciones con nombres compuestos: usar guion entre palabras&lt;br /&gt;
&lt;br /&gt;
·Nombres con espacios en blanco: Escribir entre comillas dobles&lt;br /&gt;
&lt;br /&gt;
·Espacios en blanco para separar ordenes (ej: instalar varios paquetes )&lt;br /&gt;
&lt;br /&gt;
·Formato general de una orden: comando [-opciones] [argumentos]&lt;br /&gt;
&lt;br /&gt;
·'''IMPORTANTE''': Diferencia entre mayúsculas y minúsculas&lt;br /&gt;
&lt;br /&gt;
== Carpetas . y .. ==&lt;br /&gt;
&lt;br /&gt;
Toda carpeta en un sistema Linux dispone de dos pseudocarpetas, la '''.''' y la '''..'':&lt;br /&gt;
&lt;br /&gt;
* La pseudocarpeta '''..''' hace referencia a la carpeta padre que contiene a esta carpeta.&lt;br /&gt;
* La pseudocarpeta '''.''' hace referencia a la carpeta actual, es por tanto una autoreferencia.&lt;br /&gt;
&lt;br /&gt;
En el caso de la carpeta raíz, la pseudocarpeta '''.''' y '''..''' hacen referencia a la propia carpeta raíz, se trata, por tanto de una excepción.&lt;br /&gt;
&lt;br /&gt;
== Directorio de trabajo actual y la orden cd ==&lt;br /&gt;
&lt;br /&gt;
Cada interprete de ordenes dispone de una ''carpeta de trabajo actual'' ('''c'''urrent '''w''orking '''d''irectory, en inglés). La carpeta de trabajo actual se puede modificar con la orden '''cd''' ('''c'''hange '''d'''irectory, en inglés).&lt;br /&gt;
&lt;br /&gt;
Por ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ cd ..&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nos situaría en la carpeta padre, empleando una ruta relativa.&lt;br /&gt;
&lt;br /&gt;
Si volvemos a escribir desde /home &amp;quot; cd .. &amp;quot; nos lleva a '''/$''' &lt;br /&gt;
&lt;br /&gt;
Para situarnos en el raíz, podemos emplear una ruta absoluta:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ cd /&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En caso de que queramos volver a la carpeta de usuario, bastaría con invocar a '''cd''' sin más o ''' cd ~ '''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ cd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''MUY IMPORTANTE''': No es lo mismo cd.. que ''' cd .. ''', es necesario el espacio después del cd.&lt;br /&gt;
&lt;br /&gt;
== Rutas absolutas, rutas relativas ==&lt;br /&gt;
&lt;br /&gt;
Para hacer referencia a un fichero o una carpeta se usan ruta absolutas o rutas relativas.&lt;br /&gt;
&lt;br /&gt;
Las rutas absolutas siempre empieza por /, de manera que toman como punto de referencia la carpeta raíz (/). Por ejemplo, una ruta absoluta a la carpeta '''prueba''' que está almacenada en la carpeta del usuario '''ubuntu''' es '/home/ubuntu/prueba/'.&lt;br /&gt;
&lt;br /&gt;
Las ruta relativa toma como referencia la carpeta de trabajo actual. Para averiguar la carpeta de trabajo actual disponemos de la orden '''pwd'''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ pwd&lt;br /&gt;
/home/ubuntu&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En base a la carpeta de trabajo actual, empleando la pseudocarpeta '''..''', se puede construir rutas relativas. Por ejemplo, para referenciar un fichero '''fichero.txt''' en la carpeta temporal, podemos emplear la ruta relativa '''../../tmp/fichero.txt'''.&lt;br /&gt;
&lt;br /&gt;
Aunque probablemente sea más cómodo emplear una ruta absoluta en este caso, que sería '''/tmp/fichero.txt'''.&lt;br /&gt;
&lt;br /&gt;
== Intérprete de órdenes ==&lt;br /&gt;
&lt;br /&gt;
El intérprete de órdenes es un lanzador de aplicaciones textual que emplea el teclado como dispositivo de entrada de datos. Mediante el teclado, se escribe el nombre del programa que se quiere lanzar y al pulsa la tecla ''intro'' el intérprete de ordenes ejecutara dicho programa. Por defecto, el intérprete de ordenes que emplea Ubuntu por defecto es '''bash'''.&lt;br /&gt;
&lt;br /&gt;
== man: ver la página de manual de una orden ==&lt;br /&gt;
&lt;br /&gt;
La orden '''man''' te será útil para ver las páginas de manual.&lt;br /&gt;
&lt;br /&gt;
Su estructura básica es:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
man &amp;lt;comando&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aunque también se utiliza con la opción ''' -a ''' de All, que también muestra las entradas comenzadas por '''.''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
man -a &amp;lt;comando&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Este programa toma como entrada el nombre de la orden de la que quieres consultar su página de manual, por ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
man ls&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nos da información del manual de la orden '''ls'''.&lt;br /&gt;
&lt;br /&gt;
Para salir de la página de manual, pulsa la tecla '''q''' (la primera letra de la palabra '''quit''', en inglés).&lt;br /&gt;
&lt;br /&gt;
quit = salir&lt;br /&gt;
&lt;br /&gt;
Normalmente, los programas ofrecen opciones de ayuda, como '''--help'''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
man --help&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
También se puede emplear la versión compacta a la hora de especificar opciones.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
man -h&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En general, todas las ordenes suelen ofrecer una opción de ayuda.&lt;br /&gt;
&lt;br /&gt;
= Paso 1: Operaciones básicas con el sistema de ficheros =&lt;br /&gt;
&lt;br /&gt;
== ls ==&lt;br /&gt;
&lt;br /&gt;
Lista los ficheros y carpetas. Si no se especifica nada, muestra los ficheros y carpetas que contiene la carpeta de trabajo actual.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Si se especifica una ruta, muestra las carpetas y ficheros contenidos en dicha ruta, por ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ ls /&lt;br /&gt;
bin  boot  data  dev  etc  home  initrd.img  initrd.img.old  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  snap  srv  sys  tmp  usr  var  vmlinuz  vmlinuz.old&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al emplear '''/''' como ruta absoluta, muestra el contenido de la carpeta raíz.&lt;br /&gt;
&lt;br /&gt;
Las opciones más usadas de este programa suelen ser:&lt;br /&gt;
&lt;br /&gt;
* -a: muestra los ficheros y carpetas ''ocultos''. En Linux, cualquier fichero o carpeta cuyo nombre empiece por . se considera ''oculto''. Esto incluye también en el listado las pseudocarpetas . y ..&lt;br /&gt;
&lt;br /&gt;
* -l: se muestra en lista y aporta datos como la fecha de última modificación, propietario, grupo, tamaño en bytes y nombre:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ ls -a&lt;br /&gt;
&lt;br /&gt;
.  ..  .bash_history  .bash_logout  .bashrc  .profile  .ssh&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ambas opciones se puede combinar:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ ls -la /&lt;br /&gt;
&lt;br /&gt;
total 92&lt;br /&gt;
drwxr-xr-x  24 root root  4096 Aug 28 09:50 .&lt;br /&gt;
drwxr-xr-x  24 root root  4096 Aug 28 09:50 ..&lt;br /&gt;
drwxr-xr-x   2 root root  4096 Aug 22 12:37 bin&lt;br /&gt;
drwxr-xr-x   4 root root  4096 Aug 22 12:37 boot&lt;br /&gt;
drwx------   3 root root  4096 Aug 28 09:50 data&lt;br /&gt;
drwxr-xr-x  18 root root  3780 Aug 28 09:46 dev&lt;br /&gt;
[...]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Otras opciones útiles son:&lt;br /&gt;
&lt;br /&gt;
* -s : muestra el tamaño en bloques de cada archivo&lt;br /&gt;
&lt;br /&gt;
* -t : aporta el día y la hora de modificación&lt;br /&gt;
&lt;br /&gt;
* -R : lista también las subcarpetas &lt;br /&gt;
&lt;br /&gt;
* --color : muestra el contenido coloreado&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Los '''permisos''' se emplean en base a tres capacidades:&lt;br /&gt;
&lt;br /&gt;
* Lectura, que se codifica con '''r''' (read, en inglés).&lt;br /&gt;
* Escritura, que se codifica con '''w''' (write, en inglés).&lt;br /&gt;
* Ejecutación, que se codifica con '''x''' (execute, en inglés).&lt;br /&gt;
&lt;br /&gt;
La primera columna muestra los permisos que codifican:&lt;br /&gt;
&lt;br /&gt;
* Tipo de entrada: '''d''' indica ''directorio'' (''carpeta'').&lt;br /&gt;
* Permisos del propietario, primera terna de rwx&lt;br /&gt;
* Permisos del grupo, segunda terna de rwx&lt;br /&gt;
* Permisos para el resto del mundo, tercera terna de rwx.&lt;br /&gt;
&lt;br /&gt;
A continuación, aparecen el propietario y el grupo, seguidos de la fecha de última modificación y el nombre del fichero o carpeta.&lt;br /&gt;
&lt;br /&gt;
La ayuda ( help ) en ls solo funciona con ''' ls --help ''' no con ls -h&lt;br /&gt;
&lt;br /&gt;
== mkdir ==&lt;br /&gt;
&lt;br /&gt;
Crea un nuevo directorio.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ mkdir test&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Crea una carpeta test en el directorio actual.&lt;br /&gt;
&lt;br /&gt;
Comprobemos que se ha creado bien:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ ls&lt;br /&gt;
test&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Con la opción '''-p''', permite crear sucesivas carpetas anidadas de una sola vez, por ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ mkdir -p a/b/c&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Que crea la siguiente estructura de carpetas.&lt;br /&gt;
&lt;br /&gt;
 a&lt;br /&gt;
 └── b&lt;br /&gt;
     └── c&lt;br /&gt;
&lt;br /&gt;
== touch ==&lt;br /&gt;
&lt;br /&gt;
Crea un nuevo fichero vacío (sin contenido) con el nombre que especifiquemos.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ touch file.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Comprobamos que el fichero se ha creado correctamente.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ ls&lt;br /&gt;
file.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== cp ==&lt;br /&gt;
&lt;br /&gt;
Copia un fichero o directorio.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ cp file.txt file_copy.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para copia una carpeta y su contenido tenemos que usar la opción -r (recursivo).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ cp -r test test_copy&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Comprobamos el resultado con la orden '''ls'''.&lt;br /&gt;
&lt;br /&gt;
== mv ==&lt;br /&gt;
&lt;br /&gt;
Mueve fichero o carpeta.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mv file_copy.txt file2.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
También se emplea para renombrar.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mv test_copy test_copy2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== rm ==&lt;br /&gt;
&lt;br /&gt;
Borra un fichero o directorio&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rm file2.txt&lt;br /&gt;
rm -r test2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Comprobamos:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ejercicios:&lt;br /&gt;
&lt;br /&gt;
# Crear la siguiente estructura dentro del directorio /tmp (usar los comandos mkdir, touch y cp):&lt;br /&gt;
&lt;br /&gt;
 /tmp&lt;br /&gt;
 ├── carpeta1&lt;br /&gt;
 ├── carpeta2&lt;br /&gt;
 │   ├── fichero1.txt&lt;br /&gt;
 │   └── fichero2.md&lt;br /&gt;
 └── carpeta3&lt;br /&gt;
     ├── fichero1.txt&lt;br /&gt;
     └── fichero2.md&lt;br /&gt;
&lt;br /&gt;
# Basándonos en el ejercicio anterior, cambiar la estructura a la siguiente (usar comandos mv y rm):&lt;br /&gt;
&lt;br /&gt;
 /tmp&lt;br /&gt;
 └── carpeta&lt;br /&gt;
     ├── fichero1.txt&lt;br /&gt;
     └── fichero2.md&lt;br /&gt;
&lt;br /&gt;
= Paso 2: Impresión por pantalla y redirección de salida =&lt;br /&gt;
&lt;br /&gt;
== echo ==&lt;br /&gt;
&lt;br /&gt;
Sirve para imprimir una línea de texto por pantalla o imprimir variables de&lt;br /&gt;
entorno.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo &amp;quot;Hola&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Una variable de entorno es una variable editada con algún valor, por defecto&lt;br /&gt;
existen algunas creadas, como por ejemplo la variable HOME, que contiene el&lt;br /&gt;
directorio del usuario:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo $HOME&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aprovecharemos y crearemos una variable nosotros:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ME=&amp;quot;my name&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Comprobamos:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo $ME&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Redirección de salida ==&lt;br /&gt;
&lt;br /&gt;
&amp;gt; y &amp;gt;&amp;gt; sirve para redirigir una salida. Por ejemplo, utilizando el comando echo,&lt;br /&gt;
podemos enviar un texto dentro de un fichero:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo &amp;quot;Esto es una prueba&amp;quot; &amp;gt; file.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La diferencia entre &amp;gt; y &amp;gt;&amp;gt; es que &amp;gt; sobrescribe lo que haya en el fichero y&lt;br /&gt;
añade el contenido, y &amp;gt;&amp;gt; no sobrescribe, solo añade el nuevo contenido.&lt;br /&gt;
&lt;br /&gt;
Hagamos la prueba:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo &amp;quot;Esto es una prueba&amp;quot; &amp;gt; file.txt&lt;br /&gt;
echo &amp;quot;Esto es una prueba2&amp;quot; &amp;gt; file.txt&lt;br /&gt;
echo &amp;quot;Esto es una prueba&amp;quot; &amp;gt;&amp;gt; file2.txt&lt;br /&gt;
echo &amp;quot;Esto es una prueba2&amp;quot; &amp;gt;&amp;gt; file2.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En cualquier caso, si el fichero no existe, se crea.&lt;br /&gt;
&lt;br /&gt;
= Paso 3: Manejo de ficheros y carpetas avanzado =&lt;br /&gt;
&lt;br /&gt;
== cat ==&lt;br /&gt;
&lt;br /&gt;
Muestra el contenido de un fichero.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat file.txt&lt;br /&gt;
cat file2.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== grep ==&lt;br /&gt;
&lt;br /&gt;
Sirve para buscar coincidencia de un cierto patrón en ficheros y muestra la coincidencia, en caso de encontrarla, por pantalla.&lt;br /&gt;
&lt;br /&gt;
Por ejemplo, para buscar el patrón ''prueba'' en el fichero ''fichero.txt''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ grep -n prueba fichero.txt&lt;br /&gt;
1:Esto es una prueba&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La opción '''-n''' muestra el número de línea.&lt;br /&gt;
&lt;br /&gt;
== wc ==&lt;br /&gt;
&lt;br /&gt;
Sirve para contar el número de palabras, caracteres, líneas o bytes que contiene un fichero.&lt;br /&gt;
&lt;br /&gt;
Las opciones más utilizadas son:&lt;br /&gt;
&lt;br /&gt;
* -l: muestra el número de líneas que contiene el fichero.&lt;br /&gt;
* -w: muestra el número de palabras.&lt;br /&gt;
* -m: muestra el número de caracteres&lt;br /&gt;
* -c: muestra el número de bytes&lt;br /&gt;
&lt;br /&gt;
Probemos y contemos todo en el fichero file2.txt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
wc -l file2.txt&lt;br /&gt;
wc -w file2.txt&lt;br /&gt;
wc -m file2.txt&lt;br /&gt;
wc -c file2.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podemos contar más de un fichero a la vez:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
wc -l file.txt file2.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nos mostrará el conteo de cada fichero y el total.&lt;br /&gt;
&lt;br /&gt;
== Tubería (|) ==&lt;br /&gt;
&lt;br /&gt;
La tubería nos servirá para conectar varios comandos al mismo tiempo, veamos&lt;br /&gt;
unos ejemplos, que siempre se entiende mejor:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat file2.txt | grep prueba&lt;br /&gt;
grep -nr prueba file2.txt | wc -l&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En el primer ejemplo, mostramos el contenido de file2.txt, y esta salida se la&lt;br /&gt;
pasamos al comando grep, el cual busca las líneas que contengan prueba.&lt;br /&gt;
&lt;br /&gt;
En el segundo, buscamos todas las líneas que contengan la palabra prueba, y esta&lt;br /&gt;
salida se la pasamos al comando wc, el cual cuenta las líneas de la salida del&lt;br /&gt;
comando grep.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Redirecciones ==&lt;br /&gt;
&lt;br /&gt;
Vamos a ver unos conceptos antes de seguir:&lt;br /&gt;
&lt;br /&gt;
* Entrada estándar: representa los datos que necesita una aplicación para funcionar, como por ejemplo un archivo de datos o información ingresada desde la terminal y es representado en la terminal como el tipo 0.&lt;br /&gt;
* Salida estándar: es la vía que utilizan las aplicaciones para mostrarte información, allí podemos ver el progreso o simplemente los mensajes que la  aplicación quiera darte en determinado momento y es representado en la terminal como el tipo 1.&lt;br /&gt;
* Error estándar: es la forma en que los programas te informan sobre los problemas que pueden encontrarse al momento de la ejecución y es representado en la terminal como el tipo 2.&lt;br /&gt;
&lt;br /&gt;
Las redirecciones nos sirven para mover la información de un tipo a otro.&lt;br /&gt;
&lt;br /&gt;
Ya vimos previamente el uso de &amp;gt; y &amp;gt;&amp;gt;, y también el |, veamos algunas más:&lt;br /&gt;
&lt;br /&gt;
* comando &amp;lt; fichero: Toma la entrada de fichero&lt;br /&gt;
* comando 2&amp;gt; fichero: Envía la salida de error de comando a fichero&lt;br /&gt;
* comando 2&amp;gt;&amp;amp;1: Envía la salida de error a la salida estándar&lt;br /&gt;
* comando &amp;amp;&amp;gt; fichero: Envía la salida estándar y de error a fichero; equivale a comando &amp;gt; fichero 2&amp;gt;&amp;amp;1&lt;br /&gt;
&lt;br /&gt;
= Paso 4: Usuarios y grupos =&lt;br /&gt;
&lt;br /&gt;
== whoami ==&lt;br /&gt;
&lt;br /&gt;
Sirve para obtener el usuario actual.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
whoami&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Lo más seguro es que nos aparezca ubuntu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== who ==&lt;br /&gt;
&lt;br /&gt;
Es para saber quien está ahora mismo en la máquina conectado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
who&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Seguramente solo estemos nosotros:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ubuntu   pts/0        2019-08-28 13:51 (192.168.122.1)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== su y sudo ==&lt;br /&gt;
&lt;br /&gt;
su (substitute user): sirve para cambiar de usuario. Por ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
su root&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aquí nos pedirá la contraseña del usuario al que queramos cambiar.&lt;br /&gt;
&lt;br /&gt;
sudo (super user do): no todas las distribuciones lo integran, porque es menos&lt;br /&gt;
seguro que su, este comando nos permite ejecutar un comando siendo otro usuario,&lt;br /&gt;
por defecto, si no le damos usuario, lo hará con el usuario root. Si sudo nos&lt;br /&gt;
pide contraseña, nos pide la contraseña del usuario, ya que el usuario es que el&lt;br /&gt;
tiene permisos para usar sudo o no.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo ls -a /root&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Si tuviéramos por ejemplo un usuario 'practica' y quisíeramos ejecutar un&lt;br /&gt;
comando en su nombre:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo -u practica ls&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== adduser y useradd ==&lt;br /&gt;
&lt;br /&gt;
Ambos comandos sirven para crear un nuevo usuario, pero tienen sus diferencias.&lt;br /&gt;
&lt;br /&gt;
useradd es un comando del sistema, y adduser es un script escrito en perl que&lt;br /&gt;
utiliza el comando useradd. La diferencia así de primeras es que adduser nos&lt;br /&gt;
crear el directorio /home/usuario y useradd necesita la opción -m para hacer lo&lt;br /&gt;
mismo. Se puede utilizar el que se quiera, aunque es más recomendable useradd,&lt;br /&gt;
ya que funcionará igual en todas las distribuciones.&lt;br /&gt;
&lt;br /&gt;
Vamos a añadir un usuario practica con su directorio en /home (notemos que&lt;br /&gt;
necesitamos permisos de super usuario para realizar esta tarea):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo useradd -m practica&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vamos a comprobar que el directorio home está creado y que el usuario practica&lt;br /&gt;
funciona:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls /home  # veremos el directorio practica&lt;br /&gt;
sudo -u practica whoami  # nos dirá que somo el usuario practica&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== passwd ==&lt;br /&gt;
&lt;br /&gt;
Sirve para modificar la contraseña de un usuario, por ejemplo, vamos a modificar&lt;br /&gt;
la contraseña del usuario que hemos creado previamente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo passwd practica&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nos preguntará dos veces la contraseña, y ya la tendremos actualizadas. Vamos&lt;br /&gt;
ahora a probar ahora el comando su para cambiar de usuario:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
su practica&lt;br /&gt;
whoami&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Veremos que hemos cambiado de usuario, para cerrar este usuario, escribimos&lt;br /&gt;
'exit' o pulsamos 'CTLR + D'&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== deluser y userdel ==&lt;br /&gt;
&lt;br /&gt;
Ambos sirven para borrar un usuario, similar a adduser y useradd, userdel es el&lt;br /&gt;
comando y deluser el script.&lt;br /&gt;
&lt;br /&gt;
Vamos a borrar el usuario que hemos creado, incluyendo el borrado de su /home&lt;br /&gt;
(opción -r):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
userdel -r practica&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Comprobemos que ya no tenemos usuario ni /home:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls /home&lt;br /&gt;
sudo -u practica whoami&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== addgroup y groupadd ==&lt;br /&gt;
&lt;br /&gt;
Ambos sirven para crear un grupo. Los grupos sirven para agrupar a los usuarios&lt;br /&gt;
y que estos tengan unos mismos permisos. Por ejemplo, cuando instalamos algunas&lt;br /&gt;
herramientas como por ejemplo docker, este crea el grupo docker automáticamente&lt;br /&gt;
para que fácilmente podamos añadir a un usuario al grupo, y este tenga los&lt;br /&gt;
permisos para trabajar con dicha herramienta.&lt;br /&gt;
&lt;br /&gt;
Vamos a crear un nuevo grupo, vamos a llamarle invitado:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo groupadd invitado&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== usermod y groups ==&lt;br /&gt;
&lt;br /&gt;
usermod es utilizado para asignar un grupo a un usuario.&lt;br /&gt;
&lt;br /&gt;
groups es utilizado para ver los grupos a los que pertenece un usuario.&lt;br /&gt;
&lt;br /&gt;
Vamos a añadir a un usuario practica, lo vamos a añadir al grupo invitado y&lt;br /&gt;
veremos los grupos a los que pertenece:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo useradd -m practica&lt;br /&gt;
sudo usermod -G invitado practica&lt;br /&gt;
groups practica&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Veremos que el usuario práctica pertenece al grupo invitado.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== delgroup y groupdel ==&lt;br /&gt;
&lt;br /&gt;
Ambos sirven para eliminar un grupo. Vamos a eliminar el grupo que hemos creado&lt;br /&gt;
anteriormente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo groupdel invitado&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podemos observar ahora que el usuario practica no pertenece al grupo invitado:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
groups practica&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Paso 5: Permisos =&lt;br /&gt;
&lt;br /&gt;
== Nomenclatura rwx y numérica ==&lt;br /&gt;
&lt;br /&gt;
Si hacemos un ls -l, la primera cadena que nos aparece son los permisos del&lt;br /&gt;
fichero (-rwxrw-r--), podemos dividirlo en 4 elementos:&lt;br /&gt;
&lt;br /&gt;
-    (rwx)   (rw-)  (r--)&lt;br /&gt;
|      |       |      |&lt;br /&gt;
type  owner   group  others&lt;br /&gt;
&lt;br /&gt;
* type: el tipo de fichero, pudiendo ser d (directorio), l (enlace simbólico), - (fichero normal)&lt;br /&gt;
* owner: permisos de propietario&lt;br /&gt;
* group: permisos de grupo&lt;br /&gt;
* others: permisos para los demás usuarios&lt;br /&gt;
&lt;br /&gt;
Significado de los permisos:&lt;br /&gt;
&lt;br /&gt;
* r: permisos de lectura&lt;br /&gt;
* w: permisos de escritura&lt;br /&gt;
* x: permisos de ejecución&lt;br /&gt;
&lt;br /&gt;
Por último, existe un modo abreviado para estos permisos que se utiliza con&lt;br /&gt;
números.&lt;br /&gt;
&lt;br /&gt;
rwx&lt;br /&gt;
001 en binario es 1 en decimal. Permisos de ejecución&lt;br /&gt;
010 en binario es 2 en decimal. Permisos de escritura&lt;br /&gt;
100 en binario es 4 en decimal. Permisos de lectura&lt;br /&gt;
&lt;br /&gt;
La suma de los permisos, nos da el valor numérico. Veamos un ejemplo:&lt;br /&gt;
rwx rw- r--&lt;br /&gt;
111 110 100&lt;br /&gt;
 7   6   4&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== chmod ==&lt;br /&gt;
&lt;br /&gt;
Permite cambiar los permisos de acceso a un fichero o directorio. Podemos dar&lt;br /&gt;
permisos de dos formas diferentes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== modo carácter ===&lt;br /&gt;
&lt;br /&gt;
Veamos primero unos detalles:&lt;br /&gt;
&lt;br /&gt;
Clases de usuario:&lt;br /&gt;
&lt;br /&gt;
* owner (u)&lt;br /&gt;
* group (g)&lt;br /&gt;
* others (o)&lt;br /&gt;
* all (a)&lt;br /&gt;
&lt;br /&gt;
Modificador:&lt;br /&gt;
&lt;br /&gt;
* añadir (+)&lt;br /&gt;
* eliminar (-)&lt;br /&gt;
* sobrescribir (=)&lt;br /&gt;
&lt;br /&gt;
Para dar permisos tendríamos que seleccionar la clase de usuario el modificador&lt;br /&gt;
y los permisos, veamos un ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chmod u+x file  # añadimos permisos de ejecución al usuario&lt;br /&gt;
chmod go-w file  # quitamos permisos de escritura al grupo y a otros usuarios&lt;br /&gt;
chmod u=rwx,go=r file  # Al usuario le damos todos los permisos, y al grupo y otros solo le damos permisos de lectura&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Modo octal ===&lt;br /&gt;
&lt;br /&gt;
Con el modo octacl, es como si siempre utilizáramos el modificar sobrescribir,&lt;br /&gt;
pongamos algunos ejemplos:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chmod 744 file  # Al usuario le damos todos los permisos, y al grupo y otros solo le damos permisos de lectura&lt;br /&gt;
chmod 777 file  # Todos tienen permisos para todo&lt;br /&gt;
chmod 600 file  # solo el propietario tiene permisos de lectura y escritura&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Ejemplos ===&lt;br /&gt;
&lt;br /&gt;
Vamos a ver como funciona el tema de permisos con unos ejemplos. Vamos a crear&lt;br /&gt;
un fichero pruebas y le vamos a quitar los permisos de escritura a nuestro&lt;br /&gt;
usuario, y le vamos a dar permisos de escritura a otros:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
touch pruebas&lt;br /&gt;
ls -l pruebas  # de esta forma veremos que por defecto los permisos son rw-rw-r--&lt;br /&gt;
chmod u-w,o+w pruebas&lt;br /&gt;
ls -l pruebas  # ahora los permisos deberían ser -w-rw-rw-&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Una vez dado los permisos, veamos que con nuestro usuario podemos leer pero no&lt;br /&gt;
escribir:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat pruebas&lt;br /&gt;
echo &amp;quot;probando&amp;quot; &amp;gt; pruebas&lt;br /&gt;
exit&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Y ahora vamos a ver que el usuario pruebas, puede leer y escribir:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
su practica&lt;br /&gt;
cat pruebas&lt;br /&gt;
echo &amp;quot;probando&amp;quot; &amp;gt; pruebas&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== chown ==&lt;br /&gt;
&lt;br /&gt;
Permite cambiar el propietario de un fichero o directorio.&lt;br /&gt;
&lt;br /&gt;
Vamos por ejemplo a pasarle ahora el fichero pruebas al usuario practica:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo chown practica pruebas&lt;br /&gt;
ls -l pruebas&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Veremos que el usuario actual ahora es pruebas, aunque vemos que el ls muestra&lt;br /&gt;
lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
-r--rw-rw- 1 practica ubuntu 9 Aug 29 09:34 pruebas&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hay que comentar un detalle, y es que los ficheros y directorios tienen asignado&lt;br /&gt;
un usuario y un grupo, por defecto se utiliza el mismo usuario como grupo&lt;br /&gt;
cuando creamos un nuevo fichero o directorio. Si queremos que cuando cambiemos&lt;br /&gt;
el propietario, cambiar tambien el grupo del fichero, podemos hacerlo de la&lt;br /&gt;
siguiente forma:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo chown practica:practica pruebas&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Una vez hecho esto, vamos ahora a probar que los permisos siguen funcionando&lt;br /&gt;
como antes, ahora con el usuario ubuntu, deberíamos de poder leer y escribir en&lt;br /&gt;
el fichero pruebas, y con el usuario practica, solo leer, esto es así por que&lt;br /&gt;
ahora el propitario es practica:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Pruebas usuario ubuntu&lt;br /&gt;
cat pruebas&lt;br /&gt;
echo test &amp;gt;&amp;gt; pruebas&lt;br /&gt;
# Pruebas usuario practica&lt;br /&gt;
su practica&lt;br /&gt;
cat pruebas&lt;br /&gt;
echo &amp;quot;probando&amp;quot; &amp;gt; pruebas&lt;br /&gt;
exit&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Paso 6: Procesos =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== ps ==&lt;br /&gt;
&lt;br /&gt;
Sirve para ver que procesos están ejecutándose en el sistema, veamos un ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ps aux  # con la opción aux mostraremos todos los procesos del sistema&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cada línea es un proceso, y cada proceso muestra su PID, usuario, cantidad de&lt;br /&gt;
memoria y cpu utilizada, comando y otros detalles.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
man kill &amp;amp;  # añadir el &amp;amp; al final de un comando hace que este se ejecute en segundo plano, por lo que se quedará abierto&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La salida de este comando nos mostrará el PID que tiene ese proceso que acabamos&lt;br /&gt;
de ejecutar, vamos a comprobarlo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ps aux | grep &amp;quot;man kill&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Veremos que el PID coincide.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== kill ==&lt;br /&gt;
&lt;br /&gt;
Este comando nos servirá para matar un proceso. kill se utiliza seguido de una&lt;br /&gt;
señal para enviar al proceso seguido de uno o varios PID. para ver las señales&lt;br /&gt;
disponibles, podemos listarlas:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kill -l&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Las más utilizadas suele ser SIGTERM y SIGKILL, la primera intenta terminar el&lt;br /&gt;
proceso de forma poco abrupta, y la segunda suele utilizarse cuando el proceso&lt;br /&gt;
no atiende a esta primera señal. Vamos ahora a terminar el proceso que creamos&lt;br /&gt;
antes, si no recordamos el PID, busquémoslo de nuevo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ps aux | grep &amp;quot;man kill&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enviamos señal para terminar el proceso y comprobamos que ha terminado:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kill -SIGTERM 8470&lt;br /&gt;
ps aux | grep &amp;quot;man kill&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
También podemos notar que en el listado de señales, hay unos números, podemos&lt;br /&gt;
utilizar esos números en vez de las palabras, por ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
man kill &amp;amp;&lt;br /&gt;
kill -15 PID_COMANDO_PREVIO&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Comprobamos que el proceso ha terminado correctamente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ps aux | grep &amp;quot;man kill&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Paso 7: Estado CPU, RAM y Disco =&lt;br /&gt;
&lt;br /&gt;
== top ==&lt;br /&gt;
&lt;br /&gt;
Este comando nos servirá para ver el listado de procesos y el estado de la CPU y&lt;br /&gt;
memoria.&lt;br /&gt;
&lt;br /&gt;
Probemos el comando y observemos detalladamente la salida:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
top&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para salir, pulsamos q.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== df y du ==&lt;br /&gt;
&lt;br /&gt;
df (disk free) y du (disk usage). Ambas son utilidades para mostrar el uso de&lt;br /&gt;
los discos.&lt;br /&gt;
&lt;br /&gt;
Con df mostraremos la información del espacio en cada dispositivo montado:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
df&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Estos comandos que nos muestran el tamaño de los ficheros, casi siempre tienen&lt;br /&gt;
una opción para mostrarlo en un formato más legible (-h)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
df -h&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mucho mejor.&lt;br /&gt;
&lt;br /&gt;
Ahora veamos el comando du, el cual nos mostrará el tamaño de un fichero o&lt;br /&gt;
directorio y sus subdirectorios, no olvidemos el -h:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
du -h /home/ubuntu&lt;br /&gt;
du -h /home/ubuntu/pruebas&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Si solo quisíeramos saber el total de una carpeta y nos nos interesan sus&lt;br /&gt;
subcarpetas, podemos utilizar la opción -s:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
du -sh /home/ubuntu&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== free ==&lt;br /&gt;
&lt;br /&gt;
Sirve para ver el estado de la memoria, como siempre, opción -h:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
free -h&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== lsblk ==&lt;br /&gt;
&lt;br /&gt;
Nos muestra la información de todos los dispositivos de bloques (discos duros,&lt;br /&gt;
pendrivers, CD_ROM, SSD, ...).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lsblk&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En la siguiente práctica se utilizará más a fondo este comando, ya que&lt;br /&gt;
trabajaremos con dispositivos.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Paso 8: Gestión de paquetes de software y repositorios =&lt;br /&gt;
&lt;br /&gt;
Los sistemas Linux incluyen, además de las herramientas básicas del sistema operativo, repositorios de software que puede ser opcionalmente instalados por el administrador del sistema. Los fabricantes de las distribuciones de Linux incluyen paquetes de software listos para ser instalados que se integran con el sistema.&lt;br /&gt;
&lt;br /&gt;
Un paquete incluye el software necesario para que una cierta aplicación funcione correctamente, así como sus paquetes de dependencia.&lt;br /&gt;
&lt;br /&gt;
En Ubuntu, la herramienta de gestión de paquetes de software y repositorios se llama '''apt'''.&lt;br /&gt;
&lt;br /&gt;
=== Listado de repositorios de paquetes de software ===&lt;br /&gt;
&lt;br /&gt;
En Ubuntu el listado de repositorios se encuentra en el fichero /etc/apt/sources.list. Podemos comprobar que repositorios tenemos añadido:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat /etc/apt/sources.list&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Actualización del listado de paquetes de software ===&lt;br /&gt;
&lt;br /&gt;
Para actualizar el listado de paquetes utilizaremos el comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt update&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Instalación un nuevo paquete ===&lt;br /&gt;
&lt;br /&gt;
Para instalar un nuevo paquete, utilizaremos la orden install, por ejemplo, vamos a instalar tree, similar al ls pero muestra el arbol de directorios:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt install tree&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Desinstalación de un paquete ===&lt;br /&gt;
&lt;br /&gt;
Usaremos la orden purge o la orden remove, purge nos lo eliminad todo, y remove mantiene la configuración en el caso de que el paquete la tuviese. Vamos a eliminar el paquete instalado previamente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt purge tree&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Paso 9: Módulos =&lt;br /&gt;
&lt;br /&gt;
Los módulos del kernel de Linux son partes que podemos añadir o quitar de forma&lt;br /&gt;
sencilla con el fin de añadir o quitar funcionalidad. Por ejemplo, algunas de&lt;br /&gt;
estas funcionalidades son:&lt;br /&gt;
&lt;br /&gt;
* Registrar temperaturas de nuestros componentes&lt;br /&gt;
* Hacer funcionr la tarjeta de red wifi&lt;br /&gt;
* Cargar los drivers de una tarjeta gráfica&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== lsmod ==&lt;br /&gt;
&lt;br /&gt;
Comando para ver los módulos que estamos usando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lsmod&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== lspci y usb-devices ==&lt;br /&gt;
&lt;br /&gt;
Estos comandos nos servirán para ver el hardware que está conectado a nuestro&lt;br /&gt;
ordenador. Con lspci veremos el listado del hardware integrado y con usb-devices&lt;br /&gt;
el que está conectado por hardware.&lt;br /&gt;
&lt;br /&gt;
Normalmente, como los módulos se utilizan para dar funcionalidad un hardware,&lt;br /&gt;
aquí en los listado de hardware podremos ver que módulo está utilizando cada&lt;br /&gt;
hardware:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lspci -v&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Veremos una línea en algunos dispositivos que nos diga que módulo estamos&lt;br /&gt;
usando, pongo un pequeño trozo de la salida del comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
00:1f.2 SATA controller: Intel Corporation 82801IR/IO/IH (ICH9R/DO/DH) 6 port SATA Controller [AHCI mode] (rev 02) (prog-if 01 [AHCI 1.0])&lt;br /&gt;
    Subsystem: Red Hat, Inc. QEMU Virtual Machine&lt;br /&gt;
    Flags: bus master, fast devsel, latency 0, IRQ 35&lt;br /&gt;
    I/O ports at c0c0 [size=32]&lt;br /&gt;
    Memory at fcc1d000 (32-bit, non-prefetchable) [size=4K]&lt;br /&gt;
    Capabilities: &amp;lt;access denied&amp;gt;&lt;br /&gt;
    Kernel driver in use: ahci&lt;br /&gt;
    Kernel modules: ahci&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vemos que el hardware INTEl Corporation está utilizando el módulo ahci.&lt;br /&gt;
&lt;br /&gt;
Probemos ahora con usb-devices:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
usb-devices&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Veamos un trozo de código:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
T:  Bus=01 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#=  2 Spd=480 MxCh= 0&lt;br /&gt;
D:  Ver= 2.00 Cls=00(&amp;gt;ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs=  1&lt;br /&gt;
P:  Vendor=0627 ProdID=0001 Rev=00.00&lt;br /&gt;
S:  Manufacturer=QEMU&lt;br /&gt;
S:  Product=QEMU USB Tablet&lt;br /&gt;
S:  SerialNumber=42&lt;br /&gt;
C:  #Ifs= 1 Cfg#= 1 Atr=a0 MxPwr=100mA&lt;br /&gt;
I:  If#= 0 Alt= 0 #EPs= 1 Cls=03(HID  ) Sub=00 Prot=00 Driver=usbhid&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vemos que el teclado está utilizando el módulo usbhid&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== insmod ==&lt;br /&gt;
&lt;br /&gt;
Sirve para cargar un módulo en el kernel, imaginemos que tenemos un módulo que&lt;br /&gt;
se llama modulo1:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo insmod modulo1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== rmmod ==&lt;br /&gt;
&lt;br /&gt;
Sirve para eliminar un módulo de kernel. Imaginemos que queremos borrar un&lt;br /&gt;
módulo cargado anteriormente con el nombre modulo1:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo rmmod modulo1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Marramfer12</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Administraci%C3%B3n_b%C3%A1sica&amp;diff=4549</id>
		<title>Administración básica</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Administraci%C3%B3n_b%C3%A1sica&amp;diff=4549"/>
				<updated>2019-11-13T10:29:41Z</updated>
		
		<summary type="html">&lt;p&gt;Marramfer12: /* ls */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Para realizar esta práctica utilizaremos una de las máquinas virtuales que generamos en la práctica anterior.&lt;br /&gt;
&lt;br /&gt;
En esta práctica aprenderemos a utilizar el interprete de ordenes (también conocido como ''[https://www.traficantes.net/sites/default/files/pdfs/En%20el%20principio%20fue...-TdS.pdf línea de comandos]'') y a aprender nociones básicas de administración de sistemas Linux.&lt;br /&gt;
&lt;br /&gt;
= Paso 0: Breve introducción al sistema Linux =&lt;br /&gt;
&lt;br /&gt;
== Estructura básica del sistema de archivos ==&lt;br /&gt;
&lt;br /&gt;
En un sistema Linux, todas las carpetas y ficheros en el sistema de fichero pende de la carpeta raíz que se representa con la /.&lt;br /&gt;
&lt;br /&gt;
 /&lt;br /&gt;
 ├── bin&lt;br /&gt;
 ├── usr&lt;br /&gt;
 │   ├── local&lt;br /&gt;
 │   ├── bin&lt;br /&gt;
 │   └── ...&lt;br /&gt;
 ├── dev&lt;br /&gt;
 │   ├── sda&lt;br /&gt;
 │   ├── sda1&lt;br /&gt;
 │   └── ...&lt;br /&gt;
 ├── home&lt;br /&gt;
 │   ├── practica&lt;br /&gt;
 │   │   ├── tema1.pdf&lt;br /&gt;
 │   │   ├── boletin1.pdf&lt;br /&gt;
 │   │   └── ...&lt;br /&gt;
 │   ├── profesor&lt;br /&gt;
 │   └── ...&lt;br /&gt;
 └── etc&lt;br /&gt;
     ├── firefox&lt;br /&gt;
     ├── libvirt&lt;br /&gt;
     ├── ...&lt;br /&gt;
     └── ...&lt;br /&gt;
&lt;br /&gt;
Como puedes observar, el sistema de fichero emplea una estructura de árbol.&lt;br /&gt;
&lt;br /&gt;
== Nociones básicas ==&lt;br /&gt;
&lt;br /&gt;
·Aplicaciones con nombres compuestos: usar guion entre palabras&lt;br /&gt;
&lt;br /&gt;
·Nombres con espacios en blanco: Escribir entre comillas dobles&lt;br /&gt;
&lt;br /&gt;
·Espacios en blanco para separar ordenes (ej: instalar varios paquetes )&lt;br /&gt;
&lt;br /&gt;
·Formato general de una orden: comando [-opciones] [argumentos]&lt;br /&gt;
&lt;br /&gt;
·'''IMPORTANTE''': Diferencia entre mayúsculas y minúsculas&lt;br /&gt;
&lt;br /&gt;
== Carpetas . y .. ==&lt;br /&gt;
&lt;br /&gt;
Toda carpeta en un sistema Linux dispone de dos pseudocarpetas, la '''.''' y la '''..'':&lt;br /&gt;
&lt;br /&gt;
* La pseudocarpeta '''..''' hace referencia a la carpeta padre que contiene a esta carpeta.&lt;br /&gt;
* La pseudocarpeta '''.''' hace referencia a la carpeta actual, es por tanto una autoreferencia.&lt;br /&gt;
&lt;br /&gt;
En el caso de la carpeta raíz, la pseudocarpeta '''.''' y '''..''' hacen referencia a la propia carpeta raíz, se trata, por tanto de una excepción.&lt;br /&gt;
&lt;br /&gt;
== Directorio de trabajo actual y la orden cd ==&lt;br /&gt;
&lt;br /&gt;
Cada interprete de ordenes dispone de una ''carpeta de trabajo actual'' ('''c'''urrent '''w''orking '''d''irectory, en inglés). La carpeta de trabajo actual se puede modificar con la orden '''cd''' ('''c'''hange '''d'''irectory, en inglés).&lt;br /&gt;
&lt;br /&gt;
Por ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ cd ..&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nos situaría en la carpeta padre, empleando una ruta relativa.&lt;br /&gt;
&lt;br /&gt;
Si volvemos a escribir desde /home &amp;quot; cd .. &amp;quot; nos lleva a '''/$''' &lt;br /&gt;
&lt;br /&gt;
Para situarnos en el raíz, podemos emplear una ruta absoluta:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ cd /&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En caso de que queramos volver a la carpeta de usuario, bastaría con invocar a '''cd''' sin más o ''' cd ~ '''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ cd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''MUY IMPORTANTE''': No es lo mismo cd.. que ''' cd .. ''', es necesario el espacio después del cd.&lt;br /&gt;
&lt;br /&gt;
== Rutas absolutas, rutas relativas ==&lt;br /&gt;
&lt;br /&gt;
Para hacer referencia a un fichero o una carpeta se usan ruta absolutas o rutas relativas.&lt;br /&gt;
&lt;br /&gt;
Las rutas absolutas siempre empieza por /, de manera que toman como punto de referencia la carpeta raíz (/). Por ejemplo, una ruta absoluta a la carpeta '''prueba''' que está almacenada en la carpeta del usuario '''ubuntu''' es '/home/ubuntu/prueba/'.&lt;br /&gt;
&lt;br /&gt;
Las ruta relativa toma como referencia la carpeta de trabajo actual. Para averiguar la carpeta de trabajo actual disponemos de la orden '''pwd'''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ pwd&lt;br /&gt;
/home/ubuntu&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En base a la carpeta de trabajo actual, empleando la pseudocarpeta '''..''', se puede construir rutas relativas. Por ejemplo, para referenciar un fichero '''fichero.txt''' en la carpeta temporal, podemos emplear la ruta relativa '''../../tmp/fichero.txt'''.&lt;br /&gt;
&lt;br /&gt;
Aunque probablemente sea más cómodo emplear una ruta absoluta en este caso, que sería '''/tmp/fichero.txt'''.&lt;br /&gt;
&lt;br /&gt;
== Intérprete de órdenes ==&lt;br /&gt;
&lt;br /&gt;
El intérprete de órdenes es un lanzador de aplicaciones textual que emplea el teclado como dispositivo de entrada de datos. Mediante el teclado, se escribe el nombre del programa que se quiere lanzar y al pulsa la tecla ''intro'' el intérprete de ordenes ejecutara dicho programa. Por defecto, el intérprete de ordenes que emplea Ubuntu por defecto es '''bash'''.&lt;br /&gt;
&lt;br /&gt;
== man: ver la página de manual de una orden ==&lt;br /&gt;
&lt;br /&gt;
La orden '''man''' te será útil para ver las páginas de manual.&lt;br /&gt;
&lt;br /&gt;
Su estructura básica es:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
man &amp;lt;comando&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aunque también se utiliza con la opción ''' -a ''' de All, que también muestra las entradas comenzadas por '''.''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
man -a &amp;lt;comando&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Este programa toma como entrada el nombre de la orden de la que quieres consultar su página de manual, por ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
man ls&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nos da información del manual de la orden '''ls'''.&lt;br /&gt;
&lt;br /&gt;
Para salir de la página de manual, pulsa la tecla '''q''' (la primera letra de la palabra '''quit''', en inglés).&lt;br /&gt;
&lt;br /&gt;
quit = salir&lt;br /&gt;
&lt;br /&gt;
Normalmente, los programas ofrecen opciones de ayuda, como '''--help'''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
man --help&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
También se puede emplear la versión compacta a la hora de especificar opciones.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
man -h&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En general, todas las ordenes suelen ofrecer una opción de ayuda.&lt;br /&gt;
&lt;br /&gt;
= Paso 1: Operaciones básicas con el sistema de ficheros =&lt;br /&gt;
&lt;br /&gt;
== ls ==&lt;br /&gt;
&lt;br /&gt;
Lista los ficheros y carpetas. Si no se especifica nada, muestra los ficheros y carpetas que contiene la carpeta de trabajo actual.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Si se especifica una ruta, muestra las carpetas y ficheros contenidos en dicha ruta, por ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ ls /&lt;br /&gt;
bin  boot  data  dev  etc  home  initrd.img  initrd.img.old  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  snap  srv  sys  tmp  usr  var  vmlinuz  vmlinuz.old&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al emplear '''/''' como ruta absoluta, muestra el contenido de la carpeta raíz.&lt;br /&gt;
&lt;br /&gt;
Las opciones más usadas de este programa suelen ser:&lt;br /&gt;
&lt;br /&gt;
* -a: muestra los ficheros y carpetas ''ocultos''. En Linux, cualquier fichero o carpeta cuyo nombre empiece por . se considera ''oculto''. Esto incluye también en el listado las pseudocarpetas . y ..&lt;br /&gt;
&lt;br /&gt;
* -l: se muestra en lista y aporta datos como la fecha de última modificación, propietario, grupo, tamaño en bytes y nombre:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ ls -a&lt;br /&gt;
.  ..  .bash_history  .bash_logout  .bashrc  .profile  .ssh&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ambas opciones se puede combinar:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ ls -la /&lt;br /&gt;
total 92&lt;br /&gt;
drwxr-xr-x  24 root root  4096 Aug 28 09:50 .&lt;br /&gt;
drwxr-xr-x  24 root root  4096 Aug 28 09:50 ..&lt;br /&gt;
drwxr-xr-x   2 root root  4096 Aug 22 12:37 bin&lt;br /&gt;
drwxr-xr-x   4 root root  4096 Aug 22 12:37 boot&lt;br /&gt;
drwx------   3 root root  4096 Aug 28 09:50 data&lt;br /&gt;
drwxr-xr-x  18 root root  3780 Aug 28 09:46 dev&lt;br /&gt;
[...]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Otras opciones útiles son:&lt;br /&gt;
&lt;br /&gt;
* -s : muestra el tamaño en bloques de cada archivo&lt;br /&gt;
&lt;br /&gt;
* -t : aporta el día y la hora de modificación&lt;br /&gt;
&lt;br /&gt;
* -R : lista también las subcarpetas &lt;br /&gt;
&lt;br /&gt;
* --color : muestra el contenido coloreado&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Los '''permisos''' se emplean en base a tres capacidades:&lt;br /&gt;
&lt;br /&gt;
* Lectura, que se codifica con '''r''' (read, en inglés).&lt;br /&gt;
* Escritura, que se codifica con '''w''' (write, en inglés).&lt;br /&gt;
* Ejecutación, que se codifica con '''x''' (execute, en inglés).&lt;br /&gt;
&lt;br /&gt;
La primera columna muestra los permisos que codifican:&lt;br /&gt;
&lt;br /&gt;
* Tipo de entrada: '''d''' indica ''directorio'' (''carpeta'').&lt;br /&gt;
* Permisos del propietario, primera terna de rwx&lt;br /&gt;
* Permisos del grupo, segunda terna de rwx&lt;br /&gt;
* Permisos para el resto del mundo, tercera terna de rwx.&lt;br /&gt;
&lt;br /&gt;
A continuación, aparecen el propietario y el grupo, seguidos de la fecha de última modificación y el nombre del fichero o carpeta.&lt;br /&gt;
&lt;br /&gt;
La ayuda ( help ) en ls solo funciona con ''' ls help ''' no con ls -h&lt;br /&gt;
&lt;br /&gt;
== mkdir ==&lt;br /&gt;
&lt;br /&gt;
Crea un nuevo directorio.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ mkdir test&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Crea una carpeta test en el directorio actual.&lt;br /&gt;
&lt;br /&gt;
Comprobemos que se ha creado bien:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ ls&lt;br /&gt;
test&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Con la opción '''-p''', permite crear sucesivas carpetas anidadas de una sola vez, por ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ mkdir -p a/b/c&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Que crea la siguiente estructura de carpetas.&lt;br /&gt;
&lt;br /&gt;
 a&lt;br /&gt;
 └── b&lt;br /&gt;
     └── c&lt;br /&gt;
&lt;br /&gt;
== touch ==&lt;br /&gt;
&lt;br /&gt;
Crea un nuevo fichero vacío (sin contenido) con el nombre que especifiquemos.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ touch file.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Comprobamos que el fichero se ha creado correctamente.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ ls&lt;br /&gt;
file.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== cp ==&lt;br /&gt;
&lt;br /&gt;
Copia un fichero o directorio.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ cp file.txt file_copy.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para copia una carpeta y su contenido tenemos que usar la opción -r (recursivo).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ cp -r test test_copy&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Comprobamos el resultado con la orden '''ls'''.&lt;br /&gt;
&lt;br /&gt;
== mv ==&lt;br /&gt;
&lt;br /&gt;
Mueve fichero o carpeta.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mv file_copy.txt file2.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
También se emplea para renombrar.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mv test_copy test_copy2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== rm ==&lt;br /&gt;
&lt;br /&gt;
Borra un fichero o directorio&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rm file2.txt&lt;br /&gt;
rm -r test2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Comprobamos:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ejercicios:&lt;br /&gt;
&lt;br /&gt;
# Crear la siguiente estructura dentro del directorio /tmp (usar los comandos mkdir, touch y cp):&lt;br /&gt;
&lt;br /&gt;
 /tmp&lt;br /&gt;
 ├── carpeta1&lt;br /&gt;
 ├── carpeta2&lt;br /&gt;
 │   ├── fichero1.txt&lt;br /&gt;
 │   └── fichero2.md&lt;br /&gt;
 └── carpeta3&lt;br /&gt;
     ├── fichero1.txt&lt;br /&gt;
     └── fichero2.md&lt;br /&gt;
&lt;br /&gt;
# Basándonos en el ejercicio anterior, cambiar la estructura a la siguiente (usar comandos mv y rm):&lt;br /&gt;
&lt;br /&gt;
 /tmp&lt;br /&gt;
 └── carpeta&lt;br /&gt;
     ├── fichero1.txt&lt;br /&gt;
     └── fichero2.md&lt;br /&gt;
&lt;br /&gt;
= Paso 2: Impresión por pantalla y redirección de salida =&lt;br /&gt;
&lt;br /&gt;
== echo ==&lt;br /&gt;
&lt;br /&gt;
Sirve para imprimir una línea de texto por pantalla o imprimir variables de&lt;br /&gt;
entorno.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo &amp;quot;Hola&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Una variable de entorno es una variable editada con algún valor, por defecto&lt;br /&gt;
existen algunas creadas, como por ejemplo la variable HOME, que contiene el&lt;br /&gt;
directorio del usuario:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo $HOME&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aprovecharemos y crearemos una variable nosotros:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ME=&amp;quot;my name&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Comprobamos:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo $ME&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Redirección de salida ==&lt;br /&gt;
&lt;br /&gt;
&amp;gt; y &amp;gt;&amp;gt; sirve para redirigir una salida. Por ejemplo, utilizando el comando echo,&lt;br /&gt;
podemos enviar un texto dentro de un fichero:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo &amp;quot;Esto es una prueba&amp;quot; &amp;gt; file.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La diferencia entre &amp;gt; y &amp;gt;&amp;gt; es que &amp;gt; sobrescribe lo que haya en el fichero y&lt;br /&gt;
añade el contenido, y &amp;gt;&amp;gt; no sobrescribe, solo añade el nuevo contenido.&lt;br /&gt;
&lt;br /&gt;
Hagamos la prueba:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo &amp;quot;Esto es una prueba&amp;quot; &amp;gt; file.txt&lt;br /&gt;
echo &amp;quot;Esto es una prueba2&amp;quot; &amp;gt; file.txt&lt;br /&gt;
echo &amp;quot;Esto es una prueba&amp;quot; &amp;gt;&amp;gt; file2.txt&lt;br /&gt;
echo &amp;quot;Esto es una prueba2&amp;quot; &amp;gt;&amp;gt; file2.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En cualquier caso, si el fichero no existe, se crea.&lt;br /&gt;
&lt;br /&gt;
= Paso 3: Manejo de ficheros y carpetas avanzado =&lt;br /&gt;
&lt;br /&gt;
== cat ==&lt;br /&gt;
&lt;br /&gt;
Muestra el contenido de un fichero.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat file.txt&lt;br /&gt;
cat file2.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== grep ==&lt;br /&gt;
&lt;br /&gt;
Sirve para buscar coincidencia de un cierto patrón en ficheros y muestra la coincidencia, en caso de encontrarla, por pantalla.&lt;br /&gt;
&lt;br /&gt;
Por ejemplo, para buscar el patrón ''prueba'' en el fichero ''fichero.txt''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ grep -n prueba fichero.txt&lt;br /&gt;
1:Esto es una prueba&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La opción '''-n''' muestra el número de línea.&lt;br /&gt;
&lt;br /&gt;
== wc ==&lt;br /&gt;
&lt;br /&gt;
Sirve para contar el número de palabras, caracteres, líneas o bytes que contiene un fichero.&lt;br /&gt;
&lt;br /&gt;
Las opciones más utilizadas son:&lt;br /&gt;
&lt;br /&gt;
* -l: muestra el número de líneas que contiene el fichero.&lt;br /&gt;
* -w: muestra el número de palabras.&lt;br /&gt;
* -m: muestra el número de caracteres&lt;br /&gt;
* -c: muestra el número de bytes&lt;br /&gt;
&lt;br /&gt;
Probemos y contemos todo en el fichero file2.txt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
wc -l file2.txt&lt;br /&gt;
wc -w file2.txt&lt;br /&gt;
wc -m file2.txt&lt;br /&gt;
wc -c file2.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podemos contar más de un fichero a la vez:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
wc -l file.txt file2.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nos mostrará el conteo de cada fichero y el total.&lt;br /&gt;
&lt;br /&gt;
== Tubería (|) ==&lt;br /&gt;
&lt;br /&gt;
La tubería nos servirá para conectar varios comandos al mismo tiempo, veamos&lt;br /&gt;
unos ejemplos, que siempre se entiende mejor:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat file2.txt | grep prueba&lt;br /&gt;
grep -nr prueba file2.txt | wc -l&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En el primer ejemplo, mostramos el contenido de file2.txt, y esta salida se la&lt;br /&gt;
pasamos al comando grep, el cual busca las líneas que contengan prueba.&lt;br /&gt;
&lt;br /&gt;
En el segundo, buscamos todas las líneas que contengan la palabra prueba, y esta&lt;br /&gt;
salida se la pasamos al comando wc, el cual cuenta las líneas de la salida del&lt;br /&gt;
comando grep.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Redirecciones ==&lt;br /&gt;
&lt;br /&gt;
Vamos a ver unos conceptos antes de seguir:&lt;br /&gt;
&lt;br /&gt;
* Entrada estándar: representa los datos que necesita una aplicación para funcionar, como por ejemplo un archivo de datos o información ingresada desde la terminal y es representado en la terminal como el tipo 0.&lt;br /&gt;
* Salida estándar: es la vía que utilizan las aplicaciones para mostrarte información, allí podemos ver el progreso o simplemente los mensajes que la  aplicación quiera darte en determinado momento y es representado en la terminal como el tipo 1.&lt;br /&gt;
* Error estándar: es la forma en que los programas te informan sobre los problemas que pueden encontrarse al momento de la ejecución y es representado en la terminal como el tipo 2.&lt;br /&gt;
&lt;br /&gt;
Las redirecciones nos sirven para mover la información de un tipo a otro.&lt;br /&gt;
&lt;br /&gt;
Ya vimos previamente el uso de &amp;gt; y &amp;gt;&amp;gt;, y también el |, veamos algunas más:&lt;br /&gt;
&lt;br /&gt;
* comando &amp;lt; fichero: Toma la entrada de fichero&lt;br /&gt;
* comando 2&amp;gt; fichero: Envía la salida de error de comando a fichero&lt;br /&gt;
* comando 2&amp;gt;&amp;amp;1: Envía la salida de error a la salida estándar&lt;br /&gt;
* comando &amp;amp;&amp;gt; fichero: Envía la salida estándar y de error a fichero; equivale a comando &amp;gt; fichero 2&amp;gt;&amp;amp;1&lt;br /&gt;
&lt;br /&gt;
= Paso 4: Usuarios y grupos =&lt;br /&gt;
&lt;br /&gt;
== whoami ==&lt;br /&gt;
&lt;br /&gt;
Sirve para obtener el usuario actual.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
whoami&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Lo más seguro es que nos aparezca ubuntu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== who ==&lt;br /&gt;
&lt;br /&gt;
Es para saber quien está ahora mismo en la máquina conectado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
who&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Seguramente solo estemos nosotros:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ubuntu   pts/0        2019-08-28 13:51 (192.168.122.1)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== su y sudo ==&lt;br /&gt;
&lt;br /&gt;
su (substitute user): sirve para cambiar de usuario. Por ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
su root&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aquí nos pedirá la contraseña del usuario al que queramos cambiar.&lt;br /&gt;
&lt;br /&gt;
sudo (super user do): no todas las distribuciones lo integran, porque es menos&lt;br /&gt;
seguro que su, este comando nos permite ejecutar un comando siendo otro usuario,&lt;br /&gt;
por defecto, si no le damos usuario, lo hará con el usuario root. Si sudo nos&lt;br /&gt;
pide contraseña, nos pide la contraseña del usuario, ya que el usuario es que el&lt;br /&gt;
tiene permisos para usar sudo o no.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo ls -a /root&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Si tuviéramos por ejemplo un usuario 'practica' y quisíeramos ejecutar un&lt;br /&gt;
comando en su nombre:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo -u practica ls&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== adduser y useradd ==&lt;br /&gt;
&lt;br /&gt;
Ambos comandos sirven para crear un nuevo usuario, pero tienen sus diferencias.&lt;br /&gt;
&lt;br /&gt;
useradd es un comando del sistema, y adduser es un script escrito en perl que&lt;br /&gt;
utiliza el comando useradd. La diferencia así de primeras es que adduser nos&lt;br /&gt;
crear el directorio /home/usuario y useradd necesita la opción -m para hacer lo&lt;br /&gt;
mismo. Se puede utilizar el que se quiera, aunque es más recomendable useradd,&lt;br /&gt;
ya que funcionará igual en todas las distribuciones.&lt;br /&gt;
&lt;br /&gt;
Vamos a añadir un usuario practica con su directorio en /home (notemos que&lt;br /&gt;
necesitamos permisos de super usuario para realizar esta tarea):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo useradd -m practica&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vamos a comprobar que el directorio home está creado y que el usuario practica&lt;br /&gt;
funciona:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls /home  # veremos el directorio practica&lt;br /&gt;
sudo -u practica whoami  # nos dirá que somo el usuario practica&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== passwd ==&lt;br /&gt;
&lt;br /&gt;
Sirve para modificar la contraseña de un usuario, por ejemplo, vamos a modificar&lt;br /&gt;
la contraseña del usuario que hemos creado previamente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo passwd practica&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nos preguntará dos veces la contraseña, y ya la tendremos actualizadas. Vamos&lt;br /&gt;
ahora a probar ahora el comando su para cambiar de usuario:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
su practica&lt;br /&gt;
whoami&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Veremos que hemos cambiado de usuario, para cerrar este usuario, escribimos&lt;br /&gt;
'exit' o pulsamos 'CTLR + D'&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== deluser y userdel ==&lt;br /&gt;
&lt;br /&gt;
Ambos sirven para borrar un usuario, similar a adduser y useradd, userdel es el&lt;br /&gt;
comando y deluser el script.&lt;br /&gt;
&lt;br /&gt;
Vamos a borrar el usuario que hemos creado, incluyendo el borrado de su /home&lt;br /&gt;
(opción -r):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
userdel -r practica&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Comprobemos que ya no tenemos usuario ni /home:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls /home&lt;br /&gt;
sudo -u practica whoami&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== addgroup y groupadd ==&lt;br /&gt;
&lt;br /&gt;
Ambos sirven para crear un grupo. Los grupos sirven para agrupar a los usuarios&lt;br /&gt;
y que estos tengan unos mismos permisos. Por ejemplo, cuando instalamos algunas&lt;br /&gt;
herramientas como por ejemplo docker, este crea el grupo docker automáticamente&lt;br /&gt;
para que fácilmente podamos añadir a un usuario al grupo, y este tenga los&lt;br /&gt;
permisos para trabajar con dicha herramienta.&lt;br /&gt;
&lt;br /&gt;
Vamos a crear un nuevo grupo, vamos a llamarle invitado:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo groupadd invitado&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== usermod y groups ==&lt;br /&gt;
&lt;br /&gt;
usermod es utilizado para asignar un grupo a un usuario.&lt;br /&gt;
&lt;br /&gt;
groups es utilizado para ver los grupos a los que pertenece un usuario.&lt;br /&gt;
&lt;br /&gt;
Vamos a añadir a un usuario practica, lo vamos a añadir al grupo invitado y&lt;br /&gt;
veremos los grupos a los que pertenece:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo useradd -m practica&lt;br /&gt;
sudo usermod -G invitado practica&lt;br /&gt;
groups practica&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Veremos que el usuario práctica pertenece al grupo invitado.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== delgroup y groupdel ==&lt;br /&gt;
&lt;br /&gt;
Ambos sirven para eliminar un grupo. Vamos a eliminar el grupo que hemos creado&lt;br /&gt;
anteriormente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo groupdel invitado&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podemos observar ahora que el usuario practica no pertenece al grupo invitado:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
groups practica&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Paso 5: Permisos =&lt;br /&gt;
&lt;br /&gt;
== Nomenclatura rwx y numérica ==&lt;br /&gt;
&lt;br /&gt;
Si hacemos un ls -l, la primera cadena que nos aparece son los permisos del&lt;br /&gt;
fichero (-rwxrw-r--), podemos dividirlo en 4 elementos:&lt;br /&gt;
&lt;br /&gt;
-    (rwx)   (rw-)  (r--)&lt;br /&gt;
|      |       |      |&lt;br /&gt;
type  owner   group  others&lt;br /&gt;
&lt;br /&gt;
* type: el tipo de fichero, pudiendo ser d (directorio), l (enlace simbólico), - (fichero normal)&lt;br /&gt;
* owner: permisos de propietario&lt;br /&gt;
* group: permisos de grupo&lt;br /&gt;
* others: permisos para los demás usuarios&lt;br /&gt;
&lt;br /&gt;
Significado de los permisos:&lt;br /&gt;
&lt;br /&gt;
* r: permisos de lectura&lt;br /&gt;
* w: permisos de escritura&lt;br /&gt;
* x: permisos de ejecución&lt;br /&gt;
&lt;br /&gt;
Por último, existe un modo abreviado para estos permisos que se utiliza con&lt;br /&gt;
números.&lt;br /&gt;
&lt;br /&gt;
rwx&lt;br /&gt;
001 en binario es 1 en decimal. Permisos de ejecución&lt;br /&gt;
010 en binario es 2 en decimal. Permisos de escritura&lt;br /&gt;
100 en binario es 4 en decimal. Permisos de lectura&lt;br /&gt;
&lt;br /&gt;
La suma de los permisos, nos da el valor numérico. Veamos un ejemplo:&lt;br /&gt;
rwx rw- r--&lt;br /&gt;
111 110 100&lt;br /&gt;
 7   6   4&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== chmod ==&lt;br /&gt;
&lt;br /&gt;
Permite cambiar los permisos de acceso a un fichero o directorio. Podemos dar&lt;br /&gt;
permisos de dos formas diferentes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== modo carácter ===&lt;br /&gt;
&lt;br /&gt;
Veamos primero unos detalles:&lt;br /&gt;
&lt;br /&gt;
Clases de usuario:&lt;br /&gt;
&lt;br /&gt;
* owner (u)&lt;br /&gt;
* group (g)&lt;br /&gt;
* others (o)&lt;br /&gt;
* all (a)&lt;br /&gt;
&lt;br /&gt;
Modificador:&lt;br /&gt;
&lt;br /&gt;
* añadir (+)&lt;br /&gt;
* eliminar (-)&lt;br /&gt;
* sobrescribir (=)&lt;br /&gt;
&lt;br /&gt;
Para dar permisos tendríamos que seleccionar la clase de usuario el modificador&lt;br /&gt;
y los permisos, veamos un ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chmod u+x file  # añadimos permisos de ejecución al usuario&lt;br /&gt;
chmod go-w file  # quitamos permisos de escritura al grupo y a otros usuarios&lt;br /&gt;
chmod u=rwx,go=r file  # Al usuario le damos todos los permisos, y al grupo y otros solo le damos permisos de lectura&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Modo octal ===&lt;br /&gt;
&lt;br /&gt;
Con el modo octacl, es como si siempre utilizáramos el modificar sobrescribir,&lt;br /&gt;
pongamos algunos ejemplos:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chmod 744 file  # Al usuario le damos todos los permisos, y al grupo y otros solo le damos permisos de lectura&lt;br /&gt;
chmod 777 file  # Todos tienen permisos para todo&lt;br /&gt;
chmod 600 file  # solo el propietario tiene permisos de lectura y escritura&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Ejemplos ===&lt;br /&gt;
&lt;br /&gt;
Vamos a ver como funciona el tema de permisos con unos ejemplos. Vamos a crear&lt;br /&gt;
un fichero pruebas y le vamos a quitar los permisos de escritura a nuestro&lt;br /&gt;
usuario, y le vamos a dar permisos de escritura a otros:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
touch pruebas&lt;br /&gt;
ls -l pruebas  # de esta forma veremos que por defecto los permisos son rw-rw-r--&lt;br /&gt;
chmod u-w,o+w pruebas&lt;br /&gt;
ls -l pruebas  # ahora los permisos deberían ser -w-rw-rw-&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Una vez dado los permisos, veamos que con nuestro usuario podemos leer pero no&lt;br /&gt;
escribir:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat pruebas&lt;br /&gt;
echo &amp;quot;probando&amp;quot; &amp;gt; pruebas&lt;br /&gt;
exit&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Y ahora vamos a ver que el usuario pruebas, puede leer y escribir:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
su practica&lt;br /&gt;
cat pruebas&lt;br /&gt;
echo &amp;quot;probando&amp;quot; &amp;gt; pruebas&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== chown ==&lt;br /&gt;
&lt;br /&gt;
Permite cambiar el propietario de un fichero o directorio.&lt;br /&gt;
&lt;br /&gt;
Vamos por ejemplo a pasarle ahora el fichero pruebas al usuario practica:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo chown practica pruebas&lt;br /&gt;
ls -l pruebas&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Veremos que el usuario actual ahora es pruebas, aunque vemos que el ls muestra&lt;br /&gt;
lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
-r--rw-rw- 1 practica ubuntu 9 Aug 29 09:34 pruebas&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hay que comentar un detalle, y es que los ficheros y directorios tienen asignado&lt;br /&gt;
un usuario y un grupo, por defecto se utiliza el mismo usuario como grupo&lt;br /&gt;
cuando creamos un nuevo fichero o directorio. Si queremos que cuando cambiemos&lt;br /&gt;
el propietario, cambiar tambien el grupo del fichero, podemos hacerlo de la&lt;br /&gt;
siguiente forma:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo chown practica:practica pruebas&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Una vez hecho esto, vamos ahora a probar que los permisos siguen funcionando&lt;br /&gt;
como antes, ahora con el usuario ubuntu, deberíamos de poder leer y escribir en&lt;br /&gt;
el fichero pruebas, y con el usuario practica, solo leer, esto es así por que&lt;br /&gt;
ahora el propitario es practica:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Pruebas usuario ubuntu&lt;br /&gt;
cat pruebas&lt;br /&gt;
echo test &amp;gt;&amp;gt; pruebas&lt;br /&gt;
# Pruebas usuario practica&lt;br /&gt;
su practica&lt;br /&gt;
cat pruebas&lt;br /&gt;
echo &amp;quot;probando&amp;quot; &amp;gt; pruebas&lt;br /&gt;
exit&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Paso 6: Procesos =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== ps ==&lt;br /&gt;
&lt;br /&gt;
Sirve para ver que procesos están ejecutándose en el sistema, veamos un ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ps aux  # con la opción aux mostraremos todos los procesos del sistema&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cada línea es un proceso, y cada proceso muestra su PID, usuario, cantidad de&lt;br /&gt;
memoria y cpu utilizada, comando y otros detalles.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
man kill &amp;amp;  # añadir el &amp;amp; al final de un comando hace que este se ejecute en segundo plano, por lo que se quedará abierto&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La salida de este comando nos mostrará el PID que tiene ese proceso que acabamos&lt;br /&gt;
de ejecutar, vamos a comprobarlo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ps aux | grep &amp;quot;man kill&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Veremos que el PID coincide.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== kill ==&lt;br /&gt;
&lt;br /&gt;
Este comando nos servirá para matar un proceso. kill se utiliza seguido de una&lt;br /&gt;
señal para enviar al proceso seguido de uno o varios PID. para ver las señales&lt;br /&gt;
disponibles, podemos listarlas:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kill -l&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Las más utilizadas suele ser SIGTERM y SIGKILL, la primera intenta terminar el&lt;br /&gt;
proceso de forma poco abrupta, y la segunda suele utilizarse cuando el proceso&lt;br /&gt;
no atiende a esta primera señal. Vamos ahora a terminar el proceso que creamos&lt;br /&gt;
antes, si no recordamos el PID, busquémoslo de nuevo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ps aux | grep &amp;quot;man kill&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enviamos señal para terminar el proceso y comprobamos que ha terminado:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kill -SIGTERM 8470&lt;br /&gt;
ps aux | grep &amp;quot;man kill&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
También podemos notar que en el listado de señales, hay unos números, podemos&lt;br /&gt;
utilizar esos números en vez de las palabras, por ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
man kill &amp;amp;&lt;br /&gt;
kill -15 PID_COMANDO_PREVIO&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Comprobamos que el proceso ha terminado correctamente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ps aux | grep &amp;quot;man kill&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Paso 7: Estado CPU, RAM y Disco =&lt;br /&gt;
&lt;br /&gt;
== top ==&lt;br /&gt;
&lt;br /&gt;
Este comando nos servirá para ver el listado de procesos y el estado de la CPU y&lt;br /&gt;
memoria.&lt;br /&gt;
&lt;br /&gt;
Probemos el comando y observemos detalladamente la salida:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
top&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para salir, pulsamos q.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== df y du ==&lt;br /&gt;
&lt;br /&gt;
df (disk free) y du (disk usage). Ambas son utilidades para mostrar el uso de&lt;br /&gt;
los discos.&lt;br /&gt;
&lt;br /&gt;
Con df mostraremos la información del espacio en cada dispositivo montado:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
df&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Estos comandos que nos muestran el tamaño de los ficheros, casi siempre tienen&lt;br /&gt;
una opción para mostrarlo en un formato más legible (-h)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
df -h&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mucho mejor.&lt;br /&gt;
&lt;br /&gt;
Ahora veamos el comando du, el cual nos mostrará el tamaño de un fichero o&lt;br /&gt;
directorio y sus subdirectorios, no olvidemos el -h:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
du -h /home/ubuntu&lt;br /&gt;
du -h /home/ubuntu/pruebas&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Si solo quisíeramos saber el total de una carpeta y nos nos interesan sus&lt;br /&gt;
subcarpetas, podemos utilizar la opción -s:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
du -sh /home/ubuntu&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== free ==&lt;br /&gt;
&lt;br /&gt;
Sirve para ver el estado de la memoria, como siempre, opción -h:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
free -h&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== lsblk ==&lt;br /&gt;
&lt;br /&gt;
Nos muestra la información de todos los dispositivos de bloques (discos duros,&lt;br /&gt;
pendrivers, CD_ROM, SSD, ...).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lsblk&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En la siguiente práctica se utilizará más a fondo este comando, ya que&lt;br /&gt;
trabajaremos con dispositivos.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Paso 8: Gestión de paquetes de software y repositorios =&lt;br /&gt;
&lt;br /&gt;
Los sistemas Linux incluyen, además de las herramientas básicas del sistema operativo, repositorios de software que puede ser opcionalmente instalados por el administrador del sistema. Los fabricantes de las distribuciones de Linux incluyen paquetes de software listos para ser instalados que se integran con el sistema.&lt;br /&gt;
&lt;br /&gt;
Un paquete incluye el software necesario para que una cierta aplicación funcione correctamente, así como sus paquetes de dependencia.&lt;br /&gt;
&lt;br /&gt;
En Ubuntu, la herramienta de gestión de paquetes de software y repositorios se llama '''apt'''.&lt;br /&gt;
&lt;br /&gt;
=== Listado de repositorios de paquetes de software ===&lt;br /&gt;
&lt;br /&gt;
En Ubuntu el listado de repositorios se encuentra en el fichero /etc/apt/sources.list. Podemos comprobar que repositorios tenemos añadido:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat /etc/apt/sources.list&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Actualización del listado de paquetes de software ===&lt;br /&gt;
&lt;br /&gt;
Para actualizar el listado de paquetes utilizaremos el comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt update&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Instalación un nuevo paquete ===&lt;br /&gt;
&lt;br /&gt;
Para instalar un nuevo paquete, utilizaremos la orden install, por ejemplo, vamos a instalar tree, similar al ls pero muestra el arbol de directorios:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt install tree&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Desinstalación de un paquete ===&lt;br /&gt;
&lt;br /&gt;
Usaremos la orden purge o la orden remove, purge nos lo eliminad todo, y remove mantiene la configuración en el caso de que el paquete la tuviese. Vamos a eliminar el paquete instalado previamente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt purge tree&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Paso 9: Módulos =&lt;br /&gt;
&lt;br /&gt;
Los módulos del kernel de Linux son partes que podemos añadir o quitar de forma&lt;br /&gt;
sencilla con el fin de añadir o quitar funcionalidad. Por ejemplo, algunas de&lt;br /&gt;
estas funcionalidades son:&lt;br /&gt;
&lt;br /&gt;
* Registrar temperaturas de nuestros componentes&lt;br /&gt;
* Hacer funcionr la tarjeta de red wifi&lt;br /&gt;
* Cargar los drivers de una tarjeta gráfica&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== lsmod ==&lt;br /&gt;
&lt;br /&gt;
Comando para ver los módulos que estamos usando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lsmod&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== lspci y usb-devices ==&lt;br /&gt;
&lt;br /&gt;
Estos comandos nos servirán para ver el hardware que está conectado a nuestro&lt;br /&gt;
ordenador. Con lspci veremos el listado del hardware integrado y con usb-devices&lt;br /&gt;
el que está conectado por hardware.&lt;br /&gt;
&lt;br /&gt;
Normalmente, como los módulos se utilizan para dar funcionalidad un hardware,&lt;br /&gt;
aquí en los listado de hardware podremos ver que módulo está utilizando cada&lt;br /&gt;
hardware:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lspci -v&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Veremos una línea en algunos dispositivos que nos diga que módulo estamos&lt;br /&gt;
usando, pongo un pequeño trozo de la salida del comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
00:1f.2 SATA controller: Intel Corporation 82801IR/IO/IH (ICH9R/DO/DH) 6 port SATA Controller [AHCI mode] (rev 02) (prog-if 01 [AHCI 1.0])&lt;br /&gt;
    Subsystem: Red Hat, Inc. QEMU Virtual Machine&lt;br /&gt;
    Flags: bus master, fast devsel, latency 0, IRQ 35&lt;br /&gt;
    I/O ports at c0c0 [size=32]&lt;br /&gt;
    Memory at fcc1d000 (32-bit, non-prefetchable) [size=4K]&lt;br /&gt;
    Capabilities: &amp;lt;access denied&amp;gt;&lt;br /&gt;
    Kernel driver in use: ahci&lt;br /&gt;
    Kernel modules: ahci&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vemos que el hardware INTEl Corporation está utilizando el módulo ahci.&lt;br /&gt;
&lt;br /&gt;
Probemos ahora con usb-devices:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
usb-devices&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Veamos un trozo de código:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
T:  Bus=01 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#=  2 Spd=480 MxCh= 0&lt;br /&gt;
D:  Ver= 2.00 Cls=00(&amp;gt;ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs=  1&lt;br /&gt;
P:  Vendor=0627 ProdID=0001 Rev=00.00&lt;br /&gt;
S:  Manufacturer=QEMU&lt;br /&gt;
S:  Product=QEMU USB Tablet&lt;br /&gt;
S:  SerialNumber=42&lt;br /&gt;
C:  #Ifs= 1 Cfg#= 1 Atr=a0 MxPwr=100mA&lt;br /&gt;
I:  If#= 0 Alt= 0 #EPs= 1 Cls=03(HID  ) Sub=00 Prot=00 Driver=usbhid&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vemos que el teclado está utilizando el módulo usbhid&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== insmod ==&lt;br /&gt;
&lt;br /&gt;
Sirve para cargar un módulo en el kernel, imaginemos que tenemos un módulo que&lt;br /&gt;
se llama modulo1:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo insmod modulo1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== rmmod ==&lt;br /&gt;
&lt;br /&gt;
Sirve para eliminar un módulo de kernel. Imaginemos que queremos borrar un&lt;br /&gt;
módulo cargado anteriormente con el nombre modulo1:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo rmmod modulo1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Marramfer12</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Administraci%C3%B3n_b%C3%A1sica&amp;diff=4548</id>
		<title>Administración básica</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Administraci%C3%B3n_b%C3%A1sica&amp;diff=4548"/>
				<updated>2019-11-13T10:19:19Z</updated>
		
		<summary type="html">&lt;p&gt;Marramfer12: /* Directorio de trabajo actual y la orden cd */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Para realizar esta práctica utilizaremos una de las máquinas virtuales que generamos en la práctica anterior.&lt;br /&gt;
&lt;br /&gt;
En esta práctica aprenderemos a utilizar el interprete de ordenes (también conocido como ''[https://www.traficantes.net/sites/default/files/pdfs/En%20el%20principio%20fue...-TdS.pdf línea de comandos]'') y a aprender nociones básicas de administración de sistemas Linux.&lt;br /&gt;
&lt;br /&gt;
= Paso 0: Breve introducción al sistema Linux =&lt;br /&gt;
&lt;br /&gt;
== Estructura básica del sistema de archivos ==&lt;br /&gt;
&lt;br /&gt;
En un sistema Linux, todas las carpetas y ficheros en el sistema de fichero pende de la carpeta raíz que se representa con la /.&lt;br /&gt;
&lt;br /&gt;
 /&lt;br /&gt;
 ├── bin&lt;br /&gt;
 ├── usr&lt;br /&gt;
 │   ├── local&lt;br /&gt;
 │   ├── bin&lt;br /&gt;
 │   └── ...&lt;br /&gt;
 ├── dev&lt;br /&gt;
 │   ├── sda&lt;br /&gt;
 │   ├── sda1&lt;br /&gt;
 │   └── ...&lt;br /&gt;
 ├── home&lt;br /&gt;
 │   ├── practica&lt;br /&gt;
 │   │   ├── tema1.pdf&lt;br /&gt;
 │   │   ├── boletin1.pdf&lt;br /&gt;
 │   │   └── ...&lt;br /&gt;
 │   ├── profesor&lt;br /&gt;
 │   └── ...&lt;br /&gt;
 └── etc&lt;br /&gt;
     ├── firefox&lt;br /&gt;
     ├── libvirt&lt;br /&gt;
     ├── ...&lt;br /&gt;
     └── ...&lt;br /&gt;
&lt;br /&gt;
Como puedes observar, el sistema de fichero emplea una estructura de árbol.&lt;br /&gt;
&lt;br /&gt;
== Nociones básicas ==&lt;br /&gt;
&lt;br /&gt;
·Aplicaciones con nombres compuestos: usar guion entre palabras&lt;br /&gt;
&lt;br /&gt;
·Nombres con espacios en blanco: Escribir entre comillas dobles&lt;br /&gt;
&lt;br /&gt;
·Espacios en blanco para separar ordenes (ej: instalar varios paquetes )&lt;br /&gt;
&lt;br /&gt;
·Formato general de una orden: comando [-opciones] [argumentos]&lt;br /&gt;
&lt;br /&gt;
·'''IMPORTANTE''': Diferencia entre mayúsculas y minúsculas&lt;br /&gt;
&lt;br /&gt;
== Carpetas . y .. ==&lt;br /&gt;
&lt;br /&gt;
Toda carpeta en un sistema Linux dispone de dos pseudocarpetas, la '''.''' y la '''..'':&lt;br /&gt;
&lt;br /&gt;
* La pseudocarpeta '''..''' hace referencia a la carpeta padre que contiene a esta carpeta.&lt;br /&gt;
* La pseudocarpeta '''.''' hace referencia a la carpeta actual, es por tanto una autoreferencia.&lt;br /&gt;
&lt;br /&gt;
En el caso de la carpeta raíz, la pseudocarpeta '''.''' y '''..''' hacen referencia a la propia carpeta raíz, se trata, por tanto de una excepción.&lt;br /&gt;
&lt;br /&gt;
== Directorio de trabajo actual y la orden cd ==&lt;br /&gt;
&lt;br /&gt;
Cada interprete de ordenes dispone de una ''carpeta de trabajo actual'' ('''c'''urrent '''w''orking '''d''irectory, en inglés). La carpeta de trabajo actual se puede modificar con la orden '''cd''' ('''c'''hange '''d'''irectory, en inglés).&lt;br /&gt;
&lt;br /&gt;
Por ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ cd ..&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nos situaría en la carpeta padre, empleando una ruta relativa.&lt;br /&gt;
&lt;br /&gt;
Si volvemos a escribir desde /home &amp;quot; cd .. &amp;quot; nos lleva a '''/$''' &lt;br /&gt;
&lt;br /&gt;
Para situarnos en el raíz, podemos emplear una ruta absoluta:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ cd /&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En caso de que queramos volver a la carpeta de usuario, bastaría con invocar a '''cd''' sin más o ''' cd ~ '''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ cd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''MUY IMPORTANTE''': No es lo mismo cd.. que ''' cd .. ''', es necesario el espacio después del cd.&lt;br /&gt;
&lt;br /&gt;
== Rutas absolutas, rutas relativas ==&lt;br /&gt;
&lt;br /&gt;
Para hacer referencia a un fichero o una carpeta se usan ruta absolutas o rutas relativas.&lt;br /&gt;
&lt;br /&gt;
Las rutas absolutas siempre empieza por /, de manera que toman como punto de referencia la carpeta raíz (/). Por ejemplo, una ruta absoluta a la carpeta '''prueba''' que está almacenada en la carpeta del usuario '''ubuntu''' es '/home/ubuntu/prueba/'.&lt;br /&gt;
&lt;br /&gt;
Las ruta relativa toma como referencia la carpeta de trabajo actual. Para averiguar la carpeta de trabajo actual disponemos de la orden '''pwd'''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ pwd&lt;br /&gt;
/home/ubuntu&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En base a la carpeta de trabajo actual, empleando la pseudocarpeta '''..''', se puede construir rutas relativas. Por ejemplo, para referenciar un fichero '''fichero.txt''' en la carpeta temporal, podemos emplear la ruta relativa '''../../tmp/fichero.txt'''.&lt;br /&gt;
&lt;br /&gt;
Aunque probablemente sea más cómodo emplear una ruta absoluta en este caso, que sería '''/tmp/fichero.txt'''.&lt;br /&gt;
&lt;br /&gt;
== Intérprete de órdenes ==&lt;br /&gt;
&lt;br /&gt;
El intérprete de órdenes es un lanzador de aplicaciones textual que emplea el teclado como dispositivo de entrada de datos. Mediante el teclado, se escribe el nombre del programa que se quiere lanzar y al pulsa la tecla ''intro'' el intérprete de ordenes ejecutara dicho programa. Por defecto, el intérprete de ordenes que emplea Ubuntu por defecto es '''bash'''.&lt;br /&gt;
&lt;br /&gt;
== man: ver la página de manual de una orden ==&lt;br /&gt;
&lt;br /&gt;
La orden '''man''' te será útil para ver las páginas de manual.&lt;br /&gt;
&lt;br /&gt;
Su estructura básica es:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
man &amp;lt;comando&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aunque también se utiliza con la opción ''' -a ''' de All, que también muestra las entradas comenzadas por '''.''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
man -a &amp;lt;comando&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Este programa toma como entrada el nombre de la orden de la que quieres consultar su página de manual, por ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
man ls&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nos da información del manual de la orden '''ls'''.&lt;br /&gt;
&lt;br /&gt;
Para salir de la página de manual, pulsa la tecla '''q''' (la primera letra de la palabra '''quit''', en inglés).&lt;br /&gt;
&lt;br /&gt;
quit = salir&lt;br /&gt;
&lt;br /&gt;
Normalmente, los programas ofrecen opciones de ayuda, como '''--help'''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
man --help&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
También se puede emplear la versión compacta a la hora de especificar opciones.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
man -h&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En general, todas las ordenes suelen ofrecer una opción de ayuda.&lt;br /&gt;
&lt;br /&gt;
= Paso 1: Operaciones básicas con el sistema de ficheros =&lt;br /&gt;
&lt;br /&gt;
== ls ==&lt;br /&gt;
&lt;br /&gt;
Lista los ficheros y carpetas. Si no se especifica nada, muestra los ficheros y carpetas que contiene la carpeta de trabajo actual.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Si se especifica una ruta, muestra las carpetas y ficheros contenidos en dicha ruta, por ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ ls /&lt;br /&gt;
bin  boot  data  dev  etc  home  initrd.img  initrd.img.old  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  snap  srv  sys  tmp  usr  var  vmlinuz  vmlinuz.old&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al emplear '''/''' como ruta absoluta, muestra el contenido de la carpeta raíz.&lt;br /&gt;
&lt;br /&gt;
Las opciones más usadas de este programa suelen ser:&lt;br /&gt;
&lt;br /&gt;
* -a: muestra los ficheros y carpetas ''ocultos''. En Linux, cualquier fichero o carpeta cuyo nombre empiece por . se considera ''oculto''. Esto incluye también en el listado las pseudocarpetas . y ..&lt;br /&gt;
* -l: formato largo, que muestra la fecha de última modificación, propiertario, grupo, tamaño en bytes y nombre:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ ls -a&lt;br /&gt;
.  ..  .bash_history  .bash_logout  .bashrc  .profile  .ssh&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ambas opciones se puede combinar:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ ls -la /&lt;br /&gt;
total 92&lt;br /&gt;
drwxr-xr-x  24 root root  4096 Aug 28 09:50 .&lt;br /&gt;
drwxr-xr-x  24 root root  4096 Aug 28 09:50 ..&lt;br /&gt;
drwxr-xr-x   2 root root  4096 Aug 22 12:37 bin&lt;br /&gt;
drwxr-xr-x   4 root root  4096 Aug 22 12:37 boot&lt;br /&gt;
drwx------   3 root root  4096 Aug 28 09:50 data&lt;br /&gt;
drwxr-xr-x  18 root root  3780 Aug 28 09:46 dev&lt;br /&gt;
drwxr-xr-x  93 root root  4096 Aug 28 13:51 etc&lt;br /&gt;
drwxr-xr-x   3 root root  4096 Aug 28 09:46 home&lt;br /&gt;
lrwxrwxrwx   1 root root    33 Aug 22 12:35 initrd.img -&amp;gt; boot/initrd.img-4.15.0-58-generic&lt;br /&gt;
lrwxrwxrwx   1 root root    33 Aug 22 12:35 initrd.img.old -&amp;gt; boot/initrd.img-4.15.0-58-generic&lt;br /&gt;
drwxr-xr-x  20 root root  4096 Aug 22 12:35 lib&lt;br /&gt;
drwxr-xr-x   2 root root  4096 Aug 22 12:34 lib64&lt;br /&gt;
drwx------   2 root root 16384 Aug 22 12:36 lost+found&lt;br /&gt;
drwxr-xr-x   2 root root  4096 Aug 22 12:34 media&lt;br /&gt;
drwxr-xr-x   2 root root  4096 Aug 22 12:34 mnt&lt;br /&gt;
drwxr-xr-x   3 root root  4096 Aug 28 09:49 opt&lt;br /&gt;
dr-xr-xr-x 111 root root     0 Aug 28 09:46 proc&lt;br /&gt;
drwx------   3 root root  4096 Aug 28 09:46 root&lt;br /&gt;
drwxr-xr-x  26 root root   940 Aug 28 13:51 run&lt;br /&gt;
drwxr-xr-x   2 root root  4096 Aug 28 09:49 sbin&lt;br /&gt;
drwxr-xr-x   2 root root  4096 Aug 28 09:46 snap&lt;br /&gt;
drwxr-xr-x   2 root root  4096 Aug 22 12:34 srv&lt;br /&gt;
dr-xr-xr-x  13 root root     0 Aug 28 09:46 sys&lt;br /&gt;
drwxrwxrwt  10 root root  4096 Aug 28 16:00 tmp&lt;br /&gt;
drwxr-xr-x  11 root root  4096 Aug 28 09:49 usr&lt;br /&gt;
drwxr-xr-x  13 root root  4096 Aug 22 12:36 var&lt;br /&gt;
lrwxrwxrwx   1 root root    30 Aug 22 12:35 vmlinuz -&amp;gt; boot/vmlinuz-4.15.0-58-generic&lt;br /&gt;
lrwxrwxrwx   1 root root    30 Aug 22 12:35 vmlinuz.old -&amp;gt; boot/vmlinuz-4.15.0-58-generic&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Los permisos se emplean en base a tres capacidades:&lt;br /&gt;
&lt;br /&gt;
* lectura, que se codifica con '''r''' (read, en inglés).&lt;br /&gt;
* escritura, que se codifica con '''w''' (write, en inglés).&lt;br /&gt;
* ejecutación, que se codifica con '''x''' (execute, en inglés).&lt;br /&gt;
&lt;br /&gt;
La primera columna muestra los permisos que codifican:&lt;br /&gt;
&lt;br /&gt;
* Tipo de entrada: '''d''' indica ''directorio'' (''carpeta'').&lt;br /&gt;
* Permisos del propietario, primera terna de rwx&lt;br /&gt;
* Permisos del grupo, segunda terna de rwx&lt;br /&gt;
* Permisos para el resto del mundo, tercera terna de rwx.&lt;br /&gt;
&lt;br /&gt;
A continución, aparecen el propietario y el grupo, seguidos de la fecha de última modificación y el nombre del fichero o carpeta.&lt;br /&gt;
&lt;br /&gt;
== mkdir ==&lt;br /&gt;
&lt;br /&gt;
Crea un nuevo directorio.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ mkdir test&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Crea una carpeta test en el directorio actual.&lt;br /&gt;
&lt;br /&gt;
Comprobemos que se ha creado bien:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ ls&lt;br /&gt;
test&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Con la opción '''-p''', permite crear sucesivas carpetas anidadas de una sola vez, por ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ mkdir -p a/b/c&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Que crea la siguiente estructura de carpetas.&lt;br /&gt;
&lt;br /&gt;
 a&lt;br /&gt;
 └── b&lt;br /&gt;
     └── c&lt;br /&gt;
&lt;br /&gt;
== touch ==&lt;br /&gt;
&lt;br /&gt;
Crea un nuevo fichero vacío (sin contenido) con el nombre que especifiquemos.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ touch file.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Comprobamos que el fichero se ha creado correctamente.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ ls&lt;br /&gt;
file.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== cp ==&lt;br /&gt;
&lt;br /&gt;
Copia un fichero o directorio.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ cp file.txt file_copy.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para copia una carpeta y su contenido tenemos que usar la opción -r (recursivo).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ cp -r test test_copy&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Comprobamos el resultado con la orden '''ls'''.&lt;br /&gt;
&lt;br /&gt;
== mv ==&lt;br /&gt;
&lt;br /&gt;
Mueve fichero o carpeta.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mv file_copy.txt file2.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
También se emplea para renombrar.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mv test_copy test_copy2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== rm ==&lt;br /&gt;
&lt;br /&gt;
Borra un fichero o directorio&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rm file2.txt&lt;br /&gt;
rm -r test2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Comprobamos:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ejercicios:&lt;br /&gt;
&lt;br /&gt;
# Crear la siguiente estructura dentro del directorio /tmp (usar los comandos mkdir, touch y cp):&lt;br /&gt;
&lt;br /&gt;
 /tmp&lt;br /&gt;
 ├── carpeta1&lt;br /&gt;
 ├── carpeta2&lt;br /&gt;
 │   ├── fichero1.txt&lt;br /&gt;
 │   └── fichero2.md&lt;br /&gt;
 └── carpeta3&lt;br /&gt;
     ├── fichero1.txt&lt;br /&gt;
     └── fichero2.md&lt;br /&gt;
&lt;br /&gt;
# Basándonos en el ejercicio anterior, cambiar la estructura a la siguiente (usar comandos mv y rm):&lt;br /&gt;
&lt;br /&gt;
 /tmp&lt;br /&gt;
 └── carpeta&lt;br /&gt;
     ├── fichero1.txt&lt;br /&gt;
     └── fichero2.md&lt;br /&gt;
&lt;br /&gt;
= Paso 2: Impresión por pantalla y redirección de salida =&lt;br /&gt;
&lt;br /&gt;
== echo ==&lt;br /&gt;
&lt;br /&gt;
Sirve para imprimir una línea de texto por pantalla o imprimir variables de&lt;br /&gt;
entorno.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo &amp;quot;Hola&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Una variable de entorno es una variable editada con algún valor, por defecto&lt;br /&gt;
existen algunas creadas, como por ejemplo la variable HOME, que contiene el&lt;br /&gt;
directorio del usuario:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo $HOME&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aprovecharemos y crearemos una variable nosotros:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ME=&amp;quot;my name&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Comprobamos:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo $ME&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Redirección de salida ==&lt;br /&gt;
&lt;br /&gt;
&amp;gt; y &amp;gt;&amp;gt; sirve para redirigir una salida. Por ejemplo, utilizando el comando echo,&lt;br /&gt;
podemos enviar un texto dentro de un fichero:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo &amp;quot;Esto es una prueba&amp;quot; &amp;gt; file.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La diferencia entre &amp;gt; y &amp;gt;&amp;gt; es que &amp;gt; sobrescribe lo que haya en el fichero y&lt;br /&gt;
añade el contenido, y &amp;gt;&amp;gt; no sobrescribe, solo añade el nuevo contenido.&lt;br /&gt;
&lt;br /&gt;
Hagamos la prueba:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo &amp;quot;Esto es una prueba&amp;quot; &amp;gt; file.txt&lt;br /&gt;
echo &amp;quot;Esto es una prueba2&amp;quot; &amp;gt; file.txt&lt;br /&gt;
echo &amp;quot;Esto es una prueba&amp;quot; &amp;gt;&amp;gt; file2.txt&lt;br /&gt;
echo &amp;quot;Esto es una prueba2&amp;quot; &amp;gt;&amp;gt; file2.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En cualquier caso, si el fichero no existe, se crea.&lt;br /&gt;
&lt;br /&gt;
= Paso 3: Manejo de ficheros y carpetas avanzado =&lt;br /&gt;
&lt;br /&gt;
== cat ==&lt;br /&gt;
&lt;br /&gt;
Muestra el contenido de un fichero.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat file.txt&lt;br /&gt;
cat file2.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== grep ==&lt;br /&gt;
&lt;br /&gt;
Sirve para buscar coincidencia de un cierto patrón en ficheros y muestra la coincidencia, en caso de encontrarla, por pantalla.&lt;br /&gt;
&lt;br /&gt;
Por ejemplo, para buscar el patrón ''prueba'' en el fichero ''fichero.txt''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ grep -n prueba fichero.txt&lt;br /&gt;
1:Esto es una prueba&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La opción '''-n''' muestra el número de línea.&lt;br /&gt;
&lt;br /&gt;
== wc ==&lt;br /&gt;
&lt;br /&gt;
Sirve para contar el número de palabras, caracteres, líneas o bytes que contiene un fichero.&lt;br /&gt;
&lt;br /&gt;
Las opciones más utilizadas son:&lt;br /&gt;
&lt;br /&gt;
* -l: muestra el número de líneas que contiene el fichero.&lt;br /&gt;
* -w: muestra el número de palabras.&lt;br /&gt;
* -m: muestra el número de caracteres&lt;br /&gt;
* -c: muestra el número de bytes&lt;br /&gt;
&lt;br /&gt;
Probemos y contemos todo en el fichero file2.txt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
wc -l file2.txt&lt;br /&gt;
wc -w file2.txt&lt;br /&gt;
wc -m file2.txt&lt;br /&gt;
wc -c file2.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podemos contar más de un fichero a la vez:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
wc -l file.txt file2.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nos mostrará el conteo de cada fichero y el total.&lt;br /&gt;
&lt;br /&gt;
== Tubería (|) ==&lt;br /&gt;
&lt;br /&gt;
La tubería nos servirá para conectar varios comandos al mismo tiempo, veamos&lt;br /&gt;
unos ejemplos, que siempre se entiende mejor:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat file2.txt | grep prueba&lt;br /&gt;
grep -nr prueba file2.txt | wc -l&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En el primer ejemplo, mostramos el contenido de file2.txt, y esta salida se la&lt;br /&gt;
pasamos al comando grep, el cual busca las líneas que contengan prueba.&lt;br /&gt;
&lt;br /&gt;
En el segundo, buscamos todas las líneas que contengan la palabra prueba, y esta&lt;br /&gt;
salida se la pasamos al comando wc, el cual cuenta las líneas de la salida del&lt;br /&gt;
comando grep.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Redirecciones ==&lt;br /&gt;
&lt;br /&gt;
Vamos a ver unos conceptos antes de seguir:&lt;br /&gt;
&lt;br /&gt;
* Entrada estándar: representa los datos que necesita una aplicación para funcionar, como por ejemplo un archivo de datos o información ingresada desde la terminal y es representado en la terminal como el tipo 0.&lt;br /&gt;
* Salida estándar: es la vía que utilizan las aplicaciones para mostrarte información, allí podemos ver el progreso o simplemente los mensajes que la  aplicación quiera darte en determinado momento y es representado en la terminal como el tipo 1.&lt;br /&gt;
* Error estándar: es la forma en que los programas te informan sobre los problemas que pueden encontrarse al momento de la ejecución y es representado en la terminal como el tipo 2.&lt;br /&gt;
&lt;br /&gt;
Las redirecciones nos sirven para mover la información de un tipo a otro.&lt;br /&gt;
&lt;br /&gt;
Ya vimos previamente el uso de &amp;gt; y &amp;gt;&amp;gt;, y también el |, veamos algunas más:&lt;br /&gt;
&lt;br /&gt;
* comando &amp;lt; fichero: Toma la entrada de fichero&lt;br /&gt;
* comando 2&amp;gt; fichero: Envía la salida de error de comando a fichero&lt;br /&gt;
* comando 2&amp;gt;&amp;amp;1: Envía la salida de error a la salida estándar&lt;br /&gt;
* comando &amp;amp;&amp;gt; fichero: Envía la salida estándar y de error a fichero; equivale a comando &amp;gt; fichero 2&amp;gt;&amp;amp;1&lt;br /&gt;
&lt;br /&gt;
= Paso 4: Usuarios y grupos =&lt;br /&gt;
&lt;br /&gt;
== whoami ==&lt;br /&gt;
&lt;br /&gt;
Sirve para obtener el usuario actual.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
whoami&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Lo más seguro es que nos aparezca ubuntu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== who ==&lt;br /&gt;
&lt;br /&gt;
Es para saber quien está ahora mismo en la máquina conectado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
who&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Seguramente solo estemos nosotros:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ubuntu   pts/0        2019-08-28 13:51 (192.168.122.1)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== su y sudo ==&lt;br /&gt;
&lt;br /&gt;
su (substitute user): sirve para cambiar de usuario. Por ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
su root&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aquí nos pedirá la contraseña del usuario al que queramos cambiar.&lt;br /&gt;
&lt;br /&gt;
sudo (super user do): no todas las distribuciones lo integran, porque es menos&lt;br /&gt;
seguro que su, este comando nos permite ejecutar un comando siendo otro usuario,&lt;br /&gt;
por defecto, si no le damos usuario, lo hará con el usuario root. Si sudo nos&lt;br /&gt;
pide contraseña, nos pide la contraseña del usuario, ya que el usuario es que el&lt;br /&gt;
tiene permisos para usar sudo o no.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo ls -a /root&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Si tuviéramos por ejemplo un usuario 'practica' y quisíeramos ejecutar un&lt;br /&gt;
comando en su nombre:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo -u practica ls&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== adduser y useradd ==&lt;br /&gt;
&lt;br /&gt;
Ambos comandos sirven para crear un nuevo usuario, pero tienen sus diferencias.&lt;br /&gt;
&lt;br /&gt;
useradd es un comando del sistema, y adduser es un script escrito en perl que&lt;br /&gt;
utiliza el comando useradd. La diferencia así de primeras es que adduser nos&lt;br /&gt;
crear el directorio /home/usuario y useradd necesita la opción -m para hacer lo&lt;br /&gt;
mismo. Se puede utilizar el que se quiera, aunque es más recomendable useradd,&lt;br /&gt;
ya que funcionará igual en todas las distribuciones.&lt;br /&gt;
&lt;br /&gt;
Vamos a añadir un usuario practica con su directorio en /home (notemos que&lt;br /&gt;
necesitamos permisos de super usuario para realizar esta tarea):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo useradd -m practica&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vamos a comprobar que el directorio home está creado y que el usuario practica&lt;br /&gt;
funciona:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls /home  # veremos el directorio practica&lt;br /&gt;
sudo -u practica whoami  # nos dirá que somo el usuario practica&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== passwd ==&lt;br /&gt;
&lt;br /&gt;
Sirve para modificar la contraseña de un usuario, por ejemplo, vamos a modificar&lt;br /&gt;
la contraseña del usuario que hemos creado previamente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo passwd practica&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nos preguntará dos veces la contraseña, y ya la tendremos actualizadas. Vamos&lt;br /&gt;
ahora a probar ahora el comando su para cambiar de usuario:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
su practica&lt;br /&gt;
whoami&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Veremos que hemos cambiado de usuario, para cerrar este usuario, escribimos&lt;br /&gt;
'exit' o pulsamos 'CTLR + D'&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== deluser y userdel ==&lt;br /&gt;
&lt;br /&gt;
Ambos sirven para borrar un usuario, similar a adduser y useradd, userdel es el&lt;br /&gt;
comando y deluser el script.&lt;br /&gt;
&lt;br /&gt;
Vamos a borrar el usuario que hemos creado, incluyendo el borrado de su /home&lt;br /&gt;
(opción -r):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
userdel -r practica&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Comprobemos que ya no tenemos usuario ni /home:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls /home&lt;br /&gt;
sudo -u practica whoami&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== addgroup y groupadd ==&lt;br /&gt;
&lt;br /&gt;
Ambos sirven para crear un grupo. Los grupos sirven para agrupar a los usuarios&lt;br /&gt;
y que estos tengan unos mismos permisos. Por ejemplo, cuando instalamos algunas&lt;br /&gt;
herramientas como por ejemplo docker, este crea el grupo docker automáticamente&lt;br /&gt;
para que fácilmente podamos añadir a un usuario al grupo, y este tenga los&lt;br /&gt;
permisos para trabajar con dicha herramienta.&lt;br /&gt;
&lt;br /&gt;
Vamos a crear un nuevo grupo, vamos a llamarle invitado:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo groupadd invitado&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== usermod y groups ==&lt;br /&gt;
&lt;br /&gt;
usermod es utilizado para asignar un grupo a un usuario.&lt;br /&gt;
&lt;br /&gt;
groups es utilizado para ver los grupos a los que pertenece un usuario.&lt;br /&gt;
&lt;br /&gt;
Vamos a añadir a un usuario practica, lo vamos a añadir al grupo invitado y&lt;br /&gt;
veremos los grupos a los que pertenece:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo useradd -m practica&lt;br /&gt;
sudo usermod -G invitado practica&lt;br /&gt;
groups practica&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Veremos que el usuario práctica pertenece al grupo invitado.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== delgroup y groupdel ==&lt;br /&gt;
&lt;br /&gt;
Ambos sirven para eliminar un grupo. Vamos a eliminar el grupo que hemos creado&lt;br /&gt;
anteriormente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo groupdel invitado&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podemos observar ahora que el usuario practica no pertenece al grupo invitado:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
groups practica&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Paso 5: Permisos =&lt;br /&gt;
&lt;br /&gt;
== Nomenclatura rwx y numérica ==&lt;br /&gt;
&lt;br /&gt;
Si hacemos un ls -l, la primera cadena que nos aparece son los permisos del&lt;br /&gt;
fichero (-rwxrw-r--), podemos dividirlo en 4 elementos:&lt;br /&gt;
&lt;br /&gt;
-    (rwx)   (rw-)  (r--)&lt;br /&gt;
|      |       |      |&lt;br /&gt;
type  owner   group  others&lt;br /&gt;
&lt;br /&gt;
* type: el tipo de fichero, pudiendo ser d (directorio), l (enlace simbólico), - (fichero normal)&lt;br /&gt;
* owner: permisos de propietario&lt;br /&gt;
* group: permisos de grupo&lt;br /&gt;
* others: permisos para los demás usuarios&lt;br /&gt;
&lt;br /&gt;
Significado de los permisos:&lt;br /&gt;
&lt;br /&gt;
* r: permisos de lectura&lt;br /&gt;
* w: permisos de escritura&lt;br /&gt;
* x: permisos de ejecución&lt;br /&gt;
&lt;br /&gt;
Por último, existe un modo abreviado para estos permisos que se utiliza con&lt;br /&gt;
números.&lt;br /&gt;
&lt;br /&gt;
rwx&lt;br /&gt;
001 en binario es 1 en decimal. Permisos de ejecución&lt;br /&gt;
010 en binario es 2 en decimal. Permisos de escritura&lt;br /&gt;
100 en binario es 4 en decimal. Permisos de lectura&lt;br /&gt;
&lt;br /&gt;
La suma de los permisos, nos da el valor numérico. Veamos un ejemplo:&lt;br /&gt;
rwx rw- r--&lt;br /&gt;
111 110 100&lt;br /&gt;
 7   6   4&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== chmod ==&lt;br /&gt;
&lt;br /&gt;
Permite cambiar los permisos de acceso a un fichero o directorio. Podemos dar&lt;br /&gt;
permisos de dos formas diferentes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== modo carácter ===&lt;br /&gt;
&lt;br /&gt;
Veamos primero unos detalles:&lt;br /&gt;
&lt;br /&gt;
Clases de usuario:&lt;br /&gt;
&lt;br /&gt;
* owner (u)&lt;br /&gt;
* group (g)&lt;br /&gt;
* others (o)&lt;br /&gt;
* all (a)&lt;br /&gt;
&lt;br /&gt;
Modificador:&lt;br /&gt;
&lt;br /&gt;
* añadir (+)&lt;br /&gt;
* eliminar (-)&lt;br /&gt;
* sobrescribir (=)&lt;br /&gt;
&lt;br /&gt;
Para dar permisos tendríamos que seleccionar la clase de usuario el modificador&lt;br /&gt;
y los permisos, veamos un ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chmod u+x file  # añadimos permisos de ejecución al usuario&lt;br /&gt;
chmod go-w file  # quitamos permisos de escritura al grupo y a otros usuarios&lt;br /&gt;
chmod u=rwx,go=r file  # Al usuario le damos todos los permisos, y al grupo y otros solo le damos permisos de lectura&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Modo octal ===&lt;br /&gt;
&lt;br /&gt;
Con el modo octacl, es como si siempre utilizáramos el modificar sobrescribir,&lt;br /&gt;
pongamos algunos ejemplos:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chmod 744 file  # Al usuario le damos todos los permisos, y al grupo y otros solo le damos permisos de lectura&lt;br /&gt;
chmod 777 file  # Todos tienen permisos para todo&lt;br /&gt;
chmod 600 file  # solo el propietario tiene permisos de lectura y escritura&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Ejemplos ===&lt;br /&gt;
&lt;br /&gt;
Vamos a ver como funciona el tema de permisos con unos ejemplos. Vamos a crear&lt;br /&gt;
un fichero pruebas y le vamos a quitar los permisos de escritura a nuestro&lt;br /&gt;
usuario, y le vamos a dar permisos de escritura a otros:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
touch pruebas&lt;br /&gt;
ls -l pruebas  # de esta forma veremos que por defecto los permisos son rw-rw-r--&lt;br /&gt;
chmod u-w,o+w pruebas&lt;br /&gt;
ls -l pruebas  # ahora los permisos deberían ser -w-rw-rw-&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Una vez dado los permisos, veamos que con nuestro usuario podemos leer pero no&lt;br /&gt;
escribir:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat pruebas&lt;br /&gt;
echo &amp;quot;probando&amp;quot; &amp;gt; pruebas&lt;br /&gt;
exit&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Y ahora vamos a ver que el usuario pruebas, puede leer y escribir:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
su practica&lt;br /&gt;
cat pruebas&lt;br /&gt;
echo &amp;quot;probando&amp;quot; &amp;gt; pruebas&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== chown ==&lt;br /&gt;
&lt;br /&gt;
Permite cambiar el propietario de un fichero o directorio.&lt;br /&gt;
&lt;br /&gt;
Vamos por ejemplo a pasarle ahora el fichero pruebas al usuario practica:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo chown practica pruebas&lt;br /&gt;
ls -l pruebas&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Veremos que el usuario actual ahora es pruebas, aunque vemos que el ls muestra&lt;br /&gt;
lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
-r--rw-rw- 1 practica ubuntu 9 Aug 29 09:34 pruebas&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hay que comentar un detalle, y es que los ficheros y directorios tienen asignado&lt;br /&gt;
un usuario y un grupo, por defecto se utiliza el mismo usuario como grupo&lt;br /&gt;
cuando creamos un nuevo fichero o directorio. Si queremos que cuando cambiemos&lt;br /&gt;
el propietario, cambiar tambien el grupo del fichero, podemos hacerlo de la&lt;br /&gt;
siguiente forma:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo chown practica:practica pruebas&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Una vez hecho esto, vamos ahora a probar que los permisos siguen funcionando&lt;br /&gt;
como antes, ahora con el usuario ubuntu, deberíamos de poder leer y escribir en&lt;br /&gt;
el fichero pruebas, y con el usuario practica, solo leer, esto es así por que&lt;br /&gt;
ahora el propitario es practica:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Pruebas usuario ubuntu&lt;br /&gt;
cat pruebas&lt;br /&gt;
echo test &amp;gt;&amp;gt; pruebas&lt;br /&gt;
# Pruebas usuario practica&lt;br /&gt;
su practica&lt;br /&gt;
cat pruebas&lt;br /&gt;
echo &amp;quot;probando&amp;quot; &amp;gt; pruebas&lt;br /&gt;
exit&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Paso 6: Procesos =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== ps ==&lt;br /&gt;
&lt;br /&gt;
Sirve para ver que procesos están ejecutándose en el sistema, veamos un ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ps aux  # con la opción aux mostraremos todos los procesos del sistema&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cada línea es un proceso, y cada proceso muestra su PID, usuario, cantidad de&lt;br /&gt;
memoria y cpu utilizada, comando y otros detalles.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
man kill &amp;amp;  # añadir el &amp;amp; al final de un comando hace que este se ejecute en segundo plano, por lo que se quedará abierto&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La salida de este comando nos mostrará el PID que tiene ese proceso que acabamos&lt;br /&gt;
de ejecutar, vamos a comprobarlo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ps aux | grep &amp;quot;man kill&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Veremos que el PID coincide.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== kill ==&lt;br /&gt;
&lt;br /&gt;
Este comando nos servirá para matar un proceso. kill se utiliza seguido de una&lt;br /&gt;
señal para enviar al proceso seguido de uno o varios PID. para ver las señales&lt;br /&gt;
disponibles, podemos listarlas:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kill -l&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Las más utilizadas suele ser SIGTERM y SIGKILL, la primera intenta terminar el&lt;br /&gt;
proceso de forma poco abrupta, y la segunda suele utilizarse cuando el proceso&lt;br /&gt;
no atiende a esta primera señal. Vamos ahora a terminar el proceso que creamos&lt;br /&gt;
antes, si no recordamos el PID, busquémoslo de nuevo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ps aux | grep &amp;quot;man kill&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enviamos señal para terminar el proceso y comprobamos que ha terminado:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kill -SIGTERM 8470&lt;br /&gt;
ps aux | grep &amp;quot;man kill&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
También podemos notar que en el listado de señales, hay unos números, podemos&lt;br /&gt;
utilizar esos números en vez de las palabras, por ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
man kill &amp;amp;&lt;br /&gt;
kill -15 PID_COMANDO_PREVIO&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Comprobamos que el proceso ha terminado correctamente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ps aux | grep &amp;quot;man kill&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Paso 7: Estado CPU, RAM y Disco =&lt;br /&gt;
&lt;br /&gt;
== top ==&lt;br /&gt;
&lt;br /&gt;
Este comando nos servirá para ver el listado de procesos y el estado de la CPU y&lt;br /&gt;
memoria.&lt;br /&gt;
&lt;br /&gt;
Probemos el comando y observemos detalladamente la salida:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
top&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para salir, pulsamos q.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== df y du ==&lt;br /&gt;
&lt;br /&gt;
df (disk free) y du (disk usage). Ambas son utilidades para mostrar el uso de&lt;br /&gt;
los discos.&lt;br /&gt;
&lt;br /&gt;
Con df mostraremos la información del espacio en cada dispositivo montado:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
df&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Estos comandos que nos muestran el tamaño de los ficheros, casi siempre tienen&lt;br /&gt;
una opción para mostrarlo en un formato más legible (-h)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
df -h&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mucho mejor.&lt;br /&gt;
&lt;br /&gt;
Ahora veamos el comando du, el cual nos mostrará el tamaño de un fichero o&lt;br /&gt;
directorio y sus subdirectorios, no olvidemos el -h:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
du -h /home/ubuntu&lt;br /&gt;
du -h /home/ubuntu/pruebas&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Si solo quisíeramos saber el total de una carpeta y nos nos interesan sus&lt;br /&gt;
subcarpetas, podemos utilizar la opción -s:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
du -sh /home/ubuntu&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== free ==&lt;br /&gt;
&lt;br /&gt;
Sirve para ver el estado de la memoria, como siempre, opción -h:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
free -h&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== lsblk ==&lt;br /&gt;
&lt;br /&gt;
Nos muestra la información de todos los dispositivos de bloques (discos duros,&lt;br /&gt;
pendrivers, CD_ROM, SSD, ...).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lsblk&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En la siguiente práctica se utilizará más a fondo este comando, ya que&lt;br /&gt;
trabajaremos con dispositivos.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Paso 8: Gestión de paquetes de software y repositorios =&lt;br /&gt;
&lt;br /&gt;
Los sistemas Linux incluyen, además de las herramientas básicas del sistema operativo, repositorios de software que puede ser opcionalmente instalados por el administrador del sistema. Los fabricantes de las distribuciones de Linux incluyen paquetes de software listos para ser instalados que se integran con el sistema.&lt;br /&gt;
&lt;br /&gt;
Un paquete incluye el software necesario para que una cierta aplicación funcione correctamente, así como sus paquetes de dependencia.&lt;br /&gt;
&lt;br /&gt;
En Ubuntu, la herramienta de gestión de paquetes de software y repositorios se llama '''apt'''.&lt;br /&gt;
&lt;br /&gt;
=== Listado de repositorios de paquetes de software ===&lt;br /&gt;
&lt;br /&gt;
En Ubuntu el listado de repositorios se encuentra en el fichero /etc/apt/sources.list. Podemos comprobar que repositorios tenemos añadido:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat /etc/apt/sources.list&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Actualización del listado de paquetes de software ===&lt;br /&gt;
&lt;br /&gt;
Para actualizar el listado de paquetes utilizaremos el comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt update&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Instalación un nuevo paquete ===&lt;br /&gt;
&lt;br /&gt;
Para instalar un nuevo paquete, utilizaremos la orden install, por ejemplo, vamos a instalar tree, similar al ls pero muestra el arbol de directorios:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt install tree&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Desinstalación de un paquete ===&lt;br /&gt;
&lt;br /&gt;
Usaremos la orden purge o la orden remove, purge nos lo eliminad todo, y remove mantiene la configuración en el caso de que el paquete la tuviese. Vamos a eliminar el paquete instalado previamente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt purge tree&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Paso 9: Módulos =&lt;br /&gt;
&lt;br /&gt;
Los módulos del kernel de Linux son partes que podemos añadir o quitar de forma&lt;br /&gt;
sencilla con el fin de añadir o quitar funcionalidad. Por ejemplo, algunas de&lt;br /&gt;
estas funcionalidades son:&lt;br /&gt;
&lt;br /&gt;
* Registrar temperaturas de nuestros componentes&lt;br /&gt;
* Hacer funcionr la tarjeta de red wifi&lt;br /&gt;
* Cargar los drivers de una tarjeta gráfica&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== lsmod ==&lt;br /&gt;
&lt;br /&gt;
Comando para ver los módulos que estamos usando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lsmod&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== lspci y usb-devices ==&lt;br /&gt;
&lt;br /&gt;
Estos comandos nos servirán para ver el hardware que está conectado a nuestro&lt;br /&gt;
ordenador. Con lspci veremos el listado del hardware integrado y con usb-devices&lt;br /&gt;
el que está conectado por hardware.&lt;br /&gt;
&lt;br /&gt;
Normalmente, como los módulos se utilizan para dar funcionalidad un hardware,&lt;br /&gt;
aquí en los listado de hardware podremos ver que módulo está utilizando cada&lt;br /&gt;
hardware:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lspci -v&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Veremos una línea en algunos dispositivos que nos diga que módulo estamos&lt;br /&gt;
usando, pongo un pequeño trozo de la salida del comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
00:1f.2 SATA controller: Intel Corporation 82801IR/IO/IH (ICH9R/DO/DH) 6 port SATA Controller [AHCI mode] (rev 02) (prog-if 01 [AHCI 1.0])&lt;br /&gt;
    Subsystem: Red Hat, Inc. QEMU Virtual Machine&lt;br /&gt;
    Flags: bus master, fast devsel, latency 0, IRQ 35&lt;br /&gt;
    I/O ports at c0c0 [size=32]&lt;br /&gt;
    Memory at fcc1d000 (32-bit, non-prefetchable) [size=4K]&lt;br /&gt;
    Capabilities: &amp;lt;access denied&amp;gt;&lt;br /&gt;
    Kernel driver in use: ahci&lt;br /&gt;
    Kernel modules: ahci&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vemos que el hardware INTEl Corporation está utilizando el módulo ahci.&lt;br /&gt;
&lt;br /&gt;
Probemos ahora con usb-devices:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
usb-devices&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Veamos un trozo de código:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
T:  Bus=01 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#=  2 Spd=480 MxCh= 0&lt;br /&gt;
D:  Ver= 2.00 Cls=00(&amp;gt;ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs=  1&lt;br /&gt;
P:  Vendor=0627 ProdID=0001 Rev=00.00&lt;br /&gt;
S:  Manufacturer=QEMU&lt;br /&gt;
S:  Product=QEMU USB Tablet&lt;br /&gt;
S:  SerialNumber=42&lt;br /&gt;
C:  #Ifs= 1 Cfg#= 1 Atr=a0 MxPwr=100mA&lt;br /&gt;
I:  If#= 0 Alt= 0 #EPs= 1 Cls=03(HID  ) Sub=00 Prot=00 Driver=usbhid&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vemos que el teclado está utilizando el módulo usbhid&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== insmod ==&lt;br /&gt;
&lt;br /&gt;
Sirve para cargar un módulo en el kernel, imaginemos que tenemos un módulo que&lt;br /&gt;
se llama modulo1:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo insmod modulo1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== rmmod ==&lt;br /&gt;
&lt;br /&gt;
Sirve para eliminar un módulo de kernel. Imaginemos que queremos borrar un&lt;br /&gt;
módulo cargado anteriormente con el nombre modulo1:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo rmmod modulo1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Marramfer12</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Administraci%C3%B3n_b%C3%A1sica&amp;diff=4547</id>
		<title>Administración básica</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Administraci%C3%B3n_b%C3%A1sica&amp;diff=4547"/>
				<updated>2019-11-13T10:17:45Z</updated>
		
		<summary type="html">&lt;p&gt;Marramfer12: /* Nociones básicas */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Para realizar esta práctica utilizaremos una de las máquinas virtuales que generamos en la práctica anterior.&lt;br /&gt;
&lt;br /&gt;
En esta práctica aprenderemos a utilizar el interprete de ordenes (también conocido como ''[https://www.traficantes.net/sites/default/files/pdfs/En%20el%20principio%20fue...-TdS.pdf línea de comandos]'') y a aprender nociones básicas de administración de sistemas Linux.&lt;br /&gt;
&lt;br /&gt;
= Paso 0: Breve introducción al sistema Linux =&lt;br /&gt;
&lt;br /&gt;
== Estructura básica del sistema de archivos ==&lt;br /&gt;
&lt;br /&gt;
En un sistema Linux, todas las carpetas y ficheros en el sistema de fichero pende de la carpeta raíz que se representa con la /.&lt;br /&gt;
&lt;br /&gt;
 /&lt;br /&gt;
 ├── bin&lt;br /&gt;
 ├── usr&lt;br /&gt;
 │   ├── local&lt;br /&gt;
 │   ├── bin&lt;br /&gt;
 │   └── ...&lt;br /&gt;
 ├── dev&lt;br /&gt;
 │   ├── sda&lt;br /&gt;
 │   ├── sda1&lt;br /&gt;
 │   └── ...&lt;br /&gt;
 ├── home&lt;br /&gt;
 │   ├── practica&lt;br /&gt;
 │   │   ├── tema1.pdf&lt;br /&gt;
 │   │   ├── boletin1.pdf&lt;br /&gt;
 │   │   └── ...&lt;br /&gt;
 │   ├── profesor&lt;br /&gt;
 │   └── ...&lt;br /&gt;
 └── etc&lt;br /&gt;
     ├── firefox&lt;br /&gt;
     ├── libvirt&lt;br /&gt;
     ├── ...&lt;br /&gt;
     └── ...&lt;br /&gt;
&lt;br /&gt;
Como puedes observar, el sistema de fichero emplea una estructura de árbol.&lt;br /&gt;
&lt;br /&gt;
== Nociones básicas ==&lt;br /&gt;
&lt;br /&gt;
·Aplicaciones con nombres compuestos: usar guion entre palabras&lt;br /&gt;
&lt;br /&gt;
·Nombres con espacios en blanco: Escribir entre comillas dobles&lt;br /&gt;
&lt;br /&gt;
·Espacios en blanco para separar ordenes (ej: instalar varios paquetes )&lt;br /&gt;
&lt;br /&gt;
·Formato general de una orden: comando [-opciones] [argumentos]&lt;br /&gt;
&lt;br /&gt;
·'''IMPORTANTE''': Diferencia entre mayúsculas y minúsculas&lt;br /&gt;
&lt;br /&gt;
== Carpetas . y .. ==&lt;br /&gt;
&lt;br /&gt;
Toda carpeta en un sistema Linux dispone de dos pseudocarpetas, la '''.''' y la '''..'':&lt;br /&gt;
&lt;br /&gt;
* La pseudocarpeta '''..''' hace referencia a la carpeta padre que contiene a esta carpeta.&lt;br /&gt;
* La pseudocarpeta '''.''' hace referencia a la carpeta actual, es por tanto una autoreferencia.&lt;br /&gt;
&lt;br /&gt;
En el caso de la carpeta raíz, la pseudocarpeta '''.''' y '''..''' hacen referencia a la propia carpeta raíz, se trata, por tanto de una excepción.&lt;br /&gt;
&lt;br /&gt;
== Directorio de trabajo actual y la orden cd ==&lt;br /&gt;
&lt;br /&gt;
Cada interprete de ordenes dispone de una ''carpeta de trabajo actual'' ('''c'''urrent '''w''orking '''d''irectory, en inglés). La carpeta de trabajo actual se puede modificar con la orden '''cd''' ('''c'''hange '''d'''irectory, en inglés).&lt;br /&gt;
&lt;br /&gt;
Por ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ cd ..&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nos situaría en la carpeta padre, empleando una ruta relativa.&lt;br /&gt;
&lt;br /&gt;
Si volvemos a escribir desde /home &amp;quot; cd .. &amp;quot; nos lleva a '''/$''' &lt;br /&gt;
&lt;br /&gt;
Para situarnos en el raíz, podemos emplear una ruta absoluta:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ cd /&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En caso de que queramos volver a la carpeta de usuario, bastaría con invocar a '''cd''' sin más o ''' cd ~ '''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ cd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''MUY IMPORTANTE''': No es lo mismo cd.. que ''' cd ... ''', es necesario el espacio después del cd.&lt;br /&gt;
== Rutas absolutas, rutas relativas ==&lt;br /&gt;
&lt;br /&gt;
Para hacer referencia a un fichero o una carpeta se usan ruta absolutas o rutas relativas.&lt;br /&gt;
&lt;br /&gt;
Las rutas absolutas siempre empieza por /, de manera que toman como punto de referencia la carpeta raíz (/). Por ejemplo, una ruta absoluta a la carpeta '''prueba''' que está almacenada en la carpeta del usuario '''ubuntu''' es '/home/ubuntu/prueba/'.&lt;br /&gt;
&lt;br /&gt;
Las ruta relativa toma como referencia la carpeta de trabajo actual. Para averiguar la carpeta de trabajo actual disponemos de la orden '''pwd'''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ pwd&lt;br /&gt;
/home/ubuntu&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En base a la carpeta de trabajo actual, empleando la pseudocarpeta '''..''', se puede construir rutas relativas. Por ejemplo, para referenciar un fichero '''fichero.txt''' en la carpeta temporal, podemos emplear la ruta relativa '''../../tmp/fichero.txt'''.&lt;br /&gt;
&lt;br /&gt;
Aunque probablemente sea más cómodo emplear una ruta absoluta en este caso, que sería '''/tmp/fichero.txt'''.&lt;br /&gt;
&lt;br /&gt;
== Intérprete de órdenes ==&lt;br /&gt;
&lt;br /&gt;
El intérprete de órdenes es un lanzador de aplicaciones textual que emplea el teclado como dispositivo de entrada de datos. Mediante el teclado, se escribe el nombre del programa que se quiere lanzar y al pulsa la tecla ''intro'' el intérprete de ordenes ejecutara dicho programa. Por defecto, el intérprete de ordenes que emplea Ubuntu por defecto es '''bash'''.&lt;br /&gt;
&lt;br /&gt;
== man: ver la página de manual de una orden ==&lt;br /&gt;
&lt;br /&gt;
La orden '''man''' te será útil para ver las páginas de manual.&lt;br /&gt;
&lt;br /&gt;
Su estructura básica es:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
man &amp;lt;comando&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aunque también se utiliza con la opción ''' -a ''' de All, que también muestra las entradas comenzadas por '''.''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
man -a &amp;lt;comando&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Este programa toma como entrada el nombre de la orden de la que quieres consultar su página de manual, por ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
man ls&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nos da información del manual de la orden '''ls'''.&lt;br /&gt;
&lt;br /&gt;
Para salir de la página de manual, pulsa la tecla '''q''' (la primera letra de la palabra '''quit''', en inglés).&lt;br /&gt;
&lt;br /&gt;
quit = salir&lt;br /&gt;
&lt;br /&gt;
Normalmente, los programas ofrecen opciones de ayuda, como '''--help'''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
man --help&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
También se puede emplear la versión compacta a la hora de especificar opciones.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
man -h&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En general, todas las ordenes suelen ofrecer una opción de ayuda.&lt;br /&gt;
&lt;br /&gt;
= Paso 1: Operaciones básicas con el sistema de ficheros =&lt;br /&gt;
&lt;br /&gt;
== ls ==&lt;br /&gt;
&lt;br /&gt;
Lista los ficheros y carpetas. Si no se especifica nada, muestra los ficheros y carpetas que contiene la carpeta de trabajo actual.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Si se especifica una ruta, muestra las carpetas y ficheros contenidos en dicha ruta, por ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ ls /&lt;br /&gt;
bin  boot  data  dev  etc  home  initrd.img  initrd.img.old  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  snap  srv  sys  tmp  usr  var  vmlinuz  vmlinuz.old&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al emplear '''/''' como ruta absoluta, muestra el contenido de la carpeta raíz.&lt;br /&gt;
&lt;br /&gt;
Las opciones más usadas de este programa suelen ser:&lt;br /&gt;
&lt;br /&gt;
* -a: muestra los ficheros y carpetas ''ocultos''. En Linux, cualquier fichero o carpeta cuyo nombre empiece por . se considera ''oculto''. Esto incluye también en el listado las pseudocarpetas . y ..&lt;br /&gt;
* -l: formato largo, que muestra la fecha de última modificación, propiertario, grupo, tamaño en bytes y nombre:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ ls -a&lt;br /&gt;
.  ..  .bash_history  .bash_logout  .bashrc  .profile  .ssh&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ambas opciones se puede combinar:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ ls -la /&lt;br /&gt;
total 92&lt;br /&gt;
drwxr-xr-x  24 root root  4096 Aug 28 09:50 .&lt;br /&gt;
drwxr-xr-x  24 root root  4096 Aug 28 09:50 ..&lt;br /&gt;
drwxr-xr-x   2 root root  4096 Aug 22 12:37 bin&lt;br /&gt;
drwxr-xr-x   4 root root  4096 Aug 22 12:37 boot&lt;br /&gt;
drwx------   3 root root  4096 Aug 28 09:50 data&lt;br /&gt;
drwxr-xr-x  18 root root  3780 Aug 28 09:46 dev&lt;br /&gt;
drwxr-xr-x  93 root root  4096 Aug 28 13:51 etc&lt;br /&gt;
drwxr-xr-x   3 root root  4096 Aug 28 09:46 home&lt;br /&gt;
lrwxrwxrwx   1 root root    33 Aug 22 12:35 initrd.img -&amp;gt; boot/initrd.img-4.15.0-58-generic&lt;br /&gt;
lrwxrwxrwx   1 root root    33 Aug 22 12:35 initrd.img.old -&amp;gt; boot/initrd.img-4.15.0-58-generic&lt;br /&gt;
drwxr-xr-x  20 root root  4096 Aug 22 12:35 lib&lt;br /&gt;
drwxr-xr-x   2 root root  4096 Aug 22 12:34 lib64&lt;br /&gt;
drwx------   2 root root 16384 Aug 22 12:36 lost+found&lt;br /&gt;
drwxr-xr-x   2 root root  4096 Aug 22 12:34 media&lt;br /&gt;
drwxr-xr-x   2 root root  4096 Aug 22 12:34 mnt&lt;br /&gt;
drwxr-xr-x   3 root root  4096 Aug 28 09:49 opt&lt;br /&gt;
dr-xr-xr-x 111 root root     0 Aug 28 09:46 proc&lt;br /&gt;
drwx------   3 root root  4096 Aug 28 09:46 root&lt;br /&gt;
drwxr-xr-x  26 root root   940 Aug 28 13:51 run&lt;br /&gt;
drwxr-xr-x   2 root root  4096 Aug 28 09:49 sbin&lt;br /&gt;
drwxr-xr-x   2 root root  4096 Aug 28 09:46 snap&lt;br /&gt;
drwxr-xr-x   2 root root  4096 Aug 22 12:34 srv&lt;br /&gt;
dr-xr-xr-x  13 root root     0 Aug 28 09:46 sys&lt;br /&gt;
drwxrwxrwt  10 root root  4096 Aug 28 16:00 tmp&lt;br /&gt;
drwxr-xr-x  11 root root  4096 Aug 28 09:49 usr&lt;br /&gt;
drwxr-xr-x  13 root root  4096 Aug 22 12:36 var&lt;br /&gt;
lrwxrwxrwx   1 root root    30 Aug 22 12:35 vmlinuz -&amp;gt; boot/vmlinuz-4.15.0-58-generic&lt;br /&gt;
lrwxrwxrwx   1 root root    30 Aug 22 12:35 vmlinuz.old -&amp;gt; boot/vmlinuz-4.15.0-58-generic&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Los permisos se emplean en base a tres capacidades:&lt;br /&gt;
&lt;br /&gt;
* lectura, que se codifica con '''r''' (read, en inglés).&lt;br /&gt;
* escritura, que se codifica con '''w''' (write, en inglés).&lt;br /&gt;
* ejecutación, que se codifica con '''x''' (execute, en inglés).&lt;br /&gt;
&lt;br /&gt;
La primera columna muestra los permisos que codifican:&lt;br /&gt;
&lt;br /&gt;
* Tipo de entrada: '''d''' indica ''directorio'' (''carpeta'').&lt;br /&gt;
* Permisos del propietario, primera terna de rwx&lt;br /&gt;
* Permisos del grupo, segunda terna de rwx&lt;br /&gt;
* Permisos para el resto del mundo, tercera terna de rwx.&lt;br /&gt;
&lt;br /&gt;
A continución, aparecen el propietario y el grupo, seguidos de la fecha de última modificación y el nombre del fichero o carpeta.&lt;br /&gt;
&lt;br /&gt;
== mkdir ==&lt;br /&gt;
&lt;br /&gt;
Crea un nuevo directorio.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ mkdir test&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Crea una carpeta test en el directorio actual.&lt;br /&gt;
&lt;br /&gt;
Comprobemos que se ha creado bien:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ ls&lt;br /&gt;
test&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Con la opción '''-p''', permite crear sucesivas carpetas anidadas de una sola vez, por ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ mkdir -p a/b/c&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Que crea la siguiente estructura de carpetas.&lt;br /&gt;
&lt;br /&gt;
 a&lt;br /&gt;
 └── b&lt;br /&gt;
     └── c&lt;br /&gt;
&lt;br /&gt;
== touch ==&lt;br /&gt;
&lt;br /&gt;
Crea un nuevo fichero vacío (sin contenido) con el nombre que especifiquemos.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ touch file.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Comprobamos que el fichero se ha creado correctamente.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ ls&lt;br /&gt;
file.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== cp ==&lt;br /&gt;
&lt;br /&gt;
Copia un fichero o directorio.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ cp file.txt file_copy.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para copia una carpeta y su contenido tenemos que usar la opción -r (recursivo).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ cp -r test test_copy&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Comprobamos el resultado con la orden '''ls'''.&lt;br /&gt;
&lt;br /&gt;
== mv ==&lt;br /&gt;
&lt;br /&gt;
Mueve fichero o carpeta.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mv file_copy.txt file2.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
También se emplea para renombrar.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mv test_copy test_copy2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== rm ==&lt;br /&gt;
&lt;br /&gt;
Borra un fichero o directorio&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rm file2.txt&lt;br /&gt;
rm -r test2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Comprobamos:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ejercicios:&lt;br /&gt;
&lt;br /&gt;
# Crear la siguiente estructura dentro del directorio /tmp (usar los comandos mkdir, touch y cp):&lt;br /&gt;
&lt;br /&gt;
 /tmp&lt;br /&gt;
 ├── carpeta1&lt;br /&gt;
 ├── carpeta2&lt;br /&gt;
 │   ├── fichero1.txt&lt;br /&gt;
 │   └── fichero2.md&lt;br /&gt;
 └── carpeta3&lt;br /&gt;
     ├── fichero1.txt&lt;br /&gt;
     └── fichero2.md&lt;br /&gt;
&lt;br /&gt;
# Basándonos en el ejercicio anterior, cambiar la estructura a la siguiente (usar comandos mv y rm):&lt;br /&gt;
&lt;br /&gt;
 /tmp&lt;br /&gt;
 └── carpeta&lt;br /&gt;
     ├── fichero1.txt&lt;br /&gt;
     └── fichero2.md&lt;br /&gt;
&lt;br /&gt;
= Paso 2: Impresión por pantalla y redirección de salida =&lt;br /&gt;
&lt;br /&gt;
== echo ==&lt;br /&gt;
&lt;br /&gt;
Sirve para imprimir una línea de texto por pantalla o imprimir variables de&lt;br /&gt;
entorno.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo &amp;quot;Hola&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Una variable de entorno es una variable editada con algún valor, por defecto&lt;br /&gt;
existen algunas creadas, como por ejemplo la variable HOME, que contiene el&lt;br /&gt;
directorio del usuario:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo $HOME&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aprovecharemos y crearemos una variable nosotros:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ME=&amp;quot;my name&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Comprobamos:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo $ME&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Redirección de salida ==&lt;br /&gt;
&lt;br /&gt;
&amp;gt; y &amp;gt;&amp;gt; sirve para redirigir una salida. Por ejemplo, utilizando el comando echo,&lt;br /&gt;
podemos enviar un texto dentro de un fichero:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo &amp;quot;Esto es una prueba&amp;quot; &amp;gt; file.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La diferencia entre &amp;gt; y &amp;gt;&amp;gt; es que &amp;gt; sobrescribe lo que haya en el fichero y&lt;br /&gt;
añade el contenido, y &amp;gt;&amp;gt; no sobrescribe, solo añade el nuevo contenido.&lt;br /&gt;
&lt;br /&gt;
Hagamos la prueba:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo &amp;quot;Esto es una prueba&amp;quot; &amp;gt; file.txt&lt;br /&gt;
echo &amp;quot;Esto es una prueba2&amp;quot; &amp;gt; file.txt&lt;br /&gt;
echo &amp;quot;Esto es una prueba&amp;quot; &amp;gt;&amp;gt; file2.txt&lt;br /&gt;
echo &amp;quot;Esto es una prueba2&amp;quot; &amp;gt;&amp;gt; file2.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En cualquier caso, si el fichero no existe, se crea.&lt;br /&gt;
&lt;br /&gt;
= Paso 3: Manejo de ficheros y carpetas avanzado =&lt;br /&gt;
&lt;br /&gt;
== cat ==&lt;br /&gt;
&lt;br /&gt;
Muestra el contenido de un fichero.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat file.txt&lt;br /&gt;
cat file2.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== grep ==&lt;br /&gt;
&lt;br /&gt;
Sirve para buscar coincidencia de un cierto patrón en ficheros y muestra la coincidencia, en caso de encontrarla, por pantalla.&lt;br /&gt;
&lt;br /&gt;
Por ejemplo, para buscar el patrón ''prueba'' en el fichero ''fichero.txt''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ grep -n prueba fichero.txt&lt;br /&gt;
1:Esto es una prueba&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La opción '''-n''' muestra el número de línea.&lt;br /&gt;
&lt;br /&gt;
== wc ==&lt;br /&gt;
&lt;br /&gt;
Sirve para contar el número de palabras, caracteres, líneas o bytes que contiene un fichero.&lt;br /&gt;
&lt;br /&gt;
Las opciones más utilizadas son:&lt;br /&gt;
&lt;br /&gt;
* -l: muestra el número de líneas que contiene el fichero.&lt;br /&gt;
* -w: muestra el número de palabras.&lt;br /&gt;
* -m: muestra el número de caracteres&lt;br /&gt;
* -c: muestra el número de bytes&lt;br /&gt;
&lt;br /&gt;
Probemos y contemos todo en el fichero file2.txt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
wc -l file2.txt&lt;br /&gt;
wc -w file2.txt&lt;br /&gt;
wc -m file2.txt&lt;br /&gt;
wc -c file2.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podemos contar más de un fichero a la vez:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
wc -l file.txt file2.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nos mostrará el conteo de cada fichero y el total.&lt;br /&gt;
&lt;br /&gt;
== Tubería (|) ==&lt;br /&gt;
&lt;br /&gt;
La tubería nos servirá para conectar varios comandos al mismo tiempo, veamos&lt;br /&gt;
unos ejemplos, que siempre se entiende mejor:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat file2.txt | grep prueba&lt;br /&gt;
grep -nr prueba file2.txt | wc -l&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En el primer ejemplo, mostramos el contenido de file2.txt, y esta salida se la&lt;br /&gt;
pasamos al comando grep, el cual busca las líneas que contengan prueba.&lt;br /&gt;
&lt;br /&gt;
En el segundo, buscamos todas las líneas que contengan la palabra prueba, y esta&lt;br /&gt;
salida se la pasamos al comando wc, el cual cuenta las líneas de la salida del&lt;br /&gt;
comando grep.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Redirecciones ==&lt;br /&gt;
&lt;br /&gt;
Vamos a ver unos conceptos antes de seguir:&lt;br /&gt;
&lt;br /&gt;
* Entrada estándar: representa los datos que necesita una aplicación para funcionar, como por ejemplo un archivo de datos o información ingresada desde la terminal y es representado en la terminal como el tipo 0.&lt;br /&gt;
* Salida estándar: es la vía que utilizan las aplicaciones para mostrarte información, allí podemos ver el progreso o simplemente los mensajes que la  aplicación quiera darte en determinado momento y es representado en la terminal como el tipo 1.&lt;br /&gt;
* Error estándar: es la forma en que los programas te informan sobre los problemas que pueden encontrarse al momento de la ejecución y es representado en la terminal como el tipo 2.&lt;br /&gt;
&lt;br /&gt;
Las redirecciones nos sirven para mover la información de un tipo a otro.&lt;br /&gt;
&lt;br /&gt;
Ya vimos previamente el uso de &amp;gt; y &amp;gt;&amp;gt;, y también el |, veamos algunas más:&lt;br /&gt;
&lt;br /&gt;
* comando &amp;lt; fichero: Toma la entrada de fichero&lt;br /&gt;
* comando 2&amp;gt; fichero: Envía la salida de error de comando a fichero&lt;br /&gt;
* comando 2&amp;gt;&amp;amp;1: Envía la salida de error a la salida estándar&lt;br /&gt;
* comando &amp;amp;&amp;gt; fichero: Envía la salida estándar y de error a fichero; equivale a comando &amp;gt; fichero 2&amp;gt;&amp;amp;1&lt;br /&gt;
&lt;br /&gt;
= Paso 4: Usuarios y grupos =&lt;br /&gt;
&lt;br /&gt;
== whoami ==&lt;br /&gt;
&lt;br /&gt;
Sirve para obtener el usuario actual.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
whoami&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Lo más seguro es que nos aparezca ubuntu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== who ==&lt;br /&gt;
&lt;br /&gt;
Es para saber quien está ahora mismo en la máquina conectado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
who&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Seguramente solo estemos nosotros:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ubuntu   pts/0        2019-08-28 13:51 (192.168.122.1)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== su y sudo ==&lt;br /&gt;
&lt;br /&gt;
su (substitute user): sirve para cambiar de usuario. Por ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
su root&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aquí nos pedirá la contraseña del usuario al que queramos cambiar.&lt;br /&gt;
&lt;br /&gt;
sudo (super user do): no todas las distribuciones lo integran, porque es menos&lt;br /&gt;
seguro que su, este comando nos permite ejecutar un comando siendo otro usuario,&lt;br /&gt;
por defecto, si no le damos usuario, lo hará con el usuario root. Si sudo nos&lt;br /&gt;
pide contraseña, nos pide la contraseña del usuario, ya que el usuario es que el&lt;br /&gt;
tiene permisos para usar sudo o no.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo ls -a /root&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Si tuviéramos por ejemplo un usuario 'practica' y quisíeramos ejecutar un&lt;br /&gt;
comando en su nombre:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo -u practica ls&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== adduser y useradd ==&lt;br /&gt;
&lt;br /&gt;
Ambos comandos sirven para crear un nuevo usuario, pero tienen sus diferencias.&lt;br /&gt;
&lt;br /&gt;
useradd es un comando del sistema, y adduser es un script escrito en perl que&lt;br /&gt;
utiliza el comando useradd. La diferencia así de primeras es que adduser nos&lt;br /&gt;
crear el directorio /home/usuario y useradd necesita la opción -m para hacer lo&lt;br /&gt;
mismo. Se puede utilizar el que se quiera, aunque es más recomendable useradd,&lt;br /&gt;
ya que funcionará igual en todas las distribuciones.&lt;br /&gt;
&lt;br /&gt;
Vamos a añadir un usuario practica con su directorio en /home (notemos que&lt;br /&gt;
necesitamos permisos de super usuario para realizar esta tarea):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo useradd -m practica&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vamos a comprobar que el directorio home está creado y que el usuario practica&lt;br /&gt;
funciona:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls /home  # veremos el directorio practica&lt;br /&gt;
sudo -u practica whoami  # nos dirá que somo el usuario practica&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== passwd ==&lt;br /&gt;
&lt;br /&gt;
Sirve para modificar la contraseña de un usuario, por ejemplo, vamos a modificar&lt;br /&gt;
la contraseña del usuario que hemos creado previamente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo passwd practica&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nos preguntará dos veces la contraseña, y ya la tendremos actualizadas. Vamos&lt;br /&gt;
ahora a probar ahora el comando su para cambiar de usuario:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
su practica&lt;br /&gt;
whoami&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Veremos que hemos cambiado de usuario, para cerrar este usuario, escribimos&lt;br /&gt;
'exit' o pulsamos 'CTLR + D'&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== deluser y userdel ==&lt;br /&gt;
&lt;br /&gt;
Ambos sirven para borrar un usuario, similar a adduser y useradd, userdel es el&lt;br /&gt;
comando y deluser el script.&lt;br /&gt;
&lt;br /&gt;
Vamos a borrar el usuario que hemos creado, incluyendo el borrado de su /home&lt;br /&gt;
(opción -r):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
userdel -r practica&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Comprobemos que ya no tenemos usuario ni /home:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls /home&lt;br /&gt;
sudo -u practica whoami&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== addgroup y groupadd ==&lt;br /&gt;
&lt;br /&gt;
Ambos sirven para crear un grupo. Los grupos sirven para agrupar a los usuarios&lt;br /&gt;
y que estos tengan unos mismos permisos. Por ejemplo, cuando instalamos algunas&lt;br /&gt;
herramientas como por ejemplo docker, este crea el grupo docker automáticamente&lt;br /&gt;
para que fácilmente podamos añadir a un usuario al grupo, y este tenga los&lt;br /&gt;
permisos para trabajar con dicha herramienta.&lt;br /&gt;
&lt;br /&gt;
Vamos a crear un nuevo grupo, vamos a llamarle invitado:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo groupadd invitado&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== usermod y groups ==&lt;br /&gt;
&lt;br /&gt;
usermod es utilizado para asignar un grupo a un usuario.&lt;br /&gt;
&lt;br /&gt;
groups es utilizado para ver los grupos a los que pertenece un usuario.&lt;br /&gt;
&lt;br /&gt;
Vamos a añadir a un usuario practica, lo vamos a añadir al grupo invitado y&lt;br /&gt;
veremos los grupos a los que pertenece:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo useradd -m practica&lt;br /&gt;
sudo usermod -G invitado practica&lt;br /&gt;
groups practica&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Veremos que el usuario práctica pertenece al grupo invitado.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== delgroup y groupdel ==&lt;br /&gt;
&lt;br /&gt;
Ambos sirven para eliminar un grupo. Vamos a eliminar el grupo que hemos creado&lt;br /&gt;
anteriormente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo groupdel invitado&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podemos observar ahora que el usuario practica no pertenece al grupo invitado:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
groups practica&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Paso 5: Permisos =&lt;br /&gt;
&lt;br /&gt;
== Nomenclatura rwx y numérica ==&lt;br /&gt;
&lt;br /&gt;
Si hacemos un ls -l, la primera cadena que nos aparece son los permisos del&lt;br /&gt;
fichero (-rwxrw-r--), podemos dividirlo en 4 elementos:&lt;br /&gt;
&lt;br /&gt;
-    (rwx)   (rw-)  (r--)&lt;br /&gt;
|      |       |      |&lt;br /&gt;
type  owner   group  others&lt;br /&gt;
&lt;br /&gt;
* type: el tipo de fichero, pudiendo ser d (directorio), l (enlace simbólico), - (fichero normal)&lt;br /&gt;
* owner: permisos de propietario&lt;br /&gt;
* group: permisos de grupo&lt;br /&gt;
* others: permisos para los demás usuarios&lt;br /&gt;
&lt;br /&gt;
Significado de los permisos:&lt;br /&gt;
&lt;br /&gt;
* r: permisos de lectura&lt;br /&gt;
* w: permisos de escritura&lt;br /&gt;
* x: permisos de ejecución&lt;br /&gt;
&lt;br /&gt;
Por último, existe un modo abreviado para estos permisos que se utiliza con&lt;br /&gt;
números.&lt;br /&gt;
&lt;br /&gt;
rwx&lt;br /&gt;
001 en binario es 1 en decimal. Permisos de ejecución&lt;br /&gt;
010 en binario es 2 en decimal. Permisos de escritura&lt;br /&gt;
100 en binario es 4 en decimal. Permisos de lectura&lt;br /&gt;
&lt;br /&gt;
La suma de los permisos, nos da el valor numérico. Veamos un ejemplo:&lt;br /&gt;
rwx rw- r--&lt;br /&gt;
111 110 100&lt;br /&gt;
 7   6   4&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== chmod ==&lt;br /&gt;
&lt;br /&gt;
Permite cambiar los permisos de acceso a un fichero o directorio. Podemos dar&lt;br /&gt;
permisos de dos formas diferentes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== modo carácter ===&lt;br /&gt;
&lt;br /&gt;
Veamos primero unos detalles:&lt;br /&gt;
&lt;br /&gt;
Clases de usuario:&lt;br /&gt;
&lt;br /&gt;
* owner (u)&lt;br /&gt;
* group (g)&lt;br /&gt;
* others (o)&lt;br /&gt;
* all (a)&lt;br /&gt;
&lt;br /&gt;
Modificador:&lt;br /&gt;
&lt;br /&gt;
* añadir (+)&lt;br /&gt;
* eliminar (-)&lt;br /&gt;
* sobrescribir (=)&lt;br /&gt;
&lt;br /&gt;
Para dar permisos tendríamos que seleccionar la clase de usuario el modificador&lt;br /&gt;
y los permisos, veamos un ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chmod u+x file  # añadimos permisos de ejecución al usuario&lt;br /&gt;
chmod go-w file  # quitamos permisos de escritura al grupo y a otros usuarios&lt;br /&gt;
chmod u=rwx,go=r file  # Al usuario le damos todos los permisos, y al grupo y otros solo le damos permisos de lectura&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Modo octal ===&lt;br /&gt;
&lt;br /&gt;
Con el modo octacl, es como si siempre utilizáramos el modificar sobrescribir,&lt;br /&gt;
pongamos algunos ejemplos:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chmod 744 file  # Al usuario le damos todos los permisos, y al grupo y otros solo le damos permisos de lectura&lt;br /&gt;
chmod 777 file  # Todos tienen permisos para todo&lt;br /&gt;
chmod 600 file  # solo el propietario tiene permisos de lectura y escritura&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Ejemplos ===&lt;br /&gt;
&lt;br /&gt;
Vamos a ver como funciona el tema de permisos con unos ejemplos. Vamos a crear&lt;br /&gt;
un fichero pruebas y le vamos a quitar los permisos de escritura a nuestro&lt;br /&gt;
usuario, y le vamos a dar permisos de escritura a otros:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
touch pruebas&lt;br /&gt;
ls -l pruebas  # de esta forma veremos que por defecto los permisos son rw-rw-r--&lt;br /&gt;
chmod u-w,o+w pruebas&lt;br /&gt;
ls -l pruebas  # ahora los permisos deberían ser -w-rw-rw-&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Una vez dado los permisos, veamos que con nuestro usuario podemos leer pero no&lt;br /&gt;
escribir:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat pruebas&lt;br /&gt;
echo &amp;quot;probando&amp;quot; &amp;gt; pruebas&lt;br /&gt;
exit&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Y ahora vamos a ver que el usuario pruebas, puede leer y escribir:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
su practica&lt;br /&gt;
cat pruebas&lt;br /&gt;
echo &amp;quot;probando&amp;quot; &amp;gt; pruebas&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== chown ==&lt;br /&gt;
&lt;br /&gt;
Permite cambiar el propietario de un fichero o directorio.&lt;br /&gt;
&lt;br /&gt;
Vamos por ejemplo a pasarle ahora el fichero pruebas al usuario practica:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo chown practica pruebas&lt;br /&gt;
ls -l pruebas&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Veremos que el usuario actual ahora es pruebas, aunque vemos que el ls muestra&lt;br /&gt;
lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
-r--rw-rw- 1 practica ubuntu 9 Aug 29 09:34 pruebas&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hay que comentar un detalle, y es que los ficheros y directorios tienen asignado&lt;br /&gt;
un usuario y un grupo, por defecto se utiliza el mismo usuario como grupo&lt;br /&gt;
cuando creamos un nuevo fichero o directorio. Si queremos que cuando cambiemos&lt;br /&gt;
el propietario, cambiar tambien el grupo del fichero, podemos hacerlo de la&lt;br /&gt;
siguiente forma:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo chown practica:practica pruebas&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Una vez hecho esto, vamos ahora a probar que los permisos siguen funcionando&lt;br /&gt;
como antes, ahora con el usuario ubuntu, deberíamos de poder leer y escribir en&lt;br /&gt;
el fichero pruebas, y con el usuario practica, solo leer, esto es así por que&lt;br /&gt;
ahora el propitario es practica:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Pruebas usuario ubuntu&lt;br /&gt;
cat pruebas&lt;br /&gt;
echo test &amp;gt;&amp;gt; pruebas&lt;br /&gt;
# Pruebas usuario practica&lt;br /&gt;
su practica&lt;br /&gt;
cat pruebas&lt;br /&gt;
echo &amp;quot;probando&amp;quot; &amp;gt; pruebas&lt;br /&gt;
exit&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Paso 6: Procesos =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== ps ==&lt;br /&gt;
&lt;br /&gt;
Sirve para ver que procesos están ejecutándose en el sistema, veamos un ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ps aux  # con la opción aux mostraremos todos los procesos del sistema&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cada línea es un proceso, y cada proceso muestra su PID, usuario, cantidad de&lt;br /&gt;
memoria y cpu utilizada, comando y otros detalles.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
man kill &amp;amp;  # añadir el &amp;amp; al final de un comando hace que este se ejecute en segundo plano, por lo que se quedará abierto&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La salida de este comando nos mostrará el PID que tiene ese proceso que acabamos&lt;br /&gt;
de ejecutar, vamos a comprobarlo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ps aux | grep &amp;quot;man kill&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Veremos que el PID coincide.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== kill ==&lt;br /&gt;
&lt;br /&gt;
Este comando nos servirá para matar un proceso. kill se utiliza seguido de una&lt;br /&gt;
señal para enviar al proceso seguido de uno o varios PID. para ver las señales&lt;br /&gt;
disponibles, podemos listarlas:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kill -l&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Las más utilizadas suele ser SIGTERM y SIGKILL, la primera intenta terminar el&lt;br /&gt;
proceso de forma poco abrupta, y la segunda suele utilizarse cuando el proceso&lt;br /&gt;
no atiende a esta primera señal. Vamos ahora a terminar el proceso que creamos&lt;br /&gt;
antes, si no recordamos el PID, busquémoslo de nuevo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ps aux | grep &amp;quot;man kill&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enviamos señal para terminar el proceso y comprobamos que ha terminado:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kill -SIGTERM 8470&lt;br /&gt;
ps aux | grep &amp;quot;man kill&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
También podemos notar que en el listado de señales, hay unos números, podemos&lt;br /&gt;
utilizar esos números en vez de las palabras, por ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
man kill &amp;amp;&lt;br /&gt;
kill -15 PID_COMANDO_PREVIO&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Comprobamos que el proceso ha terminado correctamente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ps aux | grep &amp;quot;man kill&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Paso 7: Estado CPU, RAM y Disco =&lt;br /&gt;
&lt;br /&gt;
== top ==&lt;br /&gt;
&lt;br /&gt;
Este comando nos servirá para ver el listado de procesos y el estado de la CPU y&lt;br /&gt;
memoria.&lt;br /&gt;
&lt;br /&gt;
Probemos el comando y observemos detalladamente la salida:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
top&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para salir, pulsamos q.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== df y du ==&lt;br /&gt;
&lt;br /&gt;
df (disk free) y du (disk usage). Ambas son utilidades para mostrar el uso de&lt;br /&gt;
los discos.&lt;br /&gt;
&lt;br /&gt;
Con df mostraremos la información del espacio en cada dispositivo montado:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
df&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Estos comandos que nos muestran el tamaño de los ficheros, casi siempre tienen&lt;br /&gt;
una opción para mostrarlo en un formato más legible (-h)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
df -h&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mucho mejor.&lt;br /&gt;
&lt;br /&gt;
Ahora veamos el comando du, el cual nos mostrará el tamaño de un fichero o&lt;br /&gt;
directorio y sus subdirectorios, no olvidemos el -h:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
du -h /home/ubuntu&lt;br /&gt;
du -h /home/ubuntu/pruebas&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Si solo quisíeramos saber el total de una carpeta y nos nos interesan sus&lt;br /&gt;
subcarpetas, podemos utilizar la opción -s:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
du -sh /home/ubuntu&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== free ==&lt;br /&gt;
&lt;br /&gt;
Sirve para ver el estado de la memoria, como siempre, opción -h:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
free -h&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== lsblk ==&lt;br /&gt;
&lt;br /&gt;
Nos muestra la información de todos los dispositivos de bloques (discos duros,&lt;br /&gt;
pendrivers, CD_ROM, SSD, ...).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lsblk&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En la siguiente práctica se utilizará más a fondo este comando, ya que&lt;br /&gt;
trabajaremos con dispositivos.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Paso 8: Gestión de paquetes de software y repositorios =&lt;br /&gt;
&lt;br /&gt;
Los sistemas Linux incluyen, además de las herramientas básicas del sistema operativo, repositorios de software que puede ser opcionalmente instalados por el administrador del sistema. Los fabricantes de las distribuciones de Linux incluyen paquetes de software listos para ser instalados que se integran con el sistema.&lt;br /&gt;
&lt;br /&gt;
Un paquete incluye el software necesario para que una cierta aplicación funcione correctamente, así como sus paquetes de dependencia.&lt;br /&gt;
&lt;br /&gt;
En Ubuntu, la herramienta de gestión de paquetes de software y repositorios se llama '''apt'''.&lt;br /&gt;
&lt;br /&gt;
=== Listado de repositorios de paquetes de software ===&lt;br /&gt;
&lt;br /&gt;
En Ubuntu el listado de repositorios se encuentra en el fichero /etc/apt/sources.list. Podemos comprobar que repositorios tenemos añadido:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat /etc/apt/sources.list&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Actualización del listado de paquetes de software ===&lt;br /&gt;
&lt;br /&gt;
Para actualizar el listado de paquetes utilizaremos el comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt update&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Instalación un nuevo paquete ===&lt;br /&gt;
&lt;br /&gt;
Para instalar un nuevo paquete, utilizaremos la orden install, por ejemplo, vamos a instalar tree, similar al ls pero muestra el arbol de directorios:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt install tree&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Desinstalación de un paquete ===&lt;br /&gt;
&lt;br /&gt;
Usaremos la orden purge o la orden remove, purge nos lo eliminad todo, y remove mantiene la configuración en el caso de que el paquete la tuviese. Vamos a eliminar el paquete instalado previamente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt purge tree&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Paso 9: Módulos =&lt;br /&gt;
&lt;br /&gt;
Los módulos del kernel de Linux son partes que podemos añadir o quitar de forma&lt;br /&gt;
sencilla con el fin de añadir o quitar funcionalidad. Por ejemplo, algunas de&lt;br /&gt;
estas funcionalidades son:&lt;br /&gt;
&lt;br /&gt;
* Registrar temperaturas de nuestros componentes&lt;br /&gt;
* Hacer funcionr la tarjeta de red wifi&lt;br /&gt;
* Cargar los drivers de una tarjeta gráfica&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== lsmod ==&lt;br /&gt;
&lt;br /&gt;
Comando para ver los módulos que estamos usando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lsmod&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== lspci y usb-devices ==&lt;br /&gt;
&lt;br /&gt;
Estos comandos nos servirán para ver el hardware que está conectado a nuestro&lt;br /&gt;
ordenador. Con lspci veremos el listado del hardware integrado y con usb-devices&lt;br /&gt;
el que está conectado por hardware.&lt;br /&gt;
&lt;br /&gt;
Normalmente, como los módulos se utilizan para dar funcionalidad un hardware,&lt;br /&gt;
aquí en los listado de hardware podremos ver que módulo está utilizando cada&lt;br /&gt;
hardware:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lspci -v&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Veremos una línea en algunos dispositivos que nos diga que módulo estamos&lt;br /&gt;
usando, pongo un pequeño trozo de la salida del comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
00:1f.2 SATA controller: Intel Corporation 82801IR/IO/IH (ICH9R/DO/DH) 6 port SATA Controller [AHCI mode] (rev 02) (prog-if 01 [AHCI 1.0])&lt;br /&gt;
    Subsystem: Red Hat, Inc. QEMU Virtual Machine&lt;br /&gt;
    Flags: bus master, fast devsel, latency 0, IRQ 35&lt;br /&gt;
    I/O ports at c0c0 [size=32]&lt;br /&gt;
    Memory at fcc1d000 (32-bit, non-prefetchable) [size=4K]&lt;br /&gt;
    Capabilities: &amp;lt;access denied&amp;gt;&lt;br /&gt;
    Kernel driver in use: ahci&lt;br /&gt;
    Kernel modules: ahci&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vemos que el hardware INTEl Corporation está utilizando el módulo ahci.&lt;br /&gt;
&lt;br /&gt;
Probemos ahora con usb-devices:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
usb-devices&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Veamos un trozo de código:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
T:  Bus=01 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#=  2 Spd=480 MxCh= 0&lt;br /&gt;
D:  Ver= 2.00 Cls=00(&amp;gt;ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs=  1&lt;br /&gt;
P:  Vendor=0627 ProdID=0001 Rev=00.00&lt;br /&gt;
S:  Manufacturer=QEMU&lt;br /&gt;
S:  Product=QEMU USB Tablet&lt;br /&gt;
S:  SerialNumber=42&lt;br /&gt;
C:  #Ifs= 1 Cfg#= 1 Atr=a0 MxPwr=100mA&lt;br /&gt;
I:  If#= 0 Alt= 0 #EPs= 1 Cls=03(HID  ) Sub=00 Prot=00 Driver=usbhid&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vemos que el teclado está utilizando el módulo usbhid&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== insmod ==&lt;br /&gt;
&lt;br /&gt;
Sirve para cargar un módulo en el kernel, imaginemos que tenemos un módulo que&lt;br /&gt;
se llama modulo1:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo insmod modulo1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== rmmod ==&lt;br /&gt;
&lt;br /&gt;
Sirve para eliminar un módulo de kernel. Imaginemos que queremos borrar un&lt;br /&gt;
módulo cargado anteriormente con el nombre modulo1:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo rmmod modulo1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Marramfer12</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Administraci%C3%B3n_b%C3%A1sica&amp;diff=4546</id>
		<title>Administración básica</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Administraci%C3%B3n_b%C3%A1sica&amp;diff=4546"/>
				<updated>2019-11-13T10:13:07Z</updated>
		
		<summary type="html">&lt;p&gt;Marramfer12: /* Paso 0: Breve introducción al sistema Linux */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Para realizar esta práctica utilizaremos una de las máquinas virtuales que generamos en la práctica anterior.&lt;br /&gt;
&lt;br /&gt;
En esta práctica aprenderemos a utilizar el interprete de ordenes (también conocido como ''[https://www.traficantes.net/sites/default/files/pdfs/En%20el%20principio%20fue...-TdS.pdf línea de comandos]'') y a aprender nociones básicas de administración de sistemas Linux.&lt;br /&gt;
&lt;br /&gt;
= Paso 0: Breve introducción al sistema Linux =&lt;br /&gt;
&lt;br /&gt;
== Estructura básica del sistema de archivos ==&lt;br /&gt;
&lt;br /&gt;
En un sistema Linux, todas las carpetas y ficheros en el sistema de fichero pende de la carpeta raíz que se representa con la /.&lt;br /&gt;
&lt;br /&gt;
 /&lt;br /&gt;
 ├── bin&lt;br /&gt;
 ├── usr&lt;br /&gt;
 │   ├── local&lt;br /&gt;
 │   ├── bin&lt;br /&gt;
 │   └── ...&lt;br /&gt;
 ├── dev&lt;br /&gt;
 │   ├── sda&lt;br /&gt;
 │   ├── sda1&lt;br /&gt;
 │   └── ...&lt;br /&gt;
 ├── home&lt;br /&gt;
 │   ├── practica&lt;br /&gt;
 │   │   ├── tema1.pdf&lt;br /&gt;
 │   │   ├── boletin1.pdf&lt;br /&gt;
 │   │   └── ...&lt;br /&gt;
 │   ├── profesor&lt;br /&gt;
 │   └── ...&lt;br /&gt;
 └── etc&lt;br /&gt;
     ├── firefox&lt;br /&gt;
     ├── libvirt&lt;br /&gt;
     ├── ...&lt;br /&gt;
     └── ...&lt;br /&gt;
&lt;br /&gt;
Como puedes observar, el sistema de fichero emplea una estructura de árbol.&lt;br /&gt;
&lt;br /&gt;
== Nociones básicas ==&lt;br /&gt;
&lt;br /&gt;
·Aplicaciones con nombres compuestos: usar guion entre palabras&lt;br /&gt;
·Nombres con espacios en blanco: Escribir entre comillas dobles&lt;br /&gt;
·Espacios en blanco para separar ordenes (ej: instalar varios paquetes )&lt;br /&gt;
·Formato general de una orden: comando [-opciones] [argumentos]&lt;br /&gt;
·IMPORTANTE: Diferencia entre mayúsculas y minúsculas&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Carpetas . y .. ==&lt;br /&gt;
&lt;br /&gt;
Toda carpeta en un sistema Linux dispone de dos pseudocarpetas, la '''.''' y la '''..'':&lt;br /&gt;
&lt;br /&gt;
* La pseudocarpeta '''..''' hace referencia a la carpeta padre que contiene a esta carpeta.&lt;br /&gt;
* La pseudocarpeta '''.''' hace referencia a la carpeta actual, es por tanto una autoreferencia.&lt;br /&gt;
&lt;br /&gt;
En el caso de la carpeta raíz, la pseudocarpeta '''.''' y '''..''' hacen referencia a la propia carpeta raíz, se trata, por tanto de una excepción.&lt;br /&gt;
&lt;br /&gt;
== Directorio de trabajo actual y la orden cd ==&lt;br /&gt;
&lt;br /&gt;
Cada interprete de ordenes dispone de una ''carpeta de trabajo actual'' ('''c'''urrent '''w''orking '''d''irectory, en inglés). La carpeta de trabajo actual se puede modificar con la orden '''cd''' ('''c'''hange '''d'''irectory, en inglés).&lt;br /&gt;
&lt;br /&gt;
Por ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ cd ..&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nos situaría en la carpeta padre, empleando una ruta relativa.&lt;br /&gt;
&lt;br /&gt;
Si volvemos a escribir desde /home &amp;quot; cd .. &amp;quot; nos lleva a '''/$''' &lt;br /&gt;
&lt;br /&gt;
Para situarnos en el raíz, podemos emplear una ruta absoluta:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ cd /&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En caso de que queramos volver a la carpeta de usuario, bastaría con invocar a '''cd''' sin más o ''' cd ~ '''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ cd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''MUY IMPORTANTE''': No es lo mismo cd.. que ''' cd ... ''', es necesario el espacio después del cd.&lt;br /&gt;
== Rutas absolutas, rutas relativas ==&lt;br /&gt;
&lt;br /&gt;
Para hacer referencia a un fichero o una carpeta se usan ruta absolutas o rutas relativas.&lt;br /&gt;
&lt;br /&gt;
Las rutas absolutas siempre empieza por /, de manera que toman como punto de referencia la carpeta raíz (/). Por ejemplo, una ruta absoluta a la carpeta '''prueba''' que está almacenada en la carpeta del usuario '''ubuntu''' es '/home/ubuntu/prueba/'.&lt;br /&gt;
&lt;br /&gt;
Las ruta relativa toma como referencia la carpeta de trabajo actual. Para averiguar la carpeta de trabajo actual disponemos de la orden '''pwd'''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ pwd&lt;br /&gt;
/home/ubuntu&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En base a la carpeta de trabajo actual, empleando la pseudocarpeta '''..''', se puede construir rutas relativas. Por ejemplo, para referenciar un fichero '''fichero.txt''' en la carpeta temporal, podemos emplear la ruta relativa '''../../tmp/fichero.txt'''.&lt;br /&gt;
&lt;br /&gt;
Aunque probablemente sea más cómodo emplear una ruta absoluta en este caso, que sería '''/tmp/fichero.txt'''.&lt;br /&gt;
&lt;br /&gt;
== Intérprete de órdenes ==&lt;br /&gt;
&lt;br /&gt;
El intérprete de órdenes es un lanzador de aplicaciones textual que emplea el teclado como dispositivo de entrada de datos. Mediante el teclado, se escribe el nombre del programa que se quiere lanzar y al pulsa la tecla ''intro'' el intérprete de ordenes ejecutara dicho programa. Por defecto, el intérprete de ordenes que emplea Ubuntu por defecto es '''bash'''.&lt;br /&gt;
&lt;br /&gt;
== man: ver la página de manual de una orden ==&lt;br /&gt;
&lt;br /&gt;
La orden '''man''' te será útil para ver las páginas de manual.&lt;br /&gt;
&lt;br /&gt;
Su estructura básica es:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
man &amp;lt;comando&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aunque también se utiliza con la opción ''' -a ''' de All, que también muestra las entradas comenzadas por '''.''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
man -a &amp;lt;comando&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Este programa toma como entrada el nombre de la orden de la que quieres consultar su página de manual, por ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
man ls&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nos da información del manual de la orden '''ls'''.&lt;br /&gt;
&lt;br /&gt;
Para salir de la página de manual, pulsa la tecla '''q''' (la primera letra de la palabra '''quit''', en inglés).&lt;br /&gt;
&lt;br /&gt;
quit = salir&lt;br /&gt;
&lt;br /&gt;
Normalmente, los programas ofrecen opciones de ayuda, como '''--help'''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
man --help&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
También se puede emplear la versión compacta a la hora de especificar opciones.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
man -h&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En general, todas las ordenes suelen ofrecer una opción de ayuda.&lt;br /&gt;
&lt;br /&gt;
= Paso 1: Operaciones básicas con el sistema de ficheros =&lt;br /&gt;
&lt;br /&gt;
== ls ==&lt;br /&gt;
&lt;br /&gt;
Lista los ficheros y carpetas. Si no se especifica nada, muestra los ficheros y carpetas que contiene la carpeta de trabajo actual.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Si se especifica una ruta, muestra las carpetas y ficheros contenidos en dicha ruta, por ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ ls /&lt;br /&gt;
bin  boot  data  dev  etc  home  initrd.img  initrd.img.old  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  snap  srv  sys  tmp  usr  var  vmlinuz  vmlinuz.old&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al emplear '''/''' como ruta absoluta, muestra el contenido de la carpeta raíz.&lt;br /&gt;
&lt;br /&gt;
Las opciones más usadas de este programa suelen ser:&lt;br /&gt;
&lt;br /&gt;
* -a: muestra los ficheros y carpetas ''ocultos''. En Linux, cualquier fichero o carpeta cuyo nombre empiece por . se considera ''oculto''. Esto incluye también en el listado las pseudocarpetas . y ..&lt;br /&gt;
* -l: formato largo, que muestra la fecha de última modificación, propiertario, grupo, tamaño en bytes y nombre:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ ls -a&lt;br /&gt;
.  ..  .bash_history  .bash_logout  .bashrc  .profile  .ssh&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ambas opciones se puede combinar:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ ls -la /&lt;br /&gt;
total 92&lt;br /&gt;
drwxr-xr-x  24 root root  4096 Aug 28 09:50 .&lt;br /&gt;
drwxr-xr-x  24 root root  4096 Aug 28 09:50 ..&lt;br /&gt;
drwxr-xr-x   2 root root  4096 Aug 22 12:37 bin&lt;br /&gt;
drwxr-xr-x   4 root root  4096 Aug 22 12:37 boot&lt;br /&gt;
drwx------   3 root root  4096 Aug 28 09:50 data&lt;br /&gt;
drwxr-xr-x  18 root root  3780 Aug 28 09:46 dev&lt;br /&gt;
drwxr-xr-x  93 root root  4096 Aug 28 13:51 etc&lt;br /&gt;
drwxr-xr-x   3 root root  4096 Aug 28 09:46 home&lt;br /&gt;
lrwxrwxrwx   1 root root    33 Aug 22 12:35 initrd.img -&amp;gt; boot/initrd.img-4.15.0-58-generic&lt;br /&gt;
lrwxrwxrwx   1 root root    33 Aug 22 12:35 initrd.img.old -&amp;gt; boot/initrd.img-4.15.0-58-generic&lt;br /&gt;
drwxr-xr-x  20 root root  4096 Aug 22 12:35 lib&lt;br /&gt;
drwxr-xr-x   2 root root  4096 Aug 22 12:34 lib64&lt;br /&gt;
drwx------   2 root root 16384 Aug 22 12:36 lost+found&lt;br /&gt;
drwxr-xr-x   2 root root  4096 Aug 22 12:34 media&lt;br /&gt;
drwxr-xr-x   2 root root  4096 Aug 22 12:34 mnt&lt;br /&gt;
drwxr-xr-x   3 root root  4096 Aug 28 09:49 opt&lt;br /&gt;
dr-xr-xr-x 111 root root     0 Aug 28 09:46 proc&lt;br /&gt;
drwx------   3 root root  4096 Aug 28 09:46 root&lt;br /&gt;
drwxr-xr-x  26 root root   940 Aug 28 13:51 run&lt;br /&gt;
drwxr-xr-x   2 root root  4096 Aug 28 09:49 sbin&lt;br /&gt;
drwxr-xr-x   2 root root  4096 Aug 28 09:46 snap&lt;br /&gt;
drwxr-xr-x   2 root root  4096 Aug 22 12:34 srv&lt;br /&gt;
dr-xr-xr-x  13 root root     0 Aug 28 09:46 sys&lt;br /&gt;
drwxrwxrwt  10 root root  4096 Aug 28 16:00 tmp&lt;br /&gt;
drwxr-xr-x  11 root root  4096 Aug 28 09:49 usr&lt;br /&gt;
drwxr-xr-x  13 root root  4096 Aug 22 12:36 var&lt;br /&gt;
lrwxrwxrwx   1 root root    30 Aug 22 12:35 vmlinuz -&amp;gt; boot/vmlinuz-4.15.0-58-generic&lt;br /&gt;
lrwxrwxrwx   1 root root    30 Aug 22 12:35 vmlinuz.old -&amp;gt; boot/vmlinuz-4.15.0-58-generic&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Los permisos se emplean en base a tres capacidades:&lt;br /&gt;
&lt;br /&gt;
* lectura, que se codifica con '''r''' (read, en inglés).&lt;br /&gt;
* escritura, que se codifica con '''w''' (write, en inglés).&lt;br /&gt;
* ejecutación, que se codifica con '''x''' (execute, en inglés).&lt;br /&gt;
&lt;br /&gt;
La primera columna muestra los permisos que codifican:&lt;br /&gt;
&lt;br /&gt;
* Tipo de entrada: '''d''' indica ''directorio'' (''carpeta'').&lt;br /&gt;
* Permisos del propietario, primera terna de rwx&lt;br /&gt;
* Permisos del grupo, segunda terna de rwx&lt;br /&gt;
* Permisos para el resto del mundo, tercera terna de rwx.&lt;br /&gt;
&lt;br /&gt;
A continución, aparecen el propietario y el grupo, seguidos de la fecha de última modificación y el nombre del fichero o carpeta.&lt;br /&gt;
&lt;br /&gt;
== mkdir ==&lt;br /&gt;
&lt;br /&gt;
Crea un nuevo directorio.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ mkdir test&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Crea una carpeta test en el directorio actual.&lt;br /&gt;
&lt;br /&gt;
Comprobemos que se ha creado bien:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ ls&lt;br /&gt;
test&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Con la opción '''-p''', permite crear sucesivas carpetas anidadas de una sola vez, por ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ mkdir -p a/b/c&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Que crea la siguiente estructura de carpetas.&lt;br /&gt;
&lt;br /&gt;
 a&lt;br /&gt;
 └── b&lt;br /&gt;
     └── c&lt;br /&gt;
&lt;br /&gt;
== touch ==&lt;br /&gt;
&lt;br /&gt;
Crea un nuevo fichero vacío (sin contenido) con el nombre que especifiquemos.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ touch file.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Comprobamos que el fichero se ha creado correctamente.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ ls&lt;br /&gt;
file.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== cp ==&lt;br /&gt;
&lt;br /&gt;
Copia un fichero o directorio.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ cp file.txt file_copy.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para copia una carpeta y su contenido tenemos que usar la opción -r (recursivo).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ cp -r test test_copy&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Comprobamos el resultado con la orden '''ls'''.&lt;br /&gt;
&lt;br /&gt;
== mv ==&lt;br /&gt;
&lt;br /&gt;
Mueve fichero o carpeta.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mv file_copy.txt file2.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
También se emplea para renombrar.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mv test_copy test_copy2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== rm ==&lt;br /&gt;
&lt;br /&gt;
Borra un fichero o directorio&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rm file2.txt&lt;br /&gt;
rm -r test2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Comprobamos:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ejercicios:&lt;br /&gt;
&lt;br /&gt;
# Crear la siguiente estructura dentro del directorio /tmp (usar los comandos mkdir, touch y cp):&lt;br /&gt;
&lt;br /&gt;
 /tmp&lt;br /&gt;
 ├── carpeta1&lt;br /&gt;
 ├── carpeta2&lt;br /&gt;
 │   ├── fichero1.txt&lt;br /&gt;
 │   └── fichero2.md&lt;br /&gt;
 └── carpeta3&lt;br /&gt;
     ├── fichero1.txt&lt;br /&gt;
     └── fichero2.md&lt;br /&gt;
&lt;br /&gt;
# Basándonos en el ejercicio anterior, cambiar la estructura a la siguiente (usar comandos mv y rm):&lt;br /&gt;
&lt;br /&gt;
 /tmp&lt;br /&gt;
 └── carpeta&lt;br /&gt;
     ├── fichero1.txt&lt;br /&gt;
     └── fichero2.md&lt;br /&gt;
&lt;br /&gt;
= Paso 2: Impresión por pantalla y redirección de salida =&lt;br /&gt;
&lt;br /&gt;
== echo ==&lt;br /&gt;
&lt;br /&gt;
Sirve para imprimir una línea de texto por pantalla o imprimir variables de&lt;br /&gt;
entorno.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo &amp;quot;Hola&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Una variable de entorno es una variable editada con algún valor, por defecto&lt;br /&gt;
existen algunas creadas, como por ejemplo la variable HOME, que contiene el&lt;br /&gt;
directorio del usuario:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo $HOME&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aprovecharemos y crearemos una variable nosotros:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ME=&amp;quot;my name&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Comprobamos:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo $ME&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Redirección de salida ==&lt;br /&gt;
&lt;br /&gt;
&amp;gt; y &amp;gt;&amp;gt; sirve para redirigir una salida. Por ejemplo, utilizando el comando echo,&lt;br /&gt;
podemos enviar un texto dentro de un fichero:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo &amp;quot;Esto es una prueba&amp;quot; &amp;gt; file.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La diferencia entre &amp;gt; y &amp;gt;&amp;gt; es que &amp;gt; sobrescribe lo que haya en el fichero y&lt;br /&gt;
añade el contenido, y &amp;gt;&amp;gt; no sobrescribe, solo añade el nuevo contenido.&lt;br /&gt;
&lt;br /&gt;
Hagamos la prueba:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo &amp;quot;Esto es una prueba&amp;quot; &amp;gt; file.txt&lt;br /&gt;
echo &amp;quot;Esto es una prueba2&amp;quot; &amp;gt; file.txt&lt;br /&gt;
echo &amp;quot;Esto es una prueba&amp;quot; &amp;gt;&amp;gt; file2.txt&lt;br /&gt;
echo &amp;quot;Esto es una prueba2&amp;quot; &amp;gt;&amp;gt; file2.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En cualquier caso, si el fichero no existe, se crea.&lt;br /&gt;
&lt;br /&gt;
= Paso 3: Manejo de ficheros y carpetas avanzado =&lt;br /&gt;
&lt;br /&gt;
== cat ==&lt;br /&gt;
&lt;br /&gt;
Muestra el contenido de un fichero.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat file.txt&lt;br /&gt;
cat file2.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== grep ==&lt;br /&gt;
&lt;br /&gt;
Sirve para buscar coincidencia de un cierto patrón en ficheros y muestra la coincidencia, en caso de encontrarla, por pantalla.&lt;br /&gt;
&lt;br /&gt;
Por ejemplo, para buscar el patrón ''prueba'' en el fichero ''fichero.txt''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ grep -n prueba fichero.txt&lt;br /&gt;
1:Esto es una prueba&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La opción '''-n''' muestra el número de línea.&lt;br /&gt;
&lt;br /&gt;
== wc ==&lt;br /&gt;
&lt;br /&gt;
Sirve para contar el número de palabras, caracteres, líneas o bytes que contiene un fichero.&lt;br /&gt;
&lt;br /&gt;
Las opciones más utilizadas son:&lt;br /&gt;
&lt;br /&gt;
* -l: muestra el número de líneas que contiene el fichero.&lt;br /&gt;
* -w: muestra el número de palabras.&lt;br /&gt;
* -m: muestra el número de caracteres&lt;br /&gt;
* -c: muestra el número de bytes&lt;br /&gt;
&lt;br /&gt;
Probemos y contemos todo en el fichero file2.txt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
wc -l file2.txt&lt;br /&gt;
wc -w file2.txt&lt;br /&gt;
wc -m file2.txt&lt;br /&gt;
wc -c file2.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podemos contar más de un fichero a la vez:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
wc -l file.txt file2.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nos mostrará el conteo de cada fichero y el total.&lt;br /&gt;
&lt;br /&gt;
== Tubería (|) ==&lt;br /&gt;
&lt;br /&gt;
La tubería nos servirá para conectar varios comandos al mismo tiempo, veamos&lt;br /&gt;
unos ejemplos, que siempre se entiende mejor:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat file2.txt | grep prueba&lt;br /&gt;
grep -nr prueba file2.txt | wc -l&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En el primer ejemplo, mostramos el contenido de file2.txt, y esta salida se la&lt;br /&gt;
pasamos al comando grep, el cual busca las líneas que contengan prueba.&lt;br /&gt;
&lt;br /&gt;
En el segundo, buscamos todas las líneas que contengan la palabra prueba, y esta&lt;br /&gt;
salida se la pasamos al comando wc, el cual cuenta las líneas de la salida del&lt;br /&gt;
comando grep.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Redirecciones ==&lt;br /&gt;
&lt;br /&gt;
Vamos a ver unos conceptos antes de seguir:&lt;br /&gt;
&lt;br /&gt;
* Entrada estándar: representa los datos que necesita una aplicación para funcionar, como por ejemplo un archivo de datos o información ingresada desde la terminal y es representado en la terminal como el tipo 0.&lt;br /&gt;
* Salida estándar: es la vía que utilizan las aplicaciones para mostrarte información, allí podemos ver el progreso o simplemente los mensajes que la  aplicación quiera darte en determinado momento y es representado en la terminal como el tipo 1.&lt;br /&gt;
* Error estándar: es la forma en que los programas te informan sobre los problemas que pueden encontrarse al momento de la ejecución y es representado en la terminal como el tipo 2.&lt;br /&gt;
&lt;br /&gt;
Las redirecciones nos sirven para mover la información de un tipo a otro.&lt;br /&gt;
&lt;br /&gt;
Ya vimos previamente el uso de &amp;gt; y &amp;gt;&amp;gt;, y también el |, veamos algunas más:&lt;br /&gt;
&lt;br /&gt;
* comando &amp;lt; fichero: Toma la entrada de fichero&lt;br /&gt;
* comando 2&amp;gt; fichero: Envía la salida de error de comando a fichero&lt;br /&gt;
* comando 2&amp;gt;&amp;amp;1: Envía la salida de error a la salida estándar&lt;br /&gt;
* comando &amp;amp;&amp;gt; fichero: Envía la salida estándar y de error a fichero; equivale a comando &amp;gt; fichero 2&amp;gt;&amp;amp;1&lt;br /&gt;
&lt;br /&gt;
= Paso 4: Usuarios y grupos =&lt;br /&gt;
&lt;br /&gt;
== whoami ==&lt;br /&gt;
&lt;br /&gt;
Sirve para obtener el usuario actual.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
whoami&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Lo más seguro es que nos aparezca ubuntu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== who ==&lt;br /&gt;
&lt;br /&gt;
Es para saber quien está ahora mismo en la máquina conectado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
who&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Seguramente solo estemos nosotros:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ubuntu   pts/0        2019-08-28 13:51 (192.168.122.1)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== su y sudo ==&lt;br /&gt;
&lt;br /&gt;
su (substitute user): sirve para cambiar de usuario. Por ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
su root&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aquí nos pedirá la contraseña del usuario al que queramos cambiar.&lt;br /&gt;
&lt;br /&gt;
sudo (super user do): no todas las distribuciones lo integran, porque es menos&lt;br /&gt;
seguro que su, este comando nos permite ejecutar un comando siendo otro usuario,&lt;br /&gt;
por defecto, si no le damos usuario, lo hará con el usuario root. Si sudo nos&lt;br /&gt;
pide contraseña, nos pide la contraseña del usuario, ya que el usuario es que el&lt;br /&gt;
tiene permisos para usar sudo o no.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo ls -a /root&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Si tuviéramos por ejemplo un usuario 'practica' y quisíeramos ejecutar un&lt;br /&gt;
comando en su nombre:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo -u practica ls&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== adduser y useradd ==&lt;br /&gt;
&lt;br /&gt;
Ambos comandos sirven para crear un nuevo usuario, pero tienen sus diferencias.&lt;br /&gt;
&lt;br /&gt;
useradd es un comando del sistema, y adduser es un script escrito en perl que&lt;br /&gt;
utiliza el comando useradd. La diferencia así de primeras es que adduser nos&lt;br /&gt;
crear el directorio /home/usuario y useradd necesita la opción -m para hacer lo&lt;br /&gt;
mismo. Se puede utilizar el que se quiera, aunque es más recomendable useradd,&lt;br /&gt;
ya que funcionará igual en todas las distribuciones.&lt;br /&gt;
&lt;br /&gt;
Vamos a añadir un usuario practica con su directorio en /home (notemos que&lt;br /&gt;
necesitamos permisos de super usuario para realizar esta tarea):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo useradd -m practica&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vamos a comprobar que el directorio home está creado y que el usuario practica&lt;br /&gt;
funciona:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls /home  # veremos el directorio practica&lt;br /&gt;
sudo -u practica whoami  # nos dirá que somo el usuario practica&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== passwd ==&lt;br /&gt;
&lt;br /&gt;
Sirve para modificar la contraseña de un usuario, por ejemplo, vamos a modificar&lt;br /&gt;
la contraseña del usuario que hemos creado previamente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo passwd practica&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nos preguntará dos veces la contraseña, y ya la tendremos actualizadas. Vamos&lt;br /&gt;
ahora a probar ahora el comando su para cambiar de usuario:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
su practica&lt;br /&gt;
whoami&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Veremos que hemos cambiado de usuario, para cerrar este usuario, escribimos&lt;br /&gt;
'exit' o pulsamos 'CTLR + D'&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== deluser y userdel ==&lt;br /&gt;
&lt;br /&gt;
Ambos sirven para borrar un usuario, similar a adduser y useradd, userdel es el&lt;br /&gt;
comando y deluser el script.&lt;br /&gt;
&lt;br /&gt;
Vamos a borrar el usuario que hemos creado, incluyendo el borrado de su /home&lt;br /&gt;
(opción -r):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
userdel -r practica&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Comprobemos que ya no tenemos usuario ni /home:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls /home&lt;br /&gt;
sudo -u practica whoami&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== addgroup y groupadd ==&lt;br /&gt;
&lt;br /&gt;
Ambos sirven para crear un grupo. Los grupos sirven para agrupar a los usuarios&lt;br /&gt;
y que estos tengan unos mismos permisos. Por ejemplo, cuando instalamos algunas&lt;br /&gt;
herramientas como por ejemplo docker, este crea el grupo docker automáticamente&lt;br /&gt;
para que fácilmente podamos añadir a un usuario al grupo, y este tenga los&lt;br /&gt;
permisos para trabajar con dicha herramienta.&lt;br /&gt;
&lt;br /&gt;
Vamos a crear un nuevo grupo, vamos a llamarle invitado:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo groupadd invitado&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== usermod y groups ==&lt;br /&gt;
&lt;br /&gt;
usermod es utilizado para asignar un grupo a un usuario.&lt;br /&gt;
&lt;br /&gt;
groups es utilizado para ver los grupos a los que pertenece un usuario.&lt;br /&gt;
&lt;br /&gt;
Vamos a añadir a un usuario practica, lo vamos a añadir al grupo invitado y&lt;br /&gt;
veremos los grupos a los que pertenece:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo useradd -m practica&lt;br /&gt;
sudo usermod -G invitado practica&lt;br /&gt;
groups practica&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Veremos que el usuario práctica pertenece al grupo invitado.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== delgroup y groupdel ==&lt;br /&gt;
&lt;br /&gt;
Ambos sirven para eliminar un grupo. Vamos a eliminar el grupo que hemos creado&lt;br /&gt;
anteriormente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo groupdel invitado&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podemos observar ahora que el usuario practica no pertenece al grupo invitado:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
groups practica&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Paso 5: Permisos =&lt;br /&gt;
&lt;br /&gt;
== Nomenclatura rwx y numérica ==&lt;br /&gt;
&lt;br /&gt;
Si hacemos un ls -l, la primera cadena que nos aparece son los permisos del&lt;br /&gt;
fichero (-rwxrw-r--), podemos dividirlo en 4 elementos:&lt;br /&gt;
&lt;br /&gt;
-    (rwx)   (rw-)  (r--)&lt;br /&gt;
|      |       |      |&lt;br /&gt;
type  owner   group  others&lt;br /&gt;
&lt;br /&gt;
* type: el tipo de fichero, pudiendo ser d (directorio), l (enlace simbólico), - (fichero normal)&lt;br /&gt;
* owner: permisos de propietario&lt;br /&gt;
* group: permisos de grupo&lt;br /&gt;
* others: permisos para los demás usuarios&lt;br /&gt;
&lt;br /&gt;
Significado de los permisos:&lt;br /&gt;
&lt;br /&gt;
* r: permisos de lectura&lt;br /&gt;
* w: permisos de escritura&lt;br /&gt;
* x: permisos de ejecución&lt;br /&gt;
&lt;br /&gt;
Por último, existe un modo abreviado para estos permisos que se utiliza con&lt;br /&gt;
números.&lt;br /&gt;
&lt;br /&gt;
rwx&lt;br /&gt;
001 en binario es 1 en decimal. Permisos de ejecución&lt;br /&gt;
010 en binario es 2 en decimal. Permisos de escritura&lt;br /&gt;
100 en binario es 4 en decimal. Permisos de lectura&lt;br /&gt;
&lt;br /&gt;
La suma de los permisos, nos da el valor numérico. Veamos un ejemplo:&lt;br /&gt;
rwx rw- r--&lt;br /&gt;
111 110 100&lt;br /&gt;
 7   6   4&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== chmod ==&lt;br /&gt;
&lt;br /&gt;
Permite cambiar los permisos de acceso a un fichero o directorio. Podemos dar&lt;br /&gt;
permisos de dos formas diferentes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== modo carácter ===&lt;br /&gt;
&lt;br /&gt;
Veamos primero unos detalles:&lt;br /&gt;
&lt;br /&gt;
Clases de usuario:&lt;br /&gt;
&lt;br /&gt;
* owner (u)&lt;br /&gt;
* group (g)&lt;br /&gt;
* others (o)&lt;br /&gt;
* all (a)&lt;br /&gt;
&lt;br /&gt;
Modificador:&lt;br /&gt;
&lt;br /&gt;
* añadir (+)&lt;br /&gt;
* eliminar (-)&lt;br /&gt;
* sobrescribir (=)&lt;br /&gt;
&lt;br /&gt;
Para dar permisos tendríamos que seleccionar la clase de usuario el modificador&lt;br /&gt;
y los permisos, veamos un ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chmod u+x file  # añadimos permisos de ejecución al usuario&lt;br /&gt;
chmod go-w file  # quitamos permisos de escritura al grupo y a otros usuarios&lt;br /&gt;
chmod u=rwx,go=r file  # Al usuario le damos todos los permisos, y al grupo y otros solo le damos permisos de lectura&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Modo octal ===&lt;br /&gt;
&lt;br /&gt;
Con el modo octacl, es como si siempre utilizáramos el modificar sobrescribir,&lt;br /&gt;
pongamos algunos ejemplos:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chmod 744 file  # Al usuario le damos todos los permisos, y al grupo y otros solo le damos permisos de lectura&lt;br /&gt;
chmod 777 file  # Todos tienen permisos para todo&lt;br /&gt;
chmod 600 file  # solo el propietario tiene permisos de lectura y escritura&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Ejemplos ===&lt;br /&gt;
&lt;br /&gt;
Vamos a ver como funciona el tema de permisos con unos ejemplos. Vamos a crear&lt;br /&gt;
un fichero pruebas y le vamos a quitar los permisos de escritura a nuestro&lt;br /&gt;
usuario, y le vamos a dar permisos de escritura a otros:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
touch pruebas&lt;br /&gt;
ls -l pruebas  # de esta forma veremos que por defecto los permisos son rw-rw-r--&lt;br /&gt;
chmod u-w,o+w pruebas&lt;br /&gt;
ls -l pruebas  # ahora los permisos deberían ser -w-rw-rw-&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Una vez dado los permisos, veamos que con nuestro usuario podemos leer pero no&lt;br /&gt;
escribir:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat pruebas&lt;br /&gt;
echo &amp;quot;probando&amp;quot; &amp;gt; pruebas&lt;br /&gt;
exit&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Y ahora vamos a ver que el usuario pruebas, puede leer y escribir:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
su practica&lt;br /&gt;
cat pruebas&lt;br /&gt;
echo &amp;quot;probando&amp;quot; &amp;gt; pruebas&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== chown ==&lt;br /&gt;
&lt;br /&gt;
Permite cambiar el propietario de un fichero o directorio.&lt;br /&gt;
&lt;br /&gt;
Vamos por ejemplo a pasarle ahora el fichero pruebas al usuario practica:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo chown practica pruebas&lt;br /&gt;
ls -l pruebas&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Veremos que el usuario actual ahora es pruebas, aunque vemos que el ls muestra&lt;br /&gt;
lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
-r--rw-rw- 1 practica ubuntu 9 Aug 29 09:34 pruebas&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hay que comentar un detalle, y es que los ficheros y directorios tienen asignado&lt;br /&gt;
un usuario y un grupo, por defecto se utiliza el mismo usuario como grupo&lt;br /&gt;
cuando creamos un nuevo fichero o directorio. Si queremos que cuando cambiemos&lt;br /&gt;
el propietario, cambiar tambien el grupo del fichero, podemos hacerlo de la&lt;br /&gt;
siguiente forma:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo chown practica:practica pruebas&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Una vez hecho esto, vamos ahora a probar que los permisos siguen funcionando&lt;br /&gt;
como antes, ahora con el usuario ubuntu, deberíamos de poder leer y escribir en&lt;br /&gt;
el fichero pruebas, y con el usuario practica, solo leer, esto es así por que&lt;br /&gt;
ahora el propitario es practica:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Pruebas usuario ubuntu&lt;br /&gt;
cat pruebas&lt;br /&gt;
echo test &amp;gt;&amp;gt; pruebas&lt;br /&gt;
# Pruebas usuario practica&lt;br /&gt;
su practica&lt;br /&gt;
cat pruebas&lt;br /&gt;
echo &amp;quot;probando&amp;quot; &amp;gt; pruebas&lt;br /&gt;
exit&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Paso 6: Procesos =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== ps ==&lt;br /&gt;
&lt;br /&gt;
Sirve para ver que procesos están ejecutándose en el sistema, veamos un ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ps aux  # con la opción aux mostraremos todos los procesos del sistema&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cada línea es un proceso, y cada proceso muestra su PID, usuario, cantidad de&lt;br /&gt;
memoria y cpu utilizada, comando y otros detalles.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
man kill &amp;amp;  # añadir el &amp;amp; al final de un comando hace que este se ejecute en segundo plano, por lo que se quedará abierto&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La salida de este comando nos mostrará el PID que tiene ese proceso que acabamos&lt;br /&gt;
de ejecutar, vamos a comprobarlo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ps aux | grep &amp;quot;man kill&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Veremos que el PID coincide.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== kill ==&lt;br /&gt;
&lt;br /&gt;
Este comando nos servirá para matar un proceso. kill se utiliza seguido de una&lt;br /&gt;
señal para enviar al proceso seguido de uno o varios PID. para ver las señales&lt;br /&gt;
disponibles, podemos listarlas:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kill -l&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Las más utilizadas suele ser SIGTERM y SIGKILL, la primera intenta terminar el&lt;br /&gt;
proceso de forma poco abrupta, y la segunda suele utilizarse cuando el proceso&lt;br /&gt;
no atiende a esta primera señal. Vamos ahora a terminar el proceso que creamos&lt;br /&gt;
antes, si no recordamos el PID, busquémoslo de nuevo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ps aux | grep &amp;quot;man kill&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enviamos señal para terminar el proceso y comprobamos que ha terminado:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kill -SIGTERM 8470&lt;br /&gt;
ps aux | grep &amp;quot;man kill&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
También podemos notar que en el listado de señales, hay unos números, podemos&lt;br /&gt;
utilizar esos números en vez de las palabras, por ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
man kill &amp;amp;&lt;br /&gt;
kill -15 PID_COMANDO_PREVIO&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Comprobamos que el proceso ha terminado correctamente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ps aux | grep &amp;quot;man kill&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Paso 7: Estado CPU, RAM y Disco =&lt;br /&gt;
&lt;br /&gt;
== top ==&lt;br /&gt;
&lt;br /&gt;
Este comando nos servirá para ver el listado de procesos y el estado de la CPU y&lt;br /&gt;
memoria.&lt;br /&gt;
&lt;br /&gt;
Probemos el comando y observemos detalladamente la salida:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
top&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para salir, pulsamos q.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== df y du ==&lt;br /&gt;
&lt;br /&gt;
df (disk free) y du (disk usage). Ambas son utilidades para mostrar el uso de&lt;br /&gt;
los discos.&lt;br /&gt;
&lt;br /&gt;
Con df mostraremos la información del espacio en cada dispositivo montado:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
df&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Estos comandos que nos muestran el tamaño de los ficheros, casi siempre tienen&lt;br /&gt;
una opción para mostrarlo en un formato más legible (-h)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
df -h&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mucho mejor.&lt;br /&gt;
&lt;br /&gt;
Ahora veamos el comando du, el cual nos mostrará el tamaño de un fichero o&lt;br /&gt;
directorio y sus subdirectorios, no olvidemos el -h:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
du -h /home/ubuntu&lt;br /&gt;
du -h /home/ubuntu/pruebas&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Si solo quisíeramos saber el total de una carpeta y nos nos interesan sus&lt;br /&gt;
subcarpetas, podemos utilizar la opción -s:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
du -sh /home/ubuntu&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== free ==&lt;br /&gt;
&lt;br /&gt;
Sirve para ver el estado de la memoria, como siempre, opción -h:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
free -h&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== lsblk ==&lt;br /&gt;
&lt;br /&gt;
Nos muestra la información de todos los dispositivos de bloques (discos duros,&lt;br /&gt;
pendrivers, CD_ROM, SSD, ...).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lsblk&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En la siguiente práctica se utilizará más a fondo este comando, ya que&lt;br /&gt;
trabajaremos con dispositivos.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Paso 8: Gestión de paquetes de software y repositorios =&lt;br /&gt;
&lt;br /&gt;
Los sistemas Linux incluyen, además de las herramientas básicas del sistema operativo, repositorios de software que puede ser opcionalmente instalados por el administrador del sistema. Los fabricantes de las distribuciones de Linux incluyen paquetes de software listos para ser instalados que se integran con el sistema.&lt;br /&gt;
&lt;br /&gt;
Un paquete incluye el software necesario para que una cierta aplicación funcione correctamente, así como sus paquetes de dependencia.&lt;br /&gt;
&lt;br /&gt;
En Ubuntu, la herramienta de gestión de paquetes de software y repositorios se llama '''apt'''.&lt;br /&gt;
&lt;br /&gt;
=== Listado de repositorios de paquetes de software ===&lt;br /&gt;
&lt;br /&gt;
En Ubuntu el listado de repositorios se encuentra en el fichero /etc/apt/sources.list. Podemos comprobar que repositorios tenemos añadido:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat /etc/apt/sources.list&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Actualización del listado de paquetes de software ===&lt;br /&gt;
&lt;br /&gt;
Para actualizar el listado de paquetes utilizaremos el comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt update&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Instalación un nuevo paquete ===&lt;br /&gt;
&lt;br /&gt;
Para instalar un nuevo paquete, utilizaremos la orden install, por ejemplo, vamos a instalar tree, similar al ls pero muestra el arbol de directorios:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt install tree&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Desinstalación de un paquete ===&lt;br /&gt;
&lt;br /&gt;
Usaremos la orden purge o la orden remove, purge nos lo eliminad todo, y remove mantiene la configuración en el caso de que el paquete la tuviese. Vamos a eliminar el paquete instalado previamente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt purge tree&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Paso 9: Módulos =&lt;br /&gt;
&lt;br /&gt;
Los módulos del kernel de Linux son partes que podemos añadir o quitar de forma&lt;br /&gt;
sencilla con el fin de añadir o quitar funcionalidad. Por ejemplo, algunas de&lt;br /&gt;
estas funcionalidades son:&lt;br /&gt;
&lt;br /&gt;
* Registrar temperaturas de nuestros componentes&lt;br /&gt;
* Hacer funcionr la tarjeta de red wifi&lt;br /&gt;
* Cargar los drivers de una tarjeta gráfica&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== lsmod ==&lt;br /&gt;
&lt;br /&gt;
Comando para ver los módulos que estamos usando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lsmod&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== lspci y usb-devices ==&lt;br /&gt;
&lt;br /&gt;
Estos comandos nos servirán para ver el hardware que está conectado a nuestro&lt;br /&gt;
ordenador. Con lspci veremos el listado del hardware integrado y con usb-devices&lt;br /&gt;
el que está conectado por hardware.&lt;br /&gt;
&lt;br /&gt;
Normalmente, como los módulos se utilizan para dar funcionalidad un hardware,&lt;br /&gt;
aquí en los listado de hardware podremos ver que módulo está utilizando cada&lt;br /&gt;
hardware:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lspci -v&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Veremos una línea en algunos dispositivos que nos diga que módulo estamos&lt;br /&gt;
usando, pongo un pequeño trozo de la salida del comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
00:1f.2 SATA controller: Intel Corporation 82801IR/IO/IH (ICH9R/DO/DH) 6 port SATA Controller [AHCI mode] (rev 02) (prog-if 01 [AHCI 1.0])&lt;br /&gt;
    Subsystem: Red Hat, Inc. QEMU Virtual Machine&lt;br /&gt;
    Flags: bus master, fast devsel, latency 0, IRQ 35&lt;br /&gt;
    I/O ports at c0c0 [size=32]&lt;br /&gt;
    Memory at fcc1d000 (32-bit, non-prefetchable) [size=4K]&lt;br /&gt;
    Capabilities: &amp;lt;access denied&amp;gt;&lt;br /&gt;
    Kernel driver in use: ahci&lt;br /&gt;
    Kernel modules: ahci&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vemos que el hardware INTEl Corporation está utilizando el módulo ahci.&lt;br /&gt;
&lt;br /&gt;
Probemos ahora con usb-devices:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
usb-devices&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Veamos un trozo de código:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
T:  Bus=01 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#=  2 Spd=480 MxCh= 0&lt;br /&gt;
D:  Ver= 2.00 Cls=00(&amp;gt;ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs=  1&lt;br /&gt;
P:  Vendor=0627 ProdID=0001 Rev=00.00&lt;br /&gt;
S:  Manufacturer=QEMU&lt;br /&gt;
S:  Product=QEMU USB Tablet&lt;br /&gt;
S:  SerialNumber=42&lt;br /&gt;
C:  #Ifs= 1 Cfg#= 1 Atr=a0 MxPwr=100mA&lt;br /&gt;
I:  If#= 0 Alt= 0 #EPs= 1 Cls=03(HID  ) Sub=00 Prot=00 Driver=usbhid&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vemos que el teclado está utilizando el módulo usbhid&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== insmod ==&lt;br /&gt;
&lt;br /&gt;
Sirve para cargar un módulo en el kernel, imaginemos que tenemos un módulo que&lt;br /&gt;
se llama modulo1:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo insmod modulo1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== rmmod ==&lt;br /&gt;
&lt;br /&gt;
Sirve para eliminar un módulo de kernel. Imaginemos que queremos borrar un&lt;br /&gt;
módulo cargado anteriormente con el nombre modulo1:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo rmmod modulo1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Marramfer12</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Administraci%C3%B3n_b%C3%A1sica&amp;diff=4545</id>
		<title>Administración básica</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Administraci%C3%B3n_b%C3%A1sica&amp;diff=4545"/>
				<updated>2019-11-13T09:59:53Z</updated>
		
		<summary type="html">&lt;p&gt;Marramfer12: /* Directorio de trabajo actual y la orden cd */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Para realizar esta práctica utilizaremos una de las máquinas virtuales que generamos en la práctica anterior.&lt;br /&gt;
&lt;br /&gt;
En esta práctica aprenderemos a utilizar el interprete de ordenes (también conocido como ''[https://www.traficantes.net/sites/default/files/pdfs/En%20el%20principio%20fue...-TdS.pdf línea de comandos]'') y a aprender nociones básicas de administración de sistemas Linux.&lt;br /&gt;
&lt;br /&gt;
= Paso 0: Breve introducción al sistema Linux =&lt;br /&gt;
&lt;br /&gt;
== Estructura básica del sistema de archivos ==&lt;br /&gt;
&lt;br /&gt;
En un sistema Linux, todas las carpetas y ficheros en el sistema de fichero pende de la carpeta raíz que se representa con la /.&lt;br /&gt;
&lt;br /&gt;
 /&lt;br /&gt;
 ├── bin&lt;br /&gt;
 ├── usr&lt;br /&gt;
 │   ├── local&lt;br /&gt;
 │   ├── bin&lt;br /&gt;
 │   └── ...&lt;br /&gt;
 ├── dev&lt;br /&gt;
 │   ├── sda&lt;br /&gt;
 │   ├── sda1&lt;br /&gt;
 │   └── ...&lt;br /&gt;
 ├── home&lt;br /&gt;
 │   ├── practica&lt;br /&gt;
 │   │   ├── tema1.pdf&lt;br /&gt;
 │   │   ├── boletin1.pdf&lt;br /&gt;
 │   │   └── ...&lt;br /&gt;
 │   ├── profesor&lt;br /&gt;
 │   └── ...&lt;br /&gt;
 └── etc&lt;br /&gt;
     ├── firefox&lt;br /&gt;
     ├── libvirt&lt;br /&gt;
     ├── ...&lt;br /&gt;
     └── ...&lt;br /&gt;
&lt;br /&gt;
Como puedes observar, el sistema de fichero emplea una estructura de árbol.&lt;br /&gt;
&lt;br /&gt;
== Carpetas . y .. ==&lt;br /&gt;
&lt;br /&gt;
Toda carpeta en un sistema Linux dispone de dos pseudocarpetas, la '''.''' y la '''..'':&lt;br /&gt;
&lt;br /&gt;
* La pseudocarpeta '''..''' hace referencia a la carpeta padre que contiene a esta carpeta.&lt;br /&gt;
* La pseudocarpeta '''.''' hace referencia a la carpeta actual, es por tanto una autoreferencia.&lt;br /&gt;
&lt;br /&gt;
En el caso de la carpeta raíz, la pseudocarpeta '''.''' y '''..''' hacen referencia a la propia carpeta raíz, se trata, por tanto de una excepción.&lt;br /&gt;
&lt;br /&gt;
== Directorio de trabajo actual y la orden cd ==&lt;br /&gt;
&lt;br /&gt;
Cada interprete de ordenes dispone de una ''carpeta de trabajo actual'' ('''c'''urrent '''w''orking '''d''irectory, en inglés). La carpeta de trabajo actual se puede modificar con la orden '''cd''' ('''c'''hange '''d'''irectory, en inglés).&lt;br /&gt;
&lt;br /&gt;
Por ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ cd ..&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nos situaría en la carpeta padre, empleando una ruta relativa.&lt;br /&gt;
&lt;br /&gt;
Si volvemos a escribir desde /home &amp;quot; cd .. &amp;quot; nos lleva a '''/$''' &lt;br /&gt;
&lt;br /&gt;
Para situarnos en el raíz, podemos emplear una ruta absoluta:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ cd /&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En caso de que queramos volver a la carpeta de usuario, bastaría con invocar a '''cd''' sin más o ''' cd ~ '''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ cd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Rutas absolutas, rutas relativas ==&lt;br /&gt;
&lt;br /&gt;
Para hacer referencia a un fichero o una carpeta se usan ruta absolutas o rutas relativas.&lt;br /&gt;
&lt;br /&gt;
Las rutas absolutas siempre empieza por /, de manera que toman como punto de referencia la carpeta raíz (/). Por ejemplo, una ruta absoluta a la carpeta '''prueba''' que está almacenada en la carpeta del usuario '''ubuntu''' es '/home/ubuntu/prueba/'.&lt;br /&gt;
&lt;br /&gt;
Las ruta relativa toma como referencia la carpeta de trabajo actual. Para averiguar la carpeta de trabajo actual disponemos de la orden '''pwd'''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ pwd&lt;br /&gt;
/home/ubuntu&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En base a la carpeta de trabajo actual, empleando la pseudocarpeta '''..''', se puede construir rutas relativas. Por ejemplo, para referenciar un fichero '''fichero.txt''' en la carpeta temporal, podemos emplear la ruta relativa '''../../tmp/fichero.txt'''.&lt;br /&gt;
&lt;br /&gt;
Aunque probablemente sea más cómodo emplear una ruta absoluta en este caso, que sería '''/tmp/fichero.txt'''.&lt;br /&gt;
&lt;br /&gt;
== Intérprete de órdenes ==&lt;br /&gt;
&lt;br /&gt;
El intérprete de órdenes es un lanzador de aplicaciones textual que emplea el teclado como dispositivo de entrada de datos. Mediante el teclado, se escribe el nombre del programa que se quiere lanzar y al pulsa la tecla ''intro'' el intérprete de ordenes ejecutara dicho programa. Por defecto, el intérprete de ordenes que emplea Ubuntu por defecto es '''bash'''.&lt;br /&gt;
&lt;br /&gt;
== man: ver la paǵina de manual de una orden ==&lt;br /&gt;
&lt;br /&gt;
La orden '''man''' te será útil para ver las páginas de manual.&lt;br /&gt;
&lt;br /&gt;
Este programa toma como entrada el nombre de la orden de la que quieres consultar su página de manual, por ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
man ls&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nos da información del manual de la orden '''ls'''.&lt;br /&gt;
&lt;br /&gt;
Para salir de la página de manual, pulsa la tecla '''q''' (la primera letra de la palabra '''quit''', en inglés).&lt;br /&gt;
&lt;br /&gt;
Normalmente, los programas ofrecen opciones de ayuda, como '''--help'''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
man --help&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
También se puede emplear la versión compacta a la hora de especificar opciones.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
man -h&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En general, todas las ordenes suelen ofrecer una opción de ayuda.&lt;br /&gt;
&lt;br /&gt;
= Paso 1: Operaciones básicas con el sistema de ficheros =&lt;br /&gt;
&lt;br /&gt;
== ls ==&lt;br /&gt;
&lt;br /&gt;
Lista los ficheros y carpetas. Si no se especifica nada, muestra los ficheros y carpetas que contiene la carpeta de trabajo actual.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Si se especifica una ruta, muestra las carpetas y ficheros contenidos en dicha ruta, por ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ ls /&lt;br /&gt;
bin  boot  data  dev  etc  home  initrd.img  initrd.img.old  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  snap  srv  sys  tmp  usr  var  vmlinuz  vmlinuz.old&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al emplear '''/''' como ruta absoluta, muestra el contenido de la carpeta raíz.&lt;br /&gt;
&lt;br /&gt;
Las opciones más usadas de este programa suelen ser:&lt;br /&gt;
&lt;br /&gt;
* -a: muestra los ficheros y carpetas ''ocultos''. En Linux, cualquier fichero o carpeta cuyo nombre empiece por . se considera ''oculto''. Esto incluye también en el listado las pseudocarpetas . y ..&lt;br /&gt;
* -l: formato largo, que muestra la fecha de última modificación, propiertario, grupo, tamaño en bytes y nombre:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ ls -a&lt;br /&gt;
.  ..  .bash_history  .bash_logout  .bashrc  .profile  .ssh&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ambas opciones se puede combinar:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ ls -la /&lt;br /&gt;
total 92&lt;br /&gt;
drwxr-xr-x  24 root root  4096 Aug 28 09:50 .&lt;br /&gt;
drwxr-xr-x  24 root root  4096 Aug 28 09:50 ..&lt;br /&gt;
drwxr-xr-x   2 root root  4096 Aug 22 12:37 bin&lt;br /&gt;
drwxr-xr-x   4 root root  4096 Aug 22 12:37 boot&lt;br /&gt;
drwx------   3 root root  4096 Aug 28 09:50 data&lt;br /&gt;
drwxr-xr-x  18 root root  3780 Aug 28 09:46 dev&lt;br /&gt;
drwxr-xr-x  93 root root  4096 Aug 28 13:51 etc&lt;br /&gt;
drwxr-xr-x   3 root root  4096 Aug 28 09:46 home&lt;br /&gt;
lrwxrwxrwx   1 root root    33 Aug 22 12:35 initrd.img -&amp;gt; boot/initrd.img-4.15.0-58-generic&lt;br /&gt;
lrwxrwxrwx   1 root root    33 Aug 22 12:35 initrd.img.old -&amp;gt; boot/initrd.img-4.15.0-58-generic&lt;br /&gt;
drwxr-xr-x  20 root root  4096 Aug 22 12:35 lib&lt;br /&gt;
drwxr-xr-x   2 root root  4096 Aug 22 12:34 lib64&lt;br /&gt;
drwx------   2 root root 16384 Aug 22 12:36 lost+found&lt;br /&gt;
drwxr-xr-x   2 root root  4096 Aug 22 12:34 media&lt;br /&gt;
drwxr-xr-x   2 root root  4096 Aug 22 12:34 mnt&lt;br /&gt;
drwxr-xr-x   3 root root  4096 Aug 28 09:49 opt&lt;br /&gt;
dr-xr-xr-x 111 root root     0 Aug 28 09:46 proc&lt;br /&gt;
drwx------   3 root root  4096 Aug 28 09:46 root&lt;br /&gt;
drwxr-xr-x  26 root root   940 Aug 28 13:51 run&lt;br /&gt;
drwxr-xr-x   2 root root  4096 Aug 28 09:49 sbin&lt;br /&gt;
drwxr-xr-x   2 root root  4096 Aug 28 09:46 snap&lt;br /&gt;
drwxr-xr-x   2 root root  4096 Aug 22 12:34 srv&lt;br /&gt;
dr-xr-xr-x  13 root root     0 Aug 28 09:46 sys&lt;br /&gt;
drwxrwxrwt  10 root root  4096 Aug 28 16:00 tmp&lt;br /&gt;
drwxr-xr-x  11 root root  4096 Aug 28 09:49 usr&lt;br /&gt;
drwxr-xr-x  13 root root  4096 Aug 22 12:36 var&lt;br /&gt;
lrwxrwxrwx   1 root root    30 Aug 22 12:35 vmlinuz -&amp;gt; boot/vmlinuz-4.15.0-58-generic&lt;br /&gt;
lrwxrwxrwx   1 root root    30 Aug 22 12:35 vmlinuz.old -&amp;gt; boot/vmlinuz-4.15.0-58-generic&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Los permisos se emplean en base a tres capacidades:&lt;br /&gt;
&lt;br /&gt;
* lectura, que se codifica con '''r''' (read, en inglés).&lt;br /&gt;
* escritura, que se codifica con '''w''' (write, en inglés).&lt;br /&gt;
* ejecutación, que se codifica con '''x''' (execute, en inglés).&lt;br /&gt;
&lt;br /&gt;
La primera columna muestra los permisos que codifican:&lt;br /&gt;
&lt;br /&gt;
* Tipo de entrada: '''d''' indica ''directorio'' (''carpeta'').&lt;br /&gt;
* Permisos del propietario, primera terna de rwx&lt;br /&gt;
* Permisos del grupo, segunda terna de rwx&lt;br /&gt;
* Permisos para el resto del mundo, tercera terna de rwx.&lt;br /&gt;
&lt;br /&gt;
A continución, aparecen el propietario y el grupo, seguidos de la fecha de última modificación y el nombre del fichero o carpeta.&lt;br /&gt;
&lt;br /&gt;
== mkdir ==&lt;br /&gt;
&lt;br /&gt;
Crea un nuevo directorio.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ mkdir test&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Crea una carpeta test en el directorio actual.&lt;br /&gt;
&lt;br /&gt;
Comprobemos que se ha creado bien:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ ls&lt;br /&gt;
test&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Con la opción '''-p''', permite crear sucesivas carpetas anidadas de una sola vez, por ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ mkdir -p a/b/c&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Que crea la siguiente estructura de carpetas.&lt;br /&gt;
&lt;br /&gt;
 a&lt;br /&gt;
 └── b&lt;br /&gt;
     └── c&lt;br /&gt;
&lt;br /&gt;
== touch ==&lt;br /&gt;
&lt;br /&gt;
Crea un nuevo fichero vacío (sin contenido) con el nombre que especifiquemos.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ touch file.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Comprobamos que el fichero se ha creado correctamente.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ ls&lt;br /&gt;
file.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== cp ==&lt;br /&gt;
&lt;br /&gt;
Copia un fichero o directorio.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ cp file.txt file_copy.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para copia una carpeta y su contenido tenemos que usar la opción -r (recursivo).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ cp -r test test_copy&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Comprobamos el resultado con la orden '''ls'''.&lt;br /&gt;
&lt;br /&gt;
== mv ==&lt;br /&gt;
&lt;br /&gt;
Mueve fichero o carpeta.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mv file_copy.txt file2.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
También se emplea para renombrar.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mv test_copy test_copy2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== rm ==&lt;br /&gt;
&lt;br /&gt;
Borra un fichero o directorio&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rm file2.txt&lt;br /&gt;
rm -r test2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Comprobamos:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ejercicios:&lt;br /&gt;
&lt;br /&gt;
# Crear la siguiente estructura dentro del directorio /tmp (usar los comandos mkdir, touch y cp):&lt;br /&gt;
&lt;br /&gt;
 /tmp&lt;br /&gt;
 ├── carpeta1&lt;br /&gt;
 ├── carpeta2&lt;br /&gt;
 │   ├── fichero1.txt&lt;br /&gt;
 │   └── fichero2.md&lt;br /&gt;
 └── carpeta3&lt;br /&gt;
     ├── fichero1.txt&lt;br /&gt;
     └── fichero2.md&lt;br /&gt;
&lt;br /&gt;
# Basándonos en el ejercicio anterior, cambiar la estructura a la siguiente (usar comandos mv y rm):&lt;br /&gt;
&lt;br /&gt;
 /tmp&lt;br /&gt;
 └── carpeta&lt;br /&gt;
     ├── fichero1.txt&lt;br /&gt;
     └── fichero2.md&lt;br /&gt;
&lt;br /&gt;
= Paso 2: Impresión por pantalla y redirección de salida =&lt;br /&gt;
&lt;br /&gt;
== echo ==&lt;br /&gt;
&lt;br /&gt;
Sirve para imprimir una línea de texto por pantalla o imprimir variables de&lt;br /&gt;
entorno.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo &amp;quot;Hola&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Una variable de entorno es una variable editada con algún valor, por defecto&lt;br /&gt;
existen algunas creadas, como por ejemplo la variable HOME, que contiene el&lt;br /&gt;
directorio del usuario:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo $HOME&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aprovecharemos y crearemos una variable nosotros:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ME=&amp;quot;my name&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Comprobamos:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo $ME&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Redirección de salida ==&lt;br /&gt;
&lt;br /&gt;
&amp;gt; y &amp;gt;&amp;gt; sirve para redirigir una salida. Por ejemplo, utilizando el comando echo,&lt;br /&gt;
podemos enviar un texto dentro de un fichero:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo &amp;quot;Esto es una prueba&amp;quot; &amp;gt; file.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La diferencia entre &amp;gt; y &amp;gt;&amp;gt; es que &amp;gt; sobrescribe lo que haya en el fichero y&lt;br /&gt;
añade el contenido, y &amp;gt;&amp;gt; no sobrescribe, solo añade el nuevo contenido.&lt;br /&gt;
&lt;br /&gt;
Hagamos la prueba:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo &amp;quot;Esto es una prueba&amp;quot; &amp;gt; file.txt&lt;br /&gt;
echo &amp;quot;Esto es una prueba2&amp;quot; &amp;gt; file.txt&lt;br /&gt;
echo &amp;quot;Esto es una prueba&amp;quot; &amp;gt;&amp;gt; file2.txt&lt;br /&gt;
echo &amp;quot;Esto es una prueba2&amp;quot; &amp;gt;&amp;gt; file2.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En cualquier caso, si el fichero no existe, se crea.&lt;br /&gt;
&lt;br /&gt;
= Paso 3: Manejo de ficheros y carpetas avanzado =&lt;br /&gt;
&lt;br /&gt;
== cat ==&lt;br /&gt;
&lt;br /&gt;
Muestra el contenido de un fichero.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat file.txt&lt;br /&gt;
cat file2.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== grep ==&lt;br /&gt;
&lt;br /&gt;
Sirve para buscar coincidencia de un cierto patrón en ficheros y muestra la coincidencia, en caso de encontrarla, por pantalla.&lt;br /&gt;
&lt;br /&gt;
Por ejemplo, para buscar el patrón ''prueba'' en el fichero ''fichero.txt''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ grep -n prueba fichero.txt&lt;br /&gt;
1:Esto es una prueba&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La opción '''-n''' muestra el número de línea.&lt;br /&gt;
&lt;br /&gt;
== wc ==&lt;br /&gt;
&lt;br /&gt;
Sirve para contar el número de palabras, caracteres, líneas o bytes que contiene un fichero.&lt;br /&gt;
&lt;br /&gt;
Las opciones más utilizadas son:&lt;br /&gt;
&lt;br /&gt;
* -l: muestra el número de líneas que contiene el fichero.&lt;br /&gt;
* -w: muestra el número de palabras.&lt;br /&gt;
* -m: muestra el número de caracteres&lt;br /&gt;
* -c: muestra el número de bytes&lt;br /&gt;
&lt;br /&gt;
Probemos y contemos todo en el fichero file2.txt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
wc -l file2.txt&lt;br /&gt;
wc -w file2.txt&lt;br /&gt;
wc -m file2.txt&lt;br /&gt;
wc -c file2.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podemos contar más de un fichero a la vez:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
wc -l file.txt file2.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nos mostrará el conteo de cada fichero y el total.&lt;br /&gt;
&lt;br /&gt;
== Tubería (|) ==&lt;br /&gt;
&lt;br /&gt;
La tubería nos servirá para conectar varios comandos al mismo tiempo, veamos&lt;br /&gt;
unos ejemplos, que siempre se entiende mejor:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat file2.txt | grep prueba&lt;br /&gt;
grep -nr prueba file2.txt | wc -l&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En el primer ejemplo, mostramos el contenido de file2.txt, y esta salida se la&lt;br /&gt;
pasamos al comando grep, el cual busca las líneas que contengan prueba.&lt;br /&gt;
&lt;br /&gt;
En el segundo, buscamos todas las líneas que contengan la palabra prueba, y esta&lt;br /&gt;
salida se la pasamos al comando wc, el cual cuenta las líneas de la salida del&lt;br /&gt;
comando grep.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Redirecciones ==&lt;br /&gt;
&lt;br /&gt;
Vamos a ver unos conceptos antes de seguir:&lt;br /&gt;
&lt;br /&gt;
* Entrada estándar: representa los datos que necesita una aplicación para funcionar, como por ejemplo un archivo de datos o información ingresada desde la terminal y es representado en la terminal como el tipo 0.&lt;br /&gt;
* Salida estándar: es la vía que utilizan las aplicaciones para mostrarte información, allí podemos ver el progreso o simplemente los mensajes que la  aplicación quiera darte en determinado momento y es representado en la terminal como el tipo 1.&lt;br /&gt;
* Error estándar: es la forma en que los programas te informan sobre los problemas que pueden encontrarse al momento de la ejecución y es representado en la terminal como el tipo 2.&lt;br /&gt;
&lt;br /&gt;
Las redirecciones nos sirven para mover la información de un tipo a otro.&lt;br /&gt;
&lt;br /&gt;
Ya vimos previamente el uso de &amp;gt; y &amp;gt;&amp;gt;, y también el |, veamos algunas más:&lt;br /&gt;
&lt;br /&gt;
* comando &amp;lt; fichero: Toma la entrada de fichero&lt;br /&gt;
* comando 2&amp;gt; fichero: Envía la salida de error de comando a fichero&lt;br /&gt;
* comando 2&amp;gt;&amp;amp;1: Envía la salida de error a la salida estándar&lt;br /&gt;
* comando &amp;amp;&amp;gt; fichero: Envía la salida estándar y de error a fichero; equivale a comando &amp;gt; fichero 2&amp;gt;&amp;amp;1&lt;br /&gt;
&lt;br /&gt;
= Paso 4: Usuarios y grupos =&lt;br /&gt;
&lt;br /&gt;
== whoami ==&lt;br /&gt;
&lt;br /&gt;
Sirve para obtener el usuario actual.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
whoami&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Lo más seguro es que nos aparezca ubuntu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== who ==&lt;br /&gt;
&lt;br /&gt;
Es para saber quien está ahora mismo en la máquina conectado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
who&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Seguramente solo estemos nosotros:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ubuntu   pts/0        2019-08-28 13:51 (192.168.122.1)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== su y sudo ==&lt;br /&gt;
&lt;br /&gt;
su (substitute user): sirve para cambiar de usuario. Por ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
su root&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aquí nos pedirá la contraseña del usuario al que queramos cambiar.&lt;br /&gt;
&lt;br /&gt;
sudo (super user do): no todas las distribuciones lo integran, porque es menos&lt;br /&gt;
seguro que su, este comando nos permite ejecutar un comando siendo otro usuario,&lt;br /&gt;
por defecto, si no le damos usuario, lo hará con el usuario root. Si sudo nos&lt;br /&gt;
pide contraseña, nos pide la contraseña del usuario, ya que el usuario es que el&lt;br /&gt;
tiene permisos para usar sudo o no.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo ls -a /root&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Si tuviéramos por ejemplo un usuario 'practica' y quisíeramos ejecutar un&lt;br /&gt;
comando en su nombre:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo -u practica ls&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== adduser y useradd ==&lt;br /&gt;
&lt;br /&gt;
Ambos comandos sirven para crear un nuevo usuario, pero tienen sus diferencias.&lt;br /&gt;
&lt;br /&gt;
useradd es un comando del sistema, y adduser es un script escrito en perl que&lt;br /&gt;
utiliza el comando useradd. La diferencia así de primeras es que adduser nos&lt;br /&gt;
crear el directorio /home/usuario y useradd necesita la opción -m para hacer lo&lt;br /&gt;
mismo. Se puede utilizar el que se quiera, aunque es más recomendable useradd,&lt;br /&gt;
ya que funcionará igual en todas las distribuciones.&lt;br /&gt;
&lt;br /&gt;
Vamos a añadir un usuario practica con su directorio en /home (notemos que&lt;br /&gt;
necesitamos permisos de super usuario para realizar esta tarea):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo useradd -m practica&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vamos a comprobar que el directorio home está creado y que el usuario practica&lt;br /&gt;
funciona:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls /home  # veremos el directorio practica&lt;br /&gt;
sudo -u practica whoami  # nos dirá que somo el usuario practica&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== passwd ==&lt;br /&gt;
&lt;br /&gt;
Sirve para modificar la contraseña de un usuario, por ejemplo, vamos a modificar&lt;br /&gt;
la contraseña del usuario que hemos creado previamente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo passwd practica&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nos preguntará dos veces la contraseña, y ya la tendremos actualizadas. Vamos&lt;br /&gt;
ahora a probar ahora el comando su para cambiar de usuario:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
su practica&lt;br /&gt;
whoami&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Veremos que hemos cambiado de usuario, para cerrar este usuario, escribimos&lt;br /&gt;
'exit' o pulsamos 'CTLR + D'&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== deluser y userdel ==&lt;br /&gt;
&lt;br /&gt;
Ambos sirven para borrar un usuario, similar a adduser y useradd, userdel es el&lt;br /&gt;
comando y deluser el script.&lt;br /&gt;
&lt;br /&gt;
Vamos a borrar el usuario que hemos creado, incluyendo el borrado de su /home&lt;br /&gt;
(opción -r):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
userdel -r practica&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Comprobemos que ya no tenemos usuario ni /home:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls /home&lt;br /&gt;
sudo -u practica whoami&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== addgroup y groupadd ==&lt;br /&gt;
&lt;br /&gt;
Ambos sirven para crear un grupo. Los grupos sirven para agrupar a los usuarios&lt;br /&gt;
y que estos tengan unos mismos permisos. Por ejemplo, cuando instalamos algunas&lt;br /&gt;
herramientas como por ejemplo docker, este crea el grupo docker automáticamente&lt;br /&gt;
para que fácilmente podamos añadir a un usuario al grupo, y este tenga los&lt;br /&gt;
permisos para trabajar con dicha herramienta.&lt;br /&gt;
&lt;br /&gt;
Vamos a crear un nuevo grupo, vamos a llamarle invitado:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo groupadd invitado&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== usermod y groups ==&lt;br /&gt;
&lt;br /&gt;
usermod es utilizado para asignar un grupo a un usuario.&lt;br /&gt;
&lt;br /&gt;
groups es utilizado para ver los grupos a los que pertenece un usuario.&lt;br /&gt;
&lt;br /&gt;
Vamos a añadir a un usuario practica, lo vamos a añadir al grupo invitado y&lt;br /&gt;
veremos los grupos a los que pertenece:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo useradd -m practica&lt;br /&gt;
sudo usermod -G invitado practica&lt;br /&gt;
groups practica&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Veremos que el usuario práctica pertenece al grupo invitado.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== delgroup y groupdel ==&lt;br /&gt;
&lt;br /&gt;
Ambos sirven para eliminar un grupo. Vamos a eliminar el grupo que hemos creado&lt;br /&gt;
anteriormente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo groupdel invitado&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podemos observar ahora que el usuario practica no pertenece al grupo invitado:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
groups practica&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Paso 5: Permisos =&lt;br /&gt;
&lt;br /&gt;
== Nomenclatura rwx y numérica ==&lt;br /&gt;
&lt;br /&gt;
Si hacemos un ls -l, la primera cadena que nos aparece son los permisos del&lt;br /&gt;
fichero (-rwxrw-r--), podemos dividirlo en 4 elementos:&lt;br /&gt;
&lt;br /&gt;
-    (rwx)   (rw-)  (r--)&lt;br /&gt;
|      |       |      |&lt;br /&gt;
type  owner   group  others&lt;br /&gt;
&lt;br /&gt;
* type: el tipo de fichero, pudiendo ser d (directorio), l (enlace simbólico), - (fichero normal)&lt;br /&gt;
* owner: permisos de propietario&lt;br /&gt;
* group: permisos de grupo&lt;br /&gt;
* others: permisos para los demás usuarios&lt;br /&gt;
&lt;br /&gt;
Significado de los permisos:&lt;br /&gt;
&lt;br /&gt;
* r: permisos de lectura&lt;br /&gt;
* w: permisos de escritura&lt;br /&gt;
* x: permisos de ejecución&lt;br /&gt;
&lt;br /&gt;
Por último, existe un modo abreviado para estos permisos que se utiliza con&lt;br /&gt;
números.&lt;br /&gt;
&lt;br /&gt;
rwx&lt;br /&gt;
001 en binario es 1 en decimal. Permisos de ejecución&lt;br /&gt;
010 en binario es 2 en decimal. Permisos de escritura&lt;br /&gt;
100 en binario es 4 en decimal. Permisos de lectura&lt;br /&gt;
&lt;br /&gt;
La suma de los permisos, nos da el valor numérico. Veamos un ejemplo:&lt;br /&gt;
rwx rw- r--&lt;br /&gt;
111 110 100&lt;br /&gt;
 7   6   4&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== chmod ==&lt;br /&gt;
&lt;br /&gt;
Permite cambiar los permisos de acceso a un fichero o directorio. Podemos dar&lt;br /&gt;
permisos de dos formas diferentes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== modo carácter ===&lt;br /&gt;
&lt;br /&gt;
Veamos primero unos detalles:&lt;br /&gt;
&lt;br /&gt;
Clases de usuario:&lt;br /&gt;
&lt;br /&gt;
* owner (u)&lt;br /&gt;
* group (g)&lt;br /&gt;
* others (o)&lt;br /&gt;
* all (a)&lt;br /&gt;
&lt;br /&gt;
Modificador:&lt;br /&gt;
&lt;br /&gt;
* añadir (+)&lt;br /&gt;
* eliminar (-)&lt;br /&gt;
* sobrescribir (=)&lt;br /&gt;
&lt;br /&gt;
Para dar permisos tendríamos que seleccionar la clase de usuario el modificador&lt;br /&gt;
y los permisos, veamos un ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chmod u+x file  # añadimos permisos de ejecución al usuario&lt;br /&gt;
chmod go-w file  # quitamos permisos de escritura al grupo y a otros usuarios&lt;br /&gt;
chmod u=rwx,go=r file  # Al usuario le damos todos los permisos, y al grupo y otros solo le damos permisos de lectura&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Modo octal ===&lt;br /&gt;
&lt;br /&gt;
Con el modo octacl, es como si siempre utilizáramos el modificar sobrescribir,&lt;br /&gt;
pongamos algunos ejemplos:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chmod 744 file  # Al usuario le damos todos los permisos, y al grupo y otros solo le damos permisos de lectura&lt;br /&gt;
chmod 777 file  # Todos tienen permisos para todo&lt;br /&gt;
chmod 600 file  # solo el propietario tiene permisos de lectura y escritura&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Ejemplos ===&lt;br /&gt;
&lt;br /&gt;
Vamos a ver como funciona el tema de permisos con unos ejemplos. Vamos a crear&lt;br /&gt;
un fichero pruebas y le vamos a quitar los permisos de escritura a nuestro&lt;br /&gt;
usuario, y le vamos a dar permisos de escritura a otros:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
touch pruebas&lt;br /&gt;
ls -l pruebas  # de esta forma veremos que por defecto los permisos son rw-rw-r--&lt;br /&gt;
chmod u-w,o+w pruebas&lt;br /&gt;
ls -l pruebas  # ahora los permisos deberían ser -w-rw-rw-&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Una vez dado los permisos, veamos que con nuestro usuario podemos leer pero no&lt;br /&gt;
escribir:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat pruebas&lt;br /&gt;
echo &amp;quot;probando&amp;quot; &amp;gt; pruebas&lt;br /&gt;
exit&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Y ahora vamos a ver que el usuario pruebas, puede leer y escribir:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
su practica&lt;br /&gt;
cat pruebas&lt;br /&gt;
echo &amp;quot;probando&amp;quot; &amp;gt; pruebas&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== chown ==&lt;br /&gt;
&lt;br /&gt;
Permite cambiar el propietario de un fichero o directorio.&lt;br /&gt;
&lt;br /&gt;
Vamos por ejemplo a pasarle ahora el fichero pruebas al usuario practica:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo chown practica pruebas&lt;br /&gt;
ls -l pruebas&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Veremos que el usuario actual ahora es pruebas, aunque vemos que el ls muestra&lt;br /&gt;
lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
-r--rw-rw- 1 practica ubuntu 9 Aug 29 09:34 pruebas&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hay que comentar un detalle, y es que los ficheros y directorios tienen asignado&lt;br /&gt;
un usuario y un grupo, por defecto se utiliza el mismo usuario como grupo&lt;br /&gt;
cuando creamos un nuevo fichero o directorio. Si queremos que cuando cambiemos&lt;br /&gt;
el propietario, cambiar tambien el grupo del fichero, podemos hacerlo de la&lt;br /&gt;
siguiente forma:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo chown practica:practica pruebas&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Una vez hecho esto, vamos ahora a probar que los permisos siguen funcionando&lt;br /&gt;
como antes, ahora con el usuario ubuntu, deberíamos de poder leer y escribir en&lt;br /&gt;
el fichero pruebas, y con el usuario practica, solo leer, esto es así por que&lt;br /&gt;
ahora el propitario es practica:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Pruebas usuario ubuntu&lt;br /&gt;
cat pruebas&lt;br /&gt;
echo test &amp;gt;&amp;gt; pruebas&lt;br /&gt;
# Pruebas usuario practica&lt;br /&gt;
su practica&lt;br /&gt;
cat pruebas&lt;br /&gt;
echo &amp;quot;probando&amp;quot; &amp;gt; pruebas&lt;br /&gt;
exit&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Paso 6: Procesos =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== ps ==&lt;br /&gt;
&lt;br /&gt;
Sirve para ver que procesos están ejecutándose en el sistema, veamos un ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ps aux  # con la opción aux mostraremos todos los procesos del sistema&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cada línea es un proceso, y cada proceso muestra su PID, usuario, cantidad de&lt;br /&gt;
memoria y cpu utilizada, comando y otros detalles.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
man kill &amp;amp;  # añadir el &amp;amp; al final de un comando hace que este se ejecute en segundo plano, por lo que se quedará abierto&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La salida de este comando nos mostrará el PID que tiene ese proceso que acabamos&lt;br /&gt;
de ejecutar, vamos a comprobarlo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ps aux | grep &amp;quot;man kill&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Veremos que el PID coincide.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== kill ==&lt;br /&gt;
&lt;br /&gt;
Este comando nos servirá para matar un proceso. kill se utiliza seguido de una&lt;br /&gt;
señal para enviar al proceso seguido de uno o varios PID. para ver las señales&lt;br /&gt;
disponibles, podemos listarlas:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kill -l&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Las más utilizadas suele ser SIGTERM y SIGKILL, la primera intenta terminar el&lt;br /&gt;
proceso de forma poco abrupta, y la segunda suele utilizarse cuando el proceso&lt;br /&gt;
no atiende a esta primera señal. Vamos ahora a terminar el proceso que creamos&lt;br /&gt;
antes, si no recordamos el PID, busquémoslo de nuevo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ps aux | grep &amp;quot;man kill&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enviamos señal para terminar el proceso y comprobamos que ha terminado:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kill -SIGTERM 8470&lt;br /&gt;
ps aux | grep &amp;quot;man kill&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
También podemos notar que en el listado de señales, hay unos números, podemos&lt;br /&gt;
utilizar esos números en vez de las palabras, por ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
man kill &amp;amp;&lt;br /&gt;
kill -15 PID_COMANDO_PREVIO&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Comprobamos que el proceso ha terminado correctamente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ps aux | grep &amp;quot;man kill&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Paso 7: Estado CPU, RAM y Disco =&lt;br /&gt;
&lt;br /&gt;
== top ==&lt;br /&gt;
&lt;br /&gt;
Este comando nos servirá para ver el listado de procesos y el estado de la CPU y&lt;br /&gt;
memoria.&lt;br /&gt;
&lt;br /&gt;
Probemos el comando y observemos detalladamente la salida:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
top&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para salir, pulsamos q.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== df y du ==&lt;br /&gt;
&lt;br /&gt;
df (disk free) y du (disk usage). Ambas son utilidades para mostrar el uso de&lt;br /&gt;
los discos.&lt;br /&gt;
&lt;br /&gt;
Con df mostraremos la información del espacio en cada dispositivo montado:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
df&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Estos comandos que nos muestran el tamaño de los ficheros, casi siempre tienen&lt;br /&gt;
una opción para mostrarlo en un formato más legible (-h)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
df -h&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mucho mejor.&lt;br /&gt;
&lt;br /&gt;
Ahora veamos el comando du, el cual nos mostrará el tamaño de un fichero o&lt;br /&gt;
directorio y sus subdirectorios, no olvidemos el -h:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
du -h /home/ubuntu&lt;br /&gt;
du -h /home/ubuntu/pruebas&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Si solo quisíeramos saber el total de una carpeta y nos nos interesan sus&lt;br /&gt;
subcarpetas, podemos utilizar la opción -s:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
du -sh /home/ubuntu&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== free ==&lt;br /&gt;
&lt;br /&gt;
Sirve para ver el estado de la memoria, como siempre, opción -h:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
free -h&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== lsblk ==&lt;br /&gt;
&lt;br /&gt;
Nos muestra la información de todos los dispositivos de bloques (discos duros,&lt;br /&gt;
pendrivers, CD_ROM, SSD, ...).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lsblk&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En la siguiente práctica se utilizará más a fondo este comando, ya que&lt;br /&gt;
trabajaremos con dispositivos.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Paso 8: Gestión de paquetes de software y repositorios =&lt;br /&gt;
&lt;br /&gt;
Los sistemas Linux incluyen, además de las herramientas básicas del sistema operativo, repositorios de software que puede ser opcionalmente instalados por el administrador del sistema. Los fabricantes de las distribuciones de Linux incluyen paquetes de software listos para ser instalados que se integran con el sistema.&lt;br /&gt;
&lt;br /&gt;
Un paquete incluye el software necesario para que una cierta aplicación funcione correctamente, así como sus paquetes de dependencia.&lt;br /&gt;
&lt;br /&gt;
En Ubuntu, la herramienta de gestión de paquetes de software y repositorios se llama '''apt'''.&lt;br /&gt;
&lt;br /&gt;
=== Listado de repositorios de paquetes de software ===&lt;br /&gt;
&lt;br /&gt;
En Ubuntu el listado de repositorios se encuentra en el fichero /etc/apt/sources.list. Podemos comprobar que repositorios tenemos añadido:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat /etc/apt/sources.list&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Actualización del listado de paquetes de software ===&lt;br /&gt;
&lt;br /&gt;
Para actualizar el listado de paquetes utilizaremos el comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt update&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Instalación un nuevo paquete ===&lt;br /&gt;
&lt;br /&gt;
Para instalar un nuevo paquete, utilizaremos la orden install, por ejemplo, vamos a instalar tree, similar al ls pero muestra el arbol de directorios:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt install tree&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Desinstalación de un paquete ===&lt;br /&gt;
&lt;br /&gt;
Usaremos la orden purge o la orden remove, purge nos lo eliminad todo, y remove mantiene la configuración en el caso de que el paquete la tuviese. Vamos a eliminar el paquete instalado previamente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt purge tree&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Paso 9: Módulos =&lt;br /&gt;
&lt;br /&gt;
Los módulos del kernel de Linux son partes que podemos añadir o quitar de forma&lt;br /&gt;
sencilla con el fin de añadir o quitar funcionalidad. Por ejemplo, algunas de&lt;br /&gt;
estas funcionalidades son:&lt;br /&gt;
&lt;br /&gt;
* Registrar temperaturas de nuestros componentes&lt;br /&gt;
* Hacer funcionr la tarjeta de red wifi&lt;br /&gt;
* Cargar los drivers de una tarjeta gráfica&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== lsmod ==&lt;br /&gt;
&lt;br /&gt;
Comando para ver los módulos que estamos usando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lsmod&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== lspci y usb-devices ==&lt;br /&gt;
&lt;br /&gt;
Estos comandos nos servirán para ver el hardware que está conectado a nuestro&lt;br /&gt;
ordenador. Con lspci veremos el listado del hardware integrado y con usb-devices&lt;br /&gt;
el que está conectado por hardware.&lt;br /&gt;
&lt;br /&gt;
Normalmente, como los módulos se utilizan para dar funcionalidad un hardware,&lt;br /&gt;
aquí en los listado de hardware podremos ver que módulo está utilizando cada&lt;br /&gt;
hardware:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lspci -v&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Veremos una línea en algunos dispositivos que nos diga que módulo estamos&lt;br /&gt;
usando, pongo un pequeño trozo de la salida del comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
00:1f.2 SATA controller: Intel Corporation 82801IR/IO/IH (ICH9R/DO/DH) 6 port SATA Controller [AHCI mode] (rev 02) (prog-if 01 [AHCI 1.0])&lt;br /&gt;
    Subsystem: Red Hat, Inc. QEMU Virtual Machine&lt;br /&gt;
    Flags: bus master, fast devsel, latency 0, IRQ 35&lt;br /&gt;
    I/O ports at c0c0 [size=32]&lt;br /&gt;
    Memory at fcc1d000 (32-bit, non-prefetchable) [size=4K]&lt;br /&gt;
    Capabilities: &amp;lt;access denied&amp;gt;&lt;br /&gt;
    Kernel driver in use: ahci&lt;br /&gt;
    Kernel modules: ahci&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vemos que el hardware INTEl Corporation está utilizando el módulo ahci.&lt;br /&gt;
&lt;br /&gt;
Probemos ahora con usb-devices:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
usb-devices&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Veamos un trozo de código:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
T:  Bus=01 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#=  2 Spd=480 MxCh= 0&lt;br /&gt;
D:  Ver= 2.00 Cls=00(&amp;gt;ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs=  1&lt;br /&gt;
P:  Vendor=0627 ProdID=0001 Rev=00.00&lt;br /&gt;
S:  Manufacturer=QEMU&lt;br /&gt;
S:  Product=QEMU USB Tablet&lt;br /&gt;
S:  SerialNumber=42&lt;br /&gt;
C:  #Ifs= 1 Cfg#= 1 Atr=a0 MxPwr=100mA&lt;br /&gt;
I:  If#= 0 Alt= 0 #EPs= 1 Cls=03(HID  ) Sub=00 Prot=00 Driver=usbhid&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vemos que el teclado está utilizando el módulo usbhid&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== insmod ==&lt;br /&gt;
&lt;br /&gt;
Sirve para cargar un módulo en el kernel, imaginemos que tenemos un módulo que&lt;br /&gt;
se llama modulo1:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo insmod modulo1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== rmmod ==&lt;br /&gt;
&lt;br /&gt;
Sirve para eliminar un módulo de kernel. Imaginemos que queremos borrar un&lt;br /&gt;
módulo cargado anteriormente con el nombre modulo1:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo rmmod modulo1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Marramfer12</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Administraci%C3%B3n_b%C3%A1sica&amp;diff=4544</id>
		<title>Administración básica</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Administraci%C3%B3n_b%C3%A1sica&amp;diff=4544"/>
				<updated>2019-11-13T09:58:18Z</updated>
		
		<summary type="html">&lt;p&gt;Marramfer12: /* Directorio de trabajo actual y la orden cd */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Para realizar esta práctica utilizaremos una de las máquinas virtuales que generamos en la práctica anterior.&lt;br /&gt;
&lt;br /&gt;
En esta práctica aprenderemos a utilizar el interprete de ordenes (también conocido como ''[https://www.traficantes.net/sites/default/files/pdfs/En%20el%20principio%20fue...-TdS.pdf línea de comandos]'') y a aprender nociones básicas de administración de sistemas Linux.&lt;br /&gt;
&lt;br /&gt;
= Paso 0: Breve introducción al sistema Linux =&lt;br /&gt;
&lt;br /&gt;
== Estructura básica del sistema de archivos ==&lt;br /&gt;
&lt;br /&gt;
En un sistema Linux, todas las carpetas y ficheros en el sistema de fichero pende de la carpeta raíz que se representa con la /.&lt;br /&gt;
&lt;br /&gt;
 /&lt;br /&gt;
 ├── bin&lt;br /&gt;
 ├── usr&lt;br /&gt;
 │   ├── local&lt;br /&gt;
 │   ├── bin&lt;br /&gt;
 │   └── ...&lt;br /&gt;
 ├── dev&lt;br /&gt;
 │   ├── sda&lt;br /&gt;
 │   ├── sda1&lt;br /&gt;
 │   └── ...&lt;br /&gt;
 ├── home&lt;br /&gt;
 │   ├── practica&lt;br /&gt;
 │   │   ├── tema1.pdf&lt;br /&gt;
 │   │   ├── boletin1.pdf&lt;br /&gt;
 │   │   └── ...&lt;br /&gt;
 │   ├── profesor&lt;br /&gt;
 │   └── ...&lt;br /&gt;
 └── etc&lt;br /&gt;
     ├── firefox&lt;br /&gt;
     ├── libvirt&lt;br /&gt;
     ├── ...&lt;br /&gt;
     └── ...&lt;br /&gt;
&lt;br /&gt;
Como puedes observar, el sistema de fichero emplea una estructura de árbol.&lt;br /&gt;
&lt;br /&gt;
== Carpetas . y .. ==&lt;br /&gt;
&lt;br /&gt;
Toda carpeta en un sistema Linux dispone de dos pseudocarpetas, la '''.''' y la '''..'':&lt;br /&gt;
&lt;br /&gt;
* La pseudocarpeta '''..''' hace referencia a la carpeta padre que contiene a esta carpeta.&lt;br /&gt;
* La pseudocarpeta '''.''' hace referencia a la carpeta actual, es por tanto una autoreferencia.&lt;br /&gt;
&lt;br /&gt;
En el caso de la carpeta raíz, la pseudocarpeta '''.''' y '''..''' hacen referencia a la propia carpeta raíz, se trata, por tanto de una excepción.&lt;br /&gt;
&lt;br /&gt;
== Directorio de trabajo actual y la orden cd ==&lt;br /&gt;
&lt;br /&gt;
Cada interprete de ordenes dispone de una ''carpeta de trabajo actual'' ('''c'''urrent '''w''orking '''d''irectory, en inglés). La carpeta de trabajo actual se puede modificar con la orden '''cd''' ('''c'''hange '''d'''irectory, en inglés).&lt;br /&gt;
&lt;br /&gt;
Por ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ cd ..&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nos situaría en la carpeta padre, empleando una ruta relativa.&lt;br /&gt;
&lt;br /&gt;
Si volvemos a escribir (desde /home) &amp;quot; cd .. &amp;quot; nos lleva a /$ &lt;br /&gt;
&lt;br /&gt;
Para situarnos en el raíz, podemos emplear una ruta absoluta:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ cd /&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En caso de que queramos volver a la carpeta de usuario, bastaría con invocar a '''cd''' sin más o ''' cd ~ '''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ cd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Rutas absolutas, rutas relativas ==&lt;br /&gt;
&lt;br /&gt;
Para hacer referencia a un fichero o una carpeta se usan ruta absolutas o rutas relativas.&lt;br /&gt;
&lt;br /&gt;
Las rutas absolutas siempre empieza por /, de manera que toman como punto de referencia la carpeta raíz (/). Por ejemplo, una ruta absoluta a la carpeta '''prueba''' que está almacenada en la carpeta del usuario '''ubuntu''' es '/home/ubuntu/prueba/'.&lt;br /&gt;
&lt;br /&gt;
Las ruta relativa toma como referencia la carpeta de trabajo actual. Para averiguar la carpeta de trabajo actual disponemos de la orden '''pwd'''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ pwd&lt;br /&gt;
/home/ubuntu&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En base a la carpeta de trabajo actual, empleando la pseudocarpeta '''..''', se puede construir rutas relativas. Por ejemplo, para referenciar un fichero '''fichero.txt''' en la carpeta temporal, podemos emplear la ruta relativa '''../../tmp/fichero.txt'''.&lt;br /&gt;
&lt;br /&gt;
Aunque probablemente sea más cómodo emplear una ruta absoluta en este caso, que sería '''/tmp/fichero.txt'''.&lt;br /&gt;
&lt;br /&gt;
== Intérprete de órdenes ==&lt;br /&gt;
&lt;br /&gt;
El intérprete de órdenes es un lanzador de aplicaciones textual que emplea el teclado como dispositivo de entrada de datos. Mediante el teclado, se escribe el nombre del programa que se quiere lanzar y al pulsa la tecla ''intro'' el intérprete de ordenes ejecutara dicho programa. Por defecto, el intérprete de ordenes que emplea Ubuntu por defecto es '''bash'''.&lt;br /&gt;
&lt;br /&gt;
== man: ver la paǵina de manual de una orden ==&lt;br /&gt;
&lt;br /&gt;
La orden '''man''' te será útil para ver las páginas de manual.&lt;br /&gt;
&lt;br /&gt;
Este programa toma como entrada el nombre de la orden de la que quieres consultar su página de manual, por ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
man ls&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nos da información del manual de la orden '''ls'''.&lt;br /&gt;
&lt;br /&gt;
Para salir de la página de manual, pulsa la tecla '''q''' (la primera letra de la palabra '''quit''', en inglés).&lt;br /&gt;
&lt;br /&gt;
Normalmente, los programas ofrecen opciones de ayuda, como '''--help'''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
man --help&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
También se puede emplear la versión compacta a la hora de especificar opciones.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
man -h&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En general, todas las ordenes suelen ofrecer una opción de ayuda.&lt;br /&gt;
&lt;br /&gt;
= Paso 1: Operaciones básicas con el sistema de ficheros =&lt;br /&gt;
&lt;br /&gt;
== ls ==&lt;br /&gt;
&lt;br /&gt;
Lista los ficheros y carpetas. Si no se especifica nada, muestra los ficheros y carpetas que contiene la carpeta de trabajo actual.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Si se especifica una ruta, muestra las carpetas y ficheros contenidos en dicha ruta, por ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ ls /&lt;br /&gt;
bin  boot  data  dev  etc  home  initrd.img  initrd.img.old  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  snap  srv  sys  tmp  usr  var  vmlinuz  vmlinuz.old&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Al emplear '''/''' como ruta absoluta, muestra el contenido de la carpeta raíz.&lt;br /&gt;
&lt;br /&gt;
Las opciones más usadas de este programa suelen ser:&lt;br /&gt;
&lt;br /&gt;
* -a: muestra los ficheros y carpetas ''ocultos''. En Linux, cualquier fichero o carpeta cuyo nombre empiece por . se considera ''oculto''. Esto incluye también en el listado las pseudocarpetas . y ..&lt;br /&gt;
* -l: formato largo, que muestra la fecha de última modificación, propiertario, grupo, tamaño en bytes y nombre:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ ls -a&lt;br /&gt;
.  ..  .bash_history  .bash_logout  .bashrc  .profile  .ssh&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ambas opciones se puede combinar:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ ls -la /&lt;br /&gt;
total 92&lt;br /&gt;
drwxr-xr-x  24 root root  4096 Aug 28 09:50 .&lt;br /&gt;
drwxr-xr-x  24 root root  4096 Aug 28 09:50 ..&lt;br /&gt;
drwxr-xr-x   2 root root  4096 Aug 22 12:37 bin&lt;br /&gt;
drwxr-xr-x   4 root root  4096 Aug 22 12:37 boot&lt;br /&gt;
drwx------   3 root root  4096 Aug 28 09:50 data&lt;br /&gt;
drwxr-xr-x  18 root root  3780 Aug 28 09:46 dev&lt;br /&gt;
drwxr-xr-x  93 root root  4096 Aug 28 13:51 etc&lt;br /&gt;
drwxr-xr-x   3 root root  4096 Aug 28 09:46 home&lt;br /&gt;
lrwxrwxrwx   1 root root    33 Aug 22 12:35 initrd.img -&amp;gt; boot/initrd.img-4.15.0-58-generic&lt;br /&gt;
lrwxrwxrwx   1 root root    33 Aug 22 12:35 initrd.img.old -&amp;gt; boot/initrd.img-4.15.0-58-generic&lt;br /&gt;
drwxr-xr-x  20 root root  4096 Aug 22 12:35 lib&lt;br /&gt;
drwxr-xr-x   2 root root  4096 Aug 22 12:34 lib64&lt;br /&gt;
drwx------   2 root root 16384 Aug 22 12:36 lost+found&lt;br /&gt;
drwxr-xr-x   2 root root  4096 Aug 22 12:34 media&lt;br /&gt;
drwxr-xr-x   2 root root  4096 Aug 22 12:34 mnt&lt;br /&gt;
drwxr-xr-x   3 root root  4096 Aug 28 09:49 opt&lt;br /&gt;
dr-xr-xr-x 111 root root     0 Aug 28 09:46 proc&lt;br /&gt;
drwx------   3 root root  4096 Aug 28 09:46 root&lt;br /&gt;
drwxr-xr-x  26 root root   940 Aug 28 13:51 run&lt;br /&gt;
drwxr-xr-x   2 root root  4096 Aug 28 09:49 sbin&lt;br /&gt;
drwxr-xr-x   2 root root  4096 Aug 28 09:46 snap&lt;br /&gt;
drwxr-xr-x   2 root root  4096 Aug 22 12:34 srv&lt;br /&gt;
dr-xr-xr-x  13 root root     0 Aug 28 09:46 sys&lt;br /&gt;
drwxrwxrwt  10 root root  4096 Aug 28 16:00 tmp&lt;br /&gt;
drwxr-xr-x  11 root root  4096 Aug 28 09:49 usr&lt;br /&gt;
drwxr-xr-x  13 root root  4096 Aug 22 12:36 var&lt;br /&gt;
lrwxrwxrwx   1 root root    30 Aug 22 12:35 vmlinuz -&amp;gt; boot/vmlinuz-4.15.0-58-generic&lt;br /&gt;
lrwxrwxrwx   1 root root    30 Aug 22 12:35 vmlinuz.old -&amp;gt; boot/vmlinuz-4.15.0-58-generic&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Los permisos se emplean en base a tres capacidades:&lt;br /&gt;
&lt;br /&gt;
* lectura, que se codifica con '''r''' (read, en inglés).&lt;br /&gt;
* escritura, que se codifica con '''w''' (write, en inglés).&lt;br /&gt;
* ejecutación, que se codifica con '''x''' (execute, en inglés).&lt;br /&gt;
&lt;br /&gt;
La primera columna muestra los permisos que codifican:&lt;br /&gt;
&lt;br /&gt;
* Tipo de entrada: '''d''' indica ''directorio'' (''carpeta'').&lt;br /&gt;
* Permisos del propietario, primera terna de rwx&lt;br /&gt;
* Permisos del grupo, segunda terna de rwx&lt;br /&gt;
* Permisos para el resto del mundo, tercera terna de rwx.&lt;br /&gt;
&lt;br /&gt;
A continución, aparecen el propietario y el grupo, seguidos de la fecha de última modificación y el nombre del fichero o carpeta.&lt;br /&gt;
&lt;br /&gt;
== mkdir ==&lt;br /&gt;
&lt;br /&gt;
Crea un nuevo directorio.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ mkdir test&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Crea una carpeta test en el directorio actual.&lt;br /&gt;
&lt;br /&gt;
Comprobemos que se ha creado bien:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ ls&lt;br /&gt;
test&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Con la opción '''-p''', permite crear sucesivas carpetas anidadas de una sola vez, por ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ mkdir -p a/b/c&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Que crea la siguiente estructura de carpetas.&lt;br /&gt;
&lt;br /&gt;
 a&lt;br /&gt;
 └── b&lt;br /&gt;
     └── c&lt;br /&gt;
&lt;br /&gt;
== touch ==&lt;br /&gt;
&lt;br /&gt;
Crea un nuevo fichero vacío (sin contenido) con el nombre que especifiquemos.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ touch file.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Comprobamos que el fichero se ha creado correctamente.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ ls&lt;br /&gt;
file.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== cp ==&lt;br /&gt;
&lt;br /&gt;
Copia un fichero o directorio.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ cp file.txt file_copy.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para copia una carpeta y su contenido tenemos que usar la opción -r (recursivo).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ cp -r test test_copy&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Comprobamos el resultado con la orden '''ls'''.&lt;br /&gt;
&lt;br /&gt;
== mv ==&lt;br /&gt;
&lt;br /&gt;
Mueve fichero o carpeta.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mv file_copy.txt file2.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
También se emplea para renombrar.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mv test_copy test_copy2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== rm ==&lt;br /&gt;
&lt;br /&gt;
Borra un fichero o directorio&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rm file2.txt&lt;br /&gt;
rm -r test2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Comprobamos:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ejercicios:&lt;br /&gt;
&lt;br /&gt;
# Crear la siguiente estructura dentro del directorio /tmp (usar los comandos mkdir, touch y cp):&lt;br /&gt;
&lt;br /&gt;
 /tmp&lt;br /&gt;
 ├── carpeta1&lt;br /&gt;
 ├── carpeta2&lt;br /&gt;
 │   ├── fichero1.txt&lt;br /&gt;
 │   └── fichero2.md&lt;br /&gt;
 └── carpeta3&lt;br /&gt;
     ├── fichero1.txt&lt;br /&gt;
     └── fichero2.md&lt;br /&gt;
&lt;br /&gt;
# Basándonos en el ejercicio anterior, cambiar la estructura a la siguiente (usar comandos mv y rm):&lt;br /&gt;
&lt;br /&gt;
 /tmp&lt;br /&gt;
 └── carpeta&lt;br /&gt;
     ├── fichero1.txt&lt;br /&gt;
     └── fichero2.md&lt;br /&gt;
&lt;br /&gt;
= Paso 2: Impresión por pantalla y redirección de salida =&lt;br /&gt;
&lt;br /&gt;
== echo ==&lt;br /&gt;
&lt;br /&gt;
Sirve para imprimir una línea de texto por pantalla o imprimir variables de&lt;br /&gt;
entorno.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo &amp;quot;Hola&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Una variable de entorno es una variable editada con algún valor, por defecto&lt;br /&gt;
existen algunas creadas, como por ejemplo la variable HOME, que contiene el&lt;br /&gt;
directorio del usuario:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo $HOME&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aprovecharemos y crearemos una variable nosotros:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ME=&amp;quot;my name&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Comprobamos:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo $ME&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Redirección de salida ==&lt;br /&gt;
&lt;br /&gt;
&amp;gt; y &amp;gt;&amp;gt; sirve para redirigir una salida. Por ejemplo, utilizando el comando echo,&lt;br /&gt;
podemos enviar un texto dentro de un fichero:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo &amp;quot;Esto es una prueba&amp;quot; &amp;gt; file.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La diferencia entre &amp;gt; y &amp;gt;&amp;gt; es que &amp;gt; sobrescribe lo que haya en el fichero y&lt;br /&gt;
añade el contenido, y &amp;gt;&amp;gt; no sobrescribe, solo añade el nuevo contenido.&lt;br /&gt;
&lt;br /&gt;
Hagamos la prueba:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo &amp;quot;Esto es una prueba&amp;quot; &amp;gt; file.txt&lt;br /&gt;
echo &amp;quot;Esto es una prueba2&amp;quot; &amp;gt; file.txt&lt;br /&gt;
echo &amp;quot;Esto es una prueba&amp;quot; &amp;gt;&amp;gt; file2.txt&lt;br /&gt;
echo &amp;quot;Esto es una prueba2&amp;quot; &amp;gt;&amp;gt; file2.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En cualquier caso, si el fichero no existe, se crea.&lt;br /&gt;
&lt;br /&gt;
= Paso 3: Manejo de ficheros y carpetas avanzado =&lt;br /&gt;
&lt;br /&gt;
== cat ==&lt;br /&gt;
&lt;br /&gt;
Muestra el contenido de un fichero.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat file.txt&lt;br /&gt;
cat file2.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== grep ==&lt;br /&gt;
&lt;br /&gt;
Sirve para buscar coincidencia de un cierto patrón en ficheros y muestra la coincidencia, en caso de encontrarla, por pantalla.&lt;br /&gt;
&lt;br /&gt;
Por ejemplo, para buscar el patrón ''prueba'' en el fichero ''fichero.txt''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ grep -n prueba fichero.txt&lt;br /&gt;
1:Esto es una prueba&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La opción '''-n''' muestra el número de línea.&lt;br /&gt;
&lt;br /&gt;
== wc ==&lt;br /&gt;
&lt;br /&gt;
Sirve para contar el número de palabras, caracteres, líneas o bytes que contiene un fichero.&lt;br /&gt;
&lt;br /&gt;
Las opciones más utilizadas son:&lt;br /&gt;
&lt;br /&gt;
* -l: muestra el número de líneas que contiene el fichero.&lt;br /&gt;
* -w: muestra el número de palabras.&lt;br /&gt;
* -m: muestra el número de caracteres&lt;br /&gt;
* -c: muestra el número de bytes&lt;br /&gt;
&lt;br /&gt;
Probemos y contemos todo en el fichero file2.txt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
wc -l file2.txt&lt;br /&gt;
wc -w file2.txt&lt;br /&gt;
wc -m file2.txt&lt;br /&gt;
wc -c file2.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podemos contar más de un fichero a la vez:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
wc -l file.txt file2.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nos mostrará el conteo de cada fichero y el total.&lt;br /&gt;
&lt;br /&gt;
== Tubería (|) ==&lt;br /&gt;
&lt;br /&gt;
La tubería nos servirá para conectar varios comandos al mismo tiempo, veamos&lt;br /&gt;
unos ejemplos, que siempre se entiende mejor:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat file2.txt | grep prueba&lt;br /&gt;
grep -nr prueba file2.txt | wc -l&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En el primer ejemplo, mostramos el contenido de file2.txt, y esta salida se la&lt;br /&gt;
pasamos al comando grep, el cual busca las líneas que contengan prueba.&lt;br /&gt;
&lt;br /&gt;
En el segundo, buscamos todas las líneas que contengan la palabra prueba, y esta&lt;br /&gt;
salida se la pasamos al comando wc, el cual cuenta las líneas de la salida del&lt;br /&gt;
comando grep.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Redirecciones ==&lt;br /&gt;
&lt;br /&gt;
Vamos a ver unos conceptos antes de seguir:&lt;br /&gt;
&lt;br /&gt;
* Entrada estándar: representa los datos que necesita una aplicación para funcionar, como por ejemplo un archivo de datos o información ingresada desde la terminal y es representado en la terminal como el tipo 0.&lt;br /&gt;
* Salida estándar: es la vía que utilizan las aplicaciones para mostrarte información, allí podemos ver el progreso o simplemente los mensajes que la  aplicación quiera darte en determinado momento y es representado en la terminal como el tipo 1.&lt;br /&gt;
* Error estándar: es la forma en que los programas te informan sobre los problemas que pueden encontrarse al momento de la ejecución y es representado en la terminal como el tipo 2.&lt;br /&gt;
&lt;br /&gt;
Las redirecciones nos sirven para mover la información de un tipo a otro.&lt;br /&gt;
&lt;br /&gt;
Ya vimos previamente el uso de &amp;gt; y &amp;gt;&amp;gt;, y también el |, veamos algunas más:&lt;br /&gt;
&lt;br /&gt;
* comando &amp;lt; fichero: Toma la entrada de fichero&lt;br /&gt;
* comando 2&amp;gt; fichero: Envía la salida de error de comando a fichero&lt;br /&gt;
* comando 2&amp;gt;&amp;amp;1: Envía la salida de error a la salida estándar&lt;br /&gt;
* comando &amp;amp;&amp;gt; fichero: Envía la salida estándar y de error a fichero; equivale a comando &amp;gt; fichero 2&amp;gt;&amp;amp;1&lt;br /&gt;
&lt;br /&gt;
= Paso 4: Usuarios y grupos =&lt;br /&gt;
&lt;br /&gt;
== whoami ==&lt;br /&gt;
&lt;br /&gt;
Sirve para obtener el usuario actual.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
whoami&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Lo más seguro es que nos aparezca ubuntu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== who ==&lt;br /&gt;
&lt;br /&gt;
Es para saber quien está ahora mismo en la máquina conectado.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
who&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Seguramente solo estemos nosotros:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ubuntu   pts/0        2019-08-28 13:51 (192.168.122.1)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== su y sudo ==&lt;br /&gt;
&lt;br /&gt;
su (substitute user): sirve para cambiar de usuario. Por ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
su root&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aquí nos pedirá la contraseña del usuario al que queramos cambiar.&lt;br /&gt;
&lt;br /&gt;
sudo (super user do): no todas las distribuciones lo integran, porque es menos&lt;br /&gt;
seguro que su, este comando nos permite ejecutar un comando siendo otro usuario,&lt;br /&gt;
por defecto, si no le damos usuario, lo hará con el usuario root. Si sudo nos&lt;br /&gt;
pide contraseña, nos pide la contraseña del usuario, ya que el usuario es que el&lt;br /&gt;
tiene permisos para usar sudo o no.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo ls -a /root&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Si tuviéramos por ejemplo un usuario 'practica' y quisíeramos ejecutar un&lt;br /&gt;
comando en su nombre:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo -u practica ls&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== adduser y useradd ==&lt;br /&gt;
&lt;br /&gt;
Ambos comandos sirven para crear un nuevo usuario, pero tienen sus diferencias.&lt;br /&gt;
&lt;br /&gt;
useradd es un comando del sistema, y adduser es un script escrito en perl que&lt;br /&gt;
utiliza el comando useradd. La diferencia así de primeras es que adduser nos&lt;br /&gt;
crear el directorio /home/usuario y useradd necesita la opción -m para hacer lo&lt;br /&gt;
mismo. Se puede utilizar el que se quiera, aunque es más recomendable useradd,&lt;br /&gt;
ya que funcionará igual en todas las distribuciones.&lt;br /&gt;
&lt;br /&gt;
Vamos a añadir un usuario practica con su directorio en /home (notemos que&lt;br /&gt;
necesitamos permisos de super usuario para realizar esta tarea):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo useradd -m practica&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vamos a comprobar que el directorio home está creado y que el usuario practica&lt;br /&gt;
funciona:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls /home  # veremos el directorio practica&lt;br /&gt;
sudo -u practica whoami  # nos dirá que somo el usuario practica&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== passwd ==&lt;br /&gt;
&lt;br /&gt;
Sirve para modificar la contraseña de un usuario, por ejemplo, vamos a modificar&lt;br /&gt;
la contraseña del usuario que hemos creado previamente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo passwd practica&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nos preguntará dos veces la contraseña, y ya la tendremos actualizadas. Vamos&lt;br /&gt;
ahora a probar ahora el comando su para cambiar de usuario:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
su practica&lt;br /&gt;
whoami&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Veremos que hemos cambiado de usuario, para cerrar este usuario, escribimos&lt;br /&gt;
'exit' o pulsamos 'CTLR + D'&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== deluser y userdel ==&lt;br /&gt;
&lt;br /&gt;
Ambos sirven para borrar un usuario, similar a adduser y useradd, userdel es el&lt;br /&gt;
comando y deluser el script.&lt;br /&gt;
&lt;br /&gt;
Vamos a borrar el usuario que hemos creado, incluyendo el borrado de su /home&lt;br /&gt;
(opción -r):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
userdel -r practica&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Comprobemos que ya no tenemos usuario ni /home:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls /home&lt;br /&gt;
sudo -u practica whoami&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== addgroup y groupadd ==&lt;br /&gt;
&lt;br /&gt;
Ambos sirven para crear un grupo. Los grupos sirven para agrupar a los usuarios&lt;br /&gt;
y que estos tengan unos mismos permisos. Por ejemplo, cuando instalamos algunas&lt;br /&gt;
herramientas como por ejemplo docker, este crea el grupo docker automáticamente&lt;br /&gt;
para que fácilmente podamos añadir a un usuario al grupo, y este tenga los&lt;br /&gt;
permisos para trabajar con dicha herramienta.&lt;br /&gt;
&lt;br /&gt;
Vamos a crear un nuevo grupo, vamos a llamarle invitado:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo groupadd invitado&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== usermod y groups ==&lt;br /&gt;
&lt;br /&gt;
usermod es utilizado para asignar un grupo a un usuario.&lt;br /&gt;
&lt;br /&gt;
groups es utilizado para ver los grupos a los que pertenece un usuario.&lt;br /&gt;
&lt;br /&gt;
Vamos a añadir a un usuario practica, lo vamos a añadir al grupo invitado y&lt;br /&gt;
veremos los grupos a los que pertenece:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo useradd -m practica&lt;br /&gt;
sudo usermod -G invitado practica&lt;br /&gt;
groups practica&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Veremos que el usuario práctica pertenece al grupo invitado.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== delgroup y groupdel ==&lt;br /&gt;
&lt;br /&gt;
Ambos sirven para eliminar un grupo. Vamos a eliminar el grupo que hemos creado&lt;br /&gt;
anteriormente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo groupdel invitado&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podemos observar ahora que el usuario practica no pertenece al grupo invitado:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
groups practica&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Paso 5: Permisos =&lt;br /&gt;
&lt;br /&gt;
== Nomenclatura rwx y numérica ==&lt;br /&gt;
&lt;br /&gt;
Si hacemos un ls -l, la primera cadena que nos aparece son los permisos del&lt;br /&gt;
fichero (-rwxrw-r--), podemos dividirlo en 4 elementos:&lt;br /&gt;
&lt;br /&gt;
-    (rwx)   (rw-)  (r--)&lt;br /&gt;
|      |       |      |&lt;br /&gt;
type  owner   group  others&lt;br /&gt;
&lt;br /&gt;
* type: el tipo de fichero, pudiendo ser d (directorio), l (enlace simbólico), - (fichero normal)&lt;br /&gt;
* owner: permisos de propietario&lt;br /&gt;
* group: permisos de grupo&lt;br /&gt;
* others: permisos para los demás usuarios&lt;br /&gt;
&lt;br /&gt;
Significado de los permisos:&lt;br /&gt;
&lt;br /&gt;
* r: permisos de lectura&lt;br /&gt;
* w: permisos de escritura&lt;br /&gt;
* x: permisos de ejecución&lt;br /&gt;
&lt;br /&gt;
Por último, existe un modo abreviado para estos permisos que se utiliza con&lt;br /&gt;
números.&lt;br /&gt;
&lt;br /&gt;
rwx&lt;br /&gt;
001 en binario es 1 en decimal. Permisos de ejecución&lt;br /&gt;
010 en binario es 2 en decimal. Permisos de escritura&lt;br /&gt;
100 en binario es 4 en decimal. Permisos de lectura&lt;br /&gt;
&lt;br /&gt;
La suma de los permisos, nos da el valor numérico. Veamos un ejemplo:&lt;br /&gt;
rwx rw- r--&lt;br /&gt;
111 110 100&lt;br /&gt;
 7   6   4&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== chmod ==&lt;br /&gt;
&lt;br /&gt;
Permite cambiar los permisos de acceso a un fichero o directorio. Podemos dar&lt;br /&gt;
permisos de dos formas diferentes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== modo carácter ===&lt;br /&gt;
&lt;br /&gt;
Veamos primero unos detalles:&lt;br /&gt;
&lt;br /&gt;
Clases de usuario:&lt;br /&gt;
&lt;br /&gt;
* owner (u)&lt;br /&gt;
* group (g)&lt;br /&gt;
* others (o)&lt;br /&gt;
* all (a)&lt;br /&gt;
&lt;br /&gt;
Modificador:&lt;br /&gt;
&lt;br /&gt;
* añadir (+)&lt;br /&gt;
* eliminar (-)&lt;br /&gt;
* sobrescribir (=)&lt;br /&gt;
&lt;br /&gt;
Para dar permisos tendríamos que seleccionar la clase de usuario el modificador&lt;br /&gt;
y los permisos, veamos un ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chmod u+x file  # añadimos permisos de ejecución al usuario&lt;br /&gt;
chmod go-w file  # quitamos permisos de escritura al grupo y a otros usuarios&lt;br /&gt;
chmod u=rwx,go=r file  # Al usuario le damos todos los permisos, y al grupo y otros solo le damos permisos de lectura&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Modo octal ===&lt;br /&gt;
&lt;br /&gt;
Con el modo octacl, es como si siempre utilizáramos el modificar sobrescribir,&lt;br /&gt;
pongamos algunos ejemplos:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chmod 744 file  # Al usuario le damos todos los permisos, y al grupo y otros solo le damos permisos de lectura&lt;br /&gt;
chmod 777 file  # Todos tienen permisos para todo&lt;br /&gt;
chmod 600 file  # solo el propietario tiene permisos de lectura y escritura&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Ejemplos ===&lt;br /&gt;
&lt;br /&gt;
Vamos a ver como funciona el tema de permisos con unos ejemplos. Vamos a crear&lt;br /&gt;
un fichero pruebas y le vamos a quitar los permisos de escritura a nuestro&lt;br /&gt;
usuario, y le vamos a dar permisos de escritura a otros:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
touch pruebas&lt;br /&gt;
ls -l pruebas  # de esta forma veremos que por defecto los permisos son rw-rw-r--&lt;br /&gt;
chmod u-w,o+w pruebas&lt;br /&gt;
ls -l pruebas  # ahora los permisos deberían ser -w-rw-rw-&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Una vez dado los permisos, veamos que con nuestro usuario podemos leer pero no&lt;br /&gt;
escribir:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat pruebas&lt;br /&gt;
echo &amp;quot;probando&amp;quot; &amp;gt; pruebas&lt;br /&gt;
exit&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Y ahora vamos a ver que el usuario pruebas, puede leer y escribir:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
su practica&lt;br /&gt;
cat pruebas&lt;br /&gt;
echo &amp;quot;probando&amp;quot; &amp;gt; pruebas&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== chown ==&lt;br /&gt;
&lt;br /&gt;
Permite cambiar el propietario de un fichero o directorio.&lt;br /&gt;
&lt;br /&gt;
Vamos por ejemplo a pasarle ahora el fichero pruebas al usuario practica:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo chown practica pruebas&lt;br /&gt;
ls -l pruebas&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Veremos que el usuario actual ahora es pruebas, aunque vemos que el ls muestra&lt;br /&gt;
lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
-r--rw-rw- 1 practica ubuntu 9 Aug 29 09:34 pruebas&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hay que comentar un detalle, y es que los ficheros y directorios tienen asignado&lt;br /&gt;
un usuario y un grupo, por defecto se utiliza el mismo usuario como grupo&lt;br /&gt;
cuando creamos un nuevo fichero o directorio. Si queremos que cuando cambiemos&lt;br /&gt;
el propietario, cambiar tambien el grupo del fichero, podemos hacerlo de la&lt;br /&gt;
siguiente forma:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo chown practica:practica pruebas&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Una vez hecho esto, vamos ahora a probar que los permisos siguen funcionando&lt;br /&gt;
como antes, ahora con el usuario ubuntu, deberíamos de poder leer y escribir en&lt;br /&gt;
el fichero pruebas, y con el usuario practica, solo leer, esto es así por que&lt;br /&gt;
ahora el propitario es practica:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Pruebas usuario ubuntu&lt;br /&gt;
cat pruebas&lt;br /&gt;
echo test &amp;gt;&amp;gt; pruebas&lt;br /&gt;
# Pruebas usuario practica&lt;br /&gt;
su practica&lt;br /&gt;
cat pruebas&lt;br /&gt;
echo &amp;quot;probando&amp;quot; &amp;gt; pruebas&lt;br /&gt;
exit&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Paso 6: Procesos =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== ps ==&lt;br /&gt;
&lt;br /&gt;
Sirve para ver que procesos están ejecutándose en el sistema, veamos un ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ps aux  # con la opción aux mostraremos todos los procesos del sistema&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cada línea es un proceso, y cada proceso muestra su PID, usuario, cantidad de&lt;br /&gt;
memoria y cpu utilizada, comando y otros detalles.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
man kill &amp;amp;  # añadir el &amp;amp; al final de un comando hace que este se ejecute en segundo plano, por lo que se quedará abierto&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La salida de este comando nos mostrará el PID que tiene ese proceso que acabamos&lt;br /&gt;
de ejecutar, vamos a comprobarlo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ps aux | grep &amp;quot;man kill&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Veremos que el PID coincide.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== kill ==&lt;br /&gt;
&lt;br /&gt;
Este comando nos servirá para matar un proceso. kill se utiliza seguido de una&lt;br /&gt;
señal para enviar al proceso seguido de uno o varios PID. para ver las señales&lt;br /&gt;
disponibles, podemos listarlas:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kill -l&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Las más utilizadas suele ser SIGTERM y SIGKILL, la primera intenta terminar el&lt;br /&gt;
proceso de forma poco abrupta, y la segunda suele utilizarse cuando el proceso&lt;br /&gt;
no atiende a esta primera señal. Vamos ahora a terminar el proceso que creamos&lt;br /&gt;
antes, si no recordamos el PID, busquémoslo de nuevo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ps aux | grep &amp;quot;man kill&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enviamos señal para terminar el proceso y comprobamos que ha terminado:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
kill -SIGTERM 8470&lt;br /&gt;
ps aux | grep &amp;quot;man kill&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
También podemos notar que en el listado de señales, hay unos números, podemos&lt;br /&gt;
utilizar esos números en vez de las palabras, por ejemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
man kill &amp;amp;&lt;br /&gt;
kill -15 PID_COMANDO_PREVIO&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Comprobamos que el proceso ha terminado correctamente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ps aux | grep &amp;quot;man kill&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Paso 7: Estado CPU, RAM y Disco =&lt;br /&gt;
&lt;br /&gt;
== top ==&lt;br /&gt;
&lt;br /&gt;
Este comando nos servirá para ver el listado de procesos y el estado de la CPU y&lt;br /&gt;
memoria.&lt;br /&gt;
&lt;br /&gt;
Probemos el comando y observemos detalladamente la salida:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
top&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para salir, pulsamos q.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== df y du ==&lt;br /&gt;
&lt;br /&gt;
df (disk free) y du (disk usage). Ambas son utilidades para mostrar el uso de&lt;br /&gt;
los discos.&lt;br /&gt;
&lt;br /&gt;
Con df mostraremos la información del espacio en cada dispositivo montado:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
df&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Estos comandos que nos muestran el tamaño de los ficheros, casi siempre tienen&lt;br /&gt;
una opción para mostrarlo en un formato más legible (-h)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
df -h&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mucho mejor.&lt;br /&gt;
&lt;br /&gt;
Ahora veamos el comando du, el cual nos mostrará el tamaño de un fichero o&lt;br /&gt;
directorio y sus subdirectorios, no olvidemos el -h:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
du -h /home/ubuntu&lt;br /&gt;
du -h /home/ubuntu/pruebas&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Si solo quisíeramos saber el total de una carpeta y nos nos interesan sus&lt;br /&gt;
subcarpetas, podemos utilizar la opción -s:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
du -sh /home/ubuntu&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== free ==&lt;br /&gt;
&lt;br /&gt;
Sirve para ver el estado de la memoria, como siempre, opción -h:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
free -h&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== lsblk ==&lt;br /&gt;
&lt;br /&gt;
Nos muestra la información de todos los dispositivos de bloques (discos duros,&lt;br /&gt;
pendrivers, CD_ROM, SSD, ...).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lsblk&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En la siguiente práctica se utilizará más a fondo este comando, ya que&lt;br /&gt;
trabajaremos con dispositivos.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Paso 8: Gestión de paquetes de software y repositorios =&lt;br /&gt;
&lt;br /&gt;
Los sistemas Linux incluyen, además de las herramientas básicas del sistema operativo, repositorios de software que puede ser opcionalmente instalados por el administrador del sistema. Los fabricantes de las distribuciones de Linux incluyen paquetes de software listos para ser instalados que se integran con el sistema.&lt;br /&gt;
&lt;br /&gt;
Un paquete incluye el software necesario para que una cierta aplicación funcione correctamente, así como sus paquetes de dependencia.&lt;br /&gt;
&lt;br /&gt;
En Ubuntu, la herramienta de gestión de paquetes de software y repositorios se llama '''apt'''.&lt;br /&gt;
&lt;br /&gt;
=== Listado de repositorios de paquetes de software ===&lt;br /&gt;
&lt;br /&gt;
En Ubuntu el listado de repositorios se encuentra en el fichero /etc/apt/sources.list. Podemos comprobar que repositorios tenemos añadido:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat /etc/apt/sources.list&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Actualización del listado de paquetes de software ===&lt;br /&gt;
&lt;br /&gt;
Para actualizar el listado de paquetes utilizaremos el comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt update&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Instalación un nuevo paquete ===&lt;br /&gt;
&lt;br /&gt;
Para instalar un nuevo paquete, utilizaremos la orden install, por ejemplo, vamos a instalar tree, similar al ls pero muestra el arbol de directorios:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt install tree&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Desinstalación de un paquete ===&lt;br /&gt;
&lt;br /&gt;
Usaremos la orden purge o la orden remove, purge nos lo eliminad todo, y remove mantiene la configuración en el caso de que el paquete la tuviese. Vamos a eliminar el paquete instalado previamente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt purge tree&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Paso 9: Módulos =&lt;br /&gt;
&lt;br /&gt;
Los módulos del kernel de Linux son partes que podemos añadir o quitar de forma&lt;br /&gt;
sencilla con el fin de añadir o quitar funcionalidad. Por ejemplo, algunas de&lt;br /&gt;
estas funcionalidades son:&lt;br /&gt;
&lt;br /&gt;
* Registrar temperaturas de nuestros componentes&lt;br /&gt;
* Hacer funcionr la tarjeta de red wifi&lt;br /&gt;
* Cargar los drivers de una tarjeta gráfica&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== lsmod ==&lt;br /&gt;
&lt;br /&gt;
Comando para ver los módulos que estamos usando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lsmod&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== lspci y usb-devices ==&lt;br /&gt;
&lt;br /&gt;
Estos comandos nos servirán para ver el hardware que está conectado a nuestro&lt;br /&gt;
ordenador. Con lspci veremos el listado del hardware integrado y con usb-devices&lt;br /&gt;
el que está conectado por hardware.&lt;br /&gt;
&lt;br /&gt;
Normalmente, como los módulos se utilizan para dar funcionalidad un hardware,&lt;br /&gt;
aquí en los listado de hardware podremos ver que módulo está utilizando cada&lt;br /&gt;
hardware:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lspci -v&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Veremos una línea en algunos dispositivos que nos diga que módulo estamos&lt;br /&gt;
usando, pongo un pequeño trozo de la salida del comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
00:1f.2 SATA controller: Intel Corporation 82801IR/IO/IH (ICH9R/DO/DH) 6 port SATA Controller [AHCI mode] (rev 02) (prog-if 01 [AHCI 1.0])&lt;br /&gt;
    Subsystem: Red Hat, Inc. QEMU Virtual Machine&lt;br /&gt;
    Flags: bus master, fast devsel, latency 0, IRQ 35&lt;br /&gt;
    I/O ports at c0c0 [size=32]&lt;br /&gt;
    Memory at fcc1d000 (32-bit, non-prefetchable) [size=4K]&lt;br /&gt;
    Capabilities: &amp;lt;access denied&amp;gt;&lt;br /&gt;
    Kernel driver in use: ahci&lt;br /&gt;
    Kernel modules: ahci&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vemos que el hardware INTEl Corporation está utilizando el módulo ahci.&lt;br /&gt;
&lt;br /&gt;
Probemos ahora con usb-devices:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
usb-devices&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Veamos un trozo de código:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
T:  Bus=01 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#=  2 Spd=480 MxCh= 0&lt;br /&gt;
D:  Ver= 2.00 Cls=00(&amp;gt;ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs=  1&lt;br /&gt;
P:  Vendor=0627 ProdID=0001 Rev=00.00&lt;br /&gt;
S:  Manufacturer=QEMU&lt;br /&gt;
S:  Product=QEMU USB Tablet&lt;br /&gt;
S:  SerialNumber=42&lt;br /&gt;
C:  #Ifs= 1 Cfg#= 1 Atr=a0 MxPwr=100mA&lt;br /&gt;
I:  If#= 0 Alt= 0 #EPs= 1 Cls=03(HID  ) Sub=00 Prot=00 Driver=usbhid&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vemos que el teclado está utilizando el módulo usbhid&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== insmod ==&lt;br /&gt;
&lt;br /&gt;
Sirve para cargar un módulo en el kernel, imaginemos que tenemos un módulo que&lt;br /&gt;
se llama modulo1:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo insmod modulo1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== rmmod ==&lt;br /&gt;
&lt;br /&gt;
Sirve para eliminar un módulo de kernel. Imaginemos que queremos borrar un&lt;br /&gt;
módulo cargado anteriormente con el nombre modulo1:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo rmmod modulo1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Marramfer12</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Virtualizaci%C3%B3n_con_libvirt&amp;diff=4543</id>
		<title>Virtualización con libvirt</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Virtualizaci%C3%B3n_con_libvirt&amp;diff=4543"/>
				<updated>2019-11-06T16:22:56Z</updated>
		
		<summary type="html">&lt;p&gt;Marramfer12: /* Paso 8: Instalación Manual de SO en VVM */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Para la realización de esta práctica necesitará de una imagen de Ubuntu Cloud que descargaremos de https://cloud-images.ubuntu.com/ y necesitaremos un&lt;br /&gt;
sistema anfitrión con Ubuntu 18.04.&lt;br /&gt;
&lt;br /&gt;
En esta práctica se empleará la imagen descargada de la web Ubuntu Cloud y se hará uso de la herramienta '''cloud-init''' para configurarla.&lt;br /&gt;
&lt;br /&gt;
A continuación, utilizaremos la imagen de Ubuntu ya configurada para ser importada al software de virtualización '''libvirt'''.&lt;br /&gt;
&lt;br /&gt;
= Paso 1: Descarga de la imagen Ubuntu Cloud =&lt;br /&gt;
&lt;br /&gt;
Entramos en https://cloud-images.ubuntu.com/ y descargamos la imagen de Ubuntu 18.04 LTS (Long Time Support).&lt;br /&gt;
&lt;br /&gt;
Puedes descargarla directamente con la orden ''wget'':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
wget https://cloud-images.ubuntu.com/bionic/current/bionic-server-cloudimg-amd64.img&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
si comenzó a descargar verás una salida similar a esta:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
-2019-08-06 12:26:26--  https://cloud-images.ubuntu.com/bionic/current/bionic-server-cloudimg-amd64.img&lt;br /&gt;
Resolviendo cloud-images.ubuntu.com (cloud-images.ubuntu.com)... 91.189.88.89, 2001:67c:1560:8001::8001&lt;br /&gt;
Conectando con cloud-images.ubuntu.com (cloud-images.ubuntu.com)[91.189.88.89]:443... conectado.&lt;br /&gt;
Petición HTTP enviada, esperando respuesta... 200 OK&lt;br /&gt;
Longitud: 343474176 (328M) [application/octet-stream]&lt;br /&gt;
Grabando a: “bionic-server-cloudimg-amd64.img”&lt;br /&gt;
&lt;br /&gt;
bionic-server-cloudimg-amd64.img.   0%[                                                              ]   2,21M   472KB/s    eta 14m 6s&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Espera hasta que la imagen esté descargada al 100%.&lt;br /&gt;
&lt;br /&gt;
= Paso 2: Instalación del paquete cloud-init =&lt;br /&gt;
&lt;br /&gt;
A continuación, tienes que instalar los [[paquetes]] que ofrecen la herramienta ''cloud-init'' para configurar la imagen de Ubuntu que has descargado, estos paquetes son:&lt;br /&gt;
&lt;br /&gt;
* '''cloud-init''': herramienta para configurar una imagen de Ubuntu cloud.&lt;br /&gt;
* '''cloud-image-utils''': esta herramienta es complementaria a cloud-init y sirve para modificar imágenes de Ubuntu cloud.&lt;br /&gt;
&lt;br /&gt;
Podemos instalar estos paquetes con la herramienta '''apt''' desde el intérprete de órdenes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt install cloud-init cloud-image-utils&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''En los ordenadores del aula de prácticas estos paquetes ya estarán preinstalados, con lo que puedes saltarte este paso''.&lt;br /&gt;
&lt;br /&gt;
= Paso 3: Configuración de la imagen de Ubuntu con cloud-init =&lt;br /&gt;
&lt;br /&gt;
Para configurar la imagen de Ubuntu cloud, hay que crear un fichero de configuración para la herramienta '''cloud-init'''. Este fichero empieza siempre por la línea #cloud-config y se estructura en formato [https://es.wikipedia.org/wiki/YAML yaml], el contenido del fichero ''cloud.cfg'' sería el siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#cloud-config&lt;br /&gt;
password: qwerty123&lt;br /&gt;
chpasswd: { expire: False }&lt;br /&gt;
ssh_pwauth: True&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
El ejemplo anterior muestra cómo configurar la imagen descargada para que disponga del usuario ''ubuntu'', y en este caso, la contraseña es ''querty123'', y que se pueda acceder a dicho usuario por medio de ''[[ssh]]''.&lt;br /&gt;
&lt;br /&gt;
Podemos configurar la imagen para que apliquen estos cambios con el siguiente comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cloud-localds media.img cloud.cfg&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Esta aplicación genera un fichero imagen que será empleado para configurar la imagen de Ubuntu cloud que has descargado.&lt;br /&gt;
&lt;br /&gt;
Dispones de más información suplementaria sobre como usar [[cloud-init]].&lt;br /&gt;
&lt;br /&gt;
= Paso 4: Instalación de libvirt e importación de imagenes =&lt;br /&gt;
&lt;br /&gt;
Para instalar libvirt lo hacemos con la herramienta '''apt''' desde el intérprete de órdenes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt install virt-manager&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''En los ordenadores del aula de prácticas este paquete ya estará preinstalado, con lo que puedes saltarte la orden anterior''.&lt;br /&gt;
&lt;br /&gt;
[[Archivo:virt-manager.png|thumb|Interfaz de virt-manager.]]&lt;br /&gt;
&lt;br /&gt;
Una vez instalada podemos lanzar virt-manager desde el intérprete de órdenes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virt-manager&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para importar la imagen de Ubuntu cloud que hemos descargado a la máquina virtual, desde un intérprete de órdenes en el anfitrión (¡sin cerrar la ventana de virt-manager de la que ya disponemos!), vamos a copiar la imagen descargada en el paso 1 y la imagen generada en el paso 3 en el directorio de trabajo de virt-manager que se encuentra en ''/var/lib/libvirt/images''. Para ello, desde el intérprete de órdenes que hemos lanzado y desde el directorio donde tengamos las imágenes anteriormente generadas, invocamos las siguientes ordenes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo cp bionic-server-cloudimg-amd64.img /var/lib/libvirt/images&lt;br /&gt;
sudo cp media.img /var/lib/libvirt/images&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Con estas ordenes, estas copiando la imagen de Ubuntu cloud descargada y la imagen generada por cloud-localds en la carpeta''/var/lib/libvirt/images'' que contiene las imagenes de las que dispone la virt-manager.&lt;br /&gt;
&lt;br /&gt;
[[Archivo:virt-manager-paso4-5.png|thumb|Seleccionar imagen de Ubuntu descargada.]]&lt;br /&gt;
&lt;br /&gt;
Volvemos a la interfaz gráfica de virt-manager una vez copiadas las imágenes y creamos una nueva máquina virtual empleando dichas imágenes:&lt;br /&gt;
&lt;br /&gt;
# Desde la interfaz de virt-manager creamos una nueva Máquina Virtual ''(Archivo --&amp;gt; Nueva máquina virtual)''&lt;br /&gt;
# En la nueva ventana que se abre, seleccionamos ''Medio de instalación local'' y pulsamos ''Adelante''&lt;br /&gt;
# En ''Choose ISO or CDROM install media'' seleccionamos la imagen de ''media.img''' creada en el paso 3; y desmarcamos la casilla de ''Detección automática'' para seleccionar nuestro Sistema Operativo, en este caso, Ubuntu 18.04 LTS. Vemos que todo queda como en la imagen y pulsamos ''Adelante'' [[Archivo:virt-manager-paso4-3.png|thumb|Elegir imagen de configuración y SO.]]&lt;br /&gt;
# Seleccionamos la cantidad de memoria y de CPU que queremos, por defecto 2048 de Memoria y 1 CPU está bien.&lt;br /&gt;
# En el almacenamiento, vamos a seleccionar un almacenaje personalizado, y aquí sera donde seleccionemos la imagen de ubuntu descargada, en nuestro caso ''bionic-server-cloudimg-amd64.img'' y pulsamos ''Adelante'' &lt;br /&gt;
# En el último paso, podremos selecionar la red, por ahora dejaremos [[NAT]] por defecto y pulsamos '''Finalizar''' (Si nos pregunta si queremos crear una red [[NAT]] porque no está creada, le decimos que sí).&lt;br /&gt;
&lt;br /&gt;
Ya tenemos nuestra máquina virtual creada con nuestra configuración. Ahora vamos a probar que todo funciona correctamente. La máquina debería de estar arrancando y debería de aparecer el mensaje de login. [[Archivo:virt-manager-login.png|thumb|Login de ubuntu.]]&lt;br /&gt;
&lt;br /&gt;
Utilizamos como usuario ''ubuntu'', que es el usuario por defecto y como contraseña empleamos la que hayamos elegido en el paso 3. Con esto nos validamos en el sistema con éxito. [[Archivo:virt-manager-logged.png|thumb|Usuario ya validado, en el intérprete de ordenes]]&lt;br /&gt;
&lt;br /&gt;
Ya disponemos de un intérprete de ordenes en nuestro sistema operativo Ubuntu cloud que corre sobre nuestra máquina virtual.&lt;br /&gt;
&lt;br /&gt;
'''Nota''': El teclado de la imagen de Ubuntu cloud que corre en la máquina virtual está en inglés, puedes cambiarlo con la siguiente orden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo loadkeys es&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Paso 5: Configuración de la red en libvirt =&lt;br /&gt;
&lt;br /&gt;
Antes de ver los detalles de red, vamos a hacer una pequeña diferencia entre las dos ventanas que tenemos abiertas, virt-manager principal y virt-manager máquina de ubuntu ejecutándose. En la primera tendremos las configuraciones generales y en la segunda tendremos las configuraciones de una máquina virtual concreta, en nuestro caso, la configuración de la máquina virtual de ubuntu.&lt;br /&gt;
&lt;br /&gt;
Con esto, veremos dos formas de saber la IP de nuestra máquina virtual:&lt;br /&gt;
&lt;br /&gt;
# En la ventana de nuestra máquina virtual de ubuntu, vamos a cambiar la vista y ver los detalles de nuestra máquina. ''Vista --&amp;gt; Detalles''. Aquí tenemos toda la configuración de nuestra máquina, pero solo vamos a centrarnos en la Interfaz de red virtual, que es donde podremos ver cual es pa IP que tiene asiganada nuestra máquina y cual es la fuente de red que se está utilizando. [[Archivo:virt-manager-nic.png|thumb|Interfaz de red virtual.]]&lt;br /&gt;
# La otra opción es utilizando comandos, podemos utilizar ''ip address'' en la consola de nuestra máquina virtual.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ sudo ip address&lt;br /&gt;
1: lo: &amp;lt;LOOPBACK,UP,LOWER_UP&amp;gt; mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000&lt;br /&gt;
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00&lt;br /&gt;
    inet 127.0.0.1/8 scope host lo&lt;br /&gt;
       valid_lft forever preferred_lft forever&lt;br /&gt;
    inet6 ::1/128 scope host &lt;br /&gt;
       valid_lft forever preferred_lft forever&lt;br /&gt;
2: ens3: &amp;lt;BROADCAST,MULTICAST,UP,LOWER_UP&amp;gt; mtu 1500 qdisc pfifo_fast state UP group default qlen 1000&lt;br /&gt;
    link/ether 3d:f0:ee:49:aa:22 brd ff:ff:ff:ff:ff:ff&lt;br /&gt;
    inet 192.168.100.168/24 brd 192.168.2.255 scope global eth0&lt;br /&gt;
       valid_lft forever preferred_lft forever&lt;br /&gt;
    inet6 fe80::3e97:eff:fe39:dd20/64 scope link &lt;br /&gt;
       valid_lft forever preferred_lft forever&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Que nos permite comprobar que estamos utilizando la dirección IP 192.168.100.168.&lt;br /&gt;
&lt;br /&gt;
Si la interfaz no muestra una dirección IP, puedes forzar la obtención de una dirección IP desde la máquina virtual para la interfaz ''ens3'' con la orden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo dhclient ens3&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vamos a comprobar ahora desde un terminal en el anfitrión que alcanzamos a nuestra máquina virtual.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ping 192.168.100.168&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Deberíamos de ver una salida similar a la siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
PING 192.168.100.168 (192.168.100.168) 56(84) bytes of data.&lt;br /&gt;
64 bytes from 192.168.100.168: icmp_seq=1 ttl=64 time=0.397 ms&lt;br /&gt;
64 bytes from 192.168.100.168: icmp_seq=2 ttl=64 time=0.409 ms&lt;br /&gt;
64 bytes from 192.168.100.168: icmp_seq=3 ttl=64 time=0.321 ms&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Si hubiere algún problema de conectividad la salida sería de este tipo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
PING 192.168.100.168 (192.168.100.168) 56(84) bytes of data.&lt;br /&gt;
From 192.168.100.1 icmp_seq=1 Destination Host Unreachable&lt;br /&gt;
From 192.168.100.1 icmp_seq=2 Destination Host Unreachable&lt;br /&gt;
From 192.168.100.1 icmp_seq=3 Destination Host Unreachable&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En dicho caso, puedes forzar la obtención de una dirección IP con la orden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo dhclient ens3&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Esto quiere decir que la configuración de red es incorrecta, o quizás que la dirección IP de tu máquina virtual no es 192.168.100.168 :-).&lt;br /&gt;
&lt;br /&gt;
Dispones de más información suplementaria sobre la [[configuración de red en libvirt]].&lt;br /&gt;
&lt;br /&gt;
= Paso 6: Clonado de máquinas virtuales =&lt;br /&gt;
&lt;br /&gt;
Vamos a reutilizar la configuración y la máquina virtual creada, para crear varias iguales. Empecemos:&lt;br /&gt;
&lt;br /&gt;
# Apagamos la máquina virtual si la tenemos encendida, para que nos permita hacer un clonado. ''Máquina virtual --&amp;gt; Apagar --&amp;gt; Apagar''&lt;br /&gt;
# En la ventana principal, pulsar botón derecho encima de la máquina virtual que queramos clonar, y pulsar ''Clonar ...''&lt;br /&gt;
# En la ventana que nos aparece, por defecto seleccionará la misma red y creará una MAC diferente para la nueva máquina y clonará la imagen de ubuntu que usamos de almacenamiento. Le damos un nuevo nombre a nuestra máquina, y pulsamos en ''Clonar''.&lt;br /&gt;
# Repetimos este paso hasta que tengamos toda las máquinas virtuales deseadas, en nuestro caso, solo crearemos una para probar los detalles de red.&lt;br /&gt;
&lt;br /&gt;
Ahora arrancaremos la máquina original y la clonada, y vamos a comprobar que ambas están en la misma red y que pueden verse entre ellas. Como comentamos en el paso anterior, comprobaremos la IP de la máquina virtual original y de la clonada, y haremos ping desde dentro de las máquinas para comprobar que se ven.&lt;br /&gt;
&lt;br /&gt;
Ejemplo:&lt;br /&gt;
&lt;br /&gt;
* Máquina original tiene IP 192.168.100.168&lt;br /&gt;
* Máquina clonada tiene IP 192.168.100.169&lt;br /&gt;
* Desde la máquina original haremos un ping 192.168.100.169&lt;br /&gt;
* Desde la máquina clonada haremos un ping 192.168.100.168&lt;br /&gt;
* Desde ambas máquinas, comprobaremos que la puerta de enlace es la misma, haciendo un ''ip route''.&lt;br /&gt;
* Desde la máquina host, deberíamos de obtener ping hacía las dos máquinas&lt;br /&gt;
&lt;br /&gt;
= Paso 7: Instantáneas de máquinas virtuales =&lt;br /&gt;
&lt;br /&gt;
Las instantáneas nos permiten almacenar una captura del estado de la ejecución de una máquina virtual en un cierto instante tiempo que podremos restaurar cuando sea necesario. Las instantáneas te serán útiles si tienes trabajo a medio hacer en la máquina virtual, de manera que quieras guardar lo que has hecho para restaurarlo posteriormente.&lt;br /&gt;
&lt;br /&gt;
Para crear una instantánea, accedemos a la máquina virtual en ejecución y desplegamos el menú ''Vista'' y pinchamos sobre ''Capturas de Pantalla'' (Snapshot). Después pulsamos en el botón ''+'' que aparece abajo a la izquierda, indicamos el nombre de la instantánea y le damos a ''Finalizar'.&lt;br /&gt;
&lt;br /&gt;
La creación de instantáneas toma algo de tiempo, sé paciente. Puedes almacenar tantas instantáneas como quieras. El nombre ''Captura de pantalla'' es una traducción poco afortunada del inglés ''snapshot'' que se refiere al término ''instantánea''.&lt;br /&gt;
&lt;br /&gt;
= Paso 8: Instalación Manual de SO en VVM =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1) Ubuntu net install (ubuntu minimalCD):&lt;br /&gt;
	64bit 18.04&lt;br /&gt;
&lt;br /&gt;
[[Archivo:WEB DONDE INSTALARLA .png]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:DESCARGAR UBUNTU .png]]&lt;br /&gt;
&lt;br /&gt;
2) Creamos una nueva máquina virtual:&lt;br /&gt;
	(medio de instalación local (imagen ISO o CDROM))&lt;br /&gt;
&lt;br /&gt;
3) Install&lt;br /&gt;
&lt;br /&gt;
[[Archivo:INSTALL.png ]]&lt;br /&gt;
&lt;br /&gt;
4) Idioma -&amp;gt; Spanish&lt;br /&gt;
&lt;br /&gt;
5) Teclado: DETECT? NO -&amp;gt; Spanish&lt;br /&gt;
	(Dvorak es similar a la máquina de escribir inglesa) -&amp;gt; NO&lt;br /&gt;
&lt;br /&gt;
[[Archivo:CONFIGURACIÓN TECLADO.png ]]&lt;br /&gt;
&lt;br /&gt;
6) Escoger réplica ubuntu: Spanish, en blanco y continuamos&lt;br /&gt;
&lt;br /&gt;
[Archivo:RÉPLICA DE UBUNTU .png]&lt;br /&gt;
&lt;br /&gt;
7) Nombre de usuario: MARINARF&lt;br /&gt;
&lt;br /&gt;
8) Nombre para la cuenta: marinarf&lt;br /&gt;
&lt;br /&gt;
9) Contraseña: qwerty123&lt;br /&gt;
&lt;br /&gt;
10) Configurar el reloj: NO, continuar y marcar Península&lt;br /&gt;
&lt;br /&gt;
11) Método de particionado: Guiado -&amp;gt; utilizar todo el disco&lt;br /&gt;
&lt;br /&gt;
12) Sí&lt;br /&gt;
&lt;br /&gt;
13) Administrar actualizaciones: SIN ACTUALIZACIONES AUTOMÁTICAS&lt;br /&gt;
&lt;br /&gt;
[[Archivo:SIN ACTUALIZACIONES AUTOMÁTICAS.png]]&lt;br /&gt;
&lt;br /&gt;
14) Programas a instalar: Lotes de paquetes de software &lt;br /&gt;
	(Si marcas alguno, tarda más en instalar)&lt;br /&gt;
&lt;br /&gt;
15) GRUB: Sí&lt;br /&gt;
&lt;br /&gt;
16) Hora UTC: Sí&lt;br /&gt;
&lt;br /&gt;
FIN&lt;br /&gt;
&lt;br /&gt;
_____________________________________________________________________________________&lt;br /&gt;
&lt;br /&gt;
 ·) INSTALACIÓN DE WINDOWS:&lt;br /&gt;
&lt;br /&gt;
&amp;gt; Versión de evaluación de Windows: windows 2016 evaluation &lt;br /&gt;
&lt;br /&gt;
&amp;gt; hhtps://dennisnotes.com/note/20180614-ubuntu-18 ...  (libvirt install windows)&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
 ·) EXTRAS:&lt;br /&gt;
&lt;br /&gt;
· Nas: Network Attack Story = smart&lt;br /&gt;
&lt;br /&gt;
· Carpeta temporal rutkit seguir en el sistema sin que lo sepa el dueño = Peligro&lt;br /&gt;
- Si quitamos lo temporal = más seguridad&lt;/div&gt;</summary>
		<author><name>Marramfer12</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Virtualizaci%C3%B3n_con_libvirt&amp;diff=4542</id>
		<title>Virtualización con libvirt</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Virtualizaci%C3%B3n_con_libvirt&amp;diff=4542"/>
				<updated>2019-11-06T16:21:58Z</updated>
		
		<summary type="html">&lt;p&gt;Marramfer12: /* Paso 8: Instalación Manual de SO en VVM */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Para la realización de esta práctica necesitará de una imagen de Ubuntu Cloud que descargaremos de https://cloud-images.ubuntu.com/ y necesitaremos un&lt;br /&gt;
sistema anfitrión con Ubuntu 18.04.&lt;br /&gt;
&lt;br /&gt;
En esta práctica se empleará la imagen descargada de la web Ubuntu Cloud y se hará uso de la herramienta '''cloud-init''' para configurarla.&lt;br /&gt;
&lt;br /&gt;
A continuación, utilizaremos la imagen de Ubuntu ya configurada para ser importada al software de virtualización '''libvirt'''.&lt;br /&gt;
&lt;br /&gt;
= Paso 1: Descarga de la imagen Ubuntu Cloud =&lt;br /&gt;
&lt;br /&gt;
Entramos en https://cloud-images.ubuntu.com/ y descargamos la imagen de Ubuntu 18.04 LTS (Long Time Support).&lt;br /&gt;
&lt;br /&gt;
Puedes descargarla directamente con la orden ''wget'':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
wget https://cloud-images.ubuntu.com/bionic/current/bionic-server-cloudimg-amd64.img&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
si comenzó a descargar verás una salida similar a esta:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
-2019-08-06 12:26:26--  https://cloud-images.ubuntu.com/bionic/current/bionic-server-cloudimg-amd64.img&lt;br /&gt;
Resolviendo cloud-images.ubuntu.com (cloud-images.ubuntu.com)... 91.189.88.89, 2001:67c:1560:8001::8001&lt;br /&gt;
Conectando con cloud-images.ubuntu.com (cloud-images.ubuntu.com)[91.189.88.89]:443... conectado.&lt;br /&gt;
Petición HTTP enviada, esperando respuesta... 200 OK&lt;br /&gt;
Longitud: 343474176 (328M) [application/octet-stream]&lt;br /&gt;
Grabando a: “bionic-server-cloudimg-amd64.img”&lt;br /&gt;
&lt;br /&gt;
bionic-server-cloudimg-amd64.img.   0%[                                                              ]   2,21M   472KB/s    eta 14m 6s&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Espera hasta que la imagen esté descargada al 100%.&lt;br /&gt;
&lt;br /&gt;
= Paso 2: Instalación del paquete cloud-init =&lt;br /&gt;
&lt;br /&gt;
A continuación, tienes que instalar los [[paquetes]] que ofrecen la herramienta ''cloud-init'' para configurar la imagen de Ubuntu que has descargado, estos paquetes son:&lt;br /&gt;
&lt;br /&gt;
* '''cloud-init''': herramienta para configurar una imagen de Ubuntu cloud.&lt;br /&gt;
* '''cloud-image-utils''': esta herramienta es complementaria a cloud-init y sirve para modificar imágenes de Ubuntu cloud.&lt;br /&gt;
&lt;br /&gt;
Podemos instalar estos paquetes con la herramienta '''apt''' desde el intérprete de órdenes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt install cloud-init cloud-image-utils&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''En los ordenadores del aula de prácticas estos paquetes ya estarán preinstalados, con lo que puedes saltarte este paso''.&lt;br /&gt;
&lt;br /&gt;
= Paso 3: Configuración de la imagen de Ubuntu con cloud-init =&lt;br /&gt;
&lt;br /&gt;
Para configurar la imagen de Ubuntu cloud, hay que crear un fichero de configuración para la herramienta '''cloud-init'''. Este fichero empieza siempre por la línea #cloud-config y se estructura en formato [https://es.wikipedia.org/wiki/YAML yaml], el contenido del fichero ''cloud.cfg'' sería el siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#cloud-config&lt;br /&gt;
password: qwerty123&lt;br /&gt;
chpasswd: { expire: False }&lt;br /&gt;
ssh_pwauth: True&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
El ejemplo anterior muestra cómo configurar la imagen descargada para que disponga del usuario ''ubuntu'', y en este caso, la contraseña es ''querty123'', y que se pueda acceder a dicho usuario por medio de ''[[ssh]]''.&lt;br /&gt;
&lt;br /&gt;
Podemos configurar la imagen para que apliquen estos cambios con el siguiente comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cloud-localds media.img cloud.cfg&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Esta aplicación genera un fichero imagen que será empleado para configurar la imagen de Ubuntu cloud que has descargado.&lt;br /&gt;
&lt;br /&gt;
Dispones de más información suplementaria sobre como usar [[cloud-init]].&lt;br /&gt;
&lt;br /&gt;
= Paso 4: Instalación de libvirt e importación de imagenes =&lt;br /&gt;
&lt;br /&gt;
Para instalar libvirt lo hacemos con la herramienta '''apt''' desde el intérprete de órdenes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt install virt-manager&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''En los ordenadores del aula de prácticas este paquete ya estará preinstalado, con lo que puedes saltarte la orden anterior''.&lt;br /&gt;
&lt;br /&gt;
[[Archivo:virt-manager.png|thumb|Interfaz de virt-manager.]]&lt;br /&gt;
&lt;br /&gt;
Una vez instalada podemos lanzar virt-manager desde el intérprete de órdenes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virt-manager&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para importar la imagen de Ubuntu cloud que hemos descargado a la máquina virtual, desde un intérprete de órdenes en el anfitrión (¡sin cerrar la ventana de virt-manager de la que ya disponemos!), vamos a copiar la imagen descargada en el paso 1 y la imagen generada en el paso 3 en el directorio de trabajo de virt-manager que se encuentra en ''/var/lib/libvirt/images''. Para ello, desde el intérprete de órdenes que hemos lanzado y desde el directorio donde tengamos las imágenes anteriormente generadas, invocamos las siguientes ordenes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo cp bionic-server-cloudimg-amd64.img /var/lib/libvirt/images&lt;br /&gt;
sudo cp media.img /var/lib/libvirt/images&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Con estas ordenes, estas copiando la imagen de Ubuntu cloud descargada y la imagen generada por cloud-localds en la carpeta''/var/lib/libvirt/images'' que contiene las imagenes de las que dispone la virt-manager.&lt;br /&gt;
&lt;br /&gt;
[[Archivo:virt-manager-paso4-5.png|thumb|Seleccionar imagen de Ubuntu descargada.]]&lt;br /&gt;
&lt;br /&gt;
Volvemos a la interfaz gráfica de virt-manager una vez copiadas las imágenes y creamos una nueva máquina virtual empleando dichas imágenes:&lt;br /&gt;
&lt;br /&gt;
# Desde la interfaz de virt-manager creamos una nueva Máquina Virtual ''(Archivo --&amp;gt; Nueva máquina virtual)''&lt;br /&gt;
# En la nueva ventana que se abre, seleccionamos ''Medio de instalación local'' y pulsamos ''Adelante''&lt;br /&gt;
# En ''Choose ISO or CDROM install media'' seleccionamos la imagen de ''media.img''' creada en el paso 3; y desmarcamos la casilla de ''Detección automática'' para seleccionar nuestro Sistema Operativo, en este caso, Ubuntu 18.04 LTS. Vemos que todo queda como en la imagen y pulsamos ''Adelante'' [[Archivo:virt-manager-paso4-3.png|thumb|Elegir imagen de configuración y SO.]]&lt;br /&gt;
# Seleccionamos la cantidad de memoria y de CPU que queremos, por defecto 2048 de Memoria y 1 CPU está bien.&lt;br /&gt;
# En el almacenamiento, vamos a seleccionar un almacenaje personalizado, y aquí sera donde seleccionemos la imagen de ubuntu descargada, en nuestro caso ''bionic-server-cloudimg-amd64.img'' y pulsamos ''Adelante'' &lt;br /&gt;
# En el último paso, podremos selecionar la red, por ahora dejaremos [[NAT]] por defecto y pulsamos '''Finalizar''' (Si nos pregunta si queremos crear una red [[NAT]] porque no está creada, le decimos que sí).&lt;br /&gt;
&lt;br /&gt;
Ya tenemos nuestra máquina virtual creada con nuestra configuración. Ahora vamos a probar que todo funciona correctamente. La máquina debería de estar arrancando y debería de aparecer el mensaje de login. [[Archivo:virt-manager-login.png|thumb|Login de ubuntu.]]&lt;br /&gt;
&lt;br /&gt;
Utilizamos como usuario ''ubuntu'', que es el usuario por defecto y como contraseña empleamos la que hayamos elegido en el paso 3. Con esto nos validamos en el sistema con éxito. [[Archivo:virt-manager-logged.png|thumb|Usuario ya validado, en el intérprete de ordenes]]&lt;br /&gt;
&lt;br /&gt;
Ya disponemos de un intérprete de ordenes en nuestro sistema operativo Ubuntu cloud que corre sobre nuestra máquina virtual.&lt;br /&gt;
&lt;br /&gt;
'''Nota''': El teclado de la imagen de Ubuntu cloud que corre en la máquina virtual está en inglés, puedes cambiarlo con la siguiente orden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo loadkeys es&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Paso 5: Configuración de la red en libvirt =&lt;br /&gt;
&lt;br /&gt;
Antes de ver los detalles de red, vamos a hacer una pequeña diferencia entre las dos ventanas que tenemos abiertas, virt-manager principal y virt-manager máquina de ubuntu ejecutándose. En la primera tendremos las configuraciones generales y en la segunda tendremos las configuraciones de una máquina virtual concreta, en nuestro caso, la configuración de la máquina virtual de ubuntu.&lt;br /&gt;
&lt;br /&gt;
Con esto, veremos dos formas de saber la IP de nuestra máquina virtual:&lt;br /&gt;
&lt;br /&gt;
# En la ventana de nuestra máquina virtual de ubuntu, vamos a cambiar la vista y ver los detalles de nuestra máquina. ''Vista --&amp;gt; Detalles''. Aquí tenemos toda la configuración de nuestra máquina, pero solo vamos a centrarnos en la Interfaz de red virtual, que es donde podremos ver cual es pa IP que tiene asiganada nuestra máquina y cual es la fuente de red que se está utilizando. [[Archivo:virt-manager-nic.png|thumb|Interfaz de red virtual.]]&lt;br /&gt;
# La otra opción es utilizando comandos, podemos utilizar ''ip address'' en la consola de nuestra máquina virtual.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ sudo ip address&lt;br /&gt;
1: lo: &amp;lt;LOOPBACK,UP,LOWER_UP&amp;gt; mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000&lt;br /&gt;
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00&lt;br /&gt;
    inet 127.0.0.1/8 scope host lo&lt;br /&gt;
       valid_lft forever preferred_lft forever&lt;br /&gt;
    inet6 ::1/128 scope host &lt;br /&gt;
       valid_lft forever preferred_lft forever&lt;br /&gt;
2: ens3: &amp;lt;BROADCAST,MULTICAST,UP,LOWER_UP&amp;gt; mtu 1500 qdisc pfifo_fast state UP group default qlen 1000&lt;br /&gt;
    link/ether 3d:f0:ee:49:aa:22 brd ff:ff:ff:ff:ff:ff&lt;br /&gt;
    inet 192.168.100.168/24 brd 192.168.2.255 scope global eth0&lt;br /&gt;
       valid_lft forever preferred_lft forever&lt;br /&gt;
    inet6 fe80::3e97:eff:fe39:dd20/64 scope link &lt;br /&gt;
       valid_lft forever preferred_lft forever&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Que nos permite comprobar que estamos utilizando la dirección IP 192.168.100.168.&lt;br /&gt;
&lt;br /&gt;
Si la interfaz no muestra una dirección IP, puedes forzar la obtención de una dirección IP desde la máquina virtual para la interfaz ''ens3'' con la orden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo dhclient ens3&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vamos a comprobar ahora desde un terminal en el anfitrión que alcanzamos a nuestra máquina virtual.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ping 192.168.100.168&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Deberíamos de ver una salida similar a la siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
PING 192.168.100.168 (192.168.100.168) 56(84) bytes of data.&lt;br /&gt;
64 bytes from 192.168.100.168: icmp_seq=1 ttl=64 time=0.397 ms&lt;br /&gt;
64 bytes from 192.168.100.168: icmp_seq=2 ttl=64 time=0.409 ms&lt;br /&gt;
64 bytes from 192.168.100.168: icmp_seq=3 ttl=64 time=0.321 ms&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Si hubiere algún problema de conectividad la salida sería de este tipo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
PING 192.168.100.168 (192.168.100.168) 56(84) bytes of data.&lt;br /&gt;
From 192.168.100.1 icmp_seq=1 Destination Host Unreachable&lt;br /&gt;
From 192.168.100.1 icmp_seq=2 Destination Host Unreachable&lt;br /&gt;
From 192.168.100.1 icmp_seq=3 Destination Host Unreachable&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En dicho caso, puedes forzar la obtención de una dirección IP con la orden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo dhclient ens3&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Esto quiere decir que la configuración de red es incorrecta, o quizás que la dirección IP de tu máquina virtual no es 192.168.100.168 :-).&lt;br /&gt;
&lt;br /&gt;
Dispones de más información suplementaria sobre la [[configuración de red en libvirt]].&lt;br /&gt;
&lt;br /&gt;
= Paso 6: Clonado de máquinas virtuales =&lt;br /&gt;
&lt;br /&gt;
Vamos a reutilizar la configuración y la máquina virtual creada, para crear varias iguales. Empecemos:&lt;br /&gt;
&lt;br /&gt;
# Apagamos la máquina virtual si la tenemos encendida, para que nos permita hacer un clonado. ''Máquina virtual --&amp;gt; Apagar --&amp;gt; Apagar''&lt;br /&gt;
# En la ventana principal, pulsar botón derecho encima de la máquina virtual que queramos clonar, y pulsar ''Clonar ...''&lt;br /&gt;
# En la ventana que nos aparece, por defecto seleccionará la misma red y creará una MAC diferente para la nueva máquina y clonará la imagen de ubuntu que usamos de almacenamiento. Le damos un nuevo nombre a nuestra máquina, y pulsamos en ''Clonar''.&lt;br /&gt;
# Repetimos este paso hasta que tengamos toda las máquinas virtuales deseadas, en nuestro caso, solo crearemos una para probar los detalles de red.&lt;br /&gt;
&lt;br /&gt;
Ahora arrancaremos la máquina original y la clonada, y vamos a comprobar que ambas están en la misma red y que pueden verse entre ellas. Como comentamos en el paso anterior, comprobaremos la IP de la máquina virtual original y de la clonada, y haremos ping desde dentro de las máquinas para comprobar que se ven.&lt;br /&gt;
&lt;br /&gt;
Ejemplo:&lt;br /&gt;
&lt;br /&gt;
* Máquina original tiene IP 192.168.100.168&lt;br /&gt;
* Máquina clonada tiene IP 192.168.100.169&lt;br /&gt;
* Desde la máquina original haremos un ping 192.168.100.169&lt;br /&gt;
* Desde la máquina clonada haremos un ping 192.168.100.168&lt;br /&gt;
* Desde ambas máquinas, comprobaremos que la puerta de enlace es la misma, haciendo un ''ip route''.&lt;br /&gt;
* Desde la máquina host, deberíamos de obtener ping hacía las dos máquinas&lt;br /&gt;
&lt;br /&gt;
= Paso 7: Instantáneas de máquinas virtuales =&lt;br /&gt;
&lt;br /&gt;
Las instantáneas nos permiten almacenar una captura del estado de la ejecución de una máquina virtual en un cierto instante tiempo que podremos restaurar cuando sea necesario. Las instantáneas te serán útiles si tienes trabajo a medio hacer en la máquina virtual, de manera que quieras guardar lo que has hecho para restaurarlo posteriormente.&lt;br /&gt;
&lt;br /&gt;
Para crear una instantánea, accedemos a la máquina virtual en ejecución y desplegamos el menú ''Vista'' y pinchamos sobre ''Capturas de Pantalla'' (Snapshot). Después pulsamos en el botón ''+'' que aparece abajo a la izquierda, indicamos el nombre de la instantánea y le damos a ''Finalizar'.&lt;br /&gt;
&lt;br /&gt;
La creación de instantáneas toma algo de tiempo, sé paciente. Puedes almacenar tantas instantáneas como quieras. El nombre ''Captura de pantalla'' es una traducción poco afortunada del inglés ''snapshot'' que se refiere al término ''instantánea''.&lt;br /&gt;
&lt;br /&gt;
= Paso 8: Instalación Manual de SO en VVM =&lt;br /&gt;
&lt;br /&gt;
1) Ubuntu net install (ubuntu minimalCD):&lt;br /&gt;
	64bit 18.04&lt;br /&gt;
&lt;br /&gt;
[[Archivo:WEB DONDE INSTALARLA .png]]&lt;br /&gt;
&lt;br /&gt;
[[Archivo:DESCARGAR UBUNTU .png]]&lt;br /&gt;
&lt;br /&gt;
2) Creamos una nueva máquina virtual:&lt;br /&gt;
	(medio de instalación local (imagen ISO o CDROM))&lt;br /&gt;
&lt;br /&gt;
3) Install&lt;br /&gt;
&lt;br /&gt;
[Archivo:INSTALL.png ]&lt;br /&gt;
&lt;br /&gt;
4) Idioma -&amp;gt; Spanish&lt;br /&gt;
&lt;br /&gt;
5) Teclado: DETECT? NO -&amp;gt; Spanish&lt;br /&gt;
	(Dvorak es similar a la máquina de escribir inglesa) -&amp;gt; NO&lt;br /&gt;
&lt;br /&gt;
[Archivo:CONFIGURACIÓN TECLADO.png ]&lt;br /&gt;
&lt;br /&gt;
6) Escoger réplica ubuntu: Spanish, en blanco y continuamos&lt;br /&gt;
&lt;br /&gt;
[Archivo:RÉPLICA DE UBUNTU .png]&lt;br /&gt;
&lt;br /&gt;
7) Nombre de usuario: MARINARF&lt;br /&gt;
&lt;br /&gt;
8) Nombre para la cuenta: marinarf&lt;br /&gt;
&lt;br /&gt;
9) Contraseña: qwerty123&lt;br /&gt;
&lt;br /&gt;
10) Configurar el reloj: NO, continuar y marcar Península&lt;br /&gt;
&lt;br /&gt;
11) Método de particionado: Guiado -&amp;gt; utilizar todo el disco&lt;br /&gt;
&lt;br /&gt;
12) Sí&lt;br /&gt;
&lt;br /&gt;
13) Administrar actualizaciones: SIN ACTUALIZACIONES AUTOMÁTICAS&lt;br /&gt;
&lt;br /&gt;
[Archivo:SIN ACTUALIZACIONES AUTOMÁTICAS.png]&lt;br /&gt;
&lt;br /&gt;
14) Programas a instalar: Lotes de paquetes de software &lt;br /&gt;
	(Si marcas alguno, tarda más en instalar)&lt;br /&gt;
&lt;br /&gt;
15) GRUB: Sí&lt;br /&gt;
&lt;br /&gt;
16) Hora UTC: Sí&lt;br /&gt;
&lt;br /&gt;
FIN&lt;br /&gt;
&lt;br /&gt;
_____________________________________________________________________________________&lt;br /&gt;
&lt;br /&gt;
 ·) INSTALACIÓN DE WINDOWS:&lt;br /&gt;
&lt;br /&gt;
&amp;gt; Versión de evaluación de Windows: windows 2016 evaluation &lt;br /&gt;
&lt;br /&gt;
&amp;gt; hhtps://dennisnotes.com/note/20180614-ubuntu-18 ...  (libvirt install windows)&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
 ·) EXTRAS:&lt;br /&gt;
&lt;br /&gt;
· Nas: Network Attack Story = smart&lt;br /&gt;
&lt;br /&gt;
· Carpeta temporal rutkit seguir en el sistema sin que lo sepa el dueño = Peligro&lt;br /&gt;
- Si quitamos lo temporal = más seguridad&lt;/div&gt;</summary>
		<author><name>Marramfer12</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Virtualizaci%C3%B3n_con_libvirt&amp;diff=4541</id>
		<title>Virtualización con libvirt</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Virtualizaci%C3%B3n_con_libvirt&amp;diff=4541"/>
				<updated>2019-11-06T16:20:29Z</updated>
		
		<summary type="html">&lt;p&gt;Marramfer12: /* Paso 8: Instalación Manual de SO en VVM */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Para la realización de esta práctica necesitará de una imagen de Ubuntu Cloud que descargaremos de https://cloud-images.ubuntu.com/ y necesitaremos un&lt;br /&gt;
sistema anfitrión con Ubuntu 18.04.&lt;br /&gt;
&lt;br /&gt;
En esta práctica se empleará la imagen descargada de la web Ubuntu Cloud y se hará uso de la herramienta '''cloud-init''' para configurarla.&lt;br /&gt;
&lt;br /&gt;
A continuación, utilizaremos la imagen de Ubuntu ya configurada para ser importada al software de virtualización '''libvirt'''.&lt;br /&gt;
&lt;br /&gt;
= Paso 1: Descarga de la imagen Ubuntu Cloud =&lt;br /&gt;
&lt;br /&gt;
Entramos en https://cloud-images.ubuntu.com/ y descargamos la imagen de Ubuntu 18.04 LTS (Long Time Support).&lt;br /&gt;
&lt;br /&gt;
Puedes descargarla directamente con la orden ''wget'':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
wget https://cloud-images.ubuntu.com/bionic/current/bionic-server-cloudimg-amd64.img&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
si comenzó a descargar verás una salida similar a esta:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
-2019-08-06 12:26:26--  https://cloud-images.ubuntu.com/bionic/current/bionic-server-cloudimg-amd64.img&lt;br /&gt;
Resolviendo cloud-images.ubuntu.com (cloud-images.ubuntu.com)... 91.189.88.89, 2001:67c:1560:8001::8001&lt;br /&gt;
Conectando con cloud-images.ubuntu.com (cloud-images.ubuntu.com)[91.189.88.89]:443... conectado.&lt;br /&gt;
Petición HTTP enviada, esperando respuesta... 200 OK&lt;br /&gt;
Longitud: 343474176 (328M) [application/octet-stream]&lt;br /&gt;
Grabando a: “bionic-server-cloudimg-amd64.img”&lt;br /&gt;
&lt;br /&gt;
bionic-server-cloudimg-amd64.img.   0%[                                                              ]   2,21M   472KB/s    eta 14m 6s&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Espera hasta que la imagen esté descargada al 100%.&lt;br /&gt;
&lt;br /&gt;
= Paso 2: Instalación del paquete cloud-init =&lt;br /&gt;
&lt;br /&gt;
A continuación, tienes que instalar los [[paquetes]] que ofrecen la herramienta ''cloud-init'' para configurar la imagen de Ubuntu que has descargado, estos paquetes son:&lt;br /&gt;
&lt;br /&gt;
* '''cloud-init''': herramienta para configurar una imagen de Ubuntu cloud.&lt;br /&gt;
* '''cloud-image-utils''': esta herramienta es complementaria a cloud-init y sirve para modificar imágenes de Ubuntu cloud.&lt;br /&gt;
&lt;br /&gt;
Podemos instalar estos paquetes con la herramienta '''apt''' desde el intérprete de órdenes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt install cloud-init cloud-image-utils&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''En los ordenadores del aula de prácticas estos paquetes ya estarán preinstalados, con lo que puedes saltarte este paso''.&lt;br /&gt;
&lt;br /&gt;
= Paso 3: Configuración de la imagen de Ubuntu con cloud-init =&lt;br /&gt;
&lt;br /&gt;
Para configurar la imagen de Ubuntu cloud, hay que crear un fichero de configuración para la herramienta '''cloud-init'''. Este fichero empieza siempre por la línea #cloud-config y se estructura en formato [https://es.wikipedia.org/wiki/YAML yaml], el contenido del fichero ''cloud.cfg'' sería el siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#cloud-config&lt;br /&gt;
password: qwerty123&lt;br /&gt;
chpasswd: { expire: False }&lt;br /&gt;
ssh_pwauth: True&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
El ejemplo anterior muestra cómo configurar la imagen descargada para que disponga del usuario ''ubuntu'', y en este caso, la contraseña es ''querty123'', y que se pueda acceder a dicho usuario por medio de ''[[ssh]]''.&lt;br /&gt;
&lt;br /&gt;
Podemos configurar la imagen para que apliquen estos cambios con el siguiente comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cloud-localds media.img cloud.cfg&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Esta aplicación genera un fichero imagen que será empleado para configurar la imagen de Ubuntu cloud que has descargado.&lt;br /&gt;
&lt;br /&gt;
Dispones de más información suplementaria sobre como usar [[cloud-init]].&lt;br /&gt;
&lt;br /&gt;
= Paso 4: Instalación de libvirt e importación de imagenes =&lt;br /&gt;
&lt;br /&gt;
Para instalar libvirt lo hacemos con la herramienta '''apt''' desde el intérprete de órdenes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt install virt-manager&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''En los ordenadores del aula de prácticas este paquete ya estará preinstalado, con lo que puedes saltarte la orden anterior''.&lt;br /&gt;
&lt;br /&gt;
[[Archivo:virt-manager.png|thumb|Interfaz de virt-manager.]]&lt;br /&gt;
&lt;br /&gt;
Una vez instalada podemos lanzar virt-manager desde el intérprete de órdenes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virt-manager&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para importar la imagen de Ubuntu cloud que hemos descargado a la máquina virtual, desde un intérprete de órdenes en el anfitrión (¡sin cerrar la ventana de virt-manager de la que ya disponemos!), vamos a copiar la imagen descargada en el paso 1 y la imagen generada en el paso 3 en el directorio de trabajo de virt-manager que se encuentra en ''/var/lib/libvirt/images''. Para ello, desde el intérprete de órdenes que hemos lanzado y desde el directorio donde tengamos las imágenes anteriormente generadas, invocamos las siguientes ordenes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo cp bionic-server-cloudimg-amd64.img /var/lib/libvirt/images&lt;br /&gt;
sudo cp media.img /var/lib/libvirt/images&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Con estas ordenes, estas copiando la imagen de Ubuntu cloud descargada y la imagen generada por cloud-localds en la carpeta''/var/lib/libvirt/images'' que contiene las imagenes de las que dispone la virt-manager.&lt;br /&gt;
&lt;br /&gt;
[[Archivo:virt-manager-paso4-5.png|thumb|Seleccionar imagen de Ubuntu descargada.]]&lt;br /&gt;
&lt;br /&gt;
Volvemos a la interfaz gráfica de virt-manager una vez copiadas las imágenes y creamos una nueva máquina virtual empleando dichas imágenes:&lt;br /&gt;
&lt;br /&gt;
# Desde la interfaz de virt-manager creamos una nueva Máquina Virtual ''(Archivo --&amp;gt; Nueva máquina virtual)''&lt;br /&gt;
# En la nueva ventana que se abre, seleccionamos ''Medio de instalación local'' y pulsamos ''Adelante''&lt;br /&gt;
# En ''Choose ISO or CDROM install media'' seleccionamos la imagen de ''media.img''' creada en el paso 3; y desmarcamos la casilla de ''Detección automática'' para seleccionar nuestro Sistema Operativo, en este caso, Ubuntu 18.04 LTS. Vemos que todo queda como en la imagen y pulsamos ''Adelante'' [[Archivo:virt-manager-paso4-3.png|thumb|Elegir imagen de configuración y SO.]]&lt;br /&gt;
# Seleccionamos la cantidad de memoria y de CPU que queremos, por defecto 2048 de Memoria y 1 CPU está bien.&lt;br /&gt;
# En el almacenamiento, vamos a seleccionar un almacenaje personalizado, y aquí sera donde seleccionemos la imagen de ubuntu descargada, en nuestro caso ''bionic-server-cloudimg-amd64.img'' y pulsamos ''Adelante'' &lt;br /&gt;
# En el último paso, podremos selecionar la red, por ahora dejaremos [[NAT]] por defecto y pulsamos '''Finalizar''' (Si nos pregunta si queremos crear una red [[NAT]] porque no está creada, le decimos que sí).&lt;br /&gt;
&lt;br /&gt;
Ya tenemos nuestra máquina virtual creada con nuestra configuración. Ahora vamos a probar que todo funciona correctamente. La máquina debería de estar arrancando y debería de aparecer el mensaje de login. [[Archivo:virt-manager-login.png|thumb|Login de ubuntu.]]&lt;br /&gt;
&lt;br /&gt;
Utilizamos como usuario ''ubuntu'', que es el usuario por defecto y como contraseña empleamos la que hayamos elegido en el paso 3. Con esto nos validamos en el sistema con éxito. [[Archivo:virt-manager-logged.png|thumb|Usuario ya validado, en el intérprete de ordenes]]&lt;br /&gt;
&lt;br /&gt;
Ya disponemos de un intérprete de ordenes en nuestro sistema operativo Ubuntu cloud que corre sobre nuestra máquina virtual.&lt;br /&gt;
&lt;br /&gt;
'''Nota''': El teclado de la imagen de Ubuntu cloud que corre en la máquina virtual está en inglés, puedes cambiarlo con la siguiente orden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo loadkeys es&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Paso 5: Configuración de la red en libvirt =&lt;br /&gt;
&lt;br /&gt;
Antes de ver los detalles de red, vamos a hacer una pequeña diferencia entre las dos ventanas que tenemos abiertas, virt-manager principal y virt-manager máquina de ubuntu ejecutándose. En la primera tendremos las configuraciones generales y en la segunda tendremos las configuraciones de una máquina virtual concreta, en nuestro caso, la configuración de la máquina virtual de ubuntu.&lt;br /&gt;
&lt;br /&gt;
Con esto, veremos dos formas de saber la IP de nuestra máquina virtual:&lt;br /&gt;
&lt;br /&gt;
# En la ventana de nuestra máquina virtual de ubuntu, vamos a cambiar la vista y ver los detalles de nuestra máquina. ''Vista --&amp;gt; Detalles''. Aquí tenemos toda la configuración de nuestra máquina, pero solo vamos a centrarnos en la Interfaz de red virtual, que es donde podremos ver cual es pa IP que tiene asiganada nuestra máquina y cual es la fuente de red que se está utilizando. [[Archivo:virt-manager-nic.png|thumb|Interfaz de red virtual.]]&lt;br /&gt;
# La otra opción es utilizando comandos, podemos utilizar ''ip address'' en la consola de nuestra máquina virtual.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ sudo ip address&lt;br /&gt;
1: lo: &amp;lt;LOOPBACK,UP,LOWER_UP&amp;gt; mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000&lt;br /&gt;
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00&lt;br /&gt;
    inet 127.0.0.1/8 scope host lo&lt;br /&gt;
       valid_lft forever preferred_lft forever&lt;br /&gt;
    inet6 ::1/128 scope host &lt;br /&gt;
       valid_lft forever preferred_lft forever&lt;br /&gt;
2: ens3: &amp;lt;BROADCAST,MULTICAST,UP,LOWER_UP&amp;gt; mtu 1500 qdisc pfifo_fast state UP group default qlen 1000&lt;br /&gt;
    link/ether 3d:f0:ee:49:aa:22 brd ff:ff:ff:ff:ff:ff&lt;br /&gt;
    inet 192.168.100.168/24 brd 192.168.2.255 scope global eth0&lt;br /&gt;
       valid_lft forever preferred_lft forever&lt;br /&gt;
    inet6 fe80::3e97:eff:fe39:dd20/64 scope link &lt;br /&gt;
       valid_lft forever preferred_lft forever&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Que nos permite comprobar que estamos utilizando la dirección IP 192.168.100.168.&lt;br /&gt;
&lt;br /&gt;
Si la interfaz no muestra una dirección IP, puedes forzar la obtención de una dirección IP desde la máquina virtual para la interfaz ''ens3'' con la orden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo dhclient ens3&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vamos a comprobar ahora desde un terminal en el anfitrión que alcanzamos a nuestra máquina virtual.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ping 192.168.100.168&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Deberíamos de ver una salida similar a la siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
PING 192.168.100.168 (192.168.100.168) 56(84) bytes of data.&lt;br /&gt;
64 bytes from 192.168.100.168: icmp_seq=1 ttl=64 time=0.397 ms&lt;br /&gt;
64 bytes from 192.168.100.168: icmp_seq=2 ttl=64 time=0.409 ms&lt;br /&gt;
64 bytes from 192.168.100.168: icmp_seq=3 ttl=64 time=0.321 ms&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Si hubiere algún problema de conectividad la salida sería de este tipo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
PING 192.168.100.168 (192.168.100.168) 56(84) bytes of data.&lt;br /&gt;
From 192.168.100.1 icmp_seq=1 Destination Host Unreachable&lt;br /&gt;
From 192.168.100.1 icmp_seq=2 Destination Host Unreachable&lt;br /&gt;
From 192.168.100.1 icmp_seq=3 Destination Host Unreachable&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En dicho caso, puedes forzar la obtención de una dirección IP con la orden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo dhclient ens3&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Esto quiere decir que la configuración de red es incorrecta, o quizás que la dirección IP de tu máquina virtual no es 192.168.100.168 :-).&lt;br /&gt;
&lt;br /&gt;
Dispones de más información suplementaria sobre la [[configuración de red en libvirt]].&lt;br /&gt;
&lt;br /&gt;
= Paso 6: Clonado de máquinas virtuales =&lt;br /&gt;
&lt;br /&gt;
Vamos a reutilizar la configuración y la máquina virtual creada, para crear varias iguales. Empecemos:&lt;br /&gt;
&lt;br /&gt;
# Apagamos la máquina virtual si la tenemos encendida, para que nos permita hacer un clonado. ''Máquina virtual --&amp;gt; Apagar --&amp;gt; Apagar''&lt;br /&gt;
# En la ventana principal, pulsar botón derecho encima de la máquina virtual que queramos clonar, y pulsar ''Clonar ...''&lt;br /&gt;
# En la ventana que nos aparece, por defecto seleccionará la misma red y creará una MAC diferente para la nueva máquina y clonará la imagen de ubuntu que usamos de almacenamiento. Le damos un nuevo nombre a nuestra máquina, y pulsamos en ''Clonar''.&lt;br /&gt;
# Repetimos este paso hasta que tengamos toda las máquinas virtuales deseadas, en nuestro caso, solo crearemos una para probar los detalles de red.&lt;br /&gt;
&lt;br /&gt;
Ahora arrancaremos la máquina original y la clonada, y vamos a comprobar que ambas están en la misma red y que pueden verse entre ellas. Como comentamos en el paso anterior, comprobaremos la IP de la máquina virtual original y de la clonada, y haremos ping desde dentro de las máquinas para comprobar que se ven.&lt;br /&gt;
&lt;br /&gt;
Ejemplo:&lt;br /&gt;
&lt;br /&gt;
* Máquina original tiene IP 192.168.100.168&lt;br /&gt;
* Máquina clonada tiene IP 192.168.100.169&lt;br /&gt;
* Desde la máquina original haremos un ping 192.168.100.169&lt;br /&gt;
* Desde la máquina clonada haremos un ping 192.168.100.168&lt;br /&gt;
* Desde ambas máquinas, comprobaremos que la puerta de enlace es la misma, haciendo un ''ip route''.&lt;br /&gt;
* Desde la máquina host, deberíamos de obtener ping hacía las dos máquinas&lt;br /&gt;
&lt;br /&gt;
= Paso 7: Instantáneas de máquinas virtuales =&lt;br /&gt;
&lt;br /&gt;
Las instantáneas nos permiten almacenar una captura del estado de la ejecución de una máquina virtual en un cierto instante tiempo que podremos restaurar cuando sea necesario. Las instantáneas te serán útiles si tienes trabajo a medio hacer en la máquina virtual, de manera que quieras guardar lo que has hecho para restaurarlo posteriormente.&lt;br /&gt;
&lt;br /&gt;
Para crear una instantánea, accedemos a la máquina virtual en ejecución y desplegamos el menú ''Vista'' y pinchamos sobre ''Capturas de Pantalla'' (Snapshot). Después pulsamos en el botón ''+'' que aparece abajo a la izquierda, indicamos el nombre de la instantánea y le damos a ''Finalizar'.&lt;br /&gt;
&lt;br /&gt;
La creación de instantáneas toma algo de tiempo, sé paciente. Puedes almacenar tantas instantáneas como quieras. El nombre ''Captura de pantalla'' es una traducción poco afortunada del inglés ''snapshot'' que se refiere al término ''instantánea''.&lt;br /&gt;
&lt;br /&gt;
= Paso 8: Instalación Manual de SO en VVM =&lt;br /&gt;
&lt;br /&gt;
1) Ubuntu net install (ubuntu minimalCD):&lt;br /&gt;
	64bit 18.04&lt;br /&gt;
&lt;br /&gt;
[Archivo:WEB DONDE INSTALARLA .png]&lt;br /&gt;
&lt;br /&gt;
[Archivo:DESCARGAR UBUNTU .png]&lt;br /&gt;
&lt;br /&gt;
2) Creamos una nueva máquina virtual:&lt;br /&gt;
	(medio de instalación local (imagen ISO o CDROM))&lt;br /&gt;
&lt;br /&gt;
3) Install&lt;br /&gt;
&lt;br /&gt;
[Archivo:INSTALL.png ]&lt;br /&gt;
&lt;br /&gt;
4) Idioma -&amp;gt; Spanish&lt;br /&gt;
&lt;br /&gt;
5) Teclado: DETECT? NO -&amp;gt; Spanish&lt;br /&gt;
	(Dvorak es similar a la máquina de escribir inglesa) -&amp;gt; NO&lt;br /&gt;
&lt;br /&gt;
[Archivo:CONFIGURACIÓN TECLADO.png ]&lt;br /&gt;
&lt;br /&gt;
6) Escoger réplica ubuntu: Spanish, en blanco y continuamos&lt;br /&gt;
&lt;br /&gt;
[Archivo:RÉPLICA DE UBUNTU .png]&lt;br /&gt;
&lt;br /&gt;
7) Nombre de usuario: MARINARF&lt;br /&gt;
&lt;br /&gt;
8) Nombre para la cuenta: marinarf&lt;br /&gt;
&lt;br /&gt;
9) Contraseña: qwerty123&lt;br /&gt;
&lt;br /&gt;
10) Configurar el reloj: NO, continuar y marcar Península&lt;br /&gt;
&lt;br /&gt;
11) Método de particionado: Guiado -&amp;gt; utilizar todo el disco&lt;br /&gt;
&lt;br /&gt;
12) Sí&lt;br /&gt;
&lt;br /&gt;
13) Administrar actualizaciones: SIN ACTUALIZACIONES AUTOMÁTICAS&lt;br /&gt;
&lt;br /&gt;
[Archivo:SIN ACTUALIZACIONES AUTOMÁTICAS.png]&lt;br /&gt;
&lt;br /&gt;
14) Programas a instalar: Lotes de paquetes de software &lt;br /&gt;
	(Si marcas alguno, tarda más en instalar)&lt;br /&gt;
&lt;br /&gt;
15) GRUB: Sí&lt;br /&gt;
&lt;br /&gt;
16) Hora UTC: Sí&lt;br /&gt;
&lt;br /&gt;
FIN&lt;br /&gt;
&lt;br /&gt;
_____________________________________________________________________________________&lt;br /&gt;
&lt;br /&gt;
 ·) INSTALACIÓN DE WINDOWS:&lt;br /&gt;
&lt;br /&gt;
&amp;gt; Versión de evaluación de Windows: windows 2016 evaluation &lt;br /&gt;
&lt;br /&gt;
&amp;gt; hhtps://dennisnotes.com/note/20180614-ubuntu-18 ...  (libvirt install windows)&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
 ·) EXTRAS:&lt;br /&gt;
&lt;br /&gt;
· Nas: Network Attack Story = smart&lt;br /&gt;
&lt;br /&gt;
· Carpeta temporal rutkit seguir en el sistema sin que lo sepa el dueño = Peligro&lt;br /&gt;
- Si quitamos lo temporal = más seguridad&lt;/div&gt;</summary>
		<author><name>Marramfer12</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Virtualizaci%C3%B3n_con_libvirt&amp;diff=4540</id>
		<title>Virtualización con libvirt</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Virtualizaci%C3%B3n_con_libvirt&amp;diff=4540"/>
				<updated>2019-11-06T16:18:59Z</updated>
		
		<summary type="html">&lt;p&gt;Marramfer12: /* Paso 8: Instalación Manual de SO en VVM */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Para la realización de esta práctica necesitará de una imagen de Ubuntu Cloud que descargaremos de https://cloud-images.ubuntu.com/ y necesitaremos un&lt;br /&gt;
sistema anfitrión con Ubuntu 18.04.&lt;br /&gt;
&lt;br /&gt;
En esta práctica se empleará la imagen descargada de la web Ubuntu Cloud y se hará uso de la herramienta '''cloud-init''' para configurarla.&lt;br /&gt;
&lt;br /&gt;
A continuación, utilizaremos la imagen de Ubuntu ya configurada para ser importada al software de virtualización '''libvirt'''.&lt;br /&gt;
&lt;br /&gt;
= Paso 1: Descarga de la imagen Ubuntu Cloud =&lt;br /&gt;
&lt;br /&gt;
Entramos en https://cloud-images.ubuntu.com/ y descargamos la imagen de Ubuntu 18.04 LTS (Long Time Support).&lt;br /&gt;
&lt;br /&gt;
Puedes descargarla directamente con la orden ''wget'':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
wget https://cloud-images.ubuntu.com/bionic/current/bionic-server-cloudimg-amd64.img&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
si comenzó a descargar verás una salida similar a esta:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
-2019-08-06 12:26:26--  https://cloud-images.ubuntu.com/bionic/current/bionic-server-cloudimg-amd64.img&lt;br /&gt;
Resolviendo cloud-images.ubuntu.com (cloud-images.ubuntu.com)... 91.189.88.89, 2001:67c:1560:8001::8001&lt;br /&gt;
Conectando con cloud-images.ubuntu.com (cloud-images.ubuntu.com)[91.189.88.89]:443... conectado.&lt;br /&gt;
Petición HTTP enviada, esperando respuesta... 200 OK&lt;br /&gt;
Longitud: 343474176 (328M) [application/octet-stream]&lt;br /&gt;
Grabando a: “bionic-server-cloudimg-amd64.img”&lt;br /&gt;
&lt;br /&gt;
bionic-server-cloudimg-amd64.img.   0%[                                                              ]   2,21M   472KB/s    eta 14m 6s&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Espera hasta que la imagen esté descargada al 100%.&lt;br /&gt;
&lt;br /&gt;
= Paso 2: Instalación del paquete cloud-init =&lt;br /&gt;
&lt;br /&gt;
A continuación, tienes que instalar los [[paquetes]] que ofrecen la herramienta ''cloud-init'' para configurar la imagen de Ubuntu que has descargado, estos paquetes son:&lt;br /&gt;
&lt;br /&gt;
* '''cloud-init''': herramienta para configurar una imagen de Ubuntu cloud.&lt;br /&gt;
* '''cloud-image-utils''': esta herramienta es complementaria a cloud-init y sirve para modificar imágenes de Ubuntu cloud.&lt;br /&gt;
&lt;br /&gt;
Podemos instalar estos paquetes con la herramienta '''apt''' desde el intérprete de órdenes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt install cloud-init cloud-image-utils&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''En los ordenadores del aula de prácticas estos paquetes ya estarán preinstalados, con lo que puedes saltarte este paso''.&lt;br /&gt;
&lt;br /&gt;
= Paso 3: Configuración de la imagen de Ubuntu con cloud-init =&lt;br /&gt;
&lt;br /&gt;
Para configurar la imagen de Ubuntu cloud, hay que crear un fichero de configuración para la herramienta '''cloud-init'''. Este fichero empieza siempre por la línea #cloud-config y se estructura en formato [https://es.wikipedia.org/wiki/YAML yaml], el contenido del fichero ''cloud.cfg'' sería el siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#cloud-config&lt;br /&gt;
password: qwerty123&lt;br /&gt;
chpasswd: { expire: False }&lt;br /&gt;
ssh_pwauth: True&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
El ejemplo anterior muestra cómo configurar la imagen descargada para que disponga del usuario ''ubuntu'', y en este caso, la contraseña es ''querty123'', y que se pueda acceder a dicho usuario por medio de ''[[ssh]]''.&lt;br /&gt;
&lt;br /&gt;
Podemos configurar la imagen para que apliquen estos cambios con el siguiente comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cloud-localds media.img cloud.cfg&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Esta aplicación genera un fichero imagen que será empleado para configurar la imagen de Ubuntu cloud que has descargado.&lt;br /&gt;
&lt;br /&gt;
Dispones de más información suplementaria sobre como usar [[cloud-init]].&lt;br /&gt;
&lt;br /&gt;
= Paso 4: Instalación de libvirt e importación de imagenes =&lt;br /&gt;
&lt;br /&gt;
Para instalar libvirt lo hacemos con la herramienta '''apt''' desde el intérprete de órdenes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt install virt-manager&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''En los ordenadores del aula de prácticas este paquete ya estará preinstalado, con lo que puedes saltarte la orden anterior''.&lt;br /&gt;
&lt;br /&gt;
[[Archivo:virt-manager.png|thumb|Interfaz de virt-manager.]]&lt;br /&gt;
&lt;br /&gt;
Una vez instalada podemos lanzar virt-manager desde el intérprete de órdenes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virt-manager&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para importar la imagen de Ubuntu cloud que hemos descargado a la máquina virtual, desde un intérprete de órdenes en el anfitrión (¡sin cerrar la ventana de virt-manager de la que ya disponemos!), vamos a copiar la imagen descargada en el paso 1 y la imagen generada en el paso 3 en el directorio de trabajo de virt-manager que se encuentra en ''/var/lib/libvirt/images''. Para ello, desde el intérprete de órdenes que hemos lanzado y desde el directorio donde tengamos las imágenes anteriormente generadas, invocamos las siguientes ordenes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo cp bionic-server-cloudimg-amd64.img /var/lib/libvirt/images&lt;br /&gt;
sudo cp media.img /var/lib/libvirt/images&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Con estas ordenes, estas copiando la imagen de Ubuntu cloud descargada y la imagen generada por cloud-localds en la carpeta''/var/lib/libvirt/images'' que contiene las imagenes de las que dispone la virt-manager.&lt;br /&gt;
&lt;br /&gt;
[[Archivo:virt-manager-paso4-5.png|thumb|Seleccionar imagen de Ubuntu descargada.]]&lt;br /&gt;
&lt;br /&gt;
Volvemos a la interfaz gráfica de virt-manager una vez copiadas las imágenes y creamos una nueva máquina virtual empleando dichas imágenes:&lt;br /&gt;
&lt;br /&gt;
# Desde la interfaz de virt-manager creamos una nueva Máquina Virtual ''(Archivo --&amp;gt; Nueva máquina virtual)''&lt;br /&gt;
# En la nueva ventana que se abre, seleccionamos ''Medio de instalación local'' y pulsamos ''Adelante''&lt;br /&gt;
# En ''Choose ISO or CDROM install media'' seleccionamos la imagen de ''media.img''' creada en el paso 3; y desmarcamos la casilla de ''Detección automática'' para seleccionar nuestro Sistema Operativo, en este caso, Ubuntu 18.04 LTS. Vemos que todo queda como en la imagen y pulsamos ''Adelante'' [[Archivo:virt-manager-paso4-3.png|thumb|Elegir imagen de configuración y SO.]]&lt;br /&gt;
# Seleccionamos la cantidad de memoria y de CPU que queremos, por defecto 2048 de Memoria y 1 CPU está bien.&lt;br /&gt;
# En el almacenamiento, vamos a seleccionar un almacenaje personalizado, y aquí sera donde seleccionemos la imagen de ubuntu descargada, en nuestro caso ''bionic-server-cloudimg-amd64.img'' y pulsamos ''Adelante'' &lt;br /&gt;
# En el último paso, podremos selecionar la red, por ahora dejaremos [[NAT]] por defecto y pulsamos '''Finalizar''' (Si nos pregunta si queremos crear una red [[NAT]] porque no está creada, le decimos que sí).&lt;br /&gt;
&lt;br /&gt;
Ya tenemos nuestra máquina virtual creada con nuestra configuración. Ahora vamos a probar que todo funciona correctamente. La máquina debería de estar arrancando y debería de aparecer el mensaje de login. [[Archivo:virt-manager-login.png|thumb|Login de ubuntu.]]&lt;br /&gt;
&lt;br /&gt;
Utilizamos como usuario ''ubuntu'', que es el usuario por defecto y como contraseña empleamos la que hayamos elegido en el paso 3. Con esto nos validamos en el sistema con éxito. [[Archivo:virt-manager-logged.png|thumb|Usuario ya validado, en el intérprete de ordenes]]&lt;br /&gt;
&lt;br /&gt;
Ya disponemos de un intérprete de ordenes en nuestro sistema operativo Ubuntu cloud que corre sobre nuestra máquina virtual.&lt;br /&gt;
&lt;br /&gt;
'''Nota''': El teclado de la imagen de Ubuntu cloud que corre en la máquina virtual está en inglés, puedes cambiarlo con la siguiente orden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo loadkeys es&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Paso 5: Configuración de la red en libvirt =&lt;br /&gt;
&lt;br /&gt;
Antes de ver los detalles de red, vamos a hacer una pequeña diferencia entre las dos ventanas que tenemos abiertas, virt-manager principal y virt-manager máquina de ubuntu ejecutándose. En la primera tendremos las configuraciones generales y en la segunda tendremos las configuraciones de una máquina virtual concreta, en nuestro caso, la configuración de la máquina virtual de ubuntu.&lt;br /&gt;
&lt;br /&gt;
Con esto, veremos dos formas de saber la IP de nuestra máquina virtual:&lt;br /&gt;
&lt;br /&gt;
# En la ventana de nuestra máquina virtual de ubuntu, vamos a cambiar la vista y ver los detalles de nuestra máquina. ''Vista --&amp;gt; Detalles''. Aquí tenemos toda la configuración de nuestra máquina, pero solo vamos a centrarnos en la Interfaz de red virtual, que es donde podremos ver cual es pa IP que tiene asiganada nuestra máquina y cual es la fuente de red que se está utilizando. [[Archivo:virt-manager-nic.png|thumb|Interfaz de red virtual.]]&lt;br /&gt;
# La otra opción es utilizando comandos, podemos utilizar ''ip address'' en la consola de nuestra máquina virtual.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ sudo ip address&lt;br /&gt;
1: lo: &amp;lt;LOOPBACK,UP,LOWER_UP&amp;gt; mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000&lt;br /&gt;
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00&lt;br /&gt;
    inet 127.0.0.1/8 scope host lo&lt;br /&gt;
       valid_lft forever preferred_lft forever&lt;br /&gt;
    inet6 ::1/128 scope host &lt;br /&gt;
       valid_lft forever preferred_lft forever&lt;br /&gt;
2: ens3: &amp;lt;BROADCAST,MULTICAST,UP,LOWER_UP&amp;gt; mtu 1500 qdisc pfifo_fast state UP group default qlen 1000&lt;br /&gt;
    link/ether 3d:f0:ee:49:aa:22 brd ff:ff:ff:ff:ff:ff&lt;br /&gt;
    inet 192.168.100.168/24 brd 192.168.2.255 scope global eth0&lt;br /&gt;
       valid_lft forever preferred_lft forever&lt;br /&gt;
    inet6 fe80::3e97:eff:fe39:dd20/64 scope link &lt;br /&gt;
       valid_lft forever preferred_lft forever&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Que nos permite comprobar que estamos utilizando la dirección IP 192.168.100.168.&lt;br /&gt;
&lt;br /&gt;
Si la interfaz no muestra una dirección IP, puedes forzar la obtención de una dirección IP desde la máquina virtual para la interfaz ''ens3'' con la orden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo dhclient ens3&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vamos a comprobar ahora desde un terminal en el anfitrión que alcanzamos a nuestra máquina virtual.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ping 192.168.100.168&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Deberíamos de ver una salida similar a la siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
PING 192.168.100.168 (192.168.100.168) 56(84) bytes of data.&lt;br /&gt;
64 bytes from 192.168.100.168: icmp_seq=1 ttl=64 time=0.397 ms&lt;br /&gt;
64 bytes from 192.168.100.168: icmp_seq=2 ttl=64 time=0.409 ms&lt;br /&gt;
64 bytes from 192.168.100.168: icmp_seq=3 ttl=64 time=0.321 ms&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Si hubiere algún problema de conectividad la salida sería de este tipo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
PING 192.168.100.168 (192.168.100.168) 56(84) bytes of data.&lt;br /&gt;
From 192.168.100.1 icmp_seq=1 Destination Host Unreachable&lt;br /&gt;
From 192.168.100.1 icmp_seq=2 Destination Host Unreachable&lt;br /&gt;
From 192.168.100.1 icmp_seq=3 Destination Host Unreachable&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En dicho caso, puedes forzar la obtención de una dirección IP con la orden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo dhclient ens3&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Esto quiere decir que la configuración de red es incorrecta, o quizás que la dirección IP de tu máquina virtual no es 192.168.100.168 :-).&lt;br /&gt;
&lt;br /&gt;
Dispones de más información suplementaria sobre la [[configuración de red en libvirt]].&lt;br /&gt;
&lt;br /&gt;
= Paso 6: Clonado de máquinas virtuales =&lt;br /&gt;
&lt;br /&gt;
Vamos a reutilizar la configuración y la máquina virtual creada, para crear varias iguales. Empecemos:&lt;br /&gt;
&lt;br /&gt;
# Apagamos la máquina virtual si la tenemos encendida, para que nos permita hacer un clonado. ''Máquina virtual --&amp;gt; Apagar --&amp;gt; Apagar''&lt;br /&gt;
# En la ventana principal, pulsar botón derecho encima de la máquina virtual que queramos clonar, y pulsar ''Clonar ...''&lt;br /&gt;
# En la ventana que nos aparece, por defecto seleccionará la misma red y creará una MAC diferente para la nueva máquina y clonará la imagen de ubuntu que usamos de almacenamiento. Le damos un nuevo nombre a nuestra máquina, y pulsamos en ''Clonar''.&lt;br /&gt;
# Repetimos este paso hasta que tengamos toda las máquinas virtuales deseadas, en nuestro caso, solo crearemos una para probar los detalles de red.&lt;br /&gt;
&lt;br /&gt;
Ahora arrancaremos la máquina original y la clonada, y vamos a comprobar que ambas están en la misma red y que pueden verse entre ellas. Como comentamos en el paso anterior, comprobaremos la IP de la máquina virtual original y de la clonada, y haremos ping desde dentro de las máquinas para comprobar que se ven.&lt;br /&gt;
&lt;br /&gt;
Ejemplo:&lt;br /&gt;
&lt;br /&gt;
* Máquina original tiene IP 192.168.100.168&lt;br /&gt;
* Máquina clonada tiene IP 192.168.100.169&lt;br /&gt;
* Desde la máquina original haremos un ping 192.168.100.169&lt;br /&gt;
* Desde la máquina clonada haremos un ping 192.168.100.168&lt;br /&gt;
* Desde ambas máquinas, comprobaremos que la puerta de enlace es la misma, haciendo un ''ip route''.&lt;br /&gt;
* Desde la máquina host, deberíamos de obtener ping hacía las dos máquinas&lt;br /&gt;
&lt;br /&gt;
= Paso 7: Instantáneas de máquinas virtuales =&lt;br /&gt;
&lt;br /&gt;
Las instantáneas nos permiten almacenar una captura del estado de la ejecución de una máquina virtual en un cierto instante tiempo que podremos restaurar cuando sea necesario. Las instantáneas te serán útiles si tienes trabajo a medio hacer en la máquina virtual, de manera que quieras guardar lo que has hecho para restaurarlo posteriormente.&lt;br /&gt;
&lt;br /&gt;
Para crear una instantánea, accedemos a la máquina virtual en ejecución y desplegamos el menú ''Vista'' y pinchamos sobre ''Capturas de Pantalla'' (Snapshot). Después pulsamos en el botón ''+'' que aparece abajo a la izquierda, indicamos el nombre de la instantánea y le damos a ''Finalizar'.&lt;br /&gt;
&lt;br /&gt;
La creación de instantáneas toma algo de tiempo, sé paciente. Puedes almacenar tantas instantáneas como quieras. El nombre ''Captura de pantalla'' es una traducción poco afortunada del inglés ''snapshot'' que se refiere al término ''instantánea''.&lt;br /&gt;
&lt;br /&gt;
= Paso 8: Instalación Manual de SO en VVM =&lt;br /&gt;
&lt;br /&gt;
1) Ubuntu net install (ubuntu minimalCD):&lt;br /&gt;
	64bit 18.04&lt;br /&gt;
&lt;br /&gt;
{Archivo:WEB DONDE INSTALARLA .png}&lt;br /&gt;
&lt;br /&gt;
{Archivo:DESCARGAR UBUNTU .png }&lt;br /&gt;
&lt;br /&gt;
2) Creamos una nueva máquina virtual:&lt;br /&gt;
	(medio de instalación local (imagen ISO o CDROM))&lt;br /&gt;
&lt;br /&gt;
3) Install&lt;br /&gt;
&lt;br /&gt;
{Archivo:INSTALL.png }&lt;br /&gt;
&lt;br /&gt;
4) Idioma -&amp;gt; Spanish&lt;br /&gt;
&lt;br /&gt;
5) Teclado: DETECT? NO -&amp;gt; Spanish&lt;br /&gt;
	(Dvorak es similar a la máquina de escribir inglesa) -&amp;gt; NO&lt;br /&gt;
&lt;br /&gt;
{Archivo:CONFIGURACIÓN TECLADO.png }&lt;br /&gt;
&lt;br /&gt;
6) Escoger réplica ubuntu: Spanish, en blanco y continuamos&lt;br /&gt;
&lt;br /&gt;
{Archivo:RÉPLICA DE UBUNTU .png}&lt;br /&gt;
&lt;br /&gt;
7) Nombre de usuario: MARINARF&lt;br /&gt;
&lt;br /&gt;
8) Nombre para la cuenta: marinarf&lt;br /&gt;
&lt;br /&gt;
9) Contraseña: qwerty123&lt;br /&gt;
&lt;br /&gt;
10) Configurar el reloj: NO, continuar y marcar Península&lt;br /&gt;
&lt;br /&gt;
11) Método de particionado: Guiado -&amp;gt; utilizar todo el disco&lt;br /&gt;
&lt;br /&gt;
12) Sí&lt;br /&gt;
&lt;br /&gt;
13) Administrar actualizaciones: SIN ACTUALIZACIONES AUTOMÁTICAS&lt;br /&gt;
&lt;br /&gt;
{Archivo:SIN ACTUALIZACIONES AUTOMÁTICAS.png}&lt;br /&gt;
&lt;br /&gt;
14) Programas a instalar: Lotes de paquetes de software &lt;br /&gt;
	(Si marcas alguno, tarda más en instalar)&lt;br /&gt;
&lt;br /&gt;
15) GRUB: Sí&lt;br /&gt;
&lt;br /&gt;
16) Hora UTC: Sí&lt;br /&gt;
&lt;br /&gt;
FIN&lt;br /&gt;
&lt;br /&gt;
_____________________________________________________________________________________&lt;br /&gt;
&lt;br /&gt;
 ·) INSTALACIÓN DE WINDOWS:&lt;br /&gt;
&lt;br /&gt;
&amp;gt; Versión de evaluación de Windows: windows 2016 evaluation &lt;br /&gt;
&lt;br /&gt;
&amp;gt; hhtps://dennisnotes.com/note/20180614-ubuntu-18 ...  (libvirt install windows)&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
 ·) EXTRAS:&lt;br /&gt;
&lt;br /&gt;
· Nas: Network Attack Story = smart&lt;br /&gt;
&lt;br /&gt;
· Carpeta temporal rutkit seguir en el sistema sin que lo sepa el dueño = Peligro&lt;br /&gt;
- Si quitamos lo temporal = más seguridad&lt;/div&gt;</summary>
		<author><name>Marramfer12</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Archivo:WEB_DONDE_INSTALARLA_.png&amp;diff=4539</id>
		<title>Archivo:WEB DONDE INSTALARLA .png</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Archivo:WEB_DONDE_INSTALARLA_.png&amp;diff=4539"/>
				<updated>2019-11-06T16:13:01Z</updated>
		
		<summary type="html">&lt;p&gt;Marramfer12: PASO 8: INSTALAR SO EN VVM&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;PASO 8: INSTALAR SO EN VVM&lt;/div&gt;</summary>
		<author><name>Marramfer12</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Archivo:SIN_ACTUALIZACIONES_AUTOM%C3%81TICAS.png&amp;diff=4538</id>
		<title>Archivo:SIN ACTUALIZACIONES AUTOMÁTICAS.png</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Archivo:SIN_ACTUALIZACIONES_AUTOM%C3%81TICAS.png&amp;diff=4538"/>
				<updated>2019-11-06T16:12:43Z</updated>
		
		<summary type="html">&lt;p&gt;Marramfer12: PASO 8: INSTALAR SO EN VVM&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;PASO 8: INSTALAR SO EN VVM&lt;/div&gt;</summary>
		<author><name>Marramfer12</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Archivo:R%C3%89PLICA_DE_UBUNTU_.png&amp;diff=4537</id>
		<title>Archivo:RÉPLICA DE UBUNTU .png</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Archivo:R%C3%89PLICA_DE_UBUNTU_.png&amp;diff=4537"/>
				<updated>2019-11-06T16:12:19Z</updated>
		
		<summary type="html">&lt;p&gt;Marramfer12: PASO 8: INSTALAR SO EN VVM&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;PASO 8: INSTALAR SO EN VVM&lt;/div&gt;</summary>
		<author><name>Marramfer12</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Archivo:INSTALL.png&amp;diff=4536</id>
		<title>Archivo:INSTALL.png</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Archivo:INSTALL.png&amp;diff=4536"/>
				<updated>2019-11-06T16:11:27Z</updated>
		
		<summary type="html">&lt;p&gt;Marramfer12: PASO 8: INSTALAR SO EN VVM&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;PASO 8: INSTALAR SO EN VVM&lt;/div&gt;</summary>
		<author><name>Marramfer12</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Archivo:DESCARGAR_UBUNTU_.png&amp;diff=4535</id>
		<title>Archivo:DESCARGAR UBUNTU .png</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Archivo:DESCARGAR_UBUNTU_.png&amp;diff=4535"/>
				<updated>2019-11-06T16:11:05Z</updated>
		
		<summary type="html">&lt;p&gt;Marramfer12: PASO 8: INSTALAR SO EN VVM&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;PASO 8: INSTALAR SO EN VVM&lt;/div&gt;</summary>
		<author><name>Marramfer12</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Archivo:CONFIGURACI%C3%93N_TECLADO.png&amp;diff=4534</id>
		<title>Archivo:CONFIGURACIÓN TECLADO.png</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Archivo:CONFIGURACI%C3%93N_TECLADO.png&amp;diff=4534"/>
				<updated>2019-11-06T16:10:32Z</updated>
		
		<summary type="html">&lt;p&gt;Marramfer12: PASO 8: INSTALAR SO EN VVM&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;PASO 8: INSTALAR SO EN VVM&lt;/div&gt;</summary>
		<author><name>Marramfer12</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Virtualizaci%C3%B3n_con_libvirt&amp;diff=4533</id>
		<title>Virtualización con libvirt</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Virtualizaci%C3%B3n_con_libvirt&amp;diff=4533"/>
				<updated>2019-11-06T15:55:12Z</updated>
		
		<summary type="html">&lt;p&gt;Marramfer12: /* Paso 8: Instalación Manual de SO en VVM */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Para la realización de esta práctica necesitará de una imagen de Ubuntu Cloud que descargaremos de https://cloud-images.ubuntu.com/ y necesitaremos un&lt;br /&gt;
sistema anfitrión con Ubuntu 18.04.&lt;br /&gt;
&lt;br /&gt;
En esta práctica se empleará la imagen descargada de la web Ubuntu Cloud y se hará uso de la herramienta '''cloud-init''' para configurarla.&lt;br /&gt;
&lt;br /&gt;
A continuación, utilizaremos la imagen de Ubuntu ya configurada para ser importada al software de virtualización '''libvirt'''.&lt;br /&gt;
&lt;br /&gt;
= Paso 1: Descarga de la imagen Ubuntu Cloud =&lt;br /&gt;
&lt;br /&gt;
Entramos en https://cloud-images.ubuntu.com/ y descargamos la imagen de Ubuntu 18.04 LTS (Long Time Support).&lt;br /&gt;
&lt;br /&gt;
Puedes descargarla directamente con la orden ''wget'':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
wget https://cloud-images.ubuntu.com/bionic/current/bionic-server-cloudimg-amd64.img&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
si comenzó a descargar verás una salida similar a esta:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
-2019-08-06 12:26:26--  https://cloud-images.ubuntu.com/bionic/current/bionic-server-cloudimg-amd64.img&lt;br /&gt;
Resolviendo cloud-images.ubuntu.com (cloud-images.ubuntu.com)... 91.189.88.89, 2001:67c:1560:8001::8001&lt;br /&gt;
Conectando con cloud-images.ubuntu.com (cloud-images.ubuntu.com)[91.189.88.89]:443... conectado.&lt;br /&gt;
Petición HTTP enviada, esperando respuesta... 200 OK&lt;br /&gt;
Longitud: 343474176 (328M) [application/octet-stream]&lt;br /&gt;
Grabando a: “bionic-server-cloudimg-amd64.img”&lt;br /&gt;
&lt;br /&gt;
bionic-server-cloudimg-amd64.img.   0%[                                                              ]   2,21M   472KB/s    eta 14m 6s&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Espera hasta que la imagen esté descargada al 100%.&lt;br /&gt;
&lt;br /&gt;
= Paso 2: Instalación del paquete cloud-init =&lt;br /&gt;
&lt;br /&gt;
A continuación, tienes que instalar los [[paquetes]] que ofrecen la herramienta ''cloud-init'' para configurar la imagen de Ubuntu que has descargado, estos paquetes son:&lt;br /&gt;
&lt;br /&gt;
* '''cloud-init''': herramienta para configurar una imagen de Ubuntu cloud.&lt;br /&gt;
* '''cloud-image-utils''': esta herramienta es complementaria a cloud-init y sirve para modificar imágenes de Ubuntu cloud.&lt;br /&gt;
&lt;br /&gt;
Podemos instalar estos paquetes con la herramienta '''apt''' desde el intérprete de órdenes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt install cloud-init cloud-image-utils&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''En los ordenadores del aula de prácticas estos paquetes ya estarán preinstalados, con lo que puedes saltarte este paso''.&lt;br /&gt;
&lt;br /&gt;
= Paso 3: Configuración de la imagen de Ubuntu con cloud-init =&lt;br /&gt;
&lt;br /&gt;
Para configurar la imagen de Ubuntu cloud, hay que crear un fichero de configuración para la herramienta '''cloud-init'''. Este fichero empieza siempre por la línea #cloud-config y se estructura en formato [https://es.wikipedia.org/wiki/YAML yaml], el contenido del fichero ''cloud.cfg'' sería el siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#cloud-config&lt;br /&gt;
password: qwerty123&lt;br /&gt;
chpasswd: { expire: False }&lt;br /&gt;
ssh_pwauth: True&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
El ejemplo anterior muestra cómo configurar la imagen descargada para que disponga del usuario ''ubuntu'', y en este caso, la contraseña es ''querty123'', y que se pueda acceder a dicho usuario por medio de ''[[ssh]]''.&lt;br /&gt;
&lt;br /&gt;
Podemos configurar la imagen para que apliquen estos cambios con el siguiente comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cloud-localds media.img cloud.cfg&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Esta aplicación genera un fichero imagen que será empleado para configurar la imagen de Ubuntu cloud que has descargado.&lt;br /&gt;
&lt;br /&gt;
Dispones de más información suplementaria sobre como usar [[cloud-init]].&lt;br /&gt;
&lt;br /&gt;
= Paso 4: Instalación de libvirt e importación de imagenes =&lt;br /&gt;
&lt;br /&gt;
Para instalar libvirt lo hacemos con la herramienta '''apt''' desde el intérprete de órdenes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt install virt-manager&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''En los ordenadores del aula de prácticas este paquete ya estará preinstalado, con lo que puedes saltarte la orden anterior''.&lt;br /&gt;
&lt;br /&gt;
[[Archivo:virt-manager.png|thumb|Interfaz de virt-manager.]]&lt;br /&gt;
&lt;br /&gt;
Una vez instalada podemos lanzar virt-manager desde el intérprete de órdenes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virt-manager&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para importar la imagen de Ubuntu cloud que hemos descargado a la máquina virtual, desde un intérprete de órdenes en el anfitrión (¡sin cerrar la ventana de virt-manager de la que ya disponemos!), vamos a copiar la imagen descargada en el paso 1 y la imagen generada en el paso 3 en el directorio de trabajo de virt-manager que se encuentra en ''/var/lib/libvirt/images''. Para ello, desde el intérprete de órdenes que hemos lanzado y desde el directorio donde tengamos las imágenes anteriormente generadas, invocamos las siguientes ordenes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo cp bionic-server-cloudimg-amd64.img /var/lib/libvirt/images&lt;br /&gt;
sudo cp media.img /var/lib/libvirt/images&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Con estas ordenes, estas copiando la imagen de Ubuntu cloud descargada y la imagen generada por cloud-localds en la carpeta''/var/lib/libvirt/images'' que contiene las imagenes de las que dispone la virt-manager.&lt;br /&gt;
&lt;br /&gt;
[[Archivo:virt-manager-paso4-5.png|thumb|Seleccionar imagen de Ubuntu descargada.]]&lt;br /&gt;
&lt;br /&gt;
Volvemos a la interfaz gráfica de virt-manager una vez copiadas las imágenes y creamos una nueva máquina virtual empleando dichas imágenes:&lt;br /&gt;
&lt;br /&gt;
# Desde la interfaz de virt-manager creamos una nueva Máquina Virtual ''(Archivo --&amp;gt; Nueva máquina virtual)''&lt;br /&gt;
# En la nueva ventana que se abre, seleccionamos ''Medio de instalación local'' y pulsamos ''Adelante''&lt;br /&gt;
# En ''Choose ISO or CDROM install media'' seleccionamos la imagen de ''media.img''' creada en el paso 3; y desmarcamos la casilla de ''Detección automática'' para seleccionar nuestro Sistema Operativo, en este caso, Ubuntu 18.04 LTS. Vemos que todo queda como en la imagen y pulsamos ''Adelante'' [[Archivo:virt-manager-paso4-3.png|thumb|Elegir imagen de configuración y SO.]]&lt;br /&gt;
# Seleccionamos la cantidad de memoria y de CPU que queremos, por defecto 2048 de Memoria y 1 CPU está bien.&lt;br /&gt;
# En el almacenamiento, vamos a seleccionar un almacenaje personalizado, y aquí sera donde seleccionemos la imagen de ubuntu descargada, en nuestro caso ''bionic-server-cloudimg-amd64.img'' y pulsamos ''Adelante'' &lt;br /&gt;
# En el último paso, podremos selecionar la red, por ahora dejaremos [[NAT]] por defecto y pulsamos '''Finalizar''' (Si nos pregunta si queremos crear una red [[NAT]] porque no está creada, le decimos que sí).&lt;br /&gt;
&lt;br /&gt;
Ya tenemos nuestra máquina virtual creada con nuestra configuración. Ahora vamos a probar que todo funciona correctamente. La máquina debería de estar arrancando y debería de aparecer el mensaje de login. [[Archivo:virt-manager-login.png|thumb|Login de ubuntu.]]&lt;br /&gt;
&lt;br /&gt;
Utilizamos como usuario ''ubuntu'', que es el usuario por defecto y como contraseña empleamos la que hayamos elegido en el paso 3. Con esto nos validamos en el sistema con éxito. [[Archivo:virt-manager-logged.png|thumb|Usuario ya validado, en el intérprete de ordenes]]&lt;br /&gt;
&lt;br /&gt;
Ya disponemos de un intérprete de ordenes en nuestro sistema operativo Ubuntu cloud que corre sobre nuestra máquina virtual.&lt;br /&gt;
&lt;br /&gt;
'''Nota''': El teclado de la imagen de Ubuntu cloud que corre en la máquina virtual está en inglés, puedes cambiarlo con la siguiente orden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo loadkeys es&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Paso 5: Configuración de la red en libvirt =&lt;br /&gt;
&lt;br /&gt;
Antes de ver los detalles de red, vamos a hacer una pequeña diferencia entre las dos ventanas que tenemos abiertas, virt-manager principal y virt-manager máquina de ubuntu ejecutándose. En la primera tendremos las configuraciones generales y en la segunda tendremos las configuraciones de una máquina virtual concreta, en nuestro caso, la configuración de la máquina virtual de ubuntu.&lt;br /&gt;
&lt;br /&gt;
Con esto, veremos dos formas de saber la IP de nuestra máquina virtual:&lt;br /&gt;
&lt;br /&gt;
# En la ventana de nuestra máquina virtual de ubuntu, vamos a cambiar la vista y ver los detalles de nuestra máquina. ''Vista --&amp;gt; Detalles''. Aquí tenemos toda la configuración de nuestra máquina, pero solo vamos a centrarnos en la Interfaz de red virtual, que es donde podremos ver cual es pa IP que tiene asiganada nuestra máquina y cual es la fuente de red que se está utilizando. [[Archivo:virt-manager-nic.png|thumb|Interfaz de red virtual.]]&lt;br /&gt;
# La otra opción es utilizando comandos, podemos utilizar ''ip address'' en la consola de nuestra máquina virtual.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ sudo ip address&lt;br /&gt;
1: lo: &amp;lt;LOOPBACK,UP,LOWER_UP&amp;gt; mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000&lt;br /&gt;
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00&lt;br /&gt;
    inet 127.0.0.1/8 scope host lo&lt;br /&gt;
       valid_lft forever preferred_lft forever&lt;br /&gt;
    inet6 ::1/128 scope host &lt;br /&gt;
       valid_lft forever preferred_lft forever&lt;br /&gt;
2: ens3: &amp;lt;BROADCAST,MULTICAST,UP,LOWER_UP&amp;gt; mtu 1500 qdisc pfifo_fast state UP group default qlen 1000&lt;br /&gt;
    link/ether 3d:f0:ee:49:aa:22 brd ff:ff:ff:ff:ff:ff&lt;br /&gt;
    inet 192.168.100.168/24 brd 192.168.2.255 scope global eth0&lt;br /&gt;
       valid_lft forever preferred_lft forever&lt;br /&gt;
    inet6 fe80::3e97:eff:fe39:dd20/64 scope link &lt;br /&gt;
       valid_lft forever preferred_lft forever&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Que nos permite comprobar que estamos utilizando la dirección IP 192.168.100.168.&lt;br /&gt;
&lt;br /&gt;
Si la interfaz no muestra una dirección IP, puedes forzar la obtención de una dirección IP desde la máquina virtual para la interfaz ''ens3'' con la orden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo dhclient ens3&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vamos a comprobar ahora desde un terminal en el anfitrión que alcanzamos a nuestra máquina virtual.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ping 192.168.100.168&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Deberíamos de ver una salida similar a la siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
PING 192.168.100.168 (192.168.100.168) 56(84) bytes of data.&lt;br /&gt;
64 bytes from 192.168.100.168: icmp_seq=1 ttl=64 time=0.397 ms&lt;br /&gt;
64 bytes from 192.168.100.168: icmp_seq=2 ttl=64 time=0.409 ms&lt;br /&gt;
64 bytes from 192.168.100.168: icmp_seq=3 ttl=64 time=0.321 ms&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Si hubiere algún problema de conectividad la salida sería de este tipo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
PING 192.168.100.168 (192.168.100.168) 56(84) bytes of data.&lt;br /&gt;
From 192.168.100.1 icmp_seq=1 Destination Host Unreachable&lt;br /&gt;
From 192.168.100.1 icmp_seq=2 Destination Host Unreachable&lt;br /&gt;
From 192.168.100.1 icmp_seq=3 Destination Host Unreachable&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En dicho caso, puedes forzar la obtención de una dirección IP con la orden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo dhclient ens3&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Esto quiere decir que la configuración de red es incorrecta, o quizás que la dirección IP de tu máquina virtual no es 192.168.100.168 :-).&lt;br /&gt;
&lt;br /&gt;
Dispones de más información suplementaria sobre la [[configuración de red en libvirt]].&lt;br /&gt;
&lt;br /&gt;
= Paso 6: Clonado de máquinas virtuales =&lt;br /&gt;
&lt;br /&gt;
Vamos a reutilizar la configuración y la máquina virtual creada, para crear varias iguales. Empecemos:&lt;br /&gt;
&lt;br /&gt;
# Apagamos la máquina virtual si la tenemos encendida, para que nos permita hacer un clonado. ''Máquina virtual --&amp;gt; Apagar --&amp;gt; Apagar''&lt;br /&gt;
# En la ventana principal, pulsar botón derecho encima de la máquina virtual que queramos clonar, y pulsar ''Clonar ...''&lt;br /&gt;
# En la ventana que nos aparece, por defecto seleccionará la misma red y creará una MAC diferente para la nueva máquina y clonará la imagen de ubuntu que usamos de almacenamiento. Le damos un nuevo nombre a nuestra máquina, y pulsamos en ''Clonar''.&lt;br /&gt;
# Repetimos este paso hasta que tengamos toda las máquinas virtuales deseadas, en nuestro caso, solo crearemos una para probar los detalles de red.&lt;br /&gt;
&lt;br /&gt;
Ahora arrancaremos la máquina original y la clonada, y vamos a comprobar que ambas están en la misma red y que pueden verse entre ellas. Como comentamos en el paso anterior, comprobaremos la IP de la máquina virtual original y de la clonada, y haremos ping desde dentro de las máquinas para comprobar que se ven.&lt;br /&gt;
&lt;br /&gt;
Ejemplo:&lt;br /&gt;
&lt;br /&gt;
* Máquina original tiene IP 192.168.100.168&lt;br /&gt;
* Máquina clonada tiene IP 192.168.100.169&lt;br /&gt;
* Desde la máquina original haremos un ping 192.168.100.169&lt;br /&gt;
* Desde la máquina clonada haremos un ping 192.168.100.168&lt;br /&gt;
* Desde ambas máquinas, comprobaremos que la puerta de enlace es la misma, haciendo un ''ip route''.&lt;br /&gt;
* Desde la máquina host, deberíamos de obtener ping hacía las dos máquinas&lt;br /&gt;
&lt;br /&gt;
= Paso 7: Instantáneas de máquinas virtuales =&lt;br /&gt;
&lt;br /&gt;
Las instantáneas nos permiten almacenar una captura del estado de la ejecución de una máquina virtual en un cierto instante tiempo que podremos restaurar cuando sea necesario. Las instantáneas te serán útiles si tienes trabajo a medio hacer en la máquina virtual, de manera que quieras guardar lo que has hecho para restaurarlo posteriormente.&lt;br /&gt;
&lt;br /&gt;
Para crear una instantánea, accedemos a la máquina virtual en ejecución y desplegamos el menú ''Vista'' y pinchamos sobre ''Capturas de Pantalla'' (Snapshot). Después pulsamos en el botón ''+'' que aparece abajo a la izquierda, indicamos el nombre de la instantánea y le damos a ''Finalizar'.&lt;br /&gt;
&lt;br /&gt;
La creación de instantáneas toma algo de tiempo, sé paciente. Puedes almacenar tantas instantáneas como quieras. El nombre ''Captura de pantalla'' es una traducción poco afortunada del inglés ''snapshot'' que se refiere al término ''instantánea''.&lt;br /&gt;
&lt;br /&gt;
= Paso 8: Instalación Manual de SO en VVM =&lt;br /&gt;
&lt;br /&gt;
1) Ubuntu net install (ubuntu minimalCD):&lt;br /&gt;
	64bit 18.04&lt;br /&gt;
&lt;br /&gt;
2) Creamos una nueva máquina virtual:&lt;br /&gt;
	(medio de instalación local (imagen ISO o CDROM))&lt;br /&gt;
&lt;br /&gt;
3) Install&lt;br /&gt;
&lt;br /&gt;
4) Idioma -&amp;gt; Spanish&lt;br /&gt;
&lt;br /&gt;
5) Teclado: DETECT? NO -&amp;gt; Spanish&lt;br /&gt;
	(Dvorak es similar a la máquina de escribir inglesa) -&amp;gt; NO&lt;br /&gt;
&lt;br /&gt;
6) Escoger réplica ubuntu: en blanco y continuamos&lt;br /&gt;
&lt;br /&gt;
7) Nombre de usuario: MARINARF&lt;br /&gt;
&lt;br /&gt;
8) Nombre para la cuenta: marinarf&lt;br /&gt;
&lt;br /&gt;
9) Contraseña: qwerty123&lt;br /&gt;
&lt;br /&gt;
10) Configurar el reloj: NO, continuar y marcar Península&lt;br /&gt;
&lt;br /&gt;
11) Método de particionado: Guiado -&amp;gt; utilizar todo el disco&lt;br /&gt;
&lt;br /&gt;
12) Sí&lt;br /&gt;
&lt;br /&gt;
13) Administrar actualizaciones: SIN ACTUALIZACIONES AUTOMÁTICAS&lt;br /&gt;
&lt;br /&gt;
14) Programas a instalar: Lotes de paquetes de software &lt;br /&gt;
	(Si marcas alguno, tarda más en instalar)&lt;br /&gt;
&lt;br /&gt;
15) GRUB: Sí&lt;br /&gt;
&lt;br /&gt;
16) Hora UTC: Sí&lt;br /&gt;
&lt;br /&gt;
FIN&lt;br /&gt;
&lt;br /&gt;
_____________________________________________________________________________________&lt;br /&gt;
&lt;br /&gt;
 ·) INSTALACIÓN DE WINDOWS:&lt;br /&gt;
&lt;br /&gt;
&amp;gt; Versión de evaluación de Windows: windows 2016 evaluation &lt;br /&gt;
&lt;br /&gt;
&amp;gt; hhtps://dennisnotes.com/note/20180614-ubuntu-18 ...  (libvirt install windows)&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
 ·) EXTRAS:&lt;br /&gt;
&lt;br /&gt;
· Nas: Network Attack Story = smart&lt;br /&gt;
&lt;br /&gt;
· Carpeta temporal rutkit seguir en el sistema sin que lo sepa el dueño = Peligro&lt;br /&gt;
- Si quitamos lo temporal = más seguridad&lt;/div&gt;</summary>
		<author><name>Marramfer12</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Virtualizaci%C3%B3n_con_libvirt&amp;diff=4532</id>
		<title>Virtualización con libvirt</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Virtualizaci%C3%B3n_con_libvirt&amp;diff=4532"/>
				<updated>2019-11-06T15:54:22Z</updated>
		
		<summary type="html">&lt;p&gt;Marramfer12: /* Paso 8: Instalación Manual de SO en VVM */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Para la realización de esta práctica necesitará de una imagen de Ubuntu Cloud que descargaremos de https://cloud-images.ubuntu.com/ y necesitaremos un&lt;br /&gt;
sistema anfitrión con Ubuntu 18.04.&lt;br /&gt;
&lt;br /&gt;
En esta práctica se empleará la imagen descargada de la web Ubuntu Cloud y se hará uso de la herramienta '''cloud-init''' para configurarla.&lt;br /&gt;
&lt;br /&gt;
A continuación, utilizaremos la imagen de Ubuntu ya configurada para ser importada al software de virtualización '''libvirt'''.&lt;br /&gt;
&lt;br /&gt;
= Paso 1: Descarga de la imagen Ubuntu Cloud =&lt;br /&gt;
&lt;br /&gt;
Entramos en https://cloud-images.ubuntu.com/ y descargamos la imagen de Ubuntu 18.04 LTS (Long Time Support).&lt;br /&gt;
&lt;br /&gt;
Puedes descargarla directamente con la orden ''wget'':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
wget https://cloud-images.ubuntu.com/bionic/current/bionic-server-cloudimg-amd64.img&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
si comenzó a descargar verás una salida similar a esta:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
-2019-08-06 12:26:26--  https://cloud-images.ubuntu.com/bionic/current/bionic-server-cloudimg-amd64.img&lt;br /&gt;
Resolviendo cloud-images.ubuntu.com (cloud-images.ubuntu.com)... 91.189.88.89, 2001:67c:1560:8001::8001&lt;br /&gt;
Conectando con cloud-images.ubuntu.com (cloud-images.ubuntu.com)[91.189.88.89]:443... conectado.&lt;br /&gt;
Petición HTTP enviada, esperando respuesta... 200 OK&lt;br /&gt;
Longitud: 343474176 (328M) [application/octet-stream]&lt;br /&gt;
Grabando a: “bionic-server-cloudimg-amd64.img”&lt;br /&gt;
&lt;br /&gt;
bionic-server-cloudimg-amd64.img.   0%[                                                              ]   2,21M   472KB/s    eta 14m 6s&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Espera hasta que la imagen esté descargada al 100%.&lt;br /&gt;
&lt;br /&gt;
= Paso 2: Instalación del paquete cloud-init =&lt;br /&gt;
&lt;br /&gt;
A continuación, tienes que instalar los [[paquetes]] que ofrecen la herramienta ''cloud-init'' para configurar la imagen de Ubuntu que has descargado, estos paquetes son:&lt;br /&gt;
&lt;br /&gt;
* '''cloud-init''': herramienta para configurar una imagen de Ubuntu cloud.&lt;br /&gt;
* '''cloud-image-utils''': esta herramienta es complementaria a cloud-init y sirve para modificar imágenes de Ubuntu cloud.&lt;br /&gt;
&lt;br /&gt;
Podemos instalar estos paquetes con la herramienta '''apt''' desde el intérprete de órdenes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt install cloud-init cloud-image-utils&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''En los ordenadores del aula de prácticas estos paquetes ya estarán preinstalados, con lo que puedes saltarte este paso''.&lt;br /&gt;
&lt;br /&gt;
= Paso 3: Configuración de la imagen de Ubuntu con cloud-init =&lt;br /&gt;
&lt;br /&gt;
Para configurar la imagen de Ubuntu cloud, hay que crear un fichero de configuración para la herramienta '''cloud-init'''. Este fichero empieza siempre por la línea #cloud-config y se estructura en formato [https://es.wikipedia.org/wiki/YAML yaml], el contenido del fichero ''cloud.cfg'' sería el siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#cloud-config&lt;br /&gt;
password: qwerty123&lt;br /&gt;
chpasswd: { expire: False }&lt;br /&gt;
ssh_pwauth: True&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
El ejemplo anterior muestra cómo configurar la imagen descargada para que disponga del usuario ''ubuntu'', y en este caso, la contraseña es ''querty123'', y que se pueda acceder a dicho usuario por medio de ''[[ssh]]''.&lt;br /&gt;
&lt;br /&gt;
Podemos configurar la imagen para que apliquen estos cambios con el siguiente comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cloud-localds media.img cloud.cfg&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Esta aplicación genera un fichero imagen que será empleado para configurar la imagen de Ubuntu cloud que has descargado.&lt;br /&gt;
&lt;br /&gt;
Dispones de más información suplementaria sobre como usar [[cloud-init]].&lt;br /&gt;
&lt;br /&gt;
= Paso 4: Instalación de libvirt e importación de imagenes =&lt;br /&gt;
&lt;br /&gt;
Para instalar libvirt lo hacemos con la herramienta '''apt''' desde el intérprete de órdenes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt install virt-manager&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''En los ordenadores del aula de prácticas este paquete ya estará preinstalado, con lo que puedes saltarte la orden anterior''.&lt;br /&gt;
&lt;br /&gt;
[[Archivo:virt-manager.png|thumb|Interfaz de virt-manager.]]&lt;br /&gt;
&lt;br /&gt;
Una vez instalada podemos lanzar virt-manager desde el intérprete de órdenes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virt-manager&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para importar la imagen de Ubuntu cloud que hemos descargado a la máquina virtual, desde un intérprete de órdenes en el anfitrión (¡sin cerrar la ventana de virt-manager de la que ya disponemos!), vamos a copiar la imagen descargada en el paso 1 y la imagen generada en el paso 3 en el directorio de trabajo de virt-manager que se encuentra en ''/var/lib/libvirt/images''. Para ello, desde el intérprete de órdenes que hemos lanzado y desde el directorio donde tengamos las imágenes anteriormente generadas, invocamos las siguientes ordenes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo cp bionic-server-cloudimg-amd64.img /var/lib/libvirt/images&lt;br /&gt;
sudo cp media.img /var/lib/libvirt/images&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Con estas ordenes, estas copiando la imagen de Ubuntu cloud descargada y la imagen generada por cloud-localds en la carpeta''/var/lib/libvirt/images'' que contiene las imagenes de las que dispone la virt-manager.&lt;br /&gt;
&lt;br /&gt;
[[Archivo:virt-manager-paso4-5.png|thumb|Seleccionar imagen de Ubuntu descargada.]]&lt;br /&gt;
&lt;br /&gt;
Volvemos a la interfaz gráfica de virt-manager una vez copiadas las imágenes y creamos una nueva máquina virtual empleando dichas imágenes:&lt;br /&gt;
&lt;br /&gt;
# Desde la interfaz de virt-manager creamos una nueva Máquina Virtual ''(Archivo --&amp;gt; Nueva máquina virtual)''&lt;br /&gt;
# En la nueva ventana que se abre, seleccionamos ''Medio de instalación local'' y pulsamos ''Adelante''&lt;br /&gt;
# En ''Choose ISO or CDROM install media'' seleccionamos la imagen de ''media.img''' creada en el paso 3; y desmarcamos la casilla de ''Detección automática'' para seleccionar nuestro Sistema Operativo, en este caso, Ubuntu 18.04 LTS. Vemos que todo queda como en la imagen y pulsamos ''Adelante'' [[Archivo:virt-manager-paso4-3.png|thumb|Elegir imagen de configuración y SO.]]&lt;br /&gt;
# Seleccionamos la cantidad de memoria y de CPU que queremos, por defecto 2048 de Memoria y 1 CPU está bien.&lt;br /&gt;
# En el almacenamiento, vamos a seleccionar un almacenaje personalizado, y aquí sera donde seleccionemos la imagen de ubuntu descargada, en nuestro caso ''bionic-server-cloudimg-amd64.img'' y pulsamos ''Adelante'' &lt;br /&gt;
# En el último paso, podremos selecionar la red, por ahora dejaremos [[NAT]] por defecto y pulsamos '''Finalizar''' (Si nos pregunta si queremos crear una red [[NAT]] porque no está creada, le decimos que sí).&lt;br /&gt;
&lt;br /&gt;
Ya tenemos nuestra máquina virtual creada con nuestra configuración. Ahora vamos a probar que todo funciona correctamente. La máquina debería de estar arrancando y debería de aparecer el mensaje de login. [[Archivo:virt-manager-login.png|thumb|Login de ubuntu.]]&lt;br /&gt;
&lt;br /&gt;
Utilizamos como usuario ''ubuntu'', que es el usuario por defecto y como contraseña empleamos la que hayamos elegido en el paso 3. Con esto nos validamos en el sistema con éxito. [[Archivo:virt-manager-logged.png|thumb|Usuario ya validado, en el intérprete de ordenes]]&lt;br /&gt;
&lt;br /&gt;
Ya disponemos de un intérprete de ordenes en nuestro sistema operativo Ubuntu cloud que corre sobre nuestra máquina virtual.&lt;br /&gt;
&lt;br /&gt;
'''Nota''': El teclado de la imagen de Ubuntu cloud que corre en la máquina virtual está en inglés, puedes cambiarlo con la siguiente orden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo loadkeys es&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Paso 5: Configuración de la red en libvirt =&lt;br /&gt;
&lt;br /&gt;
Antes de ver los detalles de red, vamos a hacer una pequeña diferencia entre las dos ventanas que tenemos abiertas, virt-manager principal y virt-manager máquina de ubuntu ejecutándose. En la primera tendremos las configuraciones generales y en la segunda tendremos las configuraciones de una máquina virtual concreta, en nuestro caso, la configuración de la máquina virtual de ubuntu.&lt;br /&gt;
&lt;br /&gt;
Con esto, veremos dos formas de saber la IP de nuestra máquina virtual:&lt;br /&gt;
&lt;br /&gt;
# En la ventana de nuestra máquina virtual de ubuntu, vamos a cambiar la vista y ver los detalles de nuestra máquina. ''Vista --&amp;gt; Detalles''. Aquí tenemos toda la configuración de nuestra máquina, pero solo vamos a centrarnos en la Interfaz de red virtual, que es donde podremos ver cual es pa IP que tiene asiganada nuestra máquina y cual es la fuente de red que se está utilizando. [[Archivo:virt-manager-nic.png|thumb|Interfaz de red virtual.]]&lt;br /&gt;
# La otra opción es utilizando comandos, podemos utilizar ''ip address'' en la consola de nuestra máquina virtual.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ sudo ip address&lt;br /&gt;
1: lo: &amp;lt;LOOPBACK,UP,LOWER_UP&amp;gt; mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000&lt;br /&gt;
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00&lt;br /&gt;
    inet 127.0.0.1/8 scope host lo&lt;br /&gt;
       valid_lft forever preferred_lft forever&lt;br /&gt;
    inet6 ::1/128 scope host &lt;br /&gt;
       valid_lft forever preferred_lft forever&lt;br /&gt;
2: ens3: &amp;lt;BROADCAST,MULTICAST,UP,LOWER_UP&amp;gt; mtu 1500 qdisc pfifo_fast state UP group default qlen 1000&lt;br /&gt;
    link/ether 3d:f0:ee:49:aa:22 brd ff:ff:ff:ff:ff:ff&lt;br /&gt;
    inet 192.168.100.168/24 brd 192.168.2.255 scope global eth0&lt;br /&gt;
       valid_lft forever preferred_lft forever&lt;br /&gt;
    inet6 fe80::3e97:eff:fe39:dd20/64 scope link &lt;br /&gt;
       valid_lft forever preferred_lft forever&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Que nos permite comprobar que estamos utilizando la dirección IP 192.168.100.168.&lt;br /&gt;
&lt;br /&gt;
Si la interfaz no muestra una dirección IP, puedes forzar la obtención de una dirección IP desde la máquina virtual para la interfaz ''ens3'' con la orden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo dhclient ens3&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vamos a comprobar ahora desde un terminal en el anfitrión que alcanzamos a nuestra máquina virtual.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ping 192.168.100.168&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Deberíamos de ver una salida similar a la siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
PING 192.168.100.168 (192.168.100.168) 56(84) bytes of data.&lt;br /&gt;
64 bytes from 192.168.100.168: icmp_seq=1 ttl=64 time=0.397 ms&lt;br /&gt;
64 bytes from 192.168.100.168: icmp_seq=2 ttl=64 time=0.409 ms&lt;br /&gt;
64 bytes from 192.168.100.168: icmp_seq=3 ttl=64 time=0.321 ms&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Si hubiere algún problema de conectividad la salida sería de este tipo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
PING 192.168.100.168 (192.168.100.168) 56(84) bytes of data.&lt;br /&gt;
From 192.168.100.1 icmp_seq=1 Destination Host Unreachable&lt;br /&gt;
From 192.168.100.1 icmp_seq=2 Destination Host Unreachable&lt;br /&gt;
From 192.168.100.1 icmp_seq=3 Destination Host Unreachable&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En dicho caso, puedes forzar la obtención de una dirección IP con la orden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo dhclient ens3&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Esto quiere decir que la configuración de red es incorrecta, o quizás que la dirección IP de tu máquina virtual no es 192.168.100.168 :-).&lt;br /&gt;
&lt;br /&gt;
Dispones de más información suplementaria sobre la [[configuración de red en libvirt]].&lt;br /&gt;
&lt;br /&gt;
= Paso 6: Clonado de máquinas virtuales =&lt;br /&gt;
&lt;br /&gt;
Vamos a reutilizar la configuración y la máquina virtual creada, para crear varias iguales. Empecemos:&lt;br /&gt;
&lt;br /&gt;
# Apagamos la máquina virtual si la tenemos encendida, para que nos permita hacer un clonado. ''Máquina virtual --&amp;gt; Apagar --&amp;gt; Apagar''&lt;br /&gt;
# En la ventana principal, pulsar botón derecho encima de la máquina virtual que queramos clonar, y pulsar ''Clonar ...''&lt;br /&gt;
# En la ventana que nos aparece, por defecto seleccionará la misma red y creará una MAC diferente para la nueva máquina y clonará la imagen de ubuntu que usamos de almacenamiento. Le damos un nuevo nombre a nuestra máquina, y pulsamos en ''Clonar''.&lt;br /&gt;
# Repetimos este paso hasta que tengamos toda las máquinas virtuales deseadas, en nuestro caso, solo crearemos una para probar los detalles de red.&lt;br /&gt;
&lt;br /&gt;
Ahora arrancaremos la máquina original y la clonada, y vamos a comprobar que ambas están en la misma red y que pueden verse entre ellas. Como comentamos en el paso anterior, comprobaremos la IP de la máquina virtual original y de la clonada, y haremos ping desde dentro de las máquinas para comprobar que se ven.&lt;br /&gt;
&lt;br /&gt;
Ejemplo:&lt;br /&gt;
&lt;br /&gt;
* Máquina original tiene IP 192.168.100.168&lt;br /&gt;
* Máquina clonada tiene IP 192.168.100.169&lt;br /&gt;
* Desde la máquina original haremos un ping 192.168.100.169&lt;br /&gt;
* Desde la máquina clonada haremos un ping 192.168.100.168&lt;br /&gt;
* Desde ambas máquinas, comprobaremos que la puerta de enlace es la misma, haciendo un ''ip route''.&lt;br /&gt;
* Desde la máquina host, deberíamos de obtener ping hacía las dos máquinas&lt;br /&gt;
&lt;br /&gt;
= Paso 7: Instantáneas de máquinas virtuales =&lt;br /&gt;
&lt;br /&gt;
Las instantáneas nos permiten almacenar una captura del estado de la ejecución de una máquina virtual en un cierto instante tiempo que podremos restaurar cuando sea necesario. Las instantáneas te serán útiles si tienes trabajo a medio hacer en la máquina virtual, de manera que quieras guardar lo que has hecho para restaurarlo posteriormente.&lt;br /&gt;
&lt;br /&gt;
Para crear una instantánea, accedemos a la máquina virtual en ejecución y desplegamos el menú ''Vista'' y pinchamos sobre ''Capturas de Pantalla'' (Snapshot). Después pulsamos en el botón ''+'' que aparece abajo a la izquierda, indicamos el nombre de la instantánea y le damos a ''Finalizar'.&lt;br /&gt;
&lt;br /&gt;
La creación de instantáneas toma algo de tiempo, sé paciente. Puedes almacenar tantas instantáneas como quieras. El nombre ''Captura de pantalla'' es una traducción poco afortunada del inglés ''snapshot'' que se refiere al término ''instantánea''.&lt;br /&gt;
&lt;br /&gt;
= Paso 8: Instalación Manual de SO en VVM =&lt;br /&gt;
&lt;br /&gt;
1) Ubuntu net install (ubuntu minimalCD):&lt;br /&gt;
	64bit 18.04&lt;br /&gt;
&lt;br /&gt;
2) Creamos una nueva máquina virtual:&lt;br /&gt;
	(medio de instalación local (imagen ISO o CDROM))&lt;br /&gt;
&lt;br /&gt;
3) Install&lt;br /&gt;
&lt;br /&gt;
4) Idioma -&amp;gt; Spanish&lt;br /&gt;
&lt;br /&gt;
5) Teclado: DETECT? NO -&amp;gt; Spanish&lt;br /&gt;
	(Dvorak es similar a la máquina de escribir inglesa) -&amp;gt; NO&lt;br /&gt;
&lt;br /&gt;
6) Escoger réplica ubuntu: en blanco y continuamos&lt;br /&gt;
&lt;br /&gt;
7) Nombre de usuario: MARINARF&lt;br /&gt;
&lt;br /&gt;
8) Nombre para la cuenta: marinarf&lt;br /&gt;
&lt;br /&gt;
9) Contraseña: qwerty123&lt;br /&gt;
&lt;br /&gt;
10) Configurar el reloj: NO, continuar y marcar Península&lt;br /&gt;
&lt;br /&gt;
11) Método de particionado: Guiado -&amp;gt; utilizar todo el disco&lt;br /&gt;
&lt;br /&gt;
12) Sí&lt;br /&gt;
&lt;br /&gt;
13) Administrar actualizaciones: SIN ACTUALIZACIONES AUTOMÁTICAS&lt;br /&gt;
&lt;br /&gt;
14) Programas a instalar: Lotes de paquetes de software &lt;br /&gt;
	(Si marcas alguno, tarda más en instalar)&lt;br /&gt;
&lt;br /&gt;
15) GRUB: Sí&lt;br /&gt;
&lt;br /&gt;
16) Hora UTC: Sí&lt;br /&gt;
&lt;br /&gt;
      FIN&lt;br /&gt;
&lt;br /&gt;
_____________________________________________________________________________________&lt;br /&gt;
&lt;br /&gt;
 ·) INSTALACIÓN DE WINDOWS:&lt;br /&gt;
&lt;br /&gt;
&amp;gt; Versión de evaluación de Windows: windows 2016 evaluation &lt;br /&gt;
&lt;br /&gt;
&amp;gt; hhtps://dennisnotes.com/note/20180614-ubuntu-18 ...  (libvirt install windows)&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
 ·) EXTRAS:&lt;br /&gt;
&lt;br /&gt;
· Nas: Network Attack Story = smart&lt;br /&gt;
&lt;br /&gt;
· Carpeta temporal rutkit seguir en el sistema sin que lo sepa el dueño = Peligro&lt;br /&gt;
     - Si quitamos lo temporal = más seguridad&lt;/div&gt;</summary>
		<author><name>Marramfer12</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Virtualizaci%C3%B3n_con_libvirt&amp;diff=4531</id>
		<title>Virtualización con libvirt</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Virtualizaci%C3%B3n_con_libvirt&amp;diff=4531"/>
				<updated>2019-11-06T15:48:13Z</updated>
		
		<summary type="html">&lt;p&gt;Marramfer12: Incluir pasos de instalación de Ubuntu Linux - Por Marina Ramiro&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Para la realización de esta práctica necesitará de una imagen de Ubuntu Cloud que descargaremos de https://cloud-images.ubuntu.com/ y necesitaremos un&lt;br /&gt;
sistema anfitrión con Ubuntu 18.04.&lt;br /&gt;
&lt;br /&gt;
En esta práctica se empleará la imagen descargada de la web Ubuntu Cloud y se hará uso de la herramienta '''cloud-init''' para configurarla.&lt;br /&gt;
&lt;br /&gt;
A continuación, utilizaremos la imagen de Ubuntu ya configurada para ser importada al software de virtualización '''libvirt'''.&lt;br /&gt;
&lt;br /&gt;
= Paso 1: Descarga de la imagen Ubuntu Cloud =&lt;br /&gt;
&lt;br /&gt;
Entramos en https://cloud-images.ubuntu.com/ y descargamos la imagen de Ubuntu 18.04 LTS (Long Time Support).&lt;br /&gt;
&lt;br /&gt;
Puedes descargarla directamente con la orden ''wget'':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
wget https://cloud-images.ubuntu.com/bionic/current/bionic-server-cloudimg-amd64.img&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
si comenzó a descargar verás una salida similar a esta:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
-2019-08-06 12:26:26--  https://cloud-images.ubuntu.com/bionic/current/bionic-server-cloudimg-amd64.img&lt;br /&gt;
Resolviendo cloud-images.ubuntu.com (cloud-images.ubuntu.com)... 91.189.88.89, 2001:67c:1560:8001::8001&lt;br /&gt;
Conectando con cloud-images.ubuntu.com (cloud-images.ubuntu.com)[91.189.88.89]:443... conectado.&lt;br /&gt;
Petición HTTP enviada, esperando respuesta... 200 OK&lt;br /&gt;
Longitud: 343474176 (328M) [application/octet-stream]&lt;br /&gt;
Grabando a: “bionic-server-cloudimg-amd64.img”&lt;br /&gt;
&lt;br /&gt;
bionic-server-cloudimg-amd64.img.   0%[                                                              ]   2,21M   472KB/s    eta 14m 6s&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Espera hasta que la imagen esté descargada al 100%.&lt;br /&gt;
&lt;br /&gt;
= Paso 2: Instalación del paquete cloud-init =&lt;br /&gt;
&lt;br /&gt;
A continuación, tienes que instalar los [[paquetes]] que ofrecen la herramienta ''cloud-init'' para configurar la imagen de Ubuntu que has descargado, estos paquetes son:&lt;br /&gt;
&lt;br /&gt;
* '''cloud-init''': herramienta para configurar una imagen de Ubuntu cloud.&lt;br /&gt;
* '''cloud-image-utils''': esta herramienta es complementaria a cloud-init y sirve para modificar imágenes de Ubuntu cloud.&lt;br /&gt;
&lt;br /&gt;
Podemos instalar estos paquetes con la herramienta '''apt''' desde el intérprete de órdenes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt install cloud-init cloud-image-utils&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''En los ordenadores del aula de prácticas estos paquetes ya estarán preinstalados, con lo que puedes saltarte este paso''.&lt;br /&gt;
&lt;br /&gt;
= Paso 3: Configuración de la imagen de Ubuntu con cloud-init =&lt;br /&gt;
&lt;br /&gt;
Para configurar la imagen de Ubuntu cloud, hay que crear un fichero de configuración para la herramienta '''cloud-init'''. Este fichero empieza siempre por la línea #cloud-config y se estructura en formato [https://es.wikipedia.org/wiki/YAML yaml], el contenido del fichero ''cloud.cfg'' sería el siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#cloud-config&lt;br /&gt;
password: qwerty123&lt;br /&gt;
chpasswd: { expire: False }&lt;br /&gt;
ssh_pwauth: True&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
El ejemplo anterior muestra cómo configurar la imagen descargada para que disponga del usuario ''ubuntu'', y en este caso, la contraseña es ''querty123'', y que se pueda acceder a dicho usuario por medio de ''[[ssh]]''.&lt;br /&gt;
&lt;br /&gt;
Podemos configurar la imagen para que apliquen estos cambios con el siguiente comando:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cloud-localds media.img cloud.cfg&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Esta aplicación genera un fichero imagen que será empleado para configurar la imagen de Ubuntu cloud que has descargado.&lt;br /&gt;
&lt;br /&gt;
Dispones de más información suplementaria sobre como usar [[cloud-init]].&lt;br /&gt;
&lt;br /&gt;
= Paso 4: Instalación de libvirt e importación de imagenes =&lt;br /&gt;
&lt;br /&gt;
Para instalar libvirt lo hacemos con la herramienta '''apt''' desde el intérprete de órdenes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt install virt-manager&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''En los ordenadores del aula de prácticas este paquete ya estará preinstalado, con lo que puedes saltarte la orden anterior''.&lt;br /&gt;
&lt;br /&gt;
[[Archivo:virt-manager.png|thumb|Interfaz de virt-manager.]]&lt;br /&gt;
&lt;br /&gt;
Una vez instalada podemos lanzar virt-manager desde el intérprete de órdenes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
virt-manager&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para importar la imagen de Ubuntu cloud que hemos descargado a la máquina virtual, desde un intérprete de órdenes en el anfitrión (¡sin cerrar la ventana de virt-manager de la que ya disponemos!), vamos a copiar la imagen descargada en el paso 1 y la imagen generada en el paso 3 en el directorio de trabajo de virt-manager que se encuentra en ''/var/lib/libvirt/images''. Para ello, desde el intérprete de órdenes que hemos lanzado y desde el directorio donde tengamos las imágenes anteriormente generadas, invocamos las siguientes ordenes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo cp bionic-server-cloudimg-amd64.img /var/lib/libvirt/images&lt;br /&gt;
sudo cp media.img /var/lib/libvirt/images&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Con estas ordenes, estas copiando la imagen de Ubuntu cloud descargada y la imagen generada por cloud-localds en la carpeta''/var/lib/libvirt/images'' que contiene las imagenes de las que dispone la virt-manager.&lt;br /&gt;
&lt;br /&gt;
[[Archivo:virt-manager-paso4-5.png|thumb|Seleccionar imagen de Ubuntu descargada.]]&lt;br /&gt;
&lt;br /&gt;
Volvemos a la interfaz gráfica de virt-manager una vez copiadas las imágenes y creamos una nueva máquina virtual empleando dichas imágenes:&lt;br /&gt;
&lt;br /&gt;
# Desde la interfaz de virt-manager creamos una nueva Máquina Virtual ''(Archivo --&amp;gt; Nueva máquina virtual)''&lt;br /&gt;
# En la nueva ventana que se abre, seleccionamos ''Medio de instalación local'' y pulsamos ''Adelante''&lt;br /&gt;
# En ''Choose ISO or CDROM install media'' seleccionamos la imagen de ''media.img''' creada en el paso 3; y desmarcamos la casilla de ''Detección automática'' para seleccionar nuestro Sistema Operativo, en este caso, Ubuntu 18.04 LTS. Vemos que todo queda como en la imagen y pulsamos ''Adelante'' [[Archivo:virt-manager-paso4-3.png|thumb|Elegir imagen de configuración y SO.]]&lt;br /&gt;
# Seleccionamos la cantidad de memoria y de CPU que queremos, por defecto 2048 de Memoria y 1 CPU está bien.&lt;br /&gt;
# En el almacenamiento, vamos a seleccionar un almacenaje personalizado, y aquí sera donde seleccionemos la imagen de ubuntu descargada, en nuestro caso ''bionic-server-cloudimg-amd64.img'' y pulsamos ''Adelante'' &lt;br /&gt;
# En el último paso, podremos selecionar la red, por ahora dejaremos [[NAT]] por defecto y pulsamos '''Finalizar''' (Si nos pregunta si queremos crear una red [[NAT]] porque no está creada, le decimos que sí).&lt;br /&gt;
&lt;br /&gt;
Ya tenemos nuestra máquina virtual creada con nuestra configuración. Ahora vamos a probar que todo funciona correctamente. La máquina debería de estar arrancando y debería de aparecer el mensaje de login. [[Archivo:virt-manager-login.png|thumb|Login de ubuntu.]]&lt;br /&gt;
&lt;br /&gt;
Utilizamos como usuario ''ubuntu'', que es el usuario por defecto y como contraseña empleamos la que hayamos elegido en el paso 3. Con esto nos validamos en el sistema con éxito. [[Archivo:virt-manager-logged.png|thumb|Usuario ya validado, en el intérprete de ordenes]]&lt;br /&gt;
&lt;br /&gt;
Ya disponemos de un intérprete de ordenes en nuestro sistema operativo Ubuntu cloud que corre sobre nuestra máquina virtual.&lt;br /&gt;
&lt;br /&gt;
'''Nota''': El teclado de la imagen de Ubuntu cloud que corre en la máquina virtual está en inglés, puedes cambiarlo con la siguiente orden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo loadkeys es&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Paso 5: Configuración de la red en libvirt =&lt;br /&gt;
&lt;br /&gt;
Antes de ver los detalles de red, vamos a hacer una pequeña diferencia entre las dos ventanas que tenemos abiertas, virt-manager principal y virt-manager máquina de ubuntu ejecutándose. En la primera tendremos las configuraciones generales y en la segunda tendremos las configuraciones de una máquina virtual concreta, en nuestro caso, la configuración de la máquina virtual de ubuntu.&lt;br /&gt;
&lt;br /&gt;
Con esto, veremos dos formas de saber la IP de nuestra máquina virtual:&lt;br /&gt;
&lt;br /&gt;
# En la ventana de nuestra máquina virtual de ubuntu, vamos a cambiar la vista y ver los detalles de nuestra máquina. ''Vista --&amp;gt; Detalles''. Aquí tenemos toda la configuración de nuestra máquina, pero solo vamos a centrarnos en la Interfaz de red virtual, que es donde podremos ver cual es pa IP que tiene asiganada nuestra máquina y cual es la fuente de red que se está utilizando. [[Archivo:virt-manager-nic.png|thumb|Interfaz de red virtual.]]&lt;br /&gt;
# La otra opción es utilizando comandos, podemos utilizar ''ip address'' en la consola de nuestra máquina virtual.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ sudo ip address&lt;br /&gt;
1: lo: &amp;lt;LOOPBACK,UP,LOWER_UP&amp;gt; mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000&lt;br /&gt;
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00&lt;br /&gt;
    inet 127.0.0.1/8 scope host lo&lt;br /&gt;
       valid_lft forever preferred_lft forever&lt;br /&gt;
    inet6 ::1/128 scope host &lt;br /&gt;
       valid_lft forever preferred_lft forever&lt;br /&gt;
2: ens3: &amp;lt;BROADCAST,MULTICAST,UP,LOWER_UP&amp;gt; mtu 1500 qdisc pfifo_fast state UP group default qlen 1000&lt;br /&gt;
    link/ether 3d:f0:ee:49:aa:22 brd ff:ff:ff:ff:ff:ff&lt;br /&gt;
    inet 192.168.100.168/24 brd 192.168.2.255 scope global eth0&lt;br /&gt;
       valid_lft forever preferred_lft forever&lt;br /&gt;
    inet6 fe80::3e97:eff:fe39:dd20/64 scope link &lt;br /&gt;
       valid_lft forever preferred_lft forever&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Que nos permite comprobar que estamos utilizando la dirección IP 192.168.100.168.&lt;br /&gt;
&lt;br /&gt;
Si la interfaz no muestra una dirección IP, puedes forzar la obtención de una dirección IP desde la máquina virtual para la interfaz ''ens3'' con la orden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo dhclient ens3&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vamos a comprobar ahora desde un terminal en el anfitrión que alcanzamos a nuestra máquina virtual.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ping 192.168.100.168&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Deberíamos de ver una salida similar a la siguiente:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
PING 192.168.100.168 (192.168.100.168) 56(84) bytes of data.&lt;br /&gt;
64 bytes from 192.168.100.168: icmp_seq=1 ttl=64 time=0.397 ms&lt;br /&gt;
64 bytes from 192.168.100.168: icmp_seq=2 ttl=64 time=0.409 ms&lt;br /&gt;
64 bytes from 192.168.100.168: icmp_seq=3 ttl=64 time=0.321 ms&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Si hubiere algún problema de conectividad la salida sería de este tipo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
PING 192.168.100.168 (192.168.100.168) 56(84) bytes of data.&lt;br /&gt;
From 192.168.100.1 icmp_seq=1 Destination Host Unreachable&lt;br /&gt;
From 192.168.100.1 icmp_seq=2 Destination Host Unreachable&lt;br /&gt;
From 192.168.100.1 icmp_seq=3 Destination Host Unreachable&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En dicho caso, puedes forzar la obtención de una dirección IP con la orden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo dhclient ens3&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Esto quiere decir que la configuración de red es incorrecta, o quizás que la dirección IP de tu máquina virtual no es 192.168.100.168 :-).&lt;br /&gt;
&lt;br /&gt;
Dispones de más información suplementaria sobre la [[configuración de red en libvirt]].&lt;br /&gt;
&lt;br /&gt;
= Paso 6: Clonado de máquinas virtuales =&lt;br /&gt;
&lt;br /&gt;
Vamos a reutilizar la configuración y la máquina virtual creada, para crear varias iguales. Empecemos:&lt;br /&gt;
&lt;br /&gt;
# Apagamos la máquina virtual si la tenemos encendida, para que nos permita hacer un clonado. ''Máquina virtual --&amp;gt; Apagar --&amp;gt; Apagar''&lt;br /&gt;
# En la ventana principal, pulsar botón derecho encima de la máquina virtual que queramos clonar, y pulsar ''Clonar ...''&lt;br /&gt;
# En la ventana que nos aparece, por defecto seleccionará la misma red y creará una MAC diferente para la nueva máquina y clonará la imagen de ubuntu que usamos de almacenamiento. Le damos un nuevo nombre a nuestra máquina, y pulsamos en ''Clonar''.&lt;br /&gt;
# Repetimos este paso hasta que tengamos toda las máquinas virtuales deseadas, en nuestro caso, solo crearemos una para probar los detalles de red.&lt;br /&gt;
&lt;br /&gt;
Ahora arrancaremos la máquina original y la clonada, y vamos a comprobar que ambas están en la misma red y que pueden verse entre ellas. Como comentamos en el paso anterior, comprobaremos la IP de la máquina virtual original y de la clonada, y haremos ping desde dentro de las máquinas para comprobar que se ven.&lt;br /&gt;
&lt;br /&gt;
Ejemplo:&lt;br /&gt;
&lt;br /&gt;
* Máquina original tiene IP 192.168.100.168&lt;br /&gt;
* Máquina clonada tiene IP 192.168.100.169&lt;br /&gt;
* Desde la máquina original haremos un ping 192.168.100.169&lt;br /&gt;
* Desde la máquina clonada haremos un ping 192.168.100.168&lt;br /&gt;
* Desde ambas máquinas, comprobaremos que la puerta de enlace es la misma, haciendo un ''ip route''.&lt;br /&gt;
* Desde la máquina host, deberíamos de obtener ping hacía las dos máquinas&lt;br /&gt;
&lt;br /&gt;
= Paso 7: Instantáneas de máquinas virtuales =&lt;br /&gt;
&lt;br /&gt;
Las instantáneas nos permiten almacenar una captura del estado de la ejecución de una máquina virtual en un cierto instante tiempo que podremos restaurar cuando sea necesario. Las instantáneas te serán útiles si tienes trabajo a medio hacer en la máquina virtual, de manera que quieras guardar lo que has hecho para restaurarlo posteriormente.&lt;br /&gt;
&lt;br /&gt;
Para crear una instantánea, accedemos a la máquina virtual en ejecución y desplegamos el menú ''Vista'' y pinchamos sobre ''Capturas de Pantalla'' (Snapshot). Después pulsamos en el botón ''+'' que aparece abajo a la izquierda, indicamos el nombre de la instantánea y le damos a ''Finalizar'.&lt;br /&gt;
&lt;br /&gt;
La creación de instantáneas toma algo de tiempo, sé paciente. Puedes almacenar tantas instantáneas como quieras. El nombre ''Captura de pantalla'' es una traducción poco afortunada del inglés ''snapshot'' que se refiere al término ''instantánea''.&lt;br /&gt;
&lt;br /&gt;
= Paso 8: Instalación Manual de SO en VVM =&lt;br /&gt;
&lt;br /&gt;
1) Ubuntu net install (ubuntu minimalCD):&lt;br /&gt;
	64bit 18.04&lt;br /&gt;
&lt;br /&gt;
2) Creamos una nueva máquina virtual:&lt;br /&gt;
	(medio de instalación local (imagen ISO o CDROM))&lt;br /&gt;
&lt;br /&gt;
3) Install&lt;br /&gt;
&lt;br /&gt;
4) Idioma -&amp;gt; Spanish&lt;br /&gt;
&lt;br /&gt;
5) Teclado: DETECT? NO -&amp;gt; Spanish&lt;br /&gt;
	(Dvorak es similar a la máquina de escribir inglesa) -&amp;gt; NO&lt;br /&gt;
&lt;br /&gt;
6) Escoger réplica ubuntu: en blanco y continuamos&lt;br /&gt;
&lt;br /&gt;
7) Nombre de usuario: MARINARF&lt;br /&gt;
&lt;br /&gt;
8) Nombre para la cuenta: marinarf&lt;br /&gt;
&lt;br /&gt;
9) Contraseña: qwerty123&lt;br /&gt;
&lt;br /&gt;
10) Configurar el reloj: NO, continuar y marcar Península&lt;br /&gt;
&lt;br /&gt;
11) Método de particionado: Guiado -&amp;gt; utilizar todo el disco&lt;br /&gt;
&lt;br /&gt;
12) Sí&lt;br /&gt;
&lt;br /&gt;
13) Administrar actualizaciones: SIN ACTUALIZACIONES AUTOMÁTICAS&lt;br /&gt;
&lt;br /&gt;
14) Programas a instalar: Lotes de paquetes de software &lt;br /&gt;
	(Si marcas alguno, tarda más en instalar)&lt;br /&gt;
&lt;br /&gt;
15) GRUB: Sí&lt;br /&gt;
&lt;br /&gt;
16) Hora UTC: Sí&lt;br /&gt;
&lt;br /&gt;
_____________________________________________________________________________________&lt;br /&gt;
&lt;br /&gt;
 ·) INSTALACIÓN DE WINDOWS:&lt;br /&gt;
&lt;br /&gt;
&amp;gt; Versión de evaluación de Windows: windows 2016 evaluation &lt;br /&gt;
&lt;br /&gt;
&amp;gt; hhtps://dennisnotes.com/note/20180614-ubuntu-18 ...  (libvirt install windows)&lt;br /&gt;
&lt;br /&gt;
-------------- EXTRAS -----------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
· Nas: Network Attack Story = smart&lt;br /&gt;
&lt;br /&gt;
· Carpeta temporal rutkit seguir en el sistema sin que lo sepa el dueño = Peligro&lt;br /&gt;
     - Si quitamos lo temporal = más seguridad&lt;/div&gt;</summary>
		<author><name>Marramfer12</name></author>	</entry>

	<entry>
		<id>https://1984.lsi.us.es/wiki-ssoo/index.php?title=Hilos&amp;diff=4509</id>
		<title>Hilos</title>
		<link rel="alternate" type="text/html" href="https://1984.lsi.us.es/wiki-ssoo/index.php?title=Hilos&amp;diff=4509"/>
				<updated>2019-10-05T17:14:55Z</updated>
		
		<summary type="html">&lt;p&gt;Marramfer12: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Un hilo es una línea de ejecución de un proceso, el flujo de control de programa ( Thread ). Todo proceso parte inicialmente con un único hilo principal, aunque el sistema operativo ofrece llamadas al sistema que permiten al programador crear y destruir hilos. Por tanto, un proceso está compuesto por uno o más hilos.&lt;br /&gt;
&lt;br /&gt;
Los estados de un hilo son iguales a los de un proceso, por tanto, un hilo puede estar en estado preparado, bloqueado o activo en un cierto instante de tiempo. La conmutación entre hilos de un proceso es menos costosa que la conmutación de procesos, por tanto, el planificador(*) tiende a conmutar entre hilos de un proceso siempre que el proceso en su conjunto no haya agotado el tiempo máximo de asignación del procesador.&lt;br /&gt;
&lt;br /&gt;
(*) Planificador: Parte del SO que se encarga de decidir qué proceso pasa a estado activo en cada instante.&lt;br /&gt;
&lt;br /&gt;
Los hilos nos permiten aprovechar la existencia de más de un procesador en el sistema, puesto que podemos asignar un hilo a cada uno de los procesadores que haya disponibles. Si hay más de un procesador, dos hilos de un mismo proceso pueden estar en estado activo simultáneamente. Por tanto, la programación con hilos nos permite sacar partido de las arquitecturas de multiprocesador que predominan en la actualidad.&lt;br /&gt;
&lt;br /&gt;
Cuando se crea un hilo, el programador indica qué código ejecuta. Los hilos de un mismo proceso comparten el mismo espacio de memoria, por tanto, dos hilos del mismo proceso pueden compartir estructuras de datos,variables, código, archivos abiertos... Al acceder a los recursos del sistema de manera compartida, las tareas realizan un consumo de recursos inferior.&lt;br /&gt;
&lt;br /&gt;
Veamos un ejemplo diseñado para un solo procesador:&lt;br /&gt;
&lt;br /&gt;
[[Archivo:Uso_del_procesador_hilos.svg]]&lt;br /&gt;
&lt;br /&gt;
Con multiprocesamiento podemos ejecutar diferentes procesos a la vez. Si tenemos uno solo podemos desdoblarlo en hilos, usando técnicas de programación apoyadas en APIS (como POSIX threads). &lt;br /&gt;
&lt;br /&gt;
En caso de tener multi-hilo, se puede activar o desactivar desde la BIOS ( Basic Input/Output System ), ya que hay programas antiguos que no los soportarían.&lt;br /&gt;
&lt;br /&gt;
Para aumentar su eficiencia, un programa en ejecución debe crear tantos hilos como el doble del número de procesadores de los que disponga el sistema. Por ejemplo: 4 hilos para un programa ejecutado con 2 procesadores.  -&amp;gt; Número de hilos = Número de tareas realizadas &amp;quot;simultáneamente&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
Las principales ventajas del uso de hilos son:&lt;br /&gt;
&lt;br /&gt;
*'''Menor penalización''' en cuanto a conmutación. Ya que sólo se produce un salto en la ejecución de código del proceso, no interviene el planificador de procesos.&lt;br /&gt;
&lt;br /&gt;
*Dos hilos de un mismo proceso '''comparten memoria''' aprovechando mejor los recursos y eliminando los mecanismos de comunicación necesarios para soluciones implementadas en varios procesos.&lt;br /&gt;
&lt;br /&gt;
*Con un solo procesador es posible que una línea de proceso haga uso de una llamada al sistema que haga que el proceso pase a estado bloqueado. En este caso se puede llamar a otro hilo del mismo proceso en lugar de conmutar a otro proceso externo, ahorrando así tiempo de conmutación asociado a la ejecución del planificador de procesos.&lt;br /&gt;
&lt;br /&gt;
¿Tareas simultaneas? EXPLICACIÓN:&lt;br /&gt;
&lt;br /&gt;
Aunque un núcleo solo puede realizar una tarea a la vez, podemos usar los hilos para hacer creer al usuario ( y al ordenador ) que sí se puede hacer más de una tarea al mismo tiempo. En lugar de realizar una tarea al completo, se divide en porciones ( cada hilo se encarga de un aspecto concreto del programa ), de modo que se van alternando entre porciones de distintas tareas para que parezca que ambas se están ejecutando simultaneamente.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Ejemplo =&lt;br /&gt;
&lt;br /&gt;
El siguiente es un código en C de ejemplo en el que se muestra la creación de dos hilos. Se hace uso de la llamada al sistema ''sleep'' que hace que el proceso pase a estado bloqueado durante N segundos. Nótese que al compartir la variable ''a'', ambos hilos modifican su valor.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#include &amp;lt;pthread.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int a = 10;&lt;br /&gt;
&lt;br /&gt;
void *codigo_hilo1(void *arg)&lt;br /&gt;
{&lt;br /&gt;
	sleep(10);&lt;br /&gt;
	a = a - 2;&lt;br /&gt;
	printf(&amp;quot;Soy el hilo 1 y la variable a vale %d\n&amp;quot;, a);&lt;br /&gt;
	return NULL;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void *codigo_hilo2(void *arg)&lt;br /&gt;
{&lt;br /&gt;
	sleep(5);&lt;br /&gt;
	a++;&lt;br /&gt;
	printf(&amp;quot;Soy el hilo 2 y la variable a vale %d\n&amp;quot;, a);&lt;br /&gt;
	return NULL;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
	pthread_t hilo1, hilo2;&lt;br /&gt;
&lt;br /&gt;
	pthread_create(&amp;amp;hilo1, NULL, codigo_hilo1, NULL);&lt;br /&gt;
	pthread_create(&amp;amp;hilo2, NULL, codigo_hilo2, NULL);&lt;br /&gt;
&lt;br /&gt;
	pthread_join(hilo1, NULL);&lt;br /&gt;
	pthread_join(hilo2, NULL);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Este ejemplo se compila en un terminal escribiendo: '''gcc archivo.c  -lpthread'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Ejercicios_Procesos | Ejercicios]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
5.1.[[Planificación de procesos| La planificación de procesos]]&lt;/div&gt;</summary>
		<author><name>Marramfer12</name></author>	</entry>

	</feed>