Saltar al contenido

¿Diferencia entre los comandos de terminal ‘dir’ y ‘ls’?

Hemos estado buscando en todo el mundo online y así tener para ti la respuesta para tu duda, si tienes alguna duda déjanos la pregunta y contestaremos sin falta, porque estamos para servirte.

Solución:

dir y ls son parte de coreutils y dir es casi lo mismo que ls, solo con diferentes opciones predeterminadas.

Las GNU Core Utilities son las utilidades básicas de manipulación de archivos, shell y texto del sistema operativo GNU. Estas son las utilidades principales que se espera que existan en todos los sistemas operativos.

info dir dice:

dir es equivalente a ls -C -b; es decir, de forma predeterminada, los archivos se enumeran en columnas, ordenados verticalmente, y los caracteres especiales se representan mediante secuencias de escape con barra invertida.

Oh y también hay vdir! info vdir dice:

vdir es equivalente a ls -l -b; es decir, de forma predeterminada, los archivos se enumeran en formato largo y los caracteres especiales se representan mediante secuencias de escape con barra invertida.

Más probable dir existe por compatibilidad con versiones anteriores o por razones históricas.

La relación entre ls y dir

ls y dir son programas separados que se comportan de manera similar. Como se explica y se hace referencia a continuación, el propósito de dir es proporcionar un comando como ls cuya salida no varía en función de si va o no a un terminal. Para lograr esto de manera útil, dir debe formatear su salida de una manera que sea razonable y útil tanto para ver en una terminal como para escribir en un archivo o tubería.

Hay dos conceptos erróneos comunes sobre dir:

  • Mucha gente cree dir es un alias de ls, Pero ese no es el caso. Ninguno de los comandos es un alias del otro y, de forma predeterminada, en Ubuntu, dir no es un alias en absoluto. ls y dir son proporcionados por ejecutables separados, no idénticos.
  • Mucha gente cree dir existe por razones históricas oscuras o para proporcionar compatibilidad con algún estándar u otro sistema operativo. Ese tampoco es el caso. ls se comporta de la manera que lo hace por compatibilidad.dir, que no tiene que ser compatible porque no es un comando estándar de Unix, se comporta de una manera alternativa que los desarrolladores consideran valiosa por derecho propio y posiblemente incluso preferible.

OK, pero exactamente como ls y dir ¿diferir de?

Ambos ls y dir enumerar el contenido de los directorios. Dos diferencias específicas en sus comportamientos predeterminados los distinguen.

  1. Cuando su salida estándar es un terminal, ls enumera los nombres de archivo en columnas ordenadas verticalmente (como ls -C). Cuando su salida estándar no es una terminal (por ejemplo, un archivo o tubería), ls enumera los nombres de archivo uno por línea (como ls -1).

    Si su salida estándar es un terminal o no, dir enumera los nombres de archivo en columnas ordenadas verticalmente (como ls -C).

    Para ambos ls y dir, estos valores predeterminados pueden ser anulados por el --format= bandera y por la -1, -C, -m, y -x banderas, que abrevian particular --format= opciones. Consulte 10.1.4 Formato de salida general en el manual de referencia de GNU coreutils para obtener más detalles.

  2. Cuando su salida estándar es un terminal y un nombre de archivo que se lista contiene caracteres de control, ls huellas dactilares ? en lugar de cada carácter de control (como ls -q). Cuando su salida estándar no es un terminal, ls imprime los caracteres de control tal cual (como ls --show-control-chars).

    Si su salida estándar es un terminal o no, cuando dir encuentra un carácter de control o cualquier otro carácter que se interpretaría especialmente si se ingresara en un shell, imprime secuencias de barra invertida para los caracteres. Esto incluye incluso caracteres relativamente comunes como espacios. Por ejemplo, dir mostrará una entrada llamada Documents backups como Documents backups. Esto es como ls -b.

    Para ambos ls y dir, estos valores predeterminados pueden ser anulados por los indicadores enumerados en 10.1.7 Formateo de los nombres de archivo en el manual de referencia de GNU coreutils. Esto incluye -b, -q, --quoting-style=y algunos otros.

Fuentes: ls invocación e invocación de dir, en el manual de referencia de GNU coreutils.

Porque tener dir?

La justificación de una dir La utilidad se da en 4.5 Estándares para interfaces Generalmente de los estándares de codificación GNU. Recomiendo leer toda la sección para comprender el razonamiento de los desarrolladores, pero aquí están los aspectos más destacados aplicables a ls/dir:

No haga que el comportamiento de una utilidad dependa del nombre utilizado para invocarla.….

En su lugar, utilice una opción de tiempo de ejecución o un conmutador de compilación o ambos para seleccionar entre los comportamientos alternativos….

Del mismo modo, no haga que el comportamiento de un programa de línea de comandos dependa del tipo de dispositivo de salida….

