Diferencia entre revisiones de «Gestión de archivos»

De Hacklab La Paz - r00thouse
Sin resumen de edición
Sin resumen de edición
 
(No se muestran 6 ediciones intermedias de otro usuario)
Línea 1: Línea 1:
El S.O: GNU/Linux es escencialmente una colección de archivos organizados.
El S.O: GNU/Linux es esencialmente una colección de archivos organizados.


Estos archivos se caraterizan por tener ciertos permisos y atriburos que ayudan al sistema a informarse de su releevancia. Por eso, gestionar los archivos ya sean del sistema y usuario es una tarea crucial.
Estos archivos se caracterizan por tener ciertos permisos y atributos que ayudan al sistema a informarse de su relevancia. Por eso, gestionar los archivos ya sean del sistema y usuario es una tarea crucial.


Los entornos gráficos de escritorio permiten la manipulación de archivos y permisos de archivos de manera básica. Sin embargo si por ejemplo queremos hacer gestión de archivos desde programas externos, scripts o aplicaciones escritas por nosotros mismos, es necesario aprender como se gestionan los archivos desde la '''línea de comandos  '''es decir, aprender a manejar e invocar a los programas que realizan estas tareas.
Los entornos gráficos de escritorio permiten la manipulación de archivos y permisos de archivos de manera básica. Sin embargo si por ejemplo queremos hacer gestión de archivos desde programas externos, scripts o aplicaciones escritas por nosotros mismos, es necesario aprender como se gestionan los archivos desde la '''línea de comandos  '''es decir, aprender a manejar e invocar a los programas que realizan estas tareas.
Línea 7: Línea 7:
== Consideraciones importantes<br/> ==
== Consideraciones importantes<br/> ==


Al trabajar desde una línea de comandos existen símbolos que tienen significado al mostrarse en la pantalla. Los emuladores de terminal en la mayor parte de las distribuciones usan en la terminal '''bash'''. Si se abre una lo primero que se muestra es el '''prompt''' que bajo condiciones normales muestra lo siguiente:
Al trabajar desde una línea de comandos existen símbolos que tienen significado al mostrarse en la pantalla. Los emuladores de terminal en la mayor parte de las distribuciones usan en la terminal '''bash'''. Si se abre una lo primero que se muestra es el '''prompt''' que bajo condiciones normales muestra lo siguiente: <source lang="bash">invitado@gensu-D5:~$</source> Donde: <source lang="bash">invitado = nombre del usuario ''logueado'' en esta terminal
<pre>invitado@gensu-D5:~$</pre>
Donde:
<pre>invitado = nombre del usuario logueado en esta terminal


@gensu-D5: = nombre del computador</pre>
@gensu-D5: = nombre del computador</source> Justo después del símbolo " <code>:</code> " viene la ubicación o directorio donde "apunta" la terminal en este caso el símbolo "<code>~</code>&nbsp; " es equivalente a la carpeta propia del usuario que en este caso es <code>/home/invitado</code>
Justo después del símbolo " <code>:</code> " viene la ubicación o directorio donde "apunta" la terminal en este caso el símbolo "<code>~</code>&nbsp; " es equivalente a la carpeta propia del usuario que en este caso es <code>/home/invitado</code>


Finalmente viene el símbolo " <code>$</code> " que significa que el usuario que controla esta terminal es un usuario con '''privilegios limitados''' tiene restricciones y no puede hacer cambios significativos al sistema.
Finalmente viene el símbolo " <code>$</code> " que significa que el usuario que controla esta terminal es un usuario con '''privilegios limitados''' tiene restricciones y no puede hacer cambios significativos al sistema.
Línea 19: Línea 15:
Si el símbolo fuese " # " significaría que el usuario que controla esta terminal es un '''superusuario''' capaz de hacer cambios importantes en la computadora.
Si el símbolo fuese " # " significaría que el usuario que controla esta terminal es un '''superusuario''' capaz de hacer cambios importantes en la computadora.


<span style="font-size:small"><span style="background-color:#d3d3d3">► Entonces los símbolos</span><code><span style="background-color:#d3d3d3">$</span></code><span style="background-color:#d3d3d3">&nbsp; y &nbsp; </span><code><span style="background-color:#d3d3d3">#</span></code><span style="background-color:#d3d3d3">&nbsp; indican que tipo de usuario tiene el control sobre la terminal al colocar comandos.</span></span>
<span style="font-size:small"><span style="background-color:#d3d3d3">► Entonces los símbolos&nbsp;&nbsp; </span><code><span style="background-color:#d3d3d3">$</span></code><span style="background-color:#d3d3d3">&nbsp; y &nbsp; </span><code><span style="background-color:#d3d3d3">#</span></code><span style="background-color:#d3d3d3">&nbsp; indican que tipo de usuario tiene el control sobre la terminal al colocar comandos.</span></span>


En muchas distribuciones se usa el comando <code><span style="background-color:#d3d3d3">sudo</span></code> que permite realizar tareas como si se fuese otro usuario, se coloca <code>sudo </code>seguido del comando a ejecutarse y después de presionar <code>enter </code>se debe introducir la contraseña del usuario que autoriza las acciones.
En muchas distribuciones se usa el comando <code><span style="background-color:#d3d3d3">sudo</span></code> que permite realizar tareas como si se fuese otro usuario, se coloca <code>sudo </code>seguido del comando a ejecutarse y después de presionar <code>enter </code>se debe introducir la contraseña del usuario que autoriza las acciones.
Línea 31: Línea 27:
=== <span style="font-family:courier new,courier,monospace">ls</span><br/> ===
=== <span style="font-family:courier new,courier,monospace">ls</span><br/> ===


El comando <tt><code><span style="font-family:courier new,courier,monospace">ls</span></code> </tt>viene de "listar" y lo que hace es listar los archivos de cierto directorio, es el que permite ver los nombres de los archivos y directorios. <code><span style="font-family:courier new,courier,monospace"><tt>ls </tt><span style="font-family:arial,helvetica,sans-serif">también puede mostrar</span></span></code>detalles importantes de los archivos y tiene una gran caontidad de opciones. Su sintaxis es la siguiente
El comando <tt><code><span style="font-family:courier new,courier,monospace">ls</span></code> </tt>viene de "listar" y lo que hace es listar los archivos de cierto directorio, es el que permite ver los nombres de los archivos y directorios. <code><span style="font-family:courier new,courier,monospace"><tt>ls </tt><span style="font-family:arial,helvetica,sans-serif">también puede mostrar</span></span></code>detalles importantes de los archivos y tiene una gran caontidad de opciones. Su sintaxis es la siguiente <source lang="bash">ls [opciones] [fichero ó directorio]</source> Para ver más opciones de este comando se escribe:&nbsp; <code>ls --help</code>&nbsp;&nbsp;&nbsp; ó &nbsp;&nbsp; <code>man ls</code>
<pre>ls [opciones] [fichero ó directorio]</pre>
Para ver más opciones de este comando se escribe:&nbsp; <code>ls --help</code>&nbsp;&nbsp;&nbsp; ó &nbsp;&nbsp; <code>man ls</code>


Si no se especifica opciones o ficheros <code>ls</code> lista de manera el contenido del directorio en él cual se encuentra actualmente la terminal.
Si no se especifica opciones o ficheros <code>ls</code> lista de manera el contenido del directorio en él cual se encuentra actualmente la terminal.
Línea 45: Línea 39:
</ul>
</ul>


<code>ls</code> en combinación con&nbsp; <code>grep </code>es una potente herramienta para ver archivos. Por ejemplo si escribimos:
<code>ls</code> en combinación con&nbsp; <code>grep </code>es una potente herramienta para ver archivos. Por ejemplo si escribimos: <source lang="bash">$ ls -lah</source> Hará un listado de todos los archivos y directorios dentro el directorio actual con detalles de los permisos de cada uno y mostrando su tamaño de forma entendible. Si se aumenta -R el listado tambíen mostrará a los subdirectorios si existen.
<pre>$ls -lah</pre>
Hará un listado de todos los archivos y directorios dentro el directorio actual con detalles de los permisos de cada uno y mostrando su tamaño de forma entendible. Si se aumenta -R el listado tambíen mostrará a los subdirectorios si existen.


Por supuesto que también se puede usar así:
Por supuesto que también se puede usar así: <source lang="bash">$ ls /usr/bin</source> Que mostrará&nbsp; el&nbsp; contenido dentro el duirectorio<code>/usr/bin&nbsp;</code> que corresponde a los ejecutables de los programas del usuario.
<pre>$ls /usr/bin</pre>
Que mostrará&nbsp; el&nbsp; contenido dentro el duirectorio<code>/usr/bin&nbsp;</code> que corresponde a los ejecutables de los programas del usuario.


=== <span style="font-family:courier new,courier,monospace">cd</span><br/> ===
=== <span style="font-family:courier new,courier,monospace">cd</span><br/> ===
Línea 57: Línea 47:
Este es el comando que se usa para poscisionarse en un directorio y probablemente cd viene&nbsp; de de "change directory" (cambiar directorio) por eso es muy ampliamente usado.
Este es el comando que se usa para poscisionarse en un directorio y probablemente cd viene&nbsp; de de "change directory" (cambiar directorio) por eso es muy ampliamente usado.


Como dijimos antes al abrir una terminal esta usualmente "apunta" a cierto directorio que por lo general es <code>~</code> que es lo mismo que <code>/home/usuario</code> o la carpeta personal del usuario que abrió la terminal. Pero no todas las tareas se hacen en ese directorio es necesario moverse para eso esta <code>cd</code> cuya sintaxis es:
Como dijimos antes al abrir una terminal esta usualmente "apunta" a cierto directorio que por lo general es <code>~</code> que es lo mismo que <code>/home/usuario</code> o la carpeta personal del usuario que abrió la terminal. Pero no todas las tareas se hacen en ese directorio es necesario moverse para eso esta <code>cd</code> cuya sintaxis es: <source lang="bash">cd [opcion] [directorio]</source> Basta con escribir cd seguido del directorio para que la terminal ahora apunte a ese directorio, por ejemplo: <source lang="bash">$ cd /var/lib</source> Algunos directorios no pueden accederse con cd siendo usuario estándar ($) si los permisos lo requieren será necesario logearse como superusuario o usar <code>sudo cd [directorio]</code>
<pre>cd [opcion] [directorio]</pre>
Basta con escribir cd seguido del directorio para que la terminal ahora apunte a ese directorio, por ejemplo:
<pre>$cd /var/lib</pre>
Algunos directorios no pueden accederse con cd siendo usuario estándar ($) si los permisos lo requieren será necesario logearse como superusuario o usar <code>sudo cd [directorio]</code>


