'dir'과 'ls'터미널 명령의 차이점은 무엇입니까?


74

터미널 에서 dirls명령을 사용하는 것의 차이점을 찾으려고 노력했습니다 . ls는 디렉토리에서 파일을 보는 일반적인 UNIX 방법이며 dirWindows 명령 프롬프트와 동일하지만 두 명령 모두 터미널에서 작동합니다.

입력 dir하면 디렉토리에 파일과 폴더가 표시되고 입력 ls하면 내용 강조 표시를 제외하고 동일하게 수행됩니다. 두 명령 모두 옵션을 허용합니다. 즉 ls -a, dir -a모든 파일과 폴더 및 숨겨진 파일을 반환합니다.

그렇다면 차이점이 무엇인지, 왜 둘 다 dir와 왜 ls사용 되는지 아는 사람이 있습니까?


7
dir --color;)
Rinzwind 2012

3
이 질문에 대한 답변의 양에 놀랐습니다. 나는 이것에 대해 궁금해하는 유일한 사람이 아니라고 생각합니다 :)
BretD

3
고대로부터의 명령은 항상 오래된 멍청이를 목공 밖으로 끌어냅니다.)
Rinzwind

답변:


70

dirls의 일부 coreutilsdir거의 동일 ls단지 다른 기본 옵션.

GNU 핵심 유틸리티는 GNU 운영 체제의 기본 파일, 셸 및 텍스트 조작 유틸리티입니다. 이들은 모든 운영 체제에 존재할 것으로 예상되는 핵심 유틸리티입니다.

info dir 말한다 :

dir동등하다 ls -C -b; 즉, 기본적으로 파일은 열에 나열되고 세로로 정렬되며 특수 문자는 백 슬래시 이스케이프 시퀀스로 표시됩니다.

아 그리고 또한 있습니다 vdir! info vdir말한다 :

vdir동등하다 ls -l -b; 즉, 기본적으로 파일은 긴 형식으로 나열되고 특수 문자는 백 슬래시 이스케이프 시퀀스로 표시됩니다.

대부분의 경우 dir이전 버전과의 호환성을 위해 또는 인해 역사적인 이유에 존재한다.


나는 그것이 아마도 다른 사람의 별칭 일 것이라고 생각하고있었습니다. 나는 Windows 사용자가 집에서 더 많은 느낌을 느끼게하는 것이라고 생각했다. lol 철저한 답변에 감사드립니다!
BretD

4
alias dir실제로 무엇인지 보려면 입력 하십시오. alias모든 별칭을 보려면 유형 을 입력 하십시오.
user606723

2
@ user606723, 'alias dir'은 11.10에 표시되지 않습니다 (적어도 나에게는 그렇지 않습니다). '별칭'은 시스템 전체가 아닌 로컬 사용자 별명 설정 만 표시한다고 생각합니다.
제임스

유형 type dir(별칭, 명령, bash 함수 ...)을 보려면 유형 을 입력 하십시오.
ychaouche

49

사이의 관계 lsdir

lsdir유사하게 동작 별도의 프로그램입니다. 아래에 설명되고 참조 된 바와 같이, 목적은 출력이 터미널로 가는지 여부에 따라 변하지 않는 dir명령을 제공하는 ls 입니다. 이를 유용하게 달성하려면 dir터미널에서 보거나 파일 또는 파이프에 쓰는 데 합리적이고 유용한 방식으로 출력 형식을 지정해야합니다.

다음과 같은 두 가지 일반적인 오해가 있습니다 dir.

  • 많은 사람들 dir이의 별칭 이라고 생각 ls하지만 그렇지 않습니다. 어떤 명령도 다른 명령의 별칭 dir이 아니며 기본적으로 우분투에서는 별칭이 아닙니다. ls그리고 dir별도의 비 동일한 실행에 의해 제공된다.
  • 많은 사람들 dir이 역사적인 이유로 불분명하거나 일부 표준 또는 다른 OS와의 호환성을 제공 한다고 생각 합니다. 그것은 사실이 아닙니다. ls호환성을 위해하는 방식으로 작동합니다. dir표준 Unix 명령이 아니기 때문에 호환되지 않아도되는 개발자는 개발자가 자체적으로 가치를 인정하고 선호하는 것으로 대체 방식으로 작동합니다.

