3 puan yazan GN⁺ 2024-07-23 | 1 yorum | WhatsApp'ta paylaş
  • eza, Unix/Linux'teki dosya listeleme komutu ls yerine kullanılabilen modern bir CLI aracı olup, daha fazla özellik ve daha iyi varsayılanlar sunmayı amaçlar
  • Dosya türlerini ve meta verileri renklerle ayırt eder, sembolik bağlantıları·genişletilmiş öznitelikleri·Git bilgilerini tanır ve küçük, hızlı bir tekil binary olarak sunulur
  • Mevcut exa sürümüne kıyasla Grid Bug düzeltmesi, hiperlinkler, bağlama noktası ayrıntıları, SELinux bağlamı, Git depo durumu, insan tarafından okunabilir göreli tarihler, güvenlik düzeltmeleri, bright terminal renkleri ve theme.yml yapılandırması ekler
  • Windows, macOS ve Linux'ta kurulabilir; Nix flake ortamında nix run github:eza-community/eza ile derlenip çalıştırılabilir
  • ls ile tamamen aynı olmayan bir seçenek sistemine sahiptir ve görüntüleme·filtreleme·uzun liste·tema ayarlarıyla dosya listeleme çıktısını ayrıntılı biçimde ayarlayabilirsiniz

eza'nın sunduğu ls alternatifi deneyimi

  • eza, Unix ve Linux işletim sistemlerine dahil olan eski dosya listeleme komutu ls için modern bir alternatiftir
  • Temel hedefi, ls'den daha fazla özellik sunan ve daha kullanıcı dostu bir sürüm sağlamaktır
  • Dosya türlerini ve meta verileri renklerle ayırt eder
  • Sembolik bağlantıları, genişletilmiş öznitelikleri ve Git bilgilerini tanır
  • Küçük ve hızlıdır; tekil binary olarak sunulur

exa'ya kıyasla eklenen özellikler

  • eza, exa'da bulunmayan çok sayıda özellik içerir
    • exa 2021'de eklenen “The Grid Bug” hatasının düzeltilmesi
    • Hiperlink desteği
    • Bağlama noktası ayrıntılarının gösterilmesi
    • SELinux bağlamının gösterilmesi
    • Git depo durumunun gösterilmesi
    • İnsan tarafından okunabilir göreli tarihler
    • Çeşitli güvenlik düzeltmeleri
    • bright terminal renk desteği
    • Daha küçük hata düzeltmeleri ve değişiklikler
    • Renkleri ve ikonları özelleştiren theme.yml yapılandırma dosyası

Çalıştırma ve kurulum

  • Nix flake destekli bir ortamda eza'yı şu komutla deneyebilirsiniz
    • nix run github:eza-community/eza
  • Nix, eza'yı derledikten sonra çalıştırır
  • Argüman geçirmek için şu şekilde -- sonrasına seçenek eklenir
    • nix run github:eza-community/eza -- -ol
  • eza Windows, macOS ve Linux üzerinde kullanılabilir
  • Platform ve dağıtıma göre kurulum yöntemleri INSTALL.md dosyasında yer alır

Komut satırı seçeneklerinin yapısı

  • eza'nın seçenekleri ls'ye oldukça benzer, ancak tamamen aynı değildir
  • Görüntüleme seçenekleri

    • -1, --oneline: Her satırda bir öğe göster
    • -G, --grid: Öğeleri ızgara biçiminde göster; varsayılandır
    • -l, --long: Genişletilmiş ayrıntıları ve öznitelikleri göster
    • -R, --recurse: Dizinleri özyinelemeli tara
    • -T, --tree: Dizinleri ağaç yapısında özyinelemeli göster
    • -F, --classify=(when): Dosya adlarının yanında tür göstergesi yazdır
    • --colour=(when), --color=(when): Terminal renklerinin ne zaman kullanılacağını belirt
    • --icons=(when): İkonların ne zaman gösterileceğini belirt
    • --hyperlink=(when): Öğelerin ne zaman hiperlink olarak gösterileceğini belirt
    • --absolute=(mode): Öğelerin mutlak yolunun nasıl gösterileceğini belirt
  • Filtreleme seçenekleri

    • -a, --all: Gizli dosyaları ve dot dosyalarını göster
    • -d, --treat-dirs-as-files: Dizinleri normal dosya gibi listele
    • -L, --level=(depth): Özyineleme derinliğini sınırla
    • -s, --sort=(field): Sıralama alanını belirt
    • --group-directories-first: Dizinleri önce göster
    • --group-directories-last: Dizinleri sonra göster
    • -D, --only-dirs: Yalnızca dizinleri göster
    • -f, --only-files: Yalnızca dosyaları göster
    • --git-ignore: .gitignore içindeki dosyaları yok say
    • -I, --ignore-glob=(globs): Pipe ile ayrılmış glob desenlerine uyan dosyaları yok say
    • --all iki kez verilirse . ve .. dizinleri de gösterilir

Uzun liste ve Git ile ilgili bilgiler

  • --long veya -l kullanıldığında uzun liste seçenekleri kullanılabilir
  • Dosya boyutu ve izinlerle ilgili seçenekler sunar
    • -b, --binary: Dosya boyutunu binary ön eklerle göster
    • -B, --bytes: Dosya boyutunu ön eksiz, bayt cinsinden göster
    • -o, --octal-permissions: İzinleri sekizlik biçimde göster
    • --no-permissions, --no-filesize, --no-user, --no-time: İlgili alanların çıktısını bastır
  • Dosya sistemi ve meta verilerle ilgili seçenekler sunar
    • -H, --links: Hard link sayısını göster
    • -i, --inode: inode numarasını göster
    • -M, --mounts: Bağlama ayrıntılarını göster; yalnızca Linux ve macOS'ta kullanılabilir
    • -Z, --context: Güvenlik bağlamını göster
    • -@, --extended: Genişletilmiş öznitelikleri ve boyutu göster
    • --total-size: Özyinelemeli dizin boyutunu göster
  • Git ile ilgili çıktıyı da destekler
    • --git: İzlenen veya yok sayılan her dosyanın Git durumunu göster
    • --git-repos: İzlenen her dizinin Git durumunu göster
    • --git-repos-no-status: Yalnızca dizinin Git deposu olup olmadığını gösterir; daha hızlıdır
    • --no-git: --git, --git-repos, --git-repos-no-status seçeneklerini her zaman yok sayar ve Git durumu çıktısını bastırır
  • Zaman biçimi olarak default, iso, long-iso, full-iso, relative veya +<FORMAT> biçiminde özel formatlar desteklenir
    • Örnek: +%Y-%m-%d %H:%M, çıktıyı 2023-09-30 13:00 biçiminde verir
    • Ayrıntılı biçim dizgeleri için eza(1) man sayfasına ve chrono documentation sayfasına bakın
  • Man sayfası deponun man dizininde görülebilir ve [0.18.13] - 2024-04-25 sürümünden itibaren terminalde man eza ile de kullanılabilir

Tema özelleştirme

  • eza kısa süre önce theme.yml dosyası desteği ekledi
  • theme.yml içinde, LS_COLORS ve EXA_COLORS ortam değişkenlerinde kullanılabilen mevcut tema seçenekleri belirtilebilir
  • Dosya türüne ve uzantıya göre farklı ikonlar atama seçeneği de sunar
  • Mevcut ortam değişkenleri ayarlıysa geriye dönük uyumluluk için çalışmaya devam eder ve önceliğe sahip olur
  • Hazır temaları resmi eza-themes deposunda inceleyebilir veya doğrudan katkıda bulunabilirsiniz
  • Örnek tema dosyası docs/theme.yml içinde bulunur
  • Tema dosyası EZA_CONFIG_DIR ortam değişkeniyle belirtilen dizine konabilir veya varsayılan olarak $XDG_CONFIG_HOME/eza altında aranır
  • Ayrıntılar için eza_colors-explanation.5.md ve docs/theme.yml dosyalarına bakın

Katkı

  • eza'ya katkıda bulunmak için code of conduct kurallarına uyulmalıdır
  • Geliştirmeye fiilen nasıl katılacağınızla ilgili bilgiler CONTRIBUTING.md dosyasında yer alır

1 yorum

 
GN⁺ 2024-07-23
Hacker News yorumları
  • Dizin listelerinde insan tarafından okunabilir tarihler özellikle sinir bozucu
    Dün sabah 11 civarı bir klasöre kopyaladığım şeyi arıyorum; her şey “1 day ago” diye görünüyorsa bunun faydası yok. Tarih ve saat gerekiyor; HN gibi forumlar da aynı şekilde kesin tarih/saati gösterip, gerekirse yanına “7 hours ago” ekleyebilir
    Bilginin neden özellikle çıkarıldığını anlamıyorum; bunun sonsuz kaydırma gibi akışların bir sonucu olup olmadığını merak ediyorum

    • Katılıyorum. GitHub da commit’lerde “foo.cpp modified last year” gibi gösteriyor; ek tarih/saat bilgisi görmenin bir yolu yoksa bunun hiçbir anlamı yok
    • Siteler bu amaçla bir HTML etiketi kullanabilir diye düşünüyorum. İnsan tarafından okunabilir bir biçim seçilse bile gerçek zaman tutulursa, bir eklenti bunu değiştirebilir veya üzerine yazabilir
      HTML yazarken bunu her zaman kullanmaya çalışıyorum
      (https://developer.mozilla.org/en-US/docs/Web/HTML/Element/ti...)
    • Gerçekten şaşırtıcı bir anti-özellik. Ne zaman değiştiği de belirsiz. “1 day ago” ne zaman “2 days ago” olur? Google’a göre 48 saat sonra; bu yüzden 47 saat sonra baktığınızda “1 day ago” yazıp sanki dün olmuş gibi düşündürüyor
      Belirli bir tarihin bir arkadaşınızın doğum gününden sonraki gün olduğunu hatırlayıp bir öğeyi bulmaya çalışsanız bile, gösterim sadece “three months ago” ise bir aylık veriyi karıştırmanız gerekir
    • Bu bir ayar; istediğiniz tarih biçimine değiştirebilirsiniz
    • Bu yaklaşımı sevmiyorum. Web 2.0 girişimlerinde başlamış ya da o dönemlerde Google gibi şirketlerin web uygulamalarından/sosyal web uygulamalarından yayılmış gibi geliyor
      Önce ayrıntılı zaman verilip, istenirse “kaç gün önce” gösterimi de birlikte sunulabilir
  • lsd de var ama hâlâ eza’yı daha çok tercih ediyorum
    İlgilenenler için, bugünlerde eski araçların yerine kullandığım modern komut satırı araçları şunlar: bat, sözdizimi vurgulamalı cat; difftastic, daha iyi bir diff; gdu, SSD’ler için ncdu; zoxide, modern bir cd; fd, find alternatifi; rg, ripgrep; fzf, fuzzy arama aracı; jless, fareyle katlama yapılabilen JSON görüntüleyici; dra, release varlıklarını indirme/kurma aracı; lazygit, Git TUI; lazydocker, Docker TUI; yazi, görüntü önizlemeli dosya yöneticisi; zellij, daha iyi bir tmux/screen; starship, birden çok shell’de kullanılan prompt yapılandırma aracı

    • Sık kullandığım 4 araç daha eklersem: task, Makefile alternatifi; hyperfine, benchmark aracı; vegeta, yük testi aracı; sd, daha iyi ve sezgisel bir sed
      JSON üçlüsü de var: jq, iyi bilinen JSON işleyici; jc, çeşitli CLI araçlarının çıktısını JSON’a dönüştürür; gron, JSON’u grep etmeyi kolaylaştırır
    • fd ve rg’nin varsayılan olarak .gitignore içindeki öğeleri yok saydığına dikkat etmek gerekir. Basit bir find ikamesi sanırsanız şaşırabilirsiniz. İlgili tartışma [0]’da
      Bu tür araçları önerirken bunu açıkça belirtmek gerekir. Belgeleri okumazsanız kaçırması kolay. Şahsen bu tür coreutils alternatifi araçların varsayılanlarını özgün araçlara daha benzer tutmasını isterdim. “find’ın basit, hızlı ve kullanıcı dostu alternatifi” diye tanıtıyorsanız, yeni kullanıcıların şaşırmasını azaltmak için özgün varsayılanlara saygı duymalısınız. Alias’lar zaten var; bu yüzden ~/.${SHELL##*/}rc içine alias fd='fd --ignore' koymanın, alias fd='fd --no-ignore' koymaktan daha iyi olduğunu düşünüyorum
      İpucu olarak, alias uygulanmamış sürümü kullanmak isterseniz \command kullanabilirsiniz. Örneğin alias grep='grep --color=always --no-messages --binary-files=without-match kullanıyorum; renk seçeneği karakter gösterimini değiştirdiğinden curl’e pipe edince hata verebilir. Her pipe’da böyle olmaz ama ilk karşılaştığınızda epey şaşırtıcıdır. echo "Hello world" | \grep --color=always "Hello" | hexdump ardından !!:s^always^never ile kontrol edebilirsiniz
      [0] https://github.com/sharkdp/fd/issues/612
    • Bu bağlantıda da adını duymadığım ama ilginç görünen ek araçların büyük bir listesi var
      https://github.com/ibraheemdev/modern-unix
    • Bu araçların çoğunun Rust ile yazılmış olması hoşuma gidiyor
    • zellij’in screen’den daha iyi olduğunu hissetmedim. Sekme/ekran numaraları düzgün verilmiyor; doğrudan geçmek için kendiniz saymanız gerekiyor, bunu kabullenmek zor
  • GNU ls bakımı yapılan bir araç. ls.c dosyasını etkileyen commit’ler 2024-06-24 ve 2024-06-27’de de vardı; bir aydan bile kısa süre önce
    GNU Coreutils posta listesi de oldukça aktif. Bu proje “maintained” sözcüğünü “aktif olarak geliştiriliyor” anlamında kullanıyor gibi görünüyor

    • Burada kastedilenin, eza’nın fork’ladığı exa olduğu anlaşılıyor. exa, depoya yazma yetkisi olan tek kişi onu resmen deprecated olarak işaretleyene kadar yaklaşık 1 yıl boyunca bakımsız kalmıştı
      Fork’lanmasının üzerinden de artık epey zaman geçtiği için herkes exa’yı bilmiyor; bu ifadenin amacı da çok daha belirsiz hâle geldi. Benzer tepkiler olduğuna göre metni güncellemenin zamanı gelmiş gibi
    • Buradaki “maintained”, ls’nin bakımsız olduğu anlamına değil; artık bakımı yapılmayan ls alternatifi exa’nın fork’u olarak bakımı yapılan bir alternatif olduğu anlamına geliyor
  • fish kabuğuna geçtikten sonra ls kullanımım %100 azaldı. Yerleşik Alt + l komutu dizin içeriğini gösterdiği için çok kullanışlı ve kabuk geçmişi de daha temiz hale geldi

    • Bash’te de ls gibi komutları HISTIGNORE ortam değişkenine eklerseniz geçmişi daha temiz tutabilirsiniz: https://superuser.com/questions/232885/can-you-share-wisdom-...
    • İyi ipucu. fish’te ls kullanımının çoğunu ortadan kaldıran şey, dizin değiştirirken otomatik olarak ls çalıştıran ayardı
      function ls_on_cd --on-variable PWD
      ls
      end
    • Bash kullanıcıları da kısayolları bu şekilde bağlayabilir. Sağ elin home row tuşlarını __bash_ctrl_n() gibi fonksiyonlara bağlayıp, dotfiles içindeki çeşitli araçların bu fonksiyonların üzerine yazmasını sağlıyorum. Örneğin Git kuruluysa __bash_ctrl_e() fonksiyonunu git status ve git log çalıştıracak şekilde ayarlıyorum
    • Benim ortamımda muhtemelen ls için eza takma adı tanımladığım için bu özellik eza çalıştırıyor gibi görünüyor. Sonuçta sadece ls çalıştırıyor gibi
    • ls çalıştırmalarımın çoğunun cd hemen sonrasında olduğunu fark edip başlangıç dosyama ekledim. Artık neredeyse her cd otomatik olarak ls çalıştırıyor
      Bash’te cd() fonksiyonunda builtin cd "$@" && ls -l çağırıyorum; fish’te ise builtin cd $argv sonrasında hata yoksa ve ana dizine geçiş değilse dir çalıştıracak şekilde ayarladım
  • Dosya türlerini ya da özniteliklerini ayırt etmek için renkleri dayatan terminal araçları genel olarak rahatsız edici. Dağıtımların ls komutu da çoğu zaman bu şekilde ayarlanmış oluyor, ama ben bu ayarları kaldırıp varsayılanları kullanıyorum
    Gözü yormayan bir terminal arka planı kullanıyorum; bu tür renk şemaları her zaman arka planla çakışıyor ya da okunması zor renkler içeriyor. ls veya alternatiflerinin çıktısında renge ihtiyaç yok; ls -AFC ile gelen seviye yeterli

    • Araçlar keyfi “256 color” veya “RGB” renk modları yerine Base16 Framework[0] kullansa sorun çok daha az olurdu. Çünkü çıktı, terminalde tanımlı ve okunabilir olması beklenen renklerle gösterilirdi
      [0] https://github.com/chriskempson/base16
      [1] https://tinted-theming.github.io/base16-gallery/
    • Ben tamamen tersine, renklendirilmiş çıktıya büyük ölçüde güveniyorum
      Yine de bir çözüm olmalı; $NO_COLOR değişkenine herhangi bir değer atamak yeterli. https://no-color.org
      Bu ortam değişkenini kontrol edip ona saygı göstermeyen araçlar için hata raporu açmak gayet makul
    • https://no-color.org
    • vivid[1] kullanarak terminal arka planına uygun bir tema seçip, üretilen LS_COLORS değişkenini kabuğa yükleyebilirsiniz
      [1]: https://github.com/sharkdp/vivid/
  • README’de ezanın exa fork’u olduğunun yazmaması garip

    • “eza features not in exa” diyor, yani varlığından bahsediyor. Ama link ya da bağlam yok
  • GNU yardımcı programlarının yeni sürümlerinin neden bu kadar sık MIT lisansıyla yapıldığını merak ediyorum. Epey fazla görünüyor

    • Rust kullanıcıları genel olarak kodlarını izin verici lisanslarla yayımlama eğiliminde. Kolayca kontrol edilebilecek bir istatistik var mı bilmiyorum, ama Rust paket deposu crates.io’daki neredeyse her şey MIT ya da Apache-2.0; popüler kütüphaneler için kesinlikle böyle diyebilirim
    • lsyi GNU projesi icat etmedi. ls de dahil olmak üzere GNU coreutils de aslında tescilli AT&T yardımcı programlarının veya BSD lisanslı yardımcı programların yeni sürümleriydi
    • Bununla ilgili olarak https://github.com/uutils/coreutils “GNU coreutils’in çapraz platform Rust ile yeniden yazımı”dır
  • Bir ls alternatifinin neden Kerberos ve SSH’ye ihtiyacı var?
    ldd /usr/bin/eza çıktısına bakınca libgit2, libgssapi_krb5, libmbedtls, libssh2, libkrb5, libcrypto, libzstd gibi epey fazla kütüphaneye bağlandığını görüyorum

    • Hele ls için gerekenlere kıyasla bağımlılık sayısı çok fazla
  • QWERTY klavyede eza, üç harfli bir kombinasyon olarak oldukça berbat. lsnin avantajlarından biri çok hızlı yazılabilen bir tuş kombinasyonu olması
    Takma ad oluşturabilirsiniz, ama uyumluluk gibi nedenlerle biraz tuhaf geliyor

    • 2015 civarından beri ezayı, ondan önce de exals, ll, lll olarak takma adlandırıyorum ve hiç uyumluluk sorunu yaşamadım
      sl de kurulu; böylece yanlış yazmamayı kendime öğretiyorum
    • Dvorak kullanıcısı açısından eza bir iyileştirme gibi görünüyor. Dvorak’ta ls, QWERTY karşılığıyla p-; ikisi de sağ el serçe parmak tuşları
    • Takma ad vermenin neden tuhaf olduğunu biraz daha açıklayabilir misiniz?
    • İstediğiniz herhangi bir adla takma ad oluşturabilirsiniz
    • Böyle zamanlarda AZERTY klavye parlıyor
  • Zaten kim ls kullanıyor ki? Gerekli dosya çıkana kadar sadece sekme otomatik tamamlaması yapıyorum
    Şaka bir yana, ls'nin artık bakımının yapılmadığını neden iddia ettiklerini merak ediyorum

    • ls değil, artık bakımı yapılmayan exa[0]'ı kastediyor gibi görünüyor
      [0]https://github.com/ogham/exa
    • Nedense, yazılım düzenli olarak güncellenmiyorsa özünde modası geçmiş sayılması gerektiği düşüncesi standart hâline geldi
    • Elbette ls, shell'in veya coreutils'in parçası olarak bakımı yapılan bir araç
      Ancak eza, exanın bir türevi ve bildiğim kadarıyla exanın artık bakımı yapılmıyor
    • Mevcut aracın bakımı yapılmıyormuş gibi görünmesi için “maintained” ile “actively developed” kavramlarını kasıtlı olarak birbirine karıştırıyorlar