5  Exploración del Sistema de Archivos

La navegación efectiva del sistema de archivos es fundamental para cualquier trabajo en bioinformática. En este módulo aprenderás a moverte con confianza por tu sistema usando la terminal bash.

5.1 ¿Por qué es importante?

En bioinformática trabajamos constantemente con:

  • Archivos de secuencias (FASTA, FASTQ)
  • Bases de datos genómicas
  • Scripts de análisis
  • Resultados de experimentos
  • Múltiples directorios de proyectos

5.2 Comandos básicos de navegación

Antes de comenzar, vamos a descargar y descomprimir el siguiente archivo class.zip, el cual contiene los archivos necesarios para esta clase.

# Descarga de archivos de la web
wget https://github.com/BioCode-Academy/Unix/raw/refs/heads/dev/class.zip

# Descomprimir archivos .zip
unzip class.zip

Nota: Estos archivos son propiedad de la (Software Carpetry)[https://software-carpentry.org/] (The Carpentries 2025) un proyecto que enseña habilidades computacionales básicas a investigadores para que puedan trabajar de forma más eficiente y productiva.

5.2.1 $ - prompt

El signo $ es un prompt, que nos muestra que la terminal está esperando una entrada; tu terminal puede usar un carácter diferente como prompt y puede agregar información antes de él. Al teclear comandos, ya sea a partir de estas lecciones o de otras fuentes, no escribas el prompt ($), sólo los comandos que le siguen.

(base) david:Unix$ # Aquí va el códgio a usar

5.2.2 whoami - ¿Qué usuario estoy usando?

La salida del comando whoami es el ID del usuario actual, es decir, nos muestra como quién nos identifica la terminal:

whoami

Resultado esperado:

david

5.2.3 pwd - ¿Dónde estoy?

El comando pwd (Print Working Directory) te muestra tu ubicación actual:

pwd

Resultado esperado:

/home/david/Documents/Code/courses/BioCode-Academy/Unix

5.2.4 ls - ¿Qué hay aquí?

Lista el contenido del directorio actual o especificado:

# Listado básico
ls

# Listado detallado con permisos, fechas y tamaños
ls -l

# Incluir archivos ocultos
ls -la

# Ordenar por fecha de modificación
ls -lt

# Tamaños legibles para humanos
ls -lh

Ejemplo:

ls -lh class/

Resultado esperado:

total 72K
drwxr-xr-x 2 david david 4.0K Nov 17  2015 creatures
drwxr-xr-x 5 david david 4.0K Nov 17  2015 data
drwxr-xr-x 2 david david 4.0K Nov 17  2015 Desktop
drwxr-xr-x 2 david david 4.0K Nov 17  2015 molecules
drwxrwxr-x 2 david david 4.0K May 26 14:54 Neucr2
drwxr-xr-x 3 david david 4.0K Nov 17  2015 north-pacific-gyre
-rw-r--r-- 1 david david   86 Nov 17  2015 notes.txt
-rw-r--r-- 1 david david   32 Nov 17  2015 pizza.cfg
-rw-r--r-- 1 david david  22K Nov 17  2015 solar.pdf
drwxr-xr-x 6 david david 4.0K Nov 17  2015 writing

Opciones útiles de ls:

  • -l: formato largo con detalles
  • -a: mostrar archivos ocultos (empiezan con .)
  • -h: tamaños legibles (KB, MB, GB)
  • -t: ordenar por fecha
  • -r: orden inverso
  • -S: ordenar por tamaño

5.2.5 cd - Moverse entre directorios

Este comando permite cambiar de directorio (Change Directory)

# Ir a un directorio específico
cd /home/usuario/proyectos

# Ir al directorio padre
cd ..

# Ir al directorio home del usuario
cd ~
# o simplemente
cd

# Volver al directorio anterior
cd -

Ejemplo:

# Navegando en un proyecto de análisis de microbioma
pwd 
# /home/david/Documents/Code/courses/BioCode-Academy/Unix/
cd class/creatures/
pwd
# /home/david/Documents/Code/courses/BioCode-Academy/Unix/class/creatures
cd ..
pwd
# /home/david/Documents/Code/courses/BioCode-Academy/Unix/class
cd
pwd
# /home/david
cd -
pwd
# /home/david/Documents/Code/courses/BioCode-Academy/Unix/class
cd ..
pwd
# /home/david/Documents/Code/courses/BioCode-Academy/Unix/

5.2.6 tree - Vista jerárquica

Muestra la estructura de directorios en forma de árbol (tree):

# Instalar tree si no está disponible
sudo apt install tree  # Ubuntu/Debian
brew install tree      # macOS

# Uso básico
tree

# Limitar profundidad
tree -L 2

# Solo directorios
tree -d

# Incluir tamaños de archivo
tree -h

Ejemplo:

# Estructura típica de un proyecto de bioinformática
tree class/ -L 2 -h

Resultado esperado:

[4.0K]  class/
├── [4.0K]  creatures
   ├── [1.8K]  basilisk.dat
   └── [1.8K]  unicorn.dat
├── [4.0K]  data
   ├── [ 283]  amino-acids.txt
   ├── [4.0K]  animal-counts
   ├── [ 136]  animals.txt
   ├── [4.0K]  elements
   ├── [ 554]  morse.txt
   ├── [4.0K]  pdb
   ├── [8.7K]  planets.txt
   ├── [  45]  salmon.txt
   └── [ 72K]  sunspot.txt
├── [4.0K]  Desktop
├── [4.0K]  molecules
   ├── [1.1K]  cubane.pdb
   ├── [ 622]  ethane.pdb
   ├── [ 422]  methane.pdb
   ├── [1.8K]  octane.pdb
   ├── [1.2K]  pentane.pdb
   └── [ 825]  propane.pdb
├── [4.0K]  Neucr2
   ├── [ 12M]  Neucr2_AssemblyScaffolds.fasta.gz
   ├── [ 13M]  Neucr2_AssemblyScaffolds_Repeatmasked.fasta.gz
   ├── [1.1M]  Neucr2.filtered_proteins.BroadModels.gff3.gz
   ├── [4.6M]  Neucr2_GeneCatalog_CDS_20130412.fasta.gz
   ├── [779K]  Neucr2_GeneCatalog_genes_20130412.gff.gz
   ├── [3.0M]  Neucr2_GeneCatalog_proteins_20130412.aa.fasta.gz
   ├── [242K]  Neucr2_GeneCatalog_proteins_20130412_GO.tab.gz
   ├── [632K]  Neucr2_GeneCatalog_proteins_20130412_IPR.tab.gz
   ├── [ 84K]  Neucr2_GeneCatalog_proteins_20130412_KEGG.tab.gz
   ├── [120K]  Neucr2_GeneCatalog_proteins_20130412_KOG.tab.gz
   ├── [5.7K]  Neucr2_GeneCatalog_proteins_20130412_SigP.tab.gz
   └── [6.8M]  Neucr2_GeneCatalog_transcripts_20130412.nt.fasta.gz
├── [4.0K]  north-pacific-gyre
   └── [4.0K]  2012-07-03
├── [  86]  notes.txt
├── [  32]  pizza.cfg
├── [ 21K]  solar.pdf
└── [4.0K]  writing
    ├── [4.0K]  data
    ├── [ 218]  haiku.txt
    ├── [4.0K]  old
    ├── [4.0K]  thesis
    └── [4.0K]  tools

15 directories, 18 files

5.3 Atajos y rutas especiales

5.3.1 Rutas absolutas vs relativas

# Ruta absoluta (desde la raíz del sistema)
cd /home/usuario/proyectos/genomica/datos

# Ruta relativa (desde la ubicación actual)
cd datos/
cd ../scripts/
cd ../../otro_proyecto/

5.3.2 Atajos importantes

  • ~ : Directorio home del usuario
  • . : Directorio actual
  • .. : Directorio padre
  • $PWD : Variable con el directorio actual
  • $HOME : Variable con el directorio home
# ~ 
ls ~/Documentos/

# . 
ls ./datos/

# ..
cd ../

# $PWD 
echo "Estoy en: $PWD"

# $HOME 
echo "Mi home es: $HOME"

5.4 Ejemplo práctico

5.5 Consejos y Buenas Prácticas

  1. Usa autocompletado: Presiona Tab para completar nombres de archivos y directorios
  2. Historial de comandos: Usa las flechas ↑↓ para navegar por comandos anteriores
  3. Nombres descriptivos: Usa nombres claros para directorios (datos_crudos mejor que data1)
  4. Estructura consistente: Mantén una organización estándar en todos tus proyectos
  5. Backup regular: Siempre ten copias de seguridad de datos importantes

5.6 Comando de ayuda

# Obtener ayuda de la mayoría de los comandos
man ls | head -n 20

Resultado esperado:

LS(1)                                                              User Commands                                                             LS(1)

NAME
       ls - list directory contents

SYNOPSIS
       ls [OPTION]... [FILE]...

DESCRIPTION
       List information about the FILEs (the current directory by default).  Sort entries alphabetically if none of -cftuvSUX nor --sort is speci‐
       fied.

       Mandatory arguments to long options are mandatory for short options too.

       -a, --all
              do not ignore entries starting with .

       -A, --almost-all
              do not list implied . and ..

Ejemplo:

ls --help | head -n 20

Resultado esperado:

Usage: ls [OPTION]... [FILE]...
List information about the FILEs (the current directory by default).
Sort entries alphabetically if none of -cftuvSUX nor --sort is specified.

Mandatory arguments to long options are mandatory for short options too.
  -a, --all                  do not ignore entries starting with .
  -A, --almost-all           do not list implied . and ..
      --author               with -l, print the author of each file
  -b, --escape               print C-style escapes for nongraphic characters
      --block-size=SIZE      with -l, scale sizes by SIZE when printing them;
                             e.g., '--block-size=M'; see SIZE format below

  -B, --ignore-backups       do not list implied entries ending with ~
  -c                         with -lt: sort by, and show, ctime (time of last
                             change of file status information);
                             with -l: show ctime and sort by name;
                             otherwise: sort by ctime, newest first

  -C                         list entries by columns
      --color[=WHEN]         color the output WHEN; more info below

5.7 Resumen de comandos

Comando Función Ejemplo
pwd Mostrar directorio actual pwd
ls Listar contenido ls -lh
cd Cambiar directorio cd datos/
tree Vista jerárquica tree -L 2
~ Directorio home cd ~
. Directorio actual ls ./
.. Directorio padre cd ../