catsridingCATSRIDING|OCEANWAVES
Developer Tools

macOS 터미널에 eza 유틸리티 설치하여 ls 명령어 대체하기

jynn@catsriding.com
Dec 17, 2023
Published byJynn
999
macOS 터미널에 eza 유틸리티 설치하여 ls 명령어 대체하기

Install eza Command on macOS

eza 유틸리는exa의 후속 버전으로 Unix와 Linux 운영 체제와 함께 제공되는 커맨드라인 프로그램인 ls 명령어의 현대적인 대체품입니다.

eza는 기본적으로 정보를 색상으로 표시하여 여러 종류의 파일을 구별하는 데 도움을 줍니다. 예를 들어, 파일의 소유자인지, 소유 그룹에 속해 있는지 등을 판별할 수 있습니다. 또한 원래 ls 명령어에는 없는 기능, 예를 들어 디렉토리의 Git 상태를 보는 것이나 디렉토리를 통해 파일을 재귀적으로 나열하는 것과 같은 추가 기능이 있습니다.

eza vs exa

exa 유틸리티는 2021년 4월 13일 이후로 더이상 유지 관리되지 않습니다. eza는 이 exa의 후속 버전으로, 기존에 확인된 버그를 수정하고 기능이 추가되었습니다.

  • exa 2021에서 도입된 '그리드 버그' 수정
  • 하이퍼링크 지원
  • 마운트 포인트 자세히 보기
  • Selinux 컨텍스트 출력
  • Git 리포지토리 상태 출력
  • 사람이 읽기 쉬운 날짜 표기
  • 여러 보안 수정
  • 밝은 터미널 색상 지원
  • 그 외 많은 작은 버그 수정 및 변경

Using eza Command

eza 유틸리티를 macOS 설치하고, 다양한 옵션들에 대해 살펴봅니다.

eza Command Installation

macOS에서는 Homebrew를 사용하여 eza 유틸리티를 설치할 수 있습니다.

$ brew install eza

기본 사용 방법은 ls 명령어와 동일합니다.

$ eza
build  build.gradle  gradle  gradlew  gradlew.bat  Icon\r  logs  README.md  settings.gradle  src

여기에 eza의 다양한 옵션을 활용하면, 기존의 ls보다 더 풍부하고 상세한 파일 정보를 출력해 보여주는 새로운 경험을 할 수 있습니다.

install-eza-command-on-macos_00.png

참고로, Nerd Fonts 패치가 적용된 폰트를 사용해야 아이콘들이 올바르게 표시됩니다.

eza Command Options

eza Command에서 사용할 수 있는 다양한 옵션입니다.

Display Options
  • -1, --oneline: 항목을 한 줄에 하나씩 표시합니다.
  • -G, --grid: 항목을 그리드로 표시합니다(기본값).
  • -l, --long: 확장된 상세 정보와 속성을 표시합니다.
  • -R, --recurse: 디렉토리에 재귀적으로 들어갑니다.
  • -T, --tree: 트리 형식으로 디렉토리에 재귀적으로 들어갑니다.
  • -x, --across: 그리드를 아래로, 아닌 across으로 정렬합니다.
  • -F, --classify: 파일 이름 옆에 타입 지시자를 표시합니다.
  • --colo[u]r=(when): 터미널 색상 사용 시점 (항상, auto, never)
  • --colo[u]r-scale=(field): 각 필드의 수준을 확연하게 표시(all, age, size)
  • --color-scale-mode=(mode): --color-scale에서 gradient 또는 fixed 색상을 사용합니다. 유효한 옵션은 fixed 또는 gradient입니다.
  • --icons=(when): 아이콘을 표시하는 시점(항상, auto, never)
  • --hyperlink: 항목을 하이퍼링크로 표시합니다.
  • -w, --width=(columns): 컬럼 단위로 화면 폭을 설정합니다.
Filtering options
  • -a, --all: 숨김 파일과 'dot' 파일을 보여줍니다.
  • -d, --list-dirs: 디렉토리를 일반 파일처럼 나열합니다.
  • -L, --level=(depth): 재귀의 깊이를 제한합니다.
  • -r, --reverse: 정렬 순서를 역순으로 합니다.
  • -s, --sort=(field): 어떤 필드를 기준으로 정렬할지를 설정합니다.
  • --group-directories-first: 다른 파일 전에 디렉토리를 나열합니다.
  • -D, --only-dirs: 디렉토리만 나열합니다.
  • -f, --only-files: 파일만 나열합니다.
  • --git-ignore: .gitignore에 언급된 파일을 무시합니다.
  • -I, --ignore-glob=(globs): 무시할 파일의 글로브 패턴(|로 구분)을 설정합니다.
  • --all 옵션을 두 번 전달하면 ... 디렉토리를 보여줍니다.
Long view options

