리눅스/리눅스 패키지

리눅스 필수 설치 패키지 - tree

씨실과 날실 2020. 8. 15. 09:00


tree 패키지에 대하여

우리는 디렉터리의 구조와 파일의 위치를 확인하기 위해 일반적으로 노틸러스(Nautilus)와 같은 GUI의 파일 관리자 프로그램을 하거나 ls와 같은 터미널 명령어를 사용합니다. 그러나 이러한 방법들은 한번에 알아보기 힘들고 번거롭기까지 합니다.

해당 정보를 일목요연하게 보여주는리눅스 패키지가 있습니다. tree  패키지는 위 그림에서 보듯 패키지 이름 그대로 디렉터리 구조와 그 안에 담긴 파일을 트리 형식으로 보여줍니다.


tree 패키지 설치

이 패키지는 리눅스 배포판의 기본 제공 패키지는 아니라서 따로 설치해주어야 합니다. 그러나 대부분의 리눅스 배포판 기본 저장소에서 배포되므로 패키지 관리자를 통해 간단히 설치할 수 있습니다.

study@study-VirtualBox:~$ sudo apt install tree
패키지 목록을 읽는 중입니다... 완료
의존성 트리를 만드는 중입니다       
상태 정보를 읽는 중입니다... 완료
다음 새 패키지를 설치할 것입니다:
  tree
0개 업그레이드, 1개 새로 설치, 0개 제거 및 0개 업그레이드 안 함.
43.0 k바이트 아카이브를 받아야 합니다.
이 작업 후 115 k바이트의 디스크 공간을 더 사용하게 됩니다.
받기:1 http://mirror.kakao.com/ubuntu focal/universe amd64 tree amd64 1.8.0-1 [43.0 kB]
내려받기 43.0 k바이트, 소요시간 0초 (639 k바이트/초)
Selecting previously unselected package tree.
(데이터베이스 읽는중 ...현재 201676개의 파일과 디렉터리가 설치되어 있습니다.)
Preparing to unpack .../tree_1.8.0-1_amd64.deb ...
Unpacking tree (1.8.0-1) ...
tree (1.8.0-1) 설정하는 중입니다 ...
Processing triggers for man-db (2.9.1-1) ...
study@study-VirtualBox:~$ 


tree 패키지 주요 사용법

현재 디렉터리 기본 트리 구조 출력

study@study-VirtualBox:~$ tree
.
├── 공개
├── 다운로드
│   └── mediawiki-1.34.2.tar.gz
├── 문서
│   └── test.txt
├── 바탕화면
├── 비디오
├── 사진
│   └── 스크린샷, 2020-06-30 10-06-00.png
├── 음악
└── 템플릿

8 directories, 3 files
study@study-VirtualBox:~$ 


디렉터리 구조만 출력

study@study-VirtualBox:~$ tree -d
.
├── 공개
├── 다운로드
├── 문서
├── 바탕화면
├── 비디오
├── 사진
├── 음악
└── 템플릿

8 directories
study@study-VirtualBox:~$ 


파일의 전체 경로 표시

study@study-VirtualBox:~$ tree -f
.
├── ./공개
├── ./다운로드
│   └── ./다운로드/mediawiki-1.34.2.tar.gz
├── ./문서
│   └── ./문서/test.txt
├── ./바탕화면
├── ./비디오
├── ./사진
│   └── ./사진/스크린샷, 2020-06-30 10-06-00.png
├── ./음악
└── ./템플릿

8 directories, 3 files
study@study-VirtualBox:~$ 

구조 표시 수준 지정 출력

study@study-VirtualBox:/opt$ tree -L 2
.
├── VBoxGuestAdditions-6.1.10
│   ├── LICENSE
│   ├── bin
│   ├── init
│   ├── installer
│   ├── other
│   ├── routines.sh
│   ├── sbin
│   ├── src
│   └── uninstall.sh
└── google
    └── chrome

9 directories, 3 files
study@study-VirtualBox:/opt$ 


패턴 지정 구조 출력

study@study-VirtualBox:~$ tree -P *.tar.gz
.
├── 공개
├── 다운로드
│   └── mediawiki-1.34.2.tar.gz
├── 문서
├── 바탕화면
├── 비디오
├── 사진
├── 음악
└── 템플릿

8 directories, 1 file
study@study-VirtualBox:~$ 


지정 패턴 제외 구조 출력

