Administrar archivos en Red Hat Enterprise Linux

Red Hat Enterprise LinuxBeginner
Practicar Ahora

Introducción

En este laboratorio, adquirirá experiencia práctica en la gestión de archivos y directorios utilizando herramientas esenciales de línea de comandos en un entorno RHEL. Aprenderá a explorar su ubicación actual y listar contenidos con pwd y ls, navegar por directorios y crear archivos con cd y touch, y organizar archivos y directorios de manera efectiva con mkdir, cp, mv y rm.

Además, descubrirá cómo crear enlaces entre archivos utilizando ln (tanto enlaces duros como simbólicos) y seleccionar archivos de manera eficiente con expansiones de shell, lo que le proporcionará habilidades fundamentales para la gestión de archivos en la línea de comandos.

Explore su ubicación actual y liste el contenido con pwd y ls

En este paso, aprenderá a explorar su ubicación actual dentro del sistema de archivos y a listar su contenido utilizando los comandos pwd y ls. Comprender su directorio de trabajo actual y poder ver su contenido son habilidades fundamentales para navegar y administrar archivos desde la línea de comandos.

Primero, determinemos su directorio de trabajo actual utilizando el comando pwd. pwd significa "print working directory" (imprimir directorio de trabajo) y muestra el nombre de ruta completo de su ubicación actual en el sistema de archivos.

pwd

Debería ver una salida similar a esta, indicando su directorio actual:

/home/labex

A continuación, utilizará el comando ls para listar el contenido de su directorio actual. ls significa "list" (listar) y lista el contenido de directorios para el directorio especificado o, si no se proporciona ningún directorio, para el directorio de trabajo actual.

ls

Debería ver una salida que muestre el contenido de su directorio de inicio:

project

El comando ls tiene varias opciones útiles para mostrar más información sobre archivos y directorios.

  1. La opción -l (formato de listado largo) proporciona información detallada sobre cada archivo y directorio, incluyendo permisos, número de enlaces duros, propietario, grupo, tamaño y fecha de última modificación.

    ls -l

    Debería ver una salida similar a esta:

    total 0
    drwxr-xr-x 2 labex labex 6 Aug 27  2024 project
  2. La opción -a (todos los archivos) lista todos los archivos, incluidos los archivos ocultos. En Linux, los nombres de archivo que comienzan con un punto (.) se consideran ocultos. Además, . se refiere al directorio actual y .. se refiere al directorio padre.

    ls -a

    Debería ver una salida similar a esta, incluyendo archivos de configuración ocultos:

    .  ..  .bash_history  .bash_logout  .bash_profile  .bashrc  .tmux.conf  project
  3. Combinar -l y -a como -la proporciona un listado largo de todos los archivos, incluidos los ocultos.

    ls -la

    Esto mostrará información detallada para todos los archivos y directorios, incluidos los ocultos:

    total 20
    drwx------ 1 labex labex  72 Jun  4 03:12 .
    drwxr-xr-x 1 root  root   19 Aug 27  2024 ..
    -rw------- 1 labex labex  31 Jun  4 03:13 .bash_history
    -rw-r--r-- 1 labex labex  18 Feb 15  2024 .bash_logout
    -rw-r--r-- 1 labex labex 141 Feb 15  2024 .bash_profile
    -rw-r--r-- 1 labex labex 877 Jun  4 03:12 .bashrc
    -rw-r--r-- 1 labex labex  68 Aug 27  2024 .tmux.conf
    drwxr-xr-x 2 labex labex   6 Aug 27  2024 project
  4. La opción -R (recursiva) lista el contenido de todos los subdirectorios de forma recursiva. Para demostrar esto, primero crearemos un subdirectorio.

    mkdir mydir

    Ahora, use ls -R para ver el listado recursivo.

    ls -R

    Debería ver listados tanto el directorio mydir como project, seguidos de su contenido:

    .:
    mydir  project
    
    ./mydir:
    
    ./project:

    Finalmente, eliminemos el directorio mydir para limpiar el entorno para los siguientes pasos.

    rmdir mydir

    Este comando solo funciona para directorios vacíos. Aprenderá más sobre rmdir y rm en un paso posterior.

Ejemplo de salida del comando ls en la línea de comandos

En este paso, aprenderá a cambiar su directorio de trabajo actual utilizando el comando cd y a crear archivos vacíos utilizando el comando touch. Estos comandos son esenciales para organizar sus archivos y navegar por el sistema de archivos de manera eficiente.

Primero, verifiquemos su ubicación actual y naveguemos al directorio project que se mostró en el paso 1.

pwd

Debería ver /home/labex como salida (su directorio de inicio).

Ahora, naveguemos al directorio project usando el comando cd:

cd project

Verifique su nueva ubicación:

pwd

Ahora debería ver /home/labex/project como salida.

Ahora, creemos un nuevo directorio llamado documents dentro de su directorio project actual. Utilizará el comando mkdir, que encontró brevemente en el paso anterior.

mkdir documents

Verifique que se ha creado el directorio documents:

ls

Debería ver documents listado en la salida.

A continuación, utilizará el comando cd para cambiar el directorio de trabajo actual de su shell al directorio documents recién creado.

cd documents

Después de cambiar de directorio, es una buena práctica confirmar su nueva ubicación usando pwd:

pwd

La salida ahora debería ser /home/labex/project/documents.

El comando cd ofrece varias opciones convenientes para la navegación:

  1. cd -: Este comando cambia al directorio anterior en el que se encontraba. Intentémoslo.

    cd -

    Debería haber vuelto a /home/labex/project. Verifíquelo con pwd:

    pwd

    Ahora, use cd - nuevamente para regresar a /home/labex/project/documents:

    cd -

    Y verifique con pwd:

    pwd
  2. cd ..: Este comando utiliza el directorio oculto .. (dos puntos) para subir un nivel al directorio padre, sin necesidad de conocer el nombre exacto del padre.

    cd ..

    Ahora debería estar en /home/labex/project. Verifíquelo con pwd:

    pwd

    Puede encadenar .. para subir varios niveles. Por ejemplo, para ir a /home/labex desde /home/labex/project:

    cd ../

    Verifique su ubicación:

    pwd

    Debería estar en /home/labex.

  3. cd (sin argumentos): Este comando siempre lo llevará de regreso a su directorio de inicio, que es /home/labex para el usuario labex.

    cd

    Verifique su ubicación:

    pwd

    Debería estar en /home/labex.

Ahora, naveguemos de regreso a su directorio ~/project/documents para crear algunos archivos.

cd ~/project/documents

Verifique su ubicación:

pwd

La salida debería ser /home/labex/project/documents.

Ahora utilizará el comando touch. El comando touch actualiza la marca de tiempo de un archivo a la fecha y hora actuales sin modificarlo de otra manera. Este comando también es muy útil para crear archivos vacíos.

Creemos dos archivos vacíos llamados report.txt y notes.txt en el directorio ~/project/documents.

touch report.txt notes.txt

Verifique que los archivos se han creado usando ls -l:

ls -l

Debería ver una salida similar a esta, mostrando los archivos recién creados:

total 0
-rw-rw-r--. 1 labex labex 0 Mar  7 HH:MM report.txt
-rw-rw-r--. 1 labex labex 0 Mar  7 HH:MM notes.txt

Finalmente, creemos un nuevo directorio llamado drafts dentro de ~/project/documents y luego creemos un archivo dentro de él.

mkdir drafts
cd drafts
touch draft_v1.txt

Verifique la creación del archivo:

ls -l

Debería ver draft_v1.txt listado.

Ahora, navegue de regreso a su directorio ~/project usando un solo comando cd.

cd ~/project

Verifique su ubicación:

pwd

La salida debería ser /home/labex/project.

Organice archivos y directorios con mkdir, cp, mv y rm

En este paso, aprenderá a organizar sus archivos y directorios de manera efectiva utilizando los comandos mkdir (make directory - crear directorio), cp (copy - copiar), mv (move/rename - mover/renombrar) y rm (remove - eliminar). Estos comandos son cruciales para mantener un sistema de archivos limpio y estructurado.

Primero, asegúrese de estar en su directorio ~/project.

