02 Capitulo2
02 Capitulo2
Copiar, mover, crear, eliminar y organizar archivos mientras se trabaja desde el aviso de
Objetivo
la shell Bash.
Objetivos
Tras finalizar esta sección, los estudiantes deberían entender el diseño y la organización
fundamentales del sistema de archivos, y la ubicación de los tipos de archivo clave.
Todos los archivos de un sistema Linux se guardan en sistemas de archivos que están organizados
en un árbol de directorios invertido individual conocido como jerarquía de sistema de archivos. Este
árbol está invertido porque se dice que la raíz del árbol está en la parte de arriba de la jerarquía y
las ramas de los directorios y subdirectorios se extienden debajo de root.
Figura 2.1: Directorios del sistema de archivos importantes en Red Hat Enterprise Linux 7
El directorio / es el directorio root que está en la parte superior de la jerarquía del sistema de
archivos. El carácter / también se usa como un separador de directorio en los nombres de archivo.
Por ejemplo, si etc es un subdirectorio del directorio /, podemos llamar a ese directorio /etc. De la
misma manera, si el directorio /etc contiene un archivo con el nombre issue, podemos referirnos a
ese archivo como /etc/issue.
Los subdirectorios de / se usan con fines estandarizados para organizar archivos por tipo y objetivo.
Esto facilita la posibilidad de encontrar archivos. Por ejemplo, en el directorio root, el subdirectorio
/boot se usa para guardar archivos que se necesitan para arrancar el sistema.
nota
Los siguientes términos se encuentran en la descripción de los contenidos del directorio del sistema
de archivos:
- estático es el contenido que no se modifica hasta que se edita o reconfigura en forma explícita.
- dinámico o variable es el contenido que, por lo general, se modifica o adjunta mediante procesos activos.
- persistente es el contenido, en particular los parámetros de configuración, que se mantiene después de
un arranque nuevo.
- tiempo de ejecución es el contenido específico de un proceso o sistema o los atributos borrados durante
un arranque nuevo.
La siguiente tabla enumera algunos de los directorios más importantes del sistema por nombre y
objetivo.
Ubicación Propósito
Software instalado, bibliotecas compartidas, incluye archivos y datos de programa estáticos de solo
lectura. Los subdirectorios importantes incluyen:
Datos variables específicos de este sistema que deberían conservarse entre los arranques. Los archivos
/var que cambian en forma dinámica (por ejemplo, bases de datos, directorios caché, archivos de registro,
documentos en cola de impresión y contenido de sitio web) pueden encontrarse en /var.
Datos de tiempo de ejecución para procesos que se iniciaron desde el último arranque. Esto incluye
archivos de ID de proceso y archivos de bloqueo, entre otros elementos. Los contenidos de este directorio
/run
se vuelven a crear en el arranque nuevo. (Este directorio consolida /var/run y /var/lock de versiones
anteriores de Red Hat Enterprise Linux).
Los directorios principales son aquellos donde los usuarios habituales guardan sus datos personales y los
/home
archivos de configuración.
Es un espacio con capacidad de escritura por parte de cualquier usuario del sistema para archivos
temporales. Los archivos a los que no se haya accedido, y que no se hayan cambiado ni modificado durante
/tmp 10 días se eliminan de este directorio automáticamente. Existe otro directorio temporal, el /var/tmp, en
el que los archivos que no tuvieron acceso, cambios ni modificaciones durante más de 30 días se eliminan
automáticamente.
/dev Contiene archivos de dispositivo especiales que son usados por el sistema para acceder al hardware.
Importante
En Red Hat Enterprise Linux 7, cuatro directorios antiguos en / ahora tienen contenidos idénticos al
de sus equivalentes que están en /usr:
- /bin y /usr/bin.
- /sbin y /usr/sbin.
- /lib y /usr/lib.
- /lib64 y /usr/lib64.
En versiones anteriores de Red Hat Enterprise Linux, estos eran directorios distintos que contenían
diferentes conjuntos de archivos. En RHEL 7, los directorios de / son enlaces simbólicos para los
directorios coincidentes de /usr.
Referencias
Establezca una coincidencia entre los siguientes elementos y sus equivalentes de la tabla.
Arrastre y suelte los elementos en la celda junto a la respuesta correcta. Cada celda debe contener
una respuesta. Si usted desea modificar una respuesta, arrástrela a otra ubicación, o haga clic en
Restablecer para que la evaluación regrese a su configuración inicial.
Una vez que haya finalizado el cuestionario, haga clic en Check (verificar). Las respuestas correctas
tendrán un fondo azul y las respuestas incorrectas estarán tachadas. Si desea intentar de nuevo,
haga clic en Restablecer. Nota: Si tiene problemas para que la evaluación funcione por segunda vez,
intente actualizar el explorador. Haga clic en Mostrar Solución para ver todas las respuestas
correctas.
Objetivos
Tras finalizar esta sección, los estudiantes deberían poder usar en forma correcta los nombres de
ruta, cambiar el directorio que está en uso y utilizar comandos para determinar los contenidos y
las ubicaciones del directorio.
Figura 2.2: La vista del explorador de archivos habitual (izquierda) equivale a la vista descendente
(derecha).
Importante
Rutas absolutas
Una ruta absoluta es un nombre totalmente calificado que comienza en el directorio (/) root y
especifica cada subdirectorio que se atraviesa para llegar y que representa en forma exclusiva un
solo archivo. Cada archivo del sistema de archivo tiene un único nombre de ruta absoluta,
reconocido con una regla simple: un nombre de archivo con una barra (/) como primer carácter es
el nombre de la ruta absoluta. Por ejemplo, el nombre de ruta absoluta para el archivo de registro
de mensajes del sistema es /var/log/messages. Los nombres de rutas absolutas pueden ser
extensos para escribir; en consecuencia, los archivos también pueden ubicarse en forma relativa.
Cuando un usuario inicia sesión y abre una ventana de comandos, la ubicación inicial es, por lo
general, el directorio de inicio del usuario. Los procesos del sistema también tienen un directorio
inicial. Los usuarios y los procesos navegan hacia otros directorios, según sea necesario; los
términos directorio de trabajo o directorio de trabajo actual se refieren a su ubicación actual.
Rutas relativas
Al igual que una ruta absoluta, una ruta relativa identifica un archivo único y especifica solo la ruta
necesaria para llegar al archivo desde el directorio de trabajo. Para reconocer nombres de ruta
relativos se sigue una regla simple: un nombre de ruta que no tenga otro carácter más que una
barra (/) como primer carácter es un nombre de ruta relativo. Un usuario en el directorio /var
podría referirse en forma relativa al archivo de registro del mensaje como log/messages.
Para sistemas de archivos Linux estándar, el nombre de ruta de un archivo, que incluya todos los
caracteres / puede tener más de 4095 bytes de extensión. Cada componente del nombre de la
ruta separado por caracteres / no puede tener más de 255 bytes de extensión. Los nombres de
archivo pueden usar cualquier carácter Unicode codificado UTF-8, excepto / y el carácter NUL. (Los
caracteres ASCII requieren de un byte; otros caracteres, como los latinos, griegos, hebreos o
cirílicos, necesitan de dos bytes; el resto de los caracteres del plano multilingüe básico de Unicode
necesitan tres; y ningún carácter requerirá más de cuatro bytes).
Los sistemas de archivo Linux, que incluyen, entre otros, ext4, XFS, BTRFS, GFS2 y GlusterFS,
distinguen entre letras minúsculas y mayúsculas. Si se crea un archivo FileCase.txt y un archivo
filecase.txt en el mismo directorio, se obtienen dos archivos exclusivos. A pesar de que muchos
sistemas de archivos que no son Linux son admitidos por Linux, cada uno tiene reglas de
nombramiento de archivos exclusivas. Por ejemplo, el sistema de archivos VFAT masivo no
distingue entre minúsculas y mayúsculas, y permite la creación solo de uno de los dos archivos de
ejemplo. Sin embargo, VFAT, junto con NTFS de Microsoft y HFS+ de Apple, tiene un
comportamiento de conservación de tipo de letra. A pesar de que estos sistemas de archivos no
distinguen entre minúsculas y mayúsculas (realizado, principalmente, para respaldar la
compatibilidad retroactiva), muestran los nombres de archivo con el uso de mayúsculas original
utilizado cuando se creó el archivo.
Rutas de navegación
El comando pwd muestra el nombre de ruta completo de la ubicación actual, que ayuda a
determinar la sintaxis adecuada para llegar a los archivos con los nombres de ruta relativos. El
comando ls enumera los contenidos del directorio para el directorio especificado o, si no se indica
un directorio, el directorio actual.
[student@desktopX ~]$ pwd
/home/student
[student@desktopX ~]$ ls
Desktop Documents Downloads Music Pictures Public Templates Videos
[student@desktopX ~]$
Use el comando cd para cambiar los directorios. En caso del directorio de trabajo /home/student,
la sintaxis de ruta relativa es más corta para llegar al subdirectorio Videos. A continuación, se llega
al subdirectorio Documents con la sintaxis de ruta absoluta.
[student@desktopX ~]$ cd Videos
[student@desktopX Videos]$ pwd
/home/student/Videos
[student@desktopX Videos]$ cd /home/student/Documents
[student@desktopX Documents]$ pwd
/home/student/Documents
[student@desktopX Documents]$ cd
[student@desktopX ~]$ pwd
/home/student
[student@desktopX ~]$
La petición del programa de shell muestra, para ser breve, solo el último componente de la ruta de
directorio actual. Para /home/student/Videos, solo muestra Videos. Cuando lo desee, regrese al
directorio de inicio de usuario con cd sin especificar un destino. La petición muestra el carácter
tilde(~) cuando el directorio actual del usuario es su directorio de inicio.
Por lo general, el comando touch actualiza la marca de tiempo de un archivo con respecto a la
fecha y hora actual sin modificarlo. Esto es útil para crear archivos vacíos, que pueden usarse para
practicar, ya que si se "toca" el nombre de un archivo que no existe, se produce la creación del
archivo. Si se usa touch, se crean archivos de práctica en los subdirectorios Documents y Videos.
[student@desktopX ~]$ touch Videos/blockbuster1.ogg
[student@desktopX ~]$ touch Videos/blockbuster2.ogg
[student@desktopX ~]$ touch Documents/thesis_chapter1.odf
[student@desktopX ~]$ touch Documents/thesis_chapter2.odf
[student@desktopX ~]$
El comando ls tiene varias opciones para mostrar los atributos en los archivos. Los más usados y
útiles son -l (formato de enumeración extensa), -a (todos los archivos, que incluye los archivos
ocultos) y -R (recurrente, para incluir los contenidos de todos los subdirectorios).
[student@desktopX ~]$ ls -l
total 15
drwxr-xr-x. 2 student student 4096 Feb 7 14:02 Desktop
drwxr-xr-x. 2 student student 4096 Jan 9 15:00 Documents
drwxr-xr-x. 3 student student 4096 Jan 9 15:00 Downloads
drwxr-xr-x. 2 student student 4096 Jan 9 15:00 Music
drwxr-xr-x. 2 student student 4096 Jan 9 15:00 Pictures
drwxr-xr-x. 2 student student 4096 Jan 9 15:00 Public
drwxr-xr-x. 2 student student 4096 Jan 9 15:00 Templates
drwxr-xr-x. 2 student student 4096 Jan 9 15:00 Videos
[student@desktopX ~]$ ls -la
total 15
drwx------. 16 student student 4096 Feb 8 16:15 .
drwxr-xr-x. 6 root root 4096 Feb 8 16:13 ..
-rw-------. 1 student student 22664 Feb 8 00:37 .bash_history
-rw-r--r--. 1 student student 18 Jul 9 2013 .bash_logout
-rw-r--r--. 1 student student 176 Jul 9 2013 .bash_profile
-rw-r--r--. 1 student student 124 Jul 9 2013 .bashrc
drwxr-xr-x. 4 student student 4096 Jan 20 14:02 .cache
drwxr-xr-x. 8 student student 4096 Feb 5 11:45 .config
drwxr-xr-x. 2 student student 4096 Feb 7 14:02 Desktop
drwxr-xr-x. 2 student student 4096 Jan 9 15:00 Documents
drwxr-xr-x. 3 student student 4096 Jan 25 20:48 Downloads
drwxr-xr-x. 11 student student 4096 Feb 6 13:07 .gnome2
drwx------. 2 student student 4096 Jan 20 14:02 .gnome2_private
-rw-------. 1 student student 15190 Feb 8 09:49 .ICEauthority
drwxr-xr-x. 3 student student 4096 Jan 9 15:00 .local
drwxr-xr-x. 2 student student 4096 Jan 9 15:00 Music
drwxr-xr-x. 2 student student 4096 Jan 9 15:00 Pictures
drwxr-xr-x. 2 student student 4096 Jan 9 15:00 Public
drwxr-xr-x. 2 student student 4096 Jan 9 15:00 Templates
drwxr-xr-x. 2 student student 4096 Jan 9 15:00 Videos
[student@desktopX ~]$
Los dos directorios especiales que están en la parte superior del listado se refieren al directorio
actual (.) y al directorio principal (..). Estos directorios especiales existen en cada directorio del
sistema. Sus beneficios serán aparentes cuando se practiquen los comandos de administración de
archivos.
Importante
Los nombres de archivo que comienzan con un punto (.) indican archivos ocultos de la vista normal
con ls y otros comandos. Esta no es una característica de seguridad. Los archivos ocultos evitan
que los archivos de configuración necesarios del usuario llenen los directorios principales. Existen
muchos comandos que procesan archivos ocultos solo con opciones de línea de comandos
específicas y previenen que la configuración de un usuario se copie por accidente en otros
directorios o usuarios.
Para proteger los contenidos de un archivo y que no sea visualizado en forma inadecuada se
necesitan permisos de archivo.
[student@desktopX ~]$ ls -R
.:
Desktop Documents Downloads Music Pictures Public Templates Videos
./Desktop:
./Documents:
thesis_chapter1.odf thesis_chapter2.odf
./Downloads:
./Music:
./Pictures:
./Public:
./Templates:
./Videos:
blockbuster1.ogg blockbuster2.ogg
[student@desktopX ~]$
El comando cd tiene muchas opciones. Muy pocas son tan útiles como para justificar que se
practiquen por anticipado y se usen con cierta frecuencia. El comando cd - cambia el directorio al
directorio donde estaba el usuario antes de estar en el directorio actual. Observe cómo este
usuario aprovecha este comportamiento para alternar entre dos directorios; esta opción es
práctica cuando se procesa una serie de tareas similares.
[student@desktopX ~]$ cd Videos
[student@desktopX Videos]$ pwd
/home/student/Videos
[student@desktopX Videos]$ cd /home/student/Documents
[student@desktopX Documents]$ pwd
/home/student/Documents
[student@desktopX Documents]$ cd -
[student@desktopX Videos]$ pwd
/home/student/Videos
[student@desktopX Videos]$ cd -
[student@desktopX Documents]$ pwd
/home/student/Documents
[student@desktopX Documents]$ cd -
[student@desktopX Videos]$ pwd
/home/student/Videos
[student@desktopX Videos]$ cd
[student@desktopX ~]$
El comando cd .. usa el directorio oculto .. para ascender un nivel hasta el directorio principal, sin
necesidad de conocer el nombre exacto del directorio de inicio. El otro directorio oculto (.)
especifica el directorio actual en los comandos en que la ubicación actual es el argumento de
origen o destino y se evita la necesidad de escribir el nombre de la ruta absoluta del directorio.
Referencias
Establezca una coincidencia entre los siguientes elementos y sus equivalentes de la tabla.
Arrastre y suelte los elementos en la celda junto a la respuesta correcta. Cada celda debe contener
una respuesta. Si usted desea modificar una respuesta, arrástrela a otra ubicación, o haga clic en
Restablecer para que la evaluación regrese a su configuración inicial.
Una vez que haya finalizado el cuestionario, haga clic en Check (verificar). Las respuestas correctas
tendrán un fondo azul y las respuestas incorrectas estarán tachadas. Si desea intentar de nuevo,
haga clic en Restablecer. Nota: Si tiene problemas para que la evaluación funcione por segunda
vez, intente actualizar el explorador. Haga clic en Mostrar Solución para ver todas las respuestas
correctas.
Listar la ubicación actual (formato extenso) con los archivos ocultos. ls -al
Avance hasta la ubicación de los archivos binarios desde el directorio root. cd bin
2.5 Administración de archivos con las herramientas de línea de comandos
Objetivos
Tras finalizar esta sección, los estudiantes deberían poder crear, copiar, vincular, desplazar y
eliminar archivos y subdirectorios en varios directorios.
Copiar
cp file1 file2 cp file1 file2 file3 dir (4)
archivo
Desplazar
mv file1 file2 (1) mv file1 file2 file3 dir (4)
archivos
Eliminar
rm file1 rm -f file1 file2 file3 (5)
archivo
Crear
mkdir dir mkdir -p par1/par2/dir (6)
directorio
Copiar
cp -r dir1 dir2 (2) cp -r dir1 dir2 dir3 dir4 (4)
directorio
Desplazar
mv dir1 dir2 (3) mv dir1 dir2 dir3 dir4 (4)
directorio
Eliminar
rm -r dir1 (2) rm -rf dir1 dir2 dir3 (5)
directorio
Nota:
(1)
El resultado es un nombre nuevo.
(2)
La opción "recursive" se requiere para procesar un
directorio fuente.
(3)
Si dir2 existe, el resultado es un movimiento. Si dir2 no
existe, es resultado es un nombre nuevo.
(4)
El último argumento debe ser un directorio.
(5)
Tenga precaución con la opción "force"; no se le
pedirá que confirme su acción.
(6)
Tenga precaución con la opción "create parent"; no se
detectan errores de escritura.
Creación de directorios
El comando mkdir crea uno o más directorios o subdirectorios y genera errores si ya existe el
nombre del archivo o cuando se intenta crear un directorio en un directorio de inicio que no existe.
La opción -p parent crea directorios de inicio faltantes para el destino solicitado. Tenga cuidado
cuando use mkdir -p ya que los errores de ortografía accidentales generan directorios involuntarios
sin activar mensajes de error.
En el siguiente ejemplo, un usuario intenta usar mkdir para crear un subdirectorio denominado
Watched en el directorio existente Videos, pero escribe mal el nombre del directorio.
[student@desktopX ~]$ mkdir Video/Watched
mkdir: cannot create directory `Video/Watched': No such file or directory
mkdir generó un error porque Videos se escribió mal y el directorio Video no existe. Si el usuario
utilizara mkdir con la opción -p, no habría ningún error y el usuario tendría dos directorios, Videos
y Video, y el subdirectorio Watched se crearía en el lugar equivocado.
[student@desktopX ~]$ mkdir Videos/Watched
[student@desktopX ~]$ cd Documents
[student@desktopX Documents]$ mkdir ProjectX ProjectY
[student@desktopX Documents]$ mkdir -p Thesis/Chapter1 Thesis/Chapter2 Thesis/Chapter3
[student@desktopX Documents]$ cd
[student@desktopX ~]$ ls -R Videos Documents
Documents:
ProjectX ProjectY Thesis thesis_chapter1.odf thesis_chapter2.odf
Documents/ProjectX:
Documents/ProjectY:
Documents/Thesis:
Chapter1 Chapter2 Chapter3
Documents/Thesis/Chapter1:
Documents/Thesis/Chapter2:
Documents/Thesis/Chapter3:
Videos:
blockbuster1.ogg blockbuster2.ogg Watched
Videos/Watched:
[student@desktopX ~]$
El último mkdir creó tres subdirectorios de ChapterN con un comando. La opción -p parent creó el
directorio de inicio faltante Thesis.
Copia de archivos
El comando cp copia uno o más archivos para que se conviertan en archivos nuevos e
independientes. La sintaxis permite copiar un archivo existente en un archivo nuevo en un directorio
actual o en otro directorio, o copiar varios archivos en otro directorio. En cualquier destino, los
nombres de los archivos nuevos deben ser únicos. Si el nombre del archivo nuevo no es único, el
comando de copia no sobrescribirá el archivo existente.
[student@desktopX ~]$ cd Videos
[student@desktopX Videos]$ cp blockbuster1.ogg blockbuster3.ogg
[student@desktopX Videos]$ ls -l
total 0
-rw-rw-r--. 1 student student 0 Feb 8 16:23 blockbuster1.ogg
-rw-rw-r--. 1 student student 0 Feb 8 16:24 blockbuster2.ogg
-rw-rw-r--. 1 student student 0 Feb 8 19:02 blockbuster3.ogg
drwxrwxr-x. 2 student student 4096 Feb 8 23:35 Watched
[student@desktopX Videos]$
Cuando se copian varios archivos con un comando, el último argumento debe ser un directorio. Los
archivos copiados conservan su nombre original en el directorio nuevo. Es probable que se
sobrescriban los nombres de archivo con conflicto que existan en el destino. Para evitar que los
usuarios sobrescriban directorios con contenido, existen varios comandos cp de archivo que omiten
directorios especificados como origen. Para poder copiar directorios que no están vacíos, es decir
con contenido, se requiere la opción -r recursive.
[student@desktopX Videos]$ cd ../Documents
[student@desktopX Documents]$ cp thesis_chapter1.odf thesis_chapter2.odf Thesis ProjectX
cp: omitting directory `Thesis'
[student@desktopX Documents]$ cp -r Thesis ProjectX
[student@desktopX Documents]$ cp thesis_chapter2.odf Thesis/Chapter2/
[student@desktopX Documents]$ ls -R
.:
ProjectX ProjectY Thesis thesis_chapter1.odf thesis_chapter2.odf
./ProjectX:
Thesis thesis_chapter1.odf thesis_chapter2.odf
./ProjectX/Thesis:
./ProjectY:
./Thesis:
Chapter1 Chapter2 Chapter3
./Thesis/Chapter1:
./Thesis/Chapter2:
thesis_chapter2.odf
./Thesis/Chapter3:
[student@desktopX Documents]$
Desplazamiento de archivos
El comando mv cambia el nombre a los archivos en el mismo directorio o reubica archivos en un
directorio nuevo. Los contenidos del archivo se conservan sin modificaciones. Los archivos que se
desplazan hacia un sistema de archivos diferente requieren de la creación de un archivo nuevo
mediante la copia del archivo de origen y, a continuación, la eliminación de dicho archivo. A pesar
de que, por lo general, los archivos grandes son transparentes para el usuario, pueden demorar
mucho en desplazarse.
[student@desktopX Videos]$ cd ../Documents
[student@desktopX Documents]$ ls -l
total 0
-rw-rw-r--. 1 student student 0 Feb 8 16:24 thesis_chapter1.odf
-rw-rw-r--. 1 student student 0 Feb 8 16:24 thesis_chapter2.odf
[student@desktopX Documents]$ mv thesis_chapter2.odf thesis_chapter2_reviewed.odf
[student@desktopX Documents]$ mv thesis_chapter1.odf Thesis/Chapter1
[student@desktopX Documents]$ ls -lR
.:
total 16
drwxrwxr-x. 2 student student 4096 Feb 11 11:58 ProjectX
drwxrwxr-x. 2 student student 4096 Feb 11 11:55 ProjectY
drwxrwxr-x. 5 student student 4096 Feb 11 11:56 Thesis
-rw-rw-r--. 1 student student 0 Feb 11 11:54 thesis_chapter2_reviewed.odf
./ProjectX:
total 0
-rw-rw-r--. 1 student student 0 Feb 11 11:58 thesis_chapter1.odf
-rw-rw-r--. 1 student student 0 Feb 11 11:58 thesis_chapter2.odf
./ProjectX/Thesis:
total 0
./ProjectY:
total 0
./Thesis:
total 12
drwxrwxr-x. 2 student student 4096 Feb 11 11:59 Chapter1
drwxrwxr-x. 2 student student 4096 Feb 11 11:56 Chapter2
drwxrwxr-x. 2 student student 4096 Feb 11 11:56 Chapter3
./Thesis/Chapter1:
total 0
-rw-rw-r--. 1 student student 0 Feb 11 11:54 thesis_chapter1.odf
./Thesis/Chapter2:
total 0
-rw-rw-r--. 1 student student 0 Feb 11 11:54 thesis_chapter2.odf
./Thesis/Chapter3:
total 0
[student@desktopX Documents]$
Luego de que rm no pudo eliminar el directorio Chapter1, la opción -r recursive pudo hacerlo en
forma correcta. El último comando rm analizó primero cada subdirectorio y eliminó en forma
individual los archivos que contenía antes de eliminar cada directorio que ahora está vacío. El uso
de -i pide la confirmación para cada eliminación de forma interactiva. Esto es básicamente lo
opuesto de -f, que fuerza la eliminación sin solicitar confirmación al usuario.
El comando rmdir elimina directorios solo si están vacíos. Los directorios eliminados no pueden
recuperarse.
[student@desktopX Documents]$ pwd
/home/student/Documents
[student@desktopX Documents]$ rmdir ProjectY
[student@desktopX Documents]$ rmdir ProjectX
rmdir: failed to remove `ProjectX': Directory not empty
[student@desktopX Documents]$ rm -r ProjectX
[student@desktopX Documents]$ ls -lR
.:
total 0
[student@desktopX Documents]$
El comando rmdir no pudo eliminar ProjectX que no estaba vacío, pero rm -r pudo hacerlo en forma
correcta.
Referencias
En este ejercicio de laboratorio, practicará las técnicas eficientes para crear y organizar archivos con
directorios, copias de archivos y enlaces.
Resultados:
Los estudiantes practicarán cómo crear, reordenar y eliminar archivos.
1. En el directorio de inicio, cree conjuntos de archivos de práctica vacíos para usar durante el
resto de este ejercicio de laboratorio. Si el comando pensado no se reconoce de inmediato,
se espera que los estudiantes usen la solución orientada para ver y practicar cómo se
resuelve la tarea. Use la opción completar con Tab de la shell y complete los nombres de
ruta con más facilidad.
Cuando distribuya archivos desde una ubicación hacia muchas ubicaciones, primero cambie el
directorio que contiene los archivos de origen. Use la sintaxis de ruta más simple, absoluta o relativa,
para llegar al destino de cada tarea de administración de archivos.
4. Ubicará algunos de los archivos nuevos en directorios de proyectos para familia y amigos.
Use todos los comandos que necesite. En este ejemplo, no tiene que usar un solo comando.
Para cada proyecto, primero cambie el directorio de proyecto y, a continuación, copie los
archivos de origen en este directorio. Las copias se generan porque conservará los originales
después de entregar estos proyectos a familiares y amigos.
Copie los archivos (de todo tipo) que tengan los números 1 y 2 en la carpeta de amigos.
Copie los archivos (de todo tipo) que tengan los números 3 y 4 en la carpeta de familia.
Cuando recopile archivos de varias ubicaciones en una ubicación, cambie el directorio que
contendrá los archivos de destino. Use la sintaxis de ruta más simple, absoluta o relativa, para llegar
al origen de cada tarea de administración de archivos.
Cambie a su directorio de inicio. Intente eliminar tanto el proyecto de familia como el de amigos
con un solo comando rmdir.
[student@serverX work]$ cd
[student@serverX ~]$ rmdir family friends
rmdir: failed to remove `family': Directory not empty
rmdir: failed to remove `friends': Directory not empty
El uso del comando rmdir debería generar un error ya que ambos directorios no están vacíos.
7. Use otro comando que pueda eliminar correctamente tanto la carpeta de familia como la
de amigos.
8. Elimine todos los archivos del proyecto de trabajo, pero no elimine el directorio de trabajo.
9. Por último, desde el directorio de inicio, use el comando rmdir para eliminar el directorio
de trabajo. El comando debería poder completar la acción sin errores ahora que está vacío.
[student@serverX work]$ cd
[student@serverX ~]$ rmdir work
[student@serverX ~]$ ls -l
2.7 Coincidencia de nombres de archivo mediante el uso de expansión de nombre de ruta
Objetivos
Tras finalizar esta sección, los estudiantes deberían poder usar metacaracteres y técnicas de
expansión para mejorar la eficiencia de procesamiento de administración de archivos.
La shell Bash tiene una capacidad de coincidencia de nombre de ruta que, históricamente, se llamó
globbing, que es la forma abreviada del programa de expansión de ruta de archivo del “comando
global” de las primeras versiones de UNIX. La función globbing de Bash, que comúnmente se
denomina coincidencia de patrón o “comodines”, facilita la administración de grandes cantidades
de archivos. Si se usan los metacaracteres que se “expanden” para establecer una coincidencia
entre los archivos y los nombres de ruta que se buscan, los comandos trabajan en un conjunto de
archivos orientado de una vez.
Patrón Coincidencias
(1)
clase de carácter POSIX establecido previamente; se adapta a la región
Nota
actual.
Expansión de tilde
El carácter del tilde (~), cuando está seguido de una barra separadora, coincide con el directorio de
inicio del usuario actual. Si está seguido por una secuencia de caracteres hasta la barra, se
interpretará como un nombre de usuario, en caso de que uno coincida. Si ningún nombre de
usuario coincide, aparecerá el tilde actual seguido de la secuencia de caracteres.
[student@desktopX glob]$ ls ~/glob
able alfa baker bravo cast charlie delta dog easy echo
[student@desktopX glob]$ echo ~/glob
/home/student/glob
[student@desktopX glob]$
Expansión de llaves
La expansión de llaves se usa para generar secuencias discrecionales de caracteres. Las llaves
contienen una lista de secuencias, o una expresión de secuencias, separadas por comas. El
resultado incluye el texto que antecede o que sigue a la definición de llaves. Las expansiones de
llaves deben estar anidadas, una dentro de la otra.
[student@desktopX glob]$ echo {Sunday,Monday,Tuesday,Wednesday}.log
Sunday.log Monday.log Tuesday.log Wednesday.log
[student@desktopX glob]$ echo file{1..3}.txt
file1.txt file2.txt file3.txt
[student@desktopX glob]$ echo file{a..c}.txt
filea.txt fileb.txt filec.txt
[student@desktopX glob]$ echo file{a,b}{1,2}.txt
filea1.txt filea2.txt fileb1.txt fileb2.txt
[student@desktopX glob]$ echo file{a{1,2},b,c}.txt
filea1.txt filea2.txt fileb.txt filec.txt
[student@desktopX glob]$
Sustitución de comandos
La sustitución de comandos permite obtener un comando para reemplazar el comando mismo. La
sustitución de comandos se produce cuando un comando está encerrado entre un signo de dolar
al principio y paréntesis, $(comando), o con acento grave, `comando`. La forma acento grave es
más antigua y tiene dos desventajas: 1) el acento grave puede confundirse fácilmente a la vista
con las comillas simples, y 2) el acento grave no puede anidarse dentro de los acentos graves. La
forma $(comando) puede anidar varias expansiones de comando dentro de cada una.
[student@desktopX glob]$ echo Today is `date +%A`.
Today is Wednesday.
[student@desktopX glob]$ echo The time is $(date +%M) minutes past $(date +%l%p).
The time is 26 minutes past 11AM.
[student@desktopX glob]$
Use comillas dobles para suprimir el globbing y la expansión de la shell, pero permite la sustitución
de comandos y variable. A nivel conceptual, la sustitución de variable es idéntica a la sustitución
de comandos, pero puede usar sintaxis de llaves opcional.
[student@desktopX glob]$ host=$(hostname -s); echo $host
desktopX
[student@desktopX glob]$ echo "***** hostname is ${host} *****"
***** hostname is desktopX *****
[student@desktopX glob]$ echo Your username variable is \$USER.
Your username variable is $USER.
[student@desktopX glob]$
Use comillas simples para interpretar todo el texto literalmente. Observe la diferencia, tanto en la
pantalla como en el teclado, entre las comillas simples (') y el acento grave de sustitución de
comando (`). Además de suprimir el globbing y la expansión de la shell, las comillas dirigen a la
shell para que también suprima la sustitución de comando y variable. El signo de interrogación es
el metacarácter que también necesita protección para evitar la expansión.
[student@desktopX glob]$ echo "Will variable $host evaluate to $(hostname -s)?"
Will variable desktopX evaluate to desktopX?
[student@desktopX glob]$ echo 'Will variable $host evaluate to $(hostname -s)?'
Will variable $host evaluate to $(hostname -s)?
[student@desktopX glob]$
Referencias
Establezca una coincidencia entre los siguientes elementos y sus equivalentes de la tabla.
Arrastre y suelte los elementos en la celda junto a la respuesta correcta. Cada celda debe contener
una respuesta. Si usted desea modificar una respuesta, arrástrela a otra ubicación, o haga clic en
Restablecer para que la evaluación regrese a su configuración inicial.
Una vez que haya finalizado el cuestionario, haga clic en Check (verificar). Las respuestas correctas
tendrán un fondo azul y las respuestas incorrectas estarán tachadas. Si desea intentar de nuevo,
haga clic en Restablecer. Nota: Si tiene problemas para que la evaluación funcione por segunda
vez, intente actualizar el explorador. Haga clic en Mostrar Solución para ver todas las respuestas
correctas.
Solo nombres de archivos que comienzan con una letra mayúscula [[:upper:]]*
2.9 Ejercicio de laboratorio: Administración de archivos con expansión de shell
En este ejercicio de laboratorio, creará, moverá y eliminará archivos y carpetas usando una
variedad de atajos correspondientes a los nombres de archivos.
Resultados:
Familiaridad y práctica con muchas formas de comodines para localizar y usar archivos.
Realice los siguientes pasos en serverX, a menos que se le indique lo contrario. Inicie sesión como
student y comience en el directorio de inicio.
1. Para comenzar, cree conjuntos de archivos de práctica vacíos para usar en este
laboratorio. Si no se reconoce inmediatamente un atajo deseado de ampliación de la shell,
se espera que los estudiantes usen la solución para aprender y practicar. Utilice la
terminación (completado) del tabulador shell para localizar los nombres de ruta de
archivos fácilmente.
2. Como autor de una serie exitosa de novelas de misterio, los capítulos de su próximo
bestseller se están editando para publicarlos. Cree un total de ocho archivos con nombres
mystery_chapterX.odf. Reemplace la X con los números del 1 al 8.
[student@serverX ~]$ touch mystery_chapter{1..8}.odf
[student@serverX ~]$ ls -l
3. Para organizar los episodios de TV, cree dos subdirectorios denominados season1 y
season2 en el directorio Videos existente. Use solamente un comando.
[student@serverX ~]$ mkdir Videos/season{1..2}
[student@serverX ~]$ ls -lR
4. Trasladar los episodios de TV adecuados a los subdirectorios de temporadas. Use solo dos
comandos, especificando destinos con la sintaxis relativa.
[student@serverX ~]$ mv tv_season1* Videos/season1
[student@serverX ~]$ mv tv_season2* Videos/season2
[student@serverX ~]$ ls -lR
5. Para organizar los capítulos del libro de misterios, cree una jerarquía de directorios de dos
niveles con un comando. Cree my_bestseller en el directorio existente Documents y
chapters en el directorio my_bestseller.
[student@serverX ~]$ mkdir -p Documents/my_bestseller/chapters
[student@serverX ~]$ ls -lR
7. Cambie al directorio chapters. Use el atajo del directorio de inicio para especificar los
archivos de recursos, mueva todos los capítulos del libro al directorio chapters, que ahora
es el directorio actual. ¿Cuál es la sintaxis más simple para especificar el directorio de
destino?
[student@serverX ~]$ cd Documents/my_bestseller/chapters
[student@serverX chapters]$ mv ~/mystery_chapter* .
[student@serverX chapters]$ ls -l
8. Los primeros dos capítulos se envían al editor para la revisión. Para recordar no modificar
estos capítulos durante la revisión, traslade solamente estos dos capítulos al directorio
editor. Use la sintaxis relativa comenzando desde el subdirectorio chapters.
[student@serverX chapters]$ mv mystery_chapter1.odf mystery_chapter2.odf ../editor
[student@serverX chapters]$ ls -l
[student@serverX chapters]$ ls -l ../editor
9. Los capítulos 7 y 8 se escribirán mientras esté de vacaciones. Mueva los archivos desde
chapters hacia vacation. Use un comando sin caracteres comodines.
[student@serverX chapters]$ mv mystery_chapter7.odf mystery_chapter8.odf ../vacation
[student@serverX chapters]$ ls -l
[student@serverX chapters]$ ls -l ../vacation
10. Con un comando, cambie el directorio de trabajo para la ubicación de dos episodios de TV
de la temporada 2 y luego copie el primer episodio de la temporada en el directorio
vacation.
[student@serverX chapters]$ cd ~/Videos/season2
[student@serverX season2]$ cp tv_season2_episode1.ogg ~/Documents/my_bestseller/vacation
11. Con un comando, cambie el directorio de trabajo a vacation, luego detalle sus archivos.
También se necesita el episodio 2. Vuelva al directorio season2 usando el atajo directorio
de trabajo anterior. Este paso dará resultado si se logró el último cambio de directorio con
un comando . Copie el archivo del episodio 2 en vacation. Vuelva a vacation usando el
atajo nuevamente.
[student@serverX season2]$ cd ~/Documents/my_bestseller/vacation
[student@serverX vacation]$ ls -l
[student@serverX vacation]$ cd -
[student@serverX season2]$ cp tv_season2_episode2.ogg ~/Documents/my_bestseller/vacation
[student@serverX vacation]$ cd -
[student@serverX vacation]$ ls -l
12. Es posible que los capítulos 5 y 6 necesiten un cambio de argumento. Para evitar que estos
cambios modifiquen los archivos originales, copie ambos archivos en plot_change. Mueva
un directorio al directorio principal de vacation, luego use un comando desde allí.
[student@serverX vacation]$ cd ..
[student@serverX my_bestseller]$ cp chapters/mystery_chapter[56].odf plot_change
[student@serverX my_bestseller]$ ls -l chapters
[student@serverX my_bestseller]$ ls -l plot_change
13. Para realizar un seguimiento de los cambios, haga tres copias de seguridad del capítulo 5.
Cambie al directorio plot_change. Copie mystery_chapter5.odf como un nombre de
archivo nuevo para incluir la fecha completa (años-mes-día). Realice otra copia anexando
el sello de tiempo actual (como el número de segundos desde epoch) para asegurar un
nombre de archivo único. También haga una copia anexando el usuario actual ($USER) al
nombre del archivo. Consulte la solución para la sintaxis de todo lo que no esté seguro
(como qué argumentos pasar al comando date).
[student@serverX my_bestseller]$ cd plot_change
[student@serverX plot_change]$ cp mystery_chapter5.odf mystery_chapter5_$(date +%F).odf
[student@serverX plot_change]$ cp mystery_chapter5.odf mystery_chapter5_$(date +%s).odf
[student@serverX plot_change]$ cp mystery_chapter5.odf mystery_chapter5_$USER.odf
[student@serverX plot_change]$ ls -l
Observe que también podríamos hacer las mismas copias de seguridad de los archivos del capítulo
6.
14. Los cambios de argumento no fueron exitosos. Elimine el directorio plot_change. Primero,
elimine todos los archivos en el directorio plot_change. Cambie el directorio un nivel
arriba debido a que el directorio no se puede eliminar mientras sea el directorio de
trabajo. Para eliminar el directorio usando el comando rm sin la opción recursive. El
intento debe fallar. Ahora, use comando rmdir, que será correcto.
[student@serverX plot_change]$ rm mystery*
[student@serverX plot_change]$ cd ..
[student@serverX my_bestseller]$ rm plot_change
rm: cannot remove 'plot_change': Is a directory
[student@serverX my_bestseller]$ rmdir plot_change
[student@serverX my_bestseller]$ ls -l
15. Cuando finalicen las vacaciones, el directorio vacation ya no será necesario. Elimínelo
usando el comando rm con la opción recursive.