He estado tratando de encontrar la diferencia entre usar los comandos diry lsen la terminal. Sé que ls es el método tradicional de UNIX para ver los archivos en un directorio, y ese dires el símbolo del sistema de Windows equivalente, pero ambos comandos funcionan en la terminal.
Si escribo dir, muestra los archivos y las carpetas en el directorio, y si escribo lshace lo mismo, excepto con resaltado de contenido. Ambos comandos aceptan opciones (es decir, ls -ay dir -aambos devuelven todos los archivos y carpetas y archivos ocultos).
Así que ¿alguien sabe cuál es la diferencia y por qué tanto diry lsse utilizan?
command-line
directory
ls
coreutils
BretD
fuente
fuente

dir --color;)Respuestas:
dirylsson parte decoreutilsydires casi lo mismo quels, solo que con diferentes opciones predeterminadas.info dirdice:¡Ah, y también hay
vdir!info vdirdice:Lo más probable es que
direxista por compatibilidad con versiones anteriores o por razones históricas.fuente
alias dirpara ver qué es realmente. escribaaliaspara ver todos los alias.type dirpara ver qué es (un alias, un comando, una función bash ...)La relación entre
lsydirlsydirson programas separados que se comportan de manera similar. Como se explica y hace referencia a continuación, el propósito dedires proporcionar un comando comolscuya salida no varía dependiendo de si va a un terminal o no . Para lograr esto de manera útil,dirdebe formatear su salida de manera razonable y útil tanto para ver en un terminal como para escribir en un archivo o canalización.Hay dos conceptos erróneos comunes sobre
dir:dires un alias dels, pero ese no es el caso. Ninguno de los comandos es un alias del otro, y por defecto en Ubuntu,dirno es un alias en absoluto.lsydirson proporcionados por ejecutables separados, no idénticos.direxiste por razones históricas oscuras o para proporcionar compatibilidad con algún estándar u otro sistema operativo. Ese tampoco es el caso.lsse comporta como lo hace para la 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 valioso por sí mismo y posiblemente incluso preferible.OK, pero ¿exactamente cómo
lsy cómodirdifieren?Ambos
lsydirenumerar el contenido de los directorios. Dos diferencias específicas en sus comportamientos predeterminados los distinguen.Cuando su salida estándar es una terminal,
lsenumera los nombres de los archivos en columnas ordenadas verticalmente (comols -C). Cuando su salida estándar no es una terminal (por ejemplo, un archivo o una tubería ),lsenumera los nombres de los archivos uno por línea (comols -1).Si su salida estándar es o no una terminal,
direnumera los nombres de los archivos en columnas ordenadas verticalmente (comols -C).Por tanto
lsydir, estos valores predeterminados pueden ser anulados por la--format=bandera y por los-1,-C,-m, y-xbanderas, que abrevian particulares--format=opciones. Consulte 10.1.4 Formato de salida general en el manual de referencia de GNU coreutils para más detalles.Cuando su salida estándar es un terminal y un nombre de archivo que se listará contiene caracteres de control , se
lsimprime en?lugar de cada carácter de control (comols -q). Cuando su salida estándar no es una terminal,lsimprime los caracteres de control tal cual (comols --show-control-chars).Ya sea que su salida estándar sea o no un terminal, cuando
direncuentra 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 los espacios. Por ejemplo,direnumerará una entrada llamadaDocuments backupscomoDocuments\ backups. Esto es comols -b.Para ambos
lsydir, 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 : invocación ls e invocación dir , en el manual de referencia de GNU coreutils .
¿Por qué tener
dir?La justificación de una
dirutilidad separada 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 según corresponda als/dir:El Proyecto GNU considera indeseable, desde una perspectiva técnica, que una utilidad produzca resultados diferentes dependiendo de qué tipo de dispositivo está escribiendo (al menos en la configuración predeterminada de la utilidad). Para algunas utilidades, incluida la
lssalida dependiente del dispositivo, es necesaria para la compatibilidad, por lo que funciona de la manera que los usuarios esperan. Algunos usuarios también prefieren específicamente este comportamiento dependiente del dispositivo.Si bien
lsno se pudo escribir razonablemente para comportar el dispositivo de forma independiente,dirse creó una utilidad separada para lograr esto. Por lo tantodirno es la utilidad que comporta de forma extraña por razones de compatibility-- históricalses .Para ver cómo
ls,diry la relacionadavdirutilidad se implementan en el código fuente coreutils sin duplicación innecesaria de código, veals-dir.c,ls-ls.c,ls-vdir.c,ls.h, yls.c.¿Es
dirrealmente útil?Si alguna vez ha deseado
lsproducir una salida de varias columnas, incluso cuando la canalizó aless(ls | less) o la redirigió a un archivo (ls > out.txt), puede usardirols -C.Si alguna vez ha deseado poder copiar directamente un nombre de archivo que se muestra
lsy usarlo como parte de un comando sin preocuparse por las citas , puede usardirols -b.dires equivalente als -Cb, por lo que en ese sentido no es necesariodir. Perodirproporciona una combinación de opciones que en la práctica a menudo es útil (aunque no se conoce ampliamente).¿Por qué obtengo resultados coloreados de
ls(inclusols -Cb) pero nodir?La mayoría de los usuarios de Ubuntu tienen un alias llamado
lsque se ejecutals --color=auto. Cuandolsexiste tanto como un alias como un comando externo, el alias tiene prioridad en los comandos simples e interactivos.Las definiciones de alias no se expanden recursivamente: es el
lscomando externo con el quelsestá llamando el alias--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 se pasa a
ls,dirovdir(y algunos otros comandos, comogrep),--color=autousa color cuando su salida es un terminal, pero no de otra manera.Por defecto en Ubuntu, las cuentas de usuario se crean con esto en
~/.bashrc:Notarás que el
lsalias (alias ls='ls --color=auto') no está comentado , mientras que los dediryvdirestán comentados, por#lo que no tienen efecto. Es decir, si biendirno es un alias,lses (pero no lo esdir) .¿Cómo hago para que también se
dirproduzcan resultados en color?Para habilitar la salida en color con
dir, simplemente edite.bashrcen su directorio de inicio y#alias dir='dir --color=auto'elimine el comentario de la línea eliminando el encabezado#. En los depósitos iniciados después del cambio,dirhabrá un alias.Si desea el cambio en el shell actual, puede ejecutar la definición de alias como un comando, o puede obtenerla
.bashrcejecutando. ~/.bashrc.Esto podría ir en contra del punto principal de
dirque debería producir el mismo tipo de salida independientemente del dispositivo de salida. Sin embargo:diralias, debería hacerlo.\dirocommand dir,dirseguirá produciendo una salida independiente del dispositivo. Esto quiere decir que el aliasdiradir --color=autono se rompe realmentedir.fuente
Fuente: la respuesta de Renan a ¿Cuál es la diferencia entre "dir" y "ls" ?
fuente
dirse no se proporciona por compatibilidad hacia atrás -ylsde hecho es --este respuesta (y la respuesta se cita) no indicar correctamente la diferencia técnica entre los dos comandos, así como la explicación de la diferencia de coloración comúnmente observados. Entonces +1.En caso de duda, compare
type lsvstype dir(vea también Diferencia entre ls y la ):La diferencia se reduce a diferentes opciones para
ls, en mi caso--color=tty, sería la más visible, su sistema puede diferir.fuente
lsun alias para una función llamada_ls, ni siquiera como una línea comentada.bashrc. Sin embargo, parece ser el valor predeterminado para (al menos algunas versiones de) openSuSE, a juzgar por esta conversación , este archivo (vinculado desde allí) y mi memoria (es probable que sea incorrecta) de la última vez que utilicé openSUSE.Respuesta corta: Ninguno,
dires el mismo que el código fuentels,lsbinario tiene--colorpor defecto. (1 línea de código dif.)fuente
dires no un alias dels. Son binarios separados/usr/binque se comportan de manera diferente, como se describe en la respuesta de Rinzwind . Podría lograr esto con alias, pero no es así como se logra. Aparecen binarios y separados en todos los sistemas que usan GNU Coreutils . Si necesitas pruebas, corre .dirlscmp /bin/ls /bin/diralias, ahora se compila un nuevo binario para dir. Puede descargar su código con:git clone git://git.sv.gnu.org/coreutils. Sólo se cambia una línea de código en ls-dir.c y es la siguiente:int ls_mode = LS_MULTI_COL;. Técnicamente no es un alias, pero prácticamente es LS pero con diferentes opciones predeterminadas (1 línea de código).direslspero con diferentes opciones por defecto .dirylssiempre han sido binarios separados en distribuciones que usan GNU Coreutils. Algunas distribuciones pueden, o pueden haber, también definido un alias llamadodir(es bastante común definir alias que tengan el mismo nombre que un comando existente). Pero son ejecutables separados. Distinguir entre un alias de shell (que no es un archivo en absoluto) y un ejecutable separado con un código fuente similar, no es una distinción pedante. Es falso y engañoso decir quedires un alias delsUbuntu.aliasentonces, por supuesto, no es un alias.