사이의 관계 ls
와dir
ls
와 dir
유사하게 동작 별도의 프로그램입니다. 아래에 설명되고 참조 된 바와 같이, 목적은 출력이 터미널로 가는지 여부에 따라 변하지 않는 dir
명령을 제공하는 ls
것 입니다. 이를 유용하게 달성하려면 dir
터미널에서 보거나 파일 또는 파이프에 쓰는 데 합리적이고 유용한 방식으로 출력 형식을 지정해야합니다.
다음과 같은 두 가지 일반적인 오해가 있습니다 dir
.
- 많은 사람들
dir
이의 별칭 이라고 생각 ls
하지만 그렇지 않습니다. 어떤 명령도 다른 명령의 별칭 dir
이 아니며 기본적으로 우분투에서는 별칭이 아닙니다. ls
그리고 dir
별도의 비 동일한 실행에 의해 제공된다.
- 많은 사람들
dir
이 역사적인 이유로 불분명하거나 일부 표준 또는 다른 OS와의 호환성을 제공 한다고 생각 합니다. 그것은 사실이 아닙니다. ls
호환성을 위해하는 방식으로 작동합니다. dir
표준 Unix 명령이 아니기 때문에 호환되지 않아도되는 개발자는 개발자가 자체적으로 가치를 인정하고 선호하는 것으로 대체 방식으로 작동합니다.
그래요 ls
, 정확히 어떻게 dir
다릅니 까?
두 ls
및 dir
디렉토리의 내용을 나열합니다. 기본 동작의 두 가지 구체적인 차이점이 있습니다.
그 때, 표준 출력 단자이고, ls
수직으로 정렬 된 컬럼 (파일명 등의 나열 ls -C
). 표준 출력이 터미널이 아닌 경우 (예 : 파일 또는 파이프 ) ls
파일 이름을 한 줄에 하나씩 나열합니다 (예 ls -1
:).
표준 출력이 터미널인지에 관계없이 dir
파일 이름을 세로로 정렬 된 열에 나열합니다 (예 :) ls -C
.
모두 들어 ls
와 dir
, 이러한 기본값은 오버라이드 (override) 할 수 --format=
플래그에 의해 -1
, -C
, -m
, 그리고 -x
특히 축약 플래그, --format=
옵션을. 자세한 내용 은 GNU coreutils 참조 설명서 의 10.1.4 일반 출력 형식 을 참조 하십시오.
표준 출력 나열하는 단자와 파일명이 포함되면 제어 문자 , ls
인쇄 ?
대신에 각각의 제어 문자 (등 ls -q
). 표준 출력이 터미널이 아닌 경우 ls
제어 문자를 그대로 인쇄합니다 (예 ls --show-control-chars
:).
표준 출력이 터미널인지 여부에 관계없이 dir
제어 문자 나 쉘에 입력 된 경우 특별히 해석되는 다른 문자가 발생하면 문자에 대한 백 슬래시 시퀀스를 인쇄합니다. 여기에는 공백과 같은 비교적 일반적인 문자도 포함됩니다. 예를 들어 dir
이라는 항목이 나열 Documents backups
됩니다 Documents\ backups
. 이것은 같습니다 ls -b
.
모두 들어 ls
와 dir
, 이러한 기본값은에 나와있는 플래그를 오버라이드 (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
및 인용에 대한 걱정없이 명령의 일부로 사용 , 당신이 사용할 수있는 dir
나 ls -b
.
dir
는 ls -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
여전히 장치 독립적 인 출력을 생성합니다. 이것은 에일리어싱 dir
이 dir --color=auto
실제로 깨지지 않는다고 말하는 것입니다 dir
.
dir --color
;)