Linux / 명령어 / ls - 파일과 디렉터리 목록 확인

ls는 Linux에서 파일과 디렉터리 목록을 확인하는 명령입니다. 기본 목록뿐 아니라 숨김 파일, 권한과 소유자, 파일 크기, 수정 시간과 정렬 순서까지 옵션으로 선택해 표시할 수 있습니다.

일상적인 확인에는 ls -lah가 편리하지만, 스크립트에서 파일명을 안전하게 처리할 때는 사람이 읽도록 만든 ls 출력보다 find 같은 명령을 사용하는 편이 좋습니다.

ls 명령어란?

ls는 list의 약자로, 지정한 파일의 정보나 디렉터리의 내용을 나열합니다. GNU/Linux 배포판에서는 일반적으로 GNU Coreutils에 포함된 ls를 사용합니다.

인수 없이 실행하면 현재 디렉터리를 대상으로 하며, 이름이 점(.)으로 시작하는 숨김 항목은 기본적으로 표시하지 않습니다. 디렉터리 이름을 인수로 주면 그 디렉터리 자체가 아니라 내부 항목을 보여 줍니다.

기본 문법

ls [옵션]... [파일 또는 디렉터리]...

현재 디렉터리의 항목을 확인하려면 다음과 같이 실행합니다.

ls

특정 디렉터리나 파일을 지정할 수도 있습니다.

ls /var/log
ls /etc/hosts
ls /etc /usr/local

여러 대상을 지정하면 각 대상을 명령줄에 적은 순서대로 처리합니다. 디렉터리 내용은 기본적으로 현재 로캘의 정렬 규칙에 따라 파일명 순으로 표시됩니다.

숨김 파일까지 표시하기

모든 항목을 표시하는 -a

-a 또는 --all은 점으로 시작하는 숨김 파일과 디렉터리를 포함합니다. 현재 디렉터리를 뜻하는 .과 상위 디렉터리를 뜻하는 ..도 함께 표시됩니다.

ls -a

.과 ..을 제외하는 -A

-A 또는 --almost-all은 숨김 항목을 보여 주면서 .과 ..은 제외합니다. 실제 설정 파일만 확인할 때 출력이 더 간결합니다.

ls -A

상세 정보를 표시하는 ls -l

-l은 긴 형식(long format)으로 파일 유형과 권한, 하드 링크 수, 소유자, 그룹, 크기, 수정 시간과 이름을 표시합니다.

ls -l

일반적인 출력 한 줄은 다음 순서로 구성됩니다.

항목 의미
유형과 권한 파일 유형 한 자리와 소유자·그룹·기타 사용자의 읽기, 쓰기, 실행 권한입니다.
하드 링크 수 파일의 inode를 가리키는 디렉터리 항목 수입니다. 디렉터리에서는 의미가 조금 다릅니다.
소유자 파일 소유 계정의 이름 또는 사용자 ID입니다.
그룹 파일이 속한 그룹의 이름 또는 그룹 ID입니다.
크기 기본적으로 바이트 단위의 파일 크기입니다.
시간 기본값은 파일 데이터가 마지막으로 바뀐 수정 시간(mtime)입니다.
이름 파일명입니다. 심볼릭 링크는 링크가 가리키는 대상도 함께 표시될 수 있습니다.

권한 문자열 읽는 방법

-rw-r--r--처럼 보이는 문자열의 첫 글자는 파일 유형이고, 뒤의 아홉 글자는 세 글자씩 소유자, 그룹, 기타 사용자의 권한입니다. r은 읽기, w는 쓰기, x는 실행 권한을 뜻합니다.

위치 예시 설명
첫 글자 -, d, l 일반 파일, 디렉터리, 심볼릭 링크 등의 유형입니다.
2~4번째 rw- 소유자의 권한입니다.
5~7번째 r-- 그룹의 권한입니다.
8~10번째 r-- 기타 사용자의 권한입니다.

권한 문자열 뒤에 +나 다른 표시가 붙으면 접근 제어 목록(ACL) 같은 추가 보안 정보가 있다는 뜻일 수 있습니다. 자세한 권한 변경에는 chmod, 소유권 변경에는 chown을 사용합니다.

숫자 ID로 표시하는 -n

사용자명과 그룹명 대신 숫자 ID를 확인하려면 -n을 사용합니다. 계정 이름 조회가 느리거나 다른 시스템과 ID를 비교할 때 유용합니다.

ls -ln

파일 크기를 읽기 쉽게 표시하기

사람이 읽기 쉬운 단위로 표시하는 -h

-h는 긴 형식의 크기를 KiB, MiB, GiB처럼 읽기 쉬운 단위로 표시합니다. 크기 열이 있는 -l 또는 -s와 함께 사용합니다.

