3 poin oleh GN⁺ 2024-07-23 | 1 komentar | Bagikan ke WhatsApp
  • eza adalah tool CLI modern yang menggantikan perintah daftar file Unix/Linux ls, dengan tujuan menyediakan lebih banyak fitur dan default yang lebih baik
  • Membedakan jenis file dan metadata dengan warna, mengenali symbolic link, extended attributes, dan informasi Git, serta tersedia sebagai single binary yang kecil dan cepat
  • Dibandingkan exa, menambahkan perbaikan Grid Bug, hyperlink, detail mount point, konteks SELinux, status repositori Git, tanggal relatif yang mudah dibaca manusia, perbaikan keamanan, warna terminal bright, dan konfigurasi theme.yml
  • Dapat diinstal di Windows, macOS, dan Linux, serta di lingkungan Nix flake bisa dibangun lalu dijalankan dengan nix run github:eza-community/eza
  • Memiliki skema opsi yang tidak sepenuhnya sama dengan ls, dan cara output daftar file dapat diatur secara detail melalui pengaturan tampilan, pemfilteran, daftar panjang, dan tema

Pengalaman pengganti ls yang ditawarkan eza

  • eza adalah alternatif modern untuk perintah daftar file lama ls yang disertakan dalam sistem operasi Unix dan Linux
  • Tujuan utamanya adalah menyediakan versi yang lebih kaya fitur dan ramah pengguna dibandingkan ls
  • Membedakan jenis file dan metadata dengan warna
  • Mengenali symbolic link, extended attributes, dan informasi Git
  • Kecil, cepat, dan tersedia sebagai single binary

Fitur yang ditambahkan dibandingkan exa

  • eza menyertakan banyak fitur yang tidak ada di exa
    • Perbaikan “The Grid Bug” yang diperkenalkan di exa 2021
    • Dukungan hyperlink
    • Output detail mount point
    • Output konteks SELinux
    • Output status repositori Git
    • Tanggal relatif yang mudah dibaca manusia
    • Berbagai perbaikan keamanan
    • Dukungan warna terminal bright
    • Perbaikan bug dan perubahan kecil lainnya
    • File konfigurasi theme.yml untuk mengustomisasi warna dan ikon

Menjalankan dan menginstal

  • Di lingkungan yang mendukung Nix flake, eza dapat dicoba dengan perintah berikut
    • nix run github:eza-community/eza
  • Nix akan membangun eza lalu menjalankannya
  • Untuk meneruskan argumen, tambahkan opsi setelah -- seperti berikut
    • nix run github:eza-community/eza -- -ol
  • eza dapat digunakan di Windows, macOS, dan Linux
  • Cara instalasi per platform dan distribusi tersedia di INSTALL.md

Struktur opsi command-line

  • Opsi eza hampir sama dengan ls, tetapi tidak sepenuhnya identik
  • Opsi tampilan

    • -1, --oneline: tampilkan satu item per baris
    • -G, --grid: tampilkan item dalam grid; ini adalah default
    • -l, --long: tampilkan detail dan atribut tambahan
    • -R, --recurse: telusuri direktori secara rekursif
    • -T, --tree: tampilkan direktori secara rekursif dalam bentuk tree
    • -F, --classify=(when): tampilkan penanda jenis di samping nama file
    • --colour=(when), --color=(when): tentukan kapan warna terminal digunakan
    • --icons=(when): tentukan kapan ikon ditampilkan
    • --hyperlink=(when): tentukan kapan item ditampilkan sebagai hyperlink
    • --absolute=(mode): tentukan cara menampilkan path absolut item
  • Opsi pemfilteran

    • -a, --all: tampilkan file tersembunyi dan dot file
    • -d, --treat-dirs-as-files: daftar direktori seperti file biasa
    • -L, --level=(depth): batasi kedalaman rekursi
    • -s, --sort=(field): tentukan field pengurutan
    • --group-directories-first: tampilkan direktori lebih dulu
    • --group-directories-last: tampilkan direktori belakangan
    • -D, --only-dirs: tampilkan hanya direktori
    • -f, --only-files: tampilkan hanya file
    • --git-ignore: abaikan file yang ada di .gitignore
    • -I, --ignore-glob=(globs): abaikan file dengan pola glob yang dipisahkan pipe
    • Jika --all diberikan dua kali, direktori . dan .. juga ditampilkan

Daftar panjang dan informasi terkait Git

  • Saat menggunakan --long atau -l, opsi daftar panjang dapat digunakan
  • Menyediakan opsi terkait ukuran file dan permission
    • -b, --binary: tampilkan ukuran file dengan prefiks biner
    • -B, --bytes: tampilkan ukuran file dalam byte tanpa prefiks
    • -o, --octal-permissions: tampilkan permission dalam format oktal
    • --no-permissions, --no-filesize, --no-user, --no-time: sembunyikan output masing-masing field
  • Menyediakan opsi terkait filesystem dan metadata
    • -H, --links: tampilkan jumlah hard link
    • -i, --inode: tampilkan nomor inode
    • -M, --mounts: tampilkan detail mount; hanya tersedia di Linux dan macOS
    • -Z, --context: tampilkan konteks keamanan
    • -@, --extended: tampilkan extended attributes dan ukurannya
    • --total-size: tampilkan ukuran direktori rekursif
  • Output terkait Git juga didukung
    • --git: tampilkan status Git untuk setiap file yang dilacak atau diabaikan
    • --git-repos: tampilkan status Git untuk setiap direktori yang dilacak
    • --git-repos-no-status: hanya tampilkan apakah direktori merupakan repositori Git, dan lebih cepat
    • --no-git: selalu abaikan --git, --git-repos, --git-repos-no-status dan sembunyikan output status Git
  • Format waktu mendukung default, iso, long-iso, full-iso, relative, atau format kustom berbentuk +<FORMAT>
    • Contoh: +%Y-%m-%d %H:%M menghasilkan output dalam format 2023-09-30 13:00
    • Untuk string format yang lebih detail, lihat halaman manual eza(1) dan dokumentasi chrono
  • Halaman manual dapat dilihat di direktori man pada repositori, dan sejak versi [0.18.13] - 2024-04-25 juga dapat diakses dari terminal dengan man eza

Kustomisasi tema

  • eza baru-baru ini menambahkan dukungan file theme.yml
  • Di theme.yml, opsi tema lama yang sebelumnya dapat digunakan melalui variabel lingkungan LS_COLORS dan EXA_COLORS dapat ditentukan
  • Juga menyediakan opsi untuk menetapkan ikon berbeda per jenis dan ekstensi file
  • Jika variabel lingkungan lama telah disetel, variabel tersebut tetap berfungsi demi kompatibilitas mundur dan memiliki prioritas
  • Tema siap pakai dapat dilihat atau dikontribusikan langsung di repositori resmi eza-themes
  • File tema contoh ada di docs/theme.yml
  • File tema diletakkan di direktori yang ditentukan oleh variabel lingkungan EZA_CONFIG_DIR, atau secara default dicari di $XDG_CONFIG_HOME/eza
  • Detail lebih lanjut tersedia di eza_colors-explanation.5.md dan docs/theme.yml

Kontribusi

1 komentar

 
GN⁺ 2024-07-23
Komentar Hacker News
  • Tanggal yang mudah dibaca manusia dalam daftar direktori terasa sangat mengganggu
    Kalau saya mencari sesuatu yang saya salin ke folder sekitar pukul 11 pagi kemarin, lalu semuanya tampil sebagai “1 day ago”, itu tidak membantu. Saya butuh tanggal dan waktu, dan forum seperti HN juga sebaiknya menampilkan tanggal/waktu yang tepat, lalu jika perlu menambahkan “7 hours ago” di sampingnya
    Saya tidak mengerti kenapa informasi sengaja dihilangkan, dan penasaran apakah ini akibat dari pola seperti infinite scroll

    • Setuju. GitHub juga menampilkan commit seperti “foo.cpp modified last year”, dan kalau tidak ada cara untuk melihat informasi tanggal/waktu tambahan, itu sama sekali tidak masuk akal
    • Sepertinya situs-situs bisa memakai tag HTML untuk tujuan ini. Sekalipun memilih format yang mudah dibaca manusia, jika waktu sebenarnya tetap disimpan, ekstensi bisa mengganti atau menimpanya
      Saat menulis HTML, saya selalu berusaha memakainya
      (https://developer.mozilla.org/en-US/docs/Web/HTML/Element/ti...)
    • Ini benar-benar anti-fitur yang mencengangkan. Titik perubahan waktunya juga ambigu. Kapan “1 day ago” berubah menjadi “2 days ago”? Menurut standar Google, setelah 48 jam, jadi kalau dilihat 47 jam kemudian akan tertulis “1 day ago” dan membuat orang mengira itu terjadi kemarin
      Kalau saya mengingat tanggal tertentu sebagai sehari setelah ulang tahun teman dan ingin mencari suatu item, tetapi tampilannya hanya “three months ago”, saya harus membongkar data selama sebulan penuh
    • Ini adalah pengaturan, jadi bisa diubah ke format tanggal yang diinginkan
    • Saya tidak suka cara ini. Rasanya dimulai dari startup Web 2.0, atau menyebar dari web app/social web app perusahaan seperti Google pada masa itu
      Berikan dulu waktu yang detail, lalu kalau mau tampilkan juga “beberapa hari lalu” di sampingnya
  • Ada juga lsd, tetapi saya tetap lebih menyukai eza
    Untuk yang tertarik, berikut beberapa tool command-line modern yang belakangan ini saya pakai sebagai pengganti tool lama: bat adalah cat dengan syntax highlighting, difftastic adalah diff yang lebih baik, gdu adalah ncdu untuk SSD, zoxide adalah cd modern, fd adalah alternatif find, rg adalah ripgrep, fzf adalah fuzzy finder, jless adalah JSON viewer dengan pelipatan memakai mouse, dra untuk mengunduh/menginstal aset rilis, lazygit adalah Git TUI, lazydocker adalah Docker TUI, yazi adalah file manager dengan pratinjau gambar, zellij adalah tmux/screen yang lebih baik, dan starship adalah tool konfigurasi prompt untuk berbagai shell

    • Menambahkan 4 tool yang sering dipakai: task adalah alternatif Makefile, hyperfine adalah tool benchmark, vegeta adalah tool load testing, dan sd adalah sed yang lebih baik dan intuitif
      Ada juga trio JSON: jq adalah pemroses JSON yang sudah terkenal, jc mengubah output berbagai tool CLI menjadi JSON, dan gron membuat JSON mudah di-grep
    • Perlu hati-hati bahwa fd dan rg secara default mengabaikan item yang termasuk dalam .gitignore. Kalau menganggapnya sekadar pengganti find, ini bisa mengejutkan. Diskusi terkait ada di [0]
      Saat merekomendasikan tool seperti ini, poin tersebut harus dibuat jelas. Mudah terlewat kalau tidak membaca dokumentasi. Secara pribadi, saya berharap tool-tool pengganti coreutils seperti ini mempertahankan default yang lebih mirip dengan tool aslinya. Jika dipromosikan sebagai “alternatif find yang sederhana, cepat, dan ramah pengguna”, default aslinya seharusnya dihormati agar pengguna baru tidak terkejut. Karena alias memang ada, menurut saya lebih baik menaruh alias fd='fd --ignore' di ~/.${SHELL##*/}rc daripada alias fd='fd --no-ignore'
      Sebagai tip, jika ingin memakai versi yang tidak terkena alias, gunakan \command. Misalnya saya memakai alias grep='grep --color=always --no-messages --binary-files=without-match, tetapi opsi warna dapat mengubah representasi karakter sehingga bisa menimbulkan error saat dipipe ke curl. Tidak terjadi pada semua pipe, tetapi cukup membingungkan saat pertama kali mengalaminya. Bisa dicek dengan echo "Hello world" | \grep --color=always "Hello" | hexdump, lalu !!:s^always^never
      [0] https://github.com/sharkdp/fd/issues/612
    • Di tautan ini juga ada daftar besar tool tambahan yang belum pernah saya dengar tetapi terlihat menarik
      https://github.com/ibraheemdev/modern-unix
    • Saya suka bahwa sebagian besar tool seperti ini ditulis dengan Rust
    • Saya tidak merasa zellij lebih baik daripada screen. Nomor tab/layar tidak diberi dengan benar sehingga untuk berpindah langsung harus menghitung sendiri, dan ini sulit diterima
  • GNU ls masih dipelihara. Bahkan ada commit yang memengaruhi file ls.c pada 2024-06-24 dan 2024-06-27, belum sampai sebulan lalu
    Mailing list GNU Coreutils juga cukup aktif. Sepertinya proyek ini memakai “maintained” dalam arti “dikembangkan secara aktif”

    • Yang dimaksud di sini tampaknya adalah exa, yang di-fork oleh eza. exa tidak dipelihara selama sekitar setahun sebelum satu-satunya orang yang punya hak tulis ke repositori secara resmi menandainya deprecated
      Sekarang sudah cukup lama sejak fork itu dibuat sehingga tidak semua orang tahu exa, dan maksud dari ungkapan ini juga menjadi jauh kurang jelas. Karena ada reaksi serupa, sepertinya sudah waktunya memperbarui kalimatnya
    • “Maintained” di sini bukan berarti ls tidak dipelihara, melainkan bahwa ini adalah pengganti yang dipelihara sebagai fork dari pengganti ls bernama exa yang sudah tidak dipelihara lagi
  • Setelah beralih ke shell fish, penggunaan ls turun 100%. Perintah bawaan Alt + l menampilkan isi direktori, jadi sangat berguna, dan riwayat shell juga jadi lebih rapi

    • Di Bash juga, jika menambahkan perintah seperti ls ke variabel lingkungan HISTIGNORE, riwayat bisa dijaga tetap lebih rapi: https://superuser.com/questions/232885/can-you-share-wisdom-...
    • Tip yang bagus. Di fish, yang menghilangkan sebagian besar penggunaan ls adalah pengaturan yang otomatis menjalankan ls saat berpindah direktori
      function ls_on_cd --on-variable PWD
      ls
      end
    • Pengguna Bash juga bisa mengikat shortcut seperti ini. Kunci home row tangan kanan diikat ke fungsi seperti __bash_ctrl_n(), lalu berbagai tool di dotfiles dibuat menimpa fungsi-fungsi ini. Misalnya jika Git terpasang, __bash_ctrl_e() diatur untuk menjalankan git status dan git log
    • Di lingkungan saya, mungkin karena ls sudah saya jadikan alias ke eza, fitur ini sepertinya menjalankan eza. Pada akhirnya tampaknya hanya menjalankan ls
    • Saya menambahkannya ke file startup setelah menyadari bahwa sebagian besar eksekusi ls terjadi tepat setelah cd. Sekarang hampir setiap cd otomatis menjalankan ls
      Di Bash, fungsi cd() memanggil builtin cd "$@" && ls -l, dan di fish, setelah builtin cd $argv, jika tidak ada error dan bukan pindah ke home, saya membuatnya menjalankan dir
  • Secara umum saya tidak nyaman dengan tool terminal yang memaksakan warna untuk membedakan jenis atau atribut file. ls di banyak distro juga sering dikonfigurasi seperti itu, tetapi saya menghapus konfigurasi tersebut dan memakai default
    Saya memakai latar terminal yang nyaman di mata, tetapi skema warna seperti ini selalu bentrok dengan latar atau mengandung warna yang sulit dibaca. Output ls atau penggantinya tidak membutuhkan warna, dan informasi setingkat yang diberikan ls -AFC sudah cukup

  • Aneh bahwa README tidak menyebut eza sebagai fork dari exa

    • Memang ada penyebutan “eza features not in exa”, jadi keberadaannya sendiri disebut. Namun tidak ada tautan atau konteks
  • Saya penasaran kenapa begitu banyak versi baru dari utilitas GNU dibuat dengan lisensi MIT. Sepertinya cukup banyak

    • Pengguna Rust secara umum cenderung merilis kode dengan lisensi permisif. Saya tidak tahu apakah ada statistik yang mudah dicek, tetapi hampir semua yang ada di crates.io, repositori paket Rust, memakai MIT atau Apache-2.0, dan library populer rasanya memang begitu
    • Proyek GNU bukan yang menciptakan ls. GNU coreutils, termasuk ls, pada awalnya juga merupakan versi baru dari utilitas proprietary AT&T atau utilitas berlisensi BSD
    • Terkait ini, https://github.com/uutils/coreutils adalah “penulisan ulang GNU coreutils lintas platform dalam Rust”
  • Kenapa pengganti ls membutuhkan Kerberos dan SSH?
    Jika melihat ldd /usr/bin/eza, ia tertaut ke cukup banyak library seperti libgit2, libgssapi_krb5, libmbedtls, libssh2, libkrb5, libcrypto, libzstd, dan lainnya

    • Untuk sesuatu yang semestinya hanya ls, dependensi-nya terlalu banyak
  • Di keyboard QWERTY, kombinasi tiga huruf eza cukup mengerikan. Salah satu keunggulan ls adalah kombinasi tombolnya bisa diketik sangat cepat
    Memang bisa dibuat alias, tetapi terasa agak aneh karena alasan seperti kompatibilitas

    • Sejak sekitar 2015 saya membuat alias eza, dan sebelumnya exa, sebagai ls, ll, lll, dan tidak pernah mengalami masalah kompatibilitas
      Saya juga memasang sl supaya melatih diri agar tidak salah ketik
    • Dari sudut pandang pengguna Dvorak, eza terlihat seperti perbaikan. Di Dvorak, ls setara p- pada QWERTY, jadi keduanya tombol kelingking tangan kanan
    • Bisa jelaskan lebih lanjut kenapa membuat alias terasa aneh?
    • Anda bisa membuat alias dengan nama apa pun yang diinginkan
    • Di saat seperti ini, keyboard AZERTY bersinar
  • Lagi pula, siapa yang masih pakai ls? Saya cuma pakai autocomplete tab sampai file yang dibutuhkan muncul
    Terlepas dari candaan itu, saya penasaran kenapa ada klaim bahwa ls tidak lagi dipelihara

    • Sepertinya yang dimaksud bukan ls, melainkan exa[0] yang memang tidak lagi dipelihara
      [0]https://github.com/ogham/exa
    • Entah kenapa, sudah seperti menjadi standar untuk menganggap perangkat lunak pada dasarnya usang kalau tidak diperbarui secara rutin
    • Tentu saja ls tetap dipelihara sebagai bagian dari shell atau coreutils
      Hanya saja eza adalah varian dari exa, dan sejauh yang saya tahu exa tidak lagi dipelihara
    • Ini sengaja mencampuradukkan “maintained” dan “actively developed” agar alat yang sudah ada terlihat seolah-olah tidak dipelihara