=== <span style="font-family:courier new,courier,monospace">cp</span><br/> ===
=== <span style="font-family:courier new,courier,monospace">cp</span><br/> ===


<code>cp</code> viene de copy (copiar) y sierve para eso, copiar archivos o directorios y la sintaxis es:
<code>cp</code> viene de copy (copiar) y sierve para eso, copiar archivos o directorios y la sintaxis es: <source lang="bash">cp [opciones] fuente destino</source> Donde:
<pre>cp [opciones] fuente destino</pre>
Donde:


*<code>fuente</code>&nbsp;&nbsp; <code>→</code> es uno o más archivos, aunque también puede ser un directorio si se usan ciertas opciones.
*<code>fuente</code>&nbsp;&nbsp; <code>→</code> es uno o más archivos, aunque también puede ser un directorio si se usan ciertas opciones.
Línea 80: Línea 64:
*<code>-p </code>ó<code>--preserve </code><code>→</code><code>D</code>e tener los privilegios de hacerlo, se conserva la pertenencia y permisos de los archivos fuenteal copiarlos a&nbsp; <code>destino, </code>si no se usa esta opción, por defecto cp copia los archivos con los permisos y pertenencia '''estándar '''del usuario que usa cp.
*<code>-p </code>ó<code>--preserve </code><code>→</code><code>D</code>e tener los privilegios de hacerlo, se conserva la pertenencia y permisos de los archivos fuenteal copiarlos a&nbsp; <code>destino, </code>si no se usa esta opción, por defecto cp copia los archivos con los permisos y pertenencia '''estándar '''del usuario que usa cp.


Ejemplos:
Ejemplos: <source lang="bash">$cp archivo1 archivo2</source> copia el <code>archivo1</code> en el mismo directorio donde "esta" la terminal pero el nombre de la copia es <code>archivo2</code>. <source lang="bash">$cp ~/dir2/dir3/archivo1 archivo2 ~/dir1/</source> Copia el <code>~/dir2/dir3/archivo1</code>&nbsp; y&nbsp; <code>archivo2</code> (qué esta en el directorio donde "apunta" la terminal) a <code>~/dir1/</code>. <source lang="bash">$ cp -R /var/games/ ~/</source> Copia todo el directorio más el contenido (si es posible) de <code>/var/games</code> a<code>&nbsp; ~/</code>
<pre>$cp archivo1 archivo2</pre>
copia el <code>archivo1</code> en el mismo directorio donde "esta" la terminal pero el nombre de la copia es <code>archivo2</code>.
<pre>$cp ~/dir2/dir3/archivo1 archivo2 ~/dir1/</pre>
Copia el <code>~/dir2/dir3/archivo1</code>&nbsp; y&nbsp; <code>archivo2</code> (qué esta en el directorio donde "apunta" la terminal) a <code>~/dir1/</code>.
<pre>$cp -R /var/games/ ~/</pre>
Copia todo el directorio más el contenido (si es posible) de <code>/var/games</code> a<code>&nbsp; ~/</code>


<code>cp </code>también puede operar con enlaces.
<code>cp </code>también puede operar con enlaces.
Línea 92: Línea 70:
=== <span style="font-family:courier new,courier,monospace">mv</span><br/> ===
=== <span style="font-family:courier new,courier,monospace">mv</span><br/> ===


Se usa para mover archivos o directorios de un lugar a otro, para mover directorios con mv basta con '''indicar que es un directorio''', esto se logra colocando al final el caracter " / " que la terminal interpreta como directorio por ejemplo:
Se usa para mover archivos o directorios de un lugar a otro, para mover directorios con mv basta con '''indicar que es un directorio''', esto se logra colocando al final el caracter " / " que la terminal interpreta como directorio por ejemplo: <source lang="bash">$ mv Imágenes/Escuela/ Imágenes/2014/</source> Mueve la carpeta Imágenes/Escuela a la carpeta Imágenes/2014. La sintaxis de mv es similar a cp y las opciones comunes son también similares con la excepción de que --preserve , <code>--archive</code> y<code>--recursive</code> no aplican a <code>mv</code>. También se pueden usar varios argumentos para mover teniendo en cuenta que el último argumento será el destino, por ejemplo: <source lang="bash">$ mv Imágenes/Escuela/ Imágenes/2014/ foto1.png /tmp/cookie1.c57MWz Documentos/carpeta1/</source>
<pre>$mv Imágenes/Escuela/ Imágenes/2014/</pre>
 
Mueve la carpeta Imágenes/Escuela a la carpeta Imágenes/2014. La sintaxis de mv es similar a cp y las opciones comunes son también similares con la excepción de que --preserve , <code>--archive</code> y<code>--recursive</code> no aplican a <code>mv</code>. También se pueden usar varios argumentos para mover teniendo en cuenta que el último argumento será el destino, por ejemplo:
<pre>$mv Imágenes/Escuela/ Imágenes/2014/ foto1.png /tmp/cookie1.c57MWz Documentos/carpeta1/</pre>
=== &nbsp;rm<br/> ===
=== &nbsp;rm<br/> ===