ls -lh
ls -lah

ls -lah는 숨김 항목까지 긴 형식으로 보여 주므로 대화형 작업에서 자주 사용됩니다.

할당된 블록 크기를 표시하는 -s

-s는 각 파일에 할당된 디스크 블록 수를 표시합니다. 파일의 논리적 크기와 실제 디스크 할당량은 희소 파일, 압축과 파일 시스템 특성 때문에 다를 수 있습니다.

ls -sh
ls -lsh

디렉터리 전체가 차지하는 공간을 합산하려면 ls보다 du가 적합합니다.

정렬 순서 바꾸기

ls는 기본적으로 파일명을 현재 로캘의 문자 정렬 규칙에 따라 정렬합니다. 목적에 따라 시간, 크기, 확장자 또는 버전 순으로 바꿀 수 있습니다.

수정 시간순으로 정렬하는 -t

ls -lt
ls -lat

-t는 기본적으로 수정 시간이 최근인 항목부터 표시합니다. 로그나 최근 생성된 결과 파일을 찾을 때 유용합니다.

크기순으로 정렬하는 -S

ls -lhS

-S는 큰 파일부터 정렬합니다. 디렉터리 항목에 표시되는 크기는 내부 파일의 합계가 아니므로, 공간 사용량 비교에는 du를 사용하세요.

역순과 버전 순으로 정렬하는 -r, -v

ls -ltr
ls -1v

-r은 현재 정렬 순서를 뒤집습니다. 따라서 ls -ltr은 오래된 항목부터 표시합니다. -v는 file2가 file10보다 먼저 오도록 숫자 부분을 고려한 버전 순 정렬을 사용합니다.

디렉터리를 구분하고 디렉터리 자체 보기

유형 표시를 붙이는 -F

-F 또는 --classify는 디렉터리 뒤에 /, 실행 가능한 파일 뒤에 *, 심볼릭 링크 뒤에 @ 같은 유형 표시를 붙입니다.

ls -F

표시는 실제 파일명의 일부가 아닙니다. 스크립트에서 유형을 판단할 때 이 문자를 잘라 쓰지 말고 파일 테스트 연산자나 find를 사용하세요.

디렉터리 내용 대신 자체 정보를 보는 -d

디렉터리 이름을 지정하면 기본적으로 내부 내용을 보여 줍니다. 디렉터리 항목 자체의 권한과 시간을 보려면 -d를 함께 사용합니다.

ls -ld /var/log
ls -d */

ls -d */는 현재 위치의 일반적인 하위 디렉터리 이름을 확인할 때 편리하지만, 셸의 glob 확장 규칙에 따라 숨김 디렉터리는 포함하지 않습니다.

디렉터리를 먼저 모으기

ls --group-directories-first

GNU ls에서는 디렉터리를 파일보다 먼저 그룹화할 수 있습니다. 이 옵션은 GNU 확장이므로 다른 Unix 계열 시스템에서는 지원 여부를 확인해야 합니다.

하위 디렉터리까지 재귀적으로 보기

ls -R /etc

-R 또는 --recursive는 하위 디렉터리를 따라가며 내용을 계속 표시합니다. 트리가 크면 출력이 매우 길어지고 접근 권한 오류도 많이 발생할 수 있습니다.

특정 이름이나 조건으로 파일을 찾으려면 전체 목록을 눈으로 훑기보다 find를 사용하는 편이 효율적입니다.

find /etc -type f -name '*.conf'

시간 종류와 표시 형식 선택하기

접근 시간과 상태 변경 시간

ls -l은 기본적으로 수정 시간(mtime)을 표시합니다. -u는 접근 시간(atime), -c는 메타데이터 상태 변경 시간(ctime)을 표시하거나 정렬 기준으로 사용합니다.

ls -lu
ls -lc
ls -ltu
ls -ltc

ctime은 파일이 “생성된 시간”이 아니라 권한, 소유자, 링크 수 같은 inode 상태가 마지막으로 바뀐 시간입니다.

일관된 날짜 형식 사용하기

GNU ls의 --time-style로 긴 형식의 날짜 표시를 선택할 수 있습니다.

ls -l --time-style=long-iso
ls -l --time-style=full-iso
ls -l --time-style='+%Y-%m-%d %H:%M:%S'

출력은 로캘과 TZ 환경 변수의 영향을 받을 수 있습니다. 사람이 비교할 보고서라면 시간대와 표시 형식을 함께 정하는 것이 좋습니다.

색상과 파일명 표시 방식

색상 사용하기

ls --color=auto

--color=auto는 출력이 터미널일 때 파일 유형과 확장자에 따라 색상을 사용합니다. 많은 배포판이 ls 별칭으로 이 옵션을 기본 적용합니다.

type ls
alias ls

