Eza: chương trình thay thế `ls` hiện đại và được duy trì
(github.com/eza-community)- eza là một công cụ CLI hiện đại thay thế lệnh liệt kê tệp
lstrên Unix/Linux, hướng đến việc cung cấp nhiều tính năng hơn và mặc định tốt hơn - Công cụ này phân biệt màu sắc theo loại tệp và metadata, nhận diện liên kết tượng trưng, thuộc tính mở rộng và thông tin Git, đồng thời được cung cấp dưới dạng một binary duy nhất nhỏ gọn và nhanh
- So với
exa, nó bổ sung bản sửa lỗi Grid Bug, hyperlink, thông tin chi tiết mount point, ngữ cảnh SELinux, trạng thái kho Git, ngày tương đối dễ đọc với con người, bản vá bảo mật, màu terminalbright, và cấu hìnhtheme.yml - Có thể cài đặt trên Windows, macOS và Linux; trong môi trường Nix flake, có thể build rồi chạy bằng
nix run github:eza-community/eza - Hệ thống tùy chọn của nó không hoàn toàn giống
ls, và có thể tinh chỉnh chi tiết cách hiển thị danh sách tệp thông qua các tùy chọn hiển thị, lọc, danh sách dài và cấu hình theme
Trải nghiệm thay thế ls mà eza mang lại
- eza là một lựa chọn thay thế hiện đại cho lệnh liệt kê tệp lâu đời
lsđi kèm với các hệ điều hành Unix và Linux - Mục tiêu cơ bản là cung cấp một phiên bản nhiều tính năng hơn và thân thiện với người dùng hơn so với
ls - Phân biệt màu theo loại tệp và metadata
- Nhận diện symbolic link, thuộc tính mở rộng và thông tin Git
- Nhỏ gọn, nhanh và được cung cấp dưới dạng một binary duy nhất
Các tính năng bổ sung so với exa
- eza bao gồm nhiều tính năng mà
exakhông có- Sửa “The Grid Bug” được đưa vào từ
exa2021 - Hỗ trợ hyperlink
- Xuất thông tin chi tiết mount point
- Xuất ngữ cảnh SELinux
- Xuất trạng thái kho Git
- Ngày tương đối dễ đọc với con người
- Nhiều bản vá bảo mật
- Hỗ trợ màu terminal
bright - Các bản sửa lỗi nhỏ và thay đổi khác
- Tệp cấu hình
theme.ymlđể tùy biến màu sắc và biểu tượng
- Sửa “The Grid Bug” được đưa vào từ
Chạy và cài đặt
- Trong môi trường hỗ trợ Nix flake, có thể thử eza bằng lệnh sau
nix run github:eza-community/eza
- Nix sẽ build eza rồi chạy nó
- Để truyền đối số, thêm tùy chọn sau
--như saunix run github:eza-community/eza -- -ol
- eza có thể dùng trên Windows, macOS, Linux
- Cách cài đặt theo từng nền tảng và bản phân phối có trong INSTALL.md
Cấu trúc tùy chọn dòng lệnh
- Các tùy chọn của eza gần giống
ls, nhưng không hoàn toàn giống -
Tùy chọn hiển thị
-1,--oneline: hiển thị một mục trên mỗi dòng-G,--grid: hiển thị các mục theo dạng lưới và đây là mặc định-l,--long: hiển thị thông tin chi tiết mở rộng và thuộc tính-R,--recurse: duyệt đệ quy thư mục-T,--tree: hiển thị đệ quy thư mục theo dạng cây-F,--classify=(when): xuất chỉ dấu loại bên cạnh tên tệp--colour=(when),--color=(when): chỉ định khi nào dùng màu terminal--icons=(when): chỉ định khi nào hiển thị biểu tượng--hyperlink=(when): chỉ định khi nào hiển thị mục dưới dạng hyperlink--absolute=(mode): chỉ định cách hiển thị đường dẫn tuyệt đối của mục
-
Tùy chọn lọc
-a,--all: hiển thị tệp ẩn và dot file-d,--treat-dirs-as-files: liệt kê thư mục như tệp thông thường-L,--level=(depth): giới hạn độ sâu đệ quy-s,--sort=(field): chỉ định trường sắp xếp--group-directories-first: hiển thị thư mục trước--group-directories-last: hiển thị thư mục sau-D,--only-dirs: chỉ hiển thị thư mục-f,--only-files: chỉ hiển thị tệp--git-ignore: bỏ qua các tệp có trong.gitignore-I,--ignore-glob=(globs): bỏ qua các tệp khớp mẫu glob phân tách bằng dấu|- Truyền
--allhai lần sẽ hiển thị cả thư mục.và..
Danh sách dài và thông tin liên quan đến Git
- Có thể dùng các tùy chọn danh sách dài khi sử dụng
--longhoặc-l - Cung cấp các tùy chọn liên quan đến kích thước tệp và quyền
-b,--binary: hiển thị kích thước tệp bằng tiền tố nhị phân-B,--bytes: hiển thị kích thước tệp theo byte không dùng tiền tố-o,--octal-permissions: hiển thị quyền ở dạng bát phân--no-permissions,--no-filesize,--no-user,--no-time: bỏ hiển thị từng trường tương ứng
- Cung cấp các tùy chọn liên quan đến hệ thống tệp và metadata
-H,--links: hiển thị số lượng hard link-i,--inode: hiển thị số inode-M,--mounts: hiển thị chi tiết mount, chỉ dùng trên Linux và macOS-Z,--context: hiển thị ngữ cảnh bảo mật-@,--extended: hiển thị thuộc tính mở rộng và kích thước--total-size: hiển thị kích thước thư mục đệ quy
- Cũng hỗ trợ đầu ra liên quan đến Git
--git: hiển thị trạng thái Git của từng tệp được theo dõi hoặc bị bỏ qua--git-repos: hiển thị trạng thái Git của từng thư mục được theo dõi--git-repos-no-status: chỉ hiển thị thư mục có phải là kho Git hay không và nhanh hơn--no-git: luôn bỏ qua--git,--git-repos,--git-repos-no-statusvà chặn xuất trạng thái Git
- Định dạng thời gian hỗ trợ
default,iso,long-iso,full-iso,relative, hoặc định dạng tùy chỉnh dạng+<FORMAT>- Ví dụ:
+%Y-%m-%d %H:%Msẽ xuất theo định dạng2023-09-30 13:00 - Chuỗi định dạng chi tiết có thể tham khảo trong trang hướng dẫn
eza(1)và tài liệu chrono
- Ví dụ:
- Có thể xem trang hướng dẫn trong thư mục man của kho lưu trữ, và từ phiên bản
[0.18.13] - 2024-04-25cũng có thể dùngman ezangay trong terminal
Tùy biến theme
- eza gần đây đã bổ sung hỗ trợ tệp
theme.yml - Trong
theme.yml, có thể chỉ định các tùy chọn theme hiện có vốn dùng được qua biến môi trườngLS_COLORSvàEXA_COLORS - Công cụ cũng cung cấp tùy chọn chỉ định biểu tượng khác nhau theo từng loại tệp và phần mở rộng
- Nếu các biến môi trường cũ đã được thiết lập, chúng vẫn tiếp tục hoạt động để đảm bảo tương thích ngược và được ưu tiên cao hơn
- Có thể xem các theme dựng sẵn trong kho chính thức eza-themes hoặc tự đóng góp trực tiếp
- Tệp theme mẫu nằm tại
docs/theme.yml - Có thể đặt tệp theme trong thư mục được chỉ định bởi biến môi trường
EZA_CONFIG_DIR, hoặc mặc định eza sẽ tìm trong$XDG_CONFIG_HOME/eza - Xem thêm chi tiết tại eza_colors-explanation.5.md và docs/theme.yml
Đóng góp
- Để đóng góp cho eza, cần tuân theo code of conduct
- Thông tin tham gia phát triển thực tế có trong CONTRIBUTING.md
1 bình luận
Ý kiến trên Hacker News
Trong danh sách thư mục, ngày tháng dễ đọc với con người đặc biệt gây khó chịu
Khi tôi đang tìm thứ đã sao chép vào thư mục khoảng 11 giờ sáng hôm qua mà tất cả đều hiện “1 day ago” thì chẳng giúp ích gì. Tôi cần ngày và giờ; các diễn đàn như HN cũng vậy, chỉ cần hiển thị ngày/giờ chính xác trước, rồi nếu cần thì kèm thêm “7 hours ago”
Tôi không hiểu vì sao lại cố ý bớt thông tin đi, và tự hỏi liệu đây có phải hệ quả của các luồng như cuộn vô hạn hay không
Khi viết HTML, tôi luôn cố dùng nó
(https://developer.mozilla.org/en-US/docs/Web/HTML/Element/ti...)
Ngay cả khi nhớ một ngày cụ thể là ngày sau sinh nhật bạn mình và muốn tìm một mục nào đó, nếu hiển thị chỉ là “three months ago” thì phải lục qua dữ liệu của cả tháng
Cứ cung cấp thời gian chi tiết trước, rồi nếu muốn thì kèm thêm hiển thị “mấy ngày trước” là được
Cũng có
lsd, nhưng tôi vẫn thích eza hơnCho những ai quan tâm, đây là các công cụ dòng lệnh hiện đại mà gần đây tôi dùng thay cho công cụ cũ:
batlàcatcó tô sáng cú pháp,difftasticlàdifftốt hơn,gdulàncducho SSD,zoxidelàcdhiện đại,fdlà phương án thay thếfind,rglàripgrep,fzflà công cụ tìm kiếm mờ,jlesslà trình xem JSON có thể gập bằng chuột,dradùng để tải/cài đặt release asset,lazygitlà Git TUI,lazydockerlà Docker TUI,yazilà trình quản lý tệp có xem trước hình ảnh,zellijlàtmux/screentốt hơn,starshiplà công cụ cấu hình prompt dùng được trên nhiều shelltasklà phương án thay thế Makefile,hyperfinelà công cụ benchmark,vegetalà công cụ kiểm thử tải,sdlàsedtốt hơn và trực quan hơnCũng có bộ ba JSON:
jqlà bộ xử lý JSON nổi tiếng,jcchuyển đầu ra của nhiều công cụ CLI sang JSON,grongiúpgrepJSON dễ hơnfdvàrgmặc định bỏ qua các mục nằm trong.gitignore. Nếu nghĩ chúng chỉ là bản thay thế đơn giản chofindthì có thể sẽ bất ngờ. Thảo luận liên quan ở [0]Khi giới thiệu những công cụ này nên nói rõ điểm đó. Nếu không đọc tài liệu thì rất dễ bỏ lỡ. Cá nhân tôi mong các công cụ kiểu thay thế coreutils này giữ mặc định giống công cụ gốc hơn. Nếu quảng bá là “phương án thay thế đơn giản, nhanh và thân thiện với người dùng cho find” thì nên tôn trọng mặc định gốc để giảm bất ngờ cho người mới. Vì alias luôn tồn tại, tôi nghĩ đặt
alias fd='fd --ignore'trong~/.${SHELL##*/}rctốt hơn làalias fd='fd --no-ignore'Mẹo nhỏ: nếu muốn dùng phiên bản không áp dụng alias thì dùng
\command. Ví dụ tôi dùngalias grep='grep --color=always --no-messages --binary-files=without-match, nhưng tùy chọn màu có thể thay đổi biểu diễn ký tự và gây lỗi khi pipe vàocurl. Không phải pipe nào cũng vậy, nhưng lần đầu gặp sẽ khá bối rối. Có thể kiểm tra bằngecho "Hello world" | \grep --color=always "Hello" | hexdumprồi!!:s^always^never[0] https://github.com/sharkdp/fd/issues/612
https://github.com/ibraheemdev/modern-unix
zellijtốt hơnscreen. Tab/màn hình không được đánh số đúng, nên muốn chuyển thẳng thì phải tự đếm; điều đó khó chấp nhậnGNU ls vẫn đang được bảo trì. Có các commit ảnh hưởng tới tệp
ls.cvào cả 2024-06-24 và 2024-06-27, tức là chưa tới một tháng trướcMailing list của GNU Coreutils cũng khá sôi động. Có vẻ dự án này dùng “maintained” theo nghĩa “được phát triển tích cực”
ezafork từ đó.exađã không được bảo trì khoảng 1 năm trước khi người duy nhất có quyền ghi vào repo chính thức đánh dấu deprecatedGiờ bản fork cũng đã tồn tại khá lâu nên không phải ai cũng biết
exa, và ý định của cách diễn đạt này đã trở nên kém rõ hơn nhiều. Vì có phản ứng tương tự, có lẽ đã đến lúc cập nhật câu chữlskhông được bảo trì, mà là một phương án thay thế được bảo trì dưới dạng fork của phương án thay thếlslàexa, vốn không còn được bảo trì nữaSau khi chuyển sang shell fish, mức sử dụng
lsgiảm 100%. Lệnh tích hợp Alt + l hiển thị nội dung thư mục nên rất hữu ích, và lịch sử shell cũng gọn gàng hơn nhiềulsvào biến môi trườngHISTIGNOREthì cũng có thể giữ history gọn gàng hơn: https://superuser.com/questions/232885/can-you-share-wisdom-...lstrong fish là thiết lập tự động chạylskhi đổi thư mụcfunction ls_on_cd --on-variable PWDlsend__bash_ctrl_n(), rồi để nhiều công cụ trong dotfiles ghi đè các hàm này. Ví dụ nếu đã cài Git thì thiết lập để__bash_ctrl_e()chạygit statusvàgit loglsthànhezanên tính năng này dường như chạyeza. Rốt cuộc có vẻ chỉ là chạylslsđều ngay saucd, nên đã thêm vào file khởi động. Giờ gần như mọi lầncdđều tự động chạylsTrong Bash, hàm
cd()gọibuiltin cd "$@" && ls -l, còn trong fish thì saubuiltin cd $argv, nếu không có lỗi và không phải chuyển về home thì chạydirNói chung tôi thấy các công cụ terminal ép dùng màu để phân biệt loại file hay thuộc tính khá bất tiện.
lscủa các bản phân phối cũng thường được cấu hình như vậy, nhưng tôi xóa các thiết lập đó và dùng mặc địnhTôi dùng nền terminal dịu mắt, nhưng các color scheme kiểu này luôn xung đột với nền hoặc có màu khó nhìn. Output của
lshay các công cụ thay thế nó không cần màu; mức thông tin màls -AFCcung cấp là đủ[0] https://github.com/chriskempson/base16
[1] https://tinted-theming.github.io/base16-gallery/
Dù vậy vẫn nên có giải pháp, và chỉ cần đặt một giá trị nào đó cho
$NO_COLOR. https://no-color.orgVới những công cụ không kiểm tra và tôn trọng biến môi trường này, việc gửi bug report là hoàn toàn hợp lý
vivid[1] để chọn theme phù hợp với nền terminal, rồi load biến LS_COLORS được tạo ra vào shell[1]: https://github.com/sharkdp/vivid/
Thật lạ là README không ghi
ezalà fork củaexaTôi tò mò vì sao các phiên bản mới của tiện ích GNU lại được tạo ra với giấy phép MIT nhiều như vậy. Trông có vẻ khá nhiều
ls. GNU coreutils, bao gồmls, ban đầu cũng là các phiên bản mới của tiện ích độc quyền AT&T hoặc tiện ích theo giấy phép BSDVì sao một công cụ thay thế
lslại cần Kerberos và SSH?Nhìn
ldd /usr/bin/ezathì thấy nó liên kết với khá nhiều thư viện nhưlibgit2,libgssapi_krb5,libmbedtls,libssh2,libkrb5,libcrypto,libzstd, v.v.lsthì dependency như vậy là quá nhiềuTrên bàn phím QWERTY,
ezalà tổ hợp ba chữ cái khá kinh khủng. Một trong những ưu điểm củalslà tổ hợp phím có thể gõ rất nhanhCó thể tạo alias, nhưng vì các lý do như tương thích nên tôi thấy hơi kỳ
eza, trước đó làexa, thànhls,ll,lllvà chưa từng gặp vấn đề tương thích nàoTôi cũng cài
slđể tự rèn mình không gõ nhầmezatrông như một cải tiến. Trên Dvorak,lstương ứng vớip-theo QWERTY, tức cả hai đều là phím ngón út tay phảiDù sao thì ai còn dùng
lsnữa? Chỉ cần dùng tự động hoàn thành bằng phím Tab cho đến khi file cần tìm hiện ra thôiĐùa vậy thôi, tôi tò mò vì sao lại cho rằng
lskhông còn được bảo trì nữals, mà là exa[0], vốn không còn được bảo trì nữa[0]https://github.com/ogham/exa
lsvẫn đang được bảo trì như một phần của shell hoặc coreutilsChỉ là
ezalà một biến thể củaexa, và theo tôi biết thìexakhông còn được bảo trì nữa