El comando para eliminar archivos es rm de "remove", al igual que cp y mv posee las mismas opciones a excepcción de --preserve, --archive o --update. Su sintaxis es:
El comando para eliminar archivos es rm de "remove", al igual que cp y mv posee las mismas opciones a excepcción de --preserve, --archive o --update. Su sintaxis es: <source lang="bash">rm [opciones] archivos</source> Ejemplos:
<pre>rm [opciones] archivos</pre>
Ejemplos:


$rm archivo1
$rm archivo1


Elimina el archivo1.
Elimina el archivo1.
<pre>$rm -RI Imágenes/1998/</pre>
 
<source lang="bash">$ rm -RI Imágenes/1998/</source>
 
Elimina el directorio 1998 dentro de Imágenes preguntando cada 3 eliminaciones por estar <code>-I,</code> esta opción permite controlar equivocaciones. La opción <code>-i</code> hace una pregunta antes de eliminar cada archivo.
Elimina el directorio 1998 dentro de Imágenes preguntando cada 3 eliminaciones por estar <code>-I,</code> esta opción permite controlar equivocaciones. La opción <code>-i</code> hace una pregunta antes de eliminar cada archivo.
<blockquote>Usar <code>rm</code> con permisos de superusuario es peligroso cuando se están tratando archivos importantes como archivos de sistema o de configuración, si no se trata de un archivo dentro el directorio del usuario es mejor informarse de la función de un archivo antes de eliminarlo.</blockquote>
<blockquote>Usar <code>rm</code> con permisos de superusuario es peligroso cuando se están tratando archivos importantes como archivos de sistema o de configuración, si no se trata de un archivo dentro el directorio del usuario es mejor informarse de la función de un archivo antes de eliminarlo.</blockquote>
=== find<br/> ===
=== find<br/> ===


El comando para "encontrar" archivos más usado es find, este comando es muy potente ya que contiene una gran cantidad de opciones de búsqueda, sin embargo existen otros comandos como locate, whereis, type ó wich que también sirven para encontrar archivos u obtener información de otros archivos através de ellos.
El comando para "encontrar" archivos más usado es find, este comando es muy potente ya que contiene una gran cantidad de opciones de búsqueda, sin embargo existen otros comandos como locate, whereis, type ó wich que también sirven para encontrar archivos u obtener información de otros archivos através de ellos. <source lang="bash">find [ruta] [expresión]</source>
<pre>find [ruta] [expresión]</pre>
 
*<code>ruta →</code> Es el o los directorios donde se buscará el archivo.
*<code>ruta →</code> Es el o los directorios donde se buscará el archivo.
*<code>expresión →</code> Representa el criterio de búsqueda
*<code>expresión →</code> Representa el criterio de búsqueda
Línea 125: Línea 101:


Ejemplos:
Ejemplos:
<pre>$find /usr/include/ -name "*.h"</pre>
 
<source lang="bash">$ find /usr/include/ -name "*.h"</source>  
 
Encuentra todos los archivos que tiene terminan en ".h" dentro el directorio&nbsp;<code>/usr/include/</code>
Encuentra todos los archivos que tiene terminan en ".h" dentro el directorio&nbsp;<code>/usr/include/</code>


Adicionalmente existe la opción <code>-exec</code> que amplia las funcionalidades de find:
Adicionalmente existe la opción <code>-exec</code> que amplia las funcionalidades de find: <source lang="bash">find [ruta] [expresión] [-exec <comando> {} \;]</source> por ejemplo: <source lang="bash"># find /home/invitado/ -type f -name "*.txt" -exec cp --preserve {} ~/ \;</source> Primero encontrará todos los archivos simples con un nombre que acabe en ".txt" en /home/invitado/, después mediante <code>-exec</code> se ejecutará el comando <code>cp</code> que los copiará preservando sus premisos por usarse la opción&nbsp; <code>--preserve</code>. Usando <code>-exec</code>, <code>{}</code> representa la salida de&nbsp;&nbsp; <code>find</code> que puede ser "enviada" a otro comando en este caso&nbsp; <code>cp</code> como su primer argumento.
<pre>find [ruta] [expresión] [-exec <comando> {} \;]</pre>
 
por ejemplo:
Existe el comando <code>xargs</code> diseñado para tomar cada línea de salida de un comando anterior como argumento hacia otro comando (xargs y las tuberías " | " se describirán más adelante), pudiendo también usarlo conjuntamente con una tubería para hacer esta tarea: <source lang="bash">$ find /home/invitado -maxdepth 2 -type f -name "lis*" | xargs rm -i</source> Al encontrar los archivos en una profundiad de 2 directorios como máximo de todos los archivos que empiecen con "lis", con <code>xargs</code> cada linea de salida se enviará como argumento al comando <code>rm</code> que borrará estos archivos informando de lo que se hace por seguirle la opción <code>-i</code>
<pre># find /home/invitado/ -type f -name "*.txt" -exec cp --preserve {} ~/ \;</pre>
 
Primero encontrará todos los archivos simples con un nombre que acabe en ".txt" en /home/invitado/, después mediante <code>-exec</code> se ejecutará el comando <code>cp</code> que los copiará preservando sus premisos por usarse la opción&nbsp; <code>--preserve</code>. Usando <code>-exec</code>, <code>{}</code> representa la salida de&nbsp;&nbsp; <code>find</code> que puede ser "enviada" a otro comando en este caso&nbsp; <code>cp</code> como su primer argumento.
== Directorios Importantes<br/> ==
 
Es necesario tener un conocimiento acerca de la organización de archivos en GNU/Linux, existe un estándar en este sistema que mantiene organizados los archivos y sus funciones en directorios separados donde cada uno alberga archivos que cumplen ciertas funciones, este estándar es FHS (Filesystem Hierarchy Standard).


Existe el comando <code>xargs</code> diseñado para tomar cada línea de salida de un comando anterior como argumento hacia otro comando (xargs y las tuberías " | " se describirán más adelante), pudiendo también usarlo conjuntamente con una tubería para hacer esta tarea:
Todos los directorios en un parten de una misma raíz ( <code>/</code> ) y a grandes rasgos se ve así:
<pre>$ find /home/invitado -maxdepth 2 -type f -name "lis*" | xargs rm -i</pre>
Al encontrar los archivos en una profundiad de 2 directorios como máximo de todos los archivos que empiecen con "lis", con <code>xargs</code> cada linea de salida se enviará como argumento al comando <code>rm</code> que borrará estos archivos informando de lo que se hace por seguirle la opción <code>-i</code>


== Algunos Comodines<br/> ==
[[File:Fhs1.png|none|Fhs1.png]]


*,&nbsp;? , [], etc
Como se ve en el gŕafico la raíz " /&nbsp; " es&nbsp; el primer directorio y el que contiene a los demás. En la parte superior se ven las ramas principales de este árbol de directorios. Para entender entonces que contiene cada directorio describiremos uno a uno brevemente.


== Directorios Importantes<br/> ==
=== /bin<br/> ===
 
Contiene los programas ejecutables escenciales del sistema, entre estos estan comandos como&nbsp; <tt>ls, cp, cat,</tt> etc. Este es un directorio estático y no es usual encontrar grandes aplicaciones aquí.
 
=== /boot<br/> ===
 
Contiene archivos de arranque que vienen después del cargador de arranque. También esta situado aquí el kernel Linux.
 
=== /dev<br/> ===
 
Contiene archivos de dispositivos periféricos del sistema u otros archivos especiales.
 
El sistema identifica y'''gestiona dispositivos de hardware como si se tratarán de archivos '''y estos están en este directorio. Con los privilegios suficientes se pueden ver estos dispositivos leyendo estos archivos e incluso escribiendo en ellos.
 
=== /home<br/> ===
 
En este directorio se almacenan los archivos propios de usuarios, por ejemplo si se tienen dos usuarios en el sistema encontraremos los directorios /home/usuario1 y /home/usuario2. Es conveniente que este directorio tenga una partición aparte para salvaguardar los archivos de los usuarios en caso de desastres o de actualización de kernel.
 
=== /etc<br/> ===
 
Contiene archivos de configuración específicos del host del sistema. Un directorio con gran cantidad de información y configuraciones.
 
=== /root<br/> ===
 
Es el /home del usuario root.
 
=== /lib<br/> ===
 
Contiene bibliotecas compartidas críticas para programas alojados en /bin y /sbin, también bibliotecas para el kernel también llamado núcleo.
 
=== /media<br/> ===
 
Alberga los puntos de montaje de medios extraíbles como CD ROM, USB (pendrive), etc.
 
=== /mnt<br/> ===
 
Punto de montaje para dispositivos temporales como discos duros y particiones.
 
=== /proc<br/> ===
 
Un directorio en ''sistema de archivos virtual ''creado dinámicamente para proveer acceso a ciertos dispositivos de hardware que nos son accesibles vía /dev un ejemplo clásico es colocar el comando <code>cat /proc/cpuinfo</code>&nbsp; que muestra información del CPU. También contiene información acerca del Kernel en archivos de texto de sólo lectura y sus procesos.
 
=== /sbin<br/> ===
 
Al igual que <code>/bin</code> contiene programas ejecutables (binarios) escenciales pero que sólo pueden ser accedidos por el usuario root (superusuario), con permisos suficientes o con la contraseña de root.
 
=== /tmp<br/> ===
 
Alberga archivos temporales de programas.
 
=== /usr<br/> ===
 
Incluye los programas instalados por los usuarios, también contenido compartido.
 
==== /usr/bin<br/> ====
 
Contiene programas disponibles para todos los usuarios, estos no son programas escenciales y cuando instalamos programas los binarios generalmente se almacenan aquí.
 
==== /usr/lib<br/> ====
 
Contiene las bibliotecas compartidas de esos programas situados en &nbsp; <code>/usr/bin</code>
 
==== /usr/local<br/> ====
 
Este contiene también subdirectorios como <code>/usr/local/bin</code> y <code>/usr/local/lib</code>, su función es albergar programas que no son modificados por actualizaciones de software automáticas al acutualizar el sistema, por eso este es un buen directorio para albergar programas construidos desde su código fuente.
 
=== /opt<br/> ===
 
Es como <code>usr/local</code> sólo que se supone que aquí se deben colocar programas no usuales o comerciales (corregir).
 
=== /var<br/> ===
 
Contiene varios tipos de archivos de registros (logs), spool, archivos de email, etc. Este directorio es usualmente colocado en una partición aparte en equipos como servidores de email o noticias.


== Otros sitios de ayuda<br/> ==
== Otros sitios de ayuda<br/> ==


*[http://download.savannah.gnu.org/releases/lpi-manuals/ http://download.savannah.gnu.org/releases/lpi-manuals/] (manuales LPI libres)
*[http://download.savannah.gnu.org/releases/lpi-manuals/ http://download.savannah.gnu.org/releases/lpi-manuals/] (manuales LPI libres)
*[https://es.wikipedia.org/wiki/Filesystem_Hierarchy_Standard https://es.wikipedia.org/wiki/Filesystem_Hierarchy_Standard] (Estándar de jerarquía de sistema de archivos)


== Continuar con el curso<br/> ==
== Continuar con el curso<br/> ==


*⇒[http://wiki.hacklab.org.bo/index.php/N%C3%BAcleo_GNU/Linux#Contenido Sigue con este curso aquí]
*⇒[[Núcleo GNU/Linux#Contenido|Sigue con este curso aquí]]

Revisión actual - 13:23 6 sep 2015

El S.O: GNU/Linux es esencialmente una colección de archivos organizados.

Estos archivos se caracterizan por tener ciertos permisos y atributos que ayudan al sistema a informarse de su relevancia. Por eso, gestionar los archivos ya sean del sistema y usuario es una tarea crucial.

Los entornos gráficos de escritorio permiten la manipulación de archivos y permisos de archivos de manera básica. Sin embargo si por ejemplo queremos hacer gestión de archivos desde programas externos, scripts o aplicaciones escritas por nosotros mismos, es necesario aprender como se gestionan los archivos desde la línea de comandos  es decir, aprender a manejar e invocar a los programas que realizan estas tareas.

Consideraciones importantes

Al trabajar desde una línea de comandos existen símbolos que tienen significado al mostrarse en la pantalla. Los emuladores de terminal en la mayor parte de las distribuciones usan en la terminal bash. Si se abre una lo primero que se muestra es el prompt que bajo condiciones normales muestra lo siguiente:

invitado@gensu-D5:~$

Donde:

invitado = nombre del usuario ''logueado'' en esta terminal

@gensu-D5: = nombre del computador

Justo después del símbolo " : " viene la ubicación o directorio donde "apunta" la terminal en este caso el símbolo "~  " es equivalente a la carpeta propia del usuario que en este caso es /home/invitado

Finalmente viene el símbolo " $ " que significa que el usuario que controla esta terminal es un usuario con privilegios limitados tiene restricciones y no puede hacer cambios significativos al sistema.

Si el símbolo fuese " # " significaría que el usuario que controla esta terminal es un superusuario capaz de hacer cambios importantes en la computadora.

► Entonces los símbolos   $  y   #  indican que tipo de usuario tiene el control sobre la terminal al colocar comandos.

En muchas distribuciones se usa el comando sudo que permite realizar tareas como si se fuese otro usuario, se coloca sudo seguido del comando a ejecutarse y después de presionar enter se debe introducir la contraseña del usuario que autoriza las acciones.

Para introducir comandos como el usuario root que es el superusuario y tiene control total se puede hacer con sudo su, después introduciendo después la contraseña de root.  También se logra con su seguido del nombre de usuario (en este caso root o de otro superusuario)  y después la contraseña.

Comandos de gestión de archivos

Estos programas que realizan la gestión de archivos en sistemas tipo UNIX se llaman comandos de gestión de archivos, estos se usan para listar, copiar, borrar, mover y crear archivos y/o directorios.

ls

El comando ls viene de "listar" y lo que hace es listar los archivos de cierto directorio, es el que permite ver los nombres de los archivos y directorios. ls también puede mostrardetalles importantes de los archivos y tiene una gran caontidad de opciones. Su sintaxis es la siguiente

ls [opciones] [fichero ó directorio]

Para ver más opciones de este comando se escribe:  ls --help    ó    man ls

Si no se especifica opciones o ficheros ls lista de manera el contenido del directorio en él cual se encuentra actualmente la terminal.

ls es muy útil y tiene gran cantidad de opciones, algunas importantes son:

  • -l   Muestra un listado largo, esta opción permite también ver los permisos de cada archivo (se verá más adelante)
  • -a   Muestra también los archivos ocultos (que empiezan con ".")
  • -R Muestra recursivamente.
  •  -h    En combinación con otras opciiones como -l o -g, muestra el tamaño de cada fichero de modo entendible para el ser humano (K, M, G) bytes.

ls en combinación con  grep es una potente herramienta para ver archivos. Por ejemplo si escribimos:

$ ls -lah

Hará un listado de todos los archivos y directorios dentro el directorio actual con detalles de los permisos de cada uno y mostrando su tamaño de forma entendible. Si se aumenta -R el listado tambíen mostrará a los subdirectorios si existen. Por supuesto que también se puede usar así:

$ ls /usr/bin

Que mostrará  el  contenido dentro el duirectorio/usr/bin  que corresponde a los ejecutables de los programas del usuario.

cd

Este es el comando que se usa para poscisionarse en un directorio y probablemente cd viene  de de "change directory" (cambiar directorio) por eso es muy ampliamente usado.

Como dijimos antes al abrir una terminal esta usualmente "apunta" a cierto directorio que por lo general es ~ que es lo mismo que /home/usuario o la carpeta personal del usuario que abrió la terminal. Pero no todas las tareas se hacen en ese directorio es necesario moverse para eso esta cd cuya sintaxis es:

cd [opcion] [directorio]

Basta con escribir cd seguido del directorio para que la terminal ahora apunte a ese directorio, por ejemplo:

$ cd /var/lib

Algunos directorios no pueden accederse con cd siendo usuario estándar ($) si los permisos lo requieren será necesario logearse como superusuario o usar sudo cd [directorio]

cp

cp viene de copy (copiar) y sierve para eso, copiar archivos o directorios y la sintaxis es:

cp [opciones] fuente destino

Donde:

  • fuente   es uno o más archivos, aunque también puede ser un directorio si se usan ciertas opciones.
  • destino es un directorio a donde se copiarán los archivos fuente, el directorio destino debe existir.

Las opciones comunes usadas con cp son:

  • -R ó--recursive Actúa recursivamente, esto cuando fuente  son uno o más directorios, con esta opción copiará los archivos y directorios que contenga fuente.
  • -f ó --force Fuerza sobreescritura si en el directorio  destino se encontraran ficheros con el mismo nombre que los de  fuente.
  • -u ó --update Realiza la copia sólo si el archivo fuente es más nuevo que el archivo en el  directorio destino ó si este no existe en tal directorio.
  • -i ó--interactive Cada que encuentra archivos del mismo nombre se preguntará antes de sobreescribir.
  • -p ó--preserve De tener los privilegios de hacerlo, se conserva la pertenencia y permisos de los archivos fuenteal copiarlos a  destino, si no se usa esta opción, por defecto cp copia los archivos con los permisos y pertenencia estándar del usuario que usa cp.

Ejemplos:

$cp archivo1 archivo2

copia el archivo1 en el mismo directorio donde "esta" la terminal pero el nombre de la copia es archivo2.

$cp ~/dir2/dir3/archivo1 archivo2 ~/dir1/

Copia el ~/dir2/dir3/archivo1  y  archivo2 (qué esta en el directorio donde "apunta" la terminal) a ~/dir1/.

$ cp -R /var/games/ ~/

Copia todo el directorio más el contenido (si es posible) de /var/games a  ~/

cp también puede operar con enlaces.

mv

Se usa para mover archivos o directorios de un lugar a otro, para mover directorios con mv basta con indicar que es un directorio, esto se logra colocando al final el caracter " / " que la terminal interpreta como directorio por ejemplo:

$ mv Imágenes/Escuela/ Imágenes/2014/

Mueve la carpeta Imágenes/Escuela a la carpeta Imágenes/2014. La sintaxis de mv es similar a cp y las opciones comunes son también similares con la excepción de que --preserve , --archive y--recursive no aplican a mv. También se pueden usar varios argumentos para mover teniendo en cuenta que el último argumento será el destino, por ejemplo:

$ mv Imágenes/Escuela/ Imágenes/2014/ foto1.png /tmp/cookie1.c57MWz Documentos/carpeta1/

 rm

El comando para eliminar archivos es rm de "remove", al igual que cp y mv posee las mismas opciones a excepcción de --preserve, --archive o --update. Su sintaxis es:

rm [opciones] archivos

Ejemplos:

$rm archivo1

Elimina el archivo1.

$ rm -RI Imágenes/1998/

Elimina el directorio 1998 dentro de Imágenes preguntando cada 3 eliminaciones por estar -I, esta opción permite controlar equivocaciones. La opción -i hace una pregunta antes de eliminar cada archivo.

Usar rm con permisos de superusuario es peligroso cuando se están tratando archivos importantes como archivos de sistema o de configuración, si no se trata de un archivo dentro el directorio del usuario es mejor informarse de la función de un archivo antes de eliminarlo.

find

El comando para "encontrar" archivos más usado es find, este comando es muy potente ya que contiene una gran cantidad de opciones de búsqueda, sin embargo existen otros comandos como locate, whereis, type ó wich que también sirven para encontrar archivos u obtener información de otros archivos através de ellos.

find [ruta] [expresión]
  • ruta → Es el o los directorios donde se buscará el archivo.
  • expresión → Representa el criterio de búsqueda

Algunas opciones comunes en find son:

  • -name → Buscar por nombre de archivo seguido de un criterio de búsqueda, este criterio puede incluir comodines o solamente el nombre del archivo.
  • -size → Buscar por tamaño del archivo seguido de un número en bytes, se puede usar k para kilobytes.
  • -type → Buscar por tipo de fichero donde; f = archivo,d = directorio, l = enlace simbólico, etc (ver manual de find para más opciones)
  • -user → Buscar por usuario dueño del archivo seguido del ID de usuario.
  • -perm → Buscar por permiso específico seguido del permiso en número octal o cadena simbólica.
  • -maxdepth → Máxima profundidad de búsqueda, seguido de un número n se limita a sólo buscar en n directorios de profunidad, si fuese 1 buscaría en el directorio especificado sin entrar a ningún otro subdirectorio.

Ejemplos:

$ find /usr/include/ -name "*.h"

Encuentra todos los archivos que tiene terminan en ".h" dentro el directorio /usr/include/

Adicionalmente existe la opción -exec que amplia las funcionalidades de find:

find [ruta] [expresión] [-exec <comando> {} \;]

por ejemplo:

# find /home/invitado/ -type f -name "*.txt" -exec cp --preserve {} ~/ \;

Primero encontrará todos los archivos simples con un nombre que acabe en ".txt" en /home/invitado/, después mediante -exec se ejecutará el comando cp que los copiará preservando sus premisos por usarse la opción  --preserve. Usando -exec, {} representa la salida de   find que puede ser "enviada" a otro comando en este caso  cp como su primer argumento. Existe el comando xargs diseñado para tomar cada línea de salida de un comando anterior como argumento hacia otro comando (xargs y las tuberías " | " se describirán más adelante), pudiendo también usarlo conjuntamente con una tubería para hacer esta tarea:

$ find /home/invitado -maxdepth 2 -type f -name "lis*" | xargs rm -i

Al encontrar los archivos en una profundiad de 2 directorios como máximo de todos los archivos que empiecen con "lis", con xargs cada linea de salida se enviará como argumento al comando rm que borrará estos archivos informando de lo que se hace por seguirle la opción -i

Directorios Importantes

Es necesario tener un conocimiento acerca de la organización de archivos en GNU/Linux, existe un estándar en este sistema que mantiene organizados los archivos y sus funciones en directorios separados donde cada uno alberga archivos que cumplen ciertas funciones, este estándar es FHS (Filesystem Hierarchy Standard).

Todos los directorios en un parten de una misma raíz ( / ) y a grandes rasgos se ve así:

Fhs1.png

Como se ve en el gŕafico la raíz " /  " es  el primer directorio y el que contiene a los demás. En la parte superior se ven las ramas principales de este árbol de directorios. Para entender entonces que contiene cada directorio describiremos uno a uno brevemente.

/bin

Contiene los programas ejecutables escenciales del sistema, entre estos estan comandos como  ls, cp, cat, etc. Este es un directorio estático y no es usual encontrar grandes aplicaciones aquí.

/boot

Contiene archivos de arranque que vienen después del cargador de arranque. También esta situado aquí el kernel Linux.

/dev

Contiene archivos de dispositivos periféricos del sistema u otros archivos especiales.

El sistema identifica ygestiona dispositivos de hardware como si se tratarán de archivos y estos están en este directorio. Con los privilegios suficientes se pueden ver estos dispositivos leyendo estos archivos e incluso escribiendo en ellos.

/home

En este directorio se almacenan los archivos propios de usuarios, por ejemplo si se tienen dos usuarios en el sistema encontraremos los directorios /home/usuario1 y /home/usuario2. Es conveniente que este directorio tenga una partición aparte para salvaguardar los archivos de los usuarios en caso de desastres o de actualización de kernel.

/etc

Contiene archivos de configuración específicos del host del sistema. Un directorio con gran cantidad de información y configuraciones.

/root

Es el /home del usuario root.

/lib

Contiene bibliotecas compartidas críticas para programas alojados en /bin y /sbin, también bibliotecas para el kernel también llamado núcleo.

/media

Alberga los puntos de montaje de medios extraíbles como CD ROM, USB (pendrive), etc.

/mnt

Punto de montaje para dispositivos temporales como discos duros y particiones.

/proc

Un directorio en sistema de archivos virtual creado dinámicamente para proveer acceso a ciertos dispositivos de hardware que nos son accesibles vía /dev un ejemplo clásico es colocar el comando cat /proc/cpuinfo  que muestra información del CPU. También contiene información acerca del Kernel en archivos de texto de sólo lectura y sus procesos.

/sbin

Al igual que /bin contiene programas ejecutables (binarios) escenciales pero que sólo pueden ser accedidos por el usuario root (superusuario), con permisos suficientes o con la contraseña de root.

/tmp

Alberga archivos temporales de programas.

/usr

Incluye los programas instalados por los usuarios, también contenido compartido.

/usr/bin

Contiene programas disponibles para todos los usuarios, estos no son programas escenciales y cuando instalamos programas los binarios generalmente se almacenan aquí.

/usr/lib

Contiene las bibliotecas compartidas de esos programas situados en   /usr/bin

/usr/local

Este contiene también subdirectorios como /usr/local/bin y /usr/local/lib, su función es albergar programas que no son modificados por actualizaciones de software automáticas al acutualizar el sistema, por eso este es un buen directorio para albergar programas construidos desde su código fuente.

/opt

Es como usr/local sólo que se supone que aquí se deben colocar programas no usuales o comerciales (corregir).

/var

Contiene varios tipos de archivos de registros (logs), spool, archivos de email, etc. Este directorio es usualmente colocado en una partición aparte en equipos como servidores de email o noticias.

Otros sitios de ayuda

Continuar con el curso