색상은 LS_COLORS 환경 변수와 dircolors 설정의 영향을 받습니다. 파일로 저장하거나 다른 명령으로 전달할 때는 불필요한 제어 문자가 포함되지 않도록 --color=never를 사용할 수 있습니다.

공백과 특수 문자가 있는 파일명

ls는 터미널과 옵션에 따라 공백이나 제어 문자가 포함된 파일명을 따옴표 또는 이스케이프 형태로 보여 줄 수 있습니다. 표시된 문자열이 실제 파일명과 항상 같은 형태라고 가정하면 안 됩니다.

ls -Q
ls --quoting-style=shell-escape

-Q는 파일명을 큰따옴표로 감쌉니다. --quoting-style은 GNU 확장이며, 사람이 특수 문자를 식별하는 데 유용하지만 안전한 자동 처리 형식을 대신하지는 않습니다.

자주 사용하는 조합

명령 용도
ls -la 숨김 항목을 포함해 상세 정보를 표시합니다.
ls -lah 숨김 항목과 상세 정보를 읽기 쉬운 크기 단위로 표시합니다.
ls -lhS 큰 파일부터 상세 정보를 표시합니다.
ls -ltr 오래된 수정 시간부터 긴 형식으로 표시합니다.
ls -ld */ 현재 위치의 하위 디렉터리 자체 정보를 표시합니다.
ls -1 항목을 한 줄에 하나씩 표시합니다.
ls -1v 버전 숫자를 고려해 한 줄씩 정렬합니다.
ls -l --time-style=long-iso 날짜와 시간을 비교하기 쉬운 형식으로 표시합니다.

주요 옵션 요약

옵션 설명
-a, --all .과 ..을 포함한 숨김 항목을 표시합니다.
-A, --almost-all .과 ..을 제외한 숨김 항목을 표시합니다.
-l 권한, 소유자, 크기와 시간 등을 긴 형식으로 표시합니다.
-h, --human-readable 크기를 사람이 읽기 쉬운 단위로 표시합니다.
-d, --directory 디렉터리의 내용 대신 디렉터리 항목 자체를 표시합니다.
-R, --recursive 하위 디렉터리까지 재귀적으로 표시합니다.
-t 기본적으로 최근 수정 시간부터 정렬합니다.
-S 파일 크기가 큰 순서로 정렬합니다.
-r, --reverse 현재 정렬 순서를 뒤집습니다.
-v 파일명의 숫자 부분을 고려한 버전 순으로 정렬합니다.
-F, --classify 파일 유형을 나타내는 문자를 이름 뒤에 붙입니다.
-1 한 줄에 항목 하나만 표시합니다.

스크립트에서 ls 출력을 파싱하면 안 되는 이유

Linux 파일명에는 공백, 탭과 줄바꿈이 포함될 수 있습니다. ls는 사람이 터미널에서 읽기 좋도록 열, 색상과 인용 방식을 바꾸므로 줄 단위로 분리하거나 공백으로 자르는 스크립트는 잘못된 파일을 처리할 수 있습니다.

파일을 순회할 때는 NUL 문자를 구분자로 지원하는 도구를 사용하세요.

find . -maxdepth 1 -type f -print0 | while IFS= read -r -d '' file; do
  printf '%s\n' "$file"
done

GNU ls에는 --zero 옵션도 있지만, 검색 조건과 후속 처리를 구성할 때는 보통 find -print0이 더 명확합니다. 파일 한 개의 정확한 메타데이터가 필요하면 stat을 사용할 수 있습니다.

자주 발생하는 문제

Permission denied가 표시됩니다.

목록을 읽으려는 디렉터리에 필요한 권한이 없을 수 있습니다. 경로 구성 요소의 실행 권한과 대상 디렉터리의 읽기 권한을 ls -ld 경로 또는 namei -l 경로로 확인하세요. 권한을 우회하기 위해 습관적으로 sudo를 사용하기보다 필요한 접근 권한인지 먼저 판단하는 것이 좋습니다.

정렬 순서가 예상과 다릅니다.

기본 이름 정렬은 LC_COLLATE 로캘의 영향을 받습니다. 재현 가능한 바이트 순서가 필요하면 해당 명령에만 LC_ALL=C를 적용할 수 있습니다.

LC_ALL=C ls

Argument list too long 오류가 발생합니다.

ls *에서 별표는 ls가 아니라 셸이 먼저 수많은 파일명으로 확장합니다. 운영체제의 인수 크기 제한을 넘으면 명령이 시작되기 전에 오류가 발생합니다. 단순 목록은 ls만 실행하고, 조건 검색이나 일괄 처리는 find와 -exec 또는 NUL 구분 파이프라인을 사용하세요.

FAQ

ls -l에서 디렉터리 크기가 내부 파일의 합계인가요?

아닙니다. 긴 형식에 표시되는 디렉터리 크기는 디렉터리 항목 자체의 메타데이터 크기이며 내부 파일 크기의 합계가 아닙니다. 디렉터리별 디스크 사용량은 du -sh 디렉터리로 확인하세요.

ls -a와 ls -A의 차이는 무엇인가요?

-a는 모든 숨김 항목과 함께 ., ..도 표시합니다. -A는 숨김 항목을 표시하되 이 두 특수 디렉터리 항목은 제외합니다.

최근 수정된 파일을 먼저 보려면 어떻게 하나요?

ls -lt를 사용하면 수정 시간이 최근인 항목부터 긴 형식으로 표시됩니다. 오래된 항목부터 보려면 역순 옵션을 더해 ls -ltr을 사용하세요.

관련 글과 공식 문서

같은 카테고리의 다른 글
Linux / 명령어 / sudo - 다른 사용자 권한으로 명령 실행

Linux / 명령어 / sudo - 다른 사용자 권한으로 명령 실행

Linux sudo 명령어로 허용된 명령을 root 또는 다른 사용자 권한으로 실행하는 방법을 설명합니다. 주요 옵션, 인증 캐시, 리디렉션 문제, visudo와 최소 권한 sudoers 설정 원칙을 정리합니다.

Linux / 명령어 / help - 셸 내장 명령어 도움말 확인

Linux / 명령어 / help - 셸 내장 명령어 도움말 확인

Bash help 명령어로 셸 내장 명령과 문법의 도움말을 확인하는 방법을 설명합니다. 출력 형식, 패턴 검색, type·man·--help와의 차이 및 스크립트 활용법을 정리합니다.

Linux / 명령어 / rmdir - 빈 디렉터리 삭제

Linux / 명령어 / rmdir - 빈 디렉터리 삭제

Linux rmdir 명령어로 빈 디렉터리와 비어 있는 상위 경로를 안전하게 삭제하는 방법을 설명합니다. rm -r과의 차이, 실패 원인과 스크립트 사용법도 알아봅니다.

Linux / 명령어 / truncate - 파일 크기 줄이기와 늘리기

Linux / 명령어 / truncate - 파일 크기 줄이기와 늘리기

Linux truncate 명령어로 파일 크기를 지정하거나 늘리고 줄이는 방법을 설명합니다. 희소 파일, 상대 크기 조정, 기준 파일과 같은 크기로 맞추는 방법 및 데이터 손실 주의점을 알아봅니다.

Linux / 명령어 / bzip2 - 파일을 bzip2 형식으로 압축하기

Linux / 명령어 / bzip2 - 파일을 bzip2 형식으로 압축하기

Linux bzip2 명령어의 용도와 기본 문법을 알아봅니다. 파일 처리 예제, 주요 옵션과 원본 보존·덮어쓰기 주의점을 설명합니다.

Linux / 명령어 / umask - 새 파일·디렉터리 기본 권한 제한

Linux / 명령어 / umask - 새 파일·디렉터리 기본 권한 제한

Linux umask 명령어의 기본 문법과 실제 사용 예제를 설명합니다. 주요 옵션과 결과를 해석할 때 주의할 점을 확인할 수 있습니다.

Linux / 명령어 / nmap - 허가된 호스트의 포트와 서비스 조사

Linux / 명령어 / nmap - 허가된 호스트의 포트와 서비스 조사

Linux nmap 명령어의 기능과 기본 문법을 설명합니다. 실제 사용 예제, 주요 옵션과 작업 전 확인할 점을 알아봅니다.

Linux / 명령어 / realpath - 절대 경로와 실제 경로 확인

Linux / 명령어 / realpath - 절대 경로와 실제 경로 확인

Linux realpath 명령어로 상대 경로와 심볼릭 링크를 정규화하고 절대·상대 경로를 출력하는 방법을 설명합니다. 경로 존재 조건과 보안상 주의점도 함께 정리합니다.

Linux / 명령어 / whereis - 명령의 바이너리·소스·매뉴얼 위치 찾기

Linux / 명령어 / whereis - 명령의 바이너리·소스·매뉴얼 위치 찾기

Linux whereis 명령어로 프로그램의 바이너리, 소스와 매뉴얼 페이지 위치를 찾는 방법을 설명합니다. 검색 범위 제한과 which·find와의 차이도 정리합니다.

Linux / 명령어 / which - PATH에서 실행 파일 경로 찾기

Linux / 명령어 / which - PATH에서 실행 파일 경로 찾기

Linux which 명령어로 PATH에서 실행 파일 경로를 찾는 방법을 설명합니다. type과 command -v의 차이, 별칭·함수 확인과 스크립트 이식성도 정리합니다.