아래 옵션은 -l, --long으로 실행할 때 사용가능합니다:

  • -b, --binary: 파일 크기를 이진수 접두사로 나열합니다.
  • -B, --bytes: 파일 크기를 접두사 없는 바이트로 나열합니다.
  • -g, --group: 각 파일의 그룹을 나열합니다.
  • -h, --header: 각 컬럼에 헤더 행을 추가합니다.
  • -H, --links: 각 파일의 하드 링크 갯수를 나열합니다.
  • -i, --inode: 각 파일의 inode 번호를 나열합니다.
  • -m, --modified: 수정된 타임스탬프 필드를 사용합니다.
  • -M, --mounts: 마운트 상세 내용을 보여줍니다 (Linux and MacOS만 가능).
  • -S, --blocksize: 할당된 파일 시스템 블록의 크기를 표시합니다.
  • -t, --time=(field): 사용할 타임스탬프 필드를 설정합니다.
  • -u, --accessed: 접근된 타임스탬프 필드를 사용합니다.
  • -U, --created: 생성된 타임스탬프 필드를 사용합니다.
  • -X, --dereference: 파일 정보에 대해 심볼릭 링크를 참조합니다.
  • -Z, --context: 각 파일의 보안 컨텍스트를 나열합니다.
  • -@, --extended: 각 파일의 확장 속성과 크기를 나열합니다.
  • --changed: 변경된 타임스탬프 필드를 사용합니다.
  • --git: 추적되거나 무시된 파일의 Git 상태를 나열합니다.
  • --git-repos: 디렉토리가 Git으로 추적되고 있는지를 나열합니다.
  • --git-repos-no-status: 디렉토리가 Git 저장소인지만 나열합니다 (빠름).
  • --no-git: Git 상태를 표시 않습니다 (항상 --git, --git-repos, --git-repos-no-status을 무시).
  • --time-style: 타임스탬프 형식화 방식. 유효한 타임스탬프 스타일은 default, iso, long-iso, full-iso, relative 또는 custom style+<FORMAT> 입니다(E.g., '+%Y-%m-%d %H:%M' => ‘2023-09-30 13:00’. 자세한 것은 eza(1) 매뉴얼 페이지와 chrono 도큐먼테이션을 참조.)
  • --total-size: 디렉토리 size를 재귀적으로 표시합니다.
  • --no-permissions: 퍼미션 필드를 표시하지 않습니다.
  • -o, --octal-permissions: 각 파일의 퍼미션을 8진수 형식으로 나열합니다.
  • --no-filesize: 파일 크기 필드를 표시하지 않습니다.
  • --no-user: 사용자 필드를 표시하지 않습니다.
  • --no-time: 시간 필드를 표시하지 않습니다.
  • --stdin: 파일 이름을 stdin에서 읽어옵니다.

Replace ls command with eza

eza 명령어는 강력한 기능을 가지고 있지만, ls 명령어만큼 타이핑이 간편하지는 않습니다. 그러나, 자주 사용하는 옵션을 쉘 별칭(alias)으로 설정하면 이 문제를 해결하고 더욱 편리하게 eza를 이용할 수 있습니다.

macOS에서는 zsh 쉘의 설정 파일인 .zshrc를 수정하여 별칭을 설정할 수 있습니다. 이 파일은 텍스트 에디터로 쉽게 열 수 있습니다. 아래 명령어를 터미널에 입력하면 .zshrc 파일이 Vim 에디터에서 열립니다.

$ vim ~/.zshrc

터미널에서 ls를 입력하면 eza를 실행하도록 ls의 별칭을 eza로 설정합니다. 비슷하게, lllt 별칭도 만들고 eza 명령어의 일부 옵션과 함께 연결합니다.

.zshrc
alias ls="eza"
alias ll="eza -alhF --icons"
alias lt="eza -alhFT --icons"

변경사항을 저장하고 터미널 창을 닫은 후 재오픈하면, 이제 ls, ll, lt를 터미널에서 입력했을 때 별칭에 대응하는 eza 명령이 실행됩니다.

따라서 ls를 입력하면 eza가 실행되고, ll을 입력하면 eza -alhF --icons가, 마찬가지로 lt를 입력하면 eza -alhFT --icons가 실행됩니다.

$ lt
eza -alhFT --icons

Permissions Size User       Date Modified Name
drwxr-xr-x@    - catsriding 14 Feb 02:03   ./
.rw-r--r--@ 8.2k catsriding 29 Jan 02:37  ├──  .DS_Store
drwxr-xr-x     - catsriding 16 Feb 01:33  ├──  .git/
drwxr-xr-x     - catsriding 23 Jan 22:04  ├──  .github/
.rw-r--r--   336 catsriding 23 Jan 22:04  │  └──  pull_request_template.md
.rw-r--r--@  482 catsriding 26 Nov  2023  ├──  .gitignore
drwxr-xr-x@    - catsriding 12 Feb 20:17  ├──  build/
.rw-r--r--  3.0k catsriding 14 Feb 02:03  ├──  build.gradle
.rw-r--r--    48 catsriding 29 Oct  2023  ├──  README.md
drwxr-xr-x     - catsriding 14 Feb 02:03  └──  src/
.rw-r--r--@ 6.1k catsriding 29 Jan 00:45     ├──  .DS_Store
drwxr-xr-x     - catsriding  2 Dec  2023     ├──  main/
drwxr-xr-x     - catsriding 12 Feb 15:24     │  ├──  java/
drwxr-xr-x     - catsriding 12 Feb 15:23     │  │  └──  dev/
drwxr-xr-x     - catsriding 14 Feb 02:03     │  │     └──  catsriding/
drwxr-xr-x     - catsriding 14 Feb 02:03     │  │        └──  waves/
.rw-r--r--   422 catsriding 14 Feb 02:03     │  │           └──  Application.java
drwxr-xr-x     - catsriding 14 Feb 02:09     │  └──  resources/
.rw-r--r--  4.1k catsriding 14 Feb 02:09     │     ├──  application.yml
.rw-r--r--@ 1.7k catsriding 26 Nov  2023     │     └── 󰗀 logback-prod.xml

별칭을 통해 자주 사용하는 eza 명령어를 훨씬 간편하게 이용할 수 있게 되었습니다. 이렇게 설정한 별칭은 쉘을 종료하고 다시 시작해도 유지되고, 덕분에 타이핑을 줄이고 효율성을 높일 수 있습니다.


  • macOS
  • Linux
  • Toolbox