study@study-VirtualBox:~$ tree -I *.tar.gz
.
├── tree.txt
├── 공개
├── 다운로드
├── 문서
│   └── test.txt
├── 바탕화면
├── 비디오
├── 사진
│   └── 스크린샷, 2020-06-30 10-06-00.png
├── 음악
└── 템플릿

8 directories, 3 files
study@study-VirtualBox:~$ 

uid와 gid 정보 표시하여 구조 출력

study@study-VirtualBox:~$ tree -u -g
.
├── [study    study   ]  tree.txt
├── [study    study   ]  공개
├── [study    study   ]  다운로드
│   └── [study    study   ]  mediawiki-1.34.2.tar.gz
├── [study    study   ]  문서
│   └── [root     root    ]  test.txt
├── [study    study   ]  바탕화면
├── [study    study   ]  비디오
├── [study    study   ]  사진
│   └── [study    study   ]  스크린샷, 2020-06-30 10-06-00.png
├── [study    study   ]  음악
└── [study    study   ]  템플릿

8 directories, 4 files
study@study-VirtualBox:~$ 


퍼미션 정보를 표시하여 구조 출력

study@study-VirtualBox:~$ tree -p
.
├── [-rw-rw-r--]  tree.txt
├── [drwxr-xr-x]  공개
├── [drwxr-xr-x]  다운로드
│   └── [-rw-rw-r--]  mediawiki-1.34.2.tar.gz
├── [drwxr-xr-x]  문서
│   └── [-rw-------]  test.txt
├── [drwxr-xr-x]  바탕화면
├── [drwxr-xr-x]  비디오
├── [drwxr-xr-x]  사진
│   └── [-rw-rw-r--]  스크린샷, 2020-06-30 10-06-00.png
├── [drwxr-xr-x]  음악
└── [drwxr-xr-x]  템플릿

8 directories, 4 files
study@study-VirtualBox:~$ 

용량 정보 표시 구조 출력

study@study-VirtualBox:~$ tree -h
.
├── [ 467]  tree.txt
├── [4.0K]  공개
├── [4.0K]  다운로드
│   └── [ 39M]  mediawiki-1.34.2.tar.gz
├── [4.0K]  문서
│   └── [   0]  test.txt
├── [4.0K]  바탕화면
├── [4.0K]  비디오
├── [4.0K]  사진
│   └── [921K]  스크린샷, 2020-06-30 10-06-00.png
├── [4.0K]  음악
└── [4.0K]  템플릿

8 directories, 4 files
study@study-VirtualBox:~$ ]


마지막 수정 날짜 표시 구조 출력

study@study-VirtualBox:~$ tree -D
.
├── [Aug 12 10:18]  tree.txt
├── [Jun 29 13:57]  공개
├── [Aug 12 09:00]  다운로드
│   └── [Jun 25 01:46]  mediawiki-1.34.2.tar.gz
├── [Jun 29 14:53]  문서
│   └── [Jun 29 14:53]  test.txt
├── [Jun 29 13:57]  바탕화면
├── [Jun 29 13:57]  비디오
├── [Aug 12 08:57]  사진
│   └── [Jun 30 10:06]  스크린샷, 2020-06-30 10-06-00.png
├── [Jun 29 13:57]  음악
└── [Jun 29 13:57]  템플릿

8 directories, 4 files
study@study-VirtualBox:~$ 


항목별 속성 표시 구조 출력

study@study-VirtualBox:~$ tree -F
.
├── tree.txt
├── 공개/
├── 다운로드/
│   └── mediawiki-1.34.2.tar.gz
├── 문서/
│   └── test.txt
├── 바탕화면/
├── 비디오/
├── 사진/
│   └── 스크린샷, 2020-06-30 10-06-00.png
├── 음악/
└── 템플릿/

8 directories, 4 files
study@study-VirtualBox:~$ 


마지막 수정 시간 기준 정렬로 구조 출력

study@study-VirtualBox:~$ tree -t
.
├── 공개
├── 바탕화면
├── 비디오
├── 음악
├── 템플릿
├── 문서
│   └── test.txt
├── 사진
│   └── 스크린샷, 2020-06-30 10-06-00.png
├── 다운로드
│   └── mediawiki-1.34.2.tar.gz
└── tree.txt

8 directories, 4 files
study@study-VirtualBox:~$ 


디렉터리 우선 정렬로 구조 출력