cd ~/project

Verifique su ubicación actual:

pwd

La salida debería ser /home/labex/project.

mkdir: Creación de directorios

Ya ha utilizado mkdir para crear un solo directorio. Ahora, exploremos opciones más avanzadas de mkdir.

Puede crear varios directorios a la vez listándolos como argumentos:

mkdir reports presentations

Verifique su creación:

ls

Debería ver documents, presentations y reports listados.

La opción -p (parents - padres) del comando mkdir es muy útil para crear cualquier directorio padre faltante para el destino solicitado. Esto evita errores si intenta crear un subdirectorio dentro de un directorio padre inexistente.

Creemos una estructura de directorio anidada: projects/alpha/docs.

mkdir -p projects/alpha/docs

Ahora, use ls -R para ver la estructura anidada recién creada:

ls -R projects

Debería ver:

projects:
alpha

projects/alpha:
docs

projects/alpha/docs:

cp: Copia de archivos y directorios

El comando cp copia archivos y directorios. Al copiar un archivo, crea un duplicado ya sea en el directorio actual o en un directorio diferente especificado.

Copiemos report.txt desde documents al directorio reports.

cp documents/report.txt reports/

Verifique la copia listando el contenido del directorio reports:

ls reports

Debería ver report.txt en el directorio reports.

Si un archivo con el mismo nombre existe en el directorio de destino, cp lo sobrescribirá por defecto.

Para copiar un directorio y su contenido, debe usar la opción -r (recursive - recursivo). Por defecto, cp ignora los directorios si no se especifica -r.

Copiemos todo el directorio documents dentro de projects/alpha/.

cp -r documents projects/alpha/

Verifique la copia recursiva:

ls -R projects/alpha/documents

Debería ver el contenido del directorio documents (incluyendo notes.txt, drafts y drafts/draft_v1.txt) duplicado ahora dentro de projects/alpha/documents.

projects/alpha/documents:
drafts  notes.txt  report.txt

projects/alpha/documents/drafts:
draft_v1.txt

mv: Mover y renombrar archivos y directorios

El comando mv mueve archivos de una ubicación a otra. También se puede usar para renombrar archivos o directorios. Si piensa en la ruta absoluta de un archivo como su nombre completo, entonces mover un archivo es efectivamente lo mismo que renombrar un archivo. El contenido de los archivos que se mueven permanece sin cambios.

Renombremos notes.txt en el directorio documents a meeting_notes.txt.

mv documents/notes.txt documents/meeting_notes.txt

Verifique el cambio de nombre:

ls documents

Ahora debería ver meeting_notes.txt en lugar de notes.txt.

Ahora, movamos report.txt del directorio reports a documents/drafts.

mv reports/report.txt documents/drafts/

Verifique el movimiento:

ls reports

El directorio reports ahora debería estar vacío.

ls documents/drafts

Debería ver draft_v1.txt y report.txt en el directorio documents/drafts.

La opción -v para mv muestra una salida detallada de las operaciones del comando, lo que puede ser útil para la confirmación.

mv -v documents/meeting_notes.txt documents/final_notes.txt

Verá una salida como:

renamed 'documents/meeting_notes.txt' -> 'documents/final_notes.txt'

rm: Eliminar archivos y directorios

El comando rm elimina archivos. Tenga cuidado con rm, ya que los archivos eliminados normalmente no se pueden recuperar desde la línea de comandos.

Creemos un archivo temporal para practicar rm.

touch temp_file.txt

Ahora, elimine temp_file.txt:

rm temp_file.txt

Verifique su eliminación:

ls

temp_file.txt ya no debería aparecer en la lista.

Por defecto, rm no elimina directorios. Si intenta eliminar un directorio no vacío sin la opción correcta, obtendrá un error.

rm presentations

Verá un error:

rm: cannot remove 'presentations': Is a directory

Para eliminar directorios y su contenido, debe usar la opción -r (recursive - recursivo). El comando rm -r recorre primero cada subdirectorio y elimina individualmente sus archivos antes de eliminar cada directorio.

Eliminemos el directorio presentations y su contenido (que actualmente está vacío, pero -r todavía se requiere para directorios).