그래요 ls, 정확히 어떻게 dir다릅니 까?

lsdir디렉토리의 내용을 나열합니다. 기본 동작의 두 가지 구체적인 차이점이 있습니다.

  1. 그 때, 표준 출력 단자이고, ls수직으로 정렬 된 컬럼 (파일명 등의 나열 ls -C). 표준 출력이 터미널이 아닌 경우 (예 : 파일 또는 파이프 ) ls파일 이름을 한 줄에 하나씩 나열합니다 (예 ls -1:).

    표준 출력이 터미널인지에 관계없이 dir파일 이름을 세로로 정렬 된 열에 나열합니다 (예 :) ls -C.

    모두 들어 lsdir, 이러한 기본값은 오버라이드 (override) 할 수 --format=플래그에 의해 -1, -C, -m, 그리고 -x특히 축약 플래그, --format=옵션을. 자세한 내용 은 GNU coreutils 참조 설명서10.1.4 일반 출력 형식참조 하십시오.

  2. 표준 출력 나열하는 단자와 파일명이 포함되면 제어 문자 , ls인쇄 ?대신에 각각의 제어 문자 (등 ls -q). 표준 출력이 터미널이 아닌 경우 ls제어 문자를 그대로 인쇄합니다 (예 ls --show-control-chars:).

    표준 출력이 터미널인지 여부에 관계없이 dir제어 문자 나 쉘에 입력 된 경우 특별히 해석되는 다른 문자가 발생하면 문자에 대한 백 슬래시 시퀀스를 인쇄합니다. 여기에는 공백과 같은 비교적 일반적인 문자도 포함됩니다. 예를 들어 dir이라는 항목이 나열 Documents backups됩니다 Documents\ backups. 이것은 같습니다 ls -b.

    모두 들어 lsdir, 이러한 기본값은에 나와있는 플래그를 오버라이드 (override) 할 수 10.1.7 파일 이름 포맷 에서 GNU의로 coreutils 참조 설명서 . 여기에는 -b, -q, --quoting-style=, 일부 다른 사람.

출처 : LS 호출디렉토리 호출 에서, GNU의로 coreutils 참조 설명서 .

dir?

별도의 근거 dir유틸리티에 제시되어 일반적으로 인터페이스 4.5 표준GNU 코딩 표준 . 개발자의 추론을 이해하기 위해 전체 섹션을 읽는 것이 좋지만 다음은 ls/에 적용 가능한 주요 내용입니다 dir.

유틸리티 동작을 호출하는 데 사용 된 이름에 의존하지 않도록하십시오 ....

대신 런타임 옵션 또는 컴파일 스위치 또는 둘 다를 사용하여 대체 동작 중에서 선택하십시오 .

마찬가지로, 명령 행 프로그램의 동작이 출력 장치의 유형에 따라 달라지지 않도록하십시오 .

호환성을 위해서는 특정 프로그램이 출력 장치 유형에 의존해야합니다. 경우는 재앙이 될 것 ls또는 sh모든 사용자가 기대하는 방식으로 그렇게하지 않았다. 이러한 경우에는 출력 장치 유형에 의존하지 않는 기본 대체 버전으로 프로그램을 보완합니다. 예를 들어, 기본 출력 형식이 항상 다중 열 형식이라는 점을 제외하고 는 dir프로그램 을 제공 ls합니다.

GNU 프로젝트는 기술적 인 관점에서 유틸리티가 쓰고있는 장치의 종류 (적어도 유틸리티의 기본 구성)에 따라 다른 출력을 생성하는 것이 바람직하지 않다고 생각합니다. 를 포함한 일부 유틸리티의 경우 ls호환성을 위해 장치 종속 출력이 필요하므로 사용자가 기대하는 방식으로 작동합니다. 일부 사용자는이 장치 종속 동작을 특히 선호합니다.

반면 ls합리적으로 독립적으로 장치를 작동하기 위해 쓸 수 없습니다, 별도의 dir유틸리티는이를 달성하기 위해 만들어졌습니다. 따라서 dir역사적 compatibility--는 이유로 이상하게 동작하는 유틸리티 아니다 ls됩니다 .

