https://es.opensuse.org/api.php?action=feedcontributions&user=Karlggest&feedformat=atomopenSUSE Wiki - Contribuciones del usuario [es]2024-03-28T13:58:56ZContribuciones del usuarioMediaWiki 1.27.7https://es.opensuse.org/index.php?title=SDB:Funtamentos_de_bash&diff=28396SDB:Funtamentos de bash2024-01-24T10:26:18Z<p>Karlggest: /* Notas */</p>
<hr />
<div>{{Barra de navegación para Conceptos}}<br />
<br />
{{Conocimiento básico<br />
|<br />
*[[Conceptos interfaz]]<br />
|<br />
*[https://es.wikipedia.org/wiki/Bash Bash]<br />
*[https://es.wikipedia.org/wiki/Shell_de_Unix Shell de Unix]<br />
*[https://es.wikipedia.org/wiki/Interfaz_de_l%C3%ADnea_de_comandos Interfaz de línea de comandos]<br />
}}<br />
== Introducción ==<br />
Aunque es posible usar un sistema operativo cualquiera con éxito sin usar jamás un terminal de comandos, lo cierto es que conocer su uso básico favorece el aprendizaje de algunos conceptos. El ámbito de este documento es orientar al usuario en el uso de comandos básicos que le servirán para dicho aprendizaje. Para aquellas personas usuarias interesadas en aprender un mejor uso del terminal se recomienda consultar obras más detalladas sobre Bash y en particular sobre su programación.<br />
<br />
== El intérprete ==<br />
El ''shell'' '''bash''', que es el que acompaña por defecto a la mayoría de distribuciones de Linux, es lo que se denomina ''un intérprete de comandos''. Eso significa que la persona usuaria interactúa con el sistema proporcionando comandos determinados que el intérprete procesa.<br />
<br />
Los escritorios gráficos de Linux proporcionan aplicaciones que permiten utilizar el intérprete de comandos desde la propia sesión gráfica. El escritorio Plasma proporciona [https://konsole.kde.org/ konsole] para esta labor[[#nota1|[1]]].<br />
<br />
El terminal en el que ejecutamos bash es una pantalla o ventana de texto. El intérprete proporciona un ''prompt''. Por defecto, en openSUSE está formado de la siguiente manera:<br />
<syntaxhighlight lang="bash"><br />
usuario@máquina:~><br />
</syntaxhighlight><br />
* ''usuario'' es tu nombre como usuaria.<br />
* ''@'' es un separador de forma similar a las direcciones de correo-e.<br />
* ''máquina'' es el nombre que le hayas asignado a tu máquina. Normalmente el sistema asigna un nombre más o menos arbitrario durante la instalación, pero puedes cambiárselo.<br />
* '':'' es otro separador.<br />
* ''~'' es una abreviatura para representar tu carpeta personal. Normalmente, a medida que te ''mueves'' por el árbol de directorios, esto se sustituye por tu ubicación actual.<br />
* ''>'' es otro separador.<br />
<br />
Cuando está visible este prompt en la última línea, significa que puedes introducir un comando. Por ejemplo, puedes ejectuar konsole o el terminal de tu escritorio gráfico, e introducir el siguiente comando para saber la ruta hasta donde estás:<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~> pwd<br />
/home/gecko<br />
gecko@Leap-PC:~> <br />
</syntaxhighlight><br />
Al ejecutar konsole se ejecutará automáticamente el intérprete de comandos que tengas configurado y que por defecto en openSUSE es Bash.<br />
<br />
{{Info|El uso del escritorio desarrollado por Microsoft para su sistema operativo Windows ha extendido el uso del término ''folder'' (carpeta) en lugar de ''directory'' (directorio) y en mi opinión está bien. Es una metáfora muy visual: ''guarda ese fichero en la carpeta del proyecto''. No obstante, en el mundo del terminal suele usarse ''directorio'' y de hecho la nemotecnia de los comandos empuja a ello: '''''c'''hange '''d'''irectory'' (cambiar directorio) para el comando cd, que permite justamente acceder a un directorio. No hay nada malo en usar ''carpeta'', pero la mayoría de textos que leas sobre el terminal emplearán ''directorio''. Consulta la sección [[#Carpetas|Carpetas]] para ver las diferencias.}}<br />
<br />
Los comandos del sistema tienen una página de manual que por desgracia no se ha traducido en años y que rara vez tendremos en castellano. Sin embargo, los comandos que ejecutaremos aquí son muy sencillos y pueden entenderse facilmente en inglés. Si deseas ver información del comando en castellano, puedes usar un buscador web con ''man comando español''. Por ejemplo, [https://duckduckgo.com/?q=man+pwd+espa%C3%B1ol&t=ffab&ia=web man pwd español].<br />
<br />
El prompt suele incluir, y en openSUSE es así por defecto, el nombre como usuaria del sistema. Pero esto no es así para la cuenta administradora (root), que se resalta en rojo, o puede que se haya establecido otra configuración. En cualquier caso, hay un comando para comprobar qué cuenta usuaria estás utilizando en ese momento: whoami, en inglés, literalmente, ¿quién soy?<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~> whoami<br />
gecko<br />
gecko@Leap-PC:~> <br />
</syntaxhighlight><br />
{{Info|En una sesión gráfica, el terminal en el que ejecutas bash, como konsole, se denomina ''terminal virtual''. Una ''verdadera'' sesión con el intérprete de comandos requiere hacerlo en modo texto y comenzará con el login, en el que se ha de introducir el nombre y la contraseña. En este documento se asume el uso de un terminal virtual, normalmente konsole.}}<br />
<br />
La sesión con el intérprete bash concluye al ejecutar el comando '''exit''' o bien al cerrar konsole.<br />
<br />
Es posible ejecutar distintos intérpretes de comandos dentro de una sesión con bash, incluso el propio bash. De hecho, eso es lo que sucede cuando se cambia de usuario con el comando '''su''' y el ''modificador'' '''-''':<br />
<pre><br />
gecko@Leap-PC:~> su -<br />
</pre><br />
<pre style="color: red"><br />
Leap-PC:~ #<br />
</pre><br />
<br />
El símbolo # es habitual en el prompt del administrador. Hay mucha documentación donde el verás que el símbolo $ corresponde a las cuentas usuarias regulares, y # al administrador, y se omite el resto del prompt, de esta forma:<br />
<syntaxhighlight lang="bash"><br />
$ whoami<br />
tux<br />
</syntaxhighlight><br />
<pre><br />
# whoami<br />
root<br />
</pre><br />
<br />
=== Procesos ===<br />
Aunque la idea de usar un intérprete de comandos es interactuar con el sistema mediante los susodichos comandos, en muchas ocasiones será interesante ejecutar un comando y dejar que se ejecute ''en segundo plano'' hasta que finalice. Por ejemplo, el comando cp que se verá en la sección [[#Copia con cp]] puede ejecuarse en segundo plano añadiendo el símbolo ampersand al final del comando:<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~> cp -r un_directorio_con_muchos_ficheros otra_carpeta &<br />
gecko@Leap-PC:~> <br />
</syntaxhighlight><br />
<br />
En lugar de mostrar el proceso del comando, inmediatamente devuelve el ''prompt'' para poder seguir introduciendo comandos. Es posible que a veces el comando en ejecución muestre de todas formas qué está haciendo, pero incluso así seguiremos teniendo el control del prompt para introducir otros comandos.<br />
<br />
En ocasiones podrá suceder que ejecutamos comandos largos sin el ampersand y nos vemos en la necesidad de interrumpirlo para ejecutar otros comandos distintos. Eso lo podemos hacer pulsando CTRL+C (la combinación general para interrumpir un comando).<br />
<br />
También es posible que querramos pasar a segundo plano el comando, lo que podemos hacer pulsando CTRL+Z. Eso normalmente detendrá la ejecución de ese comando y nos dará el control del ''prompt''. Para continuar con la ejecución del programa detenido, ejecutaremos el comando '''fg'''.<br />
<br />
'''kill''' es un comando que nos permite enviar señales a un comando que esté en ejecución. Esas señales pueden ser, por ejemplo, detenerse, o directamente matarse (interrumpirse por completo), y en general se emplea pasando la opción numérica correspondiente (9 para matar un proceso, 15 para detenerlo). '''killall''' permite matar procesos pero indicando el nombre del proceso, en lugar de su número de proceso (UID). ''ps'' es un comando que lista los procesos en ejecución.<br />
<br />
=== Uso de intérpretes de comandos en bash ===<br />
Hay muchos lenguajes de programación y aplicaciones específicas que proporcionan intérpretes de comandos: bases de datos, calculadoras, lenguajes interpretados... Si aun estás en la sesión con el administrador (prompt en rojo acabado en #), escribe '''exit''' para volver a la sesión de usuario y ejecuta la ''calculadora integrada'' con el comando '''bc''' (ejecuta '''man bc''' para aprender más sobre ella):<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~> bc<br />
bc 1.07.1<br />
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006, 2008, 2012-2017 Free Software Foundation, Inc.<br />
This is free software with ABSOLUTELY NO WARRANTY.<br />
For details type `warranty'. <br />
<br />
</syntaxhighlight><br />
'''bc''' no usa prompt y puedes escribir las expresiones a calcular directamente. Por ejemplo, para calcular la suma 5+3 basta con escribirlo y pulsar ''intro'':<br />
<syntaxhighlight lang="bash"><br />
5+3<br />
8<br />
</syntaxhighlight><br />
Para salir, basta con escribir '''quit''' (quitar el programa):<br />
<syntaxhighlight lang="bash"><br />
quit<br />
gecko@Leap-PC:~> <br />
</syntaxhighlight><br />
<br />
== Moviéndote por el árbol de directorios ==<br />
Cada directorio, salvo la raíz, contiene dos ficheros especiales, denominados '''.''' (punto) y '''..''' (dos puntos). El fichero '''.''' hace referencia al directorio actual y el fichero '''..''' hace referencia al directorio anterior o ''padre''.<br />
<br />
Para poder desplazarte por los directorios del sistema tienes el comando '''cd''' (change directory). Al comando le proporcionas el lugar al que quieres desplazarte, de la siguiente forma:<br />
* <syntaxhighlight lang="bash" inline>cd ruta_directorio</syntaxhighlight> te desplaza al directorio de nombre ruta_directorio<br />
* <syntaxhighlight lang="bash" inline>cd ..</syntaxhighlight> te desplaza al directorio padre del actual.<br />
* <syntaxhighlight lang="bash" inline>cd .</syntaxhighlight> no tiene efecto porque te desplaza al directorio actual.<br />
<br />
El signo / se emplea como separador entre directorios con el significado ''padre de''. En ''dir_padre''/''dir_hijo'', ''dir_hijo'' es un directorio que está ''dentro'' de ''dir_padre'', de forma que ''dir_padre'' es el directorio ''padre'' de ''dir_hijo''.<br />
<br />
Dado que el directorio raíz '''root''' no tiene padre, se representa únicamente con la barra espaciadora. De esta forma, para desplazarnos desde cualquier lugar hasta el directorio raíz, basta con ejecutar:<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~> cd /<br />
gecko@Leap-PC:/><br />
</syntaxhighlight><br />
<br />
Existen dos tipos de rutas a directorio: las rutas que incluyen toda la ruta desde el directorio raíz, llamadas '''rutas absolutas''' y las rutas que incluyen un origen en un directorio dado, llamadas '''rutas relativas'''. Normalmente las rutas relativas comenzarán en un directorio dentro de nuestro directorio actual.<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:/> cd /home/gecko<br />
gecko@Leap-PC:~> <br />
</syntaxhighlight><br />
<br />
El comando '''cd /home/gecko''' nos devuelve al directorio del usuario gecko. Por su parte<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~> cd Documentos<br />
gecko@Leap-PC:~/Documentos><br />
</syntaxhighlight><br />
<br />
Nos lleva al directorio ''Documentos'' dentro del directorio del usuario gecko. En ese punto, para volver al directorio del usuario tenemos tres opciones:<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> cd ..<br />
gecko@Leap-PC:~> <br />
</syntaxhighlight><br />
<syntaxhighlight lang="bash"><br />
<br />
O bien<br />
gecko@Leap-PC:~/Documentos> cd<br />
gecko@Leap-PC:~> <br />
</syntaxhighlight><br />
O bien<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> cd ~<br />
gecko@Leap-PC:~> <br />
</syntaxhighlight><br />
<br />
Usar cd sin argumentos te llevará siempre al directorio de usuario. Por su parte, la virgulilla es una abreviatura de bash y significa el directorio del usuario. Puede utilizarse de forma absoluta, formando rutas como ~/Documentos, o bien como atajo con el comando '''cd'''. Esto permite que, por ejemplo, para cambiar desde Documentos hasta Descargas, puedas ejecutar:<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> cd ~/Descargas<br />
gecko@Leap-PC:~/Descargas> <br />
</syntaxhighlight><br />
<br />
Bash tiene un montón de atajos y facilidades, y la instalación por defecto de openSUSE Leap añade muchos más. Por ejemplo, dentro de Descargas escribe: '''cd ../''' y pulsa la tecla tabulador (TAB) un par de veces:<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Descargas> cd ../<br />
</syntaxhighlight><br />
Pulsa el tabulador dos veces, y verás lo siguiente (puede haber otros directorios en tu sistema):<br />
<syntaxhighlight lang="bash"><br />
.cache/ .config/ Descargas/ Documentos/ Escritorio/ Imaxes/ .local/ logs/ Modelos/ Música/ Público/ Vídeos/<br />
</syntaxhighlight><br />
<br />
Al pulsar el tabulador, bash trata de autocompletar la ruta desde el texto que hayas escrito justo antes. ../ significa ''desde el directorio anterior'' y te proporcionará todas las opciones. Si escribes una '''D''' mayúscula[[#nota2|[2]]] y vuelves a pulsar el tabulador, te ofrecerá todas las opciones que comienzan con D (Documentos y Descargas, salvo que tengas algún directorio más en tu sistema que también empiece por D).<br />
<br />
Esta forma de ''autocompletar'' es muy cómoda, pero tiene sus cosas. Si pulsas una vez el tabulador, sólo funcionará si hay una sola opción disponible. Por ejemplo, <syntaxhighlight lang="bash" inline>cd ../Doc</syntaxhighlight> se autocompletará como <syntaxhighlight lang="bash" inline>cd ../Documentos/</syntaxhighlight>[[#nota3|[3]]]. Si no hay una única opción, ''volver'' a pulsarlo mostrará todas las opciones disponibles que coincidan con ese patrón. Si tienes un directorio llamado ''Proyectos'' dentro de ''Documentos'', puedes hacer lo siguiente para acceder a él: cd ~/Do<tabulador>Pr<tabuldador> (escribir cd, espacio, virguilulla, barra de división, Do, tabulador, Pr, tabulador. Lo cual irá autocompletando cd ~/Documentos/Proyectos. Una vez tienes todo el comando, basta con pulsar '''intro''' para ejecutar el comando.<br />
<br />
== Trabajando con ficheros ==<br />
Desde el punto de vista de Linux, cualquier cosa que no sea la red, es un fichero. Según el cometido de ese fichero, puede ser de diferentes tipos:<br />
* Ficheros regulares.<br />
** Ficheros de texto.<br />
** Ficheros binarios.<br />
** Directorios.<br />
* Enlaces blandos.<br />
* Enlaces duros.<br />
* Dispositivos.<br />
** de bloques.<br />
** de caracteres.<br />
<br />
=== Listar ficheros ===<br />
El comando usual para listar el contenido de un directorio, y ver así qué ficheros o directorios contiene, es '''ls'''.<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> ls<br />
script.sh<br />
</syntaxhighlight><br />
<br />
'''ls''' es un comando que admite un buen montón de argumentos. Los más habituales son:<br />
* l para visualizar un ''listado largo'', que incluye información de cada fichero o directorio tal como su propietario y permisos.<br />
* d para listar el directorio en lugar de su contenido. Es común usarlo con el argumento l.<br />
* a para listar los ficheros incluyendo los ficheros ocultos. En Linux, un fichero está oculto cuando su nombre comienza por . (punto).<br />
<br />
Para usar estas opciones, ls ha de ir seguida por el carácter guión '''-''', por ejemplo, para obtener un listado largo:<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> ls -l<br />
-rw-r--r-- 1 gecko users 31 Mar 1 17:51 script.sh<br />
</syntaxhighlight><br />
<br />
Aunque es posible poner cada opción con su propio guión, lo habitual es agruparlos. Así, los siguientes dos comandos tienen el mismo resultado:<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> ls -l -a<br />
total 12<br />
drwxr-xr-x 2 gecko users 22 Mar 1 18:29 .<br />
drwxr-xr-x 14 gecko users 4096 Mar 1 18:28 ..<br />
-rw------- 1 gecko users 105 Abr 14 2021 .directory<br />
-rw-r--r-- 1 gecko users 31 Mar 1 17:51 script.sh<br />
gecko@Leap-PC:~/Documentos> ls -la<br />
total 12<br />
drwxr-xr-x 2 gecko users 22 Mar 1 18:29 .<br />
drwxr-xr-x 14 gecko users 4096 Mar 1 18:28 ..<br />
-rw------- 1 gecko users 105 Abr 14 2021 .directory<br />
-rw-r--r-- 1 gecko users 31 Mar 1 17:51 script.sh<br />
</syntaxhighlight><br />
<br />
En el listado largo, cada fichero ocupa una fila. El primer grupo de caracteres empezará por d si es un directorio, - si es un fichero regular, b para un dispositivo de bloques, l para enlaces, b para dispositivos de bloques y c para dispositivos de caracteres.<br />
<br />
=== Ficheros regulares ===<br />
Los ficheros de texto contienen caracteres de texto, normalmente en código ASCII. En Linux son ampliamente usados, por ejemplo de forma preferente para los ficheros de configuración de casi cualquier elemento. Por su parte, los ficheros binarios tienen un contenido binario definido en función del tipo de fichero concreto. Los directorios son un tipo de fichero especial que permiten organizar los ficheros almacenados en el sistema de forma más adecuada para el uso por parte del usuario.<br />
<br />
Para que un fichero regular sea ejecutable ha de cumplir con dos requisitos: tener permiso de ejecución para el usuario que quiere ejecutarlo[[#nota4|[4]]], y contener código ejecutable de alguna clase. Por ejemplo, pwd es un fichero regular binario:<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> file /usr/bin/pwd<br />
/usr/bin/pwd: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=5d7ba8d4e2d3bda8835aaf230b257e55009d8f1a, for GNU/Linux 3.2.0, stripped<br />
</syntaxhighlight><br />
Podemos probar qué sucede si creamos un sencillo ''script''[[#nota5|[5]]], que son ficheros de texto que contienen código de algún lenguaje interpretado, incluido bash. Para ello usaremos el comando '''cat''' (que permite leer ficheros de texto) de una forma particular. Una vez que introduzcas cat > script y pulses intro, podrás introducir las líneas de una en una (pulsando intro en cada una, incluso en las vacías). Una vez acabado, después de "Hola mundo!", pulsa la combinación '''CTRL+D''':<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> cat > script.sh <br />
#!/bin/bash<br />
<br />
echo "Hola mundo!"<br />
gecko@Leap-PC:~/Documentos> file script.sh<br />
script.sh: Bourne-Again shell script, ASCII text executable<br />
</syntaxhighlight><br />
<br />
'''Bourne-Again shell''' es el nombre completo de Bash, y literalmente dice que es un fichero que contiene un script de bash escrito con texto ASCII y que es ejecutable.<br />
<br />
Para ejecutarlo no se requieren permisos de ejecución, basta con emplear algún intérprete de comandos adecuado, en este caso, bash.<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> bash script.sh <br />
Hola mundo<br />
gecko@Leap-PC:~/Documentos> sh script.sh<br />
Hola mundo<br />
gecko@Leap-PC:~/Documentos> <br />
</syntaxhighlight><br />
<br />
'''sh''' es otro atajo, en esta ocasión nombra al intérprete de comandos configurado en nuestro sistema. En la instalación por defecto de openSUSE será bash, pero hay muchos más.<br />
<br />
===Enlaces y accesos directos===<br />
====Enlaces blandos, simbólicos o accesos directos====<br />
Un enlace simbólico en realidad es un fichero que contiene la ubicación de otro fichero. En los sistemas gráficos suelen ser denominados ''accesos directos'' que es el nombre que popularizó Windows.<br />
<br />
En linux un enlace simbólico no tiene nada particular.<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> echo "fichero original" > texto.txt<br />
gecko@Leap-PC:~/Documentos> cat texto.txt <br />
fichero original<br />
gecko@Leap-PC:~/Documentos> ln -s texto.txt texto.txt.ln<br />
gecko@Leap-PC:~/Documentos> ls -l<br />
total 8<br />
-rw-r--r-- 1 karl users 17 Xan 24 11:11 texto.txt<br />
lrwxrwxrwx 1 karl users 9 Xan 24 11:11 texto.txt.ln -> texto.txt<br />
gecko@Leap-PC:~/Documentos> cat texto.txt.ln <br />
fichero original<br />
</syntaxhighlight><br />
Al hacer el listado con ln -l, en la primera columna la primera letra es "l", que nos indica que texto.txt.ln es un enlace simbólico. Al final de la línea se muestra el nombre del enlace simbólico y una flecha seguida del fichero (con su ubicación si es diferente) que al que se enlaza con esa entrada.<br />
<br />
Distintos escritorios pueden tener procedimientos ligeramente diferentes para crear enlaces simbólicos. Consulta la documentación del tuyo al respecto. Por ejemplo, para hacerlo con Dolphin (Plasma): [[SDB:Maneja_tus_ficheros_con_dolphin#Copiar.2C_mover_y_crear_enlaces_simb.C3.B3licos|Copiar, mover_y_crear_enlaces_simbólicos]].<br />
<br />
==== Enlaces duros ====<br />
Los enlaces '''duros''' han perdido popularidad con el auge de los escritorios gráficos. La idea es que las ''entradas de directorio'' son una forma de organizar los ficheros ''para los usuarios'' de la computadora. No existe ningún área de ningún disco que se delimite para formar una carpeta y guardar ficheros ''dentro'' de esa área. El sistema operativo utiliza distintos procedimientos para establecer dónde guarda cada fichero. Dicho fichero ni siquiera tiene por qué estar todo junto, sino que es posible que esté repartido en fragmentos a lo largo del disco. Cada tipo de sistema de ficheros, sea btrfs, ext4, xfs, etc., lo hace de una forma diferente.<br />
<br />
De cara al usuario, los ficheros se guardan formando una jerarquía que permite relacionar los ficheros entre sí. Cuando operas con una entrada de un directorio dado, el sistema la traduce a la ubicación real del fichero y hace aquello que se haya indicado. Puedes pensar que cada entrada de directorio correspondiente a un fichero es un enlace entre ese fichero y el lugar real donde ser almacena el fichero. Así, cuando ejecutas ''cat script.sh'' el sistema consulta la entrada de script.sh y recupera el fichero real para mostrar su contenido por pantalla. En ese sentido, ''todos'' los ficheros regulares ''son'' enlaces ''duros''.<br />
<br />
Recuerda que los enlaces simbólicos son ficheros que contienen una ubicación. En ese sentido ''acceso directo a fichero'' (o directorio) es un nombre un poco más adecuado. En cambio, la herramienta para crear enlaces duros es la misma: '''ln''', pero sin opciones. La sintaxis es la misma: ln fichero enlace<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> ln script.sh enlace_script.sh<br />
gecko@Leap-PC:~/Documentos> ls -l<br />
total 8<br />
lrwxrwxrwx 1 gecko users 9 Mar 1 18:40 acceso_directo_a_script.sh -> script.sh<br />
-rw-r--r-- 2 gecko users 31 Mar 1 17:51 enlace_script.sh<br />
-rw-r--r-- 2 gecko users 31 Mar 1 17:51 script.sh<br />
</syntaxhighlight><br />
<br />
Como puedes observar, ahora hay un fichero llamado ''enlace_script.sh'' que es aparentemente igual a ''script.sh''. Podríamos ejecutarlo con bash o leer su contenido con cat para comprobar que son iguales, aunque eso no diferencia un enlace duro de un enlace simbólico. Pero si te fijas en el listado obtenido con ls -l, verás que en la columna que va antes del nombre del usuario propietario del fichero, en lugar de un 1 como teníamos hasta ahora, hay un 2. Ese número representa el número de enlaces duros que tiene ese fichero: por defecto es 1, porque, como ya se ha dicho, ''todos'' los ficheros son en realidad enlaces duros de sí mismos.<br />
<br />
Un uso habitual de los enlaces de cualquier tipo es hacer accesible el fichero como si formara parte de otro directorio. El comando '''mkdir''' (''make directory'', crear directorio) permite crear directorios.<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> mkdir carpeta<br />
gecko@Leap-PC:~/Documentos> ln script.sh carpeta/script.sh<br />
gecko@Leap-PC:~/Documentos> ls -l<br />
total 8<br />
lrwxrwxrwx 1 gecko users 9 Mar 1 18:40 acceso_directo_a_script.sh -> script.sh<br />
drwxr-xr-x 2 gecko users 22 Mar 1 19:09 carpeta<br />
-rw-r--r-- 3 gecko users 31 Mar 1 17:51 enlace_script.sh<br />
-rw-r--r-- 3 gecko users 31 Mar 1 17:51 script.sh<br />
gecko@Leap-PC:~/Documentos> ls -l carpeta/<br />
total 4<br />
-rw-r--r-- 3 karl users 31 Mar 1 17:51 script.sh<br />
</syntaxhighlight><br />
<br />
Ahora los tres ficheros, script.sh, enlace_script y carpeta/script.sh tienen un 3 en el número de enlaces duros. Como cada uno ''apunta'' al contenido del fichero en sí, cada entrada puede ser movida, renombrada o incluso eliminada sin afectar al resto de enlaces.<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> rm script.sh<br />
gecko@Leap-PC:~/Documentos> ls -l<br />
total 4<br />
lrwxrwxrwx 1 karl users 9 Mar 1 18:40 acceso_directo_a_script.sh -> script.sh<br />
drwxr-xr-x 2 karl users 22 Mar 1 19:09 carpeta<br />
-rw-r--r-- 2 karl users 31 Mar 1 17:51 enlace_script.sh<br />
</syntaxhighlight><br />
<br />
Por un lado, al borrar ''script.sh'' el enlace simbólico vuelve a estar roto. Por otro lado, el 3 en las entradas de los enlaces duros ha sido sustituido con un 2, que es el número de enlaces duros que quedan para el contenido de script.sh. En la práctica, borrar un fichero consiste en tener 0 enlaces duros al mismo.<br />
<br />
Y por supuesto, al modificar el contenido a través de cualquier enlace, obtenemos el mismo resultado con el resto de enlaces duros.<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> echo "echo y más allá!" >> carpeta/script.sh<br />
gecko@Leap-PC:~/Documentos> bash enlace_script.sh<br />
Hola mundo<br />
y más allá!<br />
</syntaxhighlight><br />
<br />
Los enlaces duros no son apropiados para crear enlaces entre ficheros de distintos dispositivos ni entre directorios. Para estos casos, emplea enlaces simbólicos.<br />
<br />
=== Eliminar directorios ===<br />
Los directorios, además de accedidos con el comando cd y creados con el comando mkdir, pueden ser eliminados. Sin embargo, para el sistema no es lo mismo eliminar una entrada de directorio correspondiente a un directorio vacío, que una entrada de directorio correspondiente a un directorio que a su vez tiene ficheros o directorios en su interior.<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> mkdir dir1<br />
gecko@Leap-PC:~/Documentos> ls<br />
acceso_directo_a_script.sh carpeta dir1 enlace_script.sh<br />
gecko@Leap-PC:~/Documentos> rmdir dir1<br />
gecko@Leap-PC:~/Documentos> ls<br />
acceso_directo_a_script.sh carpeta enlace_script.sh<br />
gecko@Leap-PC:~/Documentos> rmdir carpeta<br />
rmdir: error al eliminar 'carpeta': Directorio no vacío<br />
</syntaxhighlight><br />
<br />
Para eliminar directorios que contengan ficheros o directorios, se emplea el comando '''rm -r'''<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> rm -r carpeta/<br />
gecko@Leap-PC:~/Documentos> ls<br />
acceso_directo_a_script.sh enlace_script.sh<br />
</syntaxhighlight><br />
<br />
Sin embargo, rm es un comando para ficheros. rm aplicado a un directorio vacío no funcionará sin el parámetro -r:<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> mkdir dir1<br />
gecko@Leap-PC:~/Documentos> rm dir1<br />
rm: no se puede borrar 'dir1': Es un directorio<br />
</syntaxhighlight><br />
<br />
Tradicionalmente el borrado de ficheros y directorios requería confirmación para cada directorio o fichero borrado. Para evitar tener que responder a la misma pregunta cada vez se solía utilizar el parámentro -f, siendo la forma más común de borrado recursivo '''rm -rf directorio'''. openSUSE por defecto no te pedirá confirmación salvo que cambies la configuración del comando, con lo que rm -r tendrá el mismo efecto que rm -rf.<br />
<br />
=== Copiar y mover ficheros ===<br />
En la sección [[#Enlaces duros]] hemos visto que un mismo fichero puede tener varios enlaces, de tal forma que al eliminar cualquiera de ellos aun permanecerían los demás, y por ende su contenido.<br />
<br />
''Copiar'' un fichero consiste en obtener dos enlaces a dos copias diferentes del mismo fichero. En algunos tipos de sistemas de ficheros modernos en realidad no se hará una copia del fichero hasta que se intente modificar uno de ellos, característica denominada '''cow''' (''copy on write'', copia al modificar). Usar cow o no es una cuestión que atañe al sistema operativo e indistinto desde el punto de vista del usuario. Por su parte, ''mover'' un fichero o directorio implica cambiar su ubicación hasta otro directorio.<br />
<br />
==== Copia con cp ====<br />
La forma más sencilla de obtener una copia de un fichero es con el comando '''cp'''. Su sintaxis es <syntaxhighlight lang="bash" inline>cp origen destino</syntaxhighlight>. No obstante, cp presenta similitudes con rm: no puede copiar directorios, vacíos o no. Para ocuparse de directorios, ha de usarse la opción '''-r'''.<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> echo "algún texto" > fichero1.txt<br />
gecko@Leap-PC:~/Documentos> cp fichero1.txt fichero2.txt<br />
gecko@Leap-PC:~/Documentos> cat fichero1.txt fichero2.txt<br />
algún texto<br />
algún texto<br />
gecko@Leap-PC:~/Documentos> mkdir dir2<br />
gecko@Leap-PC:~/Documentos> cp fichero2.txt dir2/<br />
gecko@Leap-PC:~/Documentos> ls dir2/<br />
fichero2.txt<br />
gecko@Leap-PC:~/Documentos> cp dir2 dir3<br />
cp: -r no especificado; omitiendo directorio 'dir2'<br />
gecko@Leap-PC:~/Documentos> cp dir2 dir3 -r<br />
gecko@Leap-PC:~/Documentos> ls<br />
acceso_directo_a_script.sh dir1 dir2 dir3 enlace_script.sh fichero1.txt fichero2.txt<br />
gecko@Leap-PC:~/Documentos> ls dir3/<br />
fichero2.txt<br />
</syntaxhighlight><br />
{{Info|Cuando autocompletas con el tabulador se incluirá el separador '''/'''. El comando cp no actúa direfente con o sin barra de dividir, pero otros comandos que se verán a continuación pueden proporcionar resultados imprevistos.}}<br />
{{Info|La mayoría de comandos aceptarán las opciones más o menos en cualquier lugar. Por ejemplo, <syntaxhighlight lang="bash" inline>ls -l dir1/ -a</syntaxhighlight> funcionará correctamente}}.<br />
<br />
==== Copia con rsync ====<br />
'''rsync''' es una versión ''moderna'' de cp, pero especializada en la copia a través de sistemas de ficheros en red e incluso mediante '''ssh'''. Tiene montones de opciones, muchas de las cuales dependen de qué se esté haciendo. Por ejemplo, -va hace una copia completa (recursiva, incluyendo enlaces, permisos...) mostrando lo que se está copiando. y -z habilita la compresión de lo que se copia (útil para copiar por la red).<br />
<br />
Una de las particularidades de rsync es su habilidad para hacer ''copias incrementales''. Una copia incremental consiste en que cada vez que copias dos cosas, sólo copias aquellas cosas que han cambiado desde la última vez.<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> rsync -va dir2/ dir1/<br />
sending incremental file list<br />
./<br />
fichero2.txt<br />
<br />
sent 143 bytes received 38 bytes 362.00 bytes/sec<br />
total size is 13 speedup is 0.07<br />
gecko@Leap-PC:~/Documentos> ls dir1<br />
fichero2.txt<br />
gecko@Leap-PC:~/Documentos> echo "otro fichero más" >> dir2/fichero3.txt<br />
gecko@Leap-PC:~/Documentos> rsync -va dir2/ dir1/<br />
sending incremental file list<br />
./<br />
fichero3.txt<br />
<br />
sent 173 bytes received 38 bytes 422.00 bytes/sec<br />
total size is 31 speedup is 0.15<br />
gecko@Leap-PC:~/Documentos> ls dir1<br />
fichero2.txt fichero3.txt<br />
</syntaxhighlight><br />
<br />
==== Copia con dd ====<br />
'''dd''' es una utilidad para copiar ficheros ''bit a bit'' y que se utiliza principalmente para hacer copias exactas de imágenes de discos (clones). Por ejemplo, podrías clonar tu partición /dev/sda2 en un fichero llamado sda2.img de la siguente forma: <syntaxhighlight lang="bash" inline>dd if=/dev/sda2 of=sda2.img</syntaxhighlight>.<br />
<br />
Usar ''dd'' para copiar tus ficheros de un lugar a otro es un poco como matar moscas con misiles. Funciona, pero en general será más sencillo usar ''cp'' o ''rsync''. Para hacer una copia de ''fichero2.txt'' podríamos usar el comando:<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> dd if=fichero2.txt of=fichero3.txt<br />
gecko@Leap-PC:~/Documentos> cat fichero3.txt <br />
algún texto<br />
</syntaxhighlight><br />
<br />
<br />
==== Copia con cat ====<br />
Muchas de las cosas que se pueden hacer en un terminal son en realidad ''efectos secundarios''. Por ejemplo, el comando ''touch'' permite actualizar la hora de modificación de un fichero, pero su efecto secundario es que si no existe el fichero, lo crea con la fecha de modificación actualizada. Así que es ampliamente usado para crear ficheros vacíos.<br />
<br />
''cat'' muestra por pantalla el contenido de un fichero. Si redirigimos esta salida a un nuevo fichero, existente o no, tendremos una copia:<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> cat fichero1.txt > nuevo_fichero1.txt<br />
gecko@Leap-PC:~/Documentos> cat nuevo_fichero1.txt <br />
algún texto<br />
</syntaxhighlight><br />
<br />
Podemos indicar un fichero, varios usando comodines, o una lista de ellos. La salida será mostrada en pantalla, la de cada fichero a continuación del anterior. Eso nos permite una forma sencilla de ''concatenar'' o ''unir'' ficheros:<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> cat fichero?.txt > nuevo_fichero_enésimo.txt<br />
gecko@Leap-PC:~/Documentos> ls<br />
acceso_directo_a_script.sh dir1 dir2 dir3 enlace_script.sh fichero1.txt fichero2.txt fichero3.txt nuevo_dir nuevo_fichero1.txt nuevo_fichero_enésimo.txt<br />
gecko@Leap-PC:~/Documentos> cat nuevo_fichero_enésimo.txt <br />
algún texto<br />
algún texto<br />
algún texto<br />
</syntaxhighlight><br />
<br />
==== Mover y renombrar con mv ====<br />
'''mv'' permite mover ficheros y directorios de una ubicación a otra.<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> mv nuevo_fichero_enésimo.txt dir1/<br />
gecko@Leap-PC:~/Documentos> ls <br />
acceso_directo_a_script.sh dir1 dir2 dir3 enlace_script.sh fichero1.txt fichero2.txt fichero3.txt nuevo_dir nuevo_fichero1.txt<br />
gecko@Leap-PC:~/Documentos> ls dir1/<br />
fichero2.txt fichero3.txt nuevo_fichero_enésimo.txt<br />
</syntaxhighlight><br />
<br />
Y también permite renombrar ficheros y directorios:<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> mv dir1 directorio1<br />
gecko@Leap-PC:~/Documentos> ls<br />
acceso_directo_a_script.sh dir2 dir3 directorio1 enlace_script.sh fichero1.txt fichero2.txt fichero3.txt nuevo_dir nuevo_fichero1.txt<br />
</syntaxhighlight><br />
<br />
Esto puede ser un tanto confuso para el usuario recién llegado (y para el no tan reciente). Si existe el destino, mv moverá el origen al interior del destino:<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> mv dir2 dir3<br />
gecko@Leap-PC:~/Documentos> ls dir3<br />
dir2 fichero2.txt<br />
</syntaxhighlight><br />
<br />
Si existe un directorio con el nombre indicado en el destino, mv moverá el origen al directorio destino. Pero si renombras un fichero con el nombre de un fichero existente, ¡lo sobrescribirá!!<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> mv enlace_script.sh fichero1.txt<br />
gecko@Leap-PC:~/Documentos> ls<br />
acceso_directo_a_script.sh dir3 directorio1 fichero1.txt fichero2.txt fichero3.txt nuevo_dir nuevo_fichero1.txt<br />
gecko@Leap-PC:~/Documentos> cat fichero1.txt<br />
#!/bin/bash<br />
<br />
echo "Hola mundo"<br />
echo y más allá!<br />
</syntaxhighlight><br />
<br />
== Carpetas ==<br />
En Linux se utiliza una aproximación interesante al concepto de carpeta. Algunos directorios contienen un fichero especial y oculto denominado ''.directory'', que permite establecer configuraciones generales al utilizarse con ciertas aplicaciones.<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> cat .directory<br />
[Dolphin]<br />
PreviewsShown=true<br />
SortOrder=1<br />
SortRole=modificationtime<br />
Timestamp=2022,3,1,19,58,21<br />
Version=4<br />
<br />
[Settings]<br />
HiddenFilesShown=false<br />
</syntaxhighlight><br />
<br />
En este fichero de texto de configuración, los corchetes se usan para delimitar apartados. El primer apartado corresponde al gestor de ficheros [[Dolphin]]. Por ejemplo, indica que se muestren las previsualizaciones de los ficheros que contenga y la forma de ordenación al mostrar el contenido. El apartado Settings establece que cada vez que se muestre su contenido no se incluyan los ficheros ocultos.<br />
<br />
== Comodines ==<br />
En Bash puedes usar un montón de comodines y abreviaturas. Por ejemplo, un asterisco '''*''' sustituye a cualquier conjunto de caracteres, mientras que un interrogante '''?''' sustituye a un caracter. Por ejemplo:<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> ls dir?<br />
dir1:<br />
<br />
dir2:<br />
fichero2.txt<br />
<br />
dir3:<br />
fichero2.txt<br />
gecko@Leap-PC:~/Documentos> cp * dir1<br />
cp: cannot stat 'acceso_directo_a_script.sh': Non hai tal ficheiro ou directorio<br />
cp: -r no especificado; omitiendo directorio 'dir1'<br />
cp: -r no especificado; omitiendo directorio 'dir2'<br />
cp: -r no especificado; omitiendo directorio 'dir3'<br />
gecko@Leap-PC:~/Documentos> ls dir1<br />
enlace_script.sh fichero1.txt fichero2.txt<br />
gecko@Leap-PC:~/Documentos> rm dir1/*<br />
gecko@Leap-PC:~/Documentos> ls dir1/<br />
gecko@Leap-PC:~/Documentos><br />
</syntaxhighlight><br />
<br />
== Conectores de comandos ==<br />
Una de las cosas que hacen tan útiles a los terminales de comando son las distintas formas de interconectar unos comandos con otros.<br />
<br />
Por ejemplo, puedes ejecutar un comando de forma condicionada a la ejecución de otro. Con && la condición es "si el comando ha sido válido" y con || la condición es "en cualquier caso". Por ejemplo:<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> mkdir nuevo_dir && cd nuevo_dir && touch hola.txt && cd ..<br />
gecko@Leap-PC:~/Documentos> ls nuevo_dir/<br />
hola.txt<br />
gecko@Leap-PC:~/Documentos> mkdir nuevo_dir || cd nuevo_dir && touch nuevo_hola.txt && cd ..<br />
mkdir: no se puede crear el directorio "nuevo_dir": El fichero ya existe<br />
gecko@Leap-PC:~/Documentos> ls nuevo_dir/<br />
hola.txt nuevo_hola.txt<br />
</syntaxhighlight><br />
El segundo mkdir falla en su ejecución porque ya existe un directorio con ese nombre. Como la condición es ''O'', la doble barra, los comandos siguientes se ejecutan. Si hubiera usado la condición ''Y'', el doble ampersand, la ejecución se habría detenido ahí.<br />
<br />
Otra forma de encadenar comandos es con tuberías. En la sección [[#Ficheros regulares]] se ha empleado una tubería ''>''. Esta tubería hace que el resultado de ejecutar un comando, en aquel caso ''cat'', sea introducido en el fichero que hay a su derecha. Literalmente, ''cat > fichero.txt'' hace que lo que vamos escribiendo en la pantalla sea enviado al fichero ''fichero.txt''. Menos usual es la redirección inversa ''<''. Esto hace que lo que está a la derecha sea enviado a lo que está a la izquierda.<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> cat < fichero1.txt <br />
algún texto<br />
gecko@Leap-PC:~/Documentos> echo "más cosas" >> fichero1.txt<br />
gecko@Leap-PC:~/Documentos> cat fichero1.txt <br />
algún texto<br />
más cosas<br />
</syntaxhighlight><br />
Si usas un sólo signo ''>'' el resultado del comando de la izquierda sobrescribirá el fichero. Si usas dos signos ''>>'', el resultado se añadirá al final.<br />
<br />
Otra tubería popular es la barra vertical '''|''', que permite que el resultado de ejecutar un comando con el resultado de otro comando. Por ejemplo, para buscar ficheros que contengan ''icher'' en su nombre, normalmente bastaría con ls *icher*, pero también podemos hacer eso como ejemplo:<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> ls *icher*<br />
fichero1.txt fichero2.txt<br />
gecko@Leap-PC:~/Documentos> ls | grep icher<br />
fichero1.txt<br />
fichero2.txt<br />
</syntaxhighlight><br />
<br />
'''grep''' por defecto resaltará la cadena (conjunto de letras y signos) buscada. Por sí mismo es un comando que permite buscar cadenas de texto en ficheros de texto. Por ejemplo, para buscar qué fichero contiene la palabra algún:<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> grep algún *<br />
grep: acceso_directo_a_script.sh: No existe tal fichero o directorio<br />
grep: dir1: Es un directorio<br />
grep: dir2: Es un directorio<br />
grep: dir3: Es un directorio<br />
fichero1.txt:algún texto<br />
fichero2.txt:algún texto<br />
grep: nuevo_dir: Es un directorio<br />
</syntaxhighlight><br />
<br />
Y con frecuencia se utiliza para hacer búsquedas en la salida de algún comando que proporcione un resultado largo. Por ejemplo, el comando '''ps''' lista los procesos en ejecución y es común listarlos con las opciones -aux. Para buscar el proceso konsole, podemos hacer lo siguiente:<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> <br />
ps aux | grep konsole<br />
gecko 2549 0.0 1.0 694400 85380 ? Sl 18:18 0:02 /usr/bin/konsole -session 10137156d2e4000164613515200000032360018_1646241240_34218<br />
gecko 16848 0.0 0.0 10256 2456 pts/2 S+ 19:05 0:00 grep --color=auto konsole<br />
</syntaxhighlight><br />
<br />
Los conectores no necesitan tener espacios en blanco alrededor, pero es buena idea para hacerlo más legible. En ese sentido, <syntaxhighlight lang="bash" inline>echo "hola" > fichero.txt</syntaxhighlight> es exactamente igual a <syntaxhighlight lang="bash" inline>echo "hola">fichero.txt</syntaxhighlight><br />
<br />
== Notas ==<br />
# <cite id="nota1">En cualquier sistema gráfico pueden encontrarse estas aplicaciones buscando ''terminal''.</cite><br />
# <cite id="nota2">Linux distingue mayúsculas de minúsculas y es buena idea asumir que cualquier intérprete de comandos hará lo propio, aunque hay excepciones como algunos lenguajes de bases de datos, por ejemplo. En Bash, es diferente '''nombre''' de '''Nombre''' o de '''NOMBRE'''.</cite><br />
# <cite id="nota3">Salvo en el caso de que existan otras carpetas que comiencen por Doc, como por ejemplo ''Documentanción''.</cite><br />
# <cite id="nota4">Para aprender sobre el uso de permisos de ficheros, consulta la guía [[SDB:Fundamentos del sistema de permisos|Fundamentos del sistema de permisos]] </cite><br />
# <cite id="nota5">Los scripts suelen traducirse literalmente como ficheros de guiones o en otras ocasiones como ficheros por lotes. Ambas expresiones hacen referencia al hecho de que ejecutan tareas de una en una.<br />
<br />
<br />
[[Category:SDB:Guía de principiantes]]<br />
[[Category:Conceptos|Uso básico del terminal]]</div>Karlggesthttps://es.opensuse.org/index.php?title=SDB:Funtamentos_de_bash&diff=28393SDB:Funtamentos de bash2024-01-24T10:23:30Z<p>Karlggest: </p>
<hr />
<div>{{Barra de navegación para Conceptos}}<br />
<br />
{{Conocimiento básico<br />
|<br />
*[[Conceptos interfaz]]<br />
|<br />
*[https://es.wikipedia.org/wiki/Bash Bash]<br />
*[https://es.wikipedia.org/wiki/Shell_de_Unix Shell de Unix]<br />
*[https://es.wikipedia.org/wiki/Interfaz_de_l%C3%ADnea_de_comandos Interfaz de línea de comandos]<br />
}}<br />
== Introducción ==<br />
Aunque es posible usar un sistema operativo cualquiera con éxito sin usar jamás un terminal de comandos, lo cierto es que conocer su uso básico favorece el aprendizaje de algunos conceptos. El ámbito de este documento es orientar al usuario en el uso de comandos básicos que le servirán para dicho aprendizaje. Para aquellas personas usuarias interesadas en aprender un mejor uso del terminal se recomienda consultar obras más detalladas sobre Bash y en particular sobre su programación.<br />
<br />
== El intérprete ==<br />
El ''shell'' '''bash''', que es el que acompaña por defecto a la mayoría de distribuciones de Linux, es lo que se denomina ''un intérprete de comandos''. Eso significa que la persona usuaria interactúa con el sistema proporcionando comandos determinados que el intérprete procesa.<br />
<br />
Los escritorios gráficos de Linux proporcionan aplicaciones que permiten utilizar el intérprete de comandos desde la propia sesión gráfica. El escritorio Plasma proporciona [https://konsole.kde.org/ konsole] para esta labor[[#nota1|[1]]].<br />
<br />
El terminal en el que ejecutamos bash es una pantalla o ventana de texto. El intérprete proporciona un ''prompt''. Por defecto, en openSUSE está formado de la siguiente manera:<br />
<syntaxhighlight lang="bash"><br />
usuario@máquina:~><br />
</syntaxhighlight><br />
* ''usuario'' es tu nombre como usuaria.<br />
* ''@'' es un separador de forma similar a las direcciones de correo-e.<br />
* ''máquina'' es el nombre que le hayas asignado a tu máquina. Normalmente el sistema asigna un nombre más o menos arbitrario durante la instalación, pero puedes cambiárselo.<br />
* '':'' es otro separador.<br />
* ''~'' es una abreviatura para representar tu carpeta personal. Normalmente, a medida que te ''mueves'' por el árbol de directorios, esto se sustituye por tu ubicación actual.<br />
* ''>'' es otro separador.<br />
<br />
Cuando está visible este prompt en la última línea, significa que puedes introducir un comando. Por ejemplo, puedes ejectuar konsole o el terminal de tu escritorio gráfico, e introducir el siguiente comando para saber la ruta hasta donde estás:<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~> pwd<br />
/home/gecko<br />
gecko@Leap-PC:~> <br />
</syntaxhighlight><br />
Al ejecutar konsole se ejecutará automáticamente el intérprete de comandos que tengas configurado y que por defecto en openSUSE es Bash.<br />
<br />
{{Info|El uso del escritorio desarrollado por Microsoft para su sistema operativo Windows ha extendido el uso del término ''folder'' (carpeta) en lugar de ''directory'' (directorio) y en mi opinión está bien. Es una metáfora muy visual: ''guarda ese fichero en la carpeta del proyecto''. No obstante, en el mundo del terminal suele usarse ''directorio'' y de hecho la nemotecnia de los comandos empuja a ello: '''''c'''hange '''d'''irectory'' (cambiar directorio) para el comando cd, que permite justamente acceder a un directorio. No hay nada malo en usar ''carpeta'', pero la mayoría de textos que leas sobre el terminal emplearán ''directorio''. Consulta la sección [[#Carpetas|Carpetas]] para ver las diferencias.}}<br />
<br />
Los comandos del sistema tienen una página de manual que por desgracia no se ha traducido en años y que rara vez tendremos en castellano. Sin embargo, los comandos que ejecutaremos aquí son muy sencillos y pueden entenderse facilmente en inglés. Si deseas ver información del comando en castellano, puedes usar un buscador web con ''man comando español''. Por ejemplo, [https://duckduckgo.com/?q=man+pwd+espa%C3%B1ol&t=ffab&ia=web man pwd español].<br />
<br />
El prompt suele incluir, y en openSUSE es así por defecto, el nombre como usuaria del sistema. Pero esto no es así para la cuenta administradora (root), que se resalta en rojo, o puede que se haya establecido otra configuración. En cualquier caso, hay un comando para comprobar qué cuenta usuaria estás utilizando en ese momento: whoami, en inglés, literalmente, ¿quién soy?<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~> whoami<br />
gecko<br />
gecko@Leap-PC:~> <br />
</syntaxhighlight><br />
{{Info|En una sesión gráfica, el terminal en el que ejecutas bash, como konsole, se denomina ''terminal virtual''. Una ''verdadera'' sesión con el intérprete de comandos requiere hacerlo en modo texto y comenzará con el login, en el que se ha de introducir el nombre y la contraseña. En este documento se asume el uso de un terminal virtual, normalmente konsole.}}<br />
<br />
La sesión con el intérprete bash concluye al ejecutar el comando '''exit''' o bien al cerrar konsole.<br />
<br />
Es posible ejecutar distintos intérpretes de comandos dentro de una sesión con bash, incluso el propio bash. De hecho, eso es lo que sucede cuando se cambia de usuario con el comando '''su''' y el ''modificador'' '''-''':<br />
<pre><br />
gecko@Leap-PC:~> su -<br />
</pre><br />
<pre style="color: red"><br />
Leap-PC:~ #<br />
</pre><br />
<br />
El símbolo # es habitual en el prompt del administrador. Hay mucha documentación donde el verás que el símbolo $ corresponde a las cuentas usuarias regulares, y # al administrador, y se omite el resto del prompt, de esta forma:<br />
<syntaxhighlight lang="bash"><br />
$ whoami<br />
tux<br />
</syntaxhighlight><br />
<pre><br />
# whoami<br />
root<br />
</pre><br />
<br />
=== Procesos ===<br />
Aunque la idea de usar un intérprete de comandos es interactuar con el sistema mediante los susodichos comandos, en muchas ocasiones será interesante ejecutar un comando y dejar que se ejecute ''en segundo plano'' hasta que finalice. Por ejemplo, el comando cp que se verá en la sección [[#Copia con cp]] puede ejecuarse en segundo plano añadiendo el símbolo ampersand al final del comando:<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~> cp -r un_directorio_con_muchos_ficheros otra_carpeta &<br />
gecko@Leap-PC:~> <br />
</syntaxhighlight><br />
<br />
En lugar de mostrar el proceso del comando, inmediatamente devuelve el ''prompt'' para poder seguir introduciendo comandos. Es posible que a veces el comando en ejecución muestre de todas formas qué está haciendo, pero incluso así seguiremos teniendo el control del prompt para introducir otros comandos.<br />
<br />
En ocasiones podrá suceder que ejecutamos comandos largos sin el ampersand y nos vemos en la necesidad de interrumpirlo para ejecutar otros comandos distintos. Eso lo podemos hacer pulsando CTRL+C (la combinación general para interrumpir un comando).<br />
<br />
También es posible que querramos pasar a segundo plano el comando, lo que podemos hacer pulsando CTRL+Z. Eso normalmente detendrá la ejecución de ese comando y nos dará el control del ''prompt''. Para continuar con la ejecución del programa detenido, ejecutaremos el comando '''fg'''.<br />
<br />
'''kill''' es un comando que nos permite enviar señales a un comando que esté en ejecución. Esas señales pueden ser, por ejemplo, detenerse, o directamente matarse (interrumpirse por completo), y en general se emplea pasando la opción numérica correspondiente (9 para matar un proceso, 15 para detenerlo). '''killall''' permite matar procesos pero indicando el nombre del proceso, en lugar de su número de proceso (UID). ''ps'' es un comando que lista los procesos en ejecución.<br />
<br />
=== Uso de intérpretes de comandos en bash ===<br />
Hay muchos lenguajes de programación y aplicaciones específicas que proporcionan intérpretes de comandos: bases de datos, calculadoras, lenguajes interpretados... Si aun estás en la sesión con el administrador (prompt en rojo acabado en #), escribe '''exit''' para volver a la sesión de usuario y ejecuta la ''calculadora integrada'' con el comando '''bc''' (ejecuta '''man bc''' para aprender más sobre ella):<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~> bc<br />
bc 1.07.1<br />
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006, 2008, 2012-2017 Free Software Foundation, Inc.<br />
This is free software with ABSOLUTELY NO WARRANTY.<br />
For details type `warranty'. <br />
<br />
</syntaxhighlight><br />
'''bc''' no usa prompt y puedes escribir las expresiones a calcular directamente. Por ejemplo, para calcular la suma 5+3 basta con escribirlo y pulsar ''intro'':<br />
<syntaxhighlight lang="bash"><br />
5+3<br />
8<br />
</syntaxhighlight><br />
Para salir, basta con escribir '''quit''' (quitar el programa):<br />
<syntaxhighlight lang="bash"><br />
quit<br />
gecko@Leap-PC:~> <br />
</syntaxhighlight><br />
<br />
== Moviéndote por el árbol de directorios ==<br />
Cada directorio, salvo la raíz, contiene dos ficheros especiales, denominados '''.''' (punto) y '''..''' (dos puntos). El fichero '''.''' hace referencia al directorio actual y el fichero '''..''' hace referencia al directorio anterior o ''padre''.<br />
<br />
Para poder desplazarte por los directorios del sistema tienes el comando '''cd''' (change directory). Al comando le proporcionas el lugar al que quieres desplazarte, de la siguiente forma:<br />
* <syntaxhighlight lang="bash" inline>cd ruta_directorio</syntaxhighlight> te desplaza al directorio de nombre ruta_directorio<br />
* <syntaxhighlight lang="bash" inline>cd ..</syntaxhighlight> te desplaza al directorio padre del actual.<br />
* <syntaxhighlight lang="bash" inline>cd .</syntaxhighlight> no tiene efecto porque te desplaza al directorio actual.<br />
<br />
El signo / se emplea como separador entre directorios con el significado ''padre de''. En ''dir_padre''/''dir_hijo'', ''dir_hijo'' es un directorio que está ''dentro'' de ''dir_padre'', de forma que ''dir_padre'' es el directorio ''padre'' de ''dir_hijo''.<br />
<br />
Dado que el directorio raíz '''root''' no tiene padre, se representa únicamente con la barra espaciadora. De esta forma, para desplazarnos desde cualquier lugar hasta el directorio raíz, basta con ejecutar:<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~> cd /<br />
gecko@Leap-PC:/><br />
</syntaxhighlight><br />
<br />
Existen dos tipos de rutas a directorio: las rutas que incluyen toda la ruta desde el directorio raíz, llamadas '''rutas absolutas''' y las rutas que incluyen un origen en un directorio dado, llamadas '''rutas relativas'''. Normalmente las rutas relativas comenzarán en un directorio dentro de nuestro directorio actual.<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:/> cd /home/gecko<br />
gecko@Leap-PC:~> <br />
</syntaxhighlight><br />
<br />
El comando '''cd /home/gecko''' nos devuelve al directorio del usuario gecko. Por su parte<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~> cd Documentos<br />
gecko@Leap-PC:~/Documentos><br />
</syntaxhighlight><br />
<br />
Nos lleva al directorio ''Documentos'' dentro del directorio del usuario gecko. En ese punto, para volver al directorio del usuario tenemos tres opciones:<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> cd ..<br />
gecko@Leap-PC:~> <br />
</syntaxhighlight><br />
<syntaxhighlight lang="bash"><br />
<br />
O bien<br />
gecko@Leap-PC:~/Documentos> cd<br />
gecko@Leap-PC:~> <br />
</syntaxhighlight><br />
O bien<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> cd ~<br />
gecko@Leap-PC:~> <br />
</syntaxhighlight><br />
<br />
Usar cd sin argumentos te llevará siempre al directorio de usuario. Por su parte, la virgulilla es una abreviatura de bash y significa el directorio del usuario. Puede utilizarse de forma absoluta, formando rutas como ~/Documentos, o bien como atajo con el comando '''cd'''. Esto permite que, por ejemplo, para cambiar desde Documentos hasta Descargas, puedas ejecutar:<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> cd ~/Descargas<br />
gecko@Leap-PC:~/Descargas> <br />
</syntaxhighlight><br />
<br />
Bash tiene un montón de atajos y facilidades, y la instalación por defecto de openSUSE Leap añade muchos más. Por ejemplo, dentro de Descargas escribe: '''cd ../''' y pulsa la tecla tabulador (TAB) un par de veces:<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Descargas> cd ../<br />
</syntaxhighlight><br />
Pulsa el tabulador dos veces, y verás lo siguiente (puede haber otros directorios en tu sistema):<br />
<syntaxhighlight lang="bash"><br />
.cache/ .config/ Descargas/ Documentos/ Escritorio/ Imaxes/ .local/ logs/ Modelos/ Música/ Público/ Vídeos/<br />
</syntaxhighlight><br />
<br />
Al pulsar el tabulador, bash trata de autocompletar la ruta desde el texto que hayas escrito justo antes. ../ significa ''desde el directorio anterior'' y te proporcionará todas las opciones. Si escribes una '''D''' mayúscula[[#nota2|[2]]] y vuelves a pulsar el tabulador, te ofrecerá todas las opciones que comienzan con D (Documentos y Descargas, salvo que tengas algún directorio más en tu sistema que también empiece por D).<br />
<br />
Esta forma de ''autocompletar'' es muy cómoda, pero tiene sus cosas. Si pulsas una vez el tabulador, sólo funcionará si hay una sola opción disponible. Por ejemplo, <syntaxhighlight lang="bash" inline>cd ../Doc</syntaxhighlight> se autocompletará como <syntaxhighlight lang="bash" inline>cd ../Documentos/</syntaxhighlight>[[#nota3|[3]]]. Si no hay una única opción, ''volver'' a pulsarlo mostrará todas las opciones disponibles que coincidan con ese patrón. Si tienes un directorio llamado ''Proyectos'' dentro de ''Documentos'', puedes hacer lo siguiente para acceder a él: cd ~/Do<tabulador>Pr<tabuldador> (escribir cd, espacio, virguilulla, barra de división, Do, tabulador, Pr, tabulador. Lo cual irá autocompletando cd ~/Documentos/Proyectos. Una vez tienes todo el comando, basta con pulsar '''intro''' para ejecutar el comando.<br />
<br />
== Trabajando con ficheros ==<br />
Desde el punto de vista de Linux, cualquier cosa que no sea la red, es un fichero. Según el cometido de ese fichero, puede ser de diferentes tipos:<br />
* Ficheros regulares.<br />
** Ficheros de texto.<br />
** Ficheros binarios.<br />
** Directorios.<br />
* Enlaces blandos.<br />
* Enlaces duros.<br />
* Dispositivos.<br />
** de bloques.<br />
** de caracteres.<br />
<br />
=== Listar ficheros ===<br />
El comando usual para listar el contenido de un directorio, y ver así qué ficheros o directorios contiene, es '''ls'''.<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> ls<br />
script.sh<br />
</syntaxhighlight><br />
<br />
'''ls''' es un comando que admite un buen montón de argumentos. Los más habituales son:<br />
* l para visualizar un ''listado largo'', que incluye información de cada fichero o directorio tal como su propietario y permisos.<br />
* d para listar el directorio en lugar de su contenido. Es común usarlo con el argumento l.<br />
* a para listar los ficheros incluyendo los ficheros ocultos. En Linux, un fichero está oculto cuando su nombre comienza por . (punto).<br />
<br />
Para usar estas opciones, ls ha de ir seguida por el carácter guión '''-''', por ejemplo, para obtener un listado largo:<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> ls -l<br />
-rw-r--r-- 1 gecko users 31 Mar 1 17:51 script.sh<br />
</syntaxhighlight><br />
<br />
Aunque es posible poner cada opción con su propio guión, lo habitual es agruparlos. Así, los siguientes dos comandos tienen el mismo resultado:<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> ls -l -a<br />
total 12<br />
drwxr-xr-x 2 gecko users 22 Mar 1 18:29 .<br />
drwxr-xr-x 14 gecko users 4096 Mar 1 18:28 ..<br />
-rw------- 1 gecko users 105 Abr 14 2021 .directory<br />
-rw-r--r-- 1 gecko users 31 Mar 1 17:51 script.sh<br />
gecko@Leap-PC:~/Documentos> ls -la<br />
total 12<br />
drwxr-xr-x 2 gecko users 22 Mar 1 18:29 .<br />
drwxr-xr-x 14 gecko users 4096 Mar 1 18:28 ..<br />
-rw------- 1 gecko users 105 Abr 14 2021 .directory<br />
-rw-r--r-- 1 gecko users 31 Mar 1 17:51 script.sh<br />
</syntaxhighlight><br />
<br />
En el listado largo, cada fichero ocupa una fila. El primer grupo de caracteres empezará por d si es un directorio, - si es un fichero regular, b para un dispositivo de bloques, l para enlaces, b para dispositivos de bloques y c para dispositivos de caracteres.<br />
<br />
=== Ficheros regulares ===<br />
Los ficheros de texto contienen caracteres de texto, normalmente en código ASCII. En Linux son ampliamente usados, por ejemplo de forma preferente para los ficheros de configuración de casi cualquier elemento. Por su parte, los ficheros binarios tienen un contenido binario definido en función del tipo de fichero concreto. Los directorios son un tipo de fichero especial que permiten organizar los ficheros almacenados en el sistema de forma más adecuada para el uso por parte del usuario.<br />
<br />
Para que un fichero regular sea ejecutable ha de cumplir con dos requisitos: tener permiso de ejecución para el usuario que quiere ejecutarlo[[#nota4|[4]]], y contener código ejecutable de alguna clase. Por ejemplo, pwd es un fichero regular binario:<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> file /usr/bin/pwd<br />
/usr/bin/pwd: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=5d7ba8d4e2d3bda8835aaf230b257e55009d8f1a, for GNU/Linux 3.2.0, stripped<br />
</syntaxhighlight><br />
Podemos probar qué sucede si creamos un sencillo ''script''[[#nota5|[5]]], que son ficheros de texto que contienen código de algún lenguaje interpretado, incluido bash. Para ello usaremos el comando '''cat''' (que permite leer ficheros de texto) de una forma particular. Una vez que introduzcas cat > script y pulses intro, podrás introducir las líneas de una en una (pulsando intro en cada una, incluso en las vacías). Una vez acabado, después de "Hola mundo!", pulsa la combinación '''CTRL+D''':<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> cat > script.sh <br />
#!/bin/bash<br />
<br />
echo "Hola mundo!"<br />
gecko@Leap-PC:~/Documentos> file script.sh<br />
script.sh: Bourne-Again shell script, ASCII text executable<br />
</syntaxhighlight><br />
<br />
'''Bourne-Again shell''' es el nombre completo de Bash, y literalmente dice que es un fichero que contiene un script de bash escrito con texto ASCII y que es ejecutable.<br />
<br />
Para ejecutarlo no se requieren permisos de ejecución, basta con emplear algún intérprete de comandos adecuado, en este caso, bash.<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> bash script.sh <br />
Hola mundo<br />
gecko@Leap-PC:~/Documentos> sh script.sh<br />
Hola mundo<br />
gecko@Leap-PC:~/Documentos> <br />
</syntaxhighlight><br />
<br />
'''sh''' es otro atajo, en esta ocasión nombra al intérprete de comandos configurado en nuestro sistema. En la instalación por defecto de openSUSE será bash, pero hay muchos más.<br />
<br />
===Enlaces y accesos directos===<br />
====Enlaces blandos, simbólicos o accesos directos====<br />
Un enlace simbólico en realidad es un fichero que contiene la ubicación de otro fichero. En los sistemas gráficos suelen ser denominados ''accesos directos'' que es el nombre que popularizó Windows.<br />
<br />
En linux un enlace simbólico no tiene nada particular.<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> echo "fichero original" > texto.txt<br />
gecko@Leap-PC:~/Documentos> cat texto.txt <br />
fichero original<br />
gecko@Leap-PC:~/Documentos> ln -s texto.txt texto.txt.ln<br />
gecko@Leap-PC:~/Documentos> ls -l<br />
total 8<br />
-rw-r--r-- 1 karl users 17 Xan 24 11:11 texto.txt<br />
lrwxrwxrwx 1 karl users 9 Xan 24 11:11 texto.txt.ln -> texto.txt<br />
gecko@Leap-PC:~/Documentos> cat texto.txt.ln <br />
fichero original<br />
</syntaxhighlight><br />
Al hacer el listado con ln -l, en la primera columna la primera letra es "l", que nos indica que texto.txt.ln es un enlace simbólico. Al final de la línea se muestra el nombre del enlace simbólico y una flecha seguida del fichero (con su ubicación si es diferente) que al que se enlaza con esa entrada.<br />
<br />
Distintos escritorios pueden tener procedimientos ligeramente diferentes para crear enlaces simbólicos. Consulta la documentación del tuyo al respecto. Por ejemplo, para hacerlo con Dolphin (Plasma): [[SDB:Maneja_tus_ficheros_con_dolphin#Copiar.2C_mover_y_crear_enlaces_simb.C3.B3licos|Copiar, mover_y_crear_enlaces_simbólicos]].<br />
<br />
==== Enlaces duros ====<br />
Los enlaces '''duros''' han perdido popularidad con el auge de los escritorios gráficos. La idea es que las ''entradas de directorio'' son una forma de organizar los ficheros ''para los usuarios'' de la computadora. No existe ningún área de ningún disco que se delimite para formar una carpeta y guardar ficheros ''dentro'' de esa área. El sistema operativo utiliza distintos procedimientos para establecer dónde guarda cada fichero. Dicho fichero ni siquiera tiene por qué estar todo junto, sino que es posible que esté repartido en fragmentos a lo largo del disco. Cada tipo de sistema de ficheros, sea btrfs, ext4, xfs, etc., lo hace de una forma diferente.<br />
<br />
De cara al usuario, los ficheros se guardan formando una jerarquía que permite relacionar los ficheros entre sí. Cuando operas con una entrada de un directorio dado, el sistema la traduce a la ubicación real del fichero y hace aquello que se haya indicado. Puedes pensar que cada entrada de directorio correspondiente a un fichero es un enlace entre ese fichero y el lugar real donde ser almacena el fichero. Así, cuando ejecutas ''cat script.sh'' el sistema consulta la entrada de script.sh y recupera el fichero real para mostrar su contenido por pantalla. En ese sentido, ''todos'' los ficheros regulares ''son'' enlaces ''duros''.<br />
<br />
Recuerda que los enlaces simbólicos son ficheros que contienen una ubicación. En ese sentido ''acceso directo a fichero'' (o directorio) es un nombre un poco más adecuado. En cambio, la herramienta para crear enlaces duros es la misma: '''ln''', pero sin opciones. La sintaxis es la misma: ln fichero enlace<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> ln script.sh enlace_script.sh<br />
gecko@Leap-PC:~/Documentos> ls -l<br />
total 8<br />
lrwxrwxrwx 1 gecko users 9 Mar 1 18:40 acceso_directo_a_script.sh -> script.sh<br />
-rw-r--r-- 2 gecko users 31 Mar 1 17:51 enlace_script.sh<br />
-rw-r--r-- 2 gecko users 31 Mar 1 17:51 script.sh<br />
</syntaxhighlight><br />
<br />
Como puedes observar, ahora hay un fichero llamado ''enlace_script.sh'' que es aparentemente igual a ''script.sh''. Podríamos ejecutarlo con bash o leer su contenido con cat para comprobar que son iguales, aunque eso no diferencia un enlace duro de un enlace simbólico. Pero si te fijas en el listado obtenido con ls -l, verás que en la columna que va antes del nombre del usuario propietario del fichero, en lugar de un 1 como teníamos hasta ahora, hay un 2. Ese número representa el número de enlaces duros que tiene ese fichero: por defecto es 1, porque, como ya se ha dicho, ''todos'' los ficheros son en realidad enlaces duros de sí mismos.<br />
<br />
Un uso habitual de los enlaces de cualquier tipo es hacer accesible el fichero como si formara parte de otro directorio. El comando '''mkdir''' (''make directory'', crear directorio) permite crear directorios.<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> mkdir carpeta<br />
gecko@Leap-PC:~/Documentos> ln script.sh carpeta/script.sh<br />
gecko@Leap-PC:~/Documentos> ls -l<br />
total 8<br />
lrwxrwxrwx 1 gecko users 9 Mar 1 18:40 acceso_directo_a_script.sh -> script.sh<br />
drwxr-xr-x 2 gecko users 22 Mar 1 19:09 carpeta<br />
-rw-r--r-- 3 gecko users 31 Mar 1 17:51 enlace_script.sh<br />
-rw-r--r-- 3 gecko users 31 Mar 1 17:51 script.sh<br />
gecko@Leap-PC:~/Documentos> ls -l carpeta/<br />
total 4<br />
-rw-r--r-- 3 karl users 31 Mar 1 17:51 script.sh<br />
</syntaxhighlight><br />
<br />
Ahora los tres ficheros, script.sh, enlace_script y carpeta/script.sh tienen un 3 en el número de enlaces duros. Como cada uno ''apunta'' al contenido del fichero en sí, cada entrada puede ser movida, renombrada o incluso eliminada sin afectar al resto de enlaces.<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> rm script.sh<br />
gecko@Leap-PC:~/Documentos> ls -l<br />
total 4<br />
lrwxrwxrwx 1 karl users 9 Mar 1 18:40 acceso_directo_a_script.sh -> script.sh<br />
drwxr-xr-x 2 karl users 22 Mar 1 19:09 carpeta<br />
-rw-r--r-- 2 karl users 31 Mar 1 17:51 enlace_script.sh<br />
</syntaxhighlight><br />
<br />
Por un lado, al borrar ''script.sh'' el enlace simbólico vuelve a estar roto. Por otro lado, el 3 en las entradas de los enlaces duros ha sido sustituido con un 2, que es el número de enlaces duros que quedan para el contenido de script.sh. En la práctica, borrar un fichero consiste en tener 0 enlaces duros al mismo.<br />
<br />
Y por supuesto, al modificar el contenido a través de cualquier enlace, obtenemos el mismo resultado con el resto de enlaces duros.<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> echo "echo y más allá!" >> carpeta/script.sh<br />
gecko@Leap-PC:~/Documentos> bash enlace_script.sh<br />
Hola mundo<br />
y más allá!<br />
</syntaxhighlight><br />
<br />
Los enlaces duros no son apropiados para crear enlaces entre ficheros de distintos dispositivos ni entre directorios. Para estos casos, emplea enlaces simbólicos.<br />
<br />
=== Eliminar directorios ===<br />
Los directorios, además de accedidos con el comando cd y creados con el comando mkdir, pueden ser eliminados. Sin embargo, para el sistema no es lo mismo eliminar una entrada de directorio correspondiente a un directorio vacío, que una entrada de directorio correspondiente a un directorio que a su vez tiene ficheros o directorios en su interior.<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> mkdir dir1<br />
gecko@Leap-PC:~/Documentos> ls<br />
acceso_directo_a_script.sh carpeta dir1 enlace_script.sh<br />
gecko@Leap-PC:~/Documentos> rmdir dir1<br />
gecko@Leap-PC:~/Documentos> ls<br />
acceso_directo_a_script.sh carpeta enlace_script.sh<br />
gecko@Leap-PC:~/Documentos> rmdir carpeta<br />
rmdir: error al eliminar 'carpeta': Directorio no vacío<br />
</syntaxhighlight><br />
<br />
Para eliminar directorios que contengan ficheros o directorios, se emplea el comando '''rm -r'''<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> rm -r carpeta/<br />
gecko@Leap-PC:~/Documentos> ls<br />
acceso_directo_a_script.sh enlace_script.sh<br />
</syntaxhighlight><br />
<br />
Sin embargo, rm es un comando para ficheros. rm aplicado a un directorio vacío no funcionará sin el parámetro -r:<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> mkdir dir1<br />
gecko@Leap-PC:~/Documentos> rm dir1<br />
rm: no se puede borrar 'dir1': Es un directorio<br />
</syntaxhighlight><br />
<br />
Tradicionalmente el borrado de ficheros y directorios requería confirmación para cada directorio o fichero borrado. Para evitar tener que responder a la misma pregunta cada vez se solía utilizar el parámentro -f, siendo la forma más común de borrado recursivo '''rm -rf directorio'''. openSUSE por defecto no te pedirá confirmación salvo que cambies la configuración del comando, con lo que rm -r tendrá el mismo efecto que rm -rf.<br />
<br />
=== Copiar y mover ficheros ===<br />
En la sección [[#Enlaces duros]] hemos visto que un mismo fichero puede tener varios enlaces, de tal forma que al eliminar cualquiera de ellos aun permanecerían los demás, y por ende su contenido.<br />
<br />
''Copiar'' un fichero consiste en obtener dos enlaces a dos copias diferentes del mismo fichero. En algunos tipos de sistemas de ficheros modernos en realidad no se hará una copia del fichero hasta que se intente modificar uno de ellos, característica denominada '''cow''' (''copy on write'', copia al modificar). Usar cow o no es una cuestión que atañe al sistema operativo e indistinto desde el punto de vista del usuario. Por su parte, ''mover'' un fichero o directorio implica cambiar su ubicación hasta otro directorio.<br />
<br />
==== Copia con cp ====<br />
La forma más sencilla de obtener una copia de un fichero es con el comando '''cp'''. Su sintaxis es <syntaxhighlight lang="bash" inline>cp origen destino</syntaxhighlight>. No obstante, cp presenta similitudes con rm: no puede copiar directorios, vacíos o no. Para ocuparse de directorios, ha de usarse la opción '''-r'''.<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> echo "algún texto" > fichero1.txt<br />
gecko@Leap-PC:~/Documentos> cp fichero1.txt fichero2.txt<br />
gecko@Leap-PC:~/Documentos> cat fichero1.txt fichero2.txt<br />
algún texto<br />
algún texto<br />
gecko@Leap-PC:~/Documentos> mkdir dir2<br />
gecko@Leap-PC:~/Documentos> cp fichero2.txt dir2/<br />
gecko@Leap-PC:~/Documentos> ls dir2/<br />
fichero2.txt<br />
gecko@Leap-PC:~/Documentos> cp dir2 dir3<br />
cp: -r no especificado; omitiendo directorio 'dir2'<br />
gecko@Leap-PC:~/Documentos> cp dir2 dir3 -r<br />
gecko@Leap-PC:~/Documentos> ls<br />
acceso_directo_a_script.sh dir1 dir2 dir3 enlace_script.sh fichero1.txt fichero2.txt<br />
gecko@Leap-PC:~/Documentos> ls dir3/<br />
fichero2.txt<br />
</syntaxhighlight><br />
{{Info|Cuando autocompletas con el tabulador se incluirá el separador '''/'''. El comando cp no actúa direfente con o sin barra de dividir, pero otros comandos que se verán a continuación pueden proporcionar resultados imprevistos.}}<br />
{{Info|La mayoría de comandos aceptarán las opciones más o menos en cualquier lugar. Por ejemplo, <syntaxhighlight lang="bash" inline>ls -l dir1/ -a</syntaxhighlight> funcionará correctamente}}.<br />
<br />
==== Copia con rsync ====<br />
'''rsync''' es una versión ''moderna'' de cp, pero especializada en la copia a través de sistemas de ficheros en red e incluso mediante '''ssh'''. Tiene montones de opciones, muchas de las cuales dependen de qué se esté haciendo. Por ejemplo, -va hace una copia completa (recursiva, incluyendo enlaces, permisos...) mostrando lo que se está copiando. y -z habilita la compresión de lo que se copia (útil para copiar por la red).<br />
<br />
Una de las particularidades de rsync es su habilidad para hacer ''copias incrementales''. Una copia incremental consiste en que cada vez que copias dos cosas, sólo copias aquellas cosas que han cambiado desde la última vez.<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> rsync -va dir2/ dir1/<br />
sending incremental file list<br />
./<br />
fichero2.txt<br />
<br />
sent 143 bytes received 38 bytes 362.00 bytes/sec<br />
total size is 13 speedup is 0.07<br />
gecko@Leap-PC:~/Documentos> ls dir1<br />
fichero2.txt<br />
gecko@Leap-PC:~/Documentos> echo "otro fichero más" >> dir2/fichero3.txt<br />
gecko@Leap-PC:~/Documentos> rsync -va dir2/ dir1/<br />
sending incremental file list<br />
./<br />
fichero3.txt<br />
<br />
sent 173 bytes received 38 bytes 422.00 bytes/sec<br />
total size is 31 speedup is 0.15<br />
gecko@Leap-PC:~/Documentos> ls dir1<br />
fichero2.txt fichero3.txt<br />
</syntaxhighlight><br />
<br />
==== Copia con dd ====<br />
'''dd''' es una utilidad para copiar ficheros ''bit a bit'' y que se utiliza principalmente para hacer copias exactas de imágenes de discos (clones). Por ejemplo, podrías clonar tu partición /dev/sda2 en un fichero llamado sda2.img de la siguente forma: <syntaxhighlight lang="bash" inline>dd if=/dev/sda2 of=sda2.img</syntaxhighlight>.<br />
<br />
Usar ''dd'' para copiar tus ficheros de un lugar a otro es un poco como matar moscas con misiles. Funciona, pero en general será más sencillo usar ''cp'' o ''rsync''. Para hacer una copia de ''fichero2.txt'' podríamos usar el comando:<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> dd if=fichero2.txt of=fichero3.txt<br />
gecko@Leap-PC:~/Documentos> cat fichero3.txt <br />
algún texto<br />
</syntaxhighlight><br />
<br />
<br />
==== Copia con cat ====<br />
Muchas de las cosas que se pueden hacer en un terminal son en realidad ''efectos secundarios''. Por ejemplo, el comando ''touch'' permite actualizar la hora de modificación de un fichero, pero su efecto secundario es que si no existe el fichero, lo crea con la fecha de modificación actualizada. Así que es ampliamente usado para crear ficheros vacíos.<br />
<br />
''cat'' muestra por pantalla el contenido de un fichero. Si redirigimos esta salida a un nuevo fichero, existente o no, tendremos una copia:<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> cat fichero1.txt > nuevo_fichero1.txt<br />
gecko@Leap-PC:~/Documentos> cat nuevo_fichero1.txt <br />
algún texto<br />
</syntaxhighlight><br />
<br />
Podemos indicar un fichero, varios usando comodines, o una lista de ellos. La salida será mostrada en pantalla, la de cada fichero a continuación del anterior. Eso nos permite una forma sencilla de ''concatenar'' o ''unir'' ficheros:<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> cat fichero?.txt > nuevo_fichero_enésimo.txt<br />
gecko@Leap-PC:~/Documentos> ls<br />
acceso_directo_a_script.sh dir1 dir2 dir3 enlace_script.sh fichero1.txt fichero2.txt fichero3.txt nuevo_dir nuevo_fichero1.txt nuevo_fichero_enésimo.txt<br />
gecko@Leap-PC:~/Documentos> cat nuevo_fichero_enésimo.txt <br />
algún texto<br />
algún texto<br />
algún texto<br />
</syntaxhighlight><br />
<br />
==== Mover y renombrar con mv ====<br />
'''mv'' permite mover ficheros y directorios de una ubicación a otra.<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> mv nuevo_fichero_enésimo.txt dir1/<br />
gecko@Leap-PC:~/Documentos> ls <br />
acceso_directo_a_script.sh dir1 dir2 dir3 enlace_script.sh fichero1.txt fichero2.txt fichero3.txt nuevo_dir nuevo_fichero1.txt<br />
gecko@Leap-PC:~/Documentos> ls dir1/<br />
fichero2.txt fichero3.txt nuevo_fichero_enésimo.txt<br />
</syntaxhighlight><br />
<br />
Y también permite renombrar ficheros y directorios:<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> mv dir1 directorio1<br />
gecko@Leap-PC:~/Documentos> ls<br />
acceso_directo_a_script.sh dir2 dir3 directorio1 enlace_script.sh fichero1.txt fichero2.txt fichero3.txt nuevo_dir nuevo_fichero1.txt<br />
</syntaxhighlight><br />
<br />
Esto puede ser un tanto confuso para el usuario recién llegado (y para el no tan reciente). Si existe el destino, mv moverá el origen al interior del destino:<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> mv dir2 dir3<br />
gecko@Leap-PC:~/Documentos> ls dir3<br />
dir2 fichero2.txt<br />
</syntaxhighlight><br />
<br />
Si existe un directorio con el nombre indicado en el destino, mv moverá el origen al directorio destino. Pero si renombras un fichero con el nombre de un fichero existente, ¡lo sobrescribirá!!<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> mv enlace_script.sh fichero1.txt<br />
gecko@Leap-PC:~/Documentos> ls<br />
acceso_directo_a_script.sh dir3 directorio1 fichero1.txt fichero2.txt fichero3.txt nuevo_dir nuevo_fichero1.txt<br />
gecko@Leap-PC:~/Documentos> cat fichero1.txt<br />
#!/bin/bash<br />
<br />
echo "Hola mundo"<br />
echo y más allá!<br />
</syntaxhighlight><br />
<br />
== Carpetas ==<br />
En Linux se utiliza una aproximación interesante al concepto de carpeta. Algunos directorios contienen un fichero especial y oculto denominado ''.directory'', que permite establecer configuraciones generales al utilizarse con ciertas aplicaciones.<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> cat .directory<br />
[Dolphin]<br />
PreviewsShown=true<br />
SortOrder=1<br />
SortRole=modificationtime<br />
Timestamp=2022,3,1,19,58,21<br />
Version=4<br />
<br />
[Settings]<br />
HiddenFilesShown=false<br />
</syntaxhighlight><br />
<br />
En este fichero de texto de configuración, los corchetes se usan para delimitar apartados. El primer apartado corresponde al gestor de ficheros [[Dolphin]]. Por ejemplo, indica que se muestren las previsualizaciones de los ficheros que contenga y la forma de ordenación al mostrar el contenido. El apartado Settings establece que cada vez que se muestre su contenido no se incluyan los ficheros ocultos.<br />
<br />
== Comodines ==<br />
En Bash puedes usar un montón de comodines y abreviaturas. Por ejemplo, un asterisco '''*''' sustituye a cualquier conjunto de caracteres, mientras que un interrogante '''?''' sustituye a un caracter. Por ejemplo:<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> ls dir?<br />
dir1:<br />
<br />
dir2:<br />
fichero2.txt<br />
<br />
dir3:<br />
fichero2.txt<br />
gecko@Leap-PC:~/Documentos> cp * dir1<br />
cp: cannot stat 'acceso_directo_a_script.sh': Non hai tal ficheiro ou directorio<br />
cp: -r no especificado; omitiendo directorio 'dir1'<br />
cp: -r no especificado; omitiendo directorio 'dir2'<br />
cp: -r no especificado; omitiendo directorio 'dir3'<br />
gecko@Leap-PC:~/Documentos> ls dir1<br />
enlace_script.sh fichero1.txt fichero2.txt<br />
gecko@Leap-PC:~/Documentos> rm dir1/*<br />
gecko@Leap-PC:~/Documentos> ls dir1/<br />
gecko@Leap-PC:~/Documentos><br />
</syntaxhighlight><br />
<br />
== Conectores de comandos ==<br />
Una de las cosas que hacen tan útiles a los terminales de comando son las distintas formas de interconectar unos comandos con otros.<br />
<br />
Por ejemplo, puedes ejecutar un comando de forma condicionada a la ejecución de otro. Con && la condición es "si el comando ha sido válido" y con || la condición es "en cualquier caso". Por ejemplo:<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> mkdir nuevo_dir && cd nuevo_dir && touch hola.txt && cd ..<br />
gecko@Leap-PC:~/Documentos> ls nuevo_dir/<br />
hola.txt<br />
gecko@Leap-PC:~/Documentos> mkdir nuevo_dir || cd nuevo_dir && touch nuevo_hola.txt && cd ..<br />
mkdir: no se puede crear el directorio "nuevo_dir": El fichero ya existe<br />
gecko@Leap-PC:~/Documentos> ls nuevo_dir/<br />
hola.txt nuevo_hola.txt<br />
</syntaxhighlight><br />
El segundo mkdir falla en su ejecución porque ya existe un directorio con ese nombre. Como la condición es ''O'', la doble barra, los comandos siguientes se ejecutan. Si hubiera usado la condición ''Y'', el doble ampersand, la ejecución se habría detenido ahí.<br />
<br />
Otra forma de encadenar comandos es con tuberías. En la sección [[#Ficheros regulares]] se ha empleado una tubería ''>''. Esta tubería hace que el resultado de ejecutar un comando, en aquel caso ''cat'', sea introducido en el fichero que hay a su derecha. Literalmente, ''cat > fichero.txt'' hace que lo que vamos escribiendo en la pantalla sea enviado al fichero ''fichero.txt''. Menos usual es la redirección inversa ''<''. Esto hace que lo que está a la derecha sea enviado a lo que está a la izquierda.<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> cat < fichero1.txt <br />
algún texto<br />
gecko@Leap-PC:~/Documentos> echo "más cosas" >> fichero1.txt<br />
gecko@Leap-PC:~/Documentos> cat fichero1.txt <br />
algún texto<br />
más cosas<br />
</syntaxhighlight><br />
Si usas un sólo signo ''>'' el resultado del comando de la izquierda sobrescribirá el fichero. Si usas dos signos ''>>'', el resultado se añadirá al final.<br />
<br />
Otra tubería popular es la barra vertical '''|''', que permite que el resultado de ejecutar un comando con el resultado de otro comando. Por ejemplo, para buscar ficheros que contengan ''icher'' en su nombre, normalmente bastaría con ls *icher*, pero también podemos hacer eso como ejemplo:<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> ls *icher*<br />
fichero1.txt fichero2.txt<br />
gecko@Leap-PC:~/Documentos> ls | grep icher<br />
fichero1.txt<br />
fichero2.txt<br />
</syntaxhighlight><br />
<br />
'''grep''' por defecto resaltará la cadena (conjunto de letras y signos) buscada. Por sí mismo es un comando que permite buscar cadenas de texto en ficheros de texto. Por ejemplo, para buscar qué fichero contiene la palabra algún:<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> grep algún *<br />
grep: acceso_directo_a_script.sh: No existe tal fichero o directorio<br />
grep: dir1: Es un directorio<br />
grep: dir2: Es un directorio<br />
grep: dir3: Es un directorio<br />
fichero1.txt:algún texto<br />
fichero2.txt:algún texto<br />
grep: nuevo_dir: Es un directorio<br />
</syntaxhighlight><br />
<br />
Y con frecuencia se utiliza para hacer búsquedas en la salida de algún comando que proporcione un resultado largo. Por ejemplo, el comando '''ps''' lista los procesos en ejecución y es común listarlos con las opciones -aux. Para buscar el proceso konsole, podemos hacer lo siguiente:<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> <br />
ps aux | grep konsole<br />
gecko 2549 0.0 1.0 694400 85380 ? Sl 18:18 0:02 /usr/bin/konsole -session 10137156d2e4000164613515200000032360018_1646241240_34218<br />
gecko 16848 0.0 0.0 10256 2456 pts/2 S+ 19:05 0:00 grep --color=auto konsole<br />
</syntaxhighlight><br />
<br />
Los conectores no necesitan tener espacios en blanco alrededor, pero es buena idea para hacerlo más legible. En ese sentido, <syntaxhighlight lang="bash" inline>echo "hola" > fichero.txt</syntaxhighlight> es exactamente igual a <syntaxhighlight lang="bash" inline>echo "hola">fichero.txt</syntaxhighlight><br />
<br />
== Notas ==<br />
# <cite id="nota1">En cualquier sistema gráfico pueden encontrarse estas aplicaciones buscando ''terminal''.</cite><br />
# <cite id="nota2">Linux distingue mayúsculas de minúsculas y es buena idea asumir que cualquier intérprete de comandos hará lo propio, aunque hay excepciones como algunos lenguajes de bases de datos, por ejemplo. En Bash, es diferente '''nombre''' de '''Nombre''' o de '''NOMBRE'''.</cite><br />
# <cite id="nota3">Salvo en el caso de que existan otras carpetas que comiencen por Doc, como por ejemplo ''Documentanción''.</cite><br />
# <cite id="nota4">Para aprender sobre el uso de permisos de ficheros, consulta la guía [[SDB:Fundamentos del sistema de permisos|Fundamentos del sistema de permisos]] </cite><br />
# <cite id="nota4">Los scripts suelen traducirse literalmente como ficheros de guiones o en otras ocasiones como ficheros por lotes. Ambas expresiones hacen referencia al hecho de que ejecutan tareas de una en una.<br />
<br />
<br />
[[Category:SDB:Guía de principiantes]]<br />
[[Category:Conceptos|Uso básico del terminal]]</div>Karlggesthttps://es.opensuse.org/index.php?title=SDB:Funtamentos_de_bash&diff=28390SDB:Funtamentos de bash2024-01-24T10:02:33Z<p>Karlggest: /* Carpetas */</p>
<hr />
<div>{{Barra de navegación para Conceptos}}<br />
<br />
{{Conocimiento básico<br />
|<br />
*[[Conceptos interfaz]]<br />
|<br />
*[https://es.wikipedia.org/wiki/Bash Bash]<br />
*[https://es.wikipedia.org/wiki/Shell_de_Unix Shell de Unix]<br />
*[https://es.wikipedia.org/wiki/Interfaz_de_l%C3%ADnea_de_comandos Interfaz de línea de comandos]<br />
}}<br />
== Introducción ==<br />
Aunque es posible usar un sistema operativo cualquiera con éxito sin usar jamás un terminal de comandos, lo cierto es que conocer su uso básico favorece el aprendizaje de algunos conceptos. El ámbito de este documento es orientar al usuario en el uso de comandos básicos que le servirán para dicho aprendizaje. Para aquellas personas usuarias interesadas en aprender un mejor uso del terminal se recomienda consultar obras más detalladas sobre Bash y en particular sobre su programación.<br />
<br />
== El intérprete ==<br />
El ''shell'' '''bash''', que es el que acompaña por defecto a la mayoría de distribuciones de Linux, es lo que se denomina ''un intérprete de comandos''. Eso significa que la persona usuaria interactúa con el sistema proporcionando comandos determinados que el intérprete procesa.<br />
<br />
Los escritorios gráficos de Linux proporcionan aplicaciones que permiten utilizar el intérprete de comandos desde la propia sesión gráfica. El escritorio Plasma proporciona [https://konsole.kde.org/ konsole] para esta labor[[#nota1|[1]]].<br />
<br />
El terminal en el que ejecutamos bash es una pantalla o ventana de texto. El intérprete proporciona un ''prompt''. Por defecto, en openSUSE está formado de la siguiente manera:<br />
<syntaxhighlight lang="bash"><br />
usuario@máquina:~><br />
</syntaxhighlight><br />
* ''usuario'' es tu nombre como usuaria.<br />
* ''@'' es un separador de forma similar a las direcciones de correo-e.<br />
* ''máquina'' es el nombre que le hayas asignado a tu máquina. Normalmente el sistema asigna un nombre más o menos arbitrario durante la instalación, pero puedes cambiárselo.<br />
* '':'' es otro separador.<br />
* ''~'' es una abreviatura para representar tu carpeta personal. Normalmente, a medida que te ''mueves'' por el árbol de directorios, esto se sustituye por tu ubicación actual.<br />
* ''>'' es otro separador.<br />
<br />
Cuando está visible este prompt en la última línea, significa que puedes introducir un comando. Por ejemplo, puedes ejectuar konsole o el terminal de tu escritorio gráfico, e introducir el siguiente comando para saber la ruta hasta donde estás:<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~> pwd<br />
/home/gecko<br />
gecko@Leap-PC:~> <br />
</syntaxhighlight><br />
Al ejecutar konsole se ejecutará automáticamente el intérprete de comandos que tengas configurado y que por defecto en openSUSE es Bash.<br />
<br />
{{Info|El uso del escritorio desarrollado por Microsoft para su sistema operativo Windows ha extendido el uso del término ''folder'' (carpeta) en lugar de ''directory'' (directorio) y en mi opinión está bien. Es una metáfora muy visual: ''guarda ese fichero en la carpeta del proyecto''. No obstante, en el mundo del terminal suele usarse ''directorio'' y de hecho la nemotecnia de los comandos empuja a ello: '''''c'''hange '''d'''irectory'' (cambiar directorio) para el comando cd, que permite justamente acceder a un directorio. No hay nada malo en usar ''carpeta'', pero la mayoría de textos que leas sobre el terminal emplearán ''directorio''. Consulta la sección [[#Carpetas|Carpetas]] para ver las diferencias.}}<br />
<br />
Los comandos del sistema tienen una página de manual que por desgracia no se ha traducido en años y que rara vez tendremos en castellano. Sin embargo, los comandos que ejecutaremos aquí son muy sencillos y pueden entenderse facilmente en inglés. Si deseas ver información del comando en castellano, puedes usar un buscador web con ''man comando español''. Por ejemplo, [https://duckduckgo.com/?q=man+pwd+espa%C3%B1ol&t=ffab&ia=web man pwd español].<br />
<br />
El prompt suele incluir, y en openSUSE es así por defecto, el nombre como usuaria del sistema. Pero esto no es así para la cuenta administradora (root), que se resalta en rojo, o puede que se haya establecido otra configuración. En cualquier caso, hay un comando para comprobar qué cuenta usuaria estás utilizando en ese momento: whoami, en inglés, literalmente, ¿quién soy?<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~> whoami<br />
gecko<br />
gecko@Leap-PC:~> <br />
</syntaxhighlight><br />
{{Info|En una sesión gráfica, el terminal en el que ejecutas bash, como konsole, se denomina ''terminal virtual''. Una ''verdadera'' sesión con el intérprete de comandos requiere hacerlo en modo texto y comenzará con el login, en el que se ha de introducir el nombre y la contraseña. En este documento se asume el uso de un terminal virtual, normalmente konsole.}}<br />
<br />
La sesión con el intérprete bash concluye al ejecutar el comando '''exit''' o bien al cerrar konsole.<br />
<br />
Es posible ejecutar distintos intérpretes de comandos dentro de una sesión con bash, incluso el propio bash. De hecho, eso es lo que sucede cuando se cambia de usuario con el comando '''su''' y el ''modificador'' '''-''':<br />
<pre><br />
gecko@Leap-PC:~> su -<br />
</pre><br />
<pre style="color: red"><br />
Leap-PC:~ #<br />
</pre><br />
<br />
El símbolo # es habitual en el prompt del administrador. Hay mucha documentación donde el verás que el símbolo $ corresponde a las cuentas usuarias regulares, y # al administrador, y se omite el resto del prompt, de esta forma:<br />
<syntaxhighlight lang="bash"><br />
$ whoami<br />
tux<br />
</syntaxhighlight><br />
<pre><br />
# whoami<br />
root<br />
</pre><br />
<br />
=== Procesos ===<br />
Aunque la idea de usar un intérprete de comandos es interactuar con el sistema mediante los susodichos comandos, en muchas ocasiones será interesante ejecutar un comando y dejar que se ejecute ''en segundo plano'' hasta que finalice. Por ejemplo, el comando cp que se verá en la sección [[#Copia con cp]] puede ejecuarse en segundo plano añadiendo el símbolo ampersand al final del comando:<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~> cp -r un_directorio_con_muchos_ficheros otra_carpeta &<br />
gecko@Leap-PC:~> <br />
</syntaxhighlight><br />
<br />
En lugar de mostrar el proceso del comando, inmediatamente devuelve el ''prompt'' para poder seguir introduciendo comandos. Es posible que a veces el comando en ejecución muestre de todas formas qué está haciendo, pero incluso así seguiremos teniendo el control del prompt para introducir otros comandos.<br />
<br />
En ocasiones podrá suceder que ejecutamos comandos largos sin el ampersand y nos vemos en la necesidad de interrumpirlo para ejecutar otros comandos distintos. Eso lo podemos hacer pulsando CTRL+C (la combinación general para interrumpir un comando).<br />
<br />
También es posible que querramos pasar a segundo plano el comando, lo que podemos hacer pulsando CTRL+Z. Eso normalmente detendrá la ejecución de ese comando y nos dará el control del ''prompt''. Para continuar con la ejecución del programa detenido, ejecutaremos el comando '''fg'''.<br />
<br />
'''kill''' es un comando que nos permite enviar señales a un comando que esté en ejecución. Esas señales pueden ser, por ejemplo, detenerse, o directamente matarse (interrumpirse por completo), y en general se emplea pasando la opción numérica correspondiente (9 para matar un proceso, 15 para detenerlo). '''killall''' permite matar procesos pero indicando el nombre del proceso, en lugar de su número de proceso (UID). ''ps'' es un comando que lista los procesos en ejecución.<br />
<br />
=== Uso de intérpretes de comandos en bash ===<br />
Hay muchos lenguajes de programación y aplicaciones específicas que proporcionan intérpretes de comandos: bases de datos, calculadoras, lenguajes interpretados... Si aun estás en la sesión con el administrador (prompt en rojo acabado en #), escribe '''exit''' para volver a la sesión de usuario y ejecuta la ''calculadora integrada'' con el comando '''bc''' (ejecuta '''man bc''' para aprender más sobre ella):<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~> bc<br />
bc 1.07.1<br />
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006, 2008, 2012-2017 Free Software Foundation, Inc.<br />
This is free software with ABSOLUTELY NO WARRANTY.<br />
For details type `warranty'. <br />
<br />
</syntaxhighlight><br />
'''bc''' no usa prompt y puedes escribir las expresiones a calcular directamente. Por ejemplo, para calcular la suma 5+3 basta con escribirlo y pulsar ''intro'':<br />
<syntaxhighlight lang="bash"><br />
5+3<br />
8<br />
</syntaxhighlight><br />
Para salir, basta con escribir '''quit''' (quitar el programa):<br />
<syntaxhighlight lang="bash"><br />
quit<br />
gecko@Leap-PC:~> <br />
</syntaxhighlight><br />
<br />
== Moviéndote por el árbol de directorios ==<br />
Cada directorio, salvo la raíz, contiene dos ficheros especiales, denominados '''.''' (punto) y '''..''' (dos puntos). El fichero '''.''' hace referencia al directorio actual y el fichero '''..''' hace referencia al directorio anterior o ''padre''.<br />
<br />
Para poder desplazarte por los directorios del sistema tienes el comando '''cd''' (change directory). Al comando le proporcionas el lugar al que quieres desplazarte, de la siguiente forma:<br />
* <syntaxhighlight lang="bash" inline>cd ruta_directorio</syntaxhighlight> te desplaza al directorio de nombre ruta_directorio<br />
* <syntaxhighlight lang="bash" inline>cd ..</syntaxhighlight> te desplaza al directorio padre del actual.<br />
* <syntaxhighlight lang="bash" inline>cd .</syntaxhighlight> no tiene efecto porque te desplaza al directorio actual.<br />
<br />
El signo / se emplea como separador entre directorios con el significado ''padre de''. En ''dir_padre''/''dir_hijo'', ''dir_hijo'' es un directorio que está ''dentro'' de ''dir_padre'', de forma que ''dir_padre'' es el directorio ''padre'' de ''dir_hijo''.<br />
<br />
Dado que el directorio raíz '''root''' no tiene padre, se representa únicamente con la barra espaciadora. De esta forma, para desplazarnos desde cualquier lugar hasta el directorio raíz, basta con ejecutar:<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~> cd /<br />
gecko@Leap-PC:/><br />
</syntaxhighlight><br />
<br />
Existen dos tipos de rutas a directorio: las rutas que incluyen toda la ruta desde el directorio raíz, llamadas '''rutas absolutas''' y las rutas que incluyen un origen en un directorio dado, llamadas '''rutas relativas'''. Normalmente las rutas relativas comenzarán en un directorio dentro de nuestro directorio actual.<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:/> cd /home/gecko<br />
gecko@Leap-PC:~> <br />
</syntaxhighlight><br />
<br />
El comando '''cd /home/gecko''' nos devuelve al directorio del usuario gecko. Por su parte<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~> cd Documentos<br />
gecko@Leap-PC:~/Documentos><br />
</syntaxhighlight><br />
<br />
Nos lleva al directorio ''Documentos'' dentro del directorio del usuario gecko. En ese punto, para volver al directorio del usuario tenemos tres opciones:<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> cd ..<br />
gecko@Leap-PC:~> <br />
</syntaxhighlight><br />
<syntaxhighlight lang="bash"><br />
<br />
O bien<br />
gecko@Leap-PC:~/Documentos> cd<br />
gecko@Leap-PC:~> <br />
</syntaxhighlight><br />
O bien<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> cd ~<br />
gecko@Leap-PC:~> <br />
</syntaxhighlight><br />
<br />
Usar cd sin argumentos te llevará siempre al directorio de usuario. Por su parte, la virgulilla es una abreviatura de bash y significa el directorio del usuario. Puede utilizarse de forma absoluta, formando rutas como ~/Documentos, o bien como atajo con el comando '''cd'''. Esto permite que, por ejemplo, para cambiar desde Documentos hasta Descargas, puedas ejecutar:<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> cd ~/Descargas<br />
gecko@Leap-PC:~/Descargas> <br />
</syntaxhighlight><br />
<br />
Bash tiene un montón de atajos y facilidades, y la instalación por defecto de openSUSE Leap añade muchos más. Por ejemplo, dentro de Descargas escribe: '''cd ../''' y pulsa la tecla tabulador (TAB) un par de veces:<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Descargas> cd ../<br />
</syntaxhighlight><br />
Pulsa el tabulador dos veces, y verás lo siguiente (puede haber otros directorios en tu sistema):<br />
<syntaxhighlight lang="bash"><br />
.cache/ .config/ Descargas/ Documentos/ Escritorio/ Imaxes/ .local/ logs/ Modelos/ Música/ Público/ Vídeos/<br />
</syntaxhighlight><br />
<br />
Al pulsar el tabulador, bash trata de autocompletar la ruta desde el texto que hayas escrito justo antes. ../ significa ''desde el directorio anterior'' y te proporcionará todas las opciones. Si escribes una '''D''' mayúscula[[#nota2|[2]]] y vuelves a pulsar el tabulador, te ofrecerá todas las opciones que comienzan con D (Documentos y Descargas, salvo que tengas algún directorio más en tu sistema que también empiece por D).<br />
<br />
Esta forma de ''autocompletar'' es muy cómoda, pero tiene sus cosas. Si pulsas una vez el tabulador, sólo funcionará si hay una sola opción disponible. Por ejemplo, <syntaxhighlight lang="bash" inline>cd ../Doc</syntaxhighlight> se autocompletará como <syntaxhighlight lang="bash" inline>cd ../Documentos/</syntaxhighlight>[[#nota3|[3]]]. Si no hay una única opción, ''volver'' a pulsarlo mostrará todas las opciones disponibles que coincidan con ese patrón. Si tienes un directorio llamado ''Proyectos'' dentro de ''Documentos'', puedes hacer lo siguiente para acceder a él: cd ~/Do<tabulador>Pr<tabuldador> (escribir cd, espacio, virguilulla, barra de división, Do, tabulador, Pr, tabulador. Lo cual irá autocompletando cd ~/Documentos/Proyectos. Una vez tienes todo el comando, basta con pulsar '''intro''' para ejecutar el comando.<br />
<br />
== Trabajando con ficheros ==<br />
Desde el punto de vista de Linux, cualquier cosa que no sea la red, es un fichero. Según el cometido de ese fichero, puede ser de diferentes tipos:<br />
* Ficheros regulares.<br />
** Ficheros de texto.<br />
** Ficheros binarios.<br />
** Directorios.<br />
* Enlaces blandos.<br />
* Enlaces duros.<br />
* Dispositivos.<br />
** de bloques.<br />
** de caracteres.<br />
<br />
=== Listar ficheros ===<br />
El comando usual para listar el contenido de un directorio, y ver así qué ficheros o directorios contiene, es '''ls'''.<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> ls<br />
script.sh<br />
</syntaxhighlight><br />
<br />
'''ls''' es un comando que admite un buen montón de argumentos. Los más habituales son:<br />
* l para visualizar un ''listado largo'', que incluye información de cada fichero o directorio tal como su propietario y permisos.<br />
* d para listar el directorio en lugar de su contenido. Es común usarlo con el argumento l.<br />
* a para listar los ficheros incluyendo los ficheros ocultos. En Linux, un fichero está oculto cuando su nombre comienza por . (punto).<br />
<br />
Para usar estas opciones, ls ha de ir seguida por el carácter guión '''-''', por ejemplo, para obtener un listado largo:<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> ls -l<br />
-rw-r--r-- 1 gecko users 31 Mar 1 17:51 script.sh<br />
</syntaxhighlight><br />
<br />
Aunque es posible poner cada opción con su propio guión, lo habitual es agruparlos. Así, los siguientes dos comandos tienen el mismo resultado:<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> ls -l -a<br />
total 12<br />
drwxr-xr-x 2 gecko users 22 Mar 1 18:29 .<br />
drwxr-xr-x 14 gecko users 4096 Mar 1 18:28 ..<br />
-rw------- 1 gecko users 105 Abr 14 2021 .directory<br />
-rw-r--r-- 1 gecko users 31 Mar 1 17:51 script.sh<br />
gecko@Leap-PC:~/Documentos> ls -la<br />
total 12<br />
drwxr-xr-x 2 gecko users 22 Mar 1 18:29 .<br />
drwxr-xr-x 14 gecko users 4096 Mar 1 18:28 ..<br />
-rw------- 1 gecko users 105 Abr 14 2021 .directory<br />
-rw-r--r-- 1 gecko users 31 Mar 1 17:51 script.sh<br />
</syntaxhighlight><br />
<br />
En el listado largo, cada fichero ocupa una fila. El primer grupo de caracteres empezará por d si es un directorio, - si es un fichero regular, b para un dispositivo de bloques, l para enlaces, b para dispositivos de bloques y c para dispositivos de caracteres.<br />
<br />
=== Ficheros regulares ===<br />
Los ficheros de texto contienen caracteres de texto, normalmente en código ASCII. En Linux son ampliamente usados, por ejemplo de forma preferente para los ficheros de configuración de casi cualquier elemento. Por su parte, los ficheros binarios tienen un contenido binario definido en función del tipo de fichero concreto. Los directorios son un tipo de fichero especial que permiten organizar los ficheros almacenados en el sistema de forma más adecuada para el uso por parte del usuario.<br />
<br />
Para que un fichero regular sea ejecutable ha de cumplir con dos requisitos: tener permiso de ejecución para el usuario que quiere ejecutarlo[[#nota4|[4]]], y contener código ejecutable de alguna clase. Por ejemplo, pwd es un fichero regular binario:<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> file /usr/bin/pwd<br />
/usr/bin/pwd: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=5d7ba8d4e2d3bda8835aaf230b257e55009d8f1a, for GNU/Linux 3.2.0, stripped<br />
</syntaxhighlight><br />
Podemos probar qué sucede si creamos un sencillo ''script''[[#nota5|[5]]], que son ficheros de texto que contienen código de algún lenguaje interpretado, incluido bash. Para ello usaremos el comando '''cat''' (que permite leer ficheros de texto) de una forma particular. Una vez que introduzcas cat > script y pulses intro, podrás introducir las líneas de una en una (pulsando intro en cada una, incluso en las vacías). Una vez acabado, después de "Hola mundo!", pulsa la combinación '''CTRL+D''':<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> cat > script.sh <br />
#!/bin/bash<br />
<br />
echo "Hola mundo!"<br />
gecko@Leap-PC:~/Documentos> file script.sh<br />
script.sh: Bourne-Again shell script, ASCII text executable<br />
</syntaxhighlight><br />
<br />
'''Bourne-Again shell''' es el nombre completo de Bash, y literalmente dice que es un fichero que contiene un script de bash escrito con texto ASCII y que es ejecutable.<br />
<br />
Para ejecutarlo no se requieren permisos de ejecución, basta con emplear algún intérprete de comandos adecuado, en este caso, bash.<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> bash script.sh <br />
Hola mundo<br />
gecko@Leap-PC:~/Documentos> sh script.sh<br />
Hola mundo<br />
gecko@Leap-PC:~/Documentos> <br />
</syntaxhighlight><br />
<br />
'''sh''' es otro atajo, en esta ocasión nombra al intérprete de comandos configurado en nuestro sistema. En la instalación por defecto de openSUSE será bash, pero hay muchos más.<br />
<br />
==== Enlaces duros ====<br />
Los enlaces '''duros''' han perdido popularidad con el auge de los escritorios gráficos. La idea es que las ''entradas de directorio'' son una forma de organizar los ficheros ''para los usuarios'' de la computadora. No existe ningún área de ningún disco que se delimite para formar una carpeta y guardar ficheros ''dentro'' de esa área. El sistema operativo utiliza distintos procedimientos para establecer dónde guarda cada fichero. Dicho fichero ni siquiera tiene por qué estar todo junto, sino que es posible que esté repartido en fragmentos a lo largo del disco. Cada tipo de sistema de ficheros, sea btrfs, ext4, xfs, etc., lo hace de una forma diferente.<br />
<br />
De cara al usuario, los ficheros se guardan formando una jerarquía que permite relacionar los ficheros entre sí. Cuando operas con una entrada de un directorio dado, el sistema la traduce a la ubicación real del fichero y hace aquello que se haya indicado. Puedes pensar que cada entrada de directorio correspondiente a un fichero es un enlace entre ese fichero y el lugar real donde ser almacena el fichero. Así, cuando ejecutas ''cat script.sh'' el sistema consulta la entrada de script.sh y recupera el fichero real para mostrar su contenido por pantalla. En ese sentido, ''todos'' los ficheros regulares ''son'' enlaces ''duros''.<br />
<br />
Recuerda que los enlaces simbólicos son ficheros que contienen una ubicación. En ese sentido ''acceso directo a fichero'' (o directorio) es un nombre un poco más adecuado. En cambio, la herramienta para crear enlaces duros es la misma: '''ln''', pero sin opciones. La sintaxis es la misma: ln fichero enlace<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> ln script.sh enlace_script.sh<br />
gecko@Leap-PC:~/Documentos> ls -l<br />
total 8<br />
lrwxrwxrwx 1 gecko users 9 Mar 1 18:40 acceso_directo_a_script.sh -> script.sh<br />
-rw-r--r-- 2 gecko users 31 Mar 1 17:51 enlace_script.sh<br />
-rw-r--r-- 2 gecko users 31 Mar 1 17:51 script.sh<br />
</syntaxhighlight><br />
<br />
Como puedes observar, ahora hay un fichero llamado ''enlace_script.sh'' que es aparentemente igual a ''script.sh''. Podríamos ejecutarlo con bash o leer su contenido con cat para comprobar que son iguales, aunque eso no diferencia un enlace duro de un enlace simbólico. Pero si te fijas en el listado obtenido con ls -l, verás que en la columna que va antes del nombre del usuario propietario del fichero, en lugar de un 1 como teníamos hasta ahora, hay un 2. Ese número representa el número de enlaces duros que tiene ese fichero: por defecto es 1, porque, como ya se ha dicho, ''todos'' los ficheros son en realidad enlaces duros de sí mismos.<br />
<br />
Un uso habitual de los enlaces de cualquier tipo es hacer accesible el fichero como si formara parte de otro directorio. El comando '''mkdir''' (''make directory'', crear directorio) permite crear directorios.<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> mkdir carpeta<br />
gecko@Leap-PC:~/Documentos> ln script.sh carpeta/script.sh<br />
gecko@Leap-PC:~/Documentos> ls -l<br />
total 8<br />
lrwxrwxrwx 1 gecko users 9 Mar 1 18:40 acceso_directo_a_script.sh -> script.sh<br />
drwxr-xr-x 2 gecko users 22 Mar 1 19:09 carpeta<br />
-rw-r--r-- 3 gecko users 31 Mar 1 17:51 enlace_script.sh<br />
-rw-r--r-- 3 gecko users 31 Mar 1 17:51 script.sh<br />
gecko@Leap-PC:~/Documentos> ls -l carpeta/<br />
total 4<br />
-rw-r--r-- 3 karl users 31 Mar 1 17:51 script.sh<br />
</syntaxhighlight><br />
<br />
Ahora los tres ficheros, script.sh, enlace_script y carpeta/script.sh tienen un 3 en el número de enlaces duros. Como cada uno ''apunta'' al contenido del fichero en sí, cada entrada puede ser movida, renombrada o incluso eliminada sin afectar al resto de enlaces.<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> rm script.sh<br />
gecko@Leap-PC:~/Documentos> ls -l<br />
total 4<br />
lrwxrwxrwx 1 karl users 9 Mar 1 18:40 acceso_directo_a_script.sh -> script.sh<br />
drwxr-xr-x 2 karl users 22 Mar 1 19:09 carpeta<br />
-rw-r--r-- 2 karl users 31 Mar 1 17:51 enlace_script.sh<br />
</syntaxhighlight><br />
<br />
Por un lado, al borrar ''script.sh'' el enlace simbólico vuelve a estar roto. Por otro lado, el 3 en las entradas de los enlaces duros ha sido sustituido con un 2, que es el número de enlaces duros que quedan para el contenido de script.sh. En la práctica, borrar un fichero consiste en tener 0 enlaces duros al mismo.<br />
<br />
Y por supuesto, al modificar el contenido a través de cualquier enlace, obtenemos el mismo resultado con el resto de enlaces duros.<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> echo "echo y más allá!" >> carpeta/script.sh<br />
gecko@Leap-PC:~/Documentos> bash enlace_script.sh<br />
Hola mundo<br />
y más allá!<br />
</syntaxhighlight><br />
<br />
Los enlaces duros no son apropiados para crear enlaces entre ficheros de distintos dispositivos ni entre directorios. Para estos casos, emplea enlaces simbólicos.<br />
<br />
=== Eliminar directorios ===<br />
Los directorios, además de accedidos con el comando cd y creados con el comando mkdir, pueden ser eliminados. Sin embargo, para el sistema no es lo mismo eliminar una entrada de directorio correspondiente a un directorio vacío, que una entrada de directorio correspondiente a un directorio que a su vez tiene ficheros o directorios en su interior.<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> mkdir dir1<br />
gecko@Leap-PC:~/Documentos> ls<br />
acceso_directo_a_script.sh carpeta dir1 enlace_script.sh<br />
gecko@Leap-PC:~/Documentos> rmdir dir1<br />
gecko@Leap-PC:~/Documentos> ls<br />
acceso_directo_a_script.sh carpeta enlace_script.sh<br />
gecko@Leap-PC:~/Documentos> rmdir carpeta<br />
rmdir: error al eliminar 'carpeta': Directorio no vacío<br />
</syntaxhighlight><br />
<br />
Para eliminar directorios que contengan ficheros o directorios, se emplea el comando '''rm -r'''<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> rm -r carpeta/<br />
gecko@Leap-PC:~/Documentos> ls<br />
acceso_directo_a_script.sh enlace_script.sh<br />
</syntaxhighlight><br />
<br />
Sin embargo, rm es un comando para ficheros. rm aplicado a un directorio vacío no funcionará sin el parámetro -r:<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> mkdir dir1<br />
gecko@Leap-PC:~/Documentos> rm dir1<br />
rm: no se puede borrar 'dir1': Es un directorio<br />
</syntaxhighlight><br />
<br />
Tradicionalmente el borrado de ficheros y directorios requería confirmación para cada directorio o fichero borrado. Para evitar tener que responder a la misma pregunta cada vez se solía utilizar el parámentro -f, siendo la forma más común de borrado recursivo '''rm -rf directorio'''. openSUSE por defecto no te pedirá confirmación salvo que cambies la configuración del comando, con lo que rm -r tendrá el mismo efecto que rm -rf.<br />
<br />
=== Copiar y mover ficheros ===<br />
En la sección [[#Enlaces duros]] hemos visto que un mismo fichero puede tener varios enlaces, de tal forma que al eliminar cualquiera de ellos aun permanecerían los demás, y por ende su contenido.<br />
<br />
''Copiar'' un fichero consiste en obtener dos enlaces a dos copias diferentes del mismo fichero. En algunos tipos de sistemas de ficheros modernos en realidad no se hará una copia del fichero hasta que se intente modificar uno de ellos, característica denominada '''cow''' (''copy on write'', copia al modificar). Usar cow o no es una cuestión que atañe al sistema operativo e indistinto desde el punto de vista del usuario. Por su parte, ''mover'' un fichero o directorio implica cambiar su ubicación hasta otro directorio.<br />
<br />
==== Copia con cp ====<br />
La forma más sencilla de obtener una copia de un fichero es con el comando '''cp'''. Su sintaxis es <syntaxhighlight lang="bash" inline>cp origen destino</syntaxhighlight>. No obstante, cp presenta similitudes con rm: no puede copiar directorios, vacíos o no. Para ocuparse de directorios, ha de usarse la opción '''-r'''.<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> echo "algún texto" > fichero1.txt<br />
gecko@Leap-PC:~/Documentos> cp fichero1.txt fichero2.txt<br />
gecko@Leap-PC:~/Documentos> cat fichero1.txt fichero2.txt<br />
algún texto<br />
algún texto<br />
gecko@Leap-PC:~/Documentos> mkdir dir2<br />
gecko@Leap-PC:~/Documentos> cp fichero2.txt dir2/<br />
gecko@Leap-PC:~/Documentos> ls dir2/<br />
fichero2.txt<br />
gecko@Leap-PC:~/Documentos> cp dir2 dir3<br />
cp: -r no especificado; omitiendo directorio 'dir2'<br />
gecko@Leap-PC:~/Documentos> cp dir2 dir3 -r<br />
gecko@Leap-PC:~/Documentos> ls<br />
acceso_directo_a_script.sh dir1 dir2 dir3 enlace_script.sh fichero1.txt fichero2.txt<br />
gecko@Leap-PC:~/Documentos> ls dir3/<br />
fichero2.txt<br />
</syntaxhighlight><br />
{{Info|Cuando autocompletas con el tabulador se incluirá el separador '''/'''. El comando cp no actúa direfente con o sin barra de dividir, pero otros comandos que se verán a continuación pueden proporcionar resultados imprevistos.}}<br />
{{Info|La mayoría de comandos aceptarán las opciones más o menos en cualquier lugar. Por ejemplo, <syntaxhighlight lang="bash" inline>ls -l dir1/ -a</syntaxhighlight> funcionará correctamente}}.<br />
<br />
==== Copia con rsync ====<br />
'''rsync''' es una versión ''moderna'' de cp, pero especializada en la copia a través de sistemas de ficheros en red e incluso mediante '''ssh'''. Tiene montones de opciones, muchas de las cuales dependen de qué se esté haciendo. Por ejemplo, -va hace una copia completa (recursiva, incluyendo enlaces, permisos...) mostrando lo que se está copiando. y -z habilita la compresión de lo que se copia (útil para copiar por la red).<br />
<br />
Una de las particularidades de rsync es su habilidad para hacer ''copias incrementales''. Una copia incremental consiste en que cada vez que copias dos cosas, sólo copias aquellas cosas que han cambiado desde la última vez.<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> rsync -va dir2/ dir1/<br />
sending incremental file list<br />
./<br />
fichero2.txt<br />
<br />
sent 143 bytes received 38 bytes 362.00 bytes/sec<br />
total size is 13 speedup is 0.07<br />
gecko@Leap-PC:~/Documentos> ls dir1<br />
fichero2.txt<br />
gecko@Leap-PC:~/Documentos> echo "otro fichero más" >> dir2/fichero3.txt<br />
gecko@Leap-PC:~/Documentos> rsync -va dir2/ dir1/<br />
sending incremental file list<br />
./<br />
fichero3.txt<br />
<br />
sent 173 bytes received 38 bytes 422.00 bytes/sec<br />
total size is 31 speedup is 0.15<br />
gecko@Leap-PC:~/Documentos> ls dir1<br />
fichero2.txt fichero3.txt<br />
</syntaxhighlight><br />
<br />
==== Copia con dd ====<br />
'''dd''' es una utilidad para copiar ficheros ''bit a bit'' y que se utiliza principalmente para hacer copias exactas de imágenes de discos (clones). Por ejemplo, podrías clonar tu partición /dev/sda2 en un fichero llamado sda2.img de la siguente forma: <syntaxhighlight lang="bash" inline>dd if=/dev/sda2 of=sda2.img</syntaxhighlight>.<br />
<br />
Usar ''dd'' para copiar tus ficheros de un lugar a otro es un poco como matar moscas con misiles. Funciona, pero en general será más sencillo usar ''cp'' o ''rsync''. Para hacer una copia de ''fichero2.txt'' podríamos usar el comando:<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> dd if=fichero2.txt of=fichero3.txt<br />
gecko@Leap-PC:~/Documentos> cat fichero3.txt <br />
algún texto<br />
</syntaxhighlight><br />
<br />
<br />
==== Copia con cat ====<br />
Muchas de las cosas que se pueden hacer en un terminal son en realidad ''efectos secundarios''. Por ejemplo, el comando ''touch'' permite actualizar la hora de modificación de un fichero, pero su efecto secundario es que si no existe el fichero, lo crea con la fecha de modificación actualizada. Así que es ampliamente usado para crear ficheros vacíos.<br />
<br />
''cat'' muestra por pantalla el contenido de un fichero. Si redirigimos esta salida a un nuevo fichero, existente o no, tendremos una copia:<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> cat fichero1.txt > nuevo_fichero1.txt<br />
gecko@Leap-PC:~/Documentos> cat nuevo_fichero1.txt <br />
algún texto<br />
</syntaxhighlight><br />
<br />
Podemos indicar un fichero, varios usando comodines, o una lista de ellos. La salida será mostrada en pantalla, la de cada fichero a continuación del anterior. Eso nos permite una forma sencilla de ''concatenar'' o ''unir'' ficheros:<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> cat fichero?.txt > nuevo_fichero_enésimo.txt<br />
gecko@Leap-PC:~/Documentos> ls<br />
acceso_directo_a_script.sh dir1 dir2 dir3 enlace_script.sh fichero1.txt fichero2.txt fichero3.txt nuevo_dir nuevo_fichero1.txt nuevo_fichero_enésimo.txt<br />
gecko@Leap-PC:~/Documentos> cat nuevo_fichero_enésimo.txt <br />
algún texto<br />
algún texto<br />
algún texto<br />
</syntaxhighlight><br />
<br />
==== Mover y renombrar con mv ====<br />
'''mv'' permite mover ficheros y directorios de una ubicación a otra.<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> mv nuevo_fichero_enésimo.txt dir1/<br />
gecko@Leap-PC:~/Documentos> ls <br />
acceso_directo_a_script.sh dir1 dir2 dir3 enlace_script.sh fichero1.txt fichero2.txt fichero3.txt nuevo_dir nuevo_fichero1.txt<br />
gecko@Leap-PC:~/Documentos> ls dir1/<br />
fichero2.txt fichero3.txt nuevo_fichero_enésimo.txt<br />
</syntaxhighlight><br />
<br />
Y también permite renombrar ficheros y directorios:<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> mv dir1 directorio1<br />
gecko@Leap-PC:~/Documentos> ls<br />
acceso_directo_a_script.sh dir2 dir3 directorio1 enlace_script.sh fichero1.txt fichero2.txt fichero3.txt nuevo_dir nuevo_fichero1.txt<br />
</syntaxhighlight><br />
<br />
Esto puede ser un tanto confuso para el usuario recién llegado (y para el no tan reciente). Si existe el destino, mv moverá el origen al interior del destino:<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> mv dir2 dir3<br />
gecko@Leap-PC:~/Documentos> ls dir3<br />
dir2 fichero2.txt<br />
</syntaxhighlight><br />
<br />
Si existe un directorio con el nombre indicado en el destino, mv moverá el origen al directorio destino. Pero si renombras un fichero con el nombre de un fichero existente, ¡lo sobrescribirá!!<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> mv enlace_script.sh fichero1.txt<br />
gecko@Leap-PC:~/Documentos> ls<br />
acceso_directo_a_script.sh dir3 directorio1 fichero1.txt fichero2.txt fichero3.txt nuevo_dir nuevo_fichero1.txt<br />
gecko@Leap-PC:~/Documentos> cat fichero1.txt<br />
#!/bin/bash<br />
<br />
echo "Hola mundo"<br />
echo y más allá!<br />
</syntaxhighlight><br />
<br />
== Carpetas ==<br />
En Linux se utiliza una aproximación interesante al concepto de carpeta. Algunos directorios contienen un fichero especial y oculto denominado ''.directory'', que permite establecer configuraciones generales al utilizarse con ciertas aplicaciones.<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> cat .directory<br />
[Dolphin]<br />
PreviewsShown=true<br />
SortOrder=1<br />
SortRole=modificationtime<br />
Timestamp=2022,3,1,19,58,21<br />
Version=4<br />
<br />
[Settings]<br />
HiddenFilesShown=false<br />
</syntaxhighlight><br />
<br />
En este fichero de texto de configuración, los corchetes se usan para delimitar apartados. El primer apartado corresponde al gestor de ficheros [[Dolphin]]. Por ejemplo, indica que se muestren las previsualizaciones de los ficheros que contenga y la forma de ordenación al mostrar el contenido. El apartado Settings establece que cada vez que se muestre su contenido no se incluyan los ficheros ocultos.<br />
<br />
== Comodines ==<br />
En Bash puedes usar un montón de comodines y abreviaturas. Por ejemplo, un asterisco '''*''' sustituye a cualquier conjunto de caracteres, mientras que un interrogante '''?''' sustituye a un caracter. Por ejemplo:<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> ls dir?<br />
dir1:<br />
<br />
dir2:<br />
fichero2.txt<br />
<br />
dir3:<br />
fichero2.txt<br />
gecko@Leap-PC:~/Documentos> cp * dir1<br />
cp: cannot stat 'acceso_directo_a_script.sh': Non hai tal ficheiro ou directorio<br />
cp: -r no especificado; omitiendo directorio 'dir1'<br />
cp: -r no especificado; omitiendo directorio 'dir2'<br />
cp: -r no especificado; omitiendo directorio 'dir3'<br />
gecko@Leap-PC:~/Documentos> ls dir1<br />
enlace_script.sh fichero1.txt fichero2.txt<br />
gecko@Leap-PC:~/Documentos> rm dir1/*<br />
gecko@Leap-PC:~/Documentos> ls dir1/<br />
gecko@Leap-PC:~/Documentos><br />
</syntaxhighlight><br />
<br />
== Conectores de comandos ==<br />
Una de las cosas que hacen tan útiles a los terminales de comando son las distintas formas de interconectar unos comandos con otros.<br />
<br />
Por ejemplo, puedes ejecutar un comando de forma condicionada a la ejecución de otro. Con && la condición es "si el comando ha sido válido" y con || la condición es "en cualquier caso". Por ejemplo:<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> mkdir nuevo_dir && cd nuevo_dir && touch hola.txt && cd ..<br />
gecko@Leap-PC:~/Documentos> ls nuevo_dir/<br />
hola.txt<br />
gecko@Leap-PC:~/Documentos> mkdir nuevo_dir || cd nuevo_dir && touch nuevo_hola.txt && cd ..<br />
mkdir: no se puede crear el directorio "nuevo_dir": El fichero ya existe<br />
gecko@Leap-PC:~/Documentos> ls nuevo_dir/<br />
hola.txt nuevo_hola.txt<br />
</syntaxhighlight><br />
El segundo mkdir falla en su ejecución porque ya existe un directorio con ese nombre. Como la condición es ''O'', la doble barra, los comandos siguientes se ejecutan. Si hubiera usado la condición ''Y'', el doble ampersand, la ejecución se habría detenido ahí.<br />
<br />
Otra forma de encadenar comandos es con tuberías. En la sección [[#Ficheros regulares]] se ha empleado una tubería ''>''. Esta tubería hace que el resultado de ejecutar un comando, en aquel caso ''cat'', sea introducido en el fichero que hay a su derecha. Literalmente, ''cat > fichero.txt'' hace que lo que vamos escribiendo en la pantalla sea enviado al fichero ''fichero.txt''. Menos usual es la redirección inversa ''<''. Esto hace que lo que está a la derecha sea enviado a lo que está a la izquierda.<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> cat < fichero1.txt <br />
algún texto<br />
gecko@Leap-PC:~/Documentos> echo "más cosas" >> fichero1.txt<br />
gecko@Leap-PC:~/Documentos> cat fichero1.txt <br />
algún texto<br />
más cosas<br />
</syntaxhighlight><br />
Si usas un sólo signo ''>'' el resultado del comando de la izquierda sobrescribirá el fichero. Si usas dos signos ''>>'', el resultado se añadirá al final.<br />
<br />
Otra tubería popular es la barra vertical '''|''', que permite que el resultado de ejecutar un comando con el resultado de otro comando. Por ejemplo, para buscar ficheros que contengan ''icher'' en su nombre, normalmente bastaría con ls *icher*, pero también podemos hacer eso como ejemplo:<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> ls *icher*<br />
fichero1.txt fichero2.txt<br />
gecko@Leap-PC:~/Documentos> ls | grep icher<br />
fichero1.txt<br />
fichero2.txt<br />
</syntaxhighlight><br />
<br />
'''grep''' por defecto resaltará la cadena (conjunto de letras y signos) buscada. Por sí mismo es un comando que permite buscar cadenas de texto en ficheros de texto. Por ejemplo, para buscar qué fichero contiene la palabra algún:<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> grep algún *<br />
grep: acceso_directo_a_script.sh: No existe tal fichero o directorio<br />
grep: dir1: Es un directorio<br />
grep: dir2: Es un directorio<br />
grep: dir3: Es un directorio<br />
fichero1.txt:algún texto<br />
fichero2.txt:algún texto<br />
grep: nuevo_dir: Es un directorio<br />
</syntaxhighlight><br />
<br />
Y con frecuencia se utiliza para hacer búsquedas en la salida de algún comando que proporcione un resultado largo. Por ejemplo, el comando '''ps''' lista los procesos en ejecución y es común listarlos con las opciones -aux. Para buscar el proceso konsole, podemos hacer lo siguiente:<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> <br />
ps aux | grep konsole<br />
gecko 2549 0.0 1.0 694400 85380 ? Sl 18:18 0:02 /usr/bin/konsole -session 10137156d2e4000164613515200000032360018_1646241240_34218<br />
gecko 16848 0.0 0.0 10256 2456 pts/2 S+ 19:05 0:00 grep --color=auto konsole<br />
</syntaxhighlight><br />
<br />
Los conectores no necesitan tener espacios en blanco alrededor, pero es buena idea para hacerlo más legible. En ese sentido, <syntaxhighlight lang="bash" inline>echo "hola" > fichero.txt</syntaxhighlight> es exactamente igual a <syntaxhighlight lang="bash" inline>echo "hola">fichero.txt</syntaxhighlight><br />
<br />
== Notas ==<br />
# <cite id="nota1">En cualquier sistema gráfico pueden encontrarse estas aplicaciones buscando ''terminal''.</cite><br />
# <cite id="nota2">Linux distingue mayúsculas de minúsculas y es buena idea asumir que cualquier intérprete de comandos hará lo propio, aunque hay excepciones como algunos lenguajes de bases de datos, por ejemplo. En Bash, es diferente '''nombre''' de '''Nombre''' o de '''NOMBRE'''.</cite><br />
# <cite id="nota3">Salvo en el caso de que existan otras carpetas que comiencen por Doc, como por ejemplo ''Documentanción''.</cite><br />
# <cite id="nota4">Para aprender sobre el uso de permisos de ficheros, consulta la guía [[SDB:Fundamentos del sistema de permisos|Fundamentos del sistema de permisos]] </cite><br />
# <cite id="nota4">Los scripts suelen traducirse literalmente como ficheros de guiones o en otras ocasiones como ficheros por lotes. Ambas expresiones hacen referencia al hecho de que ejecutan tareas de una en una.<br />
<br />
<br />
[[Category:SDB:Guía de principiantes]]<br />
[[Category:Conceptos|Uso básico del terminal]]</div>Karlggesthttps://es.opensuse.org/index.php?title=SDB:Funtamentos_de_bash&diff=28387SDB:Funtamentos de bash2024-01-24T09:59:20Z<p>Karlggest: /* Copia con cp */</p>
<hr />
<div>{{Barra de navegación para Conceptos}}<br />
<br />
{{Conocimiento básico<br />
|<br />
*[[Conceptos interfaz]]<br />
|<br />
*[https://es.wikipedia.org/wiki/Bash Bash]<br />
*[https://es.wikipedia.org/wiki/Shell_de_Unix Shell de Unix]<br />
*[https://es.wikipedia.org/wiki/Interfaz_de_l%C3%ADnea_de_comandos Interfaz de línea de comandos]<br />
}}<br />
== Introducción ==<br />
Aunque es posible usar un sistema operativo cualquiera con éxito sin usar jamás un terminal de comandos, lo cierto es que conocer su uso básico favorece el aprendizaje de algunos conceptos. El ámbito de este documento es orientar al usuario en el uso de comandos básicos que le servirán para dicho aprendizaje. Para aquellas personas usuarias interesadas en aprender un mejor uso del terminal se recomienda consultar obras más detalladas sobre Bash y en particular sobre su programación.<br />
<br />
== El intérprete ==<br />
El ''shell'' '''bash''', que es el que acompaña por defecto a la mayoría de distribuciones de Linux, es lo que se denomina ''un intérprete de comandos''. Eso significa que la persona usuaria interactúa con el sistema proporcionando comandos determinados que el intérprete procesa.<br />
<br />
Los escritorios gráficos de Linux proporcionan aplicaciones que permiten utilizar el intérprete de comandos desde la propia sesión gráfica. El escritorio Plasma proporciona [https://konsole.kde.org/ konsole] para esta labor[[#nota1|[1]]].<br />
<br />
El terminal en el que ejecutamos bash es una pantalla o ventana de texto. El intérprete proporciona un ''prompt''. Por defecto, en openSUSE está formado de la siguiente manera:<br />
<syntaxhighlight lang="bash"><br />
usuario@máquina:~><br />
</syntaxhighlight><br />
* ''usuario'' es tu nombre como usuaria.<br />
* ''@'' es un separador de forma similar a las direcciones de correo-e.<br />
* ''máquina'' es el nombre que le hayas asignado a tu máquina. Normalmente el sistema asigna un nombre más o menos arbitrario durante la instalación, pero puedes cambiárselo.<br />
* '':'' es otro separador.<br />
* ''~'' es una abreviatura para representar tu carpeta personal. Normalmente, a medida que te ''mueves'' por el árbol de directorios, esto se sustituye por tu ubicación actual.<br />
* ''>'' es otro separador.<br />
<br />
Cuando está visible este prompt en la última línea, significa que puedes introducir un comando. Por ejemplo, puedes ejectuar konsole o el terminal de tu escritorio gráfico, e introducir el siguiente comando para saber la ruta hasta donde estás:<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~> pwd<br />
/home/gecko<br />
gecko@Leap-PC:~> <br />
</syntaxhighlight><br />
Al ejecutar konsole se ejecutará automáticamente el intérprete de comandos que tengas configurado y que por defecto en openSUSE es Bash.<br />
<br />
{{Info|El uso del escritorio desarrollado por Microsoft para su sistema operativo Windows ha extendido el uso del término ''folder'' (carpeta) en lugar de ''directory'' (directorio) y en mi opinión está bien. Es una metáfora muy visual: ''guarda ese fichero en la carpeta del proyecto''. No obstante, en el mundo del terminal suele usarse ''directorio'' y de hecho la nemotecnia de los comandos empuja a ello: '''''c'''hange '''d'''irectory'' (cambiar directorio) para el comando cd, que permite justamente acceder a un directorio. No hay nada malo en usar ''carpeta'', pero la mayoría de textos que leas sobre el terminal emplearán ''directorio''. Consulta la sección [[#Carpetas|Carpetas]] para ver las diferencias.}}<br />
<br />
Los comandos del sistema tienen una página de manual que por desgracia no se ha traducido en años y que rara vez tendremos en castellano. Sin embargo, los comandos que ejecutaremos aquí son muy sencillos y pueden entenderse facilmente en inglés. Si deseas ver información del comando en castellano, puedes usar un buscador web con ''man comando español''. Por ejemplo, [https://duckduckgo.com/?q=man+pwd+espa%C3%B1ol&t=ffab&ia=web man pwd español].<br />
<br />
El prompt suele incluir, y en openSUSE es así por defecto, el nombre como usuaria del sistema. Pero esto no es así para la cuenta administradora (root), que se resalta en rojo, o puede que se haya establecido otra configuración. En cualquier caso, hay un comando para comprobar qué cuenta usuaria estás utilizando en ese momento: whoami, en inglés, literalmente, ¿quién soy?<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~> whoami<br />
gecko<br />
gecko@Leap-PC:~> <br />
</syntaxhighlight><br />
{{Info|En una sesión gráfica, el terminal en el que ejecutas bash, como konsole, se denomina ''terminal virtual''. Una ''verdadera'' sesión con el intérprete de comandos requiere hacerlo en modo texto y comenzará con el login, en el que se ha de introducir el nombre y la contraseña. En este documento se asume el uso de un terminal virtual, normalmente konsole.}}<br />
<br />
La sesión con el intérprete bash concluye al ejecutar el comando '''exit''' o bien al cerrar konsole.<br />
<br />
Es posible ejecutar distintos intérpretes de comandos dentro de una sesión con bash, incluso el propio bash. De hecho, eso es lo que sucede cuando se cambia de usuario con el comando '''su''' y el ''modificador'' '''-''':<br />
<pre><br />
gecko@Leap-PC:~> su -<br />
</pre><br />
<pre style="color: red"><br />
Leap-PC:~ #<br />
</pre><br />
<br />
El símbolo # es habitual en el prompt del administrador. Hay mucha documentación donde el verás que el símbolo $ corresponde a las cuentas usuarias regulares, y # al administrador, y se omite el resto del prompt, de esta forma:<br />
<syntaxhighlight lang="bash"><br />
$ whoami<br />
tux<br />
</syntaxhighlight><br />
<pre><br />
# whoami<br />
root<br />
</pre><br />
<br />
=== Procesos ===<br />
Aunque la idea de usar un intérprete de comandos es interactuar con el sistema mediante los susodichos comandos, en muchas ocasiones será interesante ejecutar un comando y dejar que se ejecute ''en segundo plano'' hasta que finalice. Por ejemplo, el comando cp que se verá en la sección [[#Copia con cp]] puede ejecuarse en segundo plano añadiendo el símbolo ampersand al final del comando:<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~> cp -r un_directorio_con_muchos_ficheros otra_carpeta &<br />
gecko@Leap-PC:~> <br />
</syntaxhighlight><br />
<br />
En lugar de mostrar el proceso del comando, inmediatamente devuelve el ''prompt'' para poder seguir introduciendo comandos. Es posible que a veces el comando en ejecución muestre de todas formas qué está haciendo, pero incluso así seguiremos teniendo el control del prompt para introducir otros comandos.<br />
<br />
En ocasiones podrá suceder que ejecutamos comandos largos sin el ampersand y nos vemos en la necesidad de interrumpirlo para ejecutar otros comandos distintos. Eso lo podemos hacer pulsando CTRL+C (la combinación general para interrumpir un comando).<br />
<br />
También es posible que querramos pasar a segundo plano el comando, lo que podemos hacer pulsando CTRL+Z. Eso normalmente detendrá la ejecución de ese comando y nos dará el control del ''prompt''. Para continuar con la ejecución del programa detenido, ejecutaremos el comando '''fg'''.<br />
<br />
'''kill''' es un comando que nos permite enviar señales a un comando que esté en ejecución. Esas señales pueden ser, por ejemplo, detenerse, o directamente matarse (interrumpirse por completo), y en general se emplea pasando la opción numérica correspondiente (9 para matar un proceso, 15 para detenerlo). '''killall''' permite matar procesos pero indicando el nombre del proceso, en lugar de su número de proceso (UID). ''ps'' es un comando que lista los procesos en ejecución.<br />
<br />
=== Uso de intérpretes de comandos en bash ===<br />
Hay muchos lenguajes de programación y aplicaciones específicas que proporcionan intérpretes de comandos: bases de datos, calculadoras, lenguajes interpretados... Si aun estás en la sesión con el administrador (prompt en rojo acabado en #), escribe '''exit''' para volver a la sesión de usuario y ejecuta la ''calculadora integrada'' con el comando '''bc''' (ejecuta '''man bc''' para aprender más sobre ella):<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~> bc<br />
bc 1.07.1<br />
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006, 2008, 2012-2017 Free Software Foundation, Inc.<br />
This is free software with ABSOLUTELY NO WARRANTY.<br />
For details type `warranty'. <br />
<br />
</syntaxhighlight><br />
'''bc''' no usa prompt y puedes escribir las expresiones a calcular directamente. Por ejemplo, para calcular la suma 5+3 basta con escribirlo y pulsar ''intro'':<br />
<syntaxhighlight lang="bash"><br />
5+3<br />
8<br />
</syntaxhighlight><br />
Para salir, basta con escribir '''quit''' (quitar el programa):<br />
<syntaxhighlight lang="bash"><br />
quit<br />
gecko@Leap-PC:~> <br />
</syntaxhighlight><br />
<br />
== Moviéndote por el árbol de directorios ==<br />
Cada directorio, salvo la raíz, contiene dos ficheros especiales, denominados '''.''' (punto) y '''..''' (dos puntos). El fichero '''.''' hace referencia al directorio actual y el fichero '''..''' hace referencia al directorio anterior o ''padre''.<br />
<br />
Para poder desplazarte por los directorios del sistema tienes el comando '''cd''' (change directory). Al comando le proporcionas el lugar al que quieres desplazarte, de la siguiente forma:<br />
* <syntaxhighlight lang="bash" inline>cd ruta_directorio</syntaxhighlight> te desplaza al directorio de nombre ruta_directorio<br />
* <syntaxhighlight lang="bash" inline>cd ..</syntaxhighlight> te desplaza al directorio padre del actual.<br />
* <syntaxhighlight lang="bash" inline>cd .</syntaxhighlight> no tiene efecto porque te desplaza al directorio actual.<br />
<br />
El signo / se emplea como separador entre directorios con el significado ''padre de''. En ''dir_padre''/''dir_hijo'', ''dir_hijo'' es un directorio que está ''dentro'' de ''dir_padre'', de forma que ''dir_padre'' es el directorio ''padre'' de ''dir_hijo''.<br />
<br />
Dado que el directorio raíz '''root''' no tiene padre, se representa únicamente con la barra espaciadora. De esta forma, para desplazarnos desde cualquier lugar hasta el directorio raíz, basta con ejecutar:<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~> cd /<br />
gecko@Leap-PC:/><br />
</syntaxhighlight><br />
<br />
Existen dos tipos de rutas a directorio: las rutas que incluyen toda la ruta desde el directorio raíz, llamadas '''rutas absolutas''' y las rutas que incluyen un origen en un directorio dado, llamadas '''rutas relativas'''. Normalmente las rutas relativas comenzarán en un directorio dentro de nuestro directorio actual.<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:/> cd /home/gecko<br />
gecko@Leap-PC:~> <br />
</syntaxhighlight><br />
<br />
El comando '''cd /home/gecko''' nos devuelve al directorio del usuario gecko. Por su parte<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~> cd Documentos<br />
gecko@Leap-PC:~/Documentos><br />
</syntaxhighlight><br />
<br />
Nos lleva al directorio ''Documentos'' dentro del directorio del usuario gecko. En ese punto, para volver al directorio del usuario tenemos tres opciones:<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> cd ..<br />
gecko@Leap-PC:~> <br />
</syntaxhighlight><br />
<syntaxhighlight lang="bash"><br />
<br />
O bien<br />
gecko@Leap-PC:~/Documentos> cd<br />
gecko@Leap-PC:~> <br />
</syntaxhighlight><br />
O bien<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> cd ~<br />
gecko@Leap-PC:~> <br />
</syntaxhighlight><br />
<br />
Usar cd sin argumentos te llevará siempre al directorio de usuario. Por su parte, la virgulilla es una abreviatura de bash y significa el directorio del usuario. Puede utilizarse de forma absoluta, formando rutas como ~/Documentos, o bien como atajo con el comando '''cd'''. Esto permite que, por ejemplo, para cambiar desde Documentos hasta Descargas, puedas ejecutar:<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> cd ~/Descargas<br />
gecko@Leap-PC:~/Descargas> <br />
</syntaxhighlight><br />
<br />
Bash tiene un montón de atajos y facilidades, y la instalación por defecto de openSUSE Leap añade muchos más. Por ejemplo, dentro de Descargas escribe: '''cd ../''' y pulsa la tecla tabulador (TAB) un par de veces:<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Descargas> cd ../<br />
</syntaxhighlight><br />
Pulsa el tabulador dos veces, y verás lo siguiente (puede haber otros directorios en tu sistema):<br />
<syntaxhighlight lang="bash"><br />
.cache/ .config/ Descargas/ Documentos/ Escritorio/ Imaxes/ .local/ logs/ Modelos/ Música/ Público/ Vídeos/<br />
</syntaxhighlight><br />
<br />
Al pulsar el tabulador, bash trata de autocompletar la ruta desde el texto que hayas escrito justo antes. ../ significa ''desde el directorio anterior'' y te proporcionará todas las opciones. Si escribes una '''D''' mayúscula[[#nota2|[2]]] y vuelves a pulsar el tabulador, te ofrecerá todas las opciones que comienzan con D (Documentos y Descargas, salvo que tengas algún directorio más en tu sistema que también empiece por D).<br />
<br />
Esta forma de ''autocompletar'' es muy cómoda, pero tiene sus cosas. Si pulsas una vez el tabulador, sólo funcionará si hay una sola opción disponible. Por ejemplo, <syntaxhighlight lang="bash" inline>cd ../Doc</syntaxhighlight> se autocompletará como <syntaxhighlight lang="bash" inline>cd ../Documentos/</syntaxhighlight>[[#nota3|[3]]]. Si no hay una única opción, ''volver'' a pulsarlo mostrará todas las opciones disponibles que coincidan con ese patrón. Si tienes un directorio llamado ''Proyectos'' dentro de ''Documentos'', puedes hacer lo siguiente para acceder a él: cd ~/Do<tabulador>Pr<tabuldador> (escribir cd, espacio, virguilulla, barra de división, Do, tabulador, Pr, tabulador. Lo cual irá autocompletando cd ~/Documentos/Proyectos. Una vez tienes todo el comando, basta con pulsar '''intro''' para ejecutar el comando.<br />
<br />
== Trabajando con ficheros ==<br />
Desde el punto de vista de Linux, cualquier cosa que no sea la red, es un fichero. Según el cometido de ese fichero, puede ser de diferentes tipos:<br />
* Ficheros regulares.<br />
** Ficheros de texto.<br />
** Ficheros binarios.<br />
** Directorios.<br />
* Enlaces blandos.<br />
* Enlaces duros.<br />
* Dispositivos.<br />
** de bloques.<br />
** de caracteres.<br />
<br />
=== Listar ficheros ===<br />
El comando usual para listar el contenido de un directorio, y ver así qué ficheros o directorios contiene, es '''ls'''.<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> ls<br />
script.sh<br />
</syntaxhighlight><br />
<br />
'''ls''' es un comando que admite un buen montón de argumentos. Los más habituales son:<br />
* l para visualizar un ''listado largo'', que incluye información de cada fichero o directorio tal como su propietario y permisos.<br />
* d para listar el directorio en lugar de su contenido. Es común usarlo con el argumento l.<br />
* a para listar los ficheros incluyendo los ficheros ocultos. En Linux, un fichero está oculto cuando su nombre comienza por . (punto).<br />
<br />
Para usar estas opciones, ls ha de ir seguida por el carácter guión '''-''', por ejemplo, para obtener un listado largo:<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> ls -l<br />
-rw-r--r-- 1 gecko users 31 Mar 1 17:51 script.sh<br />
</syntaxhighlight><br />
<br />
Aunque es posible poner cada opción con su propio guión, lo habitual es agruparlos. Así, los siguientes dos comandos tienen el mismo resultado:<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> ls -l -a<br />
total 12<br />
drwxr-xr-x 2 gecko users 22 Mar 1 18:29 .<br />
drwxr-xr-x 14 gecko users 4096 Mar 1 18:28 ..<br />
-rw------- 1 gecko users 105 Abr 14 2021 .directory<br />
-rw-r--r-- 1 gecko users 31 Mar 1 17:51 script.sh<br />
gecko@Leap-PC:~/Documentos> ls -la<br />
total 12<br />
drwxr-xr-x 2 gecko users 22 Mar 1 18:29 .<br />
drwxr-xr-x 14 gecko users 4096 Mar 1 18:28 ..<br />
-rw------- 1 gecko users 105 Abr 14 2021 .directory<br />
-rw-r--r-- 1 gecko users 31 Mar 1 17:51 script.sh<br />
</syntaxhighlight><br />
<br />
En el listado largo, cada fichero ocupa una fila. El primer grupo de caracteres empezará por d si es un directorio, - si es un fichero regular, b para un dispositivo de bloques, l para enlaces, b para dispositivos de bloques y c para dispositivos de caracteres.<br />
<br />
=== Ficheros regulares ===<br />
Los ficheros de texto contienen caracteres de texto, normalmente en código ASCII. En Linux son ampliamente usados, por ejemplo de forma preferente para los ficheros de configuración de casi cualquier elemento. Por su parte, los ficheros binarios tienen un contenido binario definido en función del tipo de fichero concreto. Los directorios son un tipo de fichero especial que permiten organizar los ficheros almacenados en el sistema de forma más adecuada para el uso por parte del usuario.<br />
<br />
Para que un fichero regular sea ejecutable ha de cumplir con dos requisitos: tener permiso de ejecución para el usuario que quiere ejecutarlo[[#nota4|[4]]], y contener código ejecutable de alguna clase. Por ejemplo, pwd es un fichero regular binario:<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> file /usr/bin/pwd<br />
/usr/bin/pwd: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=5d7ba8d4e2d3bda8835aaf230b257e55009d8f1a, for GNU/Linux 3.2.0, stripped<br />
</syntaxhighlight><br />
Podemos probar qué sucede si creamos un sencillo ''script''[[#nota5|[5]]], que son ficheros de texto que contienen código de algún lenguaje interpretado, incluido bash. Para ello usaremos el comando '''cat''' (que permite leer ficheros de texto) de una forma particular. Una vez que introduzcas cat > script y pulses intro, podrás introducir las líneas de una en una (pulsando intro en cada una, incluso en las vacías). Una vez acabado, después de "Hola mundo!", pulsa la combinación '''CTRL+D''':<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> cat > script.sh <br />
#!/bin/bash<br />
<br />
echo "Hola mundo!"<br />
gecko@Leap-PC:~/Documentos> file script.sh<br />
script.sh: Bourne-Again shell script, ASCII text executable<br />
</syntaxhighlight><br />
<br />
'''Bourne-Again shell''' es el nombre completo de Bash, y literalmente dice que es un fichero que contiene un script de bash escrito con texto ASCII y que es ejecutable.<br />
<br />
Para ejecutarlo no se requieren permisos de ejecución, basta con emplear algún intérprete de comandos adecuado, en este caso, bash.<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> bash script.sh <br />
Hola mundo<br />
gecko@Leap-PC:~/Documentos> sh script.sh<br />
Hola mundo<br />
gecko@Leap-PC:~/Documentos> <br />
</syntaxhighlight><br />
<br />
'''sh''' es otro atajo, en esta ocasión nombra al intérprete de comandos configurado en nuestro sistema. En la instalación por defecto de openSUSE será bash, pero hay muchos más.<br />
<br />
==== Enlaces duros ====<br />
Los enlaces '''duros''' han perdido popularidad con el auge de los escritorios gráficos. La idea es que las ''entradas de directorio'' son una forma de organizar los ficheros ''para los usuarios'' de la computadora. No existe ningún área de ningún disco que se delimite para formar una carpeta y guardar ficheros ''dentro'' de esa área. El sistema operativo utiliza distintos procedimientos para establecer dónde guarda cada fichero. Dicho fichero ni siquiera tiene por qué estar todo junto, sino que es posible que esté repartido en fragmentos a lo largo del disco. Cada tipo de sistema de ficheros, sea btrfs, ext4, xfs, etc., lo hace de una forma diferente.<br />
<br />
De cara al usuario, los ficheros se guardan formando una jerarquía que permite relacionar los ficheros entre sí. Cuando operas con una entrada de un directorio dado, el sistema la traduce a la ubicación real del fichero y hace aquello que se haya indicado. Puedes pensar que cada entrada de directorio correspondiente a un fichero es un enlace entre ese fichero y el lugar real donde ser almacena el fichero. Así, cuando ejecutas ''cat script.sh'' el sistema consulta la entrada de script.sh y recupera el fichero real para mostrar su contenido por pantalla. En ese sentido, ''todos'' los ficheros regulares ''son'' enlaces ''duros''.<br />
<br />
Recuerda que los enlaces simbólicos son ficheros que contienen una ubicación. En ese sentido ''acceso directo a fichero'' (o directorio) es un nombre un poco más adecuado. En cambio, la herramienta para crear enlaces duros es la misma: '''ln''', pero sin opciones. La sintaxis es la misma: ln fichero enlace<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> ln script.sh enlace_script.sh<br />
gecko@Leap-PC:~/Documentos> ls -l<br />
total 8<br />
lrwxrwxrwx 1 gecko users 9 Mar 1 18:40 acceso_directo_a_script.sh -> script.sh<br />
-rw-r--r-- 2 gecko users 31 Mar 1 17:51 enlace_script.sh<br />
-rw-r--r-- 2 gecko users 31 Mar 1 17:51 script.sh<br />
</syntaxhighlight><br />
<br />
Como puedes observar, ahora hay un fichero llamado ''enlace_script.sh'' que es aparentemente igual a ''script.sh''. Podríamos ejecutarlo con bash o leer su contenido con cat para comprobar que son iguales, aunque eso no diferencia un enlace duro de un enlace simbólico. Pero si te fijas en el listado obtenido con ls -l, verás que en la columna que va antes del nombre del usuario propietario del fichero, en lugar de un 1 como teníamos hasta ahora, hay un 2. Ese número representa el número de enlaces duros que tiene ese fichero: por defecto es 1, porque, como ya se ha dicho, ''todos'' los ficheros son en realidad enlaces duros de sí mismos.<br />
<br />
Un uso habitual de los enlaces de cualquier tipo es hacer accesible el fichero como si formara parte de otro directorio. El comando '''mkdir''' (''make directory'', crear directorio) permite crear directorios.<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> mkdir carpeta<br />
gecko@Leap-PC:~/Documentos> ln script.sh carpeta/script.sh<br />
gecko@Leap-PC:~/Documentos> ls -l<br />
total 8<br />
lrwxrwxrwx 1 gecko users 9 Mar 1 18:40 acceso_directo_a_script.sh -> script.sh<br />
drwxr-xr-x 2 gecko users 22 Mar 1 19:09 carpeta<br />
-rw-r--r-- 3 gecko users 31 Mar 1 17:51 enlace_script.sh<br />
-rw-r--r-- 3 gecko users 31 Mar 1 17:51 script.sh<br />
gecko@Leap-PC:~/Documentos> ls -l carpeta/<br />
total 4<br />
-rw-r--r-- 3 karl users 31 Mar 1 17:51 script.sh<br />
</syntaxhighlight><br />
<br />
Ahora los tres ficheros, script.sh, enlace_script y carpeta/script.sh tienen un 3 en el número de enlaces duros. Como cada uno ''apunta'' al contenido del fichero en sí, cada entrada puede ser movida, renombrada o incluso eliminada sin afectar al resto de enlaces.<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> rm script.sh<br />
gecko@Leap-PC:~/Documentos> ls -l<br />
total 4<br />
lrwxrwxrwx 1 karl users 9 Mar 1 18:40 acceso_directo_a_script.sh -> script.sh<br />
drwxr-xr-x 2 karl users 22 Mar 1 19:09 carpeta<br />
-rw-r--r-- 2 karl users 31 Mar 1 17:51 enlace_script.sh<br />
</syntaxhighlight><br />
<br />
Por un lado, al borrar ''script.sh'' el enlace simbólico vuelve a estar roto. Por otro lado, el 3 en las entradas de los enlaces duros ha sido sustituido con un 2, que es el número de enlaces duros que quedan para el contenido de script.sh. En la práctica, borrar un fichero consiste en tener 0 enlaces duros al mismo.<br />
<br />
Y por supuesto, al modificar el contenido a través de cualquier enlace, obtenemos el mismo resultado con el resto de enlaces duros.<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> echo "echo y más allá!" >> carpeta/script.sh<br />
gecko@Leap-PC:~/Documentos> bash enlace_script.sh<br />
Hola mundo<br />
y más allá!<br />
</syntaxhighlight><br />
<br />
Los enlaces duros no son apropiados para crear enlaces entre ficheros de distintos dispositivos ni entre directorios. Para estos casos, emplea enlaces simbólicos.<br />
<br />
=== Eliminar directorios ===<br />
Los directorios, además de accedidos con el comando cd y creados con el comando mkdir, pueden ser eliminados. Sin embargo, para el sistema no es lo mismo eliminar una entrada de directorio correspondiente a un directorio vacío, que una entrada de directorio correspondiente a un directorio que a su vez tiene ficheros o directorios en su interior.<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> mkdir dir1<br />
gecko@Leap-PC:~/Documentos> ls<br />
acceso_directo_a_script.sh carpeta dir1 enlace_script.sh<br />
gecko@Leap-PC:~/Documentos> rmdir dir1<br />
gecko@Leap-PC:~/Documentos> ls<br />
acceso_directo_a_script.sh carpeta enlace_script.sh<br />
gecko@Leap-PC:~/Documentos> rmdir carpeta<br />
rmdir: error al eliminar 'carpeta': Directorio no vacío<br />
</syntaxhighlight><br />
<br />
Para eliminar directorios que contengan ficheros o directorios, se emplea el comando '''rm -r'''<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> rm -r carpeta/<br />
gecko@Leap-PC:~/Documentos> ls<br />
acceso_directo_a_script.sh enlace_script.sh<br />
</syntaxhighlight><br />
<br />
Sin embargo, rm es un comando para ficheros. rm aplicado a un directorio vacío no funcionará sin el parámetro -r:<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> mkdir dir1<br />
gecko@Leap-PC:~/Documentos> rm dir1<br />
rm: no se puede borrar 'dir1': Es un directorio<br />
</syntaxhighlight><br />
<br />
Tradicionalmente el borrado de ficheros y directorios requería confirmación para cada directorio o fichero borrado. Para evitar tener que responder a la misma pregunta cada vez se solía utilizar el parámentro -f, siendo la forma más común de borrado recursivo '''rm -rf directorio'''. openSUSE por defecto no te pedirá confirmación salvo que cambies la configuración del comando, con lo que rm -r tendrá el mismo efecto que rm -rf.<br />
<br />
=== Copiar y mover ficheros ===<br />
En la sección [[#Enlaces duros]] hemos visto que un mismo fichero puede tener varios enlaces, de tal forma que al eliminar cualquiera de ellos aun permanecerían los demás, y por ende su contenido.<br />
<br />
''Copiar'' un fichero consiste en obtener dos enlaces a dos copias diferentes del mismo fichero. En algunos tipos de sistemas de ficheros modernos en realidad no se hará una copia del fichero hasta que se intente modificar uno de ellos, característica denominada '''cow''' (''copy on write'', copia al modificar). Usar cow o no es una cuestión que atañe al sistema operativo e indistinto desde el punto de vista del usuario. Por su parte, ''mover'' un fichero o directorio implica cambiar su ubicación hasta otro directorio.<br />
<br />
==== Copia con cp ====<br />
La forma más sencilla de obtener una copia de un fichero es con el comando '''cp'''. Su sintaxis es <syntaxhighlight lang="bash" inline>cp origen destino</syntaxhighlight>. No obstante, cp presenta similitudes con rm: no puede copiar directorios, vacíos o no. Para ocuparse de directorios, ha de usarse la opción '''-r'''.<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> echo "algún texto" > fichero1.txt<br />
gecko@Leap-PC:~/Documentos> cp fichero1.txt fichero2.txt<br />
gecko@Leap-PC:~/Documentos> cat fichero1.txt fichero2.txt<br />
algún texto<br />
algún texto<br />
gecko@Leap-PC:~/Documentos> mkdir dir2<br />
gecko@Leap-PC:~/Documentos> cp fichero2.txt dir2/<br />
gecko@Leap-PC:~/Documentos> ls dir2/<br />
fichero2.txt<br />
gecko@Leap-PC:~/Documentos> cp dir2 dir3<br />
cp: -r no especificado; omitiendo directorio 'dir2'<br />
gecko@Leap-PC:~/Documentos> cp dir2 dir3 -r<br />
gecko@Leap-PC:~/Documentos> ls<br />
acceso_directo_a_script.sh dir1 dir2 dir3 enlace_script.sh fichero1.txt fichero2.txt<br />
gecko@Leap-PC:~/Documentos> ls dir3/<br />
fichero2.txt<br />
</syntaxhighlight><br />
{{Info|Cuando autocompletas con el tabulador se incluirá el separador '''/'''. El comando cp no actúa direfente con o sin barra de dividir, pero otros comandos que se verán a continuación pueden proporcionar resultados imprevistos.}}<br />
{{Info|La mayoría de comandos aceptarán las opciones más o menos en cualquier lugar. Por ejemplo, <syntaxhighlight lang="bash" inline>ls -l dir1/ -a</syntaxhighlight> funcionará correctamente}}.<br />
<br />
==== Copia con rsync ====<br />
'''rsync''' es una versión ''moderna'' de cp, pero especializada en la copia a través de sistemas de ficheros en red e incluso mediante '''ssh'''. Tiene montones de opciones, muchas de las cuales dependen de qué se esté haciendo. Por ejemplo, -va hace una copia completa (recursiva, incluyendo enlaces, permisos...) mostrando lo que se está copiando. y -z habilita la compresión de lo que se copia (útil para copiar por la red).<br />
<br />
Una de las particularidades de rsync es su habilidad para hacer ''copias incrementales''. Una copia incremental consiste en que cada vez que copias dos cosas, sólo copias aquellas cosas que han cambiado desde la última vez.<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> rsync -va dir2/ dir1/<br />
sending incremental file list<br />
./<br />
fichero2.txt<br />
<br />
sent 143 bytes received 38 bytes 362.00 bytes/sec<br />
total size is 13 speedup is 0.07<br />
gecko@Leap-PC:~/Documentos> ls dir1<br />
fichero2.txt<br />
gecko@Leap-PC:~/Documentos> echo "otro fichero más" >> dir2/fichero3.txt<br />
gecko@Leap-PC:~/Documentos> rsync -va dir2/ dir1/<br />
sending incremental file list<br />
./<br />
fichero3.txt<br />
<br />
sent 173 bytes received 38 bytes 422.00 bytes/sec<br />
total size is 31 speedup is 0.15<br />
gecko@Leap-PC:~/Documentos> ls dir1<br />
fichero2.txt fichero3.txt<br />
</syntaxhighlight><br />
<br />
==== Copia con dd ====<br />
'''dd''' es una utilidad para copiar ficheros ''bit a bit'' y que se utiliza principalmente para hacer copias exactas de imágenes de discos (clones). Por ejemplo, podrías clonar tu partición /dev/sda2 en un fichero llamado sda2.img de la siguente forma: <syntaxhighlight lang="bash" inline>dd if=/dev/sda2 of=sda2.img</syntaxhighlight>.<br />
<br />
Usar ''dd'' para copiar tus ficheros de un lugar a otro es un poco como matar moscas con misiles. Funciona, pero en general será más sencillo usar ''cp'' o ''rsync''. Para hacer una copia de ''fichero2.txt'' podríamos usar el comando:<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> dd if=fichero2.txt of=fichero3.txt<br />
gecko@Leap-PC:~/Documentos> cat fichero3.txt <br />
algún texto<br />
</syntaxhighlight><br />
<br />
<br />
==== Copia con cat ====<br />
Muchas de las cosas que se pueden hacer en un terminal son en realidad ''efectos secundarios''. Por ejemplo, el comando ''touch'' permite actualizar la hora de modificación de un fichero, pero su efecto secundario es que si no existe el fichero, lo crea con la fecha de modificación actualizada. Así que es ampliamente usado para crear ficheros vacíos.<br />
<br />
''cat'' muestra por pantalla el contenido de un fichero. Si redirigimos esta salida a un nuevo fichero, existente o no, tendremos una copia:<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> cat fichero1.txt > nuevo_fichero1.txt<br />
gecko@Leap-PC:~/Documentos> cat nuevo_fichero1.txt <br />
algún texto<br />
</syntaxhighlight><br />
<br />
Podemos indicar un fichero, varios usando comodines, o una lista de ellos. La salida será mostrada en pantalla, la de cada fichero a continuación del anterior. Eso nos permite una forma sencilla de ''concatenar'' o ''unir'' ficheros:<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> cat fichero?.txt > nuevo_fichero_enésimo.txt<br />
gecko@Leap-PC:~/Documentos> ls<br />
acceso_directo_a_script.sh dir1 dir2 dir3 enlace_script.sh fichero1.txt fichero2.txt fichero3.txt nuevo_dir nuevo_fichero1.txt nuevo_fichero_enésimo.txt<br />
gecko@Leap-PC:~/Documentos> cat nuevo_fichero_enésimo.txt <br />
algún texto<br />
algún texto<br />
algún texto<br />
</syntaxhighlight><br />
<br />
==== Mover y renombrar con mv ====<br />
'''mv'' permite mover ficheros y directorios de una ubicación a otra.<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> mv nuevo_fichero_enésimo.txt dir1/<br />
gecko@Leap-PC:~/Documentos> ls <br />
acceso_directo_a_script.sh dir1 dir2 dir3 enlace_script.sh fichero1.txt fichero2.txt fichero3.txt nuevo_dir nuevo_fichero1.txt<br />
gecko@Leap-PC:~/Documentos> ls dir1/<br />
fichero2.txt fichero3.txt nuevo_fichero_enésimo.txt<br />
</syntaxhighlight><br />
<br />
Y también permite renombrar ficheros y directorios:<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> mv dir1 directorio1<br />
gecko@Leap-PC:~/Documentos> ls<br />
acceso_directo_a_script.sh dir2 dir3 directorio1 enlace_script.sh fichero1.txt fichero2.txt fichero3.txt nuevo_dir nuevo_fichero1.txt<br />
</syntaxhighlight><br />
<br />
Esto puede ser un tanto confuso para el usuario recién llegado (y para el no tan reciente). Si existe el destino, mv moverá el origen al interior del destino:<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> mv dir2 dir3<br />
gecko@Leap-PC:~/Documentos> ls dir3<br />
dir2 fichero2.txt<br />
</syntaxhighlight><br />
<br />
Si existe un directorio con el nombre indicado en el destino, mv moverá el origen al directorio destino. Pero si renombras un fichero con el nombre de un fichero existente, ¡lo sobrescribirá!!<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> mv enlace_script.sh fichero1.txt<br />
gecko@Leap-PC:~/Documentos> ls<br />
acceso_directo_a_script.sh dir3 directorio1 fichero1.txt fichero2.txt fichero3.txt nuevo_dir nuevo_fichero1.txt<br />
gecko@Leap-PC:~/Documentos> cat fichero1.txt<br />
#!/bin/bash<br />
<br />
echo "Hola mundo"<br />
echo y más allá!<br />
</syntaxhighlight><br />
<br />
== Carpetas ==<br />
En Linux se utiliza una aproximación interesante al concepto de carpeta. Algunos directorios contienen un fichero especial y oculto denominado ''.directory'', que permite establecer configuraciones generales al utilizarse con ciertas aplicaciones.<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> cat .directory<br />
[Dolphin]<br />
PreviewsShown=true<br />
SortOrder=1<br />
SortRole=modificationtime<br />
Timestamp=2022,3,1,19,58,21<br />
Version=4<br />
<br />
[Settings]<br />
HiddenFilesShown=false<br />
</syntaxhighlight><br />
<br />
En este fichero de texto de configuración, los corchetes se usan para delimitar apartados. El primer apartado corresponde al gestor de ficheros [[Dolphin]]. Por ejemplo, indica que se muestren las previsualizaciones de los ficheros que contenga y la forma de ordenación al mostrar el contenido. El apartado Settings establece que cada vez que se muestre su contenido se no se incluyan los ficheros ocultos.<br />
<br />
== Comodines ==<br />
En Bash puedes usar un montón de comodines y abreviaturas. Por ejemplo, un asterisco '''*''' sustituye a cualquier conjunto de caracteres, mientras que un interrogante '''?''' sustituye a un caracter. Por ejemplo:<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> ls dir?<br />
dir1:<br />
<br />
dir2:<br />
fichero2.txt<br />
<br />
dir3:<br />
fichero2.txt<br />
gecko@Leap-PC:~/Documentos> cp * dir1<br />
cp: cannot stat 'acceso_directo_a_script.sh': Non hai tal ficheiro ou directorio<br />
cp: -r no especificado; omitiendo directorio 'dir1'<br />
cp: -r no especificado; omitiendo directorio 'dir2'<br />
cp: -r no especificado; omitiendo directorio 'dir3'<br />
gecko@Leap-PC:~/Documentos> ls dir1<br />
enlace_script.sh fichero1.txt fichero2.txt<br />
gecko@Leap-PC:~/Documentos> rm dir1/*<br />
gecko@Leap-PC:~/Documentos> ls dir1/<br />
gecko@Leap-PC:~/Documentos><br />
</syntaxhighlight><br />
<br />
== Conectores de comandos ==<br />
Una de las cosas que hacen tan útiles a los terminales de comando son las distintas formas de interconectar unos comandos con otros.<br />
<br />
Por ejemplo, puedes ejecutar un comando de forma condicionada a la ejecución de otro. Con && la condición es "si el comando ha sido válido" y con || la condición es "en cualquier caso". Por ejemplo:<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> mkdir nuevo_dir && cd nuevo_dir && touch hola.txt && cd ..<br />
gecko@Leap-PC:~/Documentos> ls nuevo_dir/<br />
hola.txt<br />
gecko@Leap-PC:~/Documentos> mkdir nuevo_dir || cd nuevo_dir && touch nuevo_hola.txt && cd ..<br />
mkdir: no se puede crear el directorio "nuevo_dir": El fichero ya existe<br />
gecko@Leap-PC:~/Documentos> ls nuevo_dir/<br />
hola.txt nuevo_hola.txt<br />
</syntaxhighlight><br />
El segundo mkdir falla en su ejecución porque ya existe un directorio con ese nombre. Como la condición es ''O'', la doble barra, los comandos siguientes se ejecutan. Si hubiera usado la condición ''Y'', el doble ampersand, la ejecución se habría detenido ahí.<br />
<br />
Otra forma de encadenar comandos es con tuberías. En la sección [[#Ficheros regulares]] se ha empleado una tubería ''>''. Esta tubería hace que el resultado de ejecutar un comando, en aquel caso ''cat'', sea introducido en el fichero que hay a su derecha. Literalmente, ''cat > fichero.txt'' hace que lo que vamos escribiendo en la pantalla sea enviado al fichero ''fichero.txt''. Menos usual es la redirección inversa ''<''. Esto hace que lo que está a la derecha sea enviado a lo que está a la izquierda.<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> cat < fichero1.txt <br />
algún texto<br />
gecko@Leap-PC:~/Documentos> echo "más cosas" >> fichero1.txt<br />
gecko@Leap-PC:~/Documentos> cat fichero1.txt <br />
algún texto<br />
más cosas<br />
</syntaxhighlight><br />
Si usas un sólo signo ''>'' el resultado del comando de la izquierda sobrescribirá el fichero. Si usas dos signos ''>>'', el resultado se añadirá al final.<br />
<br />
Otra tubería popular es la barra vertical '''|''', que permite que el resultado de ejecutar un comando con el resultado de otro comando. Por ejemplo, para buscar ficheros que contengan ''icher'' en su nombre, normalmente bastaría con ls *icher*, pero también podemos hacer eso como ejemplo:<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> ls *icher*<br />
fichero1.txt fichero2.txt<br />
gecko@Leap-PC:~/Documentos> ls | grep icher<br />
fichero1.txt<br />
fichero2.txt<br />
</syntaxhighlight><br />
<br />
'''grep''' por defecto resaltará la cadena (conjunto de letras y signos) buscada. Por sí mismo es un comando que permite buscar cadenas de texto en ficheros de texto. Por ejemplo, para buscar qué fichero contiene la palabra algún:<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> grep algún *<br />
grep: acceso_directo_a_script.sh: No existe tal fichero o directorio<br />
grep: dir1: Es un directorio<br />
grep: dir2: Es un directorio<br />
grep: dir3: Es un directorio<br />
fichero1.txt:algún texto<br />
fichero2.txt:algún texto<br />
grep: nuevo_dir: Es un directorio<br />
</syntaxhighlight><br />
<br />
Y con frecuencia se utiliza para hacer búsquedas en la salida de algún comando que proporcione un resultado largo. Por ejemplo, el comando '''ps''' lista los procesos en ejecución y es común listarlos con las opciones -aux. Para buscar el proceso konsole, podemos hacer lo siguiente:<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> <br />
ps aux | grep konsole<br />
gecko 2549 0.0 1.0 694400 85380 ? Sl 18:18 0:02 /usr/bin/konsole -session 10137156d2e4000164613515200000032360018_1646241240_34218<br />
gecko 16848 0.0 0.0 10256 2456 pts/2 S+ 19:05 0:00 grep --color=auto konsole<br />
</syntaxhighlight><br />
<br />
Los conectores no necesitan tener espacios en blanco alrededor, pero es buena idea para hacerlo más legible. En ese sentido, <syntaxhighlight lang="bash" inline>echo "hola" > fichero.txt</syntaxhighlight> es exactamente igual a <syntaxhighlight lang="bash" inline>echo "hola">fichero.txt</syntaxhighlight><br />
<br />
== Notas ==<br />
# <cite id="nota1">En cualquier sistema gráfico pueden encontrarse estas aplicaciones buscando ''terminal''.</cite><br />
# <cite id="nota2">Linux distingue mayúsculas de minúsculas y es buena idea asumir que cualquier intérprete de comandos hará lo propio, aunque hay excepciones como algunos lenguajes de bases de datos, por ejemplo. En Bash, es diferente '''nombre''' de '''Nombre''' o de '''NOMBRE'''.</cite><br />
# <cite id="nota3">Salvo en el caso de que existan otras carpetas que comiencen por Doc, como por ejemplo ''Documentanción''.</cite><br />
# <cite id="nota4">Para aprender sobre el uso de permisos de ficheros, consulta la guía [[SDB:Fundamentos del sistema de permisos|Fundamentos del sistema de permisos]] </cite><br />
# <cite id="nota4">Los scripts suelen traducirse literalmente como ficheros de guiones o en otras ocasiones como ficheros por lotes. Ambas expresiones hacen referencia al hecho de que ejecutan tareas de una en una.<br />
<br />
<br />
[[Category:SDB:Guía de principiantes]]<br />
[[Category:Conceptos|Uso básico del terminal]]</div>Karlggesthttps://es.opensuse.org/index.php?title=SDB:Funtamentos_de_bash&diff=28384SDB:Funtamentos de bash2024-01-24T09:58:55Z<p>Karlggest: /* Trabajando con ficheros */</p>
<hr />
<div>{{Barra de navegación para Conceptos}}<br />
<br />
{{Conocimiento básico<br />
|<br />
*[[Conceptos interfaz]]<br />
|<br />
*[https://es.wikipedia.org/wiki/Bash Bash]<br />
*[https://es.wikipedia.org/wiki/Shell_de_Unix Shell de Unix]<br />
*[https://es.wikipedia.org/wiki/Interfaz_de_l%C3%ADnea_de_comandos Interfaz de línea de comandos]<br />
}}<br />
== Introducción ==<br />
Aunque es posible usar un sistema operativo cualquiera con éxito sin usar jamás un terminal de comandos, lo cierto es que conocer su uso básico favorece el aprendizaje de algunos conceptos. El ámbito de este documento es orientar al usuario en el uso de comandos básicos que le servirán para dicho aprendizaje. Para aquellas personas usuarias interesadas en aprender un mejor uso del terminal se recomienda consultar obras más detalladas sobre Bash y en particular sobre su programación.<br />
<br />
== El intérprete ==<br />
El ''shell'' '''bash''', que es el que acompaña por defecto a la mayoría de distribuciones de Linux, es lo que se denomina ''un intérprete de comandos''. Eso significa que la persona usuaria interactúa con el sistema proporcionando comandos determinados que el intérprete procesa.<br />
<br />
Los escritorios gráficos de Linux proporcionan aplicaciones que permiten utilizar el intérprete de comandos desde la propia sesión gráfica. El escritorio Plasma proporciona [https://konsole.kde.org/ konsole] para esta labor[[#nota1|[1]]].<br />
<br />
El terminal en el que ejecutamos bash es una pantalla o ventana de texto. El intérprete proporciona un ''prompt''. Por defecto, en openSUSE está formado de la siguiente manera:<br />
<syntaxhighlight lang="bash"><br />
usuario@máquina:~><br />
</syntaxhighlight><br />
* ''usuario'' es tu nombre como usuaria.<br />
* ''@'' es un separador de forma similar a las direcciones de correo-e.<br />
* ''máquina'' es el nombre que le hayas asignado a tu máquina. Normalmente el sistema asigna un nombre más o menos arbitrario durante la instalación, pero puedes cambiárselo.<br />
* '':'' es otro separador.<br />
* ''~'' es una abreviatura para representar tu carpeta personal. Normalmente, a medida que te ''mueves'' por el árbol de directorios, esto se sustituye por tu ubicación actual.<br />
* ''>'' es otro separador.<br />
<br />
Cuando está visible este prompt en la última línea, significa que puedes introducir un comando. Por ejemplo, puedes ejectuar konsole o el terminal de tu escritorio gráfico, e introducir el siguiente comando para saber la ruta hasta donde estás:<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~> pwd<br />
/home/gecko<br />
gecko@Leap-PC:~> <br />
</syntaxhighlight><br />
Al ejecutar konsole se ejecutará automáticamente el intérprete de comandos que tengas configurado y que por defecto en openSUSE es Bash.<br />
<br />
{{Info|El uso del escritorio desarrollado por Microsoft para su sistema operativo Windows ha extendido el uso del término ''folder'' (carpeta) en lugar de ''directory'' (directorio) y en mi opinión está bien. Es una metáfora muy visual: ''guarda ese fichero en la carpeta del proyecto''. No obstante, en el mundo del terminal suele usarse ''directorio'' y de hecho la nemotecnia de los comandos empuja a ello: '''''c'''hange '''d'''irectory'' (cambiar directorio) para el comando cd, que permite justamente acceder a un directorio. No hay nada malo en usar ''carpeta'', pero la mayoría de textos que leas sobre el terminal emplearán ''directorio''. Consulta la sección [[#Carpetas|Carpetas]] para ver las diferencias.}}<br />
<br />
Los comandos del sistema tienen una página de manual que por desgracia no se ha traducido en años y que rara vez tendremos en castellano. Sin embargo, los comandos que ejecutaremos aquí son muy sencillos y pueden entenderse facilmente en inglés. Si deseas ver información del comando en castellano, puedes usar un buscador web con ''man comando español''. Por ejemplo, [https://duckduckgo.com/?q=man+pwd+espa%C3%B1ol&t=ffab&ia=web man pwd español].<br />
<br />
El prompt suele incluir, y en openSUSE es así por defecto, el nombre como usuaria del sistema. Pero esto no es así para la cuenta administradora (root), que se resalta en rojo, o puede que se haya establecido otra configuración. En cualquier caso, hay un comando para comprobar qué cuenta usuaria estás utilizando en ese momento: whoami, en inglés, literalmente, ¿quién soy?<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~> whoami<br />
gecko<br />
gecko@Leap-PC:~> <br />
</syntaxhighlight><br />
{{Info|En una sesión gráfica, el terminal en el que ejecutas bash, como konsole, se denomina ''terminal virtual''. Una ''verdadera'' sesión con el intérprete de comandos requiere hacerlo en modo texto y comenzará con el login, en el que se ha de introducir el nombre y la contraseña. En este documento se asume el uso de un terminal virtual, normalmente konsole.}}<br />
<br />
La sesión con el intérprete bash concluye al ejecutar el comando '''exit''' o bien al cerrar konsole.<br />
<br />
Es posible ejecutar distintos intérpretes de comandos dentro de una sesión con bash, incluso el propio bash. De hecho, eso es lo que sucede cuando se cambia de usuario con el comando '''su''' y el ''modificador'' '''-''':<br />
<pre><br />
gecko@Leap-PC:~> su -<br />
</pre><br />
<pre style="color: red"><br />
Leap-PC:~ #<br />
</pre><br />
<br />
El símbolo # es habitual en el prompt del administrador. Hay mucha documentación donde el verás que el símbolo $ corresponde a las cuentas usuarias regulares, y # al administrador, y se omite el resto del prompt, de esta forma:<br />
<syntaxhighlight lang="bash"><br />
$ whoami<br />
tux<br />
</syntaxhighlight><br />
<pre><br />
# whoami<br />
root<br />
</pre><br />
<br />
=== Procesos ===<br />
Aunque la idea de usar un intérprete de comandos es interactuar con el sistema mediante los susodichos comandos, en muchas ocasiones será interesante ejecutar un comando y dejar que se ejecute ''en segundo plano'' hasta que finalice. Por ejemplo, el comando cp que se verá en la sección [[#Copia con cp]] puede ejecuarse en segundo plano añadiendo el símbolo ampersand al final del comando:<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~> cp -r un_directorio_con_muchos_ficheros otra_carpeta &<br />
gecko@Leap-PC:~> <br />
</syntaxhighlight><br />
<br />
En lugar de mostrar el proceso del comando, inmediatamente devuelve el ''prompt'' para poder seguir introduciendo comandos. Es posible que a veces el comando en ejecución muestre de todas formas qué está haciendo, pero incluso así seguiremos teniendo el control del prompt para introducir otros comandos.<br />
<br />
En ocasiones podrá suceder que ejecutamos comandos largos sin el ampersand y nos vemos en la necesidad de interrumpirlo para ejecutar otros comandos distintos. Eso lo podemos hacer pulsando CTRL+C (la combinación general para interrumpir un comando).<br />
<br />
También es posible que querramos pasar a segundo plano el comando, lo que podemos hacer pulsando CTRL+Z. Eso normalmente detendrá la ejecución de ese comando y nos dará el control del ''prompt''. Para continuar con la ejecución del programa detenido, ejecutaremos el comando '''fg'''.<br />
<br />
'''kill''' es un comando que nos permite enviar señales a un comando que esté en ejecución. Esas señales pueden ser, por ejemplo, detenerse, o directamente matarse (interrumpirse por completo), y en general se emplea pasando la opción numérica correspondiente (9 para matar un proceso, 15 para detenerlo). '''killall''' permite matar procesos pero indicando el nombre del proceso, en lugar de su número de proceso (UID). ''ps'' es un comando que lista los procesos en ejecución.<br />
<br />
=== Uso de intérpretes de comandos en bash ===<br />
Hay muchos lenguajes de programación y aplicaciones específicas que proporcionan intérpretes de comandos: bases de datos, calculadoras, lenguajes interpretados... Si aun estás en la sesión con el administrador (prompt en rojo acabado en #), escribe '''exit''' para volver a la sesión de usuario y ejecuta la ''calculadora integrada'' con el comando '''bc''' (ejecuta '''man bc''' para aprender más sobre ella):<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~> bc<br />
bc 1.07.1<br />
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006, 2008, 2012-2017 Free Software Foundation, Inc.<br />
This is free software with ABSOLUTELY NO WARRANTY.<br />
For details type `warranty'. <br />
<br />
</syntaxhighlight><br />
'''bc''' no usa prompt y puedes escribir las expresiones a calcular directamente. Por ejemplo, para calcular la suma 5+3 basta con escribirlo y pulsar ''intro'':<br />
<syntaxhighlight lang="bash"><br />
5+3<br />
8<br />
</syntaxhighlight><br />
Para salir, basta con escribir '''quit''' (quitar el programa):<br />
<syntaxhighlight lang="bash"><br />
quit<br />
gecko@Leap-PC:~> <br />
</syntaxhighlight><br />
<br />
== Moviéndote por el árbol de directorios ==<br />
Cada directorio, salvo la raíz, contiene dos ficheros especiales, denominados '''.''' (punto) y '''..''' (dos puntos). El fichero '''.''' hace referencia al directorio actual y el fichero '''..''' hace referencia al directorio anterior o ''padre''.<br />
<br />
Para poder desplazarte por los directorios del sistema tienes el comando '''cd''' (change directory). Al comando le proporcionas el lugar al que quieres desplazarte, de la siguiente forma:<br />
* <syntaxhighlight lang="bash" inline>cd ruta_directorio</syntaxhighlight> te desplaza al directorio de nombre ruta_directorio<br />
* <syntaxhighlight lang="bash" inline>cd ..</syntaxhighlight> te desplaza al directorio padre del actual.<br />
* <syntaxhighlight lang="bash" inline>cd .</syntaxhighlight> no tiene efecto porque te desplaza al directorio actual.<br />
<br />
El signo / se emplea como separador entre directorios con el significado ''padre de''. En ''dir_padre''/''dir_hijo'', ''dir_hijo'' es un directorio que está ''dentro'' de ''dir_padre'', de forma que ''dir_padre'' es el directorio ''padre'' de ''dir_hijo''.<br />
<br />
Dado que el directorio raíz '''root''' no tiene padre, se representa únicamente con la barra espaciadora. De esta forma, para desplazarnos desde cualquier lugar hasta el directorio raíz, basta con ejecutar:<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~> cd /<br />
gecko@Leap-PC:/><br />
</syntaxhighlight><br />
<br />
Existen dos tipos de rutas a directorio: las rutas que incluyen toda la ruta desde el directorio raíz, llamadas '''rutas absolutas''' y las rutas que incluyen un origen en un directorio dado, llamadas '''rutas relativas'''. Normalmente las rutas relativas comenzarán en un directorio dentro de nuestro directorio actual.<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:/> cd /home/gecko<br />
gecko@Leap-PC:~> <br />
</syntaxhighlight><br />
<br />
El comando '''cd /home/gecko''' nos devuelve al directorio del usuario gecko. Por su parte<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~> cd Documentos<br />
gecko@Leap-PC:~/Documentos><br />
</syntaxhighlight><br />
<br />
Nos lleva al directorio ''Documentos'' dentro del directorio del usuario gecko. En ese punto, para volver al directorio del usuario tenemos tres opciones:<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> cd ..<br />
gecko@Leap-PC:~> <br />
</syntaxhighlight><br />
<syntaxhighlight lang="bash"><br />
<br />
O bien<br />
gecko@Leap-PC:~/Documentos> cd<br />
gecko@Leap-PC:~> <br />
</syntaxhighlight><br />
O bien<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> cd ~<br />
gecko@Leap-PC:~> <br />
</syntaxhighlight><br />
<br />
Usar cd sin argumentos te llevará siempre al directorio de usuario. Por su parte, la virgulilla es una abreviatura de bash y significa el directorio del usuario. Puede utilizarse de forma absoluta, formando rutas como ~/Documentos, o bien como atajo con el comando '''cd'''. Esto permite que, por ejemplo, para cambiar desde Documentos hasta Descargas, puedas ejecutar:<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> cd ~/Descargas<br />
gecko@Leap-PC:~/Descargas> <br />
</syntaxhighlight><br />
<br />
Bash tiene un montón de atajos y facilidades, y la instalación por defecto de openSUSE Leap añade muchos más. Por ejemplo, dentro de Descargas escribe: '''cd ../''' y pulsa la tecla tabulador (TAB) un par de veces:<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Descargas> cd ../<br />
</syntaxhighlight><br />
Pulsa el tabulador dos veces, y verás lo siguiente (puede haber otros directorios en tu sistema):<br />
<syntaxhighlight lang="bash"><br />
.cache/ .config/ Descargas/ Documentos/ Escritorio/ Imaxes/ .local/ logs/ Modelos/ Música/ Público/ Vídeos/<br />
</syntaxhighlight><br />
<br />
Al pulsar el tabulador, bash trata de autocompletar la ruta desde el texto que hayas escrito justo antes. ../ significa ''desde el directorio anterior'' y te proporcionará todas las opciones. Si escribes una '''D''' mayúscula[[#nota2|[2]]] y vuelves a pulsar el tabulador, te ofrecerá todas las opciones que comienzan con D (Documentos y Descargas, salvo que tengas algún directorio más en tu sistema que también empiece por D).<br />
<br />
Esta forma de ''autocompletar'' es muy cómoda, pero tiene sus cosas. Si pulsas una vez el tabulador, sólo funcionará si hay una sola opción disponible. Por ejemplo, <syntaxhighlight lang="bash" inline>cd ../Doc</syntaxhighlight> se autocompletará como <syntaxhighlight lang="bash" inline>cd ../Documentos/</syntaxhighlight>[[#nota3|[3]]]. Si no hay una única opción, ''volver'' a pulsarlo mostrará todas las opciones disponibles que coincidan con ese patrón. Si tienes un directorio llamado ''Proyectos'' dentro de ''Documentos'', puedes hacer lo siguiente para acceder a él: cd ~/Do<tabulador>Pr<tabuldador> (escribir cd, espacio, virguilulla, barra de división, Do, tabulador, Pr, tabulador. Lo cual irá autocompletando cd ~/Documentos/Proyectos. Una vez tienes todo el comando, basta con pulsar '''intro''' para ejecutar el comando.<br />
<br />
== Trabajando con ficheros ==<br />
Desde el punto de vista de Linux, cualquier cosa que no sea la red, es un fichero. Según el cometido de ese fichero, puede ser de diferentes tipos:<br />
* Ficheros regulares.<br />
** Ficheros de texto.<br />
** Ficheros binarios.<br />
** Directorios.<br />
* Enlaces blandos.<br />
* Enlaces duros.<br />
* Dispositivos.<br />
** de bloques.<br />
** de caracteres.<br />
<br />
=== Listar ficheros ===<br />
El comando usual para listar el contenido de un directorio, y ver así qué ficheros o directorios contiene, es '''ls'''.<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> ls<br />
script.sh<br />
</syntaxhighlight><br />
<br />
'''ls''' es un comando que admite un buen montón de argumentos. Los más habituales son:<br />
* l para visualizar un ''listado largo'', que incluye información de cada fichero o directorio tal como su propietario y permisos.<br />
* d para listar el directorio en lugar de su contenido. Es común usarlo con el argumento l.<br />
* a para listar los ficheros incluyendo los ficheros ocultos. En Linux, un fichero está oculto cuando su nombre comienza por . (punto).<br />
<br />
Para usar estas opciones, ls ha de ir seguida por el carácter guión '''-''', por ejemplo, para obtener un listado largo:<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> ls -l<br />
-rw-r--r-- 1 gecko users 31 Mar 1 17:51 script.sh<br />
</syntaxhighlight><br />
<br />
Aunque es posible poner cada opción con su propio guión, lo habitual es agruparlos. Así, los siguientes dos comandos tienen el mismo resultado:<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> ls -l -a<br />
total 12<br />
drwxr-xr-x 2 gecko users 22 Mar 1 18:29 .<br />
drwxr-xr-x 14 gecko users 4096 Mar 1 18:28 ..<br />
-rw------- 1 gecko users 105 Abr 14 2021 .directory<br />
-rw-r--r-- 1 gecko users 31 Mar 1 17:51 script.sh<br />
gecko@Leap-PC:~/Documentos> ls -la<br />
total 12<br />
drwxr-xr-x 2 gecko users 22 Mar 1 18:29 .<br />
drwxr-xr-x 14 gecko users 4096 Mar 1 18:28 ..<br />
-rw------- 1 gecko users 105 Abr 14 2021 .directory<br />
-rw-r--r-- 1 gecko users 31 Mar 1 17:51 script.sh<br />
</syntaxhighlight><br />
<br />
En el listado largo, cada fichero ocupa una fila. El primer grupo de caracteres empezará por d si es un directorio, - si es un fichero regular, b para un dispositivo de bloques, l para enlaces, b para dispositivos de bloques y c para dispositivos de caracteres.<br />
<br />
=== Ficheros regulares ===<br />
Los ficheros de texto contienen caracteres de texto, normalmente en código ASCII. En Linux son ampliamente usados, por ejemplo de forma preferente para los ficheros de configuración de casi cualquier elemento. Por su parte, los ficheros binarios tienen un contenido binario definido en función del tipo de fichero concreto. Los directorios son un tipo de fichero especial que permiten organizar los ficheros almacenados en el sistema de forma más adecuada para el uso por parte del usuario.<br />
<br />
Para que un fichero regular sea ejecutable ha de cumplir con dos requisitos: tener permiso de ejecución para el usuario que quiere ejecutarlo[[#nota4|[4]]], y contener código ejecutable de alguna clase. Por ejemplo, pwd es un fichero regular binario:<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> file /usr/bin/pwd<br />
/usr/bin/pwd: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=5d7ba8d4e2d3bda8835aaf230b257e55009d8f1a, for GNU/Linux 3.2.0, stripped<br />
</syntaxhighlight><br />
Podemos probar qué sucede si creamos un sencillo ''script''[[#nota5|[5]]], que son ficheros de texto que contienen código de algún lenguaje interpretado, incluido bash. Para ello usaremos el comando '''cat''' (que permite leer ficheros de texto) de una forma particular. Una vez que introduzcas cat > script y pulses intro, podrás introducir las líneas de una en una (pulsando intro en cada una, incluso en las vacías). Una vez acabado, después de "Hola mundo!", pulsa la combinación '''CTRL+D''':<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> cat > script.sh <br />
#!/bin/bash<br />
<br />
echo "Hola mundo!"<br />
gecko@Leap-PC:~/Documentos> file script.sh<br />
script.sh: Bourne-Again shell script, ASCII text executable<br />
</syntaxhighlight><br />
<br />
'''Bourne-Again shell''' es el nombre completo de Bash, y literalmente dice que es un fichero que contiene un script de bash escrito con texto ASCII y que es ejecutable.<br />
<br />
Para ejecutarlo no se requieren permisos de ejecución, basta con emplear algún intérprete de comandos adecuado, en este caso, bash.<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> bash script.sh <br />
Hola mundo<br />
gecko@Leap-PC:~/Documentos> sh script.sh<br />
Hola mundo<br />
gecko@Leap-PC:~/Documentos> <br />
</syntaxhighlight><br />
<br />
'''sh''' es otro atajo, en esta ocasión nombra al intérprete de comandos configurado en nuestro sistema. En la instalación por defecto de openSUSE será bash, pero hay muchos más.<br />
<br />
==== Enlaces duros ====<br />
Los enlaces '''duros''' han perdido popularidad con el auge de los escritorios gráficos. La idea es que las ''entradas de directorio'' son una forma de organizar los ficheros ''para los usuarios'' de la computadora. No existe ningún área de ningún disco que se delimite para formar una carpeta y guardar ficheros ''dentro'' de esa área. El sistema operativo utiliza distintos procedimientos para establecer dónde guarda cada fichero. Dicho fichero ni siquiera tiene por qué estar todo junto, sino que es posible que esté repartido en fragmentos a lo largo del disco. Cada tipo de sistema de ficheros, sea btrfs, ext4, xfs, etc., lo hace de una forma diferente.<br />
<br />
De cara al usuario, los ficheros se guardan formando una jerarquía que permite relacionar los ficheros entre sí. Cuando operas con una entrada de un directorio dado, el sistema la traduce a la ubicación real del fichero y hace aquello que se haya indicado. Puedes pensar que cada entrada de directorio correspondiente a un fichero es un enlace entre ese fichero y el lugar real donde ser almacena el fichero. Así, cuando ejecutas ''cat script.sh'' el sistema consulta la entrada de script.sh y recupera el fichero real para mostrar su contenido por pantalla. En ese sentido, ''todos'' los ficheros regulares ''son'' enlaces ''duros''.<br />
<br />
Recuerda que los enlaces simbólicos son ficheros que contienen una ubicación. En ese sentido ''acceso directo a fichero'' (o directorio) es un nombre un poco más adecuado. En cambio, la herramienta para crear enlaces duros es la misma: '''ln''', pero sin opciones. La sintaxis es la misma: ln fichero enlace<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> ln script.sh enlace_script.sh<br />
gecko@Leap-PC:~/Documentos> ls -l<br />
total 8<br />
lrwxrwxrwx 1 gecko users 9 Mar 1 18:40 acceso_directo_a_script.sh -> script.sh<br />
-rw-r--r-- 2 gecko users 31 Mar 1 17:51 enlace_script.sh<br />
-rw-r--r-- 2 gecko users 31 Mar 1 17:51 script.sh<br />
</syntaxhighlight><br />
<br />
Como puedes observar, ahora hay un fichero llamado ''enlace_script.sh'' que es aparentemente igual a ''script.sh''. Podríamos ejecutarlo con bash o leer su contenido con cat para comprobar que son iguales, aunque eso no diferencia un enlace duro de un enlace simbólico. Pero si te fijas en el listado obtenido con ls -l, verás que en la columna que va antes del nombre del usuario propietario del fichero, en lugar de un 1 como teníamos hasta ahora, hay un 2. Ese número representa el número de enlaces duros que tiene ese fichero: por defecto es 1, porque, como ya se ha dicho, ''todos'' los ficheros son en realidad enlaces duros de sí mismos.<br />
<br />
Un uso habitual de los enlaces de cualquier tipo es hacer accesible el fichero como si formara parte de otro directorio. El comando '''mkdir''' (''make directory'', crear directorio) permite crear directorios.<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> mkdir carpeta<br />
gecko@Leap-PC:~/Documentos> ln script.sh carpeta/script.sh<br />
gecko@Leap-PC:~/Documentos> ls -l<br />
total 8<br />
lrwxrwxrwx 1 gecko users 9 Mar 1 18:40 acceso_directo_a_script.sh -> script.sh<br />
drwxr-xr-x 2 gecko users 22 Mar 1 19:09 carpeta<br />
-rw-r--r-- 3 gecko users 31 Mar 1 17:51 enlace_script.sh<br />
-rw-r--r-- 3 gecko users 31 Mar 1 17:51 script.sh<br />
gecko@Leap-PC:~/Documentos> ls -l carpeta/<br />
total 4<br />
-rw-r--r-- 3 karl users 31 Mar 1 17:51 script.sh<br />
</syntaxhighlight><br />
<br />
Ahora los tres ficheros, script.sh, enlace_script y carpeta/script.sh tienen un 3 en el número de enlaces duros. Como cada uno ''apunta'' al contenido del fichero en sí, cada entrada puede ser movida, renombrada o incluso eliminada sin afectar al resto de enlaces.<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> rm script.sh<br />
gecko@Leap-PC:~/Documentos> ls -l<br />
total 4<br />
lrwxrwxrwx 1 karl users 9 Mar 1 18:40 acceso_directo_a_script.sh -> script.sh<br />
drwxr-xr-x 2 karl users 22 Mar 1 19:09 carpeta<br />
-rw-r--r-- 2 karl users 31 Mar 1 17:51 enlace_script.sh<br />
</syntaxhighlight><br />
<br />
Por un lado, al borrar ''script.sh'' el enlace simbólico vuelve a estar roto. Por otro lado, el 3 en las entradas de los enlaces duros ha sido sustituido con un 2, que es el número de enlaces duros que quedan para el contenido de script.sh. En la práctica, borrar un fichero consiste en tener 0 enlaces duros al mismo.<br />
<br />
Y por supuesto, al modificar el contenido a través de cualquier enlace, obtenemos el mismo resultado con el resto de enlaces duros.<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> echo "echo y más allá!" >> carpeta/script.sh<br />
gecko@Leap-PC:~/Documentos> bash enlace_script.sh<br />
Hola mundo<br />
y más allá!<br />
</syntaxhighlight><br />
<br />
Los enlaces duros no son apropiados para crear enlaces entre ficheros de distintos dispositivos ni entre directorios. Para estos casos, emplea enlaces simbólicos.<br />
<br />
=== Eliminar directorios ===<br />
Los directorios, además de accedidos con el comando cd y creados con el comando mkdir, pueden ser eliminados. Sin embargo, para el sistema no es lo mismo eliminar una entrada de directorio correspondiente a un directorio vacío, que una entrada de directorio correspondiente a un directorio que a su vez tiene ficheros o directorios en su interior.<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> mkdir dir1<br />
gecko@Leap-PC:~/Documentos> ls<br />
acceso_directo_a_script.sh carpeta dir1 enlace_script.sh<br />
gecko@Leap-PC:~/Documentos> rmdir dir1<br />
gecko@Leap-PC:~/Documentos> ls<br />
acceso_directo_a_script.sh carpeta enlace_script.sh<br />
gecko@Leap-PC:~/Documentos> rmdir carpeta<br />
rmdir: error al eliminar 'carpeta': Directorio no vacío<br />
</syntaxhighlight><br />
<br />
Para eliminar directorios que contengan ficheros o directorios, se emplea el comando '''rm -r'''<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> rm -r carpeta/<br />
gecko@Leap-PC:~/Documentos> ls<br />
acceso_directo_a_script.sh enlace_script.sh<br />
</syntaxhighlight><br />
<br />
Sin embargo, rm es un comando para ficheros. rm aplicado a un directorio vacío no funcionará sin el parámetro -r:<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> mkdir dir1<br />
gecko@Leap-PC:~/Documentos> rm dir1<br />
rm: no se puede borrar 'dir1': Es un directorio<br />
</syntaxhighlight><br />
<br />
Tradicionalmente el borrado de ficheros y directorios requería confirmación para cada directorio o fichero borrado. Para evitar tener que responder a la misma pregunta cada vez se solía utilizar el parámentro -f, siendo la forma más común de borrado recursivo '''rm -rf directorio'''. openSUSE por defecto no te pedirá confirmación salvo que cambies la configuración del comando, con lo que rm -r tendrá el mismo efecto que rm -rf.<br />
<br />
=== Copiar y mover ficheros ===<br />
En la sección [[#Enlaces duros]] hemos visto que un mismo fichero puede tener varios enlaces, de tal forma que al eliminar cualquiera de ellos aun permanecerían los demás, y por ende su contenido.<br />
<br />
''Copiar'' un fichero consiste en obtener dos enlaces a dos copias diferentes del mismo fichero. En algunos tipos de sistemas de ficheros modernos en realidad no se hará una copia del fichero hasta que se intente modificar uno de ellos, característica denominada '''cow''' (''copy on write'', copia al modificar). Usar cow o no es una cuestión que atañe al sistema operativo e indistinto desde el punto de vista del usuario. Por su parte, ''mover'' un fichero o directorio implica cambiar su ubicación hasta otro directorio.<br />
<br />
==== Copia con cp ====<br />
La forma más sencilla de obtener una copia de un fichero es con el comando '''cp'''. Su sintaxis es <syntaxhighlight lang="bash" inline>cp origen destino</syntaxhighlight>. No obstante, cp presenta similitudes con rm: no puede copiar directorios, vacíos o no. Para ocuparse de directorios, ha de usarse la opción '''-r'''.<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> echo "algún texto" > fichero1.txt<br />
gecko@Leap-PC:~/Documentos> cp fichero1.txt fichero2.txt<br />
gecko@Leap-PC:~/Documentos> cat fichero1.txt fichero2.txt<br />
algún texto<br />
algún texto<br />
gecko@Leap-PC:~/Documentos> mkdir dir2<br />
gecko@Leap-PC:~/Documentos> cp fichero2.txt dir2/<br />
gecko@Leap-PC:~/Documentos> ls dir2/<br />
fichero2.txt<br />
gecko@Leap-PC:~/Documentos> cp dir2 dir3<br />
cp: -r no especificado; omitiendo directorio 'dir2'<br />
gecko@Leap-PC:~/Documentos> cp dir2 dir3 -r<br />
gecko@Leap-PC:~/Documentos> ls<br />
acceso_directo_a_script.sh dir1 dir2 dir3 enlace_script.sh fichero1.txt fichero2.txt<br />
gecko@Leap-PC:~/Documentos> ls dir3/<br />
fichero2.txt<br />
</syntaxhighlight><br />
{{Info|Cuando autocompletas con el tabulador se incluirá el separador '''/'''. El comando cp no actúa direfente con o sin barra de dividir, pero otros comandos que se verán a continuación pueden proporcionar resultados imprevistos.}}<br />
{{Info|La mayoría de comandos aceptarán las opciones más o menos en cualquier lugar. Por ejemplo, <syntaxhighlight lang="bash" inline>ls -l dir1/ -a</syntaxhighlight> funcionará correctamente.<br />
<br />
==== Copia con rsync ====<br />
'''rsync''' es una versión ''moderna'' de cp, pero especializada en la copia a través de sistemas de ficheros en red e incluso mediante '''ssh'''. Tiene montones de opciones, muchas de las cuales dependen de qué se esté haciendo. Por ejemplo, -va hace una copia completa (recursiva, incluyendo enlaces, permisos...) mostrando lo que se está copiando. y -z habilita la compresión de lo que se copia (útil para copiar por la red).<br />
<br />
Una de las particularidades de rsync es su habilidad para hacer ''copias incrementales''. Una copia incremental consiste en que cada vez que copias dos cosas, sólo copias aquellas cosas que han cambiado desde la última vez.<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> rsync -va dir2/ dir1/<br />
sending incremental file list<br />
./<br />
fichero2.txt<br />
<br />
sent 143 bytes received 38 bytes 362.00 bytes/sec<br />
total size is 13 speedup is 0.07<br />
gecko@Leap-PC:~/Documentos> ls dir1<br />
fichero2.txt<br />
gecko@Leap-PC:~/Documentos> echo "otro fichero más" >> dir2/fichero3.txt<br />
gecko@Leap-PC:~/Documentos> rsync -va dir2/ dir1/<br />
sending incremental file list<br />
./<br />
fichero3.txt<br />
<br />
sent 173 bytes received 38 bytes 422.00 bytes/sec<br />
total size is 31 speedup is 0.15<br />
gecko@Leap-PC:~/Documentos> ls dir1<br />
fichero2.txt fichero3.txt<br />
</syntaxhighlight><br />
<br />
==== Copia con dd ====<br />
'''dd''' es una utilidad para copiar ficheros ''bit a bit'' y que se utiliza principalmente para hacer copias exactas de imágenes de discos (clones). Por ejemplo, podrías clonar tu partición /dev/sda2 en un fichero llamado sda2.img de la siguente forma: <syntaxhighlight lang="bash" inline>dd if=/dev/sda2 of=sda2.img</syntaxhighlight>.<br />
<br />
Usar ''dd'' para copiar tus ficheros de un lugar a otro es un poco como matar moscas con misiles. Funciona, pero en general será más sencillo usar ''cp'' o ''rsync''. Para hacer una copia de ''fichero2.txt'' podríamos usar el comando:<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> dd if=fichero2.txt of=fichero3.txt<br />
gecko@Leap-PC:~/Documentos> cat fichero3.txt <br />
algún texto<br />
</syntaxhighlight><br />
<br />
<br />
==== Copia con cat ====<br />
Muchas de las cosas que se pueden hacer en un terminal son en realidad ''efectos secundarios''. Por ejemplo, el comando ''touch'' permite actualizar la hora de modificación de un fichero, pero su efecto secundario es que si no existe el fichero, lo crea con la fecha de modificación actualizada. Así que es ampliamente usado para crear ficheros vacíos.<br />
<br />
''cat'' muestra por pantalla el contenido de un fichero. Si redirigimos esta salida a un nuevo fichero, existente o no, tendremos una copia:<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> cat fichero1.txt > nuevo_fichero1.txt<br />
gecko@Leap-PC:~/Documentos> cat nuevo_fichero1.txt <br />
algún texto<br />
</syntaxhighlight><br />
<br />
Podemos indicar un fichero, varios usando comodines, o una lista de ellos. La salida será mostrada en pantalla, la de cada fichero a continuación del anterior. Eso nos permite una forma sencilla de ''concatenar'' o ''unir'' ficheros:<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> cat fichero?.txt > nuevo_fichero_enésimo.txt<br />
gecko@Leap-PC:~/Documentos> ls<br />
acceso_directo_a_script.sh dir1 dir2 dir3 enlace_script.sh fichero1.txt fichero2.txt fichero3.txt nuevo_dir nuevo_fichero1.txt nuevo_fichero_enésimo.txt<br />
gecko@Leap-PC:~/Documentos> cat nuevo_fichero_enésimo.txt <br />
algún texto<br />
algún texto<br />
algún texto<br />
</syntaxhighlight><br />
<br />
==== Mover y renombrar con mv ====<br />
'''mv'' permite mover ficheros y directorios de una ubicación a otra.<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> mv nuevo_fichero_enésimo.txt dir1/<br />
gecko@Leap-PC:~/Documentos> ls <br />
acceso_directo_a_script.sh dir1 dir2 dir3 enlace_script.sh fichero1.txt fichero2.txt fichero3.txt nuevo_dir nuevo_fichero1.txt<br />
gecko@Leap-PC:~/Documentos> ls dir1/<br />
fichero2.txt fichero3.txt nuevo_fichero_enésimo.txt<br />
</syntaxhighlight><br />
<br />
Y también permite renombrar ficheros y directorios:<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> mv dir1 directorio1<br />
gecko@Leap-PC:~/Documentos> ls<br />
acceso_directo_a_script.sh dir2 dir3 directorio1 enlace_script.sh fichero1.txt fichero2.txt fichero3.txt nuevo_dir nuevo_fichero1.txt<br />
</syntaxhighlight><br />
<br />
Esto puede ser un tanto confuso para el usuario recién llegado (y para el no tan reciente). Si existe el destino, mv moverá el origen al interior del destino:<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> mv dir2 dir3<br />
gecko@Leap-PC:~/Documentos> ls dir3<br />
dir2 fichero2.txt<br />
</syntaxhighlight><br />
<br />
Si existe un directorio con el nombre indicado en el destino, mv moverá el origen al directorio destino. Pero si renombras un fichero con el nombre de un fichero existente, ¡lo sobrescribirá!!<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> mv enlace_script.sh fichero1.txt<br />
gecko@Leap-PC:~/Documentos> ls<br />
acceso_directo_a_script.sh dir3 directorio1 fichero1.txt fichero2.txt fichero3.txt nuevo_dir nuevo_fichero1.txt<br />
gecko@Leap-PC:~/Documentos> cat fichero1.txt<br />
#!/bin/bash<br />
<br />
echo "Hola mundo"<br />
echo y más allá!<br />
</syntaxhighlight><br />
<br />
== Carpetas ==<br />
En Linux se utiliza una aproximación interesante al concepto de carpeta. Algunos directorios contienen un fichero especial y oculto denominado ''.directory'', que permite establecer configuraciones generales al utilizarse con ciertas aplicaciones.<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> cat .directory<br />
[Dolphin]<br />
PreviewsShown=true<br />
SortOrder=1<br />
SortRole=modificationtime<br />
Timestamp=2022,3,1,19,58,21<br />
Version=4<br />
<br />
[Settings]<br />
HiddenFilesShown=false<br />
</syntaxhighlight><br />
<br />
En este fichero de texto de configuración, los corchetes se usan para delimitar apartados. El primer apartado corresponde al gestor de ficheros [[Dolphin]]. Por ejemplo, indica que se muestren las previsualizaciones de los ficheros que contenga y la forma de ordenación al mostrar el contenido. El apartado Settings establece que cada vez que se muestre su contenido se no se incluyan los ficheros ocultos.<br />
<br />
== Comodines ==<br />
En Bash puedes usar un montón de comodines y abreviaturas. Por ejemplo, un asterisco '''*''' sustituye a cualquier conjunto de caracteres, mientras que un interrogante '''?''' sustituye a un caracter. Por ejemplo:<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> ls dir?<br />
dir1:<br />
<br />
dir2:<br />
fichero2.txt<br />
<br />
dir3:<br />
fichero2.txt<br />
gecko@Leap-PC:~/Documentos> cp * dir1<br />
cp: cannot stat 'acceso_directo_a_script.sh': Non hai tal ficheiro ou directorio<br />
cp: -r no especificado; omitiendo directorio 'dir1'<br />
cp: -r no especificado; omitiendo directorio 'dir2'<br />
cp: -r no especificado; omitiendo directorio 'dir3'<br />
gecko@Leap-PC:~/Documentos> ls dir1<br />
enlace_script.sh fichero1.txt fichero2.txt<br />
gecko@Leap-PC:~/Documentos> rm dir1/*<br />
gecko@Leap-PC:~/Documentos> ls dir1/<br />
gecko@Leap-PC:~/Documentos><br />
</syntaxhighlight><br />
<br />
== Conectores de comandos ==<br />
Una de las cosas que hacen tan útiles a los terminales de comando son las distintas formas de interconectar unos comandos con otros.<br />
<br />
Por ejemplo, puedes ejecutar un comando de forma condicionada a la ejecución de otro. Con && la condición es "si el comando ha sido válido" y con || la condición es "en cualquier caso". Por ejemplo:<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> mkdir nuevo_dir && cd nuevo_dir && touch hola.txt && cd ..<br />
gecko@Leap-PC:~/Documentos> ls nuevo_dir/<br />
hola.txt<br />
gecko@Leap-PC:~/Documentos> mkdir nuevo_dir || cd nuevo_dir && touch nuevo_hola.txt && cd ..<br />
mkdir: no se puede crear el directorio "nuevo_dir": El fichero ya existe<br />
gecko@Leap-PC:~/Documentos> ls nuevo_dir/<br />
hola.txt nuevo_hola.txt<br />
</syntaxhighlight><br />
El segundo mkdir falla en su ejecución porque ya existe un directorio con ese nombre. Como la condición es ''O'', la doble barra, los comandos siguientes se ejecutan. Si hubiera usado la condición ''Y'', el doble ampersand, la ejecución se habría detenido ahí.<br />
<br />
Otra forma de encadenar comandos es con tuberías. En la sección [[#Ficheros regulares]] se ha empleado una tubería ''>''. Esta tubería hace que el resultado de ejecutar un comando, en aquel caso ''cat'', sea introducido en el fichero que hay a su derecha. Literalmente, ''cat > fichero.txt'' hace que lo que vamos escribiendo en la pantalla sea enviado al fichero ''fichero.txt''. Menos usual es la redirección inversa ''<''. Esto hace que lo que está a la derecha sea enviado a lo que está a la izquierda.<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> cat < fichero1.txt <br />
algún texto<br />
gecko@Leap-PC:~/Documentos> echo "más cosas" >> fichero1.txt<br />
gecko@Leap-PC:~/Documentos> cat fichero1.txt <br />
algún texto<br />
más cosas<br />
</syntaxhighlight><br />
Si usas un sólo signo ''>'' el resultado del comando de la izquierda sobrescribirá el fichero. Si usas dos signos ''>>'', el resultado se añadirá al final.<br />
<br />
Otra tubería popular es la barra vertical '''|''', que permite que el resultado de ejecutar un comando con el resultado de otro comando. Por ejemplo, para buscar ficheros que contengan ''icher'' en su nombre, normalmente bastaría con ls *icher*, pero también podemos hacer eso como ejemplo:<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> ls *icher*<br />
fichero1.txt fichero2.txt<br />
gecko@Leap-PC:~/Documentos> ls | grep icher<br />
fichero1.txt<br />
fichero2.txt<br />
</syntaxhighlight><br />
<br />
'''grep''' por defecto resaltará la cadena (conjunto de letras y signos) buscada. Por sí mismo es un comando que permite buscar cadenas de texto en ficheros de texto. Por ejemplo, para buscar qué fichero contiene la palabra algún:<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> grep algún *<br />
grep: acceso_directo_a_script.sh: No existe tal fichero o directorio<br />
grep: dir1: Es un directorio<br />
grep: dir2: Es un directorio<br />
grep: dir3: Es un directorio<br />
fichero1.txt:algún texto<br />
fichero2.txt:algún texto<br />
grep: nuevo_dir: Es un directorio<br />
</syntaxhighlight><br />
<br />
Y con frecuencia se utiliza para hacer búsquedas en la salida de algún comando que proporcione un resultado largo. Por ejemplo, el comando '''ps''' lista los procesos en ejecución y es común listarlos con las opciones -aux. Para buscar el proceso konsole, podemos hacer lo siguiente:<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> <br />
ps aux | grep konsole<br />
gecko 2549 0.0 1.0 694400 85380 ? Sl 18:18 0:02 /usr/bin/konsole -session 10137156d2e4000164613515200000032360018_1646241240_34218<br />
gecko 16848 0.0 0.0 10256 2456 pts/2 S+ 19:05 0:00 grep --color=auto konsole<br />
</syntaxhighlight><br />
<br />
Los conectores no necesitan tener espacios en blanco alrededor, pero es buena idea para hacerlo más legible. En ese sentido, <syntaxhighlight lang="bash" inline>echo "hola" > fichero.txt</syntaxhighlight> es exactamente igual a <syntaxhighlight lang="bash" inline>echo "hola">fichero.txt</syntaxhighlight><br />
<br />
== Notas ==<br />
# <cite id="nota1">En cualquier sistema gráfico pueden encontrarse estas aplicaciones buscando ''terminal''.</cite><br />
# <cite id="nota2">Linux distingue mayúsculas de minúsculas y es buena idea asumir que cualquier intérprete de comandos hará lo propio, aunque hay excepciones como algunos lenguajes de bases de datos, por ejemplo. En Bash, es diferente '''nombre''' de '''Nombre''' o de '''NOMBRE'''.</cite><br />
# <cite id="nota3">Salvo en el caso de que existan otras carpetas que comiencen por Doc, como por ejemplo ''Documentanción''.</cite><br />
# <cite id="nota4">Para aprender sobre el uso de permisos de ficheros, consulta la guía [[SDB:Fundamentos del sistema de permisos|Fundamentos del sistema de permisos]] </cite><br />
# <cite id="nota4">Los scripts suelen traducirse literalmente como ficheros de guiones o en otras ocasiones como ficheros por lotes. Ambas expresiones hacen referencia al hecho de que ejecutan tareas de una en una.<br />
<br />
<br />
[[Category:SDB:Guía de principiantes]]<br />
[[Category:Conceptos|Uso básico del terminal]]</div>Karlggesthttps://es.opensuse.org/index.php?title=SDB:Funtamentos_de_bash&diff=28381SDB:Funtamentos de bash2024-01-24T09:57:41Z<p>Karlggest: </p>
<hr />
<div>{{Barra de navegación para Conceptos}}<br />
<br />
{{Conocimiento básico<br />
|<br />
*[[Conceptos interfaz]]<br />
|<br />
*[https://es.wikipedia.org/wiki/Bash Bash]<br />
*[https://es.wikipedia.org/wiki/Shell_de_Unix Shell de Unix]<br />
*[https://es.wikipedia.org/wiki/Interfaz_de_l%C3%ADnea_de_comandos Interfaz de línea de comandos]<br />
}}<br />
== Introducción ==<br />
Aunque es posible usar un sistema operativo cualquiera con éxito sin usar jamás un terminal de comandos, lo cierto es que conocer su uso básico favorece el aprendizaje de algunos conceptos. El ámbito de este documento es orientar al usuario en el uso de comandos básicos que le servirán para dicho aprendizaje. Para aquellas personas usuarias interesadas en aprender un mejor uso del terminal se recomienda consultar obras más detalladas sobre Bash y en particular sobre su programación.<br />
<br />
== El intérprete ==<br />
El ''shell'' '''bash''', que es el que acompaña por defecto a la mayoría de distribuciones de Linux, es lo que se denomina ''un intérprete de comandos''. Eso significa que la persona usuaria interactúa con el sistema proporcionando comandos determinados que el intérprete procesa.<br />
<br />
Los escritorios gráficos de Linux proporcionan aplicaciones que permiten utilizar el intérprete de comandos desde la propia sesión gráfica. El escritorio Plasma proporciona [https://konsole.kde.org/ konsole] para esta labor[[#nota1|[1]]].<br />
<br />
El terminal en el que ejecutamos bash es una pantalla o ventana de texto. El intérprete proporciona un ''prompt''. Por defecto, en openSUSE está formado de la siguiente manera:<br />
<syntaxhighlight lang="bash"><br />
usuario@máquina:~><br />
</syntaxhighlight><br />
* ''usuario'' es tu nombre como usuaria.<br />
* ''@'' es un separador de forma similar a las direcciones de correo-e.<br />
* ''máquina'' es el nombre que le hayas asignado a tu máquina. Normalmente el sistema asigna un nombre más o menos arbitrario durante la instalación, pero puedes cambiárselo.<br />
* '':'' es otro separador.<br />
* ''~'' es una abreviatura para representar tu carpeta personal. Normalmente, a medida que te ''mueves'' por el árbol de directorios, esto se sustituye por tu ubicación actual.<br />
* ''>'' es otro separador.<br />
<br />
Cuando está visible este prompt en la última línea, significa que puedes introducir un comando. Por ejemplo, puedes ejectuar konsole o el terminal de tu escritorio gráfico, e introducir el siguiente comando para saber la ruta hasta donde estás:<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~> pwd<br />
/home/gecko<br />
gecko@Leap-PC:~> <br />
</syntaxhighlight><br />
Al ejecutar konsole se ejecutará automáticamente el intérprete de comandos que tengas configurado y que por defecto en openSUSE es Bash.<br />
<br />
{{Info|El uso del escritorio desarrollado por Microsoft para su sistema operativo Windows ha extendido el uso del término ''folder'' (carpeta) en lugar de ''directory'' (directorio) y en mi opinión está bien. Es una metáfora muy visual: ''guarda ese fichero en la carpeta del proyecto''. No obstante, en el mundo del terminal suele usarse ''directorio'' y de hecho la nemotecnia de los comandos empuja a ello: '''''c'''hange '''d'''irectory'' (cambiar directorio) para el comando cd, que permite justamente acceder a un directorio. No hay nada malo en usar ''carpeta'', pero la mayoría de textos que leas sobre el terminal emplearán ''directorio''. Consulta la sección [[#Carpetas|Carpetas]] para ver las diferencias.}}<br />
<br />
Los comandos del sistema tienen una página de manual que por desgracia no se ha traducido en años y que rara vez tendremos en castellano. Sin embargo, los comandos que ejecutaremos aquí son muy sencillos y pueden entenderse facilmente en inglés. Si deseas ver información del comando en castellano, puedes usar un buscador web con ''man comando español''. Por ejemplo, [https://duckduckgo.com/?q=man+pwd+espa%C3%B1ol&t=ffab&ia=web man pwd español].<br />
<br />
El prompt suele incluir, y en openSUSE es así por defecto, el nombre como usuaria del sistema. Pero esto no es así para la cuenta administradora (root), que se resalta en rojo, o puede que se haya establecido otra configuración. En cualquier caso, hay un comando para comprobar qué cuenta usuaria estás utilizando en ese momento: whoami, en inglés, literalmente, ¿quién soy?<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~> whoami<br />
gecko<br />
gecko@Leap-PC:~> <br />
</syntaxhighlight><br />
{{Info|En una sesión gráfica, el terminal en el que ejecutas bash, como konsole, se denomina ''terminal virtual''. Una ''verdadera'' sesión con el intérprete de comandos requiere hacerlo en modo texto y comenzará con el login, en el que se ha de introducir el nombre y la contraseña. En este documento se asume el uso de un terminal virtual, normalmente konsole.}}<br />
<br />
La sesión con el intérprete bash concluye al ejecutar el comando '''exit''' o bien al cerrar konsole.<br />
<br />
Es posible ejecutar distintos intérpretes de comandos dentro de una sesión con bash, incluso el propio bash. De hecho, eso es lo que sucede cuando se cambia de usuario con el comando '''su''' y el ''modificador'' '''-''':<br />
<pre><br />
gecko@Leap-PC:~> su -<br />
</pre><br />
<pre style="color: red"><br />
Leap-PC:~ #<br />
</pre><br />
<br />
El símbolo # es habitual en el prompt del administrador. Hay mucha documentación donde el verás que el símbolo $ corresponde a las cuentas usuarias regulares, y # al administrador, y se omite el resto del prompt, de esta forma:<br />
<syntaxhighlight lang="bash"><br />
$ whoami<br />
tux<br />
</syntaxhighlight><br />
<pre><br />
# whoami<br />
root<br />
</pre><br />
<br />
=== Procesos ===<br />
Aunque la idea de usar un intérprete de comandos es interactuar con el sistema mediante los susodichos comandos, en muchas ocasiones será interesante ejecutar un comando y dejar que se ejecute ''en segundo plano'' hasta que finalice. Por ejemplo, el comando cp que se verá en la sección [[#Copia con cp]] puede ejecuarse en segundo plano añadiendo el símbolo ampersand al final del comando:<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~> cp -r un_directorio_con_muchos_ficheros otra_carpeta &<br />
gecko@Leap-PC:~> <br />
</syntaxhighlight><br />
<br />
En lugar de mostrar el proceso del comando, inmediatamente devuelve el ''prompt'' para poder seguir introduciendo comandos. Es posible que a veces el comando en ejecución muestre de todas formas qué está haciendo, pero incluso así seguiremos teniendo el control del prompt para introducir otros comandos.<br />
<br />
En ocasiones podrá suceder que ejecutamos comandos largos sin el ampersand y nos vemos en la necesidad de interrumpirlo para ejecutar otros comandos distintos. Eso lo podemos hacer pulsando CTRL+C (la combinación general para interrumpir un comando).<br />
<br />
También es posible que querramos pasar a segundo plano el comando, lo que podemos hacer pulsando CTRL+Z. Eso normalmente detendrá la ejecución de ese comando y nos dará el control del ''prompt''. Para continuar con la ejecución del programa detenido, ejecutaremos el comando '''fg'''.<br />
<br />
'''kill''' es un comando que nos permite enviar señales a un comando que esté en ejecución. Esas señales pueden ser, por ejemplo, detenerse, o directamente matarse (interrumpirse por completo), y en general se emplea pasando la opción numérica correspondiente (9 para matar un proceso, 15 para detenerlo). '''killall''' permite matar procesos pero indicando el nombre del proceso, en lugar de su número de proceso (UID). ''ps'' es un comando que lista los procesos en ejecución.<br />
<br />
=== Uso de intérpretes de comandos en bash ===<br />
Hay muchos lenguajes de programación y aplicaciones específicas que proporcionan intérpretes de comandos: bases de datos, calculadoras, lenguajes interpretados... Si aun estás en la sesión con el administrador (prompt en rojo acabado en #), escribe '''exit''' para volver a la sesión de usuario y ejecuta la ''calculadora integrada'' con el comando '''bc''' (ejecuta '''man bc''' para aprender más sobre ella):<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~> bc<br />
bc 1.07.1<br />
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006, 2008, 2012-2017 Free Software Foundation, Inc.<br />
This is free software with ABSOLUTELY NO WARRANTY.<br />
For details type `warranty'. <br />
<br />
</syntaxhighlight><br />
'''bc''' no usa prompt y puedes escribir las expresiones a calcular directamente. Por ejemplo, para calcular la suma 5+3 basta con escribirlo y pulsar ''intro'':<br />
<syntaxhighlight lang="bash"><br />
5+3<br />
8<br />
</syntaxhighlight><br />
Para salir, basta con escribir '''quit''' (quitar el programa):<br />
<syntaxhighlight lang="bash"><br />
quit<br />
gecko@Leap-PC:~> <br />
</syntaxhighlight><br />
<br />
== Moviéndote por el árbol de directorios ==<br />
Cada directorio, salvo la raíz, contiene dos ficheros especiales, denominados '''.''' (punto) y '''..''' (dos puntos). El fichero '''.''' hace referencia al directorio actual y el fichero '''..''' hace referencia al directorio anterior o ''padre''.<br />
<br />
Para poder desplazarte por los directorios del sistema tienes el comando '''cd''' (change directory). Al comando le proporcionas el lugar al que quieres desplazarte, de la siguiente forma:<br />
* <syntaxhighlight lang="bash" inline>cd ruta_directorio</syntaxhighlight> te desplaza al directorio de nombre ruta_directorio<br />
* <syntaxhighlight lang="bash" inline>cd ..</syntaxhighlight> te desplaza al directorio padre del actual.<br />
* <syntaxhighlight lang="bash" inline>cd .</syntaxhighlight> no tiene efecto porque te desplaza al directorio actual.<br />
<br />
El signo / se emplea como separador entre directorios con el significado ''padre de''. En ''dir_padre''/''dir_hijo'', ''dir_hijo'' es un directorio que está ''dentro'' de ''dir_padre'', de forma que ''dir_padre'' es el directorio ''padre'' de ''dir_hijo''.<br />
<br />
Dado que el directorio raíz '''root''' no tiene padre, se representa únicamente con la barra espaciadora. De esta forma, para desplazarnos desde cualquier lugar hasta el directorio raíz, basta con ejecutar:<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~> cd /<br />
gecko@Leap-PC:/><br />
</syntaxhighlight><br />
<br />
Existen dos tipos de rutas a directorio: las rutas que incluyen toda la ruta desde el directorio raíz, llamadas '''rutas absolutas''' y las rutas que incluyen un origen en un directorio dado, llamadas '''rutas relativas'''. Normalmente las rutas relativas comenzarán en un directorio dentro de nuestro directorio actual.<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:/> cd /home/gecko<br />
gecko@Leap-PC:~> <br />
</syntaxhighlight><br />
<br />
El comando '''cd /home/gecko''' nos devuelve al directorio del usuario gecko. Por su parte<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~> cd Documentos<br />
gecko@Leap-PC:~/Documentos><br />
</syntaxhighlight><br />
<br />
Nos lleva al directorio ''Documentos'' dentro del directorio del usuario gecko. En ese punto, para volver al directorio del usuario tenemos tres opciones:<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> cd ..<br />
gecko@Leap-PC:~> <br />
</syntaxhighlight><br />
<syntaxhighlight lang="bash"><br />
<br />
O bien<br />
gecko@Leap-PC:~/Documentos> cd<br />
gecko@Leap-PC:~> <br />
</syntaxhighlight><br />
O bien<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> cd ~<br />
gecko@Leap-PC:~> <br />
</syntaxhighlight><br />
<br />
Usar cd sin argumentos te llevará siempre al directorio de usuario. Por su parte, la virgulilla es una abreviatura de bash y significa el directorio del usuario. Puede utilizarse de forma absoluta, formando rutas como ~/Documentos, o bien como atajo con el comando '''cd'''. Esto permite que, por ejemplo, para cambiar desde Documentos hasta Descargas, puedas ejecutar:<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> cd ~/Descargas<br />
gecko@Leap-PC:~/Descargas> <br />
</syntaxhighlight><br />
<br />
Bash tiene un montón de atajos y facilidades, y la instalación por defecto de openSUSE Leap añade muchos más. Por ejemplo, dentro de Descargas escribe: '''cd ../''' y pulsa la tecla tabulador (TAB) un par de veces:<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Descargas> cd ../<br />
</syntaxhighlight><br />
Pulsa el tabulador dos veces, y verás lo siguiente (puede haber otros directorios en tu sistema):<br />
<syntaxhighlight lang="bash"><br />
.cache/ .config/ Descargas/ Documentos/ Escritorio/ Imaxes/ .local/ logs/ Modelos/ Música/ Público/ Vídeos/<br />
</syntaxhighlight><br />
<br />
Al pulsar el tabulador, bash trata de autocompletar la ruta desde el texto que hayas escrito justo antes. ../ significa ''desde el directorio anterior'' y te proporcionará todas las opciones. Si escribes una '''D''' mayúscula[[#nota2|[2]]] y vuelves a pulsar el tabulador, te ofrecerá todas las opciones que comienzan con D (Documentos y Descargas, salvo que tengas algún directorio más en tu sistema que también empiece por D).<br />
<br />
Esta forma de ''autocompletar'' es muy cómoda, pero tiene sus cosas. Si pulsas una vez el tabulador, sólo funcionará si hay una sola opción disponible. Por ejemplo, <syntaxhighlight lang="bash" inline>cd ../Doc</syntaxhighlight> se autocompletará como <syntaxhighlight lang="bash" inline>cd ../Documentos/</syntaxhighlight>[[#nota3|[3]]]. Si no hay una única opción, ''volver'' a pulsarlo mostrará todas las opciones disponibles que coincidan con ese patrón. Si tienes un directorio llamado ''Proyectos'' dentro de ''Documentos'', puedes hacer lo siguiente para acceder a él: cd ~/Do<tabulador>Pr<tabuldador> (escribir cd, espacio, virguilulla, barra de división, Do, tabulador, Pr, tabulador. Lo cual irá autocompletando cd ~/Documentos/Proyectos. Una vez tienes todo el comando, basta con pulsar '''intro''' para ejecutar el comando.<br />
<br />
== Trabajando con ficheros ==<br />
Desde el punto de vista de Linux, cualquier cosa que no sea la red, es un fichero. Según el cometido de ese fichero, puede ser de diferentes tipos:<br />
* Ficheros regulares.<br />
** Ficheros de texto.<br />
** Ficheros binarios.<br />
** Directorios.<br />
* Enlaces blandos.<br />
* Enlaces duros.<br />
* Dispositivos.<br />
** de bloques.<br />
** de caracteres.<br />
<br />
=== Listar ficheros ===<br />
El comando usual para listar el contenido de un directorio, y ver así qué ficheros o directorios contiene, es '''ls'''.<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> ls<br />
script.sh<br />
</syntaxhighlight><br />
<br />
'''ls''' es un comando que admite un buen montón de argumentos. Los más habituales son:<br />
* l para visualizar un ''listado largo'', que incluye información de cada fichero o directorio tal como su propietario y permisos.<br />
* d para listar el directorio en lugar de su contenido. Es común usarlo con el argumento l.<br />
* a para listar los ficheros incluyendo los ficheros ocultos. En Linux, un fichero está oculto cuando su nombre comienza por . (punto).<br />
<br />
Para usar estas opciones, ls ha de ir seguida por el carácter guión '''-''', por ejemplo, para obtener un listado largo:<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> ls -l<br />
-rw-r--r-- 1 gecko users 31 Mar 1 17:51 script.sh<br />
</syntaxhighlight><br />
<br />
Aunque es posible poner cada opción con su propio guión, lo habitual es agruparlos. Así, los siguientes dos comandos tienen el mismo resultado:<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> ls -l -a<br />
total 12<br />
drwxr-xr-x 2 gecko users 22 Mar 1 18:29 .<br />
drwxr-xr-x 14 gecko users 4096 Mar 1 18:28 ..<br />
-rw------- 1 gecko users 105 Abr 14 2021 .directory<br />
-rw-r--r-- 1 gecko users 31 Mar 1 17:51 script.sh<br />
gecko@Leap-PC:~/Documentos> ls -la<br />
total 12<br />
drwxr-xr-x 2 gecko users 22 Mar 1 18:29 .<br />
drwxr-xr-x 14 gecko users 4096 Mar 1 18:28 ..<br />
-rw------- 1 gecko users 105 Abr 14 2021 .directory<br />
-rw-r--r-- 1 gecko users 31 Mar 1 17:51 script.sh<br />
</syntaxhighlight><br />
<br />
En el listado largo, cada fichero ocupa una fila. El primer grupo de caracteres empezará por d si es un directorio, - si es un fichero regular, b para un dispositivo de bloques, l para enlaces, b para dispositivos de bloques y c para dispositivos de caracteres.<br />
<br />
=== Ficheros regulares ===<br />
Los ficheros de texto contienen caracteres de texto, normalmente en código ASCII. En Linux son ampliamente usados, por ejemplo de forma preferente para los ficheros de configuración de casi cualquier elemento. Por su parte, los ficheros binarios tienen un contenido binario definido en función del tipo de fichero concreto. Los directorios son un tipo de fichero especial que permiten organizar los ficheros almacenados en el sistema de forma más adecuada para el uso por parte del usuario.<br />
<br />
Para que un fichero regular sea ejecutable ha de cumplir con dos requisitos: tener permiso de ejecución para el usuario que quiere ejecutarlo[[#nota4|[4]]], y contener código ejecutable de alguna clase. Por ejemplo, pwd es un fichero regular binario:<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> file /usr/bin/pwd<br />
/usr/bin/pwd: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=5d7ba8d4e2d3bda8835aaf230b257e55009d8f1a, for GNU/Linux 3.2.0, stripped<br />
</syntaxhighlight><br />
Podemos probar qué sucede si creamos un sencillo ''script''[[#nota5|[5]]], que son ficheros de texto que contienen código de algún lenguaje interpretado, incluido bash. Para ello usaremos el comando '''cat''' (que permite leer ficheros de texto) de una forma particular. Una vez que introduzcas cat > script y pulses intro, podrás introducir las líneas de una en una (pulsando intro en cada una, incluso en las vacías). Una vez acabado, después de "Hola mundo!", pulsa la combinación '''CTRL+D''':<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> cat > script.sh <br />
#!/bin/bash<br />
<br />
echo "Hola mundo!"<br />
gecko@Leap-PC:~/Documentos> file script.sh<br />
script.sh: Bourne-Again shell script, ASCII text executable<br />
</syntaxhighlight><br />
<br />
'''Bourne-Again shell''' es el nombre completo de Bash, y literalmente dice que es un fichero que contiene un script de bash escrito con texto ASCII y que es ejecutable.<br />
<br />
Para ejecutarlo no se requieren permisos de ejecución, basta con emplear algún intérprete de comandos adecuado, en este caso, bash.<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> bash script.sh <br />
Hola mundo<br />
gecko@Leap-PC:~/Documentos> sh script.sh<br />
Hola mundo<br />
gecko@Leap-PC:~/Documentos> <br />
</syntaxhighlight><br />
<br />
'''sh''' es otro atajo, en esta ocasión nombra al intérprete de comandos configurado en nuestro sistema. En la instalación por defecto de openSUSE será bash, pero hay muchos más.<br />
<br />
=== Eliminar directorios ===<br />
Los directorios, además de accedidos con el comando cd y creados con el comando mkdir, pueden ser eliminados. Sin embargo, para el sistema no es lo mismo eliminar una entrada de directorio correspondiente a un directorio vacío, que una entrada de directorio correspondiente a un directorio que a su vez tiene ficheros o directorios en su interior.<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> mkdir dir1<br />
gecko@Leap-PC:~/Documentos> ls<br />
acceso_directo_a_script.sh carpeta dir1 enlace_script.sh<br />
gecko@Leap-PC:~/Documentos> rmdir dir1<br />
gecko@Leap-PC:~/Documentos> ls<br />
acceso_directo_a_script.sh carpeta enlace_script.sh<br />
gecko@Leap-PC:~/Documentos> rmdir carpeta<br />
rmdir: error al eliminar 'carpeta': Directorio no vacío<br />
</syntaxhighlight><br />
<br />
Para eliminar directorios que contengan ficheros o directorios, se emplea el comando '''rm -r'''<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> rm -r carpeta/<br />
gecko@Leap-PC:~/Documentos> ls<br />
acceso_directo_a_script.sh enlace_script.sh<br />
</syntaxhighlight><br />
<br />
Sin embargo, rm es un comando para ficheros. rm aplicado a un directorio vacío no funcionará sin el parámetro -r:<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> mkdir dir1<br />
gecko@Leap-PC:~/Documentos> rm dir1<br />
rm: no se puede borrar 'dir1': Es un directorio<br />
</syntaxhighlight><br />
<br />
Tradicionalmente el borrado de ficheros y directorios requería confirmación para cada directorio o fichero borrado. Para evitar tener que responder a la misma pregunta cada vez se solía utilizar el parámentro -f, siendo la forma más común de borrado recursivo '''rm -rf directorio'''. openSUSE por defecto no te pedirá confirmación salvo que cambies la configuración del comando, con lo que rm -r tendrá el mismo efecto que rm -rf.<br />
<br />
==== Enlaces duros ====<br />
Los enlaces '''duros''' han perdido popularidad con el auge de los escritorios gráficos. La idea es que las ''entradas de directorio'' son una forma de organizar los ficheros ''para los usuarios'' de la computadora. No existe ningún área de ningún disco que se delimite para formar una carpeta y guardar ficheros ''dentro'' de esa área. El sistema operativo utiliza distintos procedimientos para establecer dónde guarda cada fichero. Dicho fichero ni siquiera tiene por qué estar todo junto, sino que es posible que esté repartido en fragmentos a lo largo del disco. Cada tipo de sistema de ficheros, sea btrfs, ext4, xfs, etc., lo hace de una forma diferente.<br />
<br />
De cara al usuario, los ficheros se guardan formando una jerarquía que permite relacionar los ficheros entre sí. Cuando operas con una entrada de un directorio dado, el sistema la traduce a la ubicación real del fichero y hace aquello que se haya indicado. Puedes pensar que cada entrada de directorio correspondiente a un fichero es un enlace entre ese fichero y el lugar real donde ser almacena el fichero. Así, cuando ejecutas ''cat script.sh'' el sistema consulta la entrada de script.sh y recupera el fichero real para mostrar su contenido por pantalla. En ese sentido, ''todos'' los ficheros regulares ''son'' enlaces ''duros''.<br />
<br />
Recuerda que los enlaces simbólicos son ficheros que contienen una ubicación. En ese sentido ''acceso directo a fichero'' (o directorio) es un nombre un poco más adecuado. En cambio, la herramienta para crear enlaces duros es la misma: '''ln''', pero sin opciones. La sintaxis es la misma: ln fichero enlace<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> ln script.sh enlace_script.sh<br />
gecko@Leap-PC:~/Documentos> ls -l<br />
total 8<br />
lrwxrwxrwx 1 gecko users 9 Mar 1 18:40 acceso_directo_a_script.sh -> script.sh<br />
-rw-r--r-- 2 gecko users 31 Mar 1 17:51 enlace_script.sh<br />
-rw-r--r-- 2 gecko users 31 Mar 1 17:51 script.sh<br />
</syntaxhighlight><br />
<br />
Como puedes observar, ahora hay un fichero llamado ''enlace_script.sh'' que es aparentemente igual a ''script.sh''. Podríamos ejecutarlo con bash o leer su contenido con cat para comprobar que son iguales, aunque eso no diferencia un enlace duro de un enlace simbólico. Pero si te fijas en el listado obtenido con ls -l, verás que en la columna que va antes del nombre del usuario propietario del fichero, en lugar de un 1 como teníamos hasta ahora, hay un 2. Ese número representa el número de enlaces duros que tiene ese fichero: por defecto es 1, porque, como ya se ha dicho, ''todos'' los ficheros son en realidad enlaces duros de sí mismos.<br />
<br />
Un uso habitual de los enlaces de cualquier tipo es hacer accesible el fichero como si formara parte de otro directorio. El comando '''mkdir''' (''make directory'', crear directorio) permite crear directorios.<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> mkdir carpeta<br />
gecko@Leap-PC:~/Documentos> ln script.sh carpeta/script.sh<br />
gecko@Leap-PC:~/Documentos> ls -l<br />
total 8<br />
lrwxrwxrwx 1 gecko users 9 Mar 1 18:40 acceso_directo_a_script.sh -> script.sh<br />
drwxr-xr-x 2 gecko users 22 Mar 1 19:09 carpeta<br />
-rw-r--r-- 3 gecko users 31 Mar 1 17:51 enlace_script.sh<br />
-rw-r--r-- 3 gecko users 31 Mar 1 17:51 script.sh<br />
gecko@Leap-PC:~/Documentos> ls -l carpeta/<br />
total 4<br />
-rw-r--r-- 3 karl users 31 Mar 1 17:51 script.sh<br />
</syntaxhighlight><br />
<br />
Ahora los tres ficheros, script.sh, enlace_script y carpeta/script.sh tienen un 3 en el número de enlaces duros. Como cada uno ''apunta'' al contenido del fichero en sí, cada entrada puede ser movida, renombrada o incluso eliminada sin afectar al resto de enlaces.<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> rm script.sh<br />
gecko@Leap-PC:~/Documentos> ls -l<br />
total 4<br />
lrwxrwxrwx 1 karl users 9 Mar 1 18:40 acceso_directo_a_script.sh -> script.sh<br />
drwxr-xr-x 2 karl users 22 Mar 1 19:09 carpeta<br />
-rw-r--r-- 2 karl users 31 Mar 1 17:51 enlace_script.sh<br />
</syntaxhighlight><br />
<br />
Por un lado, al borrar ''script.sh'' el enlace simbólico vuelve a estar roto. Por otro lado, el 3 en las entradas de los enlaces duros ha sido sustituido con un 2, que es el número de enlaces duros que quedan para el contenido de script.sh. En la práctica, borrar un fichero consiste en tener 0 enlaces duros al mismo.<br />
<br />
Y por supuesto, al modificar el contenido a través de cualquier enlace, obtenemos el mismo resultado con el resto de enlaces duros.<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> echo "echo y más allá!" >> carpeta/script.sh<br />
gecko@Leap-PC:~/Documentos> bash enlace_script.sh<br />
Hola mundo<br />
y más allá!<br />
</syntaxhighlight><br />
<br />
Los enlaces duros no son apropiados para crear enlaces entre ficheros de distintos dispositivos ni entre directorios. Para estos casos, emplea enlaces simbólicos.<br />
<br />
=== Eliminar directorios ===<br />
Los directorios, además de accedidos con el comando cd y creados con el comando mkdir, pueden ser eliminados. Sin embargo, para el sistema no es lo mismo eliminar una entrada de directorio correspondiente a un directorio vacío, que una entrada de directorio correspondiente a un directorio que a su vez tiene ficheros o directorios en su interior.<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> mkdir dir1<br />
gecko@Leap-PC:~/Documentos> ls<br />
acceso_directo_a_script.sh carpeta dir1 enlace_script.sh<br />
gecko@Leap-PC:~/Documentos> rmdir dir1<br />
gecko@Leap-PC:~/Documentos> ls<br />
acceso_directo_a_script.sh carpeta enlace_script.sh<br />
gecko@Leap-PC:~/Documentos> rmdir carpeta<br />
rmdir: error al eliminar 'carpeta': Directorio no vacío<br />
</syntaxhighlight><br />
<br />
Para eliminar directorios que contengan ficheros o directorios, se emplea el comando '''rm -r'''<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> rm -r carpeta/<br />
gecko@Leap-PC:~/Documentos> ls<br />
acceso_directo_a_script.sh enlace_script.sh<br />
</syntaxhighlight><br />
<br />
Sin embargo, rm es un comando para ficheros. rm aplicado a un directorio vacío no funcionará sin el parámetro -r:<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> mkdir dir1<br />
gecko@Leap-PC:~/Documentos> rm dir1<br />
rm: no se puede borrar 'dir1': Es un directorio<br />
</syntaxhighlight><br />
<br />
Tradicionalmente el borrado de ficheros y directorios requería confirmación para cada directorio o fichero borrado. Para evitar tener que responder a la misma pregunta cada vez se solía utilizar el parámentro -f, siendo la forma más común de borrado recursivo '''rm -rf directorio'''. openSUSE por defecto no te pedirá confirmación salvo que cambies la configuración del comando, con lo que rm -r tendrá el mismo efecto que rm -rf.<br />
<br />
=== Copiar y mover ficheros ===<br />
En la sección [[#Enlaces duros]] hemos visto que un mismo fichero puede tener varios enlaces, de tal forma que al eliminar cualquiera de ellos aun permanecerían los demás, y por ende su contenido.<br />
<br />
''Copiar'' un fichero consiste en obtener dos enlaces a dos copias diferentes del mismo fichero. En algunos tipos de sistemas de ficheros modernos en realidad no se hará una copia del fichero hasta que se intente modificar uno de ellos, característica denominada '''cow''' (''copy on write'', copia al modificar). Usar cow o no es una cuestión que atañe al sistema operativo e indistinto desde el punto de vista del usuario. Por su parte, ''mover'' un fichero o directorio implica cambiar su ubicación hasta otro directorio.<br />
<br />
==== Copia con cp ====<br />
La forma más sencilla de obtener una copia de un fichero es con el comando '''cp'''. Su sintaxis es <syntaxhighlight lang="bash" inline>cp origen destino</syntaxhighlight>. No obstante, cp presenta similitudes con rm: no puede copiar directorios, vacíos o no. Para ocuparse de directorios, ha de usarse la opción '''-r'''.<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> echo "algún texto" > fichero1.txt<br />
gecko@Leap-PC:~/Documentos> cp fichero1.txt fichero2.txt<br />
gecko@Leap-PC:~/Documentos> cat fichero1.txt fichero2.txt<br />
algún texto<br />
algún texto<br />
gecko@Leap-PC:~/Documentos> mkdir dir2<br />
gecko@Leap-PC:~/Documentos> cp fichero2.txt dir2/<br />
gecko@Leap-PC:~/Documentos> ls dir2/<br />
fichero2.txt<br />
gecko@Leap-PC:~/Documentos> cp dir2 dir3<br />
cp: -r no especificado; omitiendo directorio 'dir2'<br />
gecko@Leap-PC:~/Documentos> cp dir2 dir3 -r<br />
gecko@Leap-PC:~/Documentos> ls<br />
acceso_directo_a_script.sh dir1 dir2 dir3 enlace_script.sh fichero1.txt fichero2.txt<br />
gecko@Leap-PC:~/Documentos> ls dir3/<br />
fichero2.txt<br />
</syntaxhighlight><br />
{{Info|Cuando autocompletas con el tabulador se incluirá el separador '''/'''. El comando cp no actúa direfente con o sin barra de dividir, pero otros comandos que se verán a continuación pueden proporcionar resultados imprevistos.}}<br />
{{Info|La mayoría de comandos aceptarán las opciones más o menos en cualquier lugar. Por ejemplo, <syntaxhighlight lang="bash" inline>ls -l dir1/ -a</syntaxhighlight> funcionará correctamente.<br />
<br />
==== Copia con rsync ====<br />
'''rsync''' es una versión ''moderna'' de cp, pero especializada en la copia a través de sistemas de ficheros en red e incluso mediante '''ssh'''. Tiene montones de opciones, muchas de las cuales dependen de qué se esté haciendo. Por ejemplo, -va hace una copia completa (recursiva, incluyendo enlaces, permisos...) mostrando lo que se está copiando. y -z habilita la compresión de lo que se copia (útil para copiar por la red).<br />
<br />
Una de las particularidades de rsync es su habilidad para hacer ''copias incrementales''. Una copia incremental consiste en que cada vez que copias dos cosas, sólo copias aquellas cosas que han cambiado desde la última vez.<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> rsync -va dir2/ dir1/<br />
sending incremental file list<br />
./<br />
fichero2.txt<br />
<br />
sent 143 bytes received 38 bytes 362.00 bytes/sec<br />
total size is 13 speedup is 0.07<br />
gecko@Leap-PC:~/Documentos> ls dir1<br />
fichero2.txt<br />
gecko@Leap-PC:~/Documentos> echo "otro fichero más" >> dir2/fichero3.txt<br />
gecko@Leap-PC:~/Documentos> rsync -va dir2/ dir1/<br />
sending incremental file list<br />
./<br />
fichero3.txt<br />
<br />
sent 173 bytes received 38 bytes 422.00 bytes/sec<br />
total size is 31 speedup is 0.15<br />
gecko@Leap-PC:~/Documentos> ls dir1<br />
fichero2.txt fichero3.txt<br />
</syntaxhighlight><br />
<br />
==== Copia con dd ====<br />
'''dd''' es una utilidad para copiar ficheros ''bit a bit'' y que se utiliza principalmente para hacer copias exactas de imágenes de discos (clones). Por ejemplo, podrías clonar tu partición /dev/sda2 en un fichero llamado sda2.img de la siguente forma: <syntaxhighlight lang="bash" inline>dd if=/dev/sda2 of=sda2.img</syntaxhighlight>.<br />
<br />
Usar ''dd'' para copiar tus ficheros de un lugar a otro es un poco como matar moscas con misiles. Funciona, pero en general será más sencillo usar ''cp'' o ''rsync''. Para hacer una copia de ''fichero2.txt'' podríamos usar el comando:<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> dd if=fichero2.txt of=fichero3.txt<br />
gecko@Leap-PC:~/Documentos> cat fichero3.txt <br />
algún texto<br />
</syntaxhighlight><br />
<br />
<br />
==== Copia con cat ====<br />
Muchas de las cosas que se pueden hacer en un terminal son en realidad ''efectos secundarios''. Por ejemplo, el comando ''touch'' permite actualizar la hora de modificación de un fichero, pero su efecto secundario es que si no existe el fichero, lo crea con la fecha de modificación actualizada. Así que es ampliamente usado para crear ficheros vacíos.<br />
<br />
''cat'' muestra por pantalla el contenido de un fichero. Si redirigimos esta salida a un nuevo fichero, existente o no, tendremos una copia:<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> cat fichero1.txt > nuevo_fichero1.txt<br />
gecko@Leap-PC:~/Documentos> cat nuevo_fichero1.txt <br />
algún texto<br />
</syntaxhighlight><br />
<br />
Podemos indicar un fichero, varios usando comodines, o una lista de ellos. La salida será mostrada en pantalla, la de cada fichero a continuación del anterior. Eso nos permite una forma sencilla de ''concatenar'' o ''unir'' ficheros:<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> cat fichero?.txt > nuevo_fichero_enésimo.txt<br />
gecko@Leap-PC:~/Documentos> ls<br />
acceso_directo_a_script.sh dir1 dir2 dir3 enlace_script.sh fichero1.txt fichero2.txt fichero3.txt nuevo_dir nuevo_fichero1.txt nuevo_fichero_enésimo.txt<br />
gecko@Leap-PC:~/Documentos> cat nuevo_fichero_enésimo.txt <br />
algún texto<br />
algún texto<br />
algún texto<br />
</syntaxhighlight><br />
<br />
==== Mover y renombrar con mv ====<br />
'''mv'' permite mover ficheros y directorios de una ubicación a otra.<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> mv nuevo_fichero_enésimo.txt dir1/<br />
gecko@Leap-PC:~/Documentos> ls <br />
acceso_directo_a_script.sh dir1 dir2 dir3 enlace_script.sh fichero1.txt fichero2.txt fichero3.txt nuevo_dir nuevo_fichero1.txt<br />
gecko@Leap-PC:~/Documentos> ls dir1/<br />
fichero2.txt fichero3.txt nuevo_fichero_enésimo.txt<br />
</syntaxhighlight><br />
<br />
Y también permite renombrar ficheros y directorios:<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> mv dir1 directorio1<br />
gecko@Leap-PC:~/Documentos> ls<br />
acceso_directo_a_script.sh dir2 dir3 directorio1 enlace_script.sh fichero1.txt fichero2.txt fichero3.txt nuevo_dir nuevo_fichero1.txt<br />
</syntaxhighlight><br />
<br />
Esto puede ser un tanto confuso para el usuario recién llegado (y para el no tan reciente). Si existe el destino, mv moverá el origen al interior del destino:<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> mv dir2 dir3<br />
gecko@Leap-PC:~/Documentos> ls dir3<br />
dir2 fichero2.txt<br />
</syntaxhighlight><br />
<br />
Si existe un directorio con el nombre indicado en el destino, mv moverá el origen al directorio destino. Pero si renombras un fichero con el nombre de un fichero existente, ¡lo sobrescribirá!!<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> mv enlace_script.sh fichero1.txt<br />
gecko@Leap-PC:~/Documentos> ls<br />
acceso_directo_a_script.sh dir3 directorio1 fichero1.txt fichero2.txt fichero3.txt nuevo_dir nuevo_fichero1.txt<br />
gecko@Leap-PC:~/Documentos> cat fichero1.txt<br />
#!/bin/bash<br />
<br />
echo "Hola mundo"<br />
echo y más allá!<br />
</syntaxhighlight><br />
<br />
== Carpetas ==<br />
En Linux se utiliza una aproximación interesante al concepto de carpeta. Algunos directorios contienen un fichero especial y oculto denominado ''.directory'', que permite establecer configuraciones generales al utilizarse con ciertas aplicaciones.<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> cat .directory<br />
[Dolphin]<br />
PreviewsShown=true<br />
SortOrder=1<br />
SortRole=modificationtime<br />
Timestamp=2022,3,1,19,58,21<br />
Version=4<br />
<br />
[Settings]<br />
HiddenFilesShown=false<br />
</syntaxhighlight><br />
<br />
En este fichero de texto de configuración, los corchetes se usan para delimitar apartados. El primer apartado corresponde al gestor de ficheros [[Dolphin]]. Por ejemplo, indica que se muestren las previsualizaciones de los ficheros que contenga y la forma de ordenación al mostrar el contenido. El apartado Settings establece que cada vez que se muestre su contenido se no se incluyan los ficheros ocultos.<br />
<br />
== Comodines ==<br />
En Bash puedes usar un montón de comodines y abreviaturas. Por ejemplo, un asterisco '''*''' sustituye a cualquier conjunto de caracteres, mientras que un interrogante '''?''' sustituye a un caracter. Por ejemplo:<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> ls dir?<br />
dir1:<br />
<br />
dir2:<br />
fichero2.txt<br />
<br />
dir3:<br />
fichero2.txt<br />
gecko@Leap-PC:~/Documentos> cp * dir1<br />
cp: cannot stat 'acceso_directo_a_script.sh': Non hai tal ficheiro ou directorio<br />
cp: -r no especificado; omitiendo directorio 'dir1'<br />
cp: -r no especificado; omitiendo directorio 'dir2'<br />
cp: -r no especificado; omitiendo directorio 'dir3'<br />
gecko@Leap-PC:~/Documentos> ls dir1<br />
enlace_script.sh fichero1.txt fichero2.txt<br />
gecko@Leap-PC:~/Documentos> rm dir1/*<br />
gecko@Leap-PC:~/Documentos> ls dir1/<br />
gecko@Leap-PC:~/Documentos><br />
</syntaxhighlight><br />
<br />
== Conectores de comandos ==<br />
Una de las cosas que hacen tan útiles a los terminales de comando son las distintas formas de interconectar unos comandos con otros.<br />
<br />
Por ejemplo, puedes ejecutar un comando de forma condicionada a la ejecución de otro. Con && la condición es "si el comando ha sido válido" y con || la condición es "en cualquier caso". Por ejemplo:<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> mkdir nuevo_dir && cd nuevo_dir && touch hola.txt && cd ..<br />
gecko@Leap-PC:~/Documentos> ls nuevo_dir/<br />
hola.txt<br />
gecko@Leap-PC:~/Documentos> mkdir nuevo_dir || cd nuevo_dir && touch nuevo_hola.txt && cd ..<br />
mkdir: no se puede crear el directorio "nuevo_dir": El fichero ya existe<br />
gecko@Leap-PC:~/Documentos> ls nuevo_dir/<br />
hola.txt nuevo_hola.txt<br />
</syntaxhighlight><br />
El segundo mkdir falla en su ejecución porque ya existe un directorio con ese nombre. Como la condición es ''O'', la doble barra, los comandos siguientes se ejecutan. Si hubiera usado la condición ''Y'', el doble ampersand, la ejecución se habría detenido ahí.<br />
<br />
Otra forma de encadenar comandos es con tuberías. En la sección [[#Ficheros regulares]] se ha empleado una tubería ''>''. Esta tubería hace que el resultado de ejecutar un comando, en aquel caso ''cat'', sea introducido en el fichero que hay a su derecha. Literalmente, ''cat > fichero.txt'' hace que lo que vamos escribiendo en la pantalla sea enviado al fichero ''fichero.txt''. Menos usual es la redirección inversa ''<''. Esto hace que lo que está a la derecha sea enviado a lo que está a la izquierda.<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> cat < fichero1.txt <br />
algún texto<br />
gecko@Leap-PC:~/Documentos> echo "más cosas" >> fichero1.txt<br />
gecko@Leap-PC:~/Documentos> cat fichero1.txt <br />
algún texto<br />
más cosas<br />
</syntaxhighlight><br />
Si usas un sólo signo ''>'' el resultado del comando de la izquierda sobrescribirá el fichero. Si usas dos signos ''>>'', el resultado se añadirá al final.<br />
<br />
Otra tubería popular es la barra vertical '''|''', que permite que el resultado de ejecutar un comando con el resultado de otro comando. Por ejemplo, para buscar ficheros que contengan ''icher'' en su nombre, normalmente bastaría con ls *icher*, pero también podemos hacer eso como ejemplo:<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> ls *icher*<br />
fichero1.txt fichero2.txt<br />
gecko@Leap-PC:~/Documentos> ls | grep icher<br />
fichero1.txt<br />
fichero2.txt<br />
</syntaxhighlight><br />
<br />
'''grep''' por defecto resaltará la cadena (conjunto de letras y signos) buscada. Por sí mismo es un comando que permite buscar cadenas de texto en ficheros de texto. Por ejemplo, para buscar qué fichero contiene la palabra algún:<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> grep algún *<br />
grep: acceso_directo_a_script.sh: No existe tal fichero o directorio<br />
grep: dir1: Es un directorio<br />
grep: dir2: Es un directorio<br />
grep: dir3: Es un directorio<br />
fichero1.txt:algún texto<br />
fichero2.txt:algún texto<br />
grep: nuevo_dir: Es un directorio<br />
</syntaxhighlight><br />
<br />
Y con frecuencia se utiliza para hacer búsquedas en la salida de algún comando que proporcione un resultado largo. Por ejemplo, el comando '''ps''' lista los procesos en ejecución y es común listarlos con las opciones -aux. Para buscar el proceso konsole, podemos hacer lo siguiente:<br />
<syntaxhighlight lang="bash"><br />
gecko@Leap-PC:~/Documentos> <br />
ps aux | grep konsole<br />
gecko 2549 0.0 1.0 694400 85380 ? Sl 18:18 0:02 /usr/bin/konsole -session 10137156d2e4000164613515200000032360018_1646241240_34218<br />
gecko 16848 0.0 0.0 10256 2456 pts/2 S+ 19:05 0:00 grep --color=auto konsole<br />
</syntaxhighlight><br />
<br />
Los conectores no necesitan tener espacios en blanco alrededor, pero es buena idea para hacerlo más legible. En ese sentido, <syntaxhighlight lang="bash" inline>echo "hola" > fichero.txt</syntaxhighlight> es exactamente igual a <syntaxhighlight lang="bash" inline>echo "hola">fichero.txt</syntaxhighlight><br />
<br />
== Notas ==<br />
# <cite id="nota1">En cualquier sistema gráfico pueden encontrarse estas aplicaciones buscando ''terminal''.</cite><br />
# <cite id="nota2">Linux distingue mayúsculas de minúsculas y es buena idea asumir que cualquier intérprete de comandos hará lo propio, aunque hay excepciones como algunos lenguajes de bases de datos, por ejemplo. En Bash, es diferente '''nombre''' de '''Nombre''' o de '''NOMBRE'''.</cite><br />
# <cite id="nota3">Salvo en el caso de que existan otras carpetas que comiencen por Doc, como por ejemplo ''Documentanción''.</cite><br />
# <cite id="nota4">Para aprender sobre el uso de permisos de ficheros, consulta la guía [[SDB:Fundamentos del sistema de permisos|Fundamentos del sistema de permisos]] </cite><br />
# <cite id="nota4">Los scripts suelen traducirse literalmente como ficheros de guiones o en otras ocasiones como ficheros por lotes. Ambas expresiones hacen referencia al hecho de que ejecutan tareas de una en una.<br />
<br />
<br />
[[Category:SDB:Guía de principiantes]]<br />
[[Category:Conceptos|Uso básico del terminal]]</div>Karlggesthttps://es.opensuse.org/index.php?title=Plantilla:IW&diff=28379Plantilla:IW2023-11-01T12:43:01Z<p>Karlggest: </p>
<hr />
<div><onlyinclude>[[cs:{{{1}}}]]<br />
[[de:{{{1}}}]]<br />
[[el:{{{1}}}]]<br />
[[en:{{{1}}}]]<br />
[[fr:{{{1}}}]]<br />
[[it:{{{1}}}]]<br />
[[hu:{{{1}}}]]<br />
[[pt:{{{1}}}]]<br />
[[ru:{{{1}}}]]<br />
[[sv:{{{1}}}]]<br />
[[tr:{{{1}}}]]<br />
[[vi:{{{1}}}]]<br />
[[ja:{{{1}}}]]</onlyinclude></div>Karlggesthttps://es.opensuse.org/index.php?title=Plantilla:IW&diff=28376Plantilla:IW2023-11-01T12:41:41Z<p>Karlggest: </p>
<hr />
<div><onlyinclude>[[cs:{{{1}}}]]<br />
[[de:{{{1}}}]]<br />
[[el:{{{1}}}]]<br />
[[en:{{{1}}}]]<br />
[[fr:{{{1}}}]]<br />
[[it:{{{1}}}]]<br />
[[hu:{{{1}}}]]<br />
[[pt:{{{1}}}]]<br />
[[ru:{{{1}}}]]<br />
[[sv:{{{1}}}]]<br />
[[tr:{{{1}}}]]<br />
[[vi:{{{1}}}]]<br />
[[ja:{{{1}}}]]</onlyinclude><br />
<includeonly><br />
[[Categoría:IW]]<br />
</includeonly></div>Karlggesthttps://es.opensuse.org/index.php?title=Distrobox&diff=28373Distrobox2023-11-01T12:39:44Z<p>Karlggest: /* Ver más */</p>
<hr />
<div>==Acerca de==<br />
Distrobox es una herramienta para proporcionar entornos de ejecución en contenedores de varias distribuciones de Linux diferentes.<br />
<br />
Es particularmente interesante para los usuarios de Linux inmutable (por ejemplo, MicroOS), donde puede proporcionar un espacio de usuario de lectura y escritura para que se puedan instalar nuevas herramientas sin necesidad de reiniciar. Es similar a otras herramientas como 'toolbox' (que se incluye en la versión de servidor de MicroOS de forma predeterminada), pero tiene otras ventajas para el uso de escritorio. Consulta https://github.com/89luca89/distrobox para conocer todas las opciones.<br />
<br />
==Inicio rápido==<br />
===MicroOS===<br />
Distrobox ya está instalado en las máquinas de escritorio MicroOS; de lo contrario, primero debe instalar el paquete distrobox<br />
<br />
Crea y abre un entorno de Tumbleweed predeterminado con:<br />
$ distrobox enter<br />
<br />
===Tumbleweed y Leap===<br />
Leap no viene con Distrobox preinstalado, por lo que las personas usuarias deben instalarlo manualmente. En el caso de Docker, su usuario debe estar en el grupo Docker; de lo contrario, recibirá el siguiente error: permiso denegado al intentar conectarse al socket del demonio de Docker.<br />
$ sudo zypper install distrobox # pulls en docker por defecto<br />
$ sudo groupadd docker; sudo usermod -aG docker $USER # deberás reiniciar tu sesión usuaria para que los cambios tomen efecto<br />
$ sudo systemctl enable --now docker<br />
$ distrobox enter<br />
<br />
==Distrobox para empaquetadores==<br />
openSUSE tiene una imagen de contenedor personalizada lista para distrobox para uso de openSUSE Packagers, Release Managers y similares. Además de ser realmente útil para los usuarios de MicroOS Desktop, también puede ser de interés para los usuarios de Leap u otras Distribuciones que no son de openSUSE.<br />
<br />
Esta distrobox ya tiene todas las siguientes herramientas instaladas y listas para usar<br />
<br />
* osc<br />
* git<br />
* build<br />
* vim<br />
* muchos complementos de servicios osc (por ejemplo, tar, tar_scm, obs_scm, recompress, go_modules, etc.)<br />
* Complementos de ''staging'', ciclo y origen de osc<br />
* herramientas-de-publicación-openuse<br />
<br />
Para crear un cuadro de distribución usando esta imagen, ejecuta:<br />
$ distrobox create --root --name tumbleweed-pkg --image registry.opensuse.org/opensuse/distrobox-packaging:latest<br />
<br />
===Notas===<br />
* --root es opcional, pero necesario si quieres utilizar características como ''osc build''<br />
* --name puede ser lo que quieras como nombre de tu distrobox, solo para asegúrate de sustituir cualquiera que uses en su lugar<br />
<br />
Por favor, asegúrate de usar distrobox enter --root en caso que hayas usado --root durante la creación; de otra forma crearás una nueva rama de tu distrobox.<br />
<br />
Para entrar en el distrobox, ejecuta<br />
$ distrobox enter tumbleweed-pkg<br />
<br />
==Exportar==<br />
Con ''distrobox-export'' puedes crear un atajo en tu sistema huésped para abrir una aplicación de un contenedor distrobox. Así, en este ejemplo, si quieres exportar una aplicación de escritorio (GUI) que has instalado, entra en el distrobox de tu elección e introduce lo siguiente (como un usuario regular, no como root):<br />
$ distrobox-export --app <nombre de la applicación><br />
Esto poblará tu directorio de usuario con el correspondiente fichero .desktop, el icono y un enlace situado en ~/.local/share/applications/ para poblar el menú de usuario como si la aplicación fuese instalada ''normalmente''.<br />
<br />
==Ver más==<br />
Para aprender más sobre indicadores adicionales y cómo exportar otras aplicaciones que requieren servicios (ej. syncthing), visita [https://github.com/89luca89/distrobox/blob/main/docs/usage/distrobox-export.md | export man pages.]<br />
<br />
[[Categoría:MicroOS]]<br />
__NOTOC____NOEDITSECTION__<br />
{{IW|Distrobox}}</div>Karlggesthttps://es.opensuse.org/index.php?title=Distrobox&diff=28370Distrobox2023-11-01T12:37:30Z<p>Karlggest: </p>
<hr />
<div>==Acerca de==<br />
Distrobox es una herramienta para proporcionar entornos de ejecución en contenedores de varias distribuciones de Linux diferentes.<br />
<br />
Es particularmente interesante para los usuarios de Linux inmutable (por ejemplo, MicroOS), donde puede proporcionar un espacio de usuario de lectura y escritura para que se puedan instalar nuevas herramientas sin necesidad de reiniciar. Es similar a otras herramientas como 'toolbox' (que se incluye en la versión de servidor de MicroOS de forma predeterminada), pero tiene otras ventajas para el uso de escritorio. Consulta https://github.com/89luca89/distrobox para conocer todas las opciones.<br />
<br />
==Inicio rápido==<br />
===MicroOS===<br />
Distrobox ya está instalado en las máquinas de escritorio MicroOS; de lo contrario, primero debe instalar el paquete distrobox<br />
<br />
Crea y abre un entorno de Tumbleweed predeterminado con:<br />
$ distrobox enter<br />
<br />
===Tumbleweed y Leap===<br />
Leap no viene con Distrobox preinstalado, por lo que las personas usuarias deben instalarlo manualmente. En el caso de Docker, su usuario debe estar en el grupo Docker; de lo contrario, recibirá el siguiente error: permiso denegado al intentar conectarse al socket del demonio de Docker.<br />
$ sudo zypper install distrobox # pulls en docker por defecto<br />
$ sudo groupadd docker; sudo usermod -aG docker $USER # deberás reiniciar tu sesión usuaria para que los cambios tomen efecto<br />
$ sudo systemctl enable --now docker<br />
$ distrobox enter<br />
<br />
==Distrobox para empaquetadores==<br />
openSUSE tiene una imagen de contenedor personalizada lista para distrobox para uso de openSUSE Packagers, Release Managers y similares. Además de ser realmente útil para los usuarios de MicroOS Desktop, también puede ser de interés para los usuarios de Leap u otras Distribuciones que no son de openSUSE.<br />
<br />
Esta distrobox ya tiene todas las siguientes herramientas instaladas y listas para usar<br />
<br />
* osc<br />
* git<br />
* build<br />
* vim<br />
* muchos complementos de servicios osc (por ejemplo, tar, tar_scm, obs_scm, recompress, go_modules, etc.)<br />
* Complementos de ''staging'', ciclo y origen de osc<br />
* herramientas-de-publicación-openuse<br />
<br />
Para crear un cuadro de distribución usando esta imagen, ejecuta:<br />
$ distrobox create --root --name tumbleweed-pkg --image registry.opensuse.org/opensuse/distrobox-packaging:latest<br />
<br />
===Notas===<br />
* --root es opcional, pero necesario si quieres utilizar características como ''osc build''<br />
* --name puede ser lo que quieras como nombre de tu distrobox, solo para asegúrate de sustituir cualquiera que uses en su lugar<br />
<br />
Por favor, asegúrate de usar distrobox enter --root en caso que hayas usado --root durante la creación; de otra forma crearás una nueva rama de tu distrobox.<br />
<br />
Para entrar en el distrobox, ejecuta<br />
$ distrobox enter tumbleweed-pkg<br />
<br />
==Exportar==<br />
Con ''distrobox-export'' puedes crear un atajo en tu sistema huésped para abrir una aplicación de un contenedor distrobox. Así, en este ejemplo, si quieres exportar una aplicación de escritorio (GUI) que has instalado, entra en el distrobox de tu elección e introduce lo siguiente (como un usuario regular, no como root):<br />
$ distrobox-export --app <nombre de la applicación><br />
Esto poblará tu directorio de usuario con el correspondiente fichero .desktop, el icono y un enlace situado en ~/.local/share/applications/ para poblar el menú de usuario como si la aplicación fuese instalada ''normalmente''.<br />
<br />
==Ver más==<br />
Para aprender más sobre indicadores adicionales y cómo exportar otras aplicaciones que requieren servicios (ej. syncthing), visita [https://github.com/89luca89/distrobox/blob/main/docs/usage/distrobox-export.md | export man pages.]<br />
<br />
[[Categoría:MicroOS]]<br />
<noinclude><br />
{{IW|Distrobox}}<br />
</noinclude></div>Karlggesthttps://es.opensuse.org/index.php?title=Distrobox&diff=28367Distrobox2023-11-01T12:36:55Z<p>Karlggest: /* Ver más */</p>
<hr />
<div>==Acerca de==<br />
Distrobox es una herramienta para proporcionar entornos de ejecución en contenedores de varias distribuciones de Linux diferentes.<br />
<br />
Es particularmente interesante para los usuarios de Linux inmutable (por ejemplo, MicroOS), donde puede proporcionar un espacio de usuario de lectura y escritura para que se puedan instalar nuevas herramientas sin necesidad de reiniciar. Es similar a otras herramientas como 'toolbox' (que se incluye en la versión de servidor de MicroOS de forma predeterminada), pero tiene otras ventajas para el uso de escritorio. Consulta https://github.com/89luca89/distrobox para conocer todas las opciones.<br />
<br />
==Inicio rápido==<br />
===MicroOS===<br />
Distrobox ya está instalado en las máquinas de escritorio MicroOS; de lo contrario, primero debe instalar el paquete distrobox<br />
<br />
Crea y abre un entorno de Tumbleweed predeterminado con:<br />
$ distrobox enter<br />
<br />
===Tumbleweed y Leap===<br />
Leap no viene con Distrobox preinstalado, por lo que las personas usuarias deben instalarlo manualmente. En el caso de Docker, su usuario debe estar en el grupo Docker; de lo contrario, recibirá el siguiente error: permiso denegado al intentar conectarse al socket del demonio de Docker.<br />
$ sudo zypper install distrobox # pulls en docker por defecto<br />
$ sudo groupadd docker; sudo usermod -aG docker $USER # deberás reiniciar tu sesión usuaria para que los cambios tomen efecto<br />
$ sudo systemctl enable --now docker<br />
$ distrobox enter<br />
<br />
==Distrobox para empaquetadores==<br />
openSUSE tiene una imagen de contenedor personalizada lista para distrobox para uso de openSUSE Packagers, Release Managers y similares. Además de ser realmente útil para los usuarios de MicroOS Desktop, también puede ser de interés para los usuarios de Leap u otras Distribuciones que no son de openSUSE.<br />
<br />
Esta distrobox ya tiene todas las siguientes herramientas instaladas y listas para usar<br />
<br />
* osc<br />
* git<br />
* build<br />
* vim<br />
* muchos complementos de servicios osc (por ejemplo, tar, tar_scm, obs_scm, recompress, go_modules, etc.)<br />
* Complementos de ''staging'', ciclo y origen de osc<br />
* herramientas-de-publicación-openuse<br />
<br />
Para crear un cuadro de distribución usando esta imagen, ejecuta:<br />
$ distrobox create --root --name tumbleweed-pkg --image registry.opensuse.org/opensuse/distrobox-packaging:latest<br />
<br />
===Notas===<br />
* --root es opcional, pero necesario si quieres utilizar características como ''osc build''<br />
* --name puede ser lo que quieras como nombre de tu distrobox, solo para asegúrate de sustituir cualquiera que uses en su lugar<br />
<br />
Por favor, asegúrate de usar distrobox enter --root en caso que hayas usado --root durante la creación; de otra forma crearás una nueva rama de tu distrobox.<br />
<br />
Para entrar en el distrobox, ejecuta<br />
$ distrobox enter tumbleweed-pkg<br />
<br />
==Exportar==<br />
Con ''distrobox-export'' puedes crear un atajo en tu sistema huésped para abrir una aplicación de un contenedor distrobox. Así, en este ejemplo, si quieres exportar una aplicación de escritorio (GUI) que has instalado, entra en el distrobox de tu elección e introduce lo siguiente (como un usuario regular, no como root):<br />
$ distrobox-export --app <nombre de la applicación><br />
Esto poblará tu directorio de usuario con el correspondiente fichero .desktop, el icono y un enlace situado en ~/.local/share/applications/ para poblar el menú de usuario como si la aplicación fuese instalada ''normalmente''.<br />
<br />
==Ver más==<br />
Para aprender más sobre indicadores adicionales y cómo exportar otras aplicaciones que requieren servicios (ej. syncthing), visita [https://github.com/89luca89/distrobox/blob/main/docs/usage/distrobox-export.md | export man pages.]<br />
<br />
[[Categoría:MicroOS]]<br />
{{IW|Distrobox}}</div>Karlggesthttps://es.opensuse.org/index.php?title=Distrobox&diff=28364Distrobox2023-11-01T12:36:27Z<p>Karlggest: </p>
<hr />
<div>==Acerca de==<br />
Distrobox es una herramienta para proporcionar entornos de ejecución en contenedores de varias distribuciones de Linux diferentes.<br />
<br />
Es particularmente interesante para los usuarios de Linux inmutable (por ejemplo, MicroOS), donde puede proporcionar un espacio de usuario de lectura y escritura para que se puedan instalar nuevas herramientas sin necesidad de reiniciar. Es similar a otras herramientas como 'toolbox' (que se incluye en la versión de servidor de MicroOS de forma predeterminada), pero tiene otras ventajas para el uso de escritorio. Consulta https://github.com/89luca89/distrobox para conocer todas las opciones.<br />
<br />
==Inicio rápido==<br />
===MicroOS===<br />
Distrobox ya está instalado en las máquinas de escritorio MicroOS; de lo contrario, primero debe instalar el paquete distrobox<br />
<br />
Crea y abre un entorno de Tumbleweed predeterminado con:<br />
$ distrobox enter<br />
<br />
===Tumbleweed y Leap===<br />
Leap no viene con Distrobox preinstalado, por lo que las personas usuarias deben instalarlo manualmente. En el caso de Docker, su usuario debe estar en el grupo Docker; de lo contrario, recibirá el siguiente error: permiso denegado al intentar conectarse al socket del demonio de Docker.<br />
$ sudo zypper install distrobox # pulls en docker por defecto<br />
$ sudo groupadd docker; sudo usermod -aG docker $USER # deberás reiniciar tu sesión usuaria para que los cambios tomen efecto<br />
$ sudo systemctl enable --now docker<br />
$ distrobox enter<br />
<br />
==Distrobox para empaquetadores==<br />
openSUSE tiene una imagen de contenedor personalizada lista para distrobox para uso de openSUSE Packagers, Release Managers y similares. Además de ser realmente útil para los usuarios de MicroOS Desktop, también puede ser de interés para los usuarios de Leap u otras Distribuciones que no son de openSUSE.<br />
<br />
Esta distrobox ya tiene todas las siguientes herramientas instaladas y listas para usar<br />
<br />
* osc<br />
* git<br />
* build<br />
* vim<br />
* muchos complementos de servicios osc (por ejemplo, tar, tar_scm, obs_scm, recompress, go_modules, etc.)<br />
* Complementos de ''staging'', ciclo y origen de osc<br />
* herramientas-de-publicación-openuse<br />
<br />
Para crear un cuadro de distribución usando esta imagen, ejecuta:<br />
$ distrobox create --root --name tumbleweed-pkg --image registry.opensuse.org/opensuse/distrobox-packaging:latest<br />
<br />
===Notas===<br />
* --root es opcional, pero necesario si quieres utilizar características como ''osc build''<br />
* --name puede ser lo que quieras como nombre de tu distrobox, solo para asegúrate de sustituir cualquiera que uses en su lugar<br />
<br />
Por favor, asegúrate de usar distrobox enter --root en caso que hayas usado --root durante la creación; de otra forma crearás una nueva rama de tu distrobox.<br />
<br />
Para entrar en el distrobox, ejecuta<br />
$ distrobox enter tumbleweed-pkg<br />
<br />
==Exportar==<br />
Con ''distrobox-export'' puedes crear un atajo en tu sistema huésped para abrir una aplicación de un contenedor distrobox. Así, en este ejemplo, si quieres exportar una aplicación de escritorio (GUI) que has instalado, entra en el distrobox de tu elección e introduce lo siguiente (como un usuario regular, no como root):<br />
$ distrobox-export --app <nombre de la applicación><br />
Esto poblará tu directorio de usuario con el correspondiente fichero .desktop, el icono y un enlace situado en ~/.local/share/applications/ para poblar el menú de usuario como si la aplicación fuese instalada ''normalmente''.<br />
<br />
==Ver más==<br />
Para aprender más sobre indicadores adicionales y cómo exportar otras aplicaciones que requieren servicios (ej. syncthing), visita [https://github.com/89luca89/distrobox/blob/main/docs/usage/distrobox-export.md | export man pages.]<br />
<br />
[[Categoría:MicroOS]]<br />
{{IW}}</div>Karlggesthttps://es.opensuse.org/index.php?title=SDB:Maneja_tus_ficheros_con_dolphin&diff=28361SDB:Maneja tus ficheros con dolphin2023-10-31T14:31:36Z<p>Karlggest: /* Buscar de ficheros */</p>
<hr />
<div>{{Info|Lo descrito en este documento es de aplicación a '''dolphin''' para Plasma 5.x, si bien la configuración por defecto puede variar entre distribuciones o incluso versiones de una misma distribución.}}<br />
{{Intro|[[dolphin]] es la herramienta del escritorio Plasma para gestionar tus ficheros. <br />
}}<br />
{{Conocimiento básico|<br />
*[[Dolphin]]<br />
*[[SDB:Fundamentos del sistema de ficheros]]<br />
*[[SDB:Fundamentos del sistema de permisos]]<br />
|<br />
*[https://apps.kde.org/es/dolphin/ Web de dolphin]<br />
*[https://docs.kde.org/stable5/es/dolphin/dolphin/index.html Manual de dolphin]<br />
}}<br />
__TOC__<br />
== Instalación ==<br />
'''dolphin''' viene incluido con el escritorio Plasma. Ya sea por haber seleccionado este escritorio durante la instalación, o tras haber instalado el patrón de paquetes correspondiente al escritorio Plasma, dolphin debería de estar instalado en tu sistema.<br />
<br />
Si has optado por otro entorno de escritorio, deberás instalarlo. Está disponible en los repositorios oficiales y además KDE incluye a dolphin en las '''KDE Applications''' con el calendario de lanzamientos de ese proyecto.<br />
{{Info|Existe un repositorio para disponer de la versión más reciente en http://repos.opensuse.org/repositories/KDE:/Applications/. Sin embargo, para Leap requiere la actualización de las librerías QT, lo que puede afectar a otras aplicaciones disponibles en tu sistema.}}<br />
<br />
=== Instalación con zypper ===<br />
<syntaxhighlight lang="bash"><br />
tux@linuxpc:~> sudo zypper in dolphin dolphin-plugins<br />
</syntaxhighlight><br />
<br />
''zypper'' debería añadir dolphin-plugins-lang. Si no fuera el caso, consulta que esté disponible el paquete con, por ejemplo, ''zypper se dolphin''.<br />
<br />
=== Instalación con YaST ===<br />
En la sección '''Software''' de '''YaST''' pincha en ''gestión de software''. En el desplegable ''buscar'', escribe dolphin. En la parte de la derecha se listarán los paquetes relacionados con dolphin. Selecciona dolphin y asegúrate de que dolphin-plugins y dolphin-plugin-lang también son seleccionados automáticamente.<br />
<br />
Consulta [[YaST:Software]] para más información sobre la instalación de aplicaciones con YaST.<br />
<br />
=== Instalación directa ===<br />
{{VersionNote|Leap {{Versión actual}}|{{OCI|http://software.opensuse.org/ymp/openSUSE:Leap:15.3/standard/dolphin.ymp?base{{=}}openSUSE%3A15.3&query{{=}}dolphin | Dolphin}} }}<br />
{{VersionNote|Tumbleweed|{{OCI|http://software.opensuse.org/ymp/openSUSE:Factory/standard/dolphin.ymp?base{{=}}openSUSE%3AFactory&query{{=}}dolphin | Dolphin}} }}<br />
<br />
----<br />
<br />
== Primer vistazo==<br />
=== Vistas ===<br />
{{Barra herramientas|dolphin|Dolphin barra vista.png|Vista}}<br />
<br />
Las vistas se refieren a las formas en las que se muestra la información en la aplicación. En el caso de los gestores de ficheros, hay varios tipos habituales:<br />
{|<br />
{{Guía con imágenes | dolphin_vista_iconos.png | 400 | Iconos: muestra sólo el contenido de la carpeta indicada. | }}<br />
{{Guía con imágenes | dolphin_vista_compacta.png | 400 | Compacta: similar a la de iconos, pero mostrando un icono por línea. | }}<br />
{{Guía con imágenes | dolphin_vista_detallada.png | 400 | Detallada: similar a la compacta, pero complementa información básica del fichero o carpeta, además de poder desplegar el contenido de cada carpeta en forma de árbol. |}}<br />
|}<br />
{{Info|Existe un panel que muestra el árbol de directorio pero sin los detalles de cada fichero, puedes consultar la siguiente sección [[#Paneles]] para más información.}}<br />
==== Dividir vistas ====<br />
{|<br />
{{Guía con imágenes | Dolphin vista partida.png | 400 | {{Texto e imagen|<br />
|texto=Pulsar el botón dividir divide la vista actual en dos partes independientes. |<br />
|imagen=Dolphin botón dividir.png |<br />
|enlace= |<br />
}}{{Texto e imagen|<br />
|texto=Al dividir la vista el botón cambia al botón de cerrar, que cierra la vista actual. |<br />
|imagen=Dolphin botón pechar.png |<br />
|enlace= |<br />
}}Las dos vistas son independientes y pueden mostrar diferentes ubicaciones, e incluso pueden ser de diferente tipo. Es posible también ''arrastrar'' carpetas y ficheros de una vista a otra. | }}<br />
|}<br />
<br />
=== Rutas ===<br />
En dolphin las rutas son muy similares a las URL que utilizas para navegar por internet. Por defecto, se refiere a la navegación por ficheros ''montados'' localmente. Por ejemplo /home/tux/Documentos.<br />
{{Texto e imagen|<br />
|texto= Por defecto, las rutas en dolphin se indican desde la carpeta personal del usuario, salvo que se navegue fuera de ella.|<br />
|imagen= dolphin_ruta.png|<br />
|enlace= |<br />
}}<br />
{{Texto e imagen|<br />
|texto= Las rutas incluirán un icono de carpeta a su izquierda cuando se haga click en ellas para editarlas.<br />
|imagen= dolphin_ruta_edición.png|<br />
|enlace= |<br />
}}<br />
Cuando se utiliza un servicio o ''kioslave'' determinado, ha de indicarse a la izquierda de la ruta a emplear, seguido del signo dos puntos y dos barras de división: ''servicio''://<br />
<br />
El formato exacto en estos casos dependerá del servicio a utilizar. Por ejemplo, ftp requerirá el usuario del servidor, el separador @ y el nombre del servidor o su dirección IP, dando una URL del tipo: <pre>ftp://usuarioftp@servidor.ftp</pre>. Las carpetas dentro del servidor siguen las convenciones de UNIX, así que su navegación será similar a la de los ficheros locales de Linux. En ocasiones es posible omitir el usuario de forma que dolphin pregunte por él.<br />
{{Info|Ten en cuanta los permisos de acceso que puedas tener en ese servidor.}}<br />
<br />
=== Navegación ===<br />
Si bien es posible navegar por las carpetas pinchando en sus iconos para acceder a sus iconos, o bien usar la vista detallada para abrir y cerrar carpetas, o incluso seleccionar los accesos de los paneles de Lugares o la vista en árbol, es conveniente tener más formas de moverse por nuestro árbol de ficheros. Para ello, dolphin proporciona una sencilla barra de herramientas de navegación.<br />
{{Barra herramientas|dolphin|Dolphin barra navegación.png|Navegación}}<br />
* < : '''atrás''', visualiza el contenido de la carpeta ''anterior''.<br />
* > : '''adelante''', visualiza el contenido de la carpeta ''siguiente''. Sólo tiene sentido si se ha ido ''atrás'' antes.<br />
* ^ : '''arriba''', visualiza el contenido de la carpeta ''padre'' de la actual.<br />
<br />
Al utilizar sistemas de ficheros remotos y en algunas situaciones particulares, es posible que el contenido de una carpeta tal y como se visualiza en dolphin no se corresponda con el contenido ''actual'' de la carpeta. Para ello está disponible el botón ''refrescar'', si bien no se ofrece por defecto y habría que editar las barras de herramientas para añadirlo.<br />
<br />
== Paneles ==<br />
Además de las vistas, hay 4 paneles para ser utilizados con dolphin: Lugares, Información, Carpetas y Terminal.<br />
<br />
* '''Lugares''': por defecto aparece a la izquierda. Proporciona accesos directos a determinadas carpetas y servicios relevantes. Por defecto aparece con 6 secciones:<br />
** '''Lugares''': accesos directos a las carpetas de usuario más relevantes. Pueden añadirse, eliminarse o modificarse, y es la ubicación correcta para los accesos directos a cualquier punto de montaje local.<br />
** '''Remoto''': accesos directos a la red. Proporciona ''Red'' que aglutina lanzadores para servicios no locales, y los accesos directos que añadamos a nuestras cuentas remotas.<br />
*** '''Bluetooth''': permite conectarse remotamente a dispositivos que compartan carpetas o ficheros con bluetooth.<br />
*** '''Carpetas compartidas (SMB)''': permite acceder a carpetas compartidas con Samba o desde Windows con el protocolo SMB.<br />
*** '''Dispositivos MTP''': permite acceder a las carpetas y ficheros de dispositivos móviles que usen el protocolo MTP para comunicarse con computadoras.<br />
*** '''Añadir una carpeta en red''': proporciona un asistente para configurar el acceso remoto a una carpeta usando los protocolos SSH, Samba (Windows), FTP y webdav.<br />
** ''Recientes''': Carpetas y ficheros que han sido accedido de forma reciente. Puedes añadir accesos directos para búsquedas en intervalos de tiempo, por ejemplo ''hoy''.<br />
** '''Buscar''': búsquedas semánticas. Por defecto incluye documentos, imágenes, sonido, vídeos y hojas de cálculo.<br />
** '''Dispositivos''': accesos directos a otros dispositivos, incluyendo otros discos.<br />
** '''Dispositivos extraíbles''': accesos directos a dispositivos conectados por USB. También incluye accesos a otras particiones del sistema.<br />
* '''Información''': panel que por defecto va a la derecha y proporciona información diversa del fichero seleccionado, incluyendo vistas previas.<br />
{|<br />
{{Guía con imágenes |Dolphin información.png |400 |Vista de iconos con panel de información que muestra información del fichero seleccionado. Además del nombre y tipo de fichero, se muestra información que incluye el tipo de fichero, su tamaño, fechas de modificación, acceso y creación, etiquetas, puntuación, comentario... |}}<br />
|}<br />
* '''Carpetas''': es una vista especial para ser añadida en un panel, por defecto encima o debajo del panel Lugares. <br />
{|<br />
{{Guía con imágenes |Dolphin carpetas.png |400 |Carpetas representa el árbol de ficheros completo de nuestro sistema y permite seleccionar y desplegar las carpetas para navegar por ellas haciendo ''click'' en el signo > que acompaña al nombre de la carpeta.|}}<br />
|}<br />
* '''Terminal''': permite visualizar konsole, por defecto en la parte inferior de dolphin, para permitir introducir comandos de terminal en el directorio seleccionado en dolphin.<br />
<br />
== Pestañas ==<br />
Es posible mostrar cada vista en una pestaña diferente, aunque cuando solo haya una vista, que es el comportamiento predeterminado, no verás las pestañas.<br />
{|<br />
{{Guía con imágenes |Dolphin pestañas.png |400 |Cada pestaña se abre en la vista configurada por defecto. Para abrir una nueva pestaña, basta con pulsar CTRL+T. No obstante, la forma más habitual de abrir una nueva pestaña es la resultante de abrir el gestor de ficheros en una ubicación determinada cuando dolphin ya está abierto mostrando otra carpeta. Por ejemplo, al abrir el gestor de ficheros mediante el ''plasmoide'' notificador de dispositivos de la bandeja del sistema .|}}<br />
|}<br />
<br />
== Organizando ficheros y carpetas ==<br />
=== Selección ===<br />
En openSUSE la instalación por defecto de Plasma está basada en lo que se conoce como ''abrir ficheros son 1 click''. En la práctica, esto implica que cualquier carpeta o fichero se abrirá al pulsar sobre su icono con el botón principal del ratón con la aplicación que se haya definido para tal operación, o bien se presentará un cuadro de diálogo para realizar dicha acción si no está contemplada por defecto.<br />
<br />
Es posible configurar Plasma para usar ''doble click para abrir ficheros'' al estilo de otros escritorios. Una configuración u otra implica diferentes formas de seleccionar un fichero.<br />
<br />
En la configuración de doble click, pinchar sobre el fichero lo seleccionará, pero como es de esperar, en la opción de 1 click al pinchar sobre él simplemente se abrirá. Eso no afecta a la selección de grupo, por ejemplo: si tú dibujas un recuadro que incluya varios iconos de ficheros o carpetas, se seleccionarán, aunque si comienzas el recuadro pinchando en un icono el efecto que tendrá será arrastrarlo (eso también pasará en la opción de doble click para abrir), por lo que dicho recuadro habrá de trazarse pinchando en la área de vista fuera del dibujo de cualquier icono.<br />
<br />
Desde KDE 4 la selección de un único fichero o carpeta se realiza pinchando en un signo + que aparece al colocar el cursor encima del icono del fichero. Esto se hizo así para facilitar un cambio de paradigma que querían desarrollar con Plasma en cuanto al concepto de iconos. La idea era usar en su lugar ''plasmoides'', que tendrían una representación similar pero una tecnología muy diferente detrás. Esto aún puede verse en determinadas configuraciones del escritorio, aunque por defecto triunfó volver a una idea muy similar a la de los meros iconos gráficos ''de siempre''.<br />
<br />
Es posible seleccionar cualquier cantidad de iconos de ficheros o carpetas con este método, aunque ciertamente para selecciones múltiples es mejor utilizar otros métodos. Para deseleccionar, donde aparecía un signo + aparecerá un signo -.<br />
<br />
Hay otras formas de seleccionar un solo fichero o carpeta: usando la selección múltiple.<br />
<br />
Al pulsar la tecla CTRL se activa la selección múltiple individual: permite seleccionar ficheros uno a continuación de otro, y naturalmente, si no hay ninguno seleccionado y seleccionas uno, lo seleccionará.<br />
<br />
Pulsar MAY activa la selección múltiple en grupo: se seleccionan todos los ficheros entre el último seleccionado y aquél en el que pinchas. El efecto de esto es que si no hay ninguno seleccionado y pinchas sobre uno, seleccionará ese único fichero o carpeta.<br />
<br />
Es posible alternar los métodos de selección. Puedes seleccionar un par de ficheros pulsando en su signo +, seleccionar varios pulsando CTRL, y luego seleccionar un grupo que incluya varios ficheros consecutivos con MAY. Incluso puede deseleccionarse ficheros que hayamos seleccionado por error con cualquiera de los métodos.<br />
<br />
=== Copiar, mover y crear enlaces simbólicos ===<br />
En dolphin es sencillo copiar ficheros de una ubicación a otra, moverlos o crear enlaces simbólicos, si bien no es posible crear enlaces duros.<br />
<br />
La forma más simple de hacer esto es seleccionar los ficheros sobre los que operar, pulsar el botón secundario del ratón y seleccionar ''copiar'' (para copiar los ficheros en otro lugar) o ''cortar'' (para moverlos a otra ubicación). Ambas operaciones pueden hacerse también desde el menú Edición, cuando el menú de dolphin esté disponible, o bien pulsando CTRL+C (copiar) o CTRL+X (cortar).<br />
<br />
''Pegar'' un fichero es la operación que permite que efectivamente copia o mueve el contenido de los ficheros y carpetas a su nueva ubicación. Puede hacerse seleccionando ''pegar'' en el menú secundario del ratón o en el menú Edición, en la ubicación donde queremos copiar o mover los ficheros. También puede hacerse con el atajo de teclado CTRL-V.<br />
<br />
La otra forma de copiar, mover o enlazar ficheros es usando la operación ''arrastre''. Esta operación consiste en pinchar en un fichero o carpeta sin soltar el botón principal del ratón, y a continuación desplazarlo a la ubicación donde se quiere realizar la copia o enlace. Una vez tengas el cursor en la ubicación elegida, suelta el botón y te aparecerá un menú contextual preguntando qué quieres hacer con los ficheros: copiarlos, moverlos o crear enlaces. Eventualmente es posible que alguna de las operaciones no esté disponible por falta de permisos para llevarla a cabo, mostrándose entonces sólo las disponibles.<br />
<br />
Por defecto, dolphin sólo permite arrastrar ficheros o carpetas a carpetas contiguas (o la propia carpeta, preguntando entonces si se sobrescriben los ficheros para la operación de copia), o bien a otra pestaña. También es posible arrastrar ficheros entre vistas si tienes la vista dividida. En las opciones de configuración puede configurarse dolphin para que permita abrir las carpetas mientras se realiza la operación de arrastre, permitiendo así acceder al contenido sucesivo de las carpetas.<br />
<br />
También es posible arrastrar varios ficheros o carpetas. Para ello, simplemente hay que seleccionarlas primero, y a continuación pinchar, sin soltar, en cualquiera de los iconos, y realizar la operación de arrastre como si de un solo fichero se tratase.<br />
<br />
Por otra parte, '''renombrar''' es una operación diferente. Puedes seleccionar un fichero o carpeta, y a continuación pulsar la tecla F2 o bien pinchar con el botón secundario del ratón para desplegar el menú contextual, del que habrá que seleccionar ''renombrar''. Es posible usar un plugin, que en realidad utiliza la herramienta independiente '''krename''', para hacer renombrados masivos.<br />
<br />
==== Copiar, mover y pegar ficheros al estilo X11 ====<br />
El uso de CTRL+C para copiar y CTRL+V para pegar (CTRL+MAY+C y CTRL+MAY+V respectivamente para hacer lo propio en konsole) está heredado, inspirado o ''plagiado'' de Windows®. En los sistemas gráficos ''estilo Unix'' existen otras combinaciones para hacer las mismas tareas.<br />
* CTRL+INS: copia los ficheros o carpetas seleccionados.<br />
* MAY+INS: ''pega'' los ficheros o carpetas seleccionados.<br />
<br />
En Plasma puedes utilizar ambas técnicas e incluso utilizarlas de forma alternativa.<br />
<br />
=== Borrar y eliminar ficheros ===<br />
En los escritorios Linux, borrar siempre ha tenido un sentido diferente a eliminar. Y de hecho, desde hace tiempo, ''borrar'' suele venir traducido como ''tirar a la papelera'' o ''mover a la papelera'', mientras que ''eliminar'' viene como ''borrar''.<br />
<br />
La papelera es similar a los sistemas empleados en otros escritorios de otros sistemas operativos. Puedes verla como una carpeta especial a donde se mueven los ficheros a borrar. La carpeta tiene una configuración específica que le permite, por ejemplo, administrar en qué condiciones se produce el borrado definitivo, además de tener algún mecanismo para ''recuperar'' los ficheros que contiene.<br />
<br />
Por su parte, ''Eliminar'' consiste en borrar el fichero sin enviarlo a la papelera.<br />
<br />
dolphin 21.12 tiene ''Mover a la papelera'' y ''Borrar'', respectivamente, en la traducción al castellano.<br />
<br />
Ambas opciones pueden ejecutarse sobre uno o varios ficheros o carpetas seleccionados. Pulsar la tecla SUPR tiene el efecto de enviar los ficheros a la papelera, mientras que pulsar MAY+SUPR tiene el efecto de que los ficheros sean eliminados. Ambas opciones están disponibles en el menú contextual del ratón, si bien mostrar Eliminar es una opción que debe de ser activada en la [[#Menús de contexto / Servicios|configuración de dolphin]].<br />
<br />
=== Comprimir y descomprimir ficheros ===<br />
La utilidad de Plasma para trabajar con ficheros comprimidos es '''ark'''. Sin embargo, dolphin puede manejar muchos de estos formatos directamente desde el menú secundario. Otros formatos pueden requerir la instalación de software adicional. La mayoría de ellos puedes buscarlos directamente con el instalador de software de tu elección.<br />
<br />
Comprimir y descomprimir ficheros o carpetas es sencillo. Basta con seleccionarlos y pulsar el botón secundario del ratón para seleccionar la opción elegida (p. ej., ''comprimir como tar.gz'' o ''descomprimir aquí'').<br />
<br />
=== Ficheros ocultos ===<br />
Para ocultar un fichero en Linux basta con anteponerle un punto (.) a su nombre, de tal forma que quede algo así: [code].fichero_oculto.txt[/code]<br />
Las carpetas y ficheros de configuración de usuario suelen estar ocultas, aunque no necesariamente su contenido. Por ejemplo, .mozilla es la carpeta donde las aplicaciones de Mozilla guardan sus configuraciones. Pero su contenido, por ejemplo la carpeta de Firefox, no está oculta.<br />
<br />
Por tanto, ocultar un fichero o carpeta solo necesita que le cambies el nombre, y lo mismo es cierto para la operación inversa. Tanto mv en el terminal de comandos como la opción ''renombrar'' de dolphin funcionarán igual de bien.<br />
<br />
Por defecto los ficheros ocultos no se muestran en las vistas de dolphin, pero es posible verlos pulsando ALT+. (tecla ALT y el signo ''punto'').<br />
<br />
=== Buscador de ficheros ===<br />
{{Atención|El indexador de Plasma ''baloo'' puede causar problemas al usarse en dispositivos con el sistema de ficheros ''btrfs''. Hay un bug conocido que causa que en sistemas ''btrfs'' se cree una entrada nueva en el índice para cada fichero con cada reinicio del sistema. Puedes ver más información en {{Enlace|base=https://|variable=bugs.kde.org/show_bug.cgi/?|final=id=402154}}. Por favor, considera deshabilitar baloo para usar btrfs en Plasma.}}<br />
<br />
Para facilitar el acceso a documentos cada vez más numerosos que pueden no tener un sistema de clasificación lo bastante estricto, la mayoría de entornos de escritorios modernos optan por algún sistema de indexado. En el caso de Plasma, el indexador es '''baloo'''.<br />
<br />
El indexador lo que hace es crear un índice con todos los ficheros del usuario, o al menos de las carpetas que se establezca así, ya que es más rápido hacer búsquedas en este índice que en el sistema en sí.<br />
<br />
Para realizar una búsqueda ha de pulsarse la combinación de teclas CTRL+F. En ese caso aparecerá una barra de edición similar a la de las rutas de dolphin, en la cual escribiremos aquello que queremos buscar. Puedes utilizar comodines para tu búsqueda, aunque no son necesarios antes o después del término a buscar. Por ejemplo, produce el mismo efecto buscar ''proyecto'' que ''proyecto*'' e incluso ''*proyecto*''. Los comodines siguen siendo útiles en medio de la palabra, donde * representa a varios caracteres mientras ? representa a un sólo carácter. Además, la búsqueda no es sensible a mayúsculas y minúsculas.<br />
<br />
Una vez que escribimos el término a buscar y comenzamos la búsqueda en sí, nos aparecerán varias pestañas que nos permiten ''afinar'' la búsqueda.<br />
<br />
Podemos filtrar documentos, que nos mostrará todo tipo de documentos, o documentos concretos, tales como hojas de cálculo.<br />
Podemos filtrar por la fecha.<br />
Podemos filtrar por la puntuación asignada.<br />
Podemos filtrar por las etiquetas.<br />
<br />
=== Otras funcionalidades ===<br />
Puedes echar un vistazo en la sección de [[#Menús de contexto / Servicios]] para ver más información sobre el uso de servicios en dolphin.<br />
<br />
{{Nota|Algunos de estos servicios pueden estar disponibles para openSUSE como paquete rpm. Antes de instalarlos con el ''instalador de complementos de dolphin'', comprueba si existe algún paquete relacionado.}}<br />
<br />
== Configuración ==<br />
=== General ===<br />
==== General: Comportamiento ====<br />
{|<br />
{{Guía con imágenes |Dolphin comportamiento.png | 400 | Aquí pueden configurarse tres aspectos:<br />
* si las opciones de visualización aplicarán a cada carpeta de forma individual o a todas.<br />
* si los ficheros y carpetas se ordenarán de forma alfabética o natural. La ordenación natural intenta ordenar correctamente números y otras combinaciones que en la meramente alfabética pueda ser diferente.<br />
* Varios aspectos adicionales de la visualización. | }}<br />
|}<br />
<br />
Los aspectos de la visualización que se pueden activar son:<br />
* Mostrar ayudas emergentes. Si se selecciona, al señalar un fichero aparecerá un cuadro de información sobre el mismo, similar a la información que se muestra en el panel de Información.<br />
* Mostrar marcador de selección. Es el signo + o - para seleccionar ficheros o carpetas.<br />
* Cambiar nombre en línea. Permite que el cambio de nombre se haga en la misma vista de los ficheros. Si se desactiva, para renombrar aparecerá un cuadro de diálogo.<br />
* Usar el tabulador para cambiar entre las áreas de las vistas divididas.<br />
* Salir de la vista dividida cierra el área activa.<br />
<br />
==== General: vistas previas ====<br />
{|<br />
{{Guía con imágenes |Dolphin vistas previas.png | 400 |Permite seleccionar de qué tipo de ficheros se ofrecerá una representación en miniatura. También ofrece opciones para decidir si se omitirán las vistas previas de ficheros de un tamaño dado o si se omitirán las vistas previas de ficheros remotos. Las vistas previas imponen ciertos requerimientos de hardware para funcionar adecuadamente, por lo que en equipos de menores prestaciones requerirá mayor atención o incluso no usar vistas previas por completo. | }}<br />
|}<br />
<br />
==== General: Confirmaciones ====<br />
{|<br />
{{Guía con imágenes |Dolphin confirmaciones.png | 400 |Establece varios grupos de operaciones en las que pedir confirmación. Fíjate que por defecto la opción "al enviar a la papelera de reciclaje" está desactivada, ya que se sobreentiende que es una operación reversible. | }}<br />
|}<br />
<br />
==== General: Barra de Estado ====<br />
{|<br />
{{Guía con imágenes |Dolphin barra estado configuración.png | 400 |Algunas opciones de información a mostrar en la barra de estado. | }}<br />
|}<br />
<br />
=== Inicio ===<br />
{|<br />
{{Guía con imágenes |Dolphin inicio.png | 400 |Permite configurar cómo se verá dolphin al inicio, sea en cualquier momento o cuando se abren nuevas ventanas con dolphin. Es posible mostrar kioslaves o búsquedas temporales. Por ejemplo, para ver los ficheros modificados hoy podrías añadir la ruta: timeline:/today/ | }}<br />
|}<br />
La barra de filtros, abajo por defecto, permite introducir caracteres para filtrar los nombres de los ficheros y carpetas que se ven en la vista. Por ejemplo, añadir ''informe'' mostrará sólo aquellos ficheros o carpetas que contengan ''informe'' en su nombre.<br />
<br />
Al hacer editable la barra de ubicación, la ruta se verá siempre en modo edición, de tal forma que podemos colocar el cursor en cualquier punto en lugar de tener que pinchar en ella en primer lugar.<br />
<br />
=== Modos de visualización ===<br />
{|<br />
{{Guía con imágenes |Dolphin visualización.png | 400 |En [[#Vistas]] se han descrito las tres posibilidades de vista: iconos, compacta y detalles. Esta opción permite definir diferentes aspectos para cada tipo de vista. Puedes definir cosas como el tamaño de los iconos, o cómo se muestran las fechas de la vista detallada. | }}<br />
|}<br />
<br />
=== Navegación ===<br />
{|<br />
{{Guía con imágenes |Dolphin navegación.png | 400 |Con dos opciones principales: dónde se colocarán las nuevas pestañas en caso de haber varias abiertas, y lo que denomina ''General'', con dos opciones básicas:<br />
* Abrir archivos comprimidos como carpetas. Si pinchas en ellos como si fueran ficheros o carpetas, se descomprimirán temporalmente para permitirte navegar por su interior.<br />
* Abrir carpetas durante las operaciones de arrastre: permite que al colocar encima de una carpeta uno o varios ficheros en una operación de arrastre durante unos distantes, la carpeta se abra para acceder al anterior. Esto es recursivo: si colocas la selección arrastrada encima de otra carpeta, ésta se abrirá también y así sucesivamente hasta completar la operación. | }}<br />
|}<br />
<br />
=== Menús de contexto / Servicios ===<br />
{|<br />
{{Guía con imágenes |Dolphin servicios.png | 400 |Aquí se pueden configurar qué servicios estarán disponibles en el menú contextual del ratón. Particularmente útil, aunque por defecto viene deseleccionado, es el servicio ''Borrar''. No confundir con ''borrar como enviar a la papelera'', sino como ''eliminar''. Si está deseleccionado ''Borrar'' todavía es accesible manteniendo pulsada la tecla MAY mientras se pulsa el botón secundario del ratón.| }}<br />
|}<br />
<br />
=== Papelera ===<br />
{|<br />
{{Guía con imágenes |Dolphin papelera.png | 400 |Se muestran opciones relacionados con el uso de la papelera, tales como el tiempo a guardar los ficheros o el tamaño máximo de la misma . | }}<br />
|}<br />
<br />
== Kioslaves y plugins ==<br />
=== Kioslaves ===<br />
Los kioslaves sirven como mecanismo de comunicación entre protocolos diferentes, lo que permite que una misma aplicación se las pueda ver con multitud de fuentes de ficheros de forma transparente al usuario.<br />
<br />
La explicación completa incluye que '''Konqueror''', el que era el navegador y gestor de ficheros por defecto en KDE 3, permitía manejar todo tipo de sistemas: web, FTP, carpetas de discos duros... lo que obligaba al gestor a apañárselas con cualquier sistema de ficheros pero también con todo tipo de protocolos de comunicaciones. Aunque en Dolphin se eliminó toda la parte de navegación web, sí heredó el diseño y la mayoría de kioslaves.<br />
<br />
Entre los kioslaves que incluye la instalación de Plasma en openSUSE destacan:<br />
* '''applications:/''' que permite ver las categorías de las aplicaciones y navegar por ellas.<br />
* '''man:/''' que permite navegar por las páginas del manual tradicional, aunque hoy no estén muy actualizadas (sobre todo en castellano).<br />
* '''ftp:/''' que permite realizar conexiones FTP y navegar por los ficheros como si de ficheros locales se tratase.<br />
* '''fish:/''' que permite realizar conexiones SSH y navegar por los ficheros como si de ficheros locales se tratase.<br />
* '''timeline:/''' que permite filtrar los ficheros por fecha y hora de acceso.<br />
* '''zip:/''' que permite navegar por el contenido de un fichero comprimido.<br />
* '''tar:/''' que permite navegar por el contenido de ficheros empaquetados con tar comprimidos o no.<br />
<br />
Es posible instalar kioslaves adicionales desde el repositorio KDE Extra. Por ejemplo, kio_iso permite acceder al contenido de imágenes ISO y navegar por su estructura de ficheros, y kio-gdrive proporciona acceso remoto a Google Drive.<br />
<br />
{{Info|Para usar los protocolos de red en dolphin puede ser conveniente disponer de una opción para ''refrescar'' la vista, de forma que dicha vista se actualice con el contenido de los ficheros que se elminan o crean en el dispositivo al que se accede a través de la red. Para ello puede simplemente añadirse el botón ''refrescar'' en la barra de herramientas: Menú -> Configuración de barras de herramientas, selecciona ''refrescar'' en el cuadro de la izquierda y pulsa en el botón > para añadirlo a la barra de herramientas actual. Con ^ y ⌄ es posible ubicarla en el lugar de la barra deseado.{{Barra herramientas|dolphin|Botón refrescar.png|Refrescar}} }}<br />
<br />
==== Dolphin con SSH: fish y sftp ====<br />
===== fish =====<br />
Seleccionando el protocolo fish (o bien escribiéndolo en la URL) podemos acceder a servidores que tengan activo el servicio SSH y acepten conexiones estándar. El formato básico es: fish://<usuario>@<servidor>/<ruta> . Si no introduces el usuario, Dolphin preguntará por él además de por la contraseña. Si se introduce una ruta, la conexión se realizará directamente en la carpeta indicada.<br />
<br />
{|<br />
{{Guía con imágenes | Dolphin fish.png | 400 | En la barra de edición se introduce la dirección del servidor. Puede usarse la IP o el nombre de host si existe y es conocido. | }}<br />
{{Guía con imágenes | Aviso autenticidad host.png | 400 | Si el host no figura en la lista de hosts conocidos se pedirá su inclusión en dicha lista para poder acceder a él. Si se rechaza, no se podrá acceder al mismo. | }}<br />
{{Guía con imágenes | Dolphin fish login.png | 400 | Dolphin pide la contraseña para conectarse, y también el usuario si este no ha sido especificado en la URL. También permite guardar la contraseña en la cartera.| }}<br />
{{Guía con imágenes | Dolphin fish conectado.png | 400 | Una vez establecida la conexión, será posible navegar por las carpetas del sistema como si fuera un dispositivo local y con la misma salvedad de los permisos de cada carpeta.| }}<br />
{{Guía con imágenes | Dolphin fish lugares.png | 400 | Es posible arrastrar la URL al panel de Lugares para crear un marcador a esa posición. Dicho marcador es editable, de forma que es posible asignar un nombre, cambiar la dirección, asignar un icono e incluso decidir si dicho marcador será accesible solamente por Dolphin o también lo será para cualquier aplicación que use este cuadro de diálogo para acceder a los ficheros (abrir o guardar).| }}<br />
{{Guía con imágenes | Dolphin fish lugares2.png | 400 | Al igual que los marcadores locales, los marcadores de red serán mostrados como ubicaciones en la barra de URL. Sin embargo, basta con pinchar en la URL para poder editar la dirección real, y de forma similar, si se navega ''hacia arriba'' se verá también la dirección real.| }}<br />
|}<br />
<br />
===== sftp =====<br />
Aunque fish proporciona una forma conveniente de conectarse a servidores ssh, en ocasiones es preferible, o incluso imprescindible, usar sftp para la conexión. Un caso particular es la conexión a servidores externos con control estricto de la conexión.<br />
<br />
Como ejemplo, para conectarse a un servidor con esta configuración:<br />
{| class="wikitable"<br />
|-<br />
| '''Servidor''' || miservidor.com<br />
|-<br />
| '''Usuario''' || tux<br />
|-<br />
| '''Puerto''' || 9342<br />
|-<br />
| '''Certificado''' || ~/.ssh/rsa_miservidor<br />
|}<br />
es necesario crear un fichero con la configuración necesaria para permitir la conexión sftp, y a continuación acceder a la url en Dolphin:<br />
# Crear el fichero ~/.ssh/config y editarlo para añadir el siguiente texto:<br />
#:<syntaxhighlight lang="bash"><br />
Host miservidor<br />
HostName miservidor.com<br />
User tux<br />
Port 9342<br />
IdentityFile ~/.ssh/rsa_miservidor<br />
</syntaxhighlight><br />
# Acceder a la ruta en Dolphin usando sftp en lugar de fish y usando el nombre indicado en Host como un marcador. En esta ocasión, al autentificar la conexión no será posible guardar la contraseña. En este ejemplo, la ruta sería: sftp://tux@miservidor/<br />
# Por lo demás, las conexiones sftp funcionan de forma similar a las conexiones con ftp o fish, de manera que es posible, por ejemplo, crear un marcador en el panel Lugares, o navegar por el resto de carpetas.<br />
<br />
==== Cuenta de nextcloud ====<br />
Además de poder usar el navegador web para conectarse a la cuenta Nextcloud, hay dos formas de usar este servicio en Plasma Desktop:<br />
* Con un cliente de sincronización, que nos permite definir una carpeta que contendrá una copia del contenido elegido en la cuenta Nextcloud.<br />
* Usando el protocolo webdav para acceder al contenido de la cuenta desde Dolphin.<br />
<br />
===== Cliente de sincronización =====<br />
El cliente de sincronización permite especificar una carpeta que será sincronizada con los ficheros de la cuenta Nextcloud. Permite establecer salvedades, como no sincronizar ficheros con un tamaño dado o especificar cuáles se sincronizan y cuáles no.<br />
<br />
Una vez el cliente esté en ejecución, para subir un fichero a la cuenta Nextcloud basta con añadirlo a la carpeta especificada.<br />
{{VersionNote|Leap {{Versión actual}}|{{OCI|http://software.opensuse.org/ymp/openSUSE:Leap:15.3/standard/nextcloud-desktop.ymp?base{{=}}openSUSE%3A15.3&query{{=}}nextcloud-desktop | nextcloud-desktop}} {{OCI|http://software.opensuse.org/ymp/openSUSE:Leap:15.3/standard/nextcloud-desktop-dolphin.ymp?base{{=}}openSUSE%3A15.3&query{{=}}nextcloud-desktop-dolphin | nextcloud-desktop-dolphin}} }}<br />
{{VersionNote|Tumbleweed|{{OCI|http://software.opensuse.org/ymp/openSUSE:Factory/standard/https://software.opensuse.org/ymp/openSUSE:Factory/standard/nextcloud-desktop.ymp?base{{=}}openSUSE%3AFactory&query{{=}}nextcloud-desktop | nextcloud-desktop}} {{OCI|http://software.opensuse.org/ymp/openSUSE:Factory/standard/https://software.opensuse.org/ymp/openSUSE:Factory/standard/nextcloud-desktop-dolphin.ymp?base{{=}}openSUSE%3AFactory&query{{=}}nextcloud-desktop-dolphin | nextcloud-desktop-dolphin}} }}<br />
<br />
Tanto nextcloud-desktop como nextcloud-desktop-dolphin están también disponibles en los repositorios [http://repos.opensuse.org/repositories/KDE:/Extra KDE:Extra] y [http://repos.opensuse.org/repositories/network network].<br />
<br />
===== Webdav =====<br />
Para usar la conexión con webdav, lo primero es conocer la ruta exacta a los ficheros, lo cual puede consultarse en la pantalla de la interfaz web de la cuenta Nextcloud, en la vista ficheros, abajo a la izquierda pinchando en Ajustes.<br />
[[Archivo:Webdav1.png|thumbnail|center]]<br />
<br />
Típicamente la ruta tendrá esta forma: https://miservidor.com/remote.php/dav/files/tux/<br />
<br />
Esta ruta puede utilizarse en Dolphin reemplazando el protocolo web https (o http en su caso) por webdavs (o webdav), de forma que quedaría así: webdavs://miservidor.com/remote.php/dav/files/tux/<br />
<br />
También es posible usar el asistente de conexión pulsado en el Lugar Red -> Añadir carpeta en red -> Carpeta web (webdav). Tras pulsar en siguiente, aparecerá un formulario con los datos de la conexión.<br />
<br />
==== Cliente GDrive ====<br />
Aunque hay servicios comerciales para acceder a la cuenta Google Drive en incluso clientes de sincronización, a fecha de hoy no hay un servicio de software libre y gratuito que lo permita.<br />
<br />
El paquete kio-gdrive permite, por lo menos, acceder a la cuenta Google Drive como si de un dispositivo en red se tratase.<br />
<br />
{{VersionNote|Leap {{Versión actual}}|{{OCI|http://software.opensuse.org/ymp/openSUSE:Leap:15.3/standard/kio-gdrive.ymp?base{{=}}openSUSE%3A15.3&query{{=}}kio-gdrive | kio-gdrive}} }}<br />
{{VersionNote|Tumbleweed|{{OCI|http://software.opensuse.org/ymp/openSUSE:Factory/standard/kio-gdrive.ymp?base{{=}}openSUSE%3AFactory&query{{=}}kio-gdrive | kio-gdrive}} }}<br />
<br />
===== Añadir cuenta de Gdrive para usar en Dolphin =====<br />
{|<br />
{{Guía con imágenes <br />
| Configuración.png | 400 | La aplicación de Configuración de Plasma permite añadir cuentas de diversos servicios en línea, incluido Google. No obstante, es posible añadir la cuenta de GDrive desde Dolphin seleccionando Red -> gdrive -> Añadir cuenta. |}}<br />
{{Guía con imágenes <br />
| Configuración añadir cuenta.png | 400 | En general, añadir una cuenta en línea exigirá indicar la cuenta de login del servicio con su contraseña, y autorizar a las aplicaciones KDE para utilizar dicho servicio. En el caso de Google requiere los siguientes pasos:<br />
<center><gallery perrow="3" widths="350" heights="250"><br />
Imagen:Configuración añadir cuenta login.png | Añadir el login a usar para la cuenta de Google. Habrá que realizar el Catchall y a continuación añadir la contraseña.<br />
Imagen:Configuración añadir cuenta permiso.png | Permitir que KDE online accounts se conecte y utilice el servicio.<br />
</gallery></center><br />
|}}<br />
{{Guía con imágenes <br />
| Dolphin red.png | 400 | Las cuentas GDrive son un servicio de red accesibles en Dolphin en el lugar '''Red'''. <br />
<center><gallery perrow="3" widths="350" heights="250"><br />
Imagen:Dolphin red gdrive.png<br />
</gallery></center><br />
|}}<br />
{{Guía con imágenes <br />
| Dolphin red gdrive uso.png | 400 | Una vez que se ha accedido a la cuenta, puede operarse con normalidad, incluyendo crear, borrar, mover, copiar ficheros o carpetas. Generalmente las vistas previas estarán desactivadas por defecto y no será posible disponer de una papelera para borrar y recuperar ficheros. También es posible arrastrar cualquier carpeta al panel '''lugares''' para crear marcadores.|}}<br />
|}<br />
<br />
=== Servicios/Contextuales ===<br />
Puedes extender o modificar la funcionalidad de Dolphin a través de lo que en su terminología llaman ''servicios''.<br />
<br />
Un servicio es algún tipo de utilidad, con frecuencia para ser utilizado a través del menú contextual. Los servicios se configuran en la pestaña de configuración '''Servicios''' ('''Menú de contexto''' en Dolphin 21.12) y pueden obtenerse más instalando ''plugins''.<br />
<br />
Hay varias formas de instalar plugins.<br />
* Desde la propia vista de "Configurar", pinchando en el botón ''Descargar servicios nuevos''.<br />
* Manualmente desde la [https://store.kde.org/browse?cat=102&ord=latest KDE store].<br />
* Con la aplicación ''Descubrir''.<br />
* Como paquete instalable de la propia distribución.<br />
<br />
Algunos de estos servicios adicionales pueden ser instalados añadiendo el repositorio [[Repositorios_de_KDE#Aplicaciones_Extra|KDE Extra]] a la lista de repositorios. Por ejemplo, el paquete ''servicemenu-pdf'' proporciona utilidades para manipular ficheros PDF.<br />
<br />
==== Manejando PDF ====<br />
{|<br />
{{Guía con imágenes <br />
| Dolphin_servicemenu_pdf.png | 400 | El paquete ''servicemenu-pdf'' añade un servicio para trabajar con ficheros PDF en el menú contextual ''Acciones'', visible al seleccionar un fichero PDF. Puede instalarse de la forma descrita en la sección Servicios/Contextuales.<br />
<br />
Las acciones disponibles se agrupan en cuatro menús:<br />
<center><gallery perrow="3" widths="350" heights="188"><br />
Imagen:Dolphin_servicemenu_pdf convertir.png | ''convertir'', que permite hacer conversiones con diferentes formatos de ficheros, fundamentalmente imágenes.<br />
Imagen:Dolphin_servicemenu_pdf extraer.png | ''extraer'', que incluye opciones para extraer el texto o imágenes.<br />
Imagen:Dolphin_servicemenu_pdf repaginar.png | ''repaginar'', que permite cambiar el sistema de paginado, por ejemplo 2 páginas en cada página o crear un folleto.<br />
Imagen:Dolphin_servicemenu_pdf tools.png | ''herramientas'', que incluyen opciones más heterodoxas, como extraer páginas o unir documentos.<br />
</gallery></center><br />
}}<br />
|}<br />
<br />
==== Manipulando ficheros gráficos ====<br />
{|<br />
{{Guía con imágenes <br />
| Dolphin_kim.png | 400 | El paquete ''kim'' proporciona un servicio para manipular imáganes y ficheros gráficos de todo tipo desde el menú contextual. Puede instalarse de la forma indicada en la sección Servicios/Contextuales. En Leap el paquete de la distribución está en el respositorio [[Repositorios_comunitarios#Packman|Packman]].<br />
<br />
Las acciones se muestran en tres menús diferentes:<br />
<center><gallery perrow="3" widths="250" heights="188"><br />
Imagen:Dolphin kim resize.png | ''comprimir y redimensionar''.<br />
Imagen:Dolphin kim convertir.png | ''convertir y rotar''.<br />
Imagen:Dolphin kim tratamiento.png | ''tratamiento y publicación'': incluye un amplio abanico de opciones, como crear una presentación de diapositivas, enviar por correo, renombrar o crear un gif animado.<br />
</gallery></center><br />
}}<br />
|}<br />
<br />
= Notas =<br />
----<br />
= Referencias =<br />
<br />
[[Categoría: Aplicaciones:Sistema|D]]<br />
[[Categoría:SDB:Guía de principiantes]]</div>Karlggesthttps://es.opensuse.org/index.php?title=Portal:ALP&diff=28358Portal:ALP2023-10-30T22:48:29Z<p>Karlggest: /* Ejemplos teóricos */</p>
<hr />
<div>{{Info|El proyecto ALP está aun siendo discutido. }}<br />
<br />
= Grupos de Trabajo =<br />
Lista de los grupos de trabajo existentes que trabajan en ALP<br />
<br />
* [[:en:openSUSE:ALP/Workgroups/SysMngmnt|1:1 System Management]]<br />
* [[:en:openSUSE:ALP/Workgroups/ALPVT|ALP Virtualization]]<br />
* [[:en:openSUSE:ALP/Workgroups/BootableImages|Bootable images]]<br />
* [[:en:openSUSE:ALP/Workgroups/Git-Packaging-Workflow|Git Packaging Workflow]]<br />
* [[:en:openSUSE:ALP/Workgroups/Community|Community]]<br />
* Components delivery & lifecycle<br />
* Confidential Computing<br />
* Container (local) management frontend<br />
* Container easy deployment / installation<br />
* Deployment / Management Framework<br />
* [[:en:openSUSE:ALP/Workgroups/Desktop|Desktop]]<br />
* Documentation<br />
* DPU integration<br />
* Full-disk encryption<br />
* [:en:[openSUSE:ALP/Workgroups/GrassyKnoll|GrassyKnoll]]<br />
* Hardware Accelerators<br />
* High Performance Computing<br />
* Image-based distribution<br />
* [[:en:openSUSE:ALP/Workgroups/Installation|Installation / Deployment]]<br />
* Kernel And Live Patching<br />
* Network Management & Configuration<br />
* [[:en:openSUSE:ALP/Workgroups/Python &amp; friends|Python &amp; friends]]<br />
* Quality Engineering<br />
* RISC-V port<br />
* SAP and High Availability<br />
* Security framework<br />
* Supply Chain Security<br />
* Support and Maintenance<br />
* Telemetry<br />
<br />
= Equipo de arquitectura =<br />
<br />
== Introducción ==<br />
<br />
== Comunícate ==<br />
<br />
== Miembros ==<br />
El equipo actualmente consta de los siguientes miembros:<br />
<br />
* Richard Brown<br />
* Lubos Kocman<br />
* Max Lin<br />
* Marcus Meissner<br />
* Simon Lees<br />
* Bernhard Wiedemann<br />
* Kris Scott<br />
* Felix Niederwanger<br />
* Alexandre Vicenzi<br />
* Maurizio Galli<br />
* Antonio Teixeira<br />
* Valentin Lefebvre<br />
* Emiliano Langella<br />
* David Dyess<br />
* Robin Shepheard<br />
* Dirk Müller<br />
* Morgan Green<br />
<br />
== Cómo unirse ==<br />
El equipo está abierto a todo el mundo. Sólo tienes que añadir tu nombre a la lista de arriba y unirte al canal Matrix/IRC/Discord y participar.<br />
<br />
== Proyectos experimentales ==<br />
=== Experimento 1: Slowroll ===<br />
Página principal: [[openSUSE:Slowroll]]<br />
<br />
"Slowroll" - un flujo de código derivado de openSUSE:Factory/ALP:Source:Rolling que utiliza reglas automatizadas para limitar el ratio de cambios del código base<br />
<br />
{|class="wikitable"<br />
|-<br />
| Dueño del experimento || bmwiedemann<br />
|-<br />
| Projecto del OBS || https://build.opensuse.org/project/show/openSUSE:ALP:Experimental:Slowroll<br />
|}<br />
<br />
=== Experimento 2: Linarite ===<br />
"Linarite" - un sucesor del concepto GrassyKnoll, construyendo una distribución comunitaria encima de SUSE ALP "Granite" <br />
{|class="wikitable"<br />
|-<br />
|Objetivo <br />
|Ser un Granite++ p. ej., toma los conceptos de una distribución tradicional basada en ALP de SUSE y expandirla con paquetes comunitarios y soporte para llegar a ser idealmente un sucesor de Leap<br />
|-<br />
|Dueño del Experimento<br />
|simotek<br />
|-<br />
|Projecto del OBS<br />
|https://build.opensuse.org/project/show/openSUSE:ALP:Experimental:Linarite<br />
|}<br />
<br />
= Diseño de construcción =<br />
== Introducción ==<br />
openSUSE:ALP se construye de forma muy diferente a las distribuciones anteriores de openSUSE/SUSE.<br />
<br />
Esta guía pretende ser un documento vivo que explique la estructura de construcción actual de openSUSE:ALP y la función de los distintos proyectos OBS que componen la plataforma ALP.<br />
== Proyectos OBS ==<br />
'''openSUSE:ALP:Workbench:<workbench_version>''' Este proyecto hace efectivamente el mismo trabajo que Factory Rings 0 y 1, siendo una copia congelada de los paquetes necesarios para arrancar todo lo demás. Estos paquetes se congelan desde openSUSE:Factory<br />
<br />
'''openSUSE:ALP:Source''' El proyecto principal para OBS prjconfig<br />
<br />
'''openSUSE:ALP:Source:Standard''' ALP soporta el concepto de múltiples velocidades de base de código. "Estándar" es la predeterminada que SUSE está construyendo actualmente, pero puede haber velocidades más rápidas o más lentas en el futuro. openSUSE también puede tener la suya propia. Puedo imaginarme totalmente que Tumbleweed evolucione hasta convertirse en algo como SUSE:ALP:Source:Fast algún día. Este proyecto incluye fuentes pero no está construido.<br />
<br />
'''openSUSE:ALP:Source:Standard:Core:<core_version>''' Los paquetes centrales del sistema (enlazados desde SUSE:ALP:Source:Standard) y los contenedores genéricos para ser usados en múltiples productos ALP se construyen aquí.<br />
<br />
'''openSUSE:ALP:Products:<nombre_producto>:<versión_producto>[:<versión_menor_producto>]''' Aquí es donde se encuentran las definiciones y los patrones de los productos. Cada producto se construye contra un proyecto SUSE:ALP:Source:<velocity>:Core:<core_version> Se permiten paquetes adicionales específicos de un producto Lo ideal sería que los paquetes se enviasen y enlazasen desde :Core: por defecto (para permitir compartir paquetes entre productos) pero se pueden hacer excepciones. Para los productos exclusivos de openSUSE, estas excepciones podrían ser la norma. Los contenedores, imágenes de máquinas virtuales, etc. específicos de un producto se definen y construyen aquí.<br />
<br />
'''openSUSE:ALP:Productos:<nombre_producto>:<versión_producto>[:<versión_menor_producto>]:Update''' Si un producto se va a mantener utilizando un proceso de mantenimiento tipo SLE/Leap, este sería el proyecto de Actualización para dicho proceso.<br />
<br />
== Ejemplos teóricos ==<br />
* ''openSUSE:ALP:Source:Standard:1.0'' - la primera versión de la base de código ALP "estándar" (versión normal)<br />
* ''openSUSE:ALP:Source:Rolling'' - una versión de ALP equivalente a openSUSE:Factory (Rolling Release)<br />
* ''openSUSE:ALP:Products:Server:1.0'' - copia openSUSE 1:1 del producto SUSE ALP Server 1.0 (desarrollado en SUSE:ALP:Products:Server:1.0).<br />
<br />
{{IW|openSUSE:ALP/ArchitectureTeam}}<br />
[[Categoría: Portales]]</div>Karlggesthttps://es.opensuse.org/index.php?title=Portal:ALP&diff=28355Portal:ALP2023-10-30T22:48:17Z<p>Karlggest: /* Ejemplos teóricos */</p>
<hr />
<div>{{Info|El proyecto ALP está aun siendo discutido. }}<br />
<br />
= Grupos de Trabajo =<br />
Lista de los grupos de trabajo existentes que trabajan en ALP<br />
<br />
* [[:en:openSUSE:ALP/Workgroups/SysMngmnt|1:1 System Management]]<br />
* [[:en:openSUSE:ALP/Workgroups/ALPVT|ALP Virtualization]]<br />
* [[:en:openSUSE:ALP/Workgroups/BootableImages|Bootable images]]<br />
* [[:en:openSUSE:ALP/Workgroups/Git-Packaging-Workflow|Git Packaging Workflow]]<br />
* [[:en:openSUSE:ALP/Workgroups/Community|Community]]<br />
* Components delivery & lifecycle<br />
* Confidential Computing<br />
* Container (local) management frontend<br />
* Container easy deployment / installation<br />
* Deployment / Management Framework<br />
* [[:en:openSUSE:ALP/Workgroups/Desktop|Desktop]]<br />
* Documentation<br />
* DPU integration<br />
* Full-disk encryption<br />
* [:en:[openSUSE:ALP/Workgroups/GrassyKnoll|GrassyKnoll]]<br />
* Hardware Accelerators<br />
* High Performance Computing<br />
* Image-based distribution<br />
* [[:en:openSUSE:ALP/Workgroups/Installation|Installation / Deployment]]<br />
* Kernel And Live Patching<br />
* Network Management & Configuration<br />
* [[:en:openSUSE:ALP/Workgroups/Python &amp; friends|Python &amp; friends]]<br />
* Quality Engineering<br />
* RISC-V port<br />
* SAP and High Availability<br />
* Security framework<br />
* Supply Chain Security<br />
* Support and Maintenance<br />
* Telemetry<br />
<br />
= Equipo de arquitectura =<br />
<br />
== Introducción ==<br />
<br />
== Comunícate ==<br />
<br />
== Miembros ==<br />
El equipo actualmente consta de los siguientes miembros:<br />
<br />
* Richard Brown<br />
* Lubos Kocman<br />
* Max Lin<br />
* Marcus Meissner<br />
* Simon Lees<br />
* Bernhard Wiedemann<br />
* Kris Scott<br />
* Felix Niederwanger<br />
* Alexandre Vicenzi<br />
* Maurizio Galli<br />
* Antonio Teixeira<br />
* Valentin Lefebvre<br />
* Emiliano Langella<br />
* David Dyess<br />
* Robin Shepheard<br />
* Dirk Müller<br />
* Morgan Green<br />
<br />
== Cómo unirse ==<br />
El equipo está abierto a todo el mundo. Sólo tienes que añadir tu nombre a la lista de arriba y unirte al canal Matrix/IRC/Discord y participar.<br />
<br />
== Proyectos experimentales ==<br />
=== Experimento 1: Slowroll ===<br />
Página principal: [[openSUSE:Slowroll]]<br />
<br />
"Slowroll" - un flujo de código derivado de openSUSE:Factory/ALP:Source:Rolling que utiliza reglas automatizadas para limitar el ratio de cambios del código base<br />
<br />
{|class="wikitable"<br />
|-<br />
| Dueño del experimento || bmwiedemann<br />
|-<br />
| Projecto del OBS || https://build.opensuse.org/project/show/openSUSE:ALP:Experimental:Slowroll<br />
|}<br />
<br />
=== Experimento 2: Linarite ===<br />
"Linarite" - un sucesor del concepto GrassyKnoll, construyendo una distribución comunitaria encima de SUSE ALP "Granite" <br />
{|class="wikitable"<br />
|-<br />
|Objetivo <br />
|Ser un Granite++ p. ej., toma los conceptos de una distribución tradicional basada en ALP de SUSE y expandirla con paquetes comunitarios y soporte para llegar a ser idealmente un sucesor de Leap<br />
|-<br />
|Dueño del Experimento<br />
|simotek<br />
|-<br />
|Projecto del OBS<br />
|https://build.opensuse.org/project/show/openSUSE:ALP:Experimental:Linarite<br />
|}<br />
<br />
= Diseño de construcción =<br />
== Introducción ==<br />
openSUSE:ALP se construye de forma muy diferente a las distribuciones anteriores de openSUSE/SUSE.<br />
<br />
Esta guía pretende ser un documento vivo que explique la estructura de construcción actual de openSUSE:ALP y la función de los distintos proyectos OBS que componen la plataforma ALP.<br />
== Proyectos OBS ==<br />
'''openSUSE:ALP:Workbench:<workbench_version>''' Este proyecto hace efectivamente el mismo trabajo que Factory Rings 0 y 1, siendo una copia congelada de los paquetes necesarios para arrancar todo lo demás. Estos paquetes se congelan desde openSUSE:Factory<br />
<br />
'''openSUSE:ALP:Source''' El proyecto principal para OBS prjconfig<br />
<br />
'''openSUSE:ALP:Source:Standard''' ALP soporta el concepto de múltiples velocidades de base de código. "Estándar" es la predeterminada que SUSE está construyendo actualmente, pero puede haber velocidades más rápidas o más lentas en el futuro. openSUSE también puede tener la suya propia. Puedo imaginarme totalmente que Tumbleweed evolucione hasta convertirse en algo como SUSE:ALP:Source:Fast algún día. Este proyecto incluye fuentes pero no está construido.<br />
<br />
'''openSUSE:ALP:Source:Standard:Core:<core_version>''' Los paquetes centrales del sistema (enlazados desde SUSE:ALP:Source:Standard) y los contenedores genéricos para ser usados en múltiples productos ALP se construyen aquí.<br />
<br />
'''openSUSE:ALP:Products:<nombre_producto>:<versión_producto>[:<versión_menor_producto>]''' Aquí es donde se encuentran las definiciones y los patrones de los productos. Cada producto se construye contra un proyecto SUSE:ALP:Source:<velocity>:Core:<core_version> Se permiten paquetes adicionales específicos de un producto Lo ideal sería que los paquetes se enviasen y enlazasen desde :Core: por defecto (para permitir compartir paquetes entre productos) pero se pueden hacer excepciones. Para los productos exclusivos de openSUSE, estas excepciones podrían ser la norma. Los contenedores, imágenes de máquinas virtuales, etc. específicos de un producto se definen y construyen aquí.<br />
<br />
'''openSUSE:ALP:Productos:<nombre_producto>:<versión_producto>[:<versión_menor_producto>]:Update''' Si un producto se va a mantener utilizando un proceso de mantenimiento tipo SLE/Leap, este sería el proyecto de Actualización para dicho proceso.<br />
<br />
== Ejemplos teóricos ==<br />
* ''openSUSE:ALP:Source:Standard:1.0'' - la primera versión de la base de código ALP "estándar" (versión normal)<br />
* ''openSUSE:ALP:Source:Rolling'' - una versión de ALP equivalente a openSUSE:Factory (Rolling Release)<br />
* ''openSUSE:ALP:Products:Server:1.0'' - copia openSUSE 1:1 del producto SUSE ALP Server 1.0 (desarrollado en SUSE:ALP:Products:Server:1.0).<br />
<br />
{{IW|openSUSE:ALP/ArchitectureTeam}}<br />
[[Categoría: Portal]]</div>Karlggesthttps://es.opensuse.org/index.php?title=Portal:ALP&diff=28352Portal:ALP2023-10-30T22:46:02Z<p>Karlggest: /* Proyectos experimentales */</p>
<hr />
<div>{{Info|El proyecto ALP está aun siendo discutido. }}<br />
<br />
= Grupos de Trabajo =<br />
Lista de los grupos de trabajo existentes que trabajan en ALP<br />
<br />
* [[:en:openSUSE:ALP/Workgroups/SysMngmnt|1:1 System Management]]<br />
* [[:en:openSUSE:ALP/Workgroups/ALPVT|ALP Virtualization]]<br />
* [[:en:openSUSE:ALP/Workgroups/BootableImages|Bootable images]]<br />
* [[:en:openSUSE:ALP/Workgroups/Git-Packaging-Workflow|Git Packaging Workflow]]<br />
* [[:en:openSUSE:ALP/Workgroups/Community|Community]]<br />
* Components delivery & lifecycle<br />
* Confidential Computing<br />
* Container (local) management frontend<br />
* Container easy deployment / installation<br />
* Deployment / Management Framework<br />
* [[:en:openSUSE:ALP/Workgroups/Desktop|Desktop]]<br />
* Documentation<br />
* DPU integration<br />
* Full-disk encryption<br />
* [:en:[openSUSE:ALP/Workgroups/GrassyKnoll|GrassyKnoll]]<br />
* Hardware Accelerators<br />
* High Performance Computing<br />
* Image-based distribution<br />
* [[:en:openSUSE:ALP/Workgroups/Installation|Installation / Deployment]]<br />
* Kernel And Live Patching<br />
* Network Management & Configuration<br />
* [[:en:openSUSE:ALP/Workgroups/Python &amp; friends|Python &amp; friends]]<br />
* Quality Engineering<br />
* RISC-V port<br />
* SAP and High Availability<br />
* Security framework<br />
* Supply Chain Security<br />
* Support and Maintenance<br />
* Telemetry<br />
<br />
= Equipo de arquitectura =<br />
<br />
== Introducción ==<br />
<br />
== Comunícate ==<br />
<br />
== Miembros ==<br />
El equipo actualmente consta de los siguientes miembros:<br />
<br />
* Richard Brown<br />
* Lubos Kocman<br />
* Max Lin<br />
* Marcus Meissner<br />
* Simon Lees<br />
* Bernhard Wiedemann<br />
* Kris Scott<br />
* Felix Niederwanger<br />
* Alexandre Vicenzi<br />
* Maurizio Galli<br />
* Antonio Teixeira<br />
* Valentin Lefebvre<br />
* Emiliano Langella<br />
* David Dyess<br />
* Robin Shepheard<br />
* Dirk Müller<br />
* Morgan Green<br />
<br />
== Cómo unirse ==<br />
El equipo está abierto a todo el mundo. Sólo tienes que añadir tu nombre a la lista de arriba y unirte al canal Matrix/IRC/Discord y participar.<br />
<br />
== Proyectos experimentales ==<br />
=== Experimento 1: Slowroll ===<br />
Página principal: [[openSUSE:Slowroll]]<br />
<br />
"Slowroll" - un flujo de código derivado de openSUSE:Factory/ALP:Source:Rolling que utiliza reglas automatizadas para limitar el ratio de cambios del código base<br />
<br />
{|class="wikitable"<br />
|-<br />
| Dueño del experimento || bmwiedemann<br />
|-<br />
| Projecto del OBS || https://build.opensuse.org/project/show/openSUSE:ALP:Experimental:Slowroll<br />
|}<br />
<br />
=== Experimento 2: Linarite ===<br />
"Linarite" - un sucesor del concepto GrassyKnoll, construyendo una distribución comunitaria encima de SUSE ALP "Granite" <br />
{|class="wikitable"<br />
|-<br />
|Objetivo <br />
|Ser un Granite++ p. ej., toma los conceptos de una distribución tradicional basada en ALP de SUSE y expandirla con paquetes comunitarios y soporte para llegar a ser idealmente un sucesor de Leap<br />
|-<br />
|Dueño del Experimento<br />
|simotek<br />
|-<br />
|Projecto del OBS<br />
|https://build.opensuse.org/project/show/openSUSE:ALP:Experimental:Linarite<br />
|}<br />
<br />
= Diseño de construcción =<br />
== Introducción ==<br />
openSUSE:ALP se construye de forma muy diferente a las distribuciones anteriores de openSUSE/SUSE.<br />
<br />
Esta guía pretende ser un documento vivo que explique la estructura de construcción actual de openSUSE:ALP y la función de los distintos proyectos OBS que componen la plataforma ALP.<br />
== Proyectos OBS ==<br />
'''openSUSE:ALP:Workbench:<workbench_version>''' Este proyecto hace efectivamente el mismo trabajo que Factory Rings 0 y 1, siendo una copia congelada de los paquetes necesarios para arrancar todo lo demás. Estos paquetes se congelan desde openSUSE:Factory<br />
<br />
'''openSUSE:ALP:Source''' El proyecto principal para OBS prjconfig<br />
<br />
'''openSUSE:ALP:Source:Standard''' ALP soporta el concepto de múltiples velocidades de base de código. "Estándar" es la predeterminada que SUSE está construyendo actualmente, pero puede haber velocidades más rápidas o más lentas en el futuro. openSUSE también puede tener la suya propia. Puedo imaginarme totalmente que Tumbleweed evolucione hasta convertirse en algo como SUSE:ALP:Source:Fast algún día. Este proyecto incluye fuentes pero no está construido.<br />
<br />
'''openSUSE:ALP:Source:Standard:Core:<core_version>''' Los paquetes centrales del sistema (enlazados desde SUSE:ALP:Source:Standard) y los contenedores genéricos para ser usados en múltiples productos ALP se construyen aquí.<br />
<br />
'''openSUSE:ALP:Products:<nombre_producto>:<versión_producto>[:<versión_menor_producto>]''' Aquí es donde se encuentran las definiciones y los patrones de los productos. Cada producto se construye contra un proyecto SUSE:ALP:Source:<velocity>:Core:<core_version> Se permiten paquetes adicionales específicos de un producto Lo ideal sería que los paquetes se enviasen y enlazasen desde :Core: por defecto (para permitir compartir paquetes entre productos) pero se pueden hacer excepciones. Para los productos exclusivos de openSUSE, estas excepciones podrían ser la norma. Los contenedores, imágenes de máquinas virtuales, etc. específicos de un producto se definen y construyen aquí.<br />
<br />
'''openSUSE:ALP:Productos:<nombre_producto>:<versión_producto>[:<versión_menor_producto>]:Update''' Si un producto se va a mantener utilizando un proceso de mantenimiento tipo SLE/Leap, este sería el proyecto de Actualización para dicho proceso.<br />
<br />
== Ejemplos teóricos ==<br />
* ''openSUSE:ALP:Source:Standard:1.0'' - la primera versión de la base de código ALP "estándar" (versión normal)<br />
* ''openSUSE:ALP:Source:Rolling'' - una versión de ALP equivalente a openSUSE:Factory (Rolling Release)<br />
* ''openSUSE:ALP:Products:Server:1.0'' - copia openSUSE 1:1 del producto SUSE ALP Server 1.0 (desarrollado en SUSE:ALP:Products:Server:1.0).<br />
<br />
{{IW|openSUSE:ALP/ArchitectureTeam}}</div>Karlggesthttps://es.opensuse.org/index.php?title=SDB:Systemd_uso&diff=28349SDB:Systemd uso2023-10-30T13:19:55Z<p>Karlggest: /* Analisis del estado del sistema */</p>
<hr />
<div>{{Plantilla:Encabezado para systemd<br />
|}}<br />
El comando principal para utilizar systemd es systemctl. Algunos de sus usos son examinar el estado del sistema y la gestión de los servicios. Consulte man 1 systemctl para mayor detalle.<br />
<br />
Tip: Puede utilizar el comando systemctl con el parámetro -H <user>@<host> para controlar una instancia de systemd en una máquina remota. Esto utilizará SSH para conectarse a la instancia systemd remota.<br />
Nota: systemadm es el frontend gráfico oficial para systemctl. Proporcionado por el paquete systemd-ui disponible en el repositorio.<br />
<br />
==Analisis del estado del sistema==<br />
* Lista de unidades activas:<br />
celebi:~ # systemctl<br />
* Lista de unidades que han fallado:<br />
celebi:~ # systemctl --failed<br />
* Lista de todas las unidades disponibles:<br />
celebi:~ # systemctl list-unit-files<br />
* Lista de todas las unidades activas al arranque:<br />
celebi:~ # systemctl list-unit-files --state=enabled<br />
<br />
==Uso de las unidades==<br />
Las unidades pueden ser de varios tipos, destacando:<br />
# '''servicios''' (.service)<br />
# '''puntos de montaje''' (.mount)<br />
# '''dispositivos''' (.device)<br />
# '''sockets''' (.socket).<br />
# '''temporizadores''' (.timers)<br />
Al utilizar systemctl, se debe especificar el nombre completo de la unidad, incluyendo el sufijo, por ejemplo, sshd.socket. Sin embargo, hay algunas excepciones en las cuales systemctl asume que se trata de un servicio, por ejemplo sshd y sshd.service:<br />
Los puntos de montaje se traducirán automáticamente en la correspondiente unidad .mount. Por ejemplo, si especifica /home será equivalente a home.mount.<br />
De forma similar a los puntos de montaje, los dispositivos se traducen automáticamente en la correspondiente unidad .device, por lo tanto, la especificación /dev/sda2 es equivalente a dev-sda2.device.<br />
Activa una unidad:<br />
celebi:~ # systemctl start [unidad]<br />
Desactiva una unidad:<br />
celebi:~ # systemctl stop [unidad]<br />
Reinicia la unidad:<br />
celebi:~ # systemctl restart [unidad]<br />
Hace que una unidad recargue su configuración:<br />
celebi:~ # systemctl reload [unidad]<br />
Muestra el estado de una unidad, incluso si se está ejecutando o no:<br />
celebi:~ # systemctl status [unidad]<br />
Comprueba si la unidad ya está habilitada o no:<br />
celebi:~ # systemctl is-enabled [unidad]<br />
Habilita el inicio automático en el arranque:<br />
celebi:~ # systemctl enable [unidad]<br />
Desactiva el inicio automático durante el arranque:<br />
celebi:~ # systemctl disable [unidad]<br />
Muestra la página del manual asociada con una unidad:<br />
celebi:~ # systemctl help [unidad]<br />
Recarga systemd, escaneando en busca de unidades nuevas o modificadas:<br />
celebi:~ # systemctl daemon-reload<br />
<br />
==Administración de la energía==<br />
Apagado y reinicio del sistema:<br />
celebi:~ # systemctl reboot<br />
Apagado del sistema:<br />
celebi:~ # systemctl poweroff<br />
Suspensión del sistema:<br />
celebi:~ # systemctl suspend<br />
Hibernación del sistema:<br />
celebi:~ # systemctl hibernate<br />
Poner el sistema en estado de reposo híbrido o suspensión combinada:<br />
celebi:~ # systemctl hybrid-sleep</div>Karlggesthttps://es.opensuse.org/index.php?title=Categor%C3%ADa:SDB:Gu%C3%ADa_de_principiantes&diff=28346Categoría:SDB:Guía de principiantes2023-10-30T13:14:58Z<p>Karlggest: </p>
<hr />
<div>{{Intro|Documentación básica para principiantes en GNU/Linux.}}<br />
[[Category:SDB:Documentación|G]]</div>Karlggesthttps://es.opensuse.org/index.php?title=Plantilla:Barra_de_navegaci%C3%B3n_para_systemd&diff=28343Plantilla:Barra de navegación para systemd2023-10-30T13:13:08Z<p>Karlggest: </p>
<hr />
<div>{{Barra de navegación|TITLE=[[Systemd]]|CONTENT=[[Systemd]] · [[SDB:Systemd_uso|Uso básico]] · [[SDB:Systemd_config|Configuración]] · [[SDB:Systemd_files|Personalizar unidades]] · [[SDB:Systemd_target|Objetivos]] · [[SDB:Systemd_service|Servicios]] · [[SDB:Systemd_timers|Temporizadores]] · [[SDB:Snapshots|Instantáneas]] · [[SDB:Systemd_journal|Diario]] · [[SDB:Systemd_optimizacion|Optimización]] · [[SDB:Systemd-tmpfiles|Ficheros temporales]] · [[SDB:Equivalencia entre systemd y sysvinit|Equivalencia entre systemd y sysvinit]] }}<br />
[[Categoría: SDB:Servicios del sistema]]<br />
<noinclude><br />
{{{{PAGENAME}}/doc}}<br />
[[Categoría:Plantillas de navegación]]<br />
</noinclude></div>Karlggesthttps://es.opensuse.org/index.php?title=Categor%C3%ADa:SDB:Servicios_del_sistema&diff=28340Categoría:SDB:Servicios del sistema2023-10-30T13:11:42Z<p>Karlggest: </p>
<hr />
<div><br />
[[Categoría:SDB:Guía de principiantes]]</div>Karlggesthttps://es.opensuse.org/index.php?title=Categor%C3%ADa:SDB:Servicios_del_sistema&diff=28337Categoría:SDB:Servicios del sistema2023-10-30T13:11:30Z<p>Karlggest: </p>
<hr />
<div><br />
[[Categoría: Guía de principiantes]]</div>Karlggesthttps://es.opensuse.org/index.php?title=Tmux&diff=28334Tmux2023-10-30T13:10:14Z<p>Karlggest: </p>
<hr />
<div>{{Título en minúscula}}<br />
{{Intro|'''tmux''' (abreviatura de ''terminal multiplexer'', multiplexor de la terminal) es un programa que permite la creación acceso y control de varias terminales (o ventanas), donde en cada una de ellas se ejecuta un programa independiente, desde una sola ventana. Quienes estén familiarizados con GNU Screen pueden descubrir que tmux es una buena alternativa. Su archivo de configuración se encuentra en <code>~/.tmux.conf</code>, donde <code>~</code> es la ruta al directorio de usuario.}}<br />
== Iniciar una sesión ==<br />
<br />
Al ejecutar tmux éste crea un socket para la sesión en <code>/tmp/tmux-<UID>/nombre-de-la-sesión</code>. Si no se indica un nombre para la sesión se usa ''default''. Para iniciar el programa se usa el comando<br />
<br />
tmux<br />
<br />
El programa se puede controlar desde un cliente conectado usando usando una combinación de teclas, Ctrl + b por defecto, seguida de una tecla de comando. Es conveniente que se le dé un nombre sensato a una sesión al iniciarla:<br />
<br />
tmux new-session -s 'nombre-de-la-sesión'<br />
<br />
El nombre de la sesión debe encerrarse entre comillas simples si contiene espacios. Para ejecutar un comando en una pantalla de sesión sin conectarlo a ella (como un demonio/servicio):<br />
<br />
tmux new-session -d 'comando'<br />
<br />
Si el comando contiene espacios debe encerrarse entre comillas simples.<br />
<br />
== Atajos de teclado ==<br />
<br />
Después de pulsar Ctrl + b se pueden usar las siguientes combinaciones de teclas:<br />
<br />
*General:<br><br><br />
*:'''?''' = Listar todos los atajos de teclado<br />
*:'''d''' = Desconectar el cliente actual<br />
*:'''<nowiki>:</nowiki>''' = Abrir el símbolo del sistema de tmux<br />
<br />
*Creación y gestionar ventanas<br><br><br />
*:'''c''' = Crea una nueva ventana<br />
*:'''n''' = Cambia a la ventana siguiente <br />
*:'''p''' = Cambia a la ventana anterior <br />
*:'''l''' = Cambia a la ventana seleccionada con anterioridad<br />
*:'''0''' a '''9''' = Selecciona las ventanas 0 a 9<br />
*:'''<nowiki>'</nowiki>''' = Pregunta por el índice de la ventana que se quiere seleccionar. Se puede introducir un número o el título de la ventana<br />
*:''',''' = Cambiar el nombre de la ventana actualmente seleccionada<br />
*:'''w''' = Elegir la ventana actual de un modo interactivo<br />
*:'''<nowiki>:</nowiki>''' seguido de '''list-windows''' más la tecla '''Entrar''' = Muestra la lista de ventanas<br />
<br />
*Creación y gestionar paneles (partes en una misma ventana)<br><br><br />
*:'''"''' = Divide el panel en dos mitades, superior e inferior<br />
*:'''%''' = Divide el panel en dos mitades, izquierda y derecha<br />
*:'''o''' = Selecciona el siguiente panel en la ventana actual<br />
*:'''<nowiki>;</nowiki>''' = Cambiar al panel que estaba activo antes<br />
*:'''{''' = Intercambiar el panel actual con el anterior<br />
*:'''}''' = Intercambiar el panel actual con el siguiente<br />
*:'''Ctrl + o''' = Rota hacia delante los paneles en la ventana actual<br />
*:'''Alt + 1''' a '''Alt + 5''' = Organiza los paneles en uno de los cinco diseños predefinidos: horizontal impar, vertical impar, horizontal principal, vertical principal, o apilado<br />
*:'''x''' = Destruye el panel actual<br />
*:'''!''' = Separa el panel actual de la ventana<br />
<br />
== Operaciones de copia, pegado y desplazamiento ==<br />
<br />
Las teclas disponibles dependen de si se ha seleccionado ''emacs'' (por defecto) o ''vi''. Se puede establecer el valor de la opción mode-keys a ''vi'' en el archivo .tmux.conf.<br />
<br />
;:&nbsp;:'''[''' = Inicia el modo de copia par copiar texto o ver el historial<br />
<br />
;:&nbsp;:''']''' = Pega el buffer de texto más reciente<br />
<br />
;:&nbsp;:'''<nowiki>#</nowiki>''' = Lista todos los buffers que se pueden pegar<br />
<br />
;:&nbsp;:'''-''' = Borra el buffer de texto copiado más reciente<br />
<br />
== Continuar una sesión ==<br />
<br />
Tras haber desconectado una sesión, todas las terminales activas siguen en funcionamiento y también lo hacen los comandos que no hayan finalizado aún. Para ver una lista de las sesiones que hay, ejecute:<br />
<br />
tmux list-sessions<br />
<br />
La respuesta podría ser, por ejemplo:<br />
<br />
standard: 5 windows (created Wed Jul 4 22:12:03 2012) [118x49]<br />
<br />
Para continuar con una sesión ejecute:<br />
<br />
tmux attach -t standard<br />
<br />
== Enlaces externos ==<br />
<br />
* [https://github.com/tmux/tmux/wiki Página del proyecto]<br />
<br />
[[Categoría:Aplicaciones:Sistema]]<br />
[[Categoría:SDB:Guía de principiantes]]</div>Karlggesthttps://es.opensuse.org/index.php?title=openSUSE:Vadem%C3%A9cum_comandos_13.1&diff=28331openSUSE:Vademécum comandos 13.12023-10-30T13:08:45Z<p>Karlggest: /* Ver también */</p>
<hr />
<div>{{Intro|Recopilación breve de comandos en openSUSE 13.1}}<br />
{{Nota | Los comandos que empiezan por <code>#</code> se deben ejecutar como administrador (root), mientras que los que empiezan por <code>$</code> los puede ejecutar cualquiera. Algunos de estos últimos muestran más información si se ejecutan como administrador. Ni <code>#</code> ni <code>$</code> forman parte del comando (no se deben escribir).}}<br style="clear: all"/><br />
<br />
== Herramienta de administración YaST ==<br />
<br />
Ejecutar [[Portal:YaST|YaST]] usando la interfaz Qt<br />
# yast –-qt<br />
Ejecutar YaST usando la interfaz GTK+<br />
# yast --gtk<br />
Ejecutar YaST usando la interfaz ncurses (modo texto)<br />
# yast --ncurses<br />
Listar los [[Portal:YaST/Módulos_de_YaST | módulos de YaST]] disponibles<br />
# yast -l<br />
Usar los módulos (modo texto)<br />
# yast <nombre_del_módulo><br />
<br />
== Gestor de paquetes ZYpp ==<br />
Listado de repositorios<br />
# zypper lr<br />
Añadir repositorio<br />
# zypper ar -f <URL> <alias><br />
Actualizar los repositorios<br />
# zypper ref<br />
Actualizar los paquetes instalados<br />
# zypper up<br />
Realizar una actualización de la distribución<br />
# zypper dup<br />
Información sobre un paquete de software<br />
# zypper if <nombre del paquete><br />
Búsqueda de un paquete de software<br />
# zypper se <paquete, patrón o nombre de la dependencia><br />
A qué paquete pertenece un archivo<br />
# zypper se --provides <ruta_del_archivo><br />
Lista de archivos de un paquete de software<br />
$ rpm -ql <nombre_del_paquete><br />
<br />
== Red ==<br />
Ver los dispositivos de red disponibles<br />
$ ip a<br />
$ iwconfig<br />
Mostrar las rutas<br />
$ ip ru; ip route show table all<br />
Mostrar los puertos TCP/UDP abiertos<br />
# ss -anptu<br />
Mostar todos los puertos abiertos<br />
# ss -anp<br />
Comprobar la disponibilidad del ''host''<br />
$ ping nombre_del_host<br />
Cambiar el nombre del ''host''<br />
# hostnamectl set-hostname ''máquina.red.nombre''<br />
<br />
== Servicios ==<br />
Listado de todos los servicios<br />
# systemctl list-units --type service<br />
Estado de los servicios<br />
# systemctl status <nombre_del_servicio><br />
Iniciar/detener/reiniciar un servicio<br />
# systemctl start <nombre_del_servicio><br />
# systemctl stop <nombre_del_servicio><br />
# systemctl restart <nombre_del_servicio><br />
Mostrar archivos de configuración modificados<br />
# systemd-delta<br />
Analizar los tiempos de arranque<br />
# systemd-analyze blame<br />
# systemd-analyze plot >nombre_de_archivo.svg<br />
Mostrar información del registro del sistema (''journal'')<br />
# journalctl -u <nombre_del_servicio><br />
# journalctl -f (muestra lo que se va añadiendo al registro, igual que el comando: tail -f /var/log/messages)<br />
# journalctl -b (sólo muestra los mensajes desde el último arranque)<br />
Gestión de fecha y hora<br />
# timedatectl<br />
<br />
== Información sobre CPU y memoria ==<br />
Ver los detalles de la CPU<br />
$ lscpu<br />
$ less /proc/cpuinfo<br />
$ uname -a<br />
Mostrar los procesos que se están ejecutando<br />
$ ps -ef<br />
$ pstree<br />
$ top -c<br />
Muestra el uso de la memoria<br />
$ less /proc/meminfo<br />
$ free<br />
Habilitar/inhibir la memoria swap<br />
$ swapon -a<br />
$ swapoff -a<br />
Muestra todos los archivos y directorios abiertos<br />
# lsof | less<br />
# lsof | grep -i nombre_del_archivo<br />
<br />
== Sistema de archivos ==<br />
Listado de discos y particiones<br />
# fdisk -l<br />
# fdisk -l /dev/<h/s>d<a/z><br />
Listado de sistemas de archivos montados<br />
$ lsblk<br />
$ findmnt<br />
$ less /proc/self/mountinfo<br />
Montar una partición<br />
# mount -t <tipo> <dispositivo> <punto de montaje><br />
Montar una imagen ISO de CD/DVD<br />
# mount -t iso9660 -o loop dvd-imagen.iso <punto de montaje><br />
Desmontar un sistema de archivos<br />
# umount /dev/<dispositivo><br />
# umount /<punto de montaje><br />
Espacio del disco usado<br />
# df -h<br />
Espacio ocupado por archivos o directorios<br />
# du -h<br />
Muestra todos los directorios que ocupan un tamaño mayor de 10Mb<br />
# du -h -t10M<br />
<br />
== Cuentas ==<br />
Crear una cuenta de usuario<br />
# useradd <nombre><br />
-u UID<br /><br />
-g GID<br /><br />
-d directorio home<br /><br />
-c nombre completo del usuario<br /><br />
-s shell por defecto<br /><br />
Eliminar una cuenta de usuario<br />
# userdel <nombre><br />
Cambiar una contraseña de usuario<br />
# passwd <nombre><br />
Modificar una cuenta de usuario<br />
# usermod <opciones> <nombre><br />
<br />
== Build Service ==<br />
Subdividir y verificar un paquete de software<br />
$ osc bco &lt;proyecto fuente&gt; &lt;paquete fuente&gt;<br />
Realizar cambios en un paquete (''Commit'')<br />
$ osc commit -m "&lt;comentario&gt;"<br />
Enviar el paquete modificado<br />
$ osc sr<br />
<br />
== Distribución de los sistemas de directorios ==<br />
* <code>/bin&nbsp;&nbsp;</code> – Contiene comandos útiles que son usados tanto por los usuarios como por los administradores.<br />
* <code>/boot&nbsp;</code> – Este directorio contiene el cargador de arranque y el [[kernel]] de Linux.<br />
* <code>/dev&nbsp;&nbsp;</code> – Contiene los archivos de dispositivos especiales para todos los dispositivos.<br />
* <code>/etc&nbsp;&nbsp;</code> – Este directorio contiene los archivos de configuración del ''host'' específico para tu sistema.<br />
* <code>/home&nbsp;</code> – Linux es un sistema multiusuario, así que cada usuario tiene asignado un directorio específico que sólo es accesible a él mismo y al administrador del sistema.<br />
* <code>/lib&nbsp;&nbsp;</code> – Contiene las librerías compartidas que son necesarias por los programas del sistema.<br />
* <code>/lib64</code> – Contiene alternativas a librerías compartidas (opcional) y necesitan directorios independientes , ejemplo : <code>/lib32</code>, <code>/lib64</code>, etc.<br />
* <code>/mnt&nbsp;&nbsp;</code> – Un punto genérico de montaje de unidades.<br />
* <code>/media</code><br />
* <code>/opt&nbsp;&nbsp;</code> – Contiene software de terceros que no forman parte de openSUSE.<br />
* <code>/proc&nbsp;</code> – Pseudo-archivos de sistema que contienen archivos relacionados con los procesos y la configuración del kernel. <br />
* <code>/root&nbsp;</code> – Directorio ''Home'' del usuario administrador del sistema.<br />
* <code>/run&nbsp;&nbsp;</code> – Archivos creados durante el curso de sus operaciones, y que no son persistentes después de un reinicio.<br />
* <code>/sbin&nbsp;</code> – Contiene los binarios que son esenciales para el funcionamiento del sistema.<br />
* <code>/srv&nbsp;&nbsp;</code> – Contiene los datos específicos del sitio que son servidos por este sistema.<br />
* <code>/sys&nbsp;&nbsp;</code> – Pseudo-sistema de archivos que contiene los archivos pertenecientes a la configuración del kernel y el estado del sistema.<br />
* <code>/tmp&nbsp;&nbsp;</code> – Directorio donde se guardan los archivos temporales.<br />
* <code>/usr&nbsp;&nbsp;</code> – Directorio que contiene los archivos de sistema y directorios compartidos por todos los usuarios.<br />
* <code>/var&nbsp;&nbsp;</code> – Contiene archivos con los que el sistema escribe los datos durante el curso de sus procesos.<br />
<br />
== Ver también ==<br />
<br />
* [[ openSUSE:Chuletas | Hojas para imprimir con ayudas de comandos.]]<br />
<br />
[[en:openSUSE:Cheat_sheet_13.1]]<br />
<br />
[[Categoría:SDB:Guía de principiantes]]</div>Karlggesthttps://es.opensuse.org/index.php?title=openSUSE:Vadem%C3%A9cum_comandos_13.1&diff=28328openSUSE:Vademécum comandos 13.12023-10-30T13:08:07Z<p>Karlggest: </p>
<hr />
<div>{{Intro|Recopilación breve de comandos en openSUSE 13.1}}<br />
{{Nota | Los comandos que empiezan por <code>#</code> se deben ejecutar como administrador (root), mientras que los que empiezan por <code>$</code> los puede ejecutar cualquiera. Algunos de estos últimos muestran más información si se ejecutan como administrador. Ni <code>#</code> ni <code>$</code> forman parte del comando (no se deben escribir).}}<br style="clear: all"/><br />
<br />
== Herramienta de administración YaST ==<br />
<br />
Ejecutar [[Portal:YaST|YaST]] usando la interfaz Qt<br />
# yast –-qt<br />
Ejecutar YaST usando la interfaz GTK+<br />
# yast --gtk<br />
Ejecutar YaST usando la interfaz ncurses (modo texto)<br />
# yast --ncurses<br />
Listar los [[Portal:YaST/Módulos_de_YaST | módulos de YaST]] disponibles<br />
# yast -l<br />
Usar los módulos (modo texto)<br />
# yast <nombre_del_módulo><br />
<br />
== Gestor de paquetes ZYpp ==<br />
Listado de repositorios<br />
# zypper lr<br />
Añadir repositorio<br />
# zypper ar -f <URL> <alias><br />
Actualizar los repositorios<br />
# zypper ref<br />
Actualizar los paquetes instalados<br />
# zypper up<br />
Realizar una actualización de la distribución<br />
# zypper dup<br />
Información sobre un paquete de software<br />
# zypper if <nombre del paquete><br />
Búsqueda de un paquete de software<br />
# zypper se <paquete, patrón o nombre de la dependencia><br />
A qué paquete pertenece un archivo<br />
# zypper se --provides <ruta_del_archivo><br />
Lista de archivos de un paquete de software<br />
$ rpm -ql <nombre_del_paquete><br />
<br />
== Red ==<br />
Ver los dispositivos de red disponibles<br />
$ ip a<br />
$ iwconfig<br />
Mostrar las rutas<br />
$ ip ru; ip route show table all<br />
Mostrar los puertos TCP/UDP abiertos<br />
# ss -anptu<br />
Mostar todos los puertos abiertos<br />
# ss -anp<br />
Comprobar la disponibilidad del ''host''<br />
$ ping nombre_del_host<br />
Cambiar el nombre del ''host''<br />
# hostnamectl set-hostname ''máquina.red.nombre''<br />
<br />
== Servicios ==<br />
Listado de todos los servicios<br />
# systemctl list-units --type service<br />
Estado de los servicios<br />
# systemctl status <nombre_del_servicio><br />
Iniciar/detener/reiniciar un servicio<br />
# systemctl start <nombre_del_servicio><br />
# systemctl stop <nombre_del_servicio><br />
# systemctl restart <nombre_del_servicio><br />
Mostrar archivos de configuración modificados<br />
# systemd-delta<br />
Analizar los tiempos de arranque<br />
# systemd-analyze blame<br />
# systemd-analyze plot >nombre_de_archivo.svg<br />
Mostrar información del registro del sistema (''journal'')<br />
# journalctl -u <nombre_del_servicio><br />
# journalctl -f (muestra lo que se va añadiendo al registro, igual que el comando: tail -f /var/log/messages)<br />
# journalctl -b (sólo muestra los mensajes desde el último arranque)<br />
Gestión de fecha y hora<br />
# timedatectl<br />
<br />
== Información sobre CPU y memoria ==<br />
Ver los detalles de la CPU<br />
$ lscpu<br />
$ less /proc/cpuinfo<br />
$ uname -a<br />
Mostrar los procesos que se están ejecutando<br />
$ ps -ef<br />
$ pstree<br />
$ top -c<br />
Muestra el uso de la memoria<br />
$ less /proc/meminfo<br />
$ free<br />
Habilitar/inhibir la memoria swap<br />
$ swapon -a<br />
$ swapoff -a<br />
Muestra todos los archivos y directorios abiertos<br />
# lsof | less<br />
# lsof | grep -i nombre_del_archivo<br />
<br />
== Sistema de archivos ==<br />
Listado de discos y particiones<br />
# fdisk -l<br />
# fdisk -l /dev/<h/s>d<a/z><br />
Listado de sistemas de archivos montados<br />
$ lsblk<br />
$ findmnt<br />
$ less /proc/self/mountinfo<br />
Montar una partición<br />
# mount -t <tipo> <dispositivo> <punto de montaje><br />
Montar una imagen ISO de CD/DVD<br />
# mount -t iso9660 -o loop dvd-imagen.iso <punto de montaje><br />
Desmontar un sistema de archivos<br />
# umount /dev/<dispositivo><br />
# umount /<punto de montaje><br />
Espacio del disco usado<br />
# df -h<br />
Espacio ocupado por archivos o directorios<br />
# du -h<br />
Muestra todos los directorios que ocupan un tamaño mayor de 10Mb<br />
# du -h -t10M<br />
<br />
== Cuentas ==<br />
Crear una cuenta de usuario<br />
# useradd <nombre><br />
-u UID<br /><br />
-g GID<br /><br />
-d directorio home<br /><br />
-c nombre completo del usuario<br /><br />
-s shell por defecto<br /><br />
Eliminar una cuenta de usuario<br />
# userdel <nombre><br />
Cambiar una contraseña de usuario<br />
# passwd <nombre><br />
Modificar una cuenta de usuario<br />
# usermod <opciones> <nombre><br />
<br />
== Build Service ==<br />
Subdividir y verificar un paquete de software<br />
$ osc bco &lt;proyecto fuente&gt; &lt;paquete fuente&gt;<br />
Realizar cambios en un paquete (''Commit'')<br />
$ osc commit -m "&lt;comentario&gt;"<br />
Enviar el paquete modificado<br />
$ osc sr<br />
<br />
== Distribución de los sistemas de directorios ==<br />
* <code>/bin&nbsp;&nbsp;</code> – Contiene comandos útiles que son usados tanto por los usuarios como por los administradores.<br />
* <code>/boot&nbsp;</code> – Este directorio contiene el cargador de arranque y el [[kernel]] de Linux.<br />
* <code>/dev&nbsp;&nbsp;</code> – Contiene los archivos de dispositivos especiales para todos los dispositivos.<br />
* <code>/etc&nbsp;&nbsp;</code> – Este directorio contiene los archivos de configuración del ''host'' específico para tu sistema.<br />
* <code>/home&nbsp;</code> – Linux es un sistema multiusuario, así que cada usuario tiene asignado un directorio específico que sólo es accesible a él mismo y al administrador del sistema.<br />
* <code>/lib&nbsp;&nbsp;</code> – Contiene las librerías compartidas que son necesarias por los programas del sistema.<br />
* <code>/lib64</code> – Contiene alternativas a librerías compartidas (opcional) y necesitan directorios independientes , ejemplo : <code>/lib32</code>, <code>/lib64</code>, etc.<br />
* <code>/mnt&nbsp;&nbsp;</code> – Un punto genérico de montaje de unidades.<br />
* <code>/media</code><br />
* <code>/opt&nbsp;&nbsp;</code> – Contiene software de terceros que no forman parte de openSUSE.<br />
* <code>/proc&nbsp;</code> – Pseudo-archivos de sistema que contienen archivos relacionados con los procesos y la configuración del kernel. <br />
* <code>/root&nbsp;</code> – Directorio ''Home'' del usuario administrador del sistema.<br />
* <code>/run&nbsp;&nbsp;</code> – Archivos creados durante el curso de sus operaciones, y que no son persistentes después de un reinicio.<br />
* <code>/sbin&nbsp;</code> – Contiene los binarios que son esenciales para el funcionamiento del sistema.<br />
* <code>/srv&nbsp;&nbsp;</code> – Contiene los datos específicos del sitio que son servidos por este sistema.<br />
* <code>/sys&nbsp;&nbsp;</code> – Pseudo-sistema de archivos que contiene los archivos pertenecientes a la configuración del kernel y el estado del sistema.<br />
* <code>/tmp&nbsp;&nbsp;</code> – Directorio donde se guardan los archivos temporales.<br />
* <code>/usr&nbsp;&nbsp;</code> – Directorio que contiene los archivos de sistema y directorios compartidos por todos los usuarios.<br />
* <code>/var&nbsp;&nbsp;</code> – Contiene archivos con los que el sistema escribe los datos durante el curso de sus procesos.<br />
<br />
== Ver también ==<br />
<br />
* [[ openSUSE:Chuletas | Hojas para imprimir con ayudas de comandos.]]<br />
<br />
[[en:openSUSE:Cheat_sheet_13.1]]<br />
<br />
[[Categoría:SDB:Guías de principiantes]]</div>Karlggesthttps://es.opensuse.org/index.php?title=Categor%C3%ADa:SDB:Servicios_del_sistema&diff=28325Categoría:SDB:Servicios del sistema2023-10-30T13:05:43Z<p>Karlggest: Karlggest trasladó la página Categoría:SDB:Servicios del sistema a Categoría:Servicios del sistema sobre una redirección</p>
<hr />
<div>#REDIRECCIÓN [[:Categoría:Servicios del sistema]]</div>Karlggesthttps://es.opensuse.org/index.php?title=SDB:Soluci%C3%B3n_de_problemas_conocidos_con_MicroOS_Desktop&diff=28319SDB:Solución de problemas conocidos con MicroOS Desktop2023-10-30T12:59:33Z<p>Karlggest: </p>
<hr />
<div>{{Conocimiento|<br />
*[[Portal:Aeon|Aeon]]<br />
*[[Portal:Kalpa|Kalpa]]<br />
|<br />
*[[Portal:MicroOS|MicroOS]]<br />
*[[SDB:Actualizaciones transaccionales|Actualizaciones transaccionales]]<br />
|<br />
*[https://es.wikipedia.org/wiki/SELinux SELinux]<br />
}}<br />
<br />
==Cambiar nombre de host==<br />
Configura el nombre de tu host con el siguiente comando, ya que actualmente aún no funciona desde la Configuración del escritorio:<br />
sudo hostnamectl set-hostname <new name><br />
Reinicia y se efectuará el cambio del nombre del host.<br />
<br />
==Ajustar el temporizador para las actualizaciones==<br />
Dependiendo de tu caso de uso diario, es posible que el temporizador no active con éxito el proceso de actualización automática incluso con persistente = true porque agrega un retraso aleatorio en cada inicio con RandomizedDelaySec.<br />
<br />
Si deseas actualizaciones diarias automáticas para su sistema, es posible que necesites ajustar el retraso mencionado, para lo cual puedes emplear el siguiente comando como root o con sudo:<br />
sudo systemctl edit transactional-update.time<br />
Agrega las siguientes líneas para crear un fichero override.conf (ubicado en /etc/systemd/system/transactional-update.timer.d/override.conf).<br />
<syntaxhighlight lang="ini"><br />
[Timer]<br />
RandomizedDelaySec=10m<br />
</syntaxhighlight><br />
El ejemplo anterior es para un retraso arbitrario de 10 minutos (el valor por defecto son 2h). Ajusta el tiempo para tus necesidades de uso.<br />
<br />
==Imprimir en Kalpa==<br />
Debido a que openSUSE Kalpa está vinculado actualmente a openSUSE Tumbleweed, sufrimos el mismo error que Tumbleweed cuando se trata de configurar impresoras en el escritorio Plasma. YaST no está presente en openSUSE Kalpa, por lo que tampoco es posible hacerlo utilizando YaST.<br />
<br />
Para configurar tus impresoras:<br />
<br />
* Abras Firefox (u otro navegador web) y navegue hasta http://localhost:631<br />
* Haz clic en `Administración` en la barra superior<br />
* Haz clic en `Agregar impresora`<br />
* El usuario será `root` y deberás ingresar tu contraseña de root<br />
* Ahora deberías poder configurar sus impresoras.<br />
<br />
Consulta: https://bugzilla.opensuse.org/show_bug.cgi?id=1192461 y https://bugzilla.opensuse.org/show_bug.cgi?id=1212995 para obtener más información.<br />
<br />
==No funciona Steam Proton, Bottles, WINE o Lutris desde los flatpaks==<br />
Si tienes problemas al utilizar WINE y programas basados en WINE en flatpaks, es probable que se deba a un problema de SELinux, y puedes comprobarlo ejecutando:<br />
sudo getsebool selinuxuser_execmod<br />
Si eso devuelve ''selinuxuser_execmod --> disabled'', tendrás que activarlo. Esto se puede hacer temporalmente (se reinicia en el próximo arranque) con:<br />
sudo setsebool selinuxuser_execmod 1<br />
o puedes hacerlo persistente con:<br />
sudo setsebool -P selinuxuser_execmod 1<br />
El equipo de seguridad de openSUSE está revisando esta política predeterminada y tú la habilitas bajo su propio riesgo. Consulta https://bugzilla.opensuse.org/show_bug.cgi?id=1206292 para obtener más información.<br />
<br />
==Pérdida de audio de Team Fortress 2==<br />
Si tienes problemas de audio con Team Fortress 2, es probable que se deba a un problema de SELinux y puedes comprobarlo ejecutando:<br />
sudo getsebool selinuxuser_execheap<br />
Si eso devuelve 'selinuxuser_execheap --> deshabilitado', deberás habilitarlo. Esto se puede hacer temporalmente (se reinicia en el próximo arranque) con<br />
sudo setsebool selinuxuser_execheap 1<br />
O se puede configurar como Persistente con:<br />
sudo setsebool -P selinuxuser_execheap 1<br />
<br />
==El Emulador Android Studio no funciona desde flatpak==<br />
Si tienes problemas al utilizar el emulador de Android Studio en flatpaks, es probable que se deba a un problema de SELinux y puedes comprobarlo ejecutando:<br />
sudo getsebool selinuxuser_execstack<br />
Si eso devuelve 'selinuxuser_execstack --> deshabilitado', deberás habilitarlo. Esto se puede hacer temporalmente (se reinicia en el próximo arranque) con:<br />
sudo setsebool selinuxuser_execstack 1<br />
O se puede configurar como Persistente con:<br />
sudo setsebool -P selinuxuser_execstack 1<br />
<br />
El equipo de seguridad de openSUSE está revisando esta política predeterminada y tú la habilitas bajo tu propio riesgo. Consulte https://bugzilla.opensuse.org/show_bug.cgi?id=1206789 para obtener más información.<br />
[[Categoría: MicroOS]]</div>Karlggesthttps://es.opensuse.org/index.php?title=Portal:Kalpa&diff=28316Portal:Kalpa2023-10-30T12:55:29Z<p>Karlggest: </p>
<hr />
<div>__NOTOC__<br />
<br />
<div class="row"><br />
<br />
<div class="col-md-12"><br />
{{Cuadro de texto|<br />
|alineado=left |<br />
|tamano=16 |<br />
|titulo= |<br />
|seccion=Portal:{{PAGENAME}}/Intro |<br />
}}<br />
</div><br />
<br />
</div><br />
----<br />
<div class="clearfix"></div><br />
<br />
<div class="row"><br />
<br />
<div class="col"><br />
{{tarxeta de texto sin pie|<br />
|alineado=left|<br />
|tamano=7|<br />
|titulo=Características|<br />
|seccion=Portal:{{PAGENAME}}/Características<br />
}}<br />
</div><br />
<div class="col"><br />
{{tarxeta de texto sin pie|<br />
|alineado=right|<br />
|tamano=4|<br />
|titulo=Navegación|<br />
|seccion=Portal:{{PAGENAME}}/Navegación|<br />
}}<br />
</div><br />
<br />
</div><br />
<div class="clearfix"></div><br />
----<br />
<div class="row"><br />
<br />
<div class="col-md-12"><br />
{{Cuadro de texto|<br />
|alineado=left |<br />
|tamano=16 |<br />
|titulo=Descarga e instalación |<br />
|seccion=Portal:{{PAGENAME}}/Descarga e instalación |<br />
}}<br />
</div><br />
<br />
</div><br />
----<br />
<div class="clearfix"></div><br />
<div class="row"><br />
<br />
<div class="col-md-12"><br />
{{Cuadro de texto|<br />
|alineado=left |<br />
|tamano=16 |<br />
|titulo=Actualización y configuración |<br />
|seccion=Portal:{{PAGENAME}}/Actualización y configuración |<br />
}}<br />
</div><br />
<br />
</div><br />
----<br />
<div class="clearfix"></div><br />
<div class="row"><br />
<br />
<div class="col-md-12"><br />
{{Cuadro de texto|<br />
|alineado=left |<br />
|tamano=16 |<br />
|titulo=Instalación de programas |<br />
|seccion=Portal:{{PAGENAME}}/Instalación de programas |<br />
}}<br />
</div><br />
<br />
</div><br />
----<br />
<div class="clearfix"></div><br />
<br />
<br />
[[Categoría: MicroOS]]<br />
[[Categoría: Portales]]</div>Karlggesthttps://es.opensuse.org/index.php?title=Portal:Kalpa&diff=28313Portal:Kalpa2023-10-30T12:55:16Z<p>Karlggest: </p>
<hr />
<div>__NOTOC__<br />
<br />
<div class="row"><br />
<br />
<div class="col-md-12"><br />
{{Cuadro de texto|<br />
|alineado=left |<br />
|tamano=16 |<br />
|titulo= |<br />
|seccion=Portal:{{PAGENAME}}/Intro |<br />
}}<br />
</div><br />
<br />
</div><br />
----<br />
<div class="clearfix"></div><br />
<br />
<div class="row"><br />
<br />
<div class="col"><br />
{{tarxeta de texto sin pie|<br />
|alineado=left|<br />
|tamano=7|<br />
|titulo=Características|<br />
|seccion=Portal:{{PAGENAME}}/Características<br />
}}<br />
</div><br />
<div class="col"><br />
{{tarxeta de texto sin pie|<br />
|alineado=right|<br />
|tamano=5|<br />
|titulo=Navegación|<br />
|seccion=Portal:{{PAGENAME}}/Navegación|<br />
}}<br />
</div><br />
<br />
</div><br />
<div class="clearfix"></div><br />
----<br />
<div class="row"><br />
<br />
<div class="col-md-12"><br />
{{Cuadro de texto|<br />
|alineado=left |<br />
|tamano=16 |<br />
|titulo=Descarga e instalación |<br />
|seccion=Portal:{{PAGENAME}}/Descarga e instalación |<br />
}}<br />
</div><br />
<br />
</div><br />
----<br />
<div class="clearfix"></div><br />
<div class="row"><br />
<br />
<div class="col-md-12"><br />
{{Cuadro de texto|<br />
|alineado=left |<br />
|tamano=16 |<br />
|titulo=Actualización y configuración |<br />
|seccion=Portal:{{PAGENAME}}/Actualización y configuración |<br />
}}<br />
</div><br />
<br />
</div><br />
----<br />
<div class="clearfix"></div><br />
<div class="row"><br />
<br />
<div class="col-md-12"><br />
{{Cuadro de texto|<br />
|alineado=left |<br />
|tamano=16 |<br />
|titulo=Instalación de programas |<br />
|seccion=Portal:{{PAGENAME}}/Instalación de programas |<br />
}}<br />
</div><br />
<br />
</div><br />
----<br />
<div class="clearfix"></div><br />
<br />
<br />
[[Categoría: MicroOS]]<br />
[[Categoría: Portales]]</div>Karlggesthttps://es.opensuse.org/index.php?title=Portal:Kalpa/Navegaci%C3%B3n&diff=28310Portal:Kalpa/Navegación2023-10-30T12:54:33Z<p>Karlggest: </p>
<hr />
<div>* [[Portal:MicroOS|MicroOS]] <br />
* [[SDB:Actualizaciones transaccionales|Actualizaciones transaccionales]]<br />
* [[SDB:Solución de problemas conocidos con MicroOS Desktop|Problemas conocidos en Kalpa]]<br />
<br />
== Informe de errores ==<br />
Por favor, usa el siguiente link para informar de errores: [https://bugzilla.opensuse.org/enter_bug.cgi?product=openSUSE+Aeon&format=guided Informa de un error en openSUSE Aeon]<br />
<br />
Por favor, echa un vistazo a [[openSUSE:Envío de informes de error|Envío de informes de error]] para más información sobre el informe de errores.<br />
<br />
== Dónde preguntar ==<br />
openSUSE Aeon tiene varios lugares donde charlar sobre el proyecto.<br />
<br />
* ''Telegram'': https://t.me/openSUSE_kalpa<br />
* ''Matrix'': https://matrix.to/#/#kalpa:opensuse.org<br />
* ''Discord'': https://discord.gg/openSUSE<br />
<br />
Todos estos canales están conectados a través de Matrix, por lo que al enviar tus comentarios en uno se verá en los otros dos.<br />
<br />
Para noticias "oficiales" y actualizadas sobre el desarrollo de Kalpa<br />
<br />
* ''Mastodon'': https://fosstodon.org/@kalpa</div>Karlggesthttps://es.opensuse.org/index.php?title=Portal:Kalpa/Navegaci%C3%B3n&diff=28307Portal:Kalpa/Navegación2023-10-30T12:51:54Z<p>Karlggest: </p>
<hr />
<div>* [[Portal:MicroOS|MicroOS]] <br />
* [[SDB:Actualizaciones transaccionales|Actualizaciones transaccionales]]<br />
* [[SDB:Solución de problemas conocidos con MicroOS Desktop|Problemas conocidos en Kalpa]]<br />
<br />
== Informe de errores ==<br />
Por favor, usa el siguiente link para informar de errores: [https://bugzilla.opensuse.org/enter_bug.cgi?product=openSUSE+Aeon&format=guided Informa de un error en openSUSE Aeon]<br />
<br />
Por favor, echa un vistazo a [[openSUSE:Envío de informes de error|Envío de informes de error]] para más información sobre el informe de errores.<br />
<br />
== Dónde preguntar ==<br />
openSUSE Aeon tiene varios lugares donde charlar sobre el proyecto.<br />
<br />
* ''Telegram'': https://t.me/openSUSE_Aeon<br />
* ''Matrix'': https://matrix.to/#/#aeon:opensuse.org<br />
* ''Discord'': https://discord.gg/opensuse #aeon-kalpa channel<br />
<br />
Todos estos canales están conectados a través de Matrix, por lo que al enviar tus comentarios en uno se verá en los otros dos.</div>Karlggesthttps://es.opensuse.org/index.php?title=Portal:Aeon/Navegaci%C3%B3n&diff=28304Portal:Aeon/Navegación2023-10-30T12:51:20Z<p>Karlggest: </p>
<hr />
<div>* [[Portal:MicroOS|MicroOS]] <br />
* [[SDB:Actualizaciones transaccionales|Actualizaciones transaccionales]]<br />
* [[SDB:Solución de problemas conocidos con MicroOS Desktop|Problemas conocidos en Aeon]]<br />
<br />
== Informe de errores ==<br />
Por favor, usa el siguiente link para informar de errores: [https://bugzilla.opensuse.org/enter_bug.cgi?product=openSUSE+Aeon&format=guided Informa de un error en openSUSE Aeon]<br />
<br />
Por favor, echa un vistazo a [[openSUSE:Envío de informes de error|Envío de informes de error]] para más información sobre el informe de errores.<br />
<br />
== Dónde preguntar ==<br />
openSUSE Aeon tiene varios lugares donde charlar sobre el proyecto.<br />
<br />
* ''Telegram'': https://t.me/openSUSE_Aeon<br />
* ''Matrix'': https://matrix.to/#/#aeon:opensuse.org<br />
* ''Discord'': https://discord.gg/opensuse #aeon-kalpa channel<br />
<br />
Todos estos canales están conectados a través de Matrix, por lo que al enviar tus comentarios en uno se verá en los otros dos.</div>Karlggesthttps://es.opensuse.org/index.php?title=Plantilla:Tarxeta_de_texto_sin_pie&diff=28301Plantilla:Tarxeta de texto sin pie2023-10-30T12:50:55Z<p>Karlggest: </p>
<hr />
<div><div class="col-md-{{{tamano}}}" style="float:{{{alineado}}}"><br />
<br />
<div class="card-header"><br />
== {{{titulo}}} ==<br />
</div><br />
<br />
<div class="card-body"><br />
{{#if:{{{seccion|}}}|{{:{{{seccion}}} }} |{{{texto}}} }}<br />
</div><br />
<br />
<noinclude><br />
{{{{PAGENAME}}/doc}}<br />
[[Category:Plantillas de cuadros de información]]<br />
</noinclude></div>Karlggesthttps://es.opensuse.org/index.php?title=Plantilla:Tarxeta_de_texto_sin_pie&diff=28298Plantilla:Tarxeta de texto sin pie2023-10-30T12:50:23Z<p>Karlggest: /* {{{titulo}}} */</p>
<hr />
<div><div class="col-md-{{{tamano}}}" style="float:{{{alineado}}}"><br />
<br />
<div class="card-header"><br />
== {{{titulo}}} ==<br />
</div><br />
<br />
<div class="card-body"><br />
{{#if:{{{seccion|}}}|{{:{{{seccion}}} }} |{{{texto}}} }}<br />
</div><br />
<br />
== Informe de errores ==<br />
Por favor, usa el siguiente link para informar de errores: [https://bugzilla.opensuse.org/enter_bug.cgi?product=openSUSE+Aeon&format=guided Informa de un error en openSUSE Aeon]<br />
<br />
Por favor, echa un vistazo a [[openSUSE:Envío de informes de error|Envío de informes de error]] para más información sobre el informe de errores.<br />
<br />
== Dónde preguntar ==<br />
openSUSE Aeon tiene varios lugares donde charlar sobre el proyecto.<br />
<br />
* ''Telegram'': https://t.me/openSUSE_Aeon<br />
* ''Matrix'': https://matrix.to/#/#aeon:opensuse.org<br />
* ''Discord'': https://discord.gg/opensuse #aeon-kalpa channel<br />
<br />
Todos estos canales están conectados a través de Matrix, por lo que al enviar tus comentarios en uno se verá en los otros dos.<br />
<br />
<noinclude><br />
{{{{PAGENAME}}/doc}}<br />
[[Category:Plantillas de cuadros de información]]<br />
</noinclude></div>Karlggesthttps://es.opensuse.org/index.php?title=Archivo:Slowroll-vs-tumbleweed-updates.svg&diff=28295Archivo:Slowroll-vs-tumbleweed-updates.svg2023-10-30T12:41:58Z<p>Karlggest: Karlggest subió una nueva versión de Archivo:Slowroll-vs-tumbleweed-updates.svg</p>
<hr />
<div></div>Karlggesthttps://es.opensuse.org/index.php?title=openSUSE:Slowroll&diff=28292openSUSE:Slowroll2023-10-30T12:40:53Z<p>Karlggest: </p>
<hr />
<div>[[Archivo:OpenSUSE Slowroll green logo.svg|160x76px|links|Logo of openSUSE Slowroll]]<br />
== Qué es ==<br />
Slowroll es una nueva distribución de 2023 basada en Tumbleweed, pero de ciclo más lento. Con actualizaciones cada uno o dos meses con correcciones de errores y correcciones CVE a medida que aparecen.<br />
[[Archivo:Slowroll-vs-tumbleweed-updates.svg|thumb]]<br />
<br />
== Uso ==<br />
Para la instalación inicial, puedes utilizar el DVD ISO de https://download.opensuse.org/repositories/openSUSE:/ALP:/Experimental:/Slowroll/base/iso/ o usa NET iso con un parámetro de arranque de install=https://cdn.opensuse.org/repositories/openSUSE:/ALP:/Experimental:/Slowroll/base/repo/oss/<br />
<br />
Para usar en Leap o en un Tumbleweed anterior, reemplaza los repositorios:<br />
<br />
rm /etc/zypp/repos.d/*<br />
zypper ar https://cdn.opensuse.org/repositories/openSUSE:/ALP:/Experimental:/Slowroll/base/repo/oss/ base-oss<br />
zypper ar https://cdn.opensuse.org/repositories/openSUSE:/ALP:/Experimental:/Slowroll/base/repo/non-oss/ base-non-oss<br />
zypper ar -p 80 https://cdn.opensuse.org/repositories/openSUSE:/ALP:/Experimental:/Slowroll/standard/ update<br />
zypper ar --disable https://cdn.opensuse.org/repositories/openSUSE:/ALP:/Experimental:/Slowroll/base/repo/src-oss/ base-src-oss<br />
zypper ar http://codecs.opensuse.org/openh264/openSUSE_Tumbleweed/ h264<br />
zypper ar -p 70 http://ftp.gwdg.de/pub/linux/misc/packman/suse/openSUSE_Slowroll/Essentials/ packman<br />
<br />
No recomendamos usar repositorios de desarrollo encima, a menos que estén compilados específicamente para Slowroll. Tumbleweed puede funcionar, pero también puede romperse ocasionalmente.<br />
<br />
== Desarrollo ==<br />
bmwiedemann se encargó del diseño y del scripting.<br />
<br />
El desarrollo tiene lugar en https://build.opensuse.org/project/show/openSUSE:ALP:Experimental:Slowroll<br />
con el uso de https://github.com/bmwiedemann/slowroll-tools<br />
<br />
La mayoría de las actualizaciones deben enviarse a Factory y migrarán automáticamente a Slowroll después de su aceptación. Asegúrate de mencionar las correcciones CVE relevantes y las referencias de boo# en los archivos .changes para acelerar la migración.<br />
<br />
Los envíos directos sólo deberían ser necesarios para backports de correcciones urgentes que requieren paquetes principales actualizados en Factory (que son demasiado riesgosos para actualizarlos rápidamente).<br />
<br />
{{IW|openSUSE:Slowroll}}</div>Karlggesthttps://es.opensuse.org/index.php?title=Archivo:Slowroll-vs-tumbleweed-updates.svg&diff=28289Archivo:Slowroll-vs-tumbleweed-updates.svg2023-10-30T12:39:59Z<p>Karlggest: </p>
<hr />
<div></div>Karlggesthttps://es.opensuse.org/index.php?title=Bienvenidos_a_openSUSE.org&diff=28286Bienvenidos a openSUSE.org2023-10-30T12:36:25Z<p>Karlggest: /* Prueba openSUSE */</p>
<hr />
<div>__NOTOC__<br />
<span class="plainlinks">[http://counter.opensuse.org/link/ https://counter.opensuse.org/wide.png]</span><br />
<div class="row"><br />
{{Tarxeta de texto|<br />
|titulo=Bienvenidos/as al proyecto openSUSE|<br />
|tamano=12|<br />
|alineado=left|<br />
|seccion=Portal:Proyecto openSUSE/Intro|<br />
|pie=Portal:Proyecto openSUSE|<br />
|texto_pie=Más información sobre el proyecto...|<br />
}}<br />
</div><br />
<br />
==Prueba openSUSE==<br />
<br />
<center><gallery perrow="5" widths="225" heights="169" caption="Distribuciones de openSUSE"><br />
Imagen:Tumbleweed-black-green.png|Tumbleweed|link=[[Portal:Tumbleweed]]<br />
Imagen:OpenSUSE Slowroll green logo.svg|Slowroll|link=[[openSUSE:Slowroll]]<br />
Imagen:Leap155.png|Leap 15.5|link=[[Portal:15.5]]<br />
Imagen:Microos-inline250.png|MicroOS|link=[[Portal:MicroOS]]<br />
Imagen:Alplogo.png|ALP|link=[[Portal:ALP]]<br />
</gallery><br />
<gallery perrow="3" widths="225" heights="169" caption="Derivadas de MicroOS"><br />
Imagen:Leap-micro-square-hicolor.png|Leap Micro|link=<br />
Imagen:aeon.jpg |Aeon|link=[[Portal:Aeon]]<br />
Imagen:kalpa.png |Kalpa|link=[[Portal:Kalpa]]<br />
</gallery><br />
</center><br />
<br />
==Aprende==<br />
{{Tarxeta de texto|<br />
|titulo=|<br />
|tamano=12|<br />
|alineado=right|<br />
|seccion=Portal:Aprendices/Intro|<br />
|pie=Portal:Aprendices|<br />
|texto_pie=Ir al portal para aprendices...|<br />
}}<br />
<br />
==Artículos de Soporte y Aprendizaje más populares==<br />
<div class="card-header"></div><br />
<br />
<div class="card-body"><br />
<div style="column-count: 3; column-width: 150px;"><br />
<DynamicPageList><br />
namespace=SDB<br />
category:SDB:Instalación<br />
category:SDB:Aplicaciones<br />
category:SDB:Configuración<br />
category:SDB:CÓMO<br />
category:SDB:Guía_de_principiantes<br />
category:SDB:Hardware<br />
stablepages=only<br />
count=12<br />
shownamespace=false<br />
ordermethod=popularity<br />
mode=none<br />
</DynamicPageList><br />
</div><br />
</div><br />
<br />
==Conoce los Proyectos de openSUSE==<br />
<br />
<div class="row"><br />
<br />
<div class="col"><br />
{{Tarxeta de texto básica|<br />
|titulo=Wiki|<br />
<!--|tamano=12|--><br />
|logo=Archivo:Icon-distribution250.png|<br />
|alineado=center|<br />
|seccion=La '''wiki de openSUSE''' es la fuente de información sobre el proyecto y la distribución openSUSE.|<br />
|pie=Portal:Proyectos/wiki|<br />
|texto_pie=Más información sobre la wiki...|<br />
}}<br />
</div><br />
<div class="col"><br />
{{Tarxeta de texto básica|<br />
|titulo=OpenQA|<br />
<!--|tamano=12|--><br />
|logo=Archivo:Openqa-new250.png|<br />
|alineado=center|<br />
|seccion='''openQA''' es el servicio de pruebas del sistema operativo totalmente automatizado de openSUSE <br />
que puede encontrarse en http://openqa.opensuse.org/. Puede encontrar más información en http://open.qa/.|<br />
|pie=Portal:Proyectos/OpenQA|<br />
|texto_pie=Más información sobre OpenQA...|<br />
}}<br />
</div><br />
<br />
<div class="col"><br />
{{Tarxeta de texto básica|<br />
|titulo=YaST|<br />
<!--|tamano=12|--><br />
|logo=Archivo:YaST logo-250.png|<br />
|alineado=left|<br />
|seccion='''YaST''' es la herramienta de instalación y administración del sistema más potente en el entorno Linux, además de ser un proyecto de código abierto.|<br />
|pie=Portal:Proyectos/YaST|<br />
|texto_pie=Más información sobre YaST...|<br />
}}<br />
</div><br />
<div class="clearfix"></div><br />
<div class="col"><br />
{{Tarxeta de texto básica|<br />
|titulo=Kiwi|<br />
<!--|tamano=12|--><br />
|logo=Archivo:Kiwi-new250.png|<br />
|alineado=right|<br />
|seccion='''KIWI''' es una aplicación que permite crear una gran variedad de conjuntos de imágenes para plataformas de hardware compatibles con Linux, así como para sistemas de virtualización como '''QEMU''', '''Xen''' y '''VMware'''.|<br />
|pie=Portal:Proyectos/Kiwi|<br />
|texto_pie=Más información sobre Kiwi...|<br />
}}<br />
</div><br />
</div><br />
<div class="clearfix"></div><br />
<br />
==Portales más populares==<br />
<div class="card-header"></div><br />
<div class="card-body"><br />
<div style="column-count: 6; column-width: 150px;"><br />
<DynamicPageList><br />
namespace=Portal<br />
category=Portales<br />
stablepages=only<br />
count=48<br />
shownamespace=false<br />
ordermethod=popularity<br />
mode=none<br />
</DynamicPageList><br />
</div><br />
</div><br />
<br />
<!--fin doc--></div>Karlggesthttps://es.opensuse.org/index.php?title=Archivo:OpenSUSE_Slowroll_green_logo.svg&diff=28283Archivo:OpenSUSE Slowroll green logo.svg2023-10-30T12:35:44Z<p>Karlggest: </p>
<hr />
<div></div>Karlggesthttps://es.opensuse.org/index.php?title=openSUSE:Slowroll&diff=28280openSUSE:Slowroll2023-10-29T19:08:23Z<p>Karlggest: </p>
<hr />
<div>== Qué es ==<br />
Slowroll es una nueva distribución de 2023 basada en Tumbleweed, pero de ciclo más lento. Con actualizaciones cada uno o dos meses con correcciones de errores y correcciones CVE a medida que aparecen<br />
<br />
== Uso ==<br />
Para la instalación inicial, puedes utilizar el DVD ISO de https://download.opensuse.org/repositories/openSUSE:/ALP:/Experimental:/Slowroll/base/iso/ o usa NET iso con un parámetro de arranque de install=https://cdn.opensuse.org/repositories/openSUSE:/ALP:/Experimental:/Slowroll/base/repo/oss/<br />
<br />
Para usar en Leap o en un Tumbleweed anterior, reemplaza los repositorios:<br />
<br />
rm /etc/zypp/repos.d/*<br />
zypper ar https://cdn.opensuse.org/repositories/openSUSE:/ALP:/Experimental:/Slowroll/base/repo/oss/ base-oss<br />
zypper ar https://cdn.opensuse.org/repositories/openSUSE:/ALP:/Experimental:/Slowroll/base/repo/non-oss/ base-non-oss<br />
zypper ar -p 80 https://cdn.opensuse.org/repositories/openSUSE:/ALP:/Experimental:/Slowroll/standard/ update<br />
zypper ar --disable https://cdn.opensuse.org/repositories/openSUSE:/ALP:/Experimental:/Slowroll/base/repo/src-oss/ base-src-oss<br />
zypper ar http://codecs.opensuse.org/openh264/openSUSE_Tumbleweed/ h264<br />
zypper ar -p 70 http://ftp.gwdg.de/pub/linux/misc/packman/suse/openSUSE_Slowroll/Essentials/ packman<br />
<br />
No recomendamos usar repositorios de desarrollo encima, a menos que estén compilados específicamente para Slowroll. Tumbleweed puede funcionar, pero también puede romperse ocasionalmente.<br />
<br />
== Desarrollo ==<br />
bmwiedemann se encargó del diseño y del scripting.<br />
<br />
El desarrollo tiene lugar en https://build.opensuse.org/project/show/openSUSE:ALP:Experimental:Slowroll<br />
con el uso de https://github.com/bmwiedemann/slowroll-tools<br />
<br />
La mayoría de las actualizaciones deben enviarse a Factory y migrarán automáticamente a Slowroll después de su aceptación. Asegúrate de mencionar las correcciones CVE relevantes y las referencias de boo# en los archivos .changes para acelerar la migración.<br />
<br />
Los envíos directos sólo deberían ser necesarios para backports de correcciones urgentes que requieren paquetes principales actualizados en Factory (que son demasiado riesgosos para actualizarlos rápidamente).<br />
<br />
{{IW|openSUSE:Slowroll}}</div>Karlggesthttps://es.opensuse.org/index.php?title=openSUSE:Slowroll&diff=28277openSUSE:Slowroll2023-10-29T18:52:02Z<p>Karlggest: </p>
<hr />
<div>[[en:File:OpenSUSE Slowroll green logo.svg|160x76px|links|Logo of openSUSE Slowroll]]<br />
[[en:File:OpenSUSE_Slowroll_green_logo.svg]]<br />
== Qué es ==<br />
Slowroll es una nueva distribución de 2023 basada en Tumbleweed, pero de ciclo más lento. Con actualizaciones cada uno o dos meses con correcciones de errores y correcciones CVE a medida que aparecen<br />
<br />
== Uso ==<br />
Para la instalación inicial, puedes utilizar el DVD ISO de https://download.opensuse.org/repositories/openSUSE:/ALP:/Experimental:/Slowroll/base/iso/ o usa NET iso con un parámetro de arranque de install=https://cdn.opensuse.org/repositories/openSUSE:/ALP:/Experimental:/Slowroll/base/repo/oss/<br />
<br />
Para usar en Leap o en un Tumbleweed anterior, reemplaza los repositorios:<br />
<br />
rm /etc/zypp/repos.d/*<br />
zypper ar https://cdn.opensuse.org/repositories/openSUSE:/ALP:/Experimental:/Slowroll/base/repo/oss/ base-oss<br />
zypper ar https://cdn.opensuse.org/repositories/openSUSE:/ALP:/Experimental:/Slowroll/base/repo/non-oss/ base-non-oss<br />
zypper ar -p 80 https://cdn.opensuse.org/repositories/openSUSE:/ALP:/Experimental:/Slowroll/standard/ update<br />
zypper ar --disable https://cdn.opensuse.org/repositories/openSUSE:/ALP:/Experimental:/Slowroll/base/repo/src-oss/ base-src-oss<br />
zypper ar http://codecs.opensuse.org/openh264/openSUSE_Tumbleweed/ h264<br />
zypper ar -p 70 http://ftp.gwdg.de/pub/linux/misc/packman/suse/openSUSE_Slowroll/Essentials/ packman<br />
<br />
No recomendamos usar repositorios de desarrollo encima, a menos que estén compilados específicamente para Slowroll. Tumbleweed puede funcionar, pero también puede romperse ocasionalmente.<br />
<br />
== Desarrollo ==<br />
bmwiedemann se encargó del diseño y del scripting.<br />
<br />
El desarrollo tiene lugar en https://build.opensuse.org/project/show/openSUSE:ALP:Experimental:Slowroll<br />
con el uso de https://github.com/bmwiedemann/slowroll-tools<br />
<br />
La mayoría de las actualizaciones deben enviarse a Factory y migrarán automáticamente a Slowroll después de su aceptación. Asegúrate de mencionar las correcciones CVE relevantes y las referencias de boo# en los archivos .changes para acelerar la migración.<br />
<br />
Los envíos directos sólo deberían ser necesarios para backports de correcciones urgentes que requieren paquetes principales actualizados en Factory (que son demasiado riesgosos para actualizarlos rápidamente).<br />
<br />
{{IW|openSUSE:Slowroll}}</div>Karlggesthttps://es.opensuse.org/index.php?title=openSUSE:Slowroll&diff=28274openSUSE:Slowroll2023-10-29T18:45:07Z<p>Karlggest: /* Qué */</p>
<hr />
<div>== Qué es ==<br />
Slowroll es una nueva distribución de 2023 basada en Tumbleweed, pero de ciclo más lento. Con actualizaciones cada uno o dos meses con correcciones de errores y correcciones CVE a medida que aparecen<br />
<br />
== Uso ==<br />
Para la instalación inicial, puedes utilizar el DVD ISO de https://download.opensuse.org/repositories/openSUSE:/ALP:/Experimental:/Slowroll/base/iso/ o usa NET iso con un parámetro de arranque de install=https://cdn.opensuse.org/repositories/openSUSE:/ALP:/Experimental:/Slowroll/base/repo/oss/<br />
<br />
Para usar en Leap o en un Tumbleweed anterior, reemplaza los repositorios:<br />
<br />
rm /etc/zypp/repos.d/*<br />
zypper ar https://cdn.opensuse.org/repositories/openSUSE:/ALP:/Experimental:/Slowroll/base/repo/oss/ base-oss<br />
zypper ar https://cdn.opensuse.org/repositories/openSUSE:/ALP:/Experimental:/Slowroll/base/repo/non-oss/ base-non-oss<br />
zypper ar -p 80 https://cdn.opensuse.org/repositories/openSUSE:/ALP:/Experimental:/Slowroll/standard/ update<br />
zypper ar --disable https://cdn.opensuse.org/repositories/openSUSE:/ALP:/Experimental:/Slowroll/base/repo/src-oss/ base-src-oss<br />
zypper ar http://codecs.opensuse.org/openh264/openSUSE_Tumbleweed/ h264<br />
zypper ar -p 70 http://ftp.gwdg.de/pub/linux/misc/packman/suse/openSUSE_Slowroll/Essentials/ packman<br />
<br />
No recomendamos usar repositorios de desarrollo encima, a menos que estén compilados específicamente para Slowroll. Tumbleweed puede funcionar, pero también puede romperse ocasionalmente.<br />
<br />
== Desarrollo ==<br />
bmwiedemann se encargó del diseño y del scripting.<br />
<br />
El desarrollo tiene lugar en https://build.opensuse.org/project/show/openSUSE:ALP:Experimental:Slowroll<br />
con el uso de https://github.com/bmwiedemann/slowroll-tools<br />
<br />
La mayoría de las actualizaciones deben enviarse a Factory y migrarán automáticamente a Slowroll después de su aceptación. Asegúrate de mencionar las correcciones CVE relevantes y las referencias de boo# en los archivos .changes para acelerar la migración.<br />
<br />
Los envíos directos sólo deberían ser necesarios para backports de correcciones urgentes que requieren paquetes principales actualizados en Factory (que son demasiado riesgosos para actualizarlos rápidamente).<br />
<br />
{{IW|openSUSE:Slowroll}}</div>Karlggesthttps://es.opensuse.org/index.php?title=Plantilla:Cuadro_de_navegaci%C3%B3n_de_lanzamientos&diff=28271Plantilla:Cuadro de navegación de lanzamientos2023-10-29T18:43:47Z<p>Karlggest: </p>
<hr />
<div>* '''Versión actual estable:'''<br>[[Portal:Versión actual|openSUSE {{Versión actual}}]]{{Badge|success|Versión estable}}<br />
* '''Versión anterior estable:'''<br>[[Portal:Versión anterior|openSUSE {{Versión anterior}}]]{{Badge|danger|Cerca del fin de vida}}<br />
* '''Versión siguiente estable:'''<br>[[Portal:Versión siguiente|openSUSE {{Versión siguiente}}]]{{Badge|warning|alpha}}<br />
* '''Versión con actualizaciones continuas (''rolling''):'''<br><br />
** [[Portal:Tumbleweed|Tumbleweed]]{{Badge|success|rolling}}<br />
** [[openSUSE:Slowroll|Slowroll]]{{Badge|success|rolling}}<br />
* '''[[Derivados|Versiones derivadas]]:'''<br>Educación, GNOME y otras<br />
<div class="center">http://counter.opensuse.org/small.png</div><!--<br />
<noinclude>[[Categoría:Plantillas de navegación]]</noinclude></div>Karlggesthttps://es.opensuse.org/index.php?title=Bienvenidos_a_openSUSE.org&diff=28268Bienvenidos a openSUSE.org2023-10-29T18:40:16Z<p>Karlggest: /* Prueba openSUSE */</p>
<hr />
<div>__NOTOC__<br />
<span class="plainlinks">[http://counter.opensuse.org/link/ https://counter.opensuse.org/wide.png]</span><br />
<div class="row"><br />
{{Tarxeta de texto|<br />
|titulo=Bienvenidos/as al proyecto openSUSE|<br />
|tamano=12|<br />
|alineado=left|<br />
|seccion=Portal:Proyecto openSUSE/Intro|<br />
|pie=Portal:Proyecto openSUSE|<br />
|texto_pie=Más información sobre el proyecto...|<br />
}}<br />
</div><br />
<br />
==Prueba openSUSE==<br />
<br />
<center><gallery perrow="5" widths="225" heights="169" caption="Distribuciones de openSUSE"><br />
Imagen:Tumbleweed-black-green.png|Tumbleweed|link=[[Portal:Tumbleweed]]<br />
Imagen:Tumbleweed-black-green.png|Slowroll|link=[[openSUSE:Slowroll]]<br />
Imagen:Leap155.png|Leap 15.5|link=[[Portal:15.5]]<br />
Imagen:Microos-inline250.png|MicroOS|link=[[Portal:MicroOS]]<br />
Imagen:Alplogo.png|ALP|link=[[Portal:ALP]]<br />
</gallery><br />
<gallery perrow="3" widths="225" heights="169" caption="Derivadas de MicroOS"><br />
Imagen:Leap-micro-square-hicolor.png|Leap Micro|link=<br />
Imagen:aeon.jpg |Aeon|link=[[Portal:Aeon]]<br />
Imagen:kalpa.png |Kalpa|link=[[Portal:Kalpa]]<br />
</gallery><br />
</center><br />
<br />
==Aprende==<br />
{{Tarxeta de texto|<br />
|titulo=|<br />
|tamano=12|<br />
|alineado=right|<br />
|seccion=Portal:Aprendices/Intro|<br />
|pie=Portal:Aprendices|<br />
|texto_pie=Ir al portal para aprendices...|<br />
}}<br />
<br />
==Artículos de Soporte y Aprendizaje más populares==<br />
<div class="card-header"></div><br />
<br />
<div class="card-body"><br />
<div style="column-count: 3; column-width: 150px;"><br />
<DynamicPageList><br />
namespace=SDB<br />
category:SDB:Instalación<br />
category:SDB:Aplicaciones<br />
category:SDB:Configuración<br />
category:SDB:CÓMO<br />
category:SDB:Guía_de_principiantes<br />
category:SDB:Hardware<br />
stablepages=only<br />
count=12<br />
shownamespace=false<br />
ordermethod=popularity<br />
mode=none<br />
</DynamicPageList><br />
</div><br />
</div><br />
<br />
==Conoce los Proyectos de openSUSE==<br />
<br />
<div class="row"><br />
<br />
<div class="col"><br />
{{Tarxeta de texto básica|<br />
|titulo=Wiki|<br />
<!--|tamano=12|--><br />
|logo=Archivo:Icon-distribution250.png|<br />
|alineado=center|<br />
|seccion=La '''wiki de openSUSE''' es la fuente de información sobre el proyecto y la distribución openSUSE.|<br />
|pie=Portal:Proyectos/wiki|<br />
|texto_pie=Más información sobre la wiki...|<br />
}}<br />
</div><br />
<div class="col"><br />
{{Tarxeta de texto básica|<br />
|titulo=OpenQA|<br />
<!--|tamano=12|--><br />
|logo=Archivo:Openqa-new250.png|<br />
|alineado=center|<br />
|seccion='''openQA''' es el servicio de pruebas del sistema operativo totalmente automatizado de openSUSE <br />
que puede encontrarse en http://openqa.opensuse.org/. Puede encontrar más información en http://open.qa/.|<br />
|pie=Portal:Proyectos/OpenQA|<br />
|texto_pie=Más información sobre OpenQA...|<br />
}}<br />
</div><br />
<br />
<div class="col"><br />
{{Tarxeta de texto básica|<br />
|titulo=YaST|<br />
<!--|tamano=12|--><br />
|logo=Archivo:YaST logo-250.png|<br />
|alineado=left|<br />
|seccion='''YaST''' es la herramienta de instalación y administración del sistema más potente en el entorno Linux, además de ser un proyecto de código abierto.|<br />
|pie=Portal:Proyectos/YaST|<br />
|texto_pie=Más información sobre YaST...|<br />
}}<br />
</div><br />
<div class="clearfix"></div><br />
<div class="col"><br />
{{Tarxeta de texto básica|<br />
|titulo=Kiwi|<br />
<!--|tamano=12|--><br />
|logo=Archivo:Kiwi-new250.png|<br />
|alineado=right|<br />
|seccion='''KIWI''' es una aplicación que permite crear una gran variedad de conjuntos de imágenes para plataformas de hardware compatibles con Linux, así como para sistemas de virtualización como '''QEMU''', '''Xen''' y '''VMware'''.|<br />
|pie=Portal:Proyectos/Kiwi|<br />
|texto_pie=Más información sobre Kiwi...|<br />
}}<br />
</div><br />
</div><br />
<div class="clearfix"></div><br />
<br />
==Portales más populares==<br />
<div class="card-header"></div><br />
<div class="card-body"><br />
<div style="column-count: 6; column-width: 150px;"><br />
<DynamicPageList><br />
namespace=Portal<br />
category=Portales<br />
stablepages=only<br />
count=48<br />
shownamespace=false<br />
ordermethod=popularity<br />
mode=none<br />
</DynamicPageList><br />
</div><br />
</div><br />
<br />
<!--fin doc--></div>Karlggesthttps://es.opensuse.org/index.php?title=Categor%C3%ADa:MicroOS&diff=28265Categoría:MicroOS2023-10-29T17:41:29Z<p>Karlggest: Página creada con «MicroOS es el sistema operativo con actualizaciones transaccionales basado en tumbleweed, y que dispone de las versiones con escritorio Aeon (Gnome) y Kalpa (Plasma). No co...»</p>
<hr />
<div>MicroOS es el sistema operativo con actualizaciones transaccionales basado en tumbleweed, y que dispone de las versiones con escritorio Aeon (Gnome) y Kalpa (Plasma). No confundir con Leap Micro, basado en Leap.</div>Karlggesthttps://es.opensuse.org/index.php?title=SDB:Actualizaciones_transaccionales&diff=28262SDB:Actualizaciones transaccionales2023-10-29T17:39:16Z<p>Karlggest: </p>
<hr />
<div>{{Conocimiento|<br />
*[[Portal:Aeon|Aeon]]<br />
*[[Portal:Kalpa|Kalpa]]<br />
|<br />
*[[Portal:MicroOS|MicroOS]]<br />
|<br />
*[https://es.wikipedia.org/wiki/SELinux SELinux]<br />
}}<br />
==Acerca de==<br />
Las actualizaciones transaccionales son un sistema que usan btrfs para utilizar una raíz en modo solo-lectura de forma que los cambios se realizan en una instantánea del sistema diferente a la que está en uso.<br />
<br />
Esto permite realizar cambios en el sistema sin afectar al sistema que está en uso y también en su caso descartar los cambios si se da alguna circunstancia que lo requiera. Una vez el proceso de actualización de la nueva instantánea acabe sin errores, esta instancia se incorporará al sistema una vez que se reinicie.<br />
<br />
==Uso básico==<br />
El comando para manejar actualizaciones transaccionales es '''transactional-update''' y se ha de ejecutar como root o bien con sudo:<br />
*Instalar un paquete rpm:<br />
transactional-update pkg install nombre_paquete<br />
*Desinstalar un paquete rpm:<br />
transactional-update pkg remove nombre_paquete<br />
*Actualizar el sistema a la siguiente versión:<br />
transactional-update dup<br />
*Abrir un ''shell'' de la siguiente instancia:<br />
transactional-update shell<br />
*Revertir a una instancia:<br />
transactional-update rollback número_intantánea<br />
**o bien para revertir a la última anterior instantánea:<br />
transactional-update rollback last<br />
**o en el caso de haber arrancado la instantánea a la que se quiere revertir:<br />
transactional-update rollback<br />
<br />
==Actualización automática==<br />
De forma predeterminada, transaccional-update.timer maneja las actualizaciones automáticas del sistema. Está configurado en diario, lo que significa que la tarea se ejecutará todos los días a las 00:00:00.<br />
<br />
En el caso de que esto pueda ser en un momento en que la computadora esté apagada, ya que el temporizador está configurado en persistencia = true, la actualización se realizará en la primera oportunidad posible.<br />
<br />
Algunas de las razones por las que es posible que no pueda activar una actualización podrían ser:<br />
* la computadora estaba apagada.<br />
* la conexión a Internet se interrumpió, durante la hora prevista.<br />
Esto no debería causar problemas debido a la forma en que funciona la actualización transaccional, ya que los nuevos paquetes se instalan en una nueva instantánea que necesita que se reinicie para entrar en vigor.<br />
<br />
Para realizar un seguimiento de si la actualización transaccional puede actualizarse y ejecutarse correctamente, puede utilizar journalctl:<br />
$ sudo journalctl -u actualización-transaccional.servicio<br />
También puedes utilizar journalctl con el indicador -f para seguir los registros en tiempo real.<br />
<br />
===Ajustar el temporizador para la actualización transaccional===<br />
Para editar el temporizador para la actualización transaccional ejecuta el siguiente comando:<br />
sudo systemctl edit transactional-update.timer<br />
<br />
<syntaxhighlight lang="ini"><br />
### Editing /etc/systemd/system/transactional-update.timer.d/override.conf<br />
### Anything between here and the comment below will become the contents of the drop-in file<br />
<br />
<br />
<br />
### Edits below this comment will be discarded<br />
<br />
<br />
### /usr/lib/systemd/system/transactional-update.timer<br />
# [Unit]<br />
# Description=Daily update of the system<br />
# Documentation=man:transactional-update(8)<br />
# After=network.target local-fs.target<br />
#<br />
# [Timer]<br />
# OnCalendar=daily<br />
# AccuracySec=1m<br />
# RandomizedDelaySec=2h<br />
# Persistent=true<br />
#<br />
# [Install]<br />
# WantedBy=timers.target<br />
<br />
</syntaxhighlight><br />
El editor de texto que tengas configurado (nano, vim) abrirá una copia comentada del fichero de configuración del temporizador. En la parte de arriba se añaden unas líneas para indicar que se introduzcan los cambios a realizar en esa sección, a continuación de la línea ''Anything between here and the comment below will become the contents of the drop-in file'' (cualquier cosa desde aquí hasta la línea comentada más abajo será el contenido del fichero de reemplazo).<br />
<syntaxhighlight lang="ini"><br />
### Editing /etc/systemd/system/transactional-update.timer.d/override.conf<br />
### Anything between here and the comment below will become the contents of the drop-in file<br />
<br />
[Timer]<br />
RandomizedDelaySec=15m<br />
<br />
### Edits below this comment will be discarded<br />
<br />
<br />
### /usr/lib/systemd/system/transactional-update.timer<br />
...<br />
</syntaxhighlight><br />
Esto introduce un retraso de 15 minutos en las actualizaciones. Puedes consultar en [https://www.freedesktop.org/software/systemd/man/latest/systemd.time.html# el manual] cómo especificar otras unidades de tiempo. También puedes consultar [https://www.freedesktop.org/software/systemd/man/latest/systemd.timer.html# el manual] para aprender qué variables puedes configurar.<br />
<br />
==Las actualizaciones transaccionales y arranque==<br />
Por defecto, cada comando ''transactional-update'' produce una instantánea separada y autocontenida que incluye los cambios requeridos por el comando ''transactioal-update''.<br />
<br />
Esta instantánea está '''basada en la última instantánea bien conocida/arrancada'''. La última de las instantáneas producidas por múltiples comandos ''transactional-update'' tomará efecto al reiniciar. En otras palabras, ''sudo transactional-update pkg install $pkg1'' seguido de ''sudo transactional-update pkg install $pkg2'' y luego el reinicio resulta en un sistema que tiene $pkg2 instalado, pero no $pkg1.<br />
<br />
Esto es el esperado y sensible comportamiento esperado. Los sistemas que usan actualizaciones transaccionales siempre quieren moversa a la última instantánea conocida buena/arrancada a su nuevo estado en la forma más pequeña y menos disruptida posible.<br />
<br />
Esto es especialmente sensible cuando pinesas que las actualización de sistemas de escritorio basados en MicroOS no deberían ni usar ''transactional-update'' de forma interactiva. Con ''transactional-update dup'' teniendo lugar en segundo plano automáticamente con regularidad, estos sistemas quieren asegurar que su actualización tiene lugar al último estado de sistema actualizado de forma limpia, no a ningún extraño híbrido de sistema previo sin arrancar, sin chequear, intermedio.<br />
<br />
De todas formas, cuando ignorando esta mejor práctica uses ''transactional-update'' de forma interactiva, habrá ocasiones en las que desees ejecutar ''transactional-update'' contra una instantánea no arrancada. Para ello utiliza ''transactional-update --continue''<br />
<br />
Ejemplo:<br />
<br />
''sudo transactional-update pkg install $pkg1'' seguido de ''sudo transactional-update --continue pkg install $pkg2'' instalará $pkg1, y después $pkg2 en la misma instantánea que $pkg1, marcando que esa instantánea combinada es el objetivo en el próximo arranque.<br />
<br />
Si de todas formas ocurre algún problema, no hay ninguna forma compleja de determinar si fue $pkg1 o $pkg lo que provocó que se rompiera algo, así que las personas usuarias tendrán que revertir a la instantánea anterior a la instalación de $pkg1 para volver al último buen estado conocido.<br />
----<br />
[[Categoría: MicroOS]]</div>Karlggesthttps://es.opensuse.org/index.php?title=SDB:Actualizaciones_transaccionales&diff=28259SDB:Actualizaciones transaccionales2023-10-29T17:37:18Z<p>Karlggest: </p>
<hr />
<div>==Acerca de==<br />
Las actualizaciones transaccionales son un sistema que usan btrfs para utilizar una raíz en modo solo-lectura de forma que los cambios se realizan en una instantánea del sistema diferente a la que está en uso.<br />
<br />
Esto permite realizar cambios en el sistema sin afectar al sistema que está en uso y también en su caso descartar los cambios si se da alguna circunstancia que lo requiera. Una vez el proceso de actualización de la nueva instantánea acabe sin errores, esta instancia se incorporará al sistema una vez que se reinicie.<br />
<br />
==Uso básico==<br />
El comando para manejar actualizaciones transaccionales es '''transactional-update''' y se ha de ejecutar como root o bien con sudo:<br />
*Instalar un paquete rpm:<br />
transactional-update pkg install nombre_paquete<br />
*Desinstalar un paquete rpm:<br />
transactional-update pkg remove nombre_paquete<br />
*Actualizar el sistema a la siguiente versión:<br />
transactional-update dup<br />
*Abrir un ''shell'' de la siguiente instancia:<br />
transactional-update shell<br />
*Revertir a una instancia:<br />
transactional-update rollback número_intantánea<br />
**o bien para revertir a la última anterior instantánea:<br />
transactional-update rollback last<br />
**o en el caso de haber arrancado la instantánea a la que se quiere revertir:<br />
transactional-update rollback<br />
<br />
==Actualización automática==<br />
De forma predeterminada, transaccional-update.timer maneja las actualizaciones automáticas del sistema. Está configurado en diario, lo que significa que la tarea se ejecutará todos los días a las 00:00:00.<br />
<br />
En el caso de que esto pueda ser en un momento en que la computadora esté apagada, ya que el temporizador está configurado en persistencia = true, la actualización se realizará en la primera oportunidad posible.<br />
<br />
Algunas de las razones por las que es posible que no pueda activar una actualización podrían ser:<br />
* la computadora estaba apagada.<br />
* la conexión a Internet se interrumpió, durante la hora prevista.<br />
Esto no debería causar problemas debido a la forma en que funciona la actualización transaccional, ya que los nuevos paquetes se instalan en una nueva instantánea que necesita que se reinicie para entrar en vigor.<br />
<br />
Para realizar un seguimiento de si la actualización transaccional puede actualizarse y ejecutarse correctamente, puede utilizar journalctl:<br />
$ sudo journalctl -u actualización-transaccional.servicio<br />
También puedes utilizar journalctl con el indicador -f para seguir los registros en tiempo real.<br />
<br />
===Ajustar el temporizador para la actualización transaccional===<br />
Para editar el temporizador para la actualización transaccional ejecuta el siguiente comando:<br />
sudo systemctl edit transactional-update.timer<br />
<br />
<syntaxhighlight lang="ini"><br />
### Editing /etc/systemd/system/transactional-update.timer.d/override.conf<br />
### Anything between here and the comment below will become the contents of the drop-in file<br />
<br />
<br />
<br />
### Edits below this comment will be discarded<br />
<br />
<br />
### /usr/lib/systemd/system/transactional-update.timer<br />
# [Unit]<br />
# Description=Daily update of the system<br />
# Documentation=man:transactional-update(8)<br />
# After=network.target local-fs.target<br />
#<br />
# [Timer]<br />
# OnCalendar=daily<br />
# AccuracySec=1m<br />
# RandomizedDelaySec=2h<br />
# Persistent=true<br />
#<br />
# [Install]<br />
# WantedBy=timers.target<br />
<br />
</syntaxhighlight><br />
El editor de texto que tengas configurado (nano, vim) abrirá una copia comentada del fichero de configuración del temporizador. En la parte de arriba se añaden unas líneas para indicar que se introduzcan los cambios a realizar en esa sección, a continuación de la línea ''Anything between here and the comment below will become the contents of the drop-in file'' (cualquier cosa desde aquí hasta la línea comentada más abajo será el contenido del fichero de reemplazo).<br />
<syntaxhighlight lang="ini"><br />
### Editing /etc/systemd/system/transactional-update.timer.d/override.conf<br />
### Anything between here and the comment below will become the contents of the drop-in file<br />
<br />
[Timer]<br />
RandomizedDelaySec=15m<br />
<br />
### Edits below this comment will be discarded<br />
<br />
<br />
### /usr/lib/systemd/system/transactional-update.timer<br />
...<br />
</syntaxhighlight><br />
Esto introduce un retraso de 15 minutos en las actualizaciones. Puedes consultar en [https://www.freedesktop.org/software/systemd/man/latest/systemd.time.html# el manual] cómo especificar otras unidades de tiempo. También puedes consultar [https://www.freedesktop.org/software/systemd/man/latest/systemd.timer.html# el manual] para aprender qué variables puedes configurar.<br />
<br />
==Las actualizaciones transaccionales y arranque==<br />
Por defecto, cada comando ''transactional-update'' produce una instantánea separada y autocontenida que incluye los cambios requeridos por el comando ''transactioal-update''.<br />
<br />
Esta instantánea está '''basada en la última instantánea bien conocida/arrancada'''. La última de las instantáneas producidas por múltiples comandos ''transactional-update'' tomará efecto al reiniciar. En otras palabras, ''sudo transactional-update pkg install $pkg1'' seguido de ''sudo transactional-update pkg install $pkg2'' y luego el reinicio resulta en un sistema que tiene $pkg2 instalado, pero no $pkg1.<br />
<br />
Esto es el esperado y sensible comportamiento esperado. Los sistemas que usan actualizaciones transaccionales siempre quieren moversa a la última instantánea conocida buena/arrancada a su nuevo estado en la forma más pequeña y menos disruptida posible.<br />
<br />
Esto es especialmente sensible cuando pinesas que las actualización de sistemas de escritorio basados en MicroOS no deberían ni usar ''transactional-update'' de forma interactiva. Con ''transactional-update dup'' teniendo lugar en segundo plano automáticamente con regularidad, estos sistemas quieren asegurar que su actualización tiene lugar al último estado de sistema actualizado de forma limpia, no a ningún extraño híbrido de sistema previo sin arrancar, sin chequear, intermedio.<br />
<br />
De todas formas, cuando ignorando esta mejor práctica uses ''transactional-update'' de forma interactiva, habrá ocasiones en las que desees ejecutar ''transactional-update'' contra una instantánea no arrancada. Para ello utiliza ''transactional-update --continue''<br />
<br />
Ejemplo:<br />
<br />
''sudo transactional-update pkg install $pkg1'' seguido de ''sudo transactional-update --continue pkg install $pkg2'' instalará $pkg1, y después $pkg2 en la misma instantánea que $pkg1, marcando que esa instantánea combinada es el objetivo en el próximo arranque.<br />
<br />
Si de todas formas ocurre algún problema, no hay ninguna forma compleja de determinar si fue $pkg1 o $pkg lo que provocó que se rompiera algo, así que las personas usuarias tendrán que revertir a la instantánea anterior a la instalación de $pkg1 para volver al último buen estado conocido.<br />
----<br />
[[Categoría: MicroOS]]</div>Karlggesthttps://es.opensuse.org/index.php?title=SDB:Actualizaciones_transaccionales&diff=28256SDB:Actualizaciones transaccionales2023-10-29T17:08:41Z<p>Karlggest: /* Las actualizaciones transaccionales y arranque */</p>
<hr />
<div>==Acerca de==<br />
Las actualizaciones transaccionales son un sistema que usan btrfs para utilizar una raíz en modo solo-lectura de forma que los cambios se realizan en una instantánea del sistema diferente a la que está en uso.<br />
<br />
Esto permite realizar cambios en el sistema sin afectar al sistema que está en uso y también en su caso descartar los cambios si se da alguna circunstancia que lo requiera. Una vez el proceso de actualización de la nueva instantánea acabe sin errores, esta instancia se incorporará al sistema una vez que se reinicie.<br />
<br />
==Uso básico==<br />
El comando para manejar actualizaciones transaccionales es '''transactional-update''' y se ha de ejecutar como root o bien con sudo:<br />
*Instalar un paquete rpm:<br />
transactional-update pkg install nombre_paquete<br />
*Desinstalar un paquete rpm:<br />
transactional-update pkg remove nombre_paquete<br />
*Actualizar el sistema a la siguiente versión:<br />
transactional-update dup<br />
*Abrir un ''shell'' de la siguiente instancia:<br />
transactional-update shell<br />
*Revertir a una instancia:<br />
transactional-update rollback número_intantánea<br />
**o bien para revertir a la última anterior instantánea:<br />
transactional-update rollback last<br />
**o en el caso de haber arrancado la instantánea a la que se quiere revertir:<br />
transactional-update rollback<br />
<br />
==Actualización automática==<br />
De forma predeterminada, transaccional-update.timer maneja las actualizaciones automáticas del sistema. Está configurado en diario, lo que significa que la tarea se ejecutará todos los días a las 00:00:00.<br />
<br />
En el caso de que esto pueda ser en un momento en que la computadora esté apagada, ya que el temporizador está configurado en persistencia = true, la actualización se realizará en la primera oportunidad posible.<br />
<br />
Algunas de las razones por las que es posible que no pueda activar una actualización podrían ser:<br />
* la computadora estaba apagada.<br />
* la conexión a Internet se interrumpió, durante la hora prevista.<br />
Esto no debería causar problemas debido a la forma en que funciona la actualización transaccional, ya que los nuevos paquetes se instalan en una nueva instantánea que necesita que se reinicie para entrar en vigor.<br />
<br />
Para realizar un seguimiento de si la actualización transaccional puede actualizarse y ejecutarse correctamente, puede utilizar journalctl:<br />
$ sudo journalctl -u actualización-transaccional.servicio<br />
También puedes utilizar journalctl con el indicador -f para seguir los registros en tiempo real.<br />
<br />
===Ajustar el temporizador para la actualización transaccional===<br />
Para editar el temporizador para la actualización transaccional ejecuta el siguiente comando:<br />
sudo systemctl edit transactional-update.timer<br />
<br />
<syntaxhighlight lang="ini"><br />
### Editing /etc/systemd/system/transactional-update.timer.d/override.conf<br />
### Anything between here and the comment below will become the contents of the drop-in file<br />
<br />
<br />
<br />
### Edits below this comment will be discarded<br />
<br />
<br />
### /usr/lib/systemd/system/transactional-update.timer<br />
# [Unit]<br />
# Description=Daily update of the system<br />
# Documentation=man:transactional-update(8)<br />
# After=network.target local-fs.target<br />
#<br />
# [Timer]<br />
# OnCalendar=daily<br />
# AccuracySec=1m<br />
# RandomizedDelaySec=2h<br />
# Persistent=true<br />
#<br />
# [Install]<br />
# WantedBy=timers.target<br />
<br />
</syntaxhighlight><br />
El editor de texto que tengas configurado (nano, vim) abrirá una copia comentada del fichero de configuración del temporizador. En la parte de arriba se añaden unas líneas para indicar que se introduzcan los cambios a realizar en esa sección, a continuación de la línea ''Anything between here and the comment below will become the contents of the drop-in file'' (cualquier cosa desde aquí hasta la línea comentada más abajo será el contenido del fichero de reemplazo).<br />
<syntaxhighlight lang="ini"><br />
### Editing /etc/systemd/system/transactional-update.timer.d/override.conf<br />
### Anything between here and the comment below will become the contents of the drop-in file<br />
<br />
[Timer]<br />
RandomizedDelaySec=15m<br />
<br />
### Edits below this comment will be discarded<br />
<br />
<br />
### /usr/lib/systemd/system/transactional-update.timer<br />
...<br />
</syntaxhighlight><br />
Esto introduce un retraso de 15 minutos en las actualizaciones. Puedes consultar en [https://www.freedesktop.org/software/systemd/man/latest/systemd.time.html# el manual] cómo especificar otras unidades de tiempo. También puedes consultar [https://www.freedesktop.org/software/systemd/man/latest/systemd.timer.html# el manual] para aprender qué variables puedes configurar.<br />
<br />
==Las actualizaciones transaccionales y arranque==<br />
Por defecto, cada comando ''transactional-update'' produce una instantánea separada y autocontenida que incluye los cambios requeridos por el comando ''transactioal-update''.<br />
<br />
Esta instantánea está '''basada en la última instantánea bien conocida/arrancada'''. La última de las instantáneas producidas por múltiples comandos ''transactional-update'' tomará efecto al reiniciar. En otras palabras, ''sudo transactional-update pkg install $pkg1'' seguido de ''sudo transactional-update pkg install $pkg2'' y luego el reinicio resulta en un sistema que tiene $pkg2 instalado, pero no $pkg1.<br />
<br />
Esto es el esperado y sensible comportamiento esperado. Los sistemas que usan actualizaciones transaccionales siempre quieren moversa a la última instantánea conocida buena/arrancada a su nuevo estado en la forma más pequeña y menos disruptida posible.<br />
<br />
Esto es especialmente sensible cuando pinesas que las actualización de sistemas de escritorio basados en MicroOS no deberían ni usar ''transactional-update'' de forma interactiva. Con ''transactional-update dup'' teniendo lugar en segundo plano automáticamente con regularidad, estos sistemas quieren asegurar que su actualización tiene lugar al último estado de sistema actualizado de forma limpia, no a ningún extraño híbrido de sistema previo sin arrancar, sin chequear, intermedio.<br />
<br />
De todas formas, cuando ignorando esta mejor práctica uses ''transactional-update'' de forma interactiva, habrá ocasiones en las que desees ejecutar ''transactional-update'' contra una instantánea no arrancada. Para ello utiliza ''transactional-update --continue''<br />
<br />
Ejemplo:<br />
<br />
''sudo transactional-update pkg install $pkg1'' seguido de ''sudo transactional-update --continue pkg install $pkg2'' instalará $pkg1, y después $pkg2 en la misma instantánea que $pkg1, marcando que esa instantánea combinada es el objetivo en el próximo arranque.<br />
<br />
Si de todas formas ocurre algún problema, no hay ninguna forma compleja de determinar si fue $pkg1 o $pkg lo que provocó que se rompiera algo, así que las personas usuarias tendrán que revertir a la instantánea anterior a la instalación de $pkg1 para volver al último buen estado conocido.<br />
----</div>Karlggesthttps://es.opensuse.org/index.php?title=SDB:Systemd_files&diff=28253SDB:Systemd files2023-10-29T16:38:21Z<p>Karlggest: /* Ejemplo de unidad */</p>
<hr />
<div>{{Plantilla:Encabezado para systemd<br />
|}}<br />
<br />
==Editar unidades==<br />
La forma recomendada de personalizar archivos de unidades es utilizar el comando <br />
systemctl edit SERVICE<br />
Este comando inicia el editor de texto predeterminado y crea un directorio con el archivo override.conf en /etc/systemd/system/SERVICE.service.d/. El comando también garantiza que el proceso systemd en ejecución sea notificado sobre los cambios. El editor mostrará el contenido del fichero comentado con # y unas líneas adicionales al principio. Las modificaciones irán en el hueco entre estas línas<br />
<syntaxhighlight lang="ini"><br />
### Editing /etc/systemd/system/NetworkManager.service.d/override.conf<br />
### Anything between here and the comment below will become the contents of the drop-in file<br />
<br />
<las modificaciones van aquí><br />
<br />
### Edits below this comment will be discarded<br />
<br />
<br />
### /usr/lib/systemd/system/NetworkManager.service<br />
# [Unit]<br />
# Description=Network Manager<br />
# ...<br />
<br />
</syntaxhighlight><br />
De forma alternativa, puedes abrir una copia del archivo original para editarlo en lugar de un archivo en blanco ejecutando<br />
systemctl edit --full SERVICE<br />
Al editar el archivo, asegúrate de no eliminar ninguna de las secciones existentes.<br />
<br />
Como ejercicio, prueba a cambiar cuánto tiempo espera el sistema para que se inicie MariaDB. Como root, ejecuta<br />
systemctl edit --full mariadb.service<br />
El archivo abierto será similar al siguiente:<br />
<syntaxhighlight lang="ini"><br />
[Unit]<br />
Description=MySQL server<br />
Wants=basic.target<br />
Conflicts=mariadb.target<br />
After=basic.target network.target<br />
<br />
[Install]<br />
WantedBy=multi-user.target<br />
Alias=mysql.service<br />
<br />
[Service]<br />
Restart=on-abort<br />
Type=notify<br />
ExecStartPre=/usr/lib/mysql/mysql-systemd-helper install<br />
ExecStartPre=/usr/lib/mysql/mysql-systemd-helper upgrade<br />
ExecStart=/usr/lib/mysql/mysql-systemd-helper start<br />
<br />
# Configures the time to wait for start-up/stop<br />
TimeoutSec=300<br />
<br />
# Prevent writes to /usr, /boot, and /etc<br />
ProtectSystem=full<br />
<br />
# Prevent accessing /home, /root and /run/user<br />
ProtectHome=true<br />
<br />
UMask=007<br />
</syntaxhighlight><br />
Ajusta el valor de TimeoutSec y guarda los cambios. Para habilitar estos cambios, como root, ejecuta<br />
systemctl daemon-reload.<br />
Para obtener más información, consulta las páginas de manual que se pueden invocar con el comando<br />
man 1 systemctl.<br />
<br />
==Estructura básica de una unidad==<br />
Los ficheros que definen las unidades para systemd contienen diferentes bloques etiquetados con corchetes []:<br />
*'''[Unit]''': define la propia unidad, sus dependencias y descripción. También indica donde puede encontrarse la documentación asociada a esa unidad.<br />
*'''[Install]''': se tiene en cuenta esta configuración al activar y desactivar (''enable/disable'') la unidad.<br />
*'''[Service]''': establece la configuración de la mayoría de servicios (.service)<br />
*'''[Timer]''': establece la configuración de los temporizadores (.timer)<br />
<br />
===Ejemplo de unidad===<br />
Tomemos de ejemplo un ejecutable llamado vampir.sh que se encarga de una tarea X, en la que se necesita acceso a la red. Para que systemd lo inicie somo un servicio del sistema es necesario crear un archivo de unidad de tipo servicio con la extensión ''.service''.<br />
sudo systemctl edit --force --full vampird.service<br />
El comando de edición del servicio incluye el modificador --force para ''forzar la creación'' de un nuevo servicio.<br />
<syntaxhighlight lang="ini"><br />
[Unit]<br />
Description = Descripción del demonio vampird<br />
Requires = network.target<br />
After = network.target<br />
<br />
[Service]<br />
Type = notify<br />
PIDFile = /var/run/vampirsh.pid<br />
ExecStart = /ruta/al/ejecutable/vampir.sh<br />
Restart = on-abort<br />
</syntaxhighlight><br />
Para arrancar el servicio, necesitas el comando<br />
sudo systemctl start vampird.service<br />
Si quieres que el servicio se active de forma automática ejecuta en su lugar<br />
sudo systemctl enable --now vampird.service<br />
Al activar/desactivar o bien al ejecutar/parar/reiniciar una unidad de tipo servicio puede obviarse la extensión .service:<br />
sudo systemctl enable --now vampird<br />
Cuando se modifique la configuración de la unidad, ejecuta<br />
sudo systemctl daemon-reload<br />
<br />
==Dependencias==<br />
Las dependencias en systemd son controladas con las variables ''After'', ''Requires'' y ''Wants''. En el caso de la unidad anterior el demonio requiere el target network, esto es especificado en la sección [Unit] con la linea '''Requires = network.target''', si no fuera un requerimiento escencial podria usarse Wants en vez de Requires. Wants= y Requires= no incluyen After=, lo que significa que si After= no está especificado, las dos unidades se iniciarán en paralelo.</div>Karlggesthttps://es.opensuse.org/index.php?title=SDB:Systemd_files&diff=28250SDB:Systemd files2023-10-29T16:37:37Z<p>Karlggest: /* Editar unidades */</p>
<hr />
<div>{{Plantilla:Encabezado para systemd<br />
|}}<br />
<br />
==Editar unidades==<br />
La forma recomendada de personalizar archivos de unidades es utilizar el comando <br />
systemctl edit SERVICE<br />
Este comando inicia el editor de texto predeterminado y crea un directorio con el archivo override.conf en /etc/systemd/system/SERVICE.service.d/. El comando también garantiza que el proceso systemd en ejecución sea notificado sobre los cambios. El editor mostrará el contenido del fichero comentado con # y unas líneas adicionales al principio. Las modificaciones irán en el hueco entre estas línas<br />
<syntaxhighlight lang="ini"><br />
### Editing /etc/systemd/system/NetworkManager.service.d/override.conf<br />
### Anything between here and the comment below will become the contents of the drop-in file<br />
<br />
<las modificaciones van aquí><br />
<br />
### Edits below this comment will be discarded<br />
<br />
<br />
### /usr/lib/systemd/system/NetworkManager.service<br />
# [Unit]<br />
# Description=Network Manager<br />
# ...<br />
<br />
</syntaxhighlight><br />
De forma alternativa, puedes abrir una copia del archivo original para editarlo en lugar de un archivo en blanco ejecutando<br />
systemctl edit --full SERVICE<br />
Al editar el archivo, asegúrate de no eliminar ninguna de las secciones existentes.<br />
<br />
Como ejercicio, prueba a cambiar cuánto tiempo espera el sistema para que se inicie MariaDB. Como root, ejecuta<br />
systemctl edit --full mariadb.service<br />
El archivo abierto será similar al siguiente:<br />
<syntaxhighlight lang="ini"><br />
[Unit]<br />
Description=MySQL server<br />
Wants=basic.target<br />
Conflicts=mariadb.target<br />
After=basic.target network.target<br />
<br />
[Install]<br />
WantedBy=multi-user.target<br />
Alias=mysql.service<br />
<br />
[Service]<br />
Restart=on-abort<br />
Type=notify<br />
ExecStartPre=/usr/lib/mysql/mysql-systemd-helper install<br />
ExecStartPre=/usr/lib/mysql/mysql-systemd-helper upgrade<br />
ExecStart=/usr/lib/mysql/mysql-systemd-helper start<br />
<br />
# Configures the time to wait for start-up/stop<br />
TimeoutSec=300<br />
<br />
# Prevent writes to /usr, /boot, and /etc<br />
ProtectSystem=full<br />
<br />
# Prevent accessing /home, /root and /run/user<br />
ProtectHome=true<br />
<br />
UMask=007<br />
</syntaxhighlight><br />
Ajusta el valor de TimeoutSec y guarda los cambios. Para habilitar estos cambios, como root, ejecuta<br />
systemctl daemon-reload.<br />
Para obtener más información, consulta las páginas de manual que se pueden invocar con el comando<br />
man 1 systemctl.<br />
<br />
==Estructura básica de una unidad==<br />
Los ficheros que definen las unidades para systemd contienen diferentes bloques etiquetados con corchetes []:<br />
*'''[Unit]''': define la propia unidad, sus dependencias y descripción. También indica donde puede encontrarse la documentación asociada a esa unidad.<br />
*'''[Install]''': se tiene en cuenta esta configuración al activar y desactivar (''enable/disable'') la unidad.<br />
*'''[Service]''': establece la configuración de la mayoría de servicios (.service)<br />
*'''[Timer]''': establece la configuración de los temporizadores (.timer)<br />
<br />
===Ejemplo de unidad===<br />
Tomemos de ejemplo un ejecutable llamado vampir.sh que se encarga de una tarea X, en la que se necesita acceso a la red. Para que systemd lo inicie somo un servicio del sistema es necesario crear un archivo de unidad de tipo servicio con la extensión ''.service''.<br />
sudo systemctl edit --force --full vampird.service<br />
El comando de edición del servicio incluye el modificador --force para ''forzar la creación'' de un nuevo servicio.<br />
<pre><br />
[Unit]<br />
Description = Descripción del demonio vampird<br />
Requires = network.target<br />
After = network.target<br />
<br />
[Service]<br />
Type = notify<br />
PIDFile = /var/run/vampirsh.pid<br />
ExecStart = /ruta/al/ejecutable/vampir.sh<br />
Restart = on-abort<br />
</pre><br />
Para arrancar el servicio, necesitas el comando<br />
sudo systemctl start vampird.service<br />
Si quieres que el servicio se active de forma automática ejecuta en su lugar<br />
sudo systemctl enable --now vampird.service<br />
Al activar/desactivar o bien al ejecutar/parar/reiniciar una unidad de tipo servicio puede obviarse la extensión .service:<br />
sudo systemctl enable --now vampird<br />
Cuando se modifique la configuración de la unidad, ejecuta<br />
sudo systemctl daemon-reload<br />
<br />
==Dependencias==<br />
Las dependencias en systemd son controladas con las variables ''After'', ''Requires'' y ''Wants''. En el caso de la unidad anterior el demonio requiere el target network, esto es especificado en la sección [Unit] con la linea '''Requires = network.target''', si no fuera un requerimiento escencial podria usarse Wants en vez de Requires. Wants= y Requires= no incluyen After=, lo que significa que si After= no está especificado, las dos unidades se iniciarán en paralelo.</div>Karlggesthttps://es.opensuse.org/index.php?title=SDB:Systemd_files&diff=28247SDB:Systemd files2023-10-29T16:36:44Z<p>Karlggest: /* Editar unidades */</p>
<hr />
<div>{{Plantilla:Encabezado para systemd<br />
|}}<br />
<br />
==Editar unidades==<br />
La forma recomendada de personalizar archivos de unidades es utilizar el comando <br />
systemctl edit SERVICE<br />
Este comando inicia el editor de texto predeterminado y crea un directorio con el archivo override.conf en /etc/systemd/system/SERVICE.service.d/. El comando también garantiza que el proceso systemd en ejecución sea notificado sobre los cambios. El editor mostrará el contenido del fichero comentado con # y unas líneas adicionales al principio. Las modificaciones irán en el hueco entre estas línas<br />
<syntaxhighlight lang="ini"><br />
### Editing /etc/systemd/system/NetworkManager.service.d/override.conf<br />
### Anything between here and the comment below will become the contents of the drop-in file<br />
<br />
<las modificaciones van aquí><br />
<br />
### Edits below this comment will be discarded<br />
<br />
<br />
### /usr/lib/systemd/system/NetworkManager.service<br />
# [Unit]<br />
# Description=Network Manager<br />
# ...<br />
<br />
</syntaxhighlight><br />
De forma alternativa, puedes abrir una copia del archivo original para editarlo en lugar de un archivo en blanco ejecutando<br />
systemctl edit --full SERVICE<br />
Al editar el archivo, asegúrate de no eliminar ninguna de las secciones existentes.<br />
<br />
Como ejercicio, prueba a cambiar cuánto tiempo espera el sistema para que se inicie MariaDB. Como root, ejecuta<br />
systemctl edit --full mariadb.service<br />
El archivo abierto será similar al siguiente:<br />
<pre><br />
[Unit]<br />
Description=MySQL server<br />
Wants=basic.target<br />
Conflicts=mariadb.target<br />
After=basic.target network.target<br />
<br />
[Install]<br />
WantedBy=multi-user.target<br />
Alias=mysql.service<br />
<br />
[Service]<br />
Restart=on-abort<br />
Type=notify<br />
ExecStartPre=/usr/lib/mysql/mysql-systemd-helper install<br />
ExecStartPre=/usr/lib/mysql/mysql-systemd-helper upgrade<br />
ExecStart=/usr/lib/mysql/mysql-systemd-helper start<br />
<br />
# Configures the time to wait for start-up/stop<br />
TimeoutSec=300<br />
<br />
# Prevent writes to /usr, /boot, and /etc<br />
ProtectSystem=full<br />
<br />
# Prevent accessing /home, /root and /run/user<br />
ProtectHome=true<br />
<br />
UMask=007<br />
</pre><br />
Ajusta el valor de TimeoutSec y guarda los cambios. Para habilitar estos cambios, como root, ejecuta<br />
systemctl daemon-reload.<br />
Para obtener más información, consulta las páginas de manual que se pueden invocar con el comando<br />
man 1 systemctl.<br />
<br />
==Estructura básica de una unidad==<br />
Los ficheros que definen las unidades para systemd contienen diferentes bloques etiquetados con corchetes []:<br />
*'''[Unit]''': define la propia unidad, sus dependencias y descripción. También indica donde puede encontrarse la documentación asociada a esa unidad.<br />
*'''[Install]''': se tiene en cuenta esta configuración al activar y desactivar (''enable/disable'') la unidad.<br />
*'''[Service]''': establece la configuración de la mayoría de servicios (.service)<br />
*'''[Timer]''': establece la configuración de los temporizadores (.timer)<br />
<br />
===Ejemplo de unidad===<br />
Tomemos de ejemplo un ejecutable llamado vampir.sh que se encarga de una tarea X, en la que se necesita acceso a la red. Para que systemd lo inicie somo un servicio del sistema es necesario crear un archivo de unidad de tipo servicio con la extensión ''.service''.<br />
sudo systemctl edit --force --full vampird.service<br />
El comando de edición del servicio incluye el modificador --force para ''forzar la creación'' de un nuevo servicio.<br />
<pre><br />
[Unit]<br />
Description = Descripción del demonio vampird<br />
Requires = network.target<br />
After = network.target<br />
<br />
[Service]<br />
Type = notify<br />
PIDFile = /var/run/vampirsh.pid<br />
ExecStart = /ruta/al/ejecutable/vampir.sh<br />
Restart = on-abort<br />
</pre><br />
Para arrancar el servicio, necesitas el comando<br />
sudo systemctl start vampird.service<br />
Si quieres que el servicio se active de forma automática ejecuta en su lugar<br />
sudo systemctl enable --now vampird.service<br />
Al activar/desactivar o bien al ejecutar/parar/reiniciar una unidad de tipo servicio puede obviarse la extensión .service:<br />
sudo systemctl enable --now vampird<br />
Cuando se modifique la configuración de la unidad, ejecuta<br />
sudo systemctl daemon-reload<br />
<br />
==Dependencias==<br />
Las dependencias en systemd son controladas con las variables ''After'', ''Requires'' y ''Wants''. En el caso de la unidad anterior el demonio requiere el target network, esto es especificado en la sección [Unit] con la linea '''Requires = network.target''', si no fuera un requerimiento escencial podria usarse Wants en vez de Requires. Wants= y Requires= no incluyen After=, lo que significa que si After= no está especificado, las dos unidades se iniciarán en paralelo.</div>Karlggest