rm -r presentations

Verifique su eliminación:

ls

presentations ya no debería aparecer en la lista.

La opción -i para rm solicita interactivamente confirmación antes de eliminar cada archivo. Esta es una buena medida de seguridad.

Creemos algunos archivos temporales más y luego eliminémoslos interactivamente.

touch file1.txt file2.txt
rm -i file1.txt file2.txt

Se le pedirá confirmación para cada archivo:

rm: remove regular empty file 'file1.txt'? y
rm: remove regular empty file 'file2.txt'? y

Escriba y y presione Enter en cada solicitud para confirmar la eliminación.

La opción -f (force - forzar) fuerza la eliminación sin solicitar confirmación al usuario. Si especifica tanto -i como -f, -f tiene prioridad. Use -f con extrema precaución.

Finalmente, limpiemos el directorio projects.

rm -r projects

Verifique que projects ha desaparecido:

ls

rmdir: Eliminar directorios vacíos

También puede usar el comando rmdir para eliminar directorios vacíos. Fallará si el directorio no está vacío.

Creemos un directorio vacío y eliminémoslo con rmdir.

mkdir empty_dir
rmdir empty_dir

Verifique su eliminación:

ls

empty_dir ya no debería aparecer en la lista.

Si intenta eliminar un directorio no vacío con rmdir, fallará:

mkdir test_dir
touch test_dir/test_file.txt
rmdir test_dir

Verá un error:

rmdir: failed to remove 'test_dir': Directory not empty

Recuerde usar rm -r para directorios no vacíos.

rm -r test_dir

Cree enlaces entre archivos con ln (enlaces duros y simbólicos)

En este paso, aprenderá sobre la creación de enlaces entre archivos utilizando el comando ln. Los sistemas de archivos de Linux admiten dos tipos de enlaces: enlaces duros (hard links) y enlaces simbólicos (o soft links). Comprender la diferencia entre ellos es crucial para una gestión de archivos eficaz.

Primero, asegúrese de estar en su directorio ~/project.

cd ~/project

Verifique su ubicación actual:

pwd

La salida debería ser /home/labex/project.

Creemos un nuevo archivo llamado original_file.txt con algo de contenido para trabajar.

echo "This is the content of the original file." > original_file.txt

Verifique el contenido del archivo:

cat original_file.txt

Enlaces duros (Hard Links)

Un enlace duro es esencialmente otro nombre para un archivo existente. Apunta directamente a los mismos datos (inodo) en el dispositivo de almacenamiento que el archivo original. Después de crear un enlace duro, no puede notar la diferencia entre el nuevo enlace duro y el nombre original del archivo; son formas igualmente válidas de acceder a los mismos datos.

Puede determinar si un archivo tiene varios enlaces duros utilizando el comando ls -l. La segunda columna en la salida de ls -l muestra el número de enlaces duros al archivo.

Inicialmente, original_file.txt tiene un enlace duro (él mismo):

ls -l original_file.txt

Debería ver una salida similar a esta, donde el número 1 indica un enlace duro:

-rw-rw-r--. 1 labex labex 35 Mar  7 HH:MM original_file.txt

Ahora, creemos un enlace duro a original_file.txt llamado hard_link.txt usando el comando ln.

ln original_file.txt hard_link.txt

Compruebe el recuento de enlaces duros para ambos archivos:

ls -l original_file.txt hard_link.txt

Ahora debería ver el recuento de enlaces duros como 2 para ambos archivos, lo que indica que apuntan a los mismos datos:

-rw-rw-r--. 2 labex labex 35 Mar  7 HH:MM hard_link.txt
-rw-rw-r--. 2 labex labex 35 Mar  7 HH:MM original_file.txt

Para confirmar que apuntan a los mismos datos, puede usar la opción ls -i para listar el número de inodo de cada archivo. Si los archivos están en el mismo sistema de archivos y sus números de inodo son los mismos, entonces los archivos son enlaces duros que apuntan al mismo contenido de archivo de datos.

ls -i original_file.txt hard_link.txt

Los números de inodo deberían ser idénticos:

1234567 original_file.txt  1234567 hard_link.txt

Si modifica el contenido de un archivo, los cambios se reflejarán en el otro, porque son los mismos datos subyacentes.

echo "Adding new line." >> hard_link.txt
cat original_file.txt

Verá:

This is the content of the original file.
Adding new line.

Incluso si se elimina el archivo original, aún puede acceder al contenido del archivo siempre que exista al menos otro enlace duro. Los datos se eliminan del almacenamiento solo cuando se elimina el último enlace duro, lo que hace que el contenido del archivo no sea referenciado por ningún enlace duro.

Eliminemos original_file.txt:

rm original_file.txt

Ahora, intente acceder a hard_link.txt:

cat hard_link.txt

Aún verá el contenido:

This is the content of the original file.
Adding new line.

El recuento de enlaces duros para hard_link.txt ahora debería ser 1:

ls -l hard_link.txt

Limitaciones de los enlaces duros:

  • Solo puede usar enlaces duros con archivos regulares. No puede usar el comando ln para crear un enlace duro a un directorio o archivo especial.
  • Solo puede usar enlaces duros si ambos archivos están en el mismo sistema de archivos. Puede usar el comando df para listar los sistemas de archivos.

Enlaces simbólicos (Symbolic Links)

Un enlace simbólico (también llamado "enlace suave" o "symlink") es un tipo especial de archivo que apunta a otro archivo o directorio por su ruta. Es similar a un acceso directo en Windows. A diferencia de los enlaces duros, los enlaces simbólicos no apuntan directamente a los datos; apuntan al nombre del archivo o directorio de destino.

Creemos un nuevo archivo llamado target_file.txt para nuestro enlace simbólico.

echo "This is the target file for the symbolic link." > target_file.txt

Ahora, cree un enlace simbólico llamado sym_link.txt que apunte a target_file.txt usando el comando ln -s.

ln -s target_file.txt sym_link.txt

Compruebe los detalles del enlace simbólico usando ls -l:

ls -l target_file.txt sym_link.txt

Notará algunas diferencias:

  • El primer carácter de la lista larga para sym_link.txt es l (letra l), lo que indica que es un enlace simbólico.
  • La salida muestra sym_link.txt -> target_file.txt, mostrando explícitamente a qué apunta.
  • El tamaño del enlace simbólico es muy pequeño (es solo la longitud de la ruta de destino), no el tamaño del archivo de destino.
  • El recuento de enlaces duros para sym_link.txt es 1.
-rw-rw-r--. 1 labex labex 45 Mar  7 HH:MM target_file.txt
lrwxrwxrwx. 1 labex labex 14 Mar  7 HH:MM sym_link.txt -> target_file.txt

Puede acceder al contenido de target_file.txt a través de sym_link.txt:

cat sym_link.txt

Verá:

This is the target file for the symbolic link.

Diferencias clave y comportamientos de los enlaces simbólicos:

  • Enlace entre sistemas de archivos: Los enlaces simbólicos pueden enlazar dos archivos en diferentes sistemas de archivos.

  • Enlace a directorios: Los enlaces simbólicos pueden apuntar a un directorio, no solo a un archivo regular. Creemos un enlace simbólico a su directorio documents.

    ln -s documents doc_shortcut

    Ahora, puede hacer cd en doc_shortcut como si fuera el propio directorio documents:

    cd doc_shortcut

    Verifique su ubicación. Tenga en cuenta que pwd por defecto muestra la ruta del enlace simbólico:

    pwd

    Salida: /home/labex/project/doc_shortcut

    Si desea que pwd muestre la ruta real del directorio al que apunta el enlace simbólico, use la opción -P:

    pwd -P

    Salida: /home/labex/project/documents

    Ahora, regrese a ~/project:

    cd ~/project
  • Enlaces simbólicos "colgantes" (dangling): Cuando se elimina el archivo regular original (el destino), el enlace simbólico todavía existe pero apunta a un archivo faltante. Esto se llama un "enlace simbólico colgante".

    Eliminemos target_file.txt:

    rm target_file.txt

    Ahora, compruebe sym_link.txt con ls -l:

    ls -l sym_link.txt

    Verá que sym_link.txt todavía existe, pero su destino target_file.txt se muestra en rojo o en un color diferente (dependiendo de la configuración de su terminal) para indicar que está roto:

    lrwxrwxrwx. 1 labex labex 14 Mar  7 HH:MM sym_link.txt -> target_file.txt

    Si intenta hacer cat al enlace simbólico colgante, fallará:

    cat sym_link.txt

    Salida:

    cat: sym_link.txt: No such file or directory