La compatibilidad requiere que ciertos programas dependan del tipo de dispositivo de salida. Sería desastroso si ls o sh no lo hizo de la forma que todos los usuarios esperan. En algunos de estos casos, complementamos el programa con una versión alternativa preferida que no depende del tipo de dispositivo de salida. Por ejemplo, proporcionamos un dir programa muy parecido a
ls excepto que su formato de salida predeterminado es siempre un formato de varias columnas.

El Proyecto GNU considera indeseable, desde una perspectiva técnica, que una utilidad produzca una salida diferente dependiendo del tipo de dispositivo en el que esté escribiendo (al menos en la configuración predeterminada de la utilidad). Para algunas utilidades, incluidas ls, la salida dependiente del dispositivo es necesaria para la compatibilidad y, por lo tanto, funciona de la manera que esperan los usuarios. Algunos usuarios también prefieren específicamente este comportamiento dependiente del dispositivo.

Tiempo ls razonablemente no se podría escribir para que se comporte el dispositivo de forma independiente, una dir La utilidad fue creada para lograr esto. Por lo tanto dir no es la utilidad que se comporta de manera extraña por razones de compatibilidad histórica–ls es.

Para ver como ls, dir, y el relacionado vdir se implementan en el código fuente de coreutils sin duplicación innecesaria de código, consulte ls-dir.c, ls-ls.c, ls-vdir.c, ls.h, y ls.c.

Es dir ¿realmente util?

Si alguna vez has deseado ls produjo salida de varias columnas incluso cuando la canalizó a less (ls | less) o lo redirigió a un archivo (ls > out.txt), puedes usar dir o ls -C.

Si alguna vez has deseado poder copiar directamente un nombre de archivo mostrado por ls y utilícelo como parte de un comando sin preocuparse por citar, puedes usar dir o ls -b.

dir es equivalente a ls -Cb, entonces en ese sentido no necesitas dir. Pero dir proporciona una combinación de opciones que en la práctica suele ser útil (aunque no se conoce ampliamente).

¿Por qué obtengo una salida coloreada de ls (incluso ls -Cb) pero no dir?!

La mayoría de los usuarios de Ubuntu tienen un alias llamado ls la cual recorre ls --color=auto. Cuando ls existe tanto como un alias como un comando externo, el alias tiene prioridad en los comandos interactivos simples.

Las definiciones de alias no se expanden de forma recursiva, es el externo ls ordenar que el ls alias está llamando con --color=auto. Consulte 6.6 Alias ​​en el manual de referencia de Bash para obtener más información sobre cómo funcionan los alias.

Cuando pasa a ls, dir, o vdir (y algunos otros comandos, como grep), --color=auto usa color cuando su salida es un terminal, pero no de otra manera.

De forma predeterminada en Ubuntu, las cuentas de usuario se crean con esto en ~/.bashrc:

# enable color support of ls and also add handy aliases
if [ -x /usr/bin/dircolors ]; then
    test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)"
    alias ls='ls --color=auto'
    #alias dir='dir --color=auto'
    #alias vdir='vdir --color=auto'

    alias grep='grep --color=auto'
    alias fgrep='fgrep --color=auto'
    alias egrep='egrep --color=auto'
fi

Notarás el ls alias (alias ls='ls --color=auto') no está comentado, mientras que los de dir y vdir están comentados con # por lo que no tienen ningún efecto. Es decir, tiempo dir no es un alias, ls es (pero no para dir).

Como hago dir producir también resultados en color?

Para habilitar la salida en color con dir, simplemente edita .bashrc en su directorio de inicio y descomente el #alias dir='dir --color=auto' línea quitando el líder #. En conchas que comenzaron después del cambio, dir será un alias.

Si desea el cambio en el shell actual, puede ejecutar la definición de alias como un comando, o puede obtener .bashrc mediante la ejecución . ~/.bashrc.

Podría decirse que esto va en contra del punto principal de dir– que debería producir el mismo tipo de salida independientemente del dispositivo de salida. Sin embargo:

  • Si le resulta útil hacer esto dir alias, ciertamente deberías hacerlo.
  • Cuando se llama como un comando externo, por ejemplo en scripts o si anula el alias ejecutando dir o command dir, dir seguirá produciendo una salida independiente del dispositivo. Es decir que aliasing dir para dir --color=auto realmente no se rompe dir.

Me inclinaría a pensar que dir ¿Existe solo por compatibilidad con versiones anteriores?

Desde GNU Coreutils:

dir es equivalente a ls -C -b; es decir, de forma predeterminada, los archivos se enumeran en columnas, ordenados verticalmente, y los caracteres especiales se representan mediante secuencias de escape con barra invertida.

Por cierto, ls no colorea la salida de forma predeterminada: esto se debe a que la mayoría de las distribuciones alias ls para ls --color=auto en
/etc/profile.d. Para una prueba, escriba unalias ls entonces intenta ls: será incoloro.

Fuente: Respuesta de Renan a ¿Cuál es la diferencia entre “dir” y “ls”?

valoraciones y comentarios

Recuerda que te concedemos agregar una reseña si te fue preciso.

¡Haz clic para puntuar esta entrada!
(Votos: 1 Promedio: 5)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *