Saltar al contenido principal
LibreTexts Español

1.3: La línea de comandos y el sistema de archivos

  • Page ID
    55200
  • \( \newcommand{\vecs}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \)

    \( \newcommand{\vecd}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash {#1}}} \)

    \( \newcommand{\id}{\mathrm{id}}\) \( \newcommand{\Span}{\mathrm{span}}\)

    ( \newcommand{\kernel}{\mathrm{null}\,}\) \( \newcommand{\range}{\mathrm{range}\,}\)

    \( \newcommand{\RealPart}{\mathrm{Re}}\) \( \newcommand{\ImaginaryPart}{\mathrm{Im}}\)

    \( \newcommand{\Argument}{\mathrm{Arg}}\) \( \newcommand{\norm}[1]{\| #1 \|}\)

    \( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\)

    \( \newcommand{\Span}{\mathrm{span}}\)

    \( \newcommand{\id}{\mathrm{id}}\)

    \( \newcommand{\Span}{\mathrm{span}}\)

    \( \newcommand{\kernel}{\mathrm{null}\,}\)

    \( \newcommand{\range}{\mathrm{range}\,}\)

    \( \newcommand{\RealPart}{\mathrm{Re}}\)

    \( \newcommand{\ImaginaryPart}{\mathrm{Im}}\)

    \( \newcommand{\Argument}{\mathrm{Arg}}\)

    \( \newcommand{\norm}[1]{\| #1 \|}\)

    \( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\)

    \( \newcommand{\Span}{\mathrm{span}}\) \( \newcommand{\AA}{\unicode[.8,0]{x212B}}\)

    \( \newcommand{\vectorA}[1]{\vec{#1}}      % arrow\)

    \( \newcommand{\vectorAt}[1]{\vec{\text{#1}}}      % arrow\)

    \( \newcommand{\vectorB}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \)

    \( \newcommand{\vectorC}[1]{\textbf{#1}} \)

    \( \newcommand{\vectorD}[1]{\overrightarrow{#1}} \)

    \( \newcommand{\vectorDt}[1]{\overrightarrow{\text{#1}}} \)

    \( \newcommand{\vectE}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash{\mathbf {#1}}}} \)

    \( \newcommand{\vecs}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \)

    \( \newcommand{\vecd}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash {#1}}} \)

    \(\newcommand{\avec}{\mathbf a}\) \(\newcommand{\bvec}{\mathbf b}\) \(\newcommand{\cvec}{\mathbf c}\) \(\newcommand{\dvec}{\mathbf d}\) \(\newcommand{\dtil}{\widetilde{\mathbf d}}\) \(\newcommand{\evec}{\mathbf e}\) \(\newcommand{\fvec}{\mathbf f}\) \(\newcommand{\nvec}{\mathbf n}\) \(\newcommand{\pvec}{\mathbf p}\) \(\newcommand{\qvec}{\mathbf q}\) \(\newcommand{\svec}{\mathbf s}\) \(\newcommand{\tvec}{\mathbf t}\) \(\newcommand{\uvec}{\mathbf u}\) \(\newcommand{\vvec}{\mathbf v}\) \(\newcommand{\wvec}{\mathbf w}\) \(\newcommand{\xvec}{\mathbf x}\) \(\newcommand{\yvec}{\mathbf y}\) \(\newcommand{\zvec}{\mathbf z}\) \(\newcommand{\rvec}{\mathbf r}\) \(\newcommand{\mvec}{\mathbf m}\) \(\newcommand{\zerovec}{\mathbf 0}\) \(\newcommand{\onevec}{\mathbf 1}\) \(\newcommand{\real}{\mathbb R}\) \(\newcommand{\twovec}[2]{\left[\begin{array}{r}#1 \\ #2 \end{array}\right]}\) \(\newcommand{\ctwovec}[2]{\left[\begin{array}{c}#1 \\ #2 \end{array}\right]}\) \(\newcommand{\threevec}[3]{\left[\begin{array}{r}#1 \\ #2 \\ #3 \end{array}\right]}\) \(\newcommand{\cthreevec}[3]{\left[\begin{array}{c}#1 \\ #2 \\ #3 \end{array}\right]}\) \(\newcommand{\fourvec}[4]{\left[\begin{array}{r}#1 \\ #2 \\ #3 \\ #4 \end{array}\right]}\) \(\newcommand{\cfourvec}[4]{\left[\begin{array}{c}#1 \\ #2 \\ #3 \\ #4 \end{array}\right]}\) \(\newcommand{\fivevec}[5]{\left[\begin{array}{r}#1 \\ #2 \\ #3 \\ #4 \\ #5 \\ \end{array}\right]}\) \(\newcommand{\cfivevec}[5]{\left[\begin{array}{c}#1 \\ #2 \\ #3 \\ #4 \\ #5 \\ \end{array}\right]}\) \(\newcommand{\mattwo}[4]{\left[\begin{array}{rr}#1 \amp #2 \\ #3 \amp #4 \\ \end{array}\right]}\) \(\newcommand{\laspan}[1]{\text{Span}\{#1\}}\) \(\newcommand{\bcal}{\cal B}\) \(\newcommand{\ccal}{\cal C}\) \(\newcommand{\scal}{\cal S}\) \(\newcommand{\wcal}{\cal W}\) \(\newcommand{\ecal}{\cal E}\) \(\newcommand{\coords}[2]{\left\{#1\right\}_{#2}}\) \(\newcommand{\gray}[1]{\color{gray}{#1}}\) \(\newcommand{\lgray}[1]{\color{lightgray}{#1}}\) \(\newcommand{\rank}{\operatorname{rank}}\) \(\newcommand{\row}{\text{Row}}\) \(\newcommand{\col}{\text{Col}}\) \(\renewcommand{\row}{\text{Row}}\) \(\newcommand{\nul}{\text{Nul}}\) \(\newcommand{\var}{\text{Var}}\) \(\newcommand{\corr}{\text{corr}}\) \(\newcommand{\len}[1]{\left|#1\right|}\) \(\newcommand{\bbar}{\overline{\bvec}}\) \(\newcommand{\bhat}{\widehat{\bvec}}\) \(\newcommand{\bperp}{\bvec^\perp}\) \(\newcommand{\xhat}{\widehat{\xvec}}\) \(\newcommand{\vhat}{\widehat{\vvec}}\) \(\newcommand{\uhat}{\widehat{\uvec}}\) \(\newcommand{\what}{\widehat{\wvec}}\) \(\newcommand{\Sighat}{\widehat{\Sigma}}\) \(\newcommand{\lt}{<}\) \(\newcommand{\gt}{>}\) \(\newcommand{\amp}{&}\) \(\definecolor{fillinmathshade}{gray}{0.9}\)

    Los usuarios de computadoras están acostumbrados a interactuar con una “interfaz de usuario”. En muchas computadoras, esta interfaz muestra el escritorio o la barra de tareas, iconos, vistas previas de archivos, etc. Toma la entrada del usuario en forma de pulsaciones de teclas, movimientos del mouse y en algunos casos comandos de voz, y presenta los resultados de las acciones del usuario. Quizás lo más importante es que la interfaz de usuario es en sí misma un programa (es un software que se ejecuta en una computadora, después de todo) con el que interactuamos para ejecutar otros programas.

    Lo mismo sucede cuando usamos SSH para iniciar sesión en una máquina remota, o abrir la aplicación Terminal en un escritorio Linux o OS X. En este caso, sin embargo, en lugar de interactuar con una GUI (Graphical User Interface), interactuamos con una CLI (Command-Line Interface), o shell, que hace el trabajo de mostrar el símbolo del sistema. El shell es el software con el que interactuamos en la línea de comandos. En cierto sentido es la línea de comandos, ya que muestra el símbolo del sistema, acepta entrada a través de texto mecanografiado, ejecuta otros programas en nuestro nombre y muestra los resultados textualmente. Un símbolo del sistema es una línea de información de estado proporcionada en una interfaz basada en texto, que indica que los comandos deben ingresarse y ejecutarse presionando Enter. Las solicitudes de comando a menudo incluyen información sobre qué computadora o red está conectado, el nombre de usuario con el que se ha iniciado sesión y una indicación del “directorio de trabajo actual” (discutido a continuación).

    El primer comando que aprenderemos para la línea de comandos de Linux es echo, que imprime los parámetros que le damos.

    oneils@atmosphere ~$ echo hello there
    hello there

    Desglosemos el símbolo del sistema y el programa que ejecutamos, que consistía en un nombre de programa y varios parámetros, separados por espacios. En la siguiente figura, el símbolo del sistema consta de oneils @atmosphere ~$.

    imagen

    El programa de eco puede parecer absurdamente simple, ya que simplemente imprime sus parámetros. Pero es bastante útil en la práctica y como herramienta de aprendizaje. Por ejemplo, podemos usar echo para imprimir no solo cadenas simples, sino también el contenido de una variable de entorno, que es un bit variable de información (generalmente conteniendo cadenas de texto) que es accesible por el shell y otros programas que ejecuta el usuario. Acceder al contenido de una variable de entorno requiere prefijarla con un $.

    El shell (y otros programas) comúnmente usa variables de entorno para almacenar información sobre su sesión de inicio de sesión, al igual que cómo, en una interfaz GUI, una “variable” recuerda la imagen del fondo de pantalla para el escritorio. Las variables de entorno controlan muchos aspectos del entorno de línea de comandos, por lo que son bastante importantes. Muchos de estos se configuran automáticamente cuando iniciamos sesión. Por ejemplo, $USER.

    oneils@atmosphere ~$ echo $USER
    oneils

    Configuración de variables de entorno, manejo de espacios

    Establecer variables de entorno es algo que tendremos que saber hacer eventualmente, pero aprender ahora nos dará la oportunidad de discutir algunos de los puntos más finos de cómo el shell interpreta nuestros comandos. En bash, el shell más utilizado, establecer variables de entorno se realiza con el comando export, tomando como primer parámetro cuál debe ser el nombre de la variable (sin el $) y en qué debe establecerse.

    I.3_4_Unix_6_Export_Greeting_1

    Debido a que la exportación espera como su primer parámetro la descripción de la variable, obtendremos un resultado impar si incluimos un espacio en nuestro saludo, ya que el shell usa espacios para separar parámetros.

    I.3_5_Unix_7_Export_Greeting_2

    En lo anterior, greeting=Hello fue tomado como primer parámetro, y el segundo, todos, fue ignorado por el comando export. Hay al menos dos formas de sortear este problema. El primero es prefijar cualquier carácter que el shell considere especial (como espacios) con una diagonal invertida, o\, con lo que “escapa” de él para que sea ignorado por el shell como un carácter especial. Alternativamente, podemos envolver una cadena entre comillas para que sea tratada literalmente por el caparazón.

    oneils@atmosphere ~$ export GREETING=hello\ everyone
    oneils@atmosphere ~$ echo $GREETING
    hello everyone
    oneils@atmosphere ~$ export GREETING='hello everyone'
    oneils@atmosphere ~$ echo $GREETING
    hello everyone

    La principal diferencia entre usar comillas simples y dobles es si las variables dentro de la cadena se expanden a su contenido o no.

    I.3_7_Unix_7_Export_Greeting_4

    Tenga en cuenta que al establecer una variable de entorno, no usamos el $. Por convención, los nombres de variables de entorno contienen sólo letras mayúsculas. [1] Además, esta expansión (de variables de entorno a sus contenidos) la realiza el shell; el comando en sí se cambia de export greeting="Hello $USER” a export greeting="Hello oneils”.

    Conchas Alternativas

    Existe una variable de entorno especial, $0, que generalmente contiene el nombre del programa actualmente en ejecución. En el caso de nuestra interacción con la línea de comandos, este sería el nombre del programa de interfaz en sí, o shell.

    I.3_8_Unix_10_echo_cero_bash

    El comando anterior ilustra que estamos ejecutando bash, el shell más utilizado. [2]

    Dependiendo del sistema en el que haya iniciado sesión, ejecutar echo $0 puede no reportar bash. La razón es (aunque puede parecer extraño) que hay una variedad de shells disponibles, debido a la larga historia de Unix y Linux. Al principio, las interfaces eran bastante simples, pero con el tiempo se desarrollaron mejores interfazes/shells que incluían nuevas características (considere cómo ha cambiado el menú “Inicio” a lo largo de los años en las versiones de Microsoft Windows). Podemos ejecutar un shell diferente, si está instalado, simplemente ejecutándolo como cualquier otro programa. El shell tcsh, en sí mismo una consecuencia del shell csh, es a veces el valor predeterminado en lugar de bash. (Tanto csh como tcsh son mayores que bash.)

    I.3_9_Unix_12_TCSH

    Al ejecutar tcsh, el comando setenv toma el lugar de la exportación, y la sintaxis es ligeramente diferente.

    I.3_10_Unix_13_TCSH_Setenv

    Aunque bash y shells similares como dash y zsh se encuentran más comúnmente (y se recomiendan), es posible que necesite usar un shell como csh o su sucesor, tcsh. En este libro, la suposición es que estás usando bash, pero cuando se necesitarían diferentes comandos para lograr lo mismo en el tcsh o csh más antiguo, una nota al pie de página te explicará.

    Para volver a bash desde tcsh, bastará con una simple salida.

    I.3_11_Unix_14_Back_to_bash

    En general, puede ser difícil determinar qué shell se está ejecutando sobre la base del aspecto del símbolo del sistema; usar echo $0 justo en la línea de comandos es la forma más confiable.

    Archivos, directorios y rutas

    Con algunos de los conceptos más difíciles del shell fuera del camino, volvamos a algo un poco más práctico: entender cómo se organizan los directorios (también conocidos como carpetas) y los archivos.

    La mayoría de los sistemas de archivos son jerárquicos, con archivos y directorios almacenados dentro de otros directorios. En los sistemas operativos tipo Unix, el directorio de “nivel superior” en el que todo se puede encontrar se conoce como/(una diagonal hacia adelante). Este directorio de nivel superior a veces se llama la raíz del sistema de archivos, como en la raíz del árbol del sistema de archivos. Dentro del directorio raíz, comúnmente hay directorios con nombres como bin, etc, media y home; el último de estos suele ser donde los usuarios almacenarán sus propios datos individuales. [3]

    jerarquía del sistema de archivos con la carpeta raíz (/) en la parte superior.

    Cada archivo y directorio en el sistema de archivos se puede identificar de manera única por su ruta absoluta, un localizador único para un archivo o directorio en el sistema de archivos, comenzando por la carpeta raíz/y enumerando cada directorio en el camino hacia el archivo. En la figura anterior, la ruta absoluta al archivo todo_list.txt es /home/oneils/documents/todo_list.txt.

    Tenga en cuenta que una ruta absoluta debe comenzar con la diagonal delantera, lo que indica que la ruta comienza en la carpeta raíz/, y contener una ruta válida de nombres de carpeta desde allí. (Si prefiere considerar/como un nombre de carpeta en sí mismo, también se puede especificar una ruta absoluta como //home/oneils/documents/todo_list.txt, aunque el uso de dos barras oblicuas se considera redundante).

    Cada usuario normalmente tiene un directorio home, que sirve como un casillero de almacenamiento personal para archivos y directorios. (A menudo, la cantidad de espacio disponible en esta ubicación no es tanto como los usuarios quisieran.) El shell y otros programas pueden encontrar la ruta absoluta a su directorio home a través de la variable de entorno $HOME; intente ejecutar echo $HOME para ver la ruta absoluta a su propio directorio home.

    ¿Qué pasa con los dispositivos especiales como unidades de CD-ROM y unidades de red? En un sistema operativo Windows, estos obtendrían su propio directorio “root” con nombres como D: y E: (con el disco duro principal generalmente teniendo el nombre C:). En los sistemas operativos basados en Unix, solo existe una jerarquía de sistemas de archivos, y el nivel superior siempre es/. Dispositivos especiales como unidades de CD-ROM y unidades de red están montados en algún lugar del sistema de archivos. Puede ser que el directorio /media permanezca vacío, por ejemplo, pero cuando se inserta un CD-ROM, puede aparecer un nuevo directorio dentro de ese directorio, quizás con la ruta absoluta /media/cdrom0, y los archivos del CD-ROM aparecerán en esa ubicación.

    Determinar cómo y dónde se montan dichos dispositivos es tarea del administrador del sistema. En las máquinas OS X, los dispositivos insertados aparecen en /Volúmenes. Si ha iniciado sesión en una gran infraestructura computacional, es probable que su directorio principal no esté ubicado en el disco duro interno de la computadora remota, sino que esté montado desde una unidad de red presente en otra computadora remota. Esta configuración permite a los usuarios “ver” la misma jerarquía de sistemas de archivos y archivos sin importar en qué equipo remoto se conecten, si hay más de uno disponible. (Por ejemplo, incluso /home podría ser un soporte de red, por lo que todos los directorios de inicio de los usuarios podrían estar disponibles en varias máquinas).

    Moverse por el sistema de archivos

    Es de vital importancia entender que, como estamos trabajando en el entorno de línea de comandos, siempre tenemos un “lugar”, un directorio (o carpeta) en el que estamos trabajando llamado directorio de trabajo actual, o PWD. El shell realiza un seguimiento del directorio de trabajo actual en una variable de entorno, $PWD.

    Cuando inicias sesión por primera vez, tu directorio de trabajo actual se establece en tu directorio home; echo $PWD y echo $HOME probablemente mostrarán el mismo resultado. También hay un programa dedicado para mostrar el directorio de trabajo actual, llamado pwd.

    I.3_13_Unix_15_Pwd

    Podemos enumerar los archivos y directorios que se almacenan en el directorio de trabajo actual usando el comando ls.

    I.3_14_Unix_16_LS

    Este comando revela que tengo una serie de directorios en mi directorio home (/home/oneils) con nombres como Música e Imágenes (amablemente coloreado azul) y un archivo llamado todo_list.txt.

    Podemos cambiar el directorio de trabajo actual, es decir, pasar a otro directorio, usando el comando cd, dándole la ruta a la que nos gustaría movernos.

    imagen

    Observe que el símbolo del sistema ha cambiado para ilustrar el directorio de trabajo actual: ahora muestra oneils @atmosphere /home $, indicando que estoy en /home. Este es un recordatorio útil de dónde estoy en el sistema de archivos mientras trabajo. Anteriormente, mostraba solo ~, que en realidad es un atajo para $HOME, en sí mismo un atajo para la ruta absoluta a mi directorio home. En consecuencia, hay varias formas de volver a mi directorio de inicio: cd /home/oneils, o cd $HOME, o cd ~, o incluso solo cd sin argumentos, que por defecto es pasar a $HOME.

    I.3_16_Unix_18_CD_Inicio

    Rutas relativas, archivos ocultos y directorios

    No siempre es necesario especificar la ruta completa y absoluta para localizar un archivo o directorio; más bien, podemos usar una ruta relativa. Una ruta relativa localiza un archivo o directorio relativo al directorio de trabajo actual. Si el directorio de trabajo actual es /home/oneils, por ejemplo, un archivo ubicado en la ruta absoluta /home/oneils/Pictures/profile.jpg tendría ruta relativa Pictures/profile.jpg. Para el archivo /home/oneils/todo_list.txt, la ruta relativa es solo todo_list.txt. Si el directorio de trabajo actual fuera /home, por otro lado, las rutas relativas serían oneils/Pictures/profile.jpg y oneils/todo_list.txt.

    Debido a que las rutas relativas siempre son relativas al directorio de trabajo actual (en lugar del directorio raíz/), no pueden comenzar con una diagonal hacia adelante, mientras que las rutas absolutas deben comenzar con una diagonal delantera. Esta distinción confunde ocasionalmente a los nuevos usuarios.

    También podemos usar el comando cd con rutas relativas, y esto se hace más comúnmente para los directorios presentes en el directorio de trabajo actual, según lo informado por ls. De hecho, se permiten rutas tanto relativas como absolutas donde sea necesario especificar un archivo o directorio.

    I.3_17_Unix_19_CD_Pictures

    Algunas notas sobre cómo moverse por directorios: (1) Los sistemas operativos tipo UNIX casi siempre distinguen entre mayúsculas y minúsculas, para comandos, parámetros y nombres de archivos y directorios. (2) Debido a la forma en que se tratan los espacios en la línea de comandos, es poco común ver espacios en los nombres de archivos o directorios. El comando cd mydocuments es mucho más fácil de escribir que cd my\ documents o cd 'mis documentos'. (3) Si olvida especificar cd antes de especificar una ruta, se producirá un error críptico de permiso denegado, en lugar de un error específico de la falta de comando cd.

    Por defecto, al ejecutar el programa ls se listan los contenidos del directorio de trabajo actual, todos los archivos y directorios que comiencen con a. están ocultos. Para ver todo incluyendo los archivos ocultos, podemos agregar la bandera -a a ls.

    I.3_18_Unix_20_LS_A

    ¡Resulta que aquí hay bastantes archivos ocultos! Muchos de los que comienzan con un. , como .bash_login, son en realidad archivos de configuración utilizados por varios programas. Pasaremos algún tiempo con los de capítulos posteriores.

    En el tema de ls, hay muchos parámetros adicionales que podemos darle a ls: incluyen -l para mostrar información de archivos “largos” incluyendo tamaños de archivo, y -h para que esos tamaños de archivo sean “legibles por humanos” (por ejemplo, 4K frente a 4,196 bytes). Para ls, podemos especificar esta combinación de opciones como ls -l -a -h (donde los parámetros se pueden dar en cualquier orden), o con un solo parámetro como ls -lah, aunque no todas las utilidades proporcionan esta flexibilidad.

    I.3_19_Unix_21_ls_lah

    Algunas de estas columnas de información están describiendo los permisos asociados a los diversos archivos y directorios; veremos el esquema de permisos en detalle en capítulos posteriores.

    I.3_20_punto_dotdot

    Al usar ls -a, vemos dos directorios “especiales”:. y.. son sus nombres. Estos directorios realmente no existen per se, sino que son atajos que hacen referencia a ubicaciones especiales relativas al directorio en el que están contenidos. El. directorio es un atajo para el mismo directorio en el que está contenido. Coloquialmente, significa “aquí”. El.. directorio es un atajo para el directorio encima del directorio que lo contiene. Coloquialmente, significa “arriba”.

    Cada directorio tiene estos enlaces “virtuales”, y pueden ser utilizados como rutas relativas o en rutas relativas o absolutas. Aquí, por ejemplo, podemos cd. para quedarnos donde estamos, o cd.. para subir un directorio:

    I.3_21_Unix_22_cd_dot_dotdot

    Si nos gusta, podemos subir dos directorios con cd../.. :

    I.3_22_Unix_23_CD_dotdot_uptwo

    Incluso podemos usar. y.. en rutas relativas o absolutas más largas (el número 2 en la siguiente figura ilustra la ruta relativamente impar de /media/. /cdrom0, que es idéntico a /media/cdrom0).

    I.3_23_Filesystem_dots

    Ejercicios

    1. Practica moverte sobre el sistema de archivos con cd y enumerar los contenidos del directorio con ls, incluyendo navegar por ruta relativa, ruta absoluta,. y.. . Use echo $PWD y pwd con frecuencia para enumerar su directorio de trabajo actual. Practica navegar por casa con cd ~, cd $HOME, y solo cd sin argumentos. Puede resultarle útil dibujar un “mapa” del sistema de archivos, o al menos las porciones relevantes para usted, en una hoja de papel.
    2. Sin escribir explícitamente tu nombre de usuario, crea otra variable de entorno llamada $CHECKCASH, de tal manera que cuando se ejecuta echo $CHECKCASH, se imprime una cadena como oneils tiene $20 (excepto que oneils sería tu nombre de usuario y debería establecerse leyendo desde $USUARIO).
    3. El directorio /etc es donde se almacenan muchos archivos de configuración. Intente navegar allí (usando cd) usando una ruta absoluta. A continuación, vuelve a casa con cd $HOME e intenta navegar allí usando una ruta relativa.
    4. ¿Qué pasa si estás en el directorio de nivel superior/y ejecutas cd.. ?
    5. Los directorios de inicio de los usuarios normalmente se encuentran en /home. ¿Este es el caso para ti? ¿Hay algún otro directorio home perteneciente a otros usuarios que puedas encontrar, y si es así, puedes cd a ellos y ejecutar ls?

    1. Existe otro tipo de variable conocida como “variable shell”, que opera de manera similar a las variables de entorno. Hay algunas diferencias: (1) por convención, estos tienen nombres en minúsculas; (2) se establecen de manera diferente, en bash usando declare en lugar de exportar; y (3) están disponibles solo para el shell, no otros programas que podrías ejecutar. La distinción entre estos dos tipos puede ocasionar dolores de cabeza en ocasiones, pero no es lo suficientemente crucial como para preocuparse ahora.
    2. Debido a que $0 tiene el nombre del programa actualmente en ejecución, uno podría esperar que el eco $0 resulte en que se reporta eco, pero este no es el caso. Como se mencionó anteriormente, el shell reemplaza las variables de entorno con su contenido antes de que se ejecute el comando.
    3. Los informáticos y matemáticos suelen dibujar árboles boca abajo. Una teoría es que los árboles son más fáciles de dibujar al revés cuando se trabaja en una pizarra, el medio de exposición tradicional (y aún considerado por muchos el mejor) para esos campos. Nuestro lenguaje refleja este pensamiento: cuando movemos un archivo, lo movemos “hacia abajo” a un subdirectorio, o “arriba” a un directorio “por encima” del actual.

    This page titled 1.3: La línea de comandos y el sistema de archivos is shared under a CC BY-NC-SA license and was authored, remixed, and/or curated by Shawn T. O’Neil (OSU Press) .