Finalmente, limpiemos los archivos y enlaces creados en este paso.

rm hard_link.txt sym_link.txt doc_shortcut
ls

Solo debería ver los directorios documents y reports restantes de pasos anteriores.

Seleccione archivos de forma eficiente con expansiones de shell

En este paso, aprenderá a seleccionar archivos y directorios de manera eficiente utilizando varias características de expansión de shell, incluyendo la coincidencia de patrones (globbing), la expansión de tilde, la expansión de llaves, la expansión de variables y la sustitución de comandos. Estas características le permiten realizar operaciones en múltiples archivos con comandos concisos.

Primero, asegúrese de estar en su directorio ~/project.

cd ~/project

Verifique su ubicación actual:

pwd

La salida debe ser /home/labex/project.

Para demostrar las expansiones de shell, creemos un conjunto de archivos y directorios.

mkdir data
cd data
touch file1.txt file2.log file_a.txt file_b.log report_2023.txt report_2024.log
touch image.jpg document.pdf archive.zip
mkdir dir1 dir2 dir3
cd ..

Ahora, liste el contenido del directorio data para ver los archivos que ha creado:

ls data

Debería ver:

archive.zip  dir1  dir2  dir3  document.pdf  file1.txt  file2.log  file_a.txt  file_b.log  image.jpg  report_2023.txt  report_2024.log

Coincidencia de Patrones (Globbing)

La coincidencia de patrones, también conocida como globbing, le permite seleccionar archivos basándose en patrones utilizando caracteres especiales llamados metacaracteres.

Metacarácter Coincide con Ejemplo
* Cualquier cadena de cero o más caracteres. *.txt coincide con todos los archivos que terminan en .txt.
? Cualquier carácter único. file?.txt coincide con file1.txt, fileA.txt, etc.
[abc...] Cualquier carácter dentro de la clase encerrada. file[12].txt coincide con file1.txt o file2.txt.
[!abc...] Cualquier carácter que NO esté en la clase. file[!1].txt coincide con fileA.txt pero no con file1.txt.
[[:alpha:]] Cualquier carácter alfabético. file[[:alpha:]].txt coincide con fileA.txt.
[[:digit:]] Cualquier dígito único del 0 al 9. file[[:digit:]].txt coincide con file1.txt.

Probemos algunos ejemplos dentro del directorio data.

  1. Usando *:
    Liste todos los archivos que terminan en .txt:

    ls data/*.txt

    Salida:

    data/file1.txt  data/file_a.txt  data/report_2023.txt

    Liste todos los archivos que contienen file en su nombre:

    ls data/*file*

    Salida:

    data/file1.txt  data/file2.log  data/file_a.txt  data/file_b.log
  2. Usando ?:
    Liste los archivos que tienen exactamente un carácter antes de .log:

    ls data/file?.log

    Salida:

    data/file2.log
  3. Usando [] para conjuntos de caracteres:
    Liste los archivos que comienzan con report_ y tienen 2023 o 2024 en su nombre:

    ls data/report_[2][0][2][34].*

    Salida:

    data/report_2023.txt  data/report_2024.log
  4. Usando {} para expansión de llaves (brace expansion):
    Liste los archivos que comienzan con file y terminan en .txt o .log:

    ls data/file*.{txt,log}

    Salida:

    data/file1.txt  data/file2.log  data/file_a.txt  data/file_b.log

Expansión de Tilde ~

El carácter tilde (~) se expande al directorio principal del usuario actual (/home/labex). Cuando va seguido de un nombre de usuario, se expande al directorio principal de ese usuario.

echo ~

Salida:

/home/labex
echo ~root

Salida:

/root
echo ~/project/data

Salida:

/home/labex/project/data

Expansión de Llaves (Brace Expansion) {}

La expansión de llaves genera cadenas arbitrarias. Es útil para crear listas de archivos o directorios con nombres similares sin tener que escribir cada uno individualmente.

  1. Lista separada por comas:
    Cree los archivos report_jan.txt, report_feb.txt, report_mar.txt:

    touch data/report_{jan,feb,mar}.txt

    Lístelos:

    ls data/report_*.txt

    Salida:

    data/report_2023.txt  data/report_jan.txt  data/report_feb.txt  data/report_mar.txt
  2. Rango de números o letras:
    Cree los archivos doc1.txt, doc2.txt, doc3.txt:

    touch data/doc{1..3}.txt

    Lístelos:

    ls data/doc*.txt

    Salida:

    data/doc1.txt  data/doc2.txt  data/doc3.txt

    Cree los directorios chapterA, chapterB, chapterC:

    mkdir data/chapter{A..C}

    Lístelos:

    ls data/chapter*

    Salida:

    data/chapterA  data/chapterB  data/chapterC

Expansión de Variables

Las variables de shell almacenan valores que pueden expandirse en comandos. Define una variable usando VARNAME=valor y accede a su valor usando $VARNAME o ${VARNAME}.

MY_DIR=data
echo "My directory is: $MY_DIR"

Salida:

My directory is: data

Puede usar variables en comandos:

ls $MY_DIR

La salida será el contenido del directorio data.

Sustitución de Comandos (Command Substitution)

La sustitución de comandos le permite usar la salida de un comando como parte de otro comando. Esto se logra encerrando el comando entre $(comando) o comillas invertidas `comando`. La sintaxis $(comando) generalmente se prefiere ya que puede anidarse.

Obtengamos la fecha actual y usémosla en un nombre de archivo.

touch data/log_$(date +%Y-%m-%d).txt

Liste el directorio data para ver el nuevo archivo:

ls data/log_*.txt

La salida será similar a:

data/log_2024-03-07.txt

También puede usarlo para contar archivos:

echo "There are $(ls data | wc -l) items in the data directory."

La salida será similar a:

There are 19 items in the data directory.

Protección de Argumentos contra la Expansión

A veces, desea evitar que el shell expanda ciertos caracteres. Puede hacerlo utilizando:

  1. Barra invertida (\): Escapa el siguiente carácter único.

    echo "The value of \$HOME is your home directory."

    Salida:

    The value of $HOME is your home directory.
  2. Comillas simples (''): Evitan toda expansión de shell dentro de las comillas.

    echo 'The current date is $(date +%Y-%m-%d).'

    Salida:

    The current date is $(date +%Y-%m-%d).
  3. Comillas dobles (""): Evitan la mayor parte de la expansión de shell, pero permiten la expansión de variables ($VAR) y la sustitución de comandos ($()).

    MY_DATE=$(date +%Y-%m-%d)
    echo "Today's date is $MY_DATE."

    Salida:

    Today's date is 2024-03-07.

    Compare con las comillas simples:

    echo 'Today is $MY_DATE.'

    Salida:

    Today's date is $MY_DATE.

Finalmente, limpiemos el directorio data.

rm -r data

Resumen

En este laboratorio, aprendió herramientas fundamentales de la línea de comandos para administrar archivos y directorios en RHEL. Comenzó dominando pwd para identificar su directorio de trabajo actual y ls para listar el contenido de los directorios, incluido el uso de opciones como -l para obtener información detallada y -a para revelar archivos ocultos. Luego progresó a la navegación por el sistema de archivos con cd y la creación de nuevos archivos con touch.

Además, adquirió experiencia en la organización de su sistema de archivos utilizando mkdir para crear directorios, cp para copiar archivos y directorios, mv para moverlos o renombrarlos, y rm para eliminarlos. El laboratorio también cubrió la creación de enlaces duros y simbólicos usando ln, y cómo seleccionar archivos de manera eficiente utilizando expansiones del shell, mejorando su capacidad para administrar archivos y directorios de manera efectiva desde la línea de comandos.