study@study-VirtualBox:~$ tree --dirsfirst
.
├── 공개
├── 다운로드
│   └── mediawiki-1.34.2.tar.gz
├── 문서
│   └── test.txt
├── 바탕화면
├── 비디오
├── 사진
│   └── 스크린샷, 2020-06-30 10-06-00.png
├── 음악
├── 템플릿
└── tree.txt

8 directories, 4 files
study@study-VirtualBox:~$ 

이 옵션을 사용하지 않으면 알와같이 파일이 먼저 나와 정렬됩니다.


study@study-VirtualBox:~$ tree
.
├── tree.txt
├── 공개
├── 다운로드
│   └── mediawiki-1.34.2.tar.gz
├── 문서
│   └── test.txt
├── 바탕화면
├── 비디오
├── 사진
│   └── 스크린샷, 2020-06-30 10-06-00.png
├── 음악
└── 템플릿

8 directories, 4 files
study@study-VirtualBox:~$


정렬 기준을 정해 구조 출력

study@study-VirtualBox:~$ tree --sort=mtime
.
├── 공개
├── 바탕화면
├── 비디오
├── 음악
├── 템플릿
├── 문서
│   └── test.txt
├── 사진
│   └── 스크린샷, 2020-06-30 10-06-00.png
├── 다운로드
│   └── mediawiki-1.34.2.tar.gz
└── tree.txt

8 directories, 4 files
study@study-VirtualBox:~$ 


들여쓰기 줄 생략하여 디렉터리 및 파일 표시

tudy@study-VirtualBox:~$ tree -i
.
tree.txt
공개
다운로드
mediawiki-1.34.2.tar.gz
문서
test.txt
바탕화면
비디오
사진
스크린샷, 2020-06-30 10-06-00.png
음악
템플릿

8 directories, 4 files
study@study-VirtualBox:~$ 

구조의 XML 표현 출력

study@study-VirtualBox:~$ tree -X
<!--?xml version="1.0" encoding="UTF-8"?-->
<tree>
  <directory name=".">
    <file name="tree.txt"></file>
    <directory name="공개">
    </directory>
    <directory name="다운로드">
      <file name="mediawiki-1.34.2.tar.gz"></file>
    </directory>
    <directory name="문서">
      <file name="test.txt"></file>
    </directory>
    <directory name="바탕화면">
    </directory>
    <directory name="비디오">
    </directory>
    <directory name="사진">
      <file name="스크린샷, 2020-06-30 10-06-00.png"></file>
    </directory>
    <directory name="음악">
    </directory>
    <directory name="템플릿">
    </directory>
  </directory>
  <report>
    <directories>8</directories>
    <files>4</files>
  </report>
</tree>
study@study-VirtualBox:~$


주의해야 할 옵션 명령

$ tree -n -a -o 파일명

-a 옵션

디렉터리와 파일의 수가 굉장히 많은 경우 터미널에서 바로 사용해서는 안됩니다. 해당 터미널 세션에서 오랫동안 아무 일도 못하게 됩니다. 따라서 디렉터리 구조를 파일에 저장하는 옵션을 사용하는 것을 권장합니다.


-o 파일명 옵션

디렉터리 구조를 파일에 저장할 때 색상 정보도 같이 저장됩니다. 그런데 이 색상 정보라는 것이 터미널에서는 올바르게 해석되어 터미널 내에서 바르게 표현되지만 파일 정보로 저장하게 되면 아래와 같이 특수 기호와 숫자들이 포함되어 가독성을 현격하게 떨어뜨립니다.

[01;34m.[00m
├── tree.txt
├── [01;34m공개[00m
├── [01;34m다운로드[00m
│   └── [01;31mmediawiki-1.34.2.tar.gz[00m
├── [01;34m문서[00m
│   └── test.txt
├── [01;34m바탕화면[00m
├── [01;34m비디오[00m
├── [01;34m사진[00m
│   └── [01;35m스크린샷, 2020-06-30 10-06-00.png[00m
├── [01;34m음악[00m
└── [01;34m템플릿[00m

8 directories, 4 files

따라서 파일에 저장할 땐 -n 옵션을 추가하여 색상 정보를 제거한 채 저장해주어야 합니다.




tree 패키지 옵션 목록

### tree 패키지 사용법 ###

구문:   tree [-acdfghilnpqrstuvxACDFJQNSUX] [-H baseHREF] [-T title ]
	[-L level [-R]] [-P pattern] [-I pattern] [-o filename] [--version]
	[--help] [--inodes] [--device] [--noreport] [--nolinks] [--dirsfirst]
	[--charset charset] [--filelimit[=]#] [--si] [--timefmt[=]]
	[--sort[=]] [--matchdirs] [--ignore-case] [--fromfile] [--]
	[]

  ------- 나열 옵션 -------
  -a            모든 파일이 나열됩니다.
  -d            디렉토리만 나열합니다.
  -l            디렉토리와 같은 심볼릭 링크를 따릅니다.
  -f            각 파일의 전체 경로 접두어를 출력합니다.
  -x            현재 파일 시스템에만 머무릅니다.
  -L level      지정한 수준의 디렉터리 깊이만큼만 내려갑니다.
  -R            최대 디렉터리 수준에 도달하면 트리를 되돌아옵니다.
  -P pattern    주어진 패턴과 일치하는 파일만 나열합니다.
  -I pattern    주어진 패턴과 일치하는 파일을 나열하지 않습니다.
  --ignore-case 패턴이 일치하면 대소문자를 무시합니다.
  --matchdirs   -P 패턴 일치에 디렉토리 이름을 포함합니다.
  --noreport    트리 목록의 끝에서 파일 / 디렉토리 수를 끕니다.
  --charset X   터미널/HTML 및 들여 쓰기 줄 출력에 charset X를 사용합니다.
  --filelimit # 파일이 #개 이상 포함된 디렉터리들을 내려 가지 않습니다.
  --timefmt     형식에 따라 시간을 출력하고 형식화합니다.
  -o filename   stdout 대신 파일로 출력합니다.

  ------- 파일 옵션 -------
  -q            출력할 수 없는 문자를 '?'로 출력합니다.
  -N            출력할 수 없는 문자를 있는 그대로 출력합니다.
  -Q            큰 따옴표로 파일 이름을 인용합니다.
  -p            각 파일에 대한 퍼미션 정보를 출력합니다.
  -u            파일 소유자 또는 UID 번호를 표시합니다.
  -g            파일 그룹 소유자 또는 GID 번호를 표시합니다.
  -s            각 파일의 크기를 바이트 단위로 출력합니다.
  -h            사람이 읽을 수있는 방법으로 크기를 출력합니다.
  --si          -h와 비슷하지만 SI 단위 (1000 단위)를 사용합니다.
  -D            마지막 수정 날짜 또는 (-c) 상태 변경을 인쇄합니다.
  -F            ls -F처럼 '/', '=', '*', '@', '|' 또는 '>'를 적용합니다.
  --inodes      각 파일의 inode 번호를 출력합니다.
  --device      각 파일이 속한 장치 ID 번호를 출력합니다.

  ------- 정렬 옵션 -------
  -v            버전별로 파일을 영숫자 순으로 정렬합니다.
  -t            마지막 수정 시간을 기준으로 파일을 정렬합니다.
  -c            마지막 상태 변경 시간을 기준으로 파일을 정렬합니다.
  -U            파일을 정렬되지 않은 상태로 둡니다.
  -r            정렬 순서를 반대로합니다.
  --dirsfirst   파일 앞에 디렉토리를 나열합니다 (-U 비활성화).
  --sort X      정렬 선택 : name, version, size, mtime, ctime.

  ------- 그래픽 옵션 -------
  -i            들여 쓰기 줄을 인쇄하지 않습니다.
  -A            ANSI 라인 그래픽 들여 쓰기 줄을 출력합니다.
  -S            CP437 (콘솔) 그래픽 들여 쓰기 라인으로 출력합니다.
  -n            항상 색상화를 해제합니다 (-C overrides).
  -C            항상 채색을 켭니다.

  ------- XML/HTML/JSON 옵션 -------
  -X            트리의 XML 표현을 출력합니다.
  -J            트리의 JSON 표현을 출력합니다.
  -H baseHREF   baseHREF를 최상위 디렉토리로 사용하여 HTML 형식을 인쇄합니다.
  -T string     기본 HTML 제목과 H1 헤더를 문자열로 바꿉니다.
  --nolinks     HTML 출력에서 ​​하이퍼 링크를 끕니다.

  ------- 입력 옵션 -------
  --fromfile    파일 (.=stdin)에서 경로를 읽습니다.

  ------- 기타 옵션 -------
  --version     버전을 출력하고 종료합니다.
  --help        사용법과 이 도움말 메시지를 출력하고 종료합니다.
  --            옵션 처리 종료자.
study@study-VirtualBox:~$