Ls (유닉스)
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
`ls`는 유닉스 계열 운영 체제에서 파일과 디렉터리를 나열하는 데 사용되는 명령어이다. 1987년 X/Open Portability Guide의 일부가 되었으며, POSIX.1과 Single Unix Specification으로 계승되었다. `ls`는 현재 자유 소프트웨어 재단과 BSD 계열 시스템에서 구현되며, 다양한 옵션을 통해 파일 목록을 표시하는 방식을 변경할 수 있다. 일반적인 옵션으로는 상세 정보 표시(-l), 숨김 파일 표시(-a), 파일 종류에 따른 색상 표시(--color 또는 -G) 등이 있다.
`ls`는 AT&T 유닉스의 첫 번째 버전에 등장한 명령어이며, "list"라는 단어의 줄임말이다. 이 이름은 Multics에 존재했던 유사한 명령어에서 유래되었다.[6][7][8] 1987년 제2판부터 X/Open Portability Guide의 일부였으며, POSIX.1의 첫 번째 버전과 Single Unix Specification으로 계승되었다.[9]
`ls` 명령어는 다양한 옵션을 사용하여 파일 및 디렉터리 정보를 표시하는 방식을 제어한다.
2. 역사
현재 `ls`의 주요 구현에는 자유 소프트웨어 재단의 것과 FreeBSD, OpenBSD, NetBSD, Darwin 등 BSD 계열 시스템에서 사용되는 두 가지가 있으며, 둘 다 자유 소프트웨어이자 오픈 소스이다.
2. 1. 유닉스 초기 버전
`ls`는 AT&T 유닉스의 초기 버전부터 존재했던 명령어였다.[6][7][8] 이 명칭은 멀틱스에 존재하고 있었던 비슷한 명령어에서 유래했다. 현재 사용되는 `ls`는 자유 소프트웨어 재단에서 구현된 판과 FreeBSD, OpenBSD, NetBSD 및 다윈 등의 BSD 계열 유닉스 시스템에서 사용되고 있는 판 등이 있으며, 양쪽 다 자유 소프트웨어이며 오픈 소스이기도 하다.
2. 2. 명칭의 유래
`ls`는 AT&T 유닉스의 초기 버전부터 존재하던 명령어였다. 이 명칭은 멀틱스에 존재하고 있었던 비슷한 커맨드에서 계승되었다.[6][7][8] "list"라는 단어의 줄임말인 'ls'라는 이름은 멀틱스에도 비슷한 명령어가 있었고 거기에서 유래했다. 1987년 제2판부터 X/Open Portability Guide의 일부이며, POSIX.1의 첫 번째 버전과 Single Unix Specification으로 계승되었다.[9]
2. 3. 현재 사용되는 구현
`ls`는 AT&T 유닉스 초기 버전부터 존재하던 명령어였다. 이 명칭은 멀틱스에 존재하고 있었던 비슷한 명령어에서 계승되었다. 현재 사용되고 있는 `ls`는 자유 소프트웨어 재단에서 구현된 판과 FreeBSD, OpenBSD, NetBSD 및 다윈 등의 BSD 계열 유닉스 시스템에서 사용되고 있는 판 등이 있으며, 양쪽 다 자유 소프트웨어이며 오픈 소스이기도 하다.[6][7][8]
3. 작동 형태
3. 1. 기본 작동
유닉스 계열 운영 체제에는 사용자가 현재 작업 중인 파일 시스템 상의 위치를 나타내는 '현재 디렉터리'라는 개념이 있다. `ls` 명령어를 옵션 없이 실행하면 현재 디렉터리에 있는 파일 목록이 표시된다. 디렉터리나 파일 목록을 매개변수로 지정하면 지정된 파일이나 디렉터리 안에 있는 파일 목록이 표시된다.
일반적으로 이름이 '.'으로 시작하는 파일은 표시되지 않으며, 이러한 파일도 표시하려면 `-a` 옵션을 지정해야 한다.
`ls`를 옵션 없이 실행하면 파일 이름만 표시되지만, 파일 종류, 크기, 퍼미션 등의 추가 정보는 표시되지 않는다. `ls`에는 표시 형식을 변경하는 다양한 옵션이 있다.
파일 종류를 색상으로 구분하는 옵션을 사용하면 다음과 같이 출력된다. (아래 출력 예시는 이해를 돕기 위한 것으로, 실제 출력과는 다를 수 있다.)
```text
brw-r--r-- 1 unixguy staff 64, 64 Jan 27 05:52 block
crw-r--r-- 1 unixguy staff 64, 255 Jan 26 13:57 character
drwxrwx--x 2 unixguy staff 48 Jan 26 11:28 directory
prw-r--r-- 1 unixguy staff 0 Jan 26 11:50 fifo
lrwxrwxrwx 1 unixguy staff 3 Jan 26 11:44 link -> dir
```
유닉스 및 유닉스 계열 운영 체제는 작업 디렉터리 개념을 사용한다. `ls`는 명령줄 인수 없이 실행하면 작업 디렉터리의 파일을 나열하고, 디렉터리를 인수로 지정하면 해당 디렉터리의 파일을 나열한다. 여러 디렉터리와 파일을 함께 지정할 수도 있다.
많은 유닉스 계열 시스템에서 점 (`.`)으로 시작하는 이름은 숨겨져 있으며, 작업 디렉터리를 나타내는 `.`과 상위 디렉터리를 나타내는 `..` 등이 있다. `-a` 옵션을 사용하면 숨겨진 이름을 포함한 모든 이름이 표시되고, `-A` 옵션을 사용하면 `.`과 `..`를 제외한 모든 숨겨진 이름을 포함한 모든 이름이 표시된다. 명시적으로 지정된 파일 이름(예: `ls .secret`)은 항상 표시된다.
옵션 없이 `ls`를 실행하면 이름만 표시된다. 구현에 따라 옵션이 다르지만, 일반적인 옵션은 다음과 같다.
항목 표시 방법을 제어하는 추가 옵션은 다음과 같다.
다양한 유형의 항목을 다른 색상으로 강조 표시할 수 있다.3. 2. 디렉터리 지정
유닉스 계열 운영 체제에는 사용자가 현재 작업 중인 파일 시스템 상의 위치를 나타내는 '현재 디렉터리'라는 개념이 있다. `ls` 명령어를 옵션 없이 실행하면 현재 디렉터리의 파일 목록이 표시된다. `ls` 명령어에 디렉터리나 파일 목록을 인수로 지정하면, 지정된 파일 또는 디렉터리 안에 있는 파일 목록이 표시된다.
이때, '.'으로 시작하는 파일 이름(숨김 파일)은 일반적으로 표시되지 않는다. 이러한 숨김 파일까지 모두 표시하려면 `-a` 옵션을 사용해야 한다. `-A` 옵션을 사용하면 `.` (현재 디렉터리)과 `..` (상위 디렉터리)를 제외한 모든 숨김 파일을 포함하여 표시한다. `ls .secret`와 같이 명시적으로 파일 이름을 지정하면 항상 해당 파일이 목록에 표시된다.
옵션 없이 `ls`를 실행하면 파일 이름만 표시되지만, `-l` 옵션을 사용하면 유닉스 파일 유형, 권한, 하드 링크 수, 소유자, 그룹, 크기, 최종 수정 날짜 및 시간 등 자세한 정보를 확인할 수 있다.
3. 3. 숨김 파일
많은 유닉스 계열 시스템에서 점 ('.')으로 시작하는 이름은 숨겨져 있다. 예로는 작업 디렉터리를 나타내는 '.'과 상위 디렉터리를 나타내는 '..'가 있다. 숨겨진 이름은 기본적으로 표시되지 않는다. `ls` 명령어에서 이러한 숨김 파일을 표시하려면 `-a` 옵션을 사용해야 한다. `-a` 옵션을 사용하면 모든 숨겨진 이름을 포함한 모든 이름이 표시된다. `-A` 옵션을 사용하면 '.'과 '..'를 제외한 모든 숨겨진 이름을 포함한 모든 이름이 표시된다. 명시적으로 지정된 파일 이름(예: `ls .secret`)은 항상 나열된다.[10][11][12]
3. 4. 출력 형식
유닉스 계열 운영 체제에서 `ls` 명령어는 현재 디렉터리의 파일 목록을 표시하거나, 지정된 디렉터리나 파일의 정보를 출력한다. 옵션이 없으면 파일 이름만 표시되지만, 다양한 옵션을 통해 출력 형식을 변경할 수 있다.
GNU `ls`는 `--color` 옵션을,[13] FreeBSD `ls`는 `-G` 옵션을[14] 사용하여 파일 유형, 권한, 확장자 등에 따라 다른 색상으로 항목을 표시할 수 있다.
3. 5. 색상 표시 (옵션)
일부 환경에서는 `--color` (GNU영어 `ls`) 또는 `-G` (FreeBSD영어 `ls`) 옵션을 지정하면 파일 유형에 따라 다른 색상으로 표시된다. FreeBSD의 `ls`에서는 파일 유형과 권한만으로 표시할 색상을 결정하지만, GNU의 `ls`에서는 이에 더해 확장자에 따라서도 색상을 변경할 수 있다.[13][14]
이러한 옵션을 지정한 경우, `ls`의 출력은 다음과 같다.
brw-r--r-- 1 unixguy staff 64, 64 Jan 27 05:52 block
crw-r--r-- 1 unixguy staff 64, 255 Jan 26 13:57 character
drwxrwx--x 2 unixguy staff 48 Jan 26 11:28 dir
prw-r--r-- 1 unixguy staff 0 Jan 26 11:50 fifo
lrwxrwxrwx 1 unixguy staff 3 Jan 26 11:44 link -> dir
4. 옵션
`ls` 명령어는 다양한 옵션을 사용하여 출력 형태를 변경할 수 있다. 옵션을 사용하지 않으면 파일명만 간단하게 표시되지만, 옵션을 추가하면 파일의 세부 정보, 숨김 파일 표시, 정렬 방식 변경 등 다양한 기능을 활용할 수 있다.
`-1` 옵션은 항목을 한 줄에 하나씩 표시하고, `-m` 옵션은 항목을 쉼표로 구분하여 표시한다. `-g` 옵션은 소유자 정보 없이 그룹 정보만 표시하며, `-o` 옵션은 그룹 정보 없이 소유자 정보만 표시한다. `-g`와 `-o` 옵션을 함께 사용하면 그룹과 소유자 정보를 모두 표시하지 않을 수 있다.
GNU `ls`에서는 `--color` 옵션을, FreeBSD `ls`에서는 `-G` 옵션을 사용하여 파일 유형에 따라 다른 색상으로 파일을 표시할 수 있다. GNU `ls`는 파일 유형, 권한, 확장자에 따라 색상을 변경하는 반면, FreeBSD `ls`는 파일 유형과 권한만을 기준으로 색상을 결정한다.[13][14]
이 외에도 다양한 옵션이 존재하며, 자세한 내용은 man 페이지를 통해 확인할 수 있다.
4. 1. 일반적인 옵션
`ls` 명령어는 다양한 옵션을 통해 출력 형태를 변경할 수 있다. 모든 파일과 폴더를 출력하는 `-a`, 상세 정보를 제공하는 `-l` 등의 옵션이 있다.일반적인 옵션은 다음과 같다:
옵션 | 설명 |
---|---|
`-l` | 긴 형식으로, 유닉스 파일 유형, 권한, 하드 링크 수, 소유자, 그룹, 크기, 최종 수정 날짜 및 시간 등을 표시한다. |
`-f` | 정렬하지 않는다. 많은 수의 파일을 포함하는 디렉터리에 유용하다. |
`-F` | 파일의 종류를 나타내는 문자를 파일명 뒤에 추가한다. (예: 디렉터리는 `/`, 실행 파일은 `*`) |
`-a` | `.`으로 시작하는 숨겨진 파일을 포함하여 모든 파일을 표시한다. |
`-R` | 하위 디렉터리까지 재귀적으로 모든 파일을 표시한다. |
`-d` | 심볼릭 링크나 디렉터리 자체의 정보를 표시한다. |
`-t` | 수정 시간 순서대로 파일을 정렬한다. |
`-h` | 파일 크기를 사람이 읽기 쉬운 형태로 표시한다. (예: 1K, 234M, 2G) |
유닉스 및 유닉스 계열 운영 체제에서 `ls`는 명령줄 인수 없이 호출되면 작업 디렉터리의 파일을 나열한다. 다른 디렉터리가 인수로 지정되면 해당 디렉터리의 파일이 나열된다.
많은 유닉스 계열 시스템에서 `.` (점)으로 시작하는 이름은 숨겨져 있으며, 기본적으로 표시되지 않는다. `-a` 옵션을 사용하면 숨겨진 이름을 포함한 모든 이름이 표시된다.
항목 표시 방법을 제어하는 추가 옵션은 다음과 같다:
옵션 | 설명 |
---|---|
`-R` | 하위 디렉터리의 항목을 재귀적으로 나열한다. |
`-t` | 수정 시간을 기준으로 목록을 정렬한다. (기본 정렬은 알파벳순) |
`-u` | 마지막 접근 시간을 기준으로 목록을 정렬한다. |
`-c` | 마지막 속성(상태) 변경 시간을 기준으로 목록을 정렬한다. |
`-r` | 순서를 반대로 한다. |
`--full-time` | 시간을 분뿐만 아니라 초와 밀리초까지 표시한다. |
`-1` | 항목당 한 줄로 표시한다. |
`-m` | 스트림 형식, 쉼표로 구분된 페이지의 항목을 나열한다. |
`-g` | 소유자 없이 그룹을 포함한다. |
`-o` | 그룹 없이 소유자를 포함한다. (`-g`와 결합하면 그룹과 소유자 모두 억제됨) |
`-d` | 디렉터리의 내용이나 링크 대상이 아닌 디렉터리 또는 심볼릭 링크에 대한 정보를 표시한다. |
`-F` | 디렉터리 이름에 `/`를 추가하고 실행 파일에 `*`를 추가한다. |
GNU `ls`는 `--color` 옵션을,[13] FreeBSD `ls`는 `-G` 옵션을 사용하여 파일 유형에 따라 다른 색상으로 표시할 수 있다.[14]
4. 2. 추가 옵션 (일부 구현)
`ls` 명령어는 다양한 옵션을 통해 출력 형태를 조절할 수 있다. 예를 들어, `-a` 옵션은 숨김 파일을 포함한 모든 파일을, `-l` 옵션은 파일의 세부 정보를 제공한다.일반적인 옵션은 다음과 같다:
- `-l`: 긴 형식으로, 유닉스 파일 유형, 권한, 하드 링크 수, 소유자, 그룹, 크기, 최종 수정 날짜 및 시간을 표시한다. 6개월 이상 지난 수정 날짜는 연도로 대체된다. 일부 구현에서는 권한에 추가 플래그를 추가한다. 파일 유형은 다음 중 하나일 수 있다: `-`(일반 파일), `d`(디렉터리), `l`(심볼릭 링크), `n`(네트워크 파일 시스템), `s`(네트워크 소켓), `p`(명명된 파이프), `c`(문자 특수 파일), `b`(블록 특수 파일).[10][11][12]
- `-f`: 정렬하지 않는다.
- `-F`: 파일 종류를 나타내는 문자를 파일명 뒤에 추가한다. (예: 디렉터리는 `/`, 실행 파일은 `*`)
- `-a`: `.`으로 시작하는 숨김 파일을 포함하여 모든 파일을 표시한다.
- `-R`: 하위 디렉터리까지 재귀적으로 모든 파일을 표시한다.
- `-d`: 심볼릭 링크나 디렉터리 자체의 정보를 표시한다.
- `-t`: 수정 시간 순서대로 파일을 정렬한다.
- `-h`: 파일 크기를 사람이 읽기 쉬운 형태로 표시한다. (예: 1K, 234M, 2G)
항목 표시 방법을 제어하는 추가 옵션은 다음과 같다:
- `-R`: 하위 디렉터리의 항목을 재귀적으로 나열한다.
- `-t`: 수정 시간을 기준으로 목록을 정렬한다(기본 정렬은 알파벳순).
- `-u`: 마지막 접근 시간을 기준으로 목록을 정렬한다.
- `-c`: 마지막 속성(상태) 변경 시간을 기준으로 목록을 정렬한다.
- `-r`: 순서를 반대로 한다. (예: 최신 시간은 마지막)
- `--full-time`: 시간을 분뿐만 아니라 초와 밀리초까지 표시한다.
- `-1`: 항목당 한 줄로 표시한다.
- `-m`: 스트림 형식으로, 쉼표로 구분하여 항목을 나열한다.
- `-g`: 소유자 없이 그룹을 포함한다.
- `-o`: 그룹 없이 소유자를 포함한다(`-g`와 결합하면 그룹과 소유자 모두 억제됨).
- `-d`: 디렉터리의 내용이나 링크 대상이 아닌 디렉터리 또는 심볼릭 링크에 대한 정보를 표시한다.
- `-F`: 디렉터리 이름에 "/"를, 실행 파일에 "*"를 추가한다.
GNU `ls`는 `--color` 옵션을 사용하여 파일 유형, 권한, 확장자에 따라 다른 색상으로 표시할 수 있다.[13] FreeBSD `ls`는 `-G` 옵션을 사용하며, 파일 유형과 권한에 따라 색상을 다르게 표시한다.[14]
5. 사용 예시
`ls` 명령의 사용 예시는 다음과 같다.
두 개의 옵션 (-l, -F)을 파라미터로 지정하여 `ls`를 각각 실행했을 때 출력 결과는 다음과 같이 달라진다.
```console
$ pwd
/home/fred
$ ls -l
drwxr--r-- 1 fred editors 4096 drafts
- rw-r--r-- 1 fred editors 30405 edition-32
- r-xr-xr-x 1 fred fred 8460 edit
$ ls -F
drafts/
edition-32
edit*
```
위 결과에서 `fred` 사용자의 홈 디렉터리에는 `drafts`라는 디렉터리, `edition-32`라는 이름의 일반 파일, `edit`라는 이름의 실행 가능한 파일이 있음을 알 수 있다.
`ls`는 사용자, 그룹, 그 외 사용자(other)가 파일에 대해 어떤 권한을 가지고 있는지 표시한다. 자세한 내용은 파일 권한에서 확인할 수 있다.
다음은 명령어의 출력을 보여주는 또 다른 예시이다.
```console
$ ls -l
drwxr--r-- 1 fjones editors 4096 Mar 2 12:52 drafts
- rw-r--r-- 3 fjones editors 30405 Mar 2 12:52 edition-32
- r-xr-xr-x 1 fjones bookkeepers 8460 Jan 16 2022 edit.sh
```
각 줄은 파일 종류 및 권한, 하드 링크 수, 파일 소유자, 파일 그룹, 파일 크기, 수정 날짜/시간 및 파일 이름을 보여준다.
5. 1. 기본 사용법
두 개의 옵션 (-l, -F)을 파라미터로 지정하여 `ls`를 각각 실행했을 때 출력 결과는 다음과 같이 달라진다.```console
$ pwd
/home/fred
$ ls -l
drwxr--r-- 1 fred editors 4096 drafts
- rw-r--r-- 1 fred editors 30405 edition-32
- r-xr-xr-x 1 fred fred 8460 edit
$ ls -F
drafts/
edition-32
edit*
```
여기서 `fred` 사용자의 홈 디렉터리에는 `drafts`라는 디렉터리, `edition-32`라는 이름의 일반 파일, `edit`라는 이름의 실행 가능한 파일이 있음을 알 수 있다. `ls`는 사용자(user), 사용자의 소속 그룹(group), 파일의 소유자 외의 다른 사용자들(other)이 파일에 대해 어떤 권한(퍼미션)을 가지고 있는가를 표시하기 위해 몇 가지 문자를 채용하고 있다.
퍼미션 부분의 최초의 문자는 파일의 종류를 가리킨다.
문자 | 의미 |
---|---|
- | 보통 파일 |
b | 블록 장치 |
c | 문자 장치 |
d | 디렉터리 |
l | 심볼릭 링크 |
p 또는 = | named pipe/FIFO |
s | 소켓 |
첫 번째 문자 이후의 9개의 문자열은 각각 3문자씩의 세 묶음으로 나뉘어 있으며, 3문자에는 `-` 또는 각각 `r`, `w`, `x`가 표시될 수 있어, 각각 읽기, 쓰기, 실행의 권한을 가지고 있음을(`-`의 경우 없음을) 나타낸다. 첫 번째 묶음은 파일의 소유자인 사용자, 두 번째 묶음은 사용자가 속한 그룹, 세 번째는 다른 사용자들을 의미한다. 위의 예에서, `fred` 사용자는 `edition-32`을 읽고 쓸 수는 있으나, 실행은 할 수 없음을 알 수 있다. `editors` 그룹의 소속 사용자는 그 밖의 다른 사용자와 마찬가지로, `edition-32`을 읽을 수 있으나, 파일을 쓰거나 실행시키는 작업은 할 수 없다.
다음은 명령어의 출력을 보여주는 예시이다.
```console
$ ls -l
drwxr--r-- 1 fjones editors 4096 Mar 2 12:52 drafts
- rw-r--r-- 3 fjones editors 30405 Mar 2 12:52 edition-32
- r-xr-xr-x 1 fjones bookkeepers 8460 Jan 16 2022 edit.sh
```
각 줄은 `d` (디렉토리) 또는 `-` (파일) 표시자, 유닉스 파일 권한 표기법, 하드 링크 수 (1 또는 3), 파일 소유자, 파일 그룹, 파일 크기, 수정 날짜/시간 및 파일 이름을 보여준다. 작업 디렉토리에서 소유자 `fjones`는 `drafts`라는 디렉토리, `edition-32`라는 일반 파일, 그리고 `edit.sh`라는 실행 파일을 가지고 있다. 이 실행 파일은 "오래된" 파일로, 연도가 표시된 것처럼 6개월 이상 전에 수정되었다.
```text
┌─────────── 파일 (디렉토리가 아님)
|┌─────────── 소유자에 대한 읽기-쓰기 (실행 없음) 권한
|│ ┌───────── 그룹에 대한 읽기 전용 권한
|│ │ ┌─────── 다른 사용자에 대한 읽기 전용 권한
|│ │ │ ┌── 하드 링크 수
|│ │ │ │ ┌── 소유자
|│ │ │ │ │ ┌── 사용자 그룹
|│ │ │ │ │ │ ┌── 바이트 단위의 파일 크기
|│ │ │ │ │ │ │ ┌── 마지막 수정 날짜
|│ │ │ │ │ │ │ │ ┌── 파일 이름
- rw-r--r-- 3 fjones editors 30405 Mar 2 12:52 edition-32
```
자세한 내용은 파일 권한을 참조하라.
5. 2. 상세 정보 출력 (-l)
`ls -l` 명령은 파일과 디렉터리의 상세 정보를 출력한다. 출력 결과는 다음과 같은 형식으로 나타난다.```
drwxr--r-- 1 fjones editors 4096 Mar 2 12:52 drafts
- rw-r--r-- 3 fjones editors 30405 Mar 2 12:52 edition-32
- r-xr-xr-x 1 fjones bookkeepers 8460 Jan 16 2022 edit.sh
```
각 줄은 다음 정보를 포함한다.
- 파일 종류 및 권한:
- 첫 번째 문자는 파일 종류를 나타낸다.