방법을 보려면 ls, dir및 관련 vdir참조 유틸리티는 불필요한 코드 중복없이로 coreutils 소스 코드에서 구현 ls-dir.c, ls-ls.c, ls-vdir.c, ls.h,와 ls.c.

dir정말 유용?

만약 당신이 바란 적이 있다면 ls당신이 그것을 파이프도 제작 다중 열 출력 less( ls | less) 또는 파일 (로 리디렉션을 ls > out.txt), 당신은 사용할 수 있습니다 dir또는 ls -C.

만약 당신이 바란 적이 있다면 당신은 할 수 직접으로 표시되는 파일 이름을 복사 ls및 인용에 대한 걱정없이 명령의 일부로 사용 , 당신이 사용할 수있는 dirls -b.

dirls -Cb그런 의미에서 필요하지 않습니다 dir. 그러나 dir실제로는 유용하지 않은 옵션의 조합을 제공합니다.

ls(짝수 ls -Cb) 에서 컬러 출력을 얻 dir습니까?

대부분의 우분투 사용자라는 별칭이 ls실행됩니다 ls --color=auto. 때 ls별명와 외부 명령으로 모두 존재 별명은 단순 대화 형 명령에 우선합니다.

별명 정의는 재귀 적으로 확장되지 않습니다 . 별명이 호출 하는 외부 ls명령입니다 . 별명이 작동하는 방법에 대한 자세한 정보 는 Bash 참조 매뉴얼6.6 별명 을 참조하십시오 .ls--color=auto

전달하면 ls, dir또는 vdir(과 같은 다른 명령 grep), --color=auto그 출력하지만, 그렇지 않으면, 단말기 인 경우 색을 사용한다.

우분투에서 기본적으로 사용자 계정은 다음과 같이 만들어집니다 ~/.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

당신은 알 수 있습니다 ls(별칭 alias ls='ls --color=auto')에 대한 그 동안 메모가 dir와가 vdir함께 주석 #그래서 그들은 아무런 영향을하지 않습니다. 즉, 동안 dir, 별명 아니다 ls된다 (그러나에 dir) .

dir컬러 출력물을 만들려면 어떻게해야 합니까?

로 컬러 출력을 사용하려면 홈 디렉토리에서 dir편집 .bashrc하고 #alias dir='dir --color=auto'행을 주석 해제하십시오 #. 변경 후 시작된 쉘에서는 dir별명이됩니다.

현재 쉘의 변화를 원한다면, 당신은 명령으로 별명 정의를 실행하거나 할 수있는 소스 .bashrc실행하여 . ~/.bashrc.

이것은 dir출력 장치에 관계없이 동일한 종류의 출력을 생성해야한다는 주요 요점에 반 합니다. 하나:

  • dir별칭 을 만드는 것이 유용하다고 생각 되면 그렇게해야합니다.
  • 당신은 실행하여 별칭을 무시하는 경우 스크립트에서, 예를 들어, 외부 명령으로 호출하거나 \dir또는 command dir, dir여전히 장치 독립적 인 출력을 생성합니다. 이것은 에일리어싱 dirdir --color=auto실제로 깨지지 않는다고 말하는 것입니다 dir.

품질 답변이지만 ToC 또는 TL; DR을 사용할 수 있습니다. :)
Kevin

5

나는 dir단지 이전 버전과의 호환성을 위해 존재 한다고 생각하는 경향이 있습니다 .

에서 GNU로 coreutils :

dir은 ls -C -b와 같습니다. 즉, 기본적으로 파일은 열에 나열되고 세로로 정렬되며 특수 문자는 백 슬래시 이스케이프 시퀀스로 표시됩니다.

그건 그렇고, ls기본적으로 출력을 채색하지 않습니다 : 이것은 대부분의 distros lsls --color=autoin에 있기 때문 입니다 /etc/profile.d. 테스트의 경우, unalias ls다음을 입력하십시오 ls: 무색입니다.

출처 : 르낭대답"디렉토리"와 "LS"의 차이는 무엇 ?


하지만이 dir되어 있지 이전 버전과의 호환성을 위해 제공 - 그리고 ls사실 입니다 --This 대답 (그리고에서 인용 답) 제대로 일반적으로 관찰 색상 화의 차이를 설명뿐만 아니라 두 명령 사이의 기술적 차이를 명시 않습니다. +1입니다.
Eliah Kagan

3

