exa: exa ls replacement không còn bảo trì
exa đã ngừng phát triển theo đúng nghĩa: không còn ai merge PR vào ogham/exa nữa, và ngay dòng đầu README cũng nói vậy, trỏ thẳng sang bản fork eza. Phần còn lại vẫn chạy tốt như một công cụ thay thế ls, có màu sắc, trạng thái Git, và chế độ xem cây, nhưng đó là code đã đóng băng trong khi eza vẫn tiếp tục vá lỗi. Chỉ nên cài exa nếu một script đã phụ thuộc sẵn vào đúng binary đó; dùng hàng ngày thì eza là cùng công cụ, trừ rủi ro bị bỏ rơi.
exa là gì?
exa là một binary Rust duy nhất thay thế lệnh `ls` trên Unix, thêm màu sắc, icon, và khả năng nhận biết symlink, extended attribute, và trạng thái Git mà `ls` gốc không hiển thị. Nó đọc cùng thư mục như `ls` nhưng định dạng theo dạng lưới mặc định, hoặc dạng một dòng, dạng dài, hay dạng cây khi được yêu cầu. Điều cần biết trước: exa đã ngừng nhận cập nhật, và chính README của nó trỏ người dùng sang bản fork eza nếu cần dùng lâu dài.
Key features: colors, Git status, and tree views
- ✓Chế độ xem dài nhận biết Git: `--git` kết hợp với `-l` đánh dấu từng file là đã sửa, mới, hay bị ignore ngay từ working tree, điều mà `ls` không có khái niệm.
- ✓Đệ quy dạng cây tích hợp sẵn: `-T`/`--tree` duyệt qua các thư mục con và in ra dạng cây mà không cần pipe qua `find` hay cài thêm binary tree riêng.
- ✓Extended attribute: `-@`/`--extended` liệt kê xattr của từng file cùng kích thước, hữu ích khi kiểm tra thứ như cờ quarantine trên macOS.
- ✓Kích thước theo thang màu: `--color-scale` tô màu kích thước file để file lớn nổi bật trong danh sách dài thay vì chỉ là con số thuần.
- ✓Chỉ báo loại file và icon: `-F`/`--classify` thêm ký hiệu loại file, còn `--icons` thêm icon loại file cho terminal hỗ trợ.
- ✓Sắp xếp và lọc linh hoạt: `--sort`, `--group-directories-first`, `--git-ignore`, và `--ignore-glob` theo glob kiểm soát những gì hiển thị và theo thứ tự nào mà không cần thêm xử lý shell.
Cài đặt exa trên hệ thống của bạn
exa có sẵn trên hầu hết trình quản lý gói Unix: `apt install exa` trên Debian và Ubuntu 20.10 trở lên, `pacman -S exa` trên Arch, `dnf install exa` trên Fedora, `brew install exa` trên macOS qua Homebrew, `port install exa` qua MacPorts, `apk add exa` trên Alpine, `zypper install exa` trên openSUSE, `emerge sys-apps/exa` trên Gentoo, `xbps-install -S exa` trên Void, `nix-env -i exa` trên NixOS, và `pkg install exa` trên Termux/Android. Nếu đã có sẵn Rust toolchain, `cargo install exa` sẽ build từ crates.io và đặt binary vào `$HOME/.cargo`; thêm `--no-default-features` để bỏ qua dependency libgit2 nếu không cần trạng thái Git. Cài thủ công thì tải binary đã build sẵn từ trang GitHub releases rồi copy vào một thư mục nằm trong `$PATH`, ví dụ `/usr/local/bin`.
Sử dụng các tùy chọn dòng lệnh của exa
Chế độ xem mặc định là dạng lưới có màu (`-G`); chuyển sang mỗi dòng một entry bằng `-1`, hoặc thêm `-l` để có chế độ xem dài với quyền truy cập, kích thước, và timestamp. Thêm `-T` để đệ quy dạng cây, hoặc `-R` để đệ quy mà không theo định dạng cây, và `-L 2` để giới hạn độ sâu đệ quy. `-a` hiển thị file ẩn (dùng hai lần để hiện cả `.` và `..`), còn `--git-ignore` bỏ qua những gì khớp với `.gitignore`. Trong `-l`, `--git` thêm cột trạng thái Git, `-@` hiển thị extended attribute, và `-h` thêm dòng header; `--time=modified` (hoặc `changed`/`accessed`/`created`) chọn trường timestamp nào hiển thị ở cột thời gian, còn `--sort=size` hoặc `--sort=type` đổi thứ tự sắp xếp.
Điểm mạnh
- ✓Một binary duy nhất, không cần duy trì shell function hay alias trên nhiều máy.
- ✓Trạng thái Git tích hợp sẵn trong chế độ xem dài, tiết kiệm một lệnh `git status` riêng khi kiểm tra thư mục nhanh.
- ✓Được đóng gói sẵn trên hầu hết repo của các distro lớn và Homebrew, nên cài đặt chỉ mất một dòng lệnh trên đa số hệ thống.
- ✓Màu mặc định hợp lý ngay từ đầu, không cần cấu hình `LS_COLORS`.
Hạn chế của exa
- △Dự án đã ngừng bảo trì: README nói rằng repo còn không thể archive vì người duy nhất có quyền làm việc đó hiện không liên lạc được, nên issue và PR mở ra không ai xử lý.
- △Build với hỗ trợ Git cần libgit2, và người dùng target musl cần thêm feature flag `vendored-openssl` mới chạy được — một bước build mà một dự án còn bảo trì lẽ ra đã làm mượt hơn.
- △Mọi bản build đóng gói theo distro đều đóng băng ở phiên bản release cuối cùng; không còn đường nào để nhận fix mới ngoài việc chuyển sang eza.
- △Việc build trang man phụ thuộc vào pandoc, một công cụ ngoài mà phần lớn người dùng chưa chắc đã cài sẵn chỉ để đọc `man exa`.
Các lựa chọn thay thế cho exa
Câu hỏi thường gặp về exa
exa không còn được bảo trì — chính README của nó nói vậy và trỏ sang eza, một bản fork cộng đồng vẫn tiếp tục thêm tính năng và fix lỗi mà exa đã ngừng nhận. Với thiết lập mới, eza là lựa chọn an toàn hơn; exa vẫn chạy được, nhưng bug và thiếu sót phát hiện bây giờ sẽ không được vá trong repo này.
Trên Ubuntu 20.10 trở lên, chạy `sudo apt install exa`. Trên macOS với Homebrew, chạy `brew install exa`. Nếu đã cài Rust toolchain, `cargo install exa` sẽ build từ crates.io; thêm `--no-default-features` để bỏ qua dependency hỗ trợ Git nếu không cần.
exa mặc định có output màu, bố cục dạng lưới thay vì cột thuần, trạng thái Git trong chế độ xem dài, đệ quy dạng cây với `-T`, liệt kê extended attribute, và thang màu cho kích thước file — những thứ `ls` gốc không có nếu không thêm flag hoặc script wrapper.
Có, exa hiển thị trạng thái Git: dùng `--git` cùng với `-l` (chế độ xem dài) sẽ thêm một cột đánh dấu từng file đã tracked là đã sửa, mới, hay bị ignore, dựa trên working tree hiện tại, ngay trong danh sách file.
Chế độ xem cây (`-T`) và flag `--icons` của exa hoạt động ở bất kỳ đâu binary exa chạy được, kể cả Linux, macOS, và Android/Termux — icon hiển thị đúng hay không chỉ phụ thuộc vào font của terminal có hỗ trợ glyph mà exa xuất ra hay không.
Build exa từ source cần Rust phiên bản 1.66.1 trở lên, cài qua rustup, cộng với libgit2 để hỗ trợ trạng thái Git (hoặc build với `--no-default-features` để bỏ qua dependency đó).
Vấn đề mà exa giải quyết
Lệnh `ls` gốc trên Linux và macOS chỉ hiển thị tên file, và với `-l` thì thêm quyền truy cập và kích thước — không có thông tin file nào đã thay đổi trong branch Git hiện tại, không icon, và không có thang màu kích thước để phân biệt một file config 2KB với một file binary 200MB chỉ bằng mắt. Ai làm việc với terminal cả ngày cũng phải nhớ tổ hợp flag `ls -la` hoặc dùng một wrapper; exa đóng gói sẵn hành vi wrapper phổ biến — màu sắc, nhận biết Git, đệ quy dạng cây — vào một binary duy nhất thay vì alias và function trong shell. Đó là khoảng trống mà exa lấp đầy.
Các trường hợp sử dụng tốt nhất
- •Xem nhanh working tree Git: `exa -l --git` hiển thị file đã sửa và chưa được track mà không cần chạy `git status` riêng.
- •Duyệt cấu trúc thư mục nhanh: `exa -T -L 2` cho ra cây hai cấp thay vì pipe `find` qua `sed` hoặc cài thêm binary tree riêng.
- •Phát hiện file lớn bằng mắt: `exa -l --color-scale` tô màu kích thước để một file log hay binary quá khổ nổi bật trong danh sách dài.
- •Kiểm tra extended attribute trên macOS: `exa -l -@` liệt kê xattr như cờ quarantine ngay trong danh sách file.
Ai nên dùng — và ai nên bỏ qua
Ai đang thiết lập terminal mới hôm nay nên bắt đầu với eza, không phải exa — cùng lệnh, cùng flag, nhưng còn được vá lỗi. exa vẫn hợp lý nếu bạn đang duy trì một dotfiles repo cũ hoặc một script đã sẵn gọi tới nó và việc cài lại chưa đáng công ngay lúc này, hoặc nếu distro bạn dùng chỉ đóng gói sẵn `exa` và bạn chỉ cần danh sách file có màu, nhận biết Git mà không muốn thêm gói mới. Bỏ qua nó nếu bạn muốn icon và tính năng được thêm sau thời điểm fork, hoặc nếu bạn quan tâm việc có người trả lời issue.
Repo liên quan
Muốn nghe thêm một ý kiến về exa?
Hỏi một AI đọc được trang này — một cú bấm là có ngay nhận định về exa.
