개요
리눅스·유닉스에서 디스크 용량을 확인할 때 자주 쓰는 명령어는 du(disk usage)와 df(disk free)다. 디렉터리 구조에 **심링크(symbolic link)**가 많이 들어 있으면, 기본 동작에서는 심링크 자체의 크기(몇 바이트~경로 문자열)만 잡히고, 심링크가 가리키는 실제 파일·디렉터리의 용량은 포함되지 않는다. 백업 용량 추정, 디스크 사용량 감사, 정리 대상 찾기 등에서는 실제 데이터 크기를 알고 싶을 때가 많다. 이 포스트는 용량 측정 시 심링크를 따라가서(dereference) 대상의 실제 용량을 반영하는 방법을 정리한다.
대상 독자: 리눅스·맥에서 du, df를 쓰는 개발자·관리자, 심링크가 많은 디렉터리/마운트 구조를 다루는 사람.
심링크(symlink)란
**심볼릭 링크(symbolic link, symlink)**는 파일 시스템에서 다른 파일 또는 디렉터리의 경로를 내용으로 갖는 특수 파일이다. 실제 데이터를 복사하는 것이 아니라, “이 경로를 참조한다”는 정보만 저장한다.
- 하드 링크: 동일 inode를 가리키는 다른 이름. 같은 파일시스템 내, 파일만 가능.
- 심링크: 경로 문자열을 저장. 디렉터리·다른 파일시스템·없는 경로도 가리킬 수 있음.
용량 측정 관점에서:
- 심링크 자체의 크기: 경로 문자열 길이 정도(수십 바이트 수준).
- 심링크가 가리키는 대상의 크기: 수 GB까지 가능.
그래서 du·df로 “실제 쓰는 용량”을 보고 싶다면, 심링크를 따라가서(dereference) 대상의 크기를 세도록 옵션을 주어야 한다.
du에서 심링크 따라가기: -L, -D, -H
du는 지정한 경로 아래의 파일·디렉터리 사용량을 재귀적으로 합산한다. 트리 순회 중 만나는 심링크 처리 방식이 옵션에 따라 다르다.
기본 동작(-P, no-dereference)
- 디렉터리를 가리키는 심링크는 따라가지 않는다. 심링크 항목 자체만 보고, 그 안으로 들어가지 않음.
- 그 결과, 심링크가 가리키는 큰 디렉터리의 용량이 합산에서 빠진다.
-L (–dereference)
- 모든 심링크를 따라간다. 명령줄에 준 경로가 심링크여도, 트리 순회 중 만나는 심링크도 모두 역참조.
- “실제 데이터 기준 용량”을 셀 때 가장 많이 쓰는 옵션이다.
| |
-D (–dereference-args), -H
- 명령줄 인자로 준 경로만 심링크면 따라가고, 순회 중 만나는 심링크는 따라가지 않는다.
- “인자로 준 이름만 논리적 경로로 보고, 나머지는 물리적 트리만 순회”할 때 사용.
비교 요약
| 옵션 | 명령줄 인자(심링크) | 순회 중 만난 심링크 |
|---|---|---|
| 기본(-P) | 따라가지 않음 | 따라가지 않음 |
| -D, -H | 따라감 | 따라가지 않음 |
| -L | 따라감 | 따라감 |
용량 측정 시 심링크까지 모두 반영하려면 **du -L**을 쓰면 된다.
df와 심링크
df는 파일시스템 단위로 사용 가능·사용 중인 공간을 보여준다. 인자로 경로를 주면, 그 경로가 속한 파일시스템의 통계를 출력한다.
- 경로가 심링크일 때: 구현에 따라 그 경로를 해석한 최종 대상이 있는 파일시스템을 보여주는 경우가 많다. 즉, 심링크를 따라간 뒤 그 경로가 있는 디바이스/마운트의 사용량이 나온다.
- “특정 디렉터리 트리 전체가 차지하는 용량”을 알고 싶을 때는 **
du**가 맞고, “그 경로가 올라가 있는 디스크의 여유 공간”을 보고 싶을 때 **df**를 쓰면 된다.
동작 방식 흐름 (Mermaid)
du가 심링크를 처리하는 두 가지 방식을 흐름으로 구분하면 아래와 같다.
flowchart LR
subgraph defaultMode["du 기본 no -L"]
A1["경로 입력"] --> B1["심링크 만남"]
B1 --> C1["따라가지 않음"]
C1 --> D1["심링크 자체 크기만 합산"]
end
subgraph derefMode["du -L dereference"]
A2["경로 입력"] --> B2["심링크 만남"]
B2 --> C2["대상 경로로 이동"]
C2 --> D2["대상 파일/디렉터리 용량 합산"]
end
- 왼쪽: 기본 동작. 심링크를 만나도 따라가지 않아 실제 데이터 용량이 빠진다.
- 오른쪽:
-L사용 시. 심링크를 따라가서 대상의 용량이 반영된다.
실전 예제
1. 특정 경로(심링크 포함) 실제 용량 요약
| |
/data/project가 심링크여도 그 대상 디렉터리 전체의 사용량이 출력된다.
2. 하위 디렉터리별로 보되, 심링크 따라가기
| |
/var 아래 1단계까지 보면서, 심링크가 가리키는 실제 용량이 포함된다.
3. 총합만 한 줄로
| |
각 인자에 대해 합계(-c)를 내고, 마지막 줄이 grand total이다.
4. df로 해당 경로가 올라간 디스크 여유 확인
| |
/data/project(또는 그 심링크가 가리키는 실제 경로)가 올라간 파일시스템의 사용량·여유가 나온다.
주의사항
- 중복 계산:
du -L로 디렉터리를 재귀하면, 여러 심링크가 같은 디렉터리를 가리킬 경우 그 디렉터리 용량이 여러 번 더해질 수 있다. “실제 디스크 사용량”보다 큰 값이 나올 수 있음. - 순환 심링크: A → B → A처럼 순환이 있으면,
-L사용 시 따라가다가 같은 곳을 반복 방문할 수 있다. 일부 구현에서는 순환 감지로 에러를 내거나 동작이 달라질 수 있으므로, 이상한 디렉터리 구조에서는 주의. - 다른 파일시스템: 심링크가 다른 마운트를 가리키면,
du -L은 그 마운트 안의 용량까지 합산한다. “이 디스크만의 용량”을 보고 싶다면-x(one-file-system)와 조합해 사용할 수 있다. 예:du -L -x -sh /(루트와 같은 파일시스템만). - 권한: 대상 디렉터리/파일에 읽기 권한이 없으면 해당 부분은 합산되지 않거나 에러가 날 수 있다.
요약
- 심링크: 실제 파일/디렉터리가 아니라 “경로를 가리키는” 작은 파일이라, 기본
du는 그 작은 크기만 잡고 대상을 세지 않는다. - 실제 데이터 기준 용량을 보려면
du -L(또는--dereference)을 사용해 모든 심링크를 따라가도록 하자. - 명령줄 인자만 심링크로 따라가고 싶으면 **
-D/-H**를 쓰고, 트리 안의 심링크까지 모두 따라가려면 **-L**을 쓴다. - **
df**는 “그 경로가 있는 파일시스템의 사용량”을 보는 용도이고, 경로가 심링크면 보통 최종 대상이 있는 디스크 정보가 나온다. - 중복 계산·순환 링크·다른 파일시스템·권한을 염두에 두고 해석하면 된다.
참고 문헌
- du(1) - Linux manual page — man7.org.
-L,-D,-H,-P등 옵션 설명. - symlink(7) - Linux manual page — man7.org. 심볼릭 링크 처리 규칙, 트리 순회 시 동작.
- GNU coreutils - du — GNU coreutils 문서. du invocation 상세.
![Featured image of post [Linux] 디스크 용량 측정 시 심링크(dereference) 포함하기](/post/2023-01-13-size-check-with-symlink/wordcloud_hu_e9d2d86fc3890b26.webp)
![[Hardware] LattePanda Alpha에 Ubuntu 16.04 LTS 설치 가이드](/post/2018-12-06-install-ubuntu-16.04-on-lattepanda/wordcloud_hu_fc536f8de2cbd4bf.webp)
![[How-To] Windows 10 다중 사용자 카카오톡 실행 권한 부여](/post/2021-04-07-window10-multiuser-kakaotalk/wordcloud_hu_5fcf6a8683d09a52.webp)
![[Tutorial] Learn Prompting - 프롬프트 엔지니어링 무료 가이드 정리](/post/2022-12-30-learn-prompting/wordcloud_hu_6a9d105de4834753.webp)
![[Rust] Comprehensive Rust 무료 강의 정리 및 코스 구조](/post/2022-12-30-comprehensive-rust/wordcloud_hu_d1420ff38434cdb6.webp)
![[Hyper-V] 가상 머신 해상도 설정: Set-VMVideo 활용 가이드](/post/2025-05-24-hyper-v-virtual-machine-resolution-setting-set-vmvideo-utilization-guide/image_hu_96966cce8efeeb71.webp)