확실하지 않은 경우 type lsvs를 비교 type dir하십시오 ( ls와 la의 차이점 참조 ).

$ type dir
dir is aliased to `ls -l'

$ type ls
ls is aliased to `_ls'

$ type _ls
_ls is a function
_ls ()
{
    local IFS=' ';
    command ls $LS_OPTIONS ${1+"$@"}
}
$ echo command ls $LS_OPTIONS ${1+"$@"}
command ls -N --color=tty -T 0

차이점은 다른 옵션으로 귀결됩니다 ls. 제 경우에는 --color=tty시스템이 다를 수 있습니다.


2
이것은 기본 우분투 사용자 구성처럼 보이지 않습니다. 필자가 사용한 Ubuntu 시스템 중에서 주석 처리 된 행이 아닌 ls함수의 별칭으로 사용했다고 생각하지 않습니다 . 이 대화 , 판단 ( 이 파일 에서 링크 됨) 및 마지막으로 openSUSE를 사용한 시점의 내 (아마도 아마도 잘못된) 메모리로 판단하여 openSuSE의 (적어도 일부 버전의) 기본값처럼 보입니다 . _ls.bashrc
Eliah Kagan

2
@EliahKagan : OpenSuse를 사용하고 있습니다. 내가 말했듯이 결과는 다르지만 방법은 괜찮습니다.
user2394284

2

짧은 답변 : 없음은, dir보다 같은 소스 코드 ls, ls바이너리가 --color기본적으로. (한 줄의 코드 차이)


7
dir의 별칭 이 아닙니다ls . 그것들은 Rinzwind답변/usr/bin 에서 설명한 것처럼 다르게 동작하는 별도의 바이너리입니다 . 별명을 사용하여이 작업을 수행 할 수 있지만 그 방법 이 아닙니다 . 분리 및 바이너리 사용하는 모든 시스템에 표시되는 GNU로 coreutils을 . 증명이 필요하면을 실행하십시오 . dirlscmp /bin/ls /bin/dir
Eliah Kagan

2
얼마 전에 별명 이었기 때문에을 입력하여 별명 목록에 표시 된 것을 볼 수 있습니다 alias. 이제 새로운 바이너리가 dir 용으로 컴파일되었습니다. 다음을 사용하여 코드를 다운로드 할 수 있습니다 git clone git://git.sv.gnu.org/coreutils. ls-dir.c에서 한 줄의 코드 만 변경되었으며 다음과 같습니다 int ls_mode = LS_MULTI_COL;. 기술적으로는 별칭이 아니지만 실제로는 LS이지만 기본 옵션이 다른 코드 (1 줄)입니다.
Francisco Valdez

1
예, dir이다 ls다른 기본 옵션이 있지만 . dir그리고 ls항상 GNU로 coreutils를 사용 배포판에 별도의 바이너리를왔다. 일부 배포판 수도, 또는있을 수 있습니다, 또한 라는 별명 정의 dir(기존 명령 꽤 일반적입니다 같은 이름입니다 별칭을 정의을). 그러나 별도의 실행 파일입니다. 쉘 별명 (파일이 아님)과 유사한 소스 코드를 가진 별도의 실행 파일을 구별하는 것은 단순한 구별이 아닙니다. 그것이 우분투 dir의 별명 이라고 말하는 것은 거짓과 오도 ls입니다.
Eliah Kagan

예, 동의합니다.이 경우 유사한 소스 코드는 아니며 동일한 소스 코드입니다. 별명이 단지 나열된 alias것이라면 당연히 별명이 아닙니다.
Francisco Valdez

3
동일한 소스 코드가 아닙니다. 말했듯이 "한 줄의 소스가 변경되었습니다." 그리고 그것이 같은 소스라면 여전히 별칭이 아닐 것입니다. 유닉스 계열 시스템에는 별명 과 비슷 하지만 별명을 부르는 초보자와 경험이 많은 사용자에게 혼란을 주는 많은 것들이 있습니다. 심볼릭 링크, 하드 링크, 동일한 파일, 유사한 파일, 래퍼 스크립트, 실행 파일을 숨기는 셸 내장 및 동기화 된 파일 (예 : UbuntuOne)은 모두 별칭과 유사하지만 별칭은 아닙니다.
Eliah Kagan
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.