El Terminal Unix
Archivos y Directorios
Objetivos de Aprendizaje
- Explicar las similitudes y diferencias entre un archivo y un directorio.
- Traducir una ruta absoluta en una ruta relativa y viceversa.
- Construir rutas absolutas y relativas que identifican a archivos y directorios específicos.
- Explicar los pasos en el ciclo lectura-ejecución-impresión del terminal.
- Identificar al comando actual, banderas, y nombres de archivo en una llamada de línea de comandos.
- Demostrar el uso de la completación con el tabulador, y explicar sus ventajas.
La parte del sistema operativo responsable de la gestión de archivos y directorios se llama sistema de archivos. Organiza nuestros datos en archivos, que mantienen la información, y directorios (también llamados “carpetas”), que mantienen archivos u otros directorios.
Se utilizan varios comandos con frecuencia para crear, revisar, renombrar y borrar archivos y directorios. Para iniciar la exploración de ellos, vamos a abrir una ventana de comandos:
$
El signo del dólar es un apuntador, que nos muestra que el terminal está esperando una entrada; su terminal puede utilizar un carácter diferente, como apuntador y puede añadir información antes del apuntador. Al escribir comandos, ya sea desde estas lecciones o de otras fuentes, no escriba el apuntador, sólo los comandos que le siguen.
Escriba el comando whoami, a continuación, pulse la tecla Intro (a veces marcada Return) para enviar el comando al terminal. La salida del comando es el ID del usuario actual, es decir, nos muestra quien cree el terminal que somos:
$ whoami
nelle
Mas específicamente, cuando escribimos whoami el terminal:
- encuentra un programa
whoami, - ejecuta ese programa,
- muestra la salida del programa, y entonces
- muestra un nuevo apuntador para decirnos que está listo para mas comandos.
A continuación, encontremos dónde estamos ejecutando el programa llamado pwd (que significa “imprimir el directorio de trabajo”, de “print working directory”). En cualquier momento, nuestro directorio de trabajo actual es nuestro actual directorio por defecto, es decir, el directorio en el que el computador asume que queremos ejecutar los comandos a menos que explícitamente indiquemos algo mas. Aquí, la respuesta de la computadora es /Users/nelle, el cual es el directorio home (o “carpeta personal”) de Nell:
$ pwd
/Users/nelle
Para entender lo que es un “directorio home”, vamos a echar un vistazo a cómo está organizado el sistema de archivos como un todo. En la parte superior es el directorio root (raíz) que contiene todo lo demás. Nos referimos a él mismo mediante un carácter de barra /; esta es la barra inicial en /Users/nelle.
Dentro de ese directorio hay varios otros directorios: bin (en el cual se almacenan varios programas incorporados), data (para archivos de datos misceláneos), Users (donde están localizadas las carpetas personales de los usuarios), tmp (para archivos temporales que necesitan estar almacenados por mucho tiempo), y así:
El Sistema de Archivos
Sabemos que nuestro directorio home actual /Users/nelle está almacenado dentro de/Users porque /Users es la primera parte de su nombre. Del mismo modo, sabemos que /Users está almacenado dentro del directorio raíz / debido a que su nombre comienza con /.
Debajo de /Users, nos encontramos con un directorio para cada usuario con una cuenta en esta máquina. Los archivos de la momia se almacenan en /Users/imhotep, Los del hombre lobo en /Users/larry, y la nuestra en /Users/nelle, es por ello que nelle es la última parte del nombre del directorio.
Directorios Home
Veamos lo que hay en el directorio home de Nelle ejecutando ls, que significa “listar”:
$ ls
creatures molecules pizza.cfg
data north-pacific-gyre solar.pdf
Desktop notes.txt writing
El directorio home de Nelle
ls imprime los nombres de los archivos y directorios en el directorio actual en orden alfabético, dispuestos ordenadamente en columnas. Podemos hacer su salida más comprensible mediante el uso de la bandera -F, que le pide a ls añadir al final un /para los nombres de directorios:
$ ls -F
creatures/ molecules/ pizza.cfg
data/ north-pacific-gyre/ solar.pdf
Desktop/ notes.txt writing/
Aquí, podemos ver que /Users/nelle contiene seis subdirectorios. Los nombres que no tienen barras al final, como notes.txt, pizza.cfg, y solar.pdf, son archivos planos de toda la vida. Y tenga en cuenta que hay un espacio entre ls y-F: sin el, el terminal cree que estamos tratando de ejecutar un comando llamado ls-F, que no existe.
Ahora revisemos a lo que está en el directorio data de Nelle ejecutando ls -F data, es decir., el comando ls con los argumentos -F y data. El segundo argumento — el que está sin un guión adelante — le dice a ls que queremos una lista de algo distinto de nuestro directorio de trabajo actual:
$ ls -F data
amino-acids.txt elements/ pdb/ salmon.txt
animals.txt morse.txt planets.txt sunspot.txt
La salida nos muestra que hay cuatro archivos de texto y dos sub-sub-directorios. organizando las cosas jerárquicamente de esta manera nos ayuda a mantener un seguimiento de nuestro trabajo: es posible poner cientos de archivos en nuestro directorio personal, del mismo modo que es posible acumular cientos de papeles impresos en nuestro escritorio, pero es una estrategia contraproducente.
Noten, por la forma en que deletreó el nombre del directorio data. No tiene una barra final: que se agrega a los nombres de directorio por ls cuando usamos la bandera -F que nos ayuda a separar las cosas. Y no comienza con una barra porque es una ruta relativa, es decir, le dice a ls cómo encontrar algo desde donde estamos, en lugar de hacerlo desde la raíz del sistema de archivos.
If we run ls -F /data (with a leading slash) we get a different answer, because /data is an absolute path:
$ ls -F /data
access.log backup/ hardware.cfg
network.cfg
The leading / tells the computer to follow the path from the root of the file system, so it always refers to exactly one directory, no matter where we are when we run the command.
What if we want to change our current working directory? Before we do this, pwd shows us that we’re in /Users/nelle, and ls without any arguments shows us that directory’s contents:
$ pwd
/Users/nelle
$ ls
creatures molecules pizza.cfg
data north-pacific-gyre solar.pdf
Desktop notes.txt writing
We can use cd followed by a directory name to change our working directory. cd stands for “change directory”, which is a bit misleading: the command doesn’t change the directory, it changes the shell’s idea of what directory we are in.
$ cd data
cd doesn’t print anything, but if we run pwd after it, we can see that we are now in /Users/nelle/data. If we run ls without arguments now, it lists the contents of /Users/nelle/data, because that’s where we now are:
$ pwd
/Users/nelle/data
$ ls -F
amino-acids.txt elements/ pdb/ salmon.txt
animals.txt morse.txt planets.txt sunspot.txt
We now know how to go down the directory tree: how do we go up? We could use an absolute path:
$ cd /Users/nelle
but it’s almost always simpler to use cd .. to go up one level:
$ pwd
/Users/nelle/data
$ cd ..
.. is a special directory name meaning “the directory containing this one”, or more succinctly, the parent of the current directory. Sure enough, if we run pwd after running cd .., we’re back in /Users/nelle:
$ pwd
/Users/nelle
The special directory .. doesn’t usually show up when we run ls. If we want to display it, we can give ls the -a flag:
$ ls -F -a
./ creatures/ notes.txt
../ data/ pizza.cfg
.bash_profile molecules/ solar.pdf
Desktop/ north-pacific-gyre/ writing/
-a stands for “show all”; it forces ls to show us file and directory names that begin with ., such as .. (which, if we’re in /Users/nelle, refers to the /Users directory). As you can see, it also displays another special directory that’s just called ., which means “the current working directory”. It may seem redundant to have a name for it, but we’ll see some uses for it soon. Finally, we also see a file called .bash_profile. This file usually contains settings to customize the shell (terminal). For this lesson material it does not contain any settings. There may also be similar files called .bashrc or .bash_login. The . prefix is used to prevent these configuration files from cluttering the terminal when a standard ls command is used.
Nelle’s Pipeline: Organizing Files
Knowing just this much about files and directories, Nelle is ready to organize the files that the protein assay machine will create. First, she creates a directory called north-pacific-gyre (to remind herself where the data came from). Inside that, she creates a directory called 2012-07-03, which is the date she started processing the samples. She used to use names like conference-paper and revised-results, but she found them hard to understand after a couple of years. (The final straw was when she found herself creating a directory called revised-revised-results-3.)
Each of her physical samples is labelled according to her lab’s convention with a unique ten-character ID, such as “NENE01729A”. This is what she used in her collection log to record the location, time, depth, and other characteristics of the sample, so she decides to use it as part of each data file’s name. Since the assay machine’s output is plain text, she will call her files NENE01729A.txt, NENE01812A.txt, and so on. All 1520 files will go into the same directory.
If she is in her home directory, Nelle can see what files she has using the command:
$ ls north-pacific-gyre/2012-07-03/
This is a lot to type, but she can let the shell do most of the work through what is called tab completion. If she types:
$ ls nor
and then presses tab (the tab key on her keyboard), the shell automatically completes the directory name for her:
$ ls north-pacific-gyre/
If she presses tab again, Bash will add 2012-07-03/ to the command, since it’s the only possible completion. Pressing tab again does nothing, since there are 1520 possibilities; pressing tab twice brings up a list of all the files, and so on. This is called tab completion, and we will see it in many other tools as we go on.
File System for Challenge Questions
Relative path resolution
If pwd displays /Users/thing, what will ls ../backup display?
../backup: No such file or directory2012-12-01 2013-01-08 2013-01-272012-12-01/ 2013-01-08/ 2013-01-27/original pnas_final pnas_sub
Many ways to do the same thing - absolute vs relative paths
For a hypothetical filesystem location of /home/amanda/data/, select each of the below commands that Amanda could use to navigate to her home directory, which is /home/amanda
cd .cd /cd /home/amandacd ../..cd ~cd homecd ~/data/..cdcd ..
ls reading comprehension
If pwd displays /Users/backup, and -r tells ls to display things in reverse order, what command will display:
pnas-sub/ pnas-final/ original/
ls pwdls -r -Fls -r -F /Users/backup- Either #2 or #3 above, but not #1.
Default cd action
What does the command cd without a directory name do?
- It has no effect.
- It changes the working directory to
/. - It changes the working directory to the user’s home directory.
- It produces an error message.
Exploring more ls arguments
What does the command ls do when used with the -s and -h arguments?