The Funtoo Linux project has transitioned to "Hobby Mode" and this wiki is now read-only.
Difference between revisions of "User talk:Arlesy"
Line 150: | Line 150: | ||
$ ./myprog ~fred/fredsfile.txt | $ ./myprog ~fred/fredsfile.txt | ||
</pre> | </pre> | ||
== Usando comandos de Linux == | |||
=== Introduciendo ls === | |||
Ahora, echaremos un vistazo al comando ls. Es muy probable que ya esté familiarizado con ls y sabe que al escribirlo por sí mismo se lista el contenido del directorio de trabajo actual: | |||
<pre> | |||
$ cd /usr | |||
$ ls | |||
X11R6 doc i686-pc-linux-gnu lib man sbin ssl | |||
bin gentoo-x86 include libexec portage share tmp | |||
distfiles i686-linux info local portage.old src | |||
</pre> | |||
Al especificar la opción -a, puede ver todos los archivos de un directorio, incluidos los archivos ocultos: los que comienzan con (.). Como se puede ver en el ejemplo siguiente, ls -a revela los archivo . y .. directorio especial de enlaces: | |||
<pre> | |||
$ ls -a | |||
. bin gentoo-x86 include libexec portage share tmp | |||
.. distfiles i686-linux info local portage.old src | |||
X11R6 doc i686-pc-linux-gnu lib man sbin ssl | |||
</pre> | |||
=== Listados largos del directorio === | |||
También puede especificar uno o más archivos o directorios en la línea de comandos de ls. Si especifica un archivo, ls mostrará ese archivo solamente. Si especifica un directorio, ls mostrará el contenido del directorio. La opción -l resulta muy útil cuando necesita ver los permisos, la propiedad, la hora de modificación y la información de tamaño en su lista de directorios. | |||
En el ejemplo siguiente, usamos la opción -l para mostrar una lista completa de mi directorio /usr. | |||
<pre> | |||
$ ls -l /usr | |||
drwxr-xr-x 7 root root 168 Nov 24 14:02 X11R6 | |||
drwxr-xr-x 2 root root 14576 Dec 27 08:56 bin | |||
drwxr-xr-x 2 root root 8856 Dec 26 12:47 distfiles | |||
lrwxrwxrwx 1 root root 9 Dec 22 20:57 doc -> share/doc | |||
drwxr-xr-x 62 root root 1856 Dec 27 15:54 gentoo-x86 | |||
drwxr-xr-x 4 root root 152 Dec 12 23:10 i686-linux | |||
drwxr-xr-x 4 root root 96 Nov 24 13:17 i686-pc-linux-gnu | |||
drwxr-xr-x 54 root root 5992 Dec 24 22:30 include | |||
lrwxrwxrwx 1 root root 10 Dec 22 20:57 info -> share/info | |||
drwxr-xr-x 28 root root 13552 Dec 26 00:31 lib | |||
drwxr-xr-x 3 root root 72 Nov 25 00:34 libexec | |||
drwxr-xr-x 8 root root 240 Dec 22 20:57 local | |||
lrwxrwxrwx 1 root root 9 Dec 22 20:57 man -> share/man | |||
lrwxrwxrwx 1 root root 11 Dec 8 07:59 portage -> gentoo-x86/ | |||
drwxr-xr-x 60 root root 1864 Dec 8 07:55 portage.old | |||
drwxr-xr-x 3 root root 3096 Dec 22 20:57 sbin | |||
drwxr-xr-x 46 root root 1144 Dec 24 15:32 share | |||
drwxr-xr-x 8 root root 328 Dec 26 00:07 src | |||
drwxr-xr-x 6 root root 176 Nov 24 14:25 ssl | |||
lrwxrwxrwx 1 root root 10 Dec 22 20:57 tmp -> ../var/tmp | |||
</pre> | |||
La primera columna muestra información de permisos para cada elemento del listado. Voy a explicar cómo interpretar esta información más adelante. La siguiente columna muestra el número de enlaces a cada objeto del sistema de archivos, que pasaremos por alto ahora, pero volveremos a ello más tarde. Las columnas tercera y cuarta listan el propietario y el grupo, respectivamente. La quinta columna muestra el tamaño del objeto. La sexta columna es el tiempo de "última modificación" o "mtime" del objeto. La última columna es el nombre del objeto. Si el archivo es un enlace simbólico, verá un apuntador -> y la ruta a la que apunta el enlace simbólico. | |||
=== Mirando los directorios === | |||
A veces, usted querrá mirar un directorio, en lugar de dentro de él. Para estas situaciones, puede especificar la opción -d, que le dirá a ls que busque en cualquier directorio que normalmente buscaría en su interior: | |||
<pre> | |||
$ ls -dl /usr /usr/bin /usr/X11R6/bin ../share | |||
drwxr-xr-x 4 root root 96 Dec 18 18:17 ../share | |||
drwxr-xr-x 17 root root 576 Dec 24 09:03 /usr | |||
drwxr-xr-x 2 root root 3192 Dec 26 12:52 /usr/X11R6/bin | |||
drwxr-xr-x 2 root root 14576 Dec 27 08:56 /usr/bin | |||
</pre> | |||
=== Listados recursivos e inode === | |||
Así que puede usar -d para buscar en un directorio, pero también puede usar -R para hacer lo contrario: no sólo mirar dentro de un directorio, sino recursivamente buscar dentro de todos los archivos y directorios dentro de ese directorio! No incluiremos ningún ejemplo de salida para esta opción (ya que generalmente es voluminosa), pero es posible que desee probar algunos comandos ls -R y ls -Rl para obtener una idea de cómo funciona. | |||
Finalmente, la opción ls -i se puede usar para mostrar los números de inodo de los objetos del sistema de archivos en el listado: | |||
<pre> | |||
$ ls -i /usr | |||
1409 X11R6 314258 i686-linux 43090 libexec 13394 sbin | |||
1417 bin 1513 i686-pc-linux-gnu 5120 local 13408 share | |||
8316 distfiles 1517 include 776 man 23779 src | |||
43 doc 1386 info 93892 portage 36737 ssl | |||
70744 gentoo-x86 1585 lib 5132 portage.old 784 tmp | |||
</pre> | |||
=== Comprensión de los inodos === | |||
A cada objeto de un sistema de archivos se le asigna un índice único, denominado número de inodo. Esto puede parecer trivial, pero entender los inodes es esencial para entender muchas operaciones del sistema de archivos. Por ejemplo, considere los enlaces . y .. que aparecen en cada directorio. Para entender completamente lo que realmente es un directorio, primero echaremos un vistazo al número de inodo de /usr/local: | |||
<pre> | |||
$ ls -id /usr/local | |||
5120 /usr/local | |||
</pre> | |||
El directorio /usr/local tiene un número de inodo de 5120. Ahora echemos un vistazo al número de inodo de /usr/local/bin/ ..: | |||
<pre> | |||
$ ls -id /usr/local/bin/.. | |||
5120 /usr/local/bin/.. | |||
</pre> | |||
Como puede ver, /usr/local/bin/ tiene el mismo número de inode que /usr/local! Así es como podemos enfrentarnos a esta sorprendente revelación. En el pasado, hemos considerado a / usr / local como el propio directorio. Ahora, descubrimos que el inode 5120 es de hecho el directorio, y hemos encontrado dos entradas de directorio (llamadas "enlaces") que apuntan a este inodo. Ambos /usr/local y /usr/local/bin/.. son enlaces a inode 5120. Aunque inode 5120 sólo existe en un lugar en el disco, varias cosas enlazan a él. Inode 5120 es la entrada real en el disco. | |||
De hecho, podemos ver el número total de veces que el inodo 5120 se referenciado usando el comando <pre>ls -dl</pre>: | |||
<pre> | |||
$ ls -dl /usr/local | |||
drwxr-xr-x 8 root root 240 Dec 22 20:57 /usr/local | |||
</pre> | |||
Si echamos un vistazo a la segunda columna de la izquierda, vemos que el directorio / usr / local (inode 5120) se hace referencia ocho veces. En mi sistema, aquí están los varios caminos que hacen referencia a este inodo: | |||
<pre> | |||
/usr/local | |||
/usr/local/. | |||
/usr/local/bin/.. | |||
/usr/local/games/.. | |||
/usr/local/lib/.. | |||
/usr/local/sbin/.. | |||
/usr/local/share/.. | |||
/usr/local/src/.. | |||
</pre> | |||
=== mkdir === | |||
Echemos un rápido vistazo al comando mkdir, que se puede utilizar para crear nuevos directorios. El siguiente ejemplo crea tres nuevos directorios, tic, tac y toe, todos bajo <pre> | |||
$ cd /tmp | |||
$ mkdir tic tac toe | |||
</pre> | |||
De forma predeterminada, el comando mkdir no crea directorios principales para usted; toda la ruta desde el primer elemento hasta el último necesita existir. Por lo tanto, si desea crear los directorios ganados won/der/ful, necesitará emitir tres comandos mkdir independientes: | |||
<pre> | |||
$ mkdir won/der/ful | |||
mkdir: cannot create directory `won/der/ful': No such file or directory | |||
$ mkdir won | |||
$ mkdir won/der | |||
$ mkdir won/der/ful | |||
</pre> | |||
Sin embargo, mkdir tiene una opción práctica -p que le dice a mkdir que cree cualquier directorio padre faltante, como puede ver aquí: | |||
<pre> | |||
$ mkdir -p easy/as/pie | |||
</pre> | |||
En general, es bastante sencillo. Para obtener más información sobre el comando mkdir, escriba man mkdir para leer la página de manual. Esto funcionará para casi todos los comandos cubiertos aquí (por ejemplo, man ls), excepto para cd, que está incorporado en bash. | |||
=== touch === | |||
Ahora, vamos a echar un vistazo rápido a los comandos cp y mv, utilizados para copiar, cambiar el nombre y mover archivos y directorios. Para comenzar esta descripción, primero usaremos el comando touch para crear un archivo en /tmp: | |||
<pre> | |||
$ cd /tmp | |||
$ touch copyme | |||
</pre> | |||
El comando touch actualiza el "mtime" de un archivo si existe (recuerde la sexta columna en la salida ls -l). Si el archivo no existe, se creará un nuevo archivo vacío. Ahora debe tener un archivo /tmp/copyme con un tamaño de cero. | |||
=== echo === | |||
Ahora que el archivo existe, vamos a agregar algunos datos al archivo. Podemos hacerlo usando el comando echo, que toma sus argumentos y los imprime a la salida estándar. En primer lugar, el comando de eco en sí mismo: | |||
<pre> | |||
$ echo "firstfile" | |||
firstfile | |||
</pre> | |||
Ahora, el mismo comando de eco con redirección de salida: | |||
<pre> | |||
$ echo "firstfile" > copyme | |||
</pre> | |||
El signo mayor que indica al shell que escriba la salida de eco en un archivo llamado copyme. Este archivo se creará si no existe y se sobrescribirá si existe. Escribiendo ls -l, podemos ver que el archivo copyme tiene 10 bytes de largo, ya que contiene la palabra firstfile y el caracter newline: | |||
<span style="color:green">ls -l</span>, we can see that the copyme file is 10 bytes long, since it contains the word firstfile and the newline character: | |||
<pre> | |||
$ ls -l copyme | |||
-rw-r--r-- 1 root root 10 Dec 28 14:13 copyme | |||
</pre> | |||
=== cat y cp === | |||
Para mostrar el contenido del archivo en el terminal, utilice el comando cat: | |||
<pre> | |||
$ cat copyme | |||
firstfile | |||
</pre> | |||
Ahora, podemos usar una invocación básica del comando cp para crear un archivo copiedme copiado del archivo original: | |||
<pre> | |||
$ cp copyme copiedme | |||
</pre> | |||
Tras la investigación, encontramos que son archivos verdaderamente separados; sus números de inodo son diferentes: | |||
<pre> | |||
$ ls -i copyme copiedme | |||
648284 copiedme 650704 copyme | |||
</pre> | |||
=== mv === | |||
Ahora, vamos a usar el comando mv para cambiar el nombre de "copiedme" a "movedme". El número de inodo permanecerá igual; sin embargo, el nombre de archivo que apunta al inodo cambiará. | |||
<pre> | |||
$ mv copiedme movedme | |||
$ ls -i movedme | |||
648284 movedme | |||
</pre> | |||
El número de inodo de un archivo movido permanecerá igual mientras el archivo de destino resida en el mismo sistema de archivos que el archivo de origen. Echaremos un vistazo a los sistemas de archivos en Fundamentos de Linux parte 3 de esta serie de tutoriales. | |||
Mientras hablamos de mv, veamos otra forma de usar este comando. mv, además de permitirnos cambiar el nombre de los archivos, también nos permite mover uno o más archivos a otra ubicación en la jerarquía de directorios. Por ejemplo, para mover /var/tmp/myfile.txt a /home/drobbins (que pasa a ser mi directorio personal), podría escribir: | |||
<pre> | |||
$ mv /var/tmp/myfile.txt /home/drobbins | |||
</pre> | |||
Después de escribir este comando, myfile.txt se moverá a /home/drobbins/myfile.txt. Y si /home/drobbins está en un sistema de archivos diferente de /var/tmp, el comando mv controlará la copia de myfile.txt al nuevo sistema de archivos y lo borrará del antiguo sistema de archivos. Como se puede adivinar, cuando myfile.txt se mueve entre sistemas de archivos, myfile.txt en la nueva ubicación tendrá un nuevo número de inodo. Esto se debe a que cada sistema de archivos tiene su propio conjunto independiente de números de inodo. | |||
También podemos usar el comando mv para mover varios archivos a un único directorio de destino. Por ejemplo, para mover myfile1.txt y myarticle3.txt a /home/drobbins, podría escribir: | |||
<pre> | |||
$ mv /var/tmp/myfile1.txt /var/tmp/myarticle3.txt /home/drobbins | |||
</pre> | |||
== Creando Enlaces y Removiendo Archivos == |
Revision as of 16:53, August 12, 2017
Arlesy (talk) 09:59, August 12, 2017 (MDT) Inicio de traducción del curso Fundamentos de Linux, Parte 1
Antes de empezar
Acerca de este tutorial
Bienvenido a "Fundamentos de Linux," el primero de sus tutoriales hecho para prepararlo para el examen 101 de Linux Professional Institute's. En este tutorial, te presentamos a bash (el shell Linux estándar), te mostraremos cómo aprovechar al máximo los comandos estándar de Linux, como ls, cp y mv, explicar inodes, enlaces duros y simbólicos, y mucho más. Al final de este tutorial, tendrá una base sólida en los fundamentos de Linux e incluso estará listo para comenzar a aprender algunas tareas básicas de administración de sistemas Linux. Al final de esta serie de tutoriales (ocho en total), tendrá el conocimiento que necesita para convertirse en un Administrador de Sistemas Linux y estará listo para obtener una certificación LPIC Level 1 del Linux Professional Institute si así lo desea.
Este tutorial en particular (Parte 1) es ideal para aquellos que son nuevos en Linux, o aquellos que quieren revisar o mejorar su comprensión de conceptos fundamentales de Linux como copiar y mover archivos, creando vínculos simbólicos y vínculos duros, y usando comandos de procesamiento de texto estándar de Linux junto con tuberías y redirección. En el camino, vamos a compartir un montón de consejos y trucos para mantener el tutorial sustancioso y práctico, incluso para aquellos con una buena cantidad de experiencia previa de Linux. Para los principiantes, gran parte de este material será nuevo, pero los usuarios más experimentados de Linux pueden encontrar este tutorial como una gran forma de redondear sus habilidades fundamentales de Linux.
Para aquellos que han tomado la versión 1 de este tutorial por razones distintas a la preparación para el examen LPI, es probable que no necesite tomar esta.
Introducción a bash
El shell
Si has utilizado un sistema Linux, sabes que cuando inicias sesión, te recibe un mensaje que se parece a esto:
user $
El indicador particular que ve puede verse muy diferente. Puede contener el nombre de host del sistema, el nombre del directorio de trabajo actual o ambos. Pero independientemente de lo que su mensaje muestre, hay una cosa cierta. El programa que imprimió ese mensaje se denomina "shell", y es muy probable que su shell particular sea un programa llamado bash.
¿Está ejecutando bash?
Puede comprobar si está ejecutando bash
escribiendo:
user $ echo $ SHELL /bin/bash
Si la línea anterior le dio un error o no respondió de manera similar a nuestro ejemplo, puede estar ejecutando un shell que no sea bash. En ese caso, la mayor parte de este tutorial todavía debe aplicarse, pero sería ventajoso que usted cambie a bash para una buena preparación del examen 101.
Acerca de bash
Bash, un acrónimo de "Bourne-again shell", es el shell por defecto en la mayoría de los sistemas Linux. El trabajo de la shell es obedecer sus comandos para que pueda interactuar con su sistema Linux. Cuando haya terminado de introducir los comandos, puede indicar al shell que salga o cierre la sesión, momento en el que se le devolverá a un indicador de inicio de sesión.
Por cierto, también puedes cerrar la sesión pulsando control-D en el prompt de bash.
Usando "cd"
Como usted probablemente ha encontrado, mirar la salida de bash no es la cosa más emocionante en el mundo. Por lo tanto, vamos a empezar a usar bash para navegar por nuestro sistema de archivos. En el indicador, escriba lo siguiente (sin el $
):
user $ cd /
Acabamos de decirle a bash que quieres trabajar en /, también conocido como el directorio raíz; todos los directorios en el sistema forman un árbol, y / se considera la parte superior de este árbol, o la raíz. cd establece el directorio en el que está trabajando actualmente, también conocido como el "directorio de trabajo actual".
Paths(Rutas)
Para ver el directorio de trabajo actual de bash, puede escribir:
user $ pwd user $ /
En el ejemplo anterior, el argumento / a cd se llama ruta. Le dice a cd dónde queremos ir. En particular, el argumento / es una ruta absoluta, lo que significa que especifica una ubicación relativa a la raíz del árbol del sistema de archivos. Rutas absolutas
Aquí hay otras rutas absolutas:
/dev /usr /usr/bin /usr/local/bin
Como puede ver, la única cosa que todos los rutas absolutas tienen en común es que comienzan con /. Con una ruta de acceso a /usr/local/bin, estamos diciendo a cd que entre en el directorio /, a continuación al directorio usr, luego local y bin. Las rutas absolutas se evalúan siempre comenzando en / primero.
Rutas relativas
El otro tipo de ruta se llama una ruta relativa. Bash, cd y otros comandos siempre interpretan estas rutas en relación con el directorio actual. Las rutas relativas nunca comienzan con un /. Por lo tanto, si estamos en /usr:
user $ cd /usr
Entonces, podemos usar una ruta relativa para cambiar al directorio /usr/local/bin:
user $ cd local/bin user $ pwd /usr/local/bin
Utilizando ..
Las rutas relativas también pueden contener uno o más directorios. El directorio .. es un directorio especial que apunta al directorio padre. Así, continuando desde el ejemplo anterior:
$ pwd /usr/local/bin $ cd .. $ pwd /usr/local
Como puede ver, nuestro directorio actual es ahora /usr/local. Pudimos ir "al revés" un directorio, relativo al directorio actual en el que estábamos.
Además, también podemos añadir .. a una ruta relativa existente, lo que nos permite entrar en un directorio que está junto a uno en el que ya estamos, por ejemplo:
$ pwd /usr/local $ cd ../share $ pwd /usr/share
Ejemplos de ruta relativa
Las rutas relativas pueden ser bastante complejas. Aquí hay algunos ejemplos, todos sin el directorio de destino resultante mostrado. Trate de averiguar dónde terminará después de escribir estos comandos:
$ cd /bin $ cd ../usr/share/zoneinfo $ cd /usr/X11R6/bin $ cd ../lib/X11 $ cd /usr/bin $ cd ../bin/../bin
Ahora, probarlos y ver si los tienes bien :)
Entendiendo el "."
Antes de terminar nuestra cobertura de cd, hay algunas cosas más que necesito mencionar. En primer lugar, hay otro directorio especial llamado., Que significa "el directorio actual". Aunque este directorio no se utiliza con el comando cd, a menudo se utiliza para ejecutar algún programa en el directorio actual, de la siguiente manera:
$ ./myprog
En el ejemplo anterior, se ejecutará el ejecutable myprog residente en el directorio de trabajo actual.
cd y el directorio de inicio
Si queremos cambiar a nuestro directorio personal, podríamos escribir:
$ cd
Sin argumentos, cd cambiará a su directorio de inicio, que es /root para el superusuario y normalmente /home/nombre de usuario para un usuario normal. Pero ¿qué pasa si queremos especificar un archivo en nuestro directorio personal? Tal vez queramos pasar un argumento de archivo al comando myprog. Si el archivo reside en nuestro directorio personal, podemos escribir:
$ ./myprog /home/drobbins/myfile.txt
Sin embargo, usar un camino absoluto como ese no siempre es conveniente. Afortunadamente, podemos usar el carácter ~ (tilde) para hacer lo mismo:
$ ./myprog ~/myfile.txt
Directorios de inicio de otros usuarios
Bash expandirá un solo ~ para apuntar a su directorio personal, pero también puede usarlo para apuntar a los directorios de inicio de otros usuarios. Por ejemplo, si queremos hacer referencia a un archivo llamado fredsfile.txt en el directorio personal de Fred, podríamos escribir:
$ ./myprog ~fred/fredsfile.txt
Usando comandos de Linux
Introduciendo ls
Ahora, echaremos un vistazo al comando ls. Es muy probable que ya esté familiarizado con ls y sabe que al escribirlo por sí mismo se lista el contenido del directorio de trabajo actual:
$ cd /usr $ ls X11R6 doc i686-pc-linux-gnu lib man sbin ssl bin gentoo-x86 include libexec portage share tmp distfiles i686-linux info local portage.old src
Al especificar la opción -a, puede ver todos los archivos de un directorio, incluidos los archivos ocultos: los que comienzan con (.). Como se puede ver en el ejemplo siguiente, ls -a revela los archivo . y .. directorio especial de enlaces:
$ ls -a . bin gentoo-x86 include libexec portage share tmp .. distfiles i686-linux info local portage.old src X11R6 doc i686-pc-linux-gnu lib man sbin ssl
Listados largos del directorio
También puede especificar uno o más archivos o directorios en la línea de comandos de ls. Si especifica un archivo, ls mostrará ese archivo solamente. Si especifica un directorio, ls mostrará el contenido del directorio. La opción -l resulta muy útil cuando necesita ver los permisos, la propiedad, la hora de modificación y la información de tamaño en su lista de directorios.
En el ejemplo siguiente, usamos la opción -l para mostrar una lista completa de mi directorio /usr.
$ ls -l /usr drwxr-xr-x 7 root root 168 Nov 24 14:02 X11R6 drwxr-xr-x 2 root root 14576 Dec 27 08:56 bin drwxr-xr-x 2 root root 8856 Dec 26 12:47 distfiles lrwxrwxrwx 1 root root 9 Dec 22 20:57 doc -> share/doc drwxr-xr-x 62 root root 1856 Dec 27 15:54 gentoo-x86 drwxr-xr-x 4 root root 152 Dec 12 23:10 i686-linux drwxr-xr-x 4 root root 96 Nov 24 13:17 i686-pc-linux-gnu drwxr-xr-x 54 root root 5992 Dec 24 22:30 include lrwxrwxrwx 1 root root 10 Dec 22 20:57 info -> share/info drwxr-xr-x 28 root root 13552 Dec 26 00:31 lib drwxr-xr-x 3 root root 72 Nov 25 00:34 libexec drwxr-xr-x 8 root root 240 Dec 22 20:57 local lrwxrwxrwx 1 root root 9 Dec 22 20:57 man -> share/man lrwxrwxrwx 1 root root 11 Dec 8 07:59 portage -> gentoo-x86/ drwxr-xr-x 60 root root 1864 Dec 8 07:55 portage.old drwxr-xr-x 3 root root 3096 Dec 22 20:57 sbin drwxr-xr-x 46 root root 1144 Dec 24 15:32 share drwxr-xr-x 8 root root 328 Dec 26 00:07 src drwxr-xr-x 6 root root 176 Nov 24 14:25 ssl lrwxrwxrwx 1 root root 10 Dec 22 20:57 tmp -> ../var/tmp
La primera columna muestra información de permisos para cada elemento del listado. Voy a explicar cómo interpretar esta información más adelante. La siguiente columna muestra el número de enlaces a cada objeto del sistema de archivos, que pasaremos por alto ahora, pero volveremos a ello más tarde. Las columnas tercera y cuarta listan el propietario y el grupo, respectivamente. La quinta columna muestra el tamaño del objeto. La sexta columna es el tiempo de "última modificación" o "mtime" del objeto. La última columna es el nombre del objeto. Si el archivo es un enlace simbólico, verá un apuntador -> y la ruta a la que apunta el enlace simbólico.
Mirando los directorios
A veces, usted querrá mirar un directorio, en lugar de dentro de él. Para estas situaciones, puede especificar la opción -d, que le dirá a ls que busque en cualquier directorio que normalmente buscaría en su interior:
$ ls -dl /usr /usr/bin /usr/X11R6/bin ../share drwxr-xr-x 4 root root 96 Dec 18 18:17 ../share drwxr-xr-x 17 root root 576 Dec 24 09:03 /usr drwxr-xr-x 2 root root 3192 Dec 26 12:52 /usr/X11R6/bin drwxr-xr-x 2 root root 14576 Dec 27 08:56 /usr/bin
Listados recursivos e inode
Así que puede usar -d para buscar en un directorio, pero también puede usar -R para hacer lo contrario: no sólo mirar dentro de un directorio, sino recursivamente buscar dentro de todos los archivos y directorios dentro de ese directorio! No incluiremos ningún ejemplo de salida para esta opción (ya que generalmente es voluminosa), pero es posible que desee probar algunos comandos ls -R y ls -Rl para obtener una idea de cómo funciona.
Finalmente, la opción ls -i se puede usar para mostrar los números de inodo de los objetos del sistema de archivos en el listado:
$ ls -i /usr 1409 X11R6 314258 i686-linux 43090 libexec 13394 sbin 1417 bin 1513 i686-pc-linux-gnu 5120 local 13408 share 8316 distfiles 1517 include 776 man 23779 src 43 doc 1386 info 93892 portage 36737 ssl 70744 gentoo-x86 1585 lib 5132 portage.old 784 tmp
Comprensión de los inodos
A cada objeto de un sistema de archivos se le asigna un índice único, denominado número de inodo. Esto puede parecer trivial, pero entender los inodes es esencial para entender muchas operaciones del sistema de archivos. Por ejemplo, considere los enlaces . y .. que aparecen en cada directorio. Para entender completamente lo que realmente es un directorio, primero echaremos un vistazo al número de inodo de /usr/local:
$ ls -id /usr/local 5120 /usr/local
El directorio /usr/local tiene un número de inodo de 5120. Ahora echemos un vistazo al número de inodo de /usr/local/bin/ ..:
$ ls -id /usr/local/bin/.. 5120 /usr/local/bin/..
Como puede ver, /usr/local/bin/ tiene el mismo número de inode que /usr/local! Así es como podemos enfrentarnos a esta sorprendente revelación. En el pasado, hemos considerado a / usr / local como el propio directorio. Ahora, descubrimos que el inode 5120 es de hecho el directorio, y hemos encontrado dos entradas de directorio (llamadas "enlaces") que apuntan a este inodo. Ambos /usr/local y /usr/local/bin/.. son enlaces a inode 5120. Aunque inode 5120 sólo existe en un lugar en el disco, varias cosas enlazan a él. Inode 5120 es la entrada real en el disco.
De hecho, podemos ver el número total de veces que el inodo 5120 se referenciado usando el comando
ls -dl
:
$ ls -dl /usr/local drwxr-xr-x 8 root root 240 Dec 22 20:57 /usr/local
Si echamos un vistazo a la segunda columna de la izquierda, vemos que el directorio / usr / local (inode 5120) se hace referencia ocho veces. En mi sistema, aquí están los varios caminos que hacen referencia a este inodo:
/usr/local /usr/local/. /usr/local/bin/.. /usr/local/games/.. /usr/local/lib/.. /usr/local/sbin/.. /usr/local/share/.. /usr/local/src/..
mkdir
Echemos un rápido vistazo al comando mkdir, que se puede utilizar para crear nuevos directorios. El siguiente ejemplo crea tres nuevos directorios, tic, tac y toe, todos bajo
$ cd /tmp $ mkdir tic tac toe
De forma predeterminada, el comando mkdir no crea directorios principales para usted; toda la ruta desde el primer elemento hasta el último necesita existir. Por lo tanto, si desea crear los directorios ganados won/der/ful, necesitará emitir tres comandos mkdir independientes:
$ mkdir won/der/ful mkdir: cannot create directory `won/der/ful': No such file or directory $ mkdir won $ mkdir won/der $ mkdir won/der/ful
Sin embargo, mkdir tiene una opción práctica -p que le dice a mkdir que cree cualquier directorio padre faltante, como puede ver aquí:
$ mkdir -p easy/as/pie
En general, es bastante sencillo. Para obtener más información sobre el comando mkdir, escriba man mkdir para leer la página de manual. Esto funcionará para casi todos los comandos cubiertos aquí (por ejemplo, man ls), excepto para cd, que está incorporado en bash.
touch
Ahora, vamos a echar un vistazo rápido a los comandos cp y mv, utilizados para copiar, cambiar el nombre y mover archivos y directorios. Para comenzar esta descripción, primero usaremos el comando touch para crear un archivo en /tmp:
$ cd /tmp $ touch copyme
El comando touch actualiza el "mtime" de un archivo si existe (recuerde la sexta columna en la salida ls -l). Si el archivo no existe, se creará un nuevo archivo vacío. Ahora debe tener un archivo /tmp/copyme con un tamaño de cero.
echo
Ahora que el archivo existe, vamos a agregar algunos datos al archivo. Podemos hacerlo usando el comando echo, que toma sus argumentos y los imprime a la salida estándar. En primer lugar, el comando de eco en sí mismo:
$ echo "firstfile" firstfile
Ahora, el mismo comando de eco con redirección de salida:
$ echo "firstfile" > copyme
El signo mayor que indica al shell que escriba la salida de eco en un archivo llamado copyme. Este archivo se creará si no existe y se sobrescribirá si existe. Escribiendo ls -l, podemos ver que el archivo copyme tiene 10 bytes de largo, ya que contiene la palabra firstfile y el caracter newline:
ls -l, we can see that the copyme file is 10 bytes long, since it contains the word firstfile and the newline character:
$ ls -l copyme -rw-r--r-- 1 root root 10 Dec 28 14:13 copyme
cat y cp
Para mostrar el contenido del archivo en el terminal, utilice el comando cat:
$ cat copyme firstfile
Ahora, podemos usar una invocación básica del comando cp para crear un archivo copiedme copiado del archivo original:
$ cp copyme copiedme
Tras la investigación, encontramos que son archivos verdaderamente separados; sus números de inodo son diferentes:
$ ls -i copyme copiedme 648284 copiedme 650704 copyme
mv
Ahora, vamos a usar el comando mv para cambiar el nombre de "copiedme" a "movedme". El número de inodo permanecerá igual; sin embargo, el nombre de archivo que apunta al inodo cambiará.
$ mv copiedme movedme $ ls -i movedme 648284 movedme
El número de inodo de un archivo movido permanecerá igual mientras el archivo de destino resida en el mismo sistema de archivos que el archivo de origen. Echaremos un vistazo a los sistemas de archivos en Fundamentos de Linux parte 3 de esta serie de tutoriales.
Mientras hablamos de mv, veamos otra forma de usar este comando. mv, además de permitirnos cambiar el nombre de los archivos, también nos permite mover uno o más archivos a otra ubicación en la jerarquía de directorios. Por ejemplo, para mover /var/tmp/myfile.txt a /home/drobbins (que pasa a ser mi directorio personal), podría escribir:
$ mv /var/tmp/myfile.txt /home/drobbins
Después de escribir este comando, myfile.txt se moverá a /home/drobbins/myfile.txt. Y si /home/drobbins está en un sistema de archivos diferente de /var/tmp, el comando mv controlará la copia de myfile.txt al nuevo sistema de archivos y lo borrará del antiguo sistema de archivos. Como se puede adivinar, cuando myfile.txt se mueve entre sistemas de archivos, myfile.txt en la nueva ubicación tendrá un nuevo número de inodo. Esto se debe a que cada sistema de archivos tiene su propio conjunto independiente de números de inodo.
También podemos usar el comando mv para mover varios archivos a un único directorio de destino. Por ejemplo, para mover myfile1.txt y myarticle3.txt a /home/drobbins, podría escribir:
$ mv /var/tmp/myfile1.txt /var/tmp/myarticle3.txt /home/drobbins