3 คะแนน โดย GN⁺ 2024-07-23 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • eza เป็นเครื่องมือ CLI สมัยใหม่ที่ใช้แทนคำสั่งแสดงรายการไฟล์ ls บน Unix/Linux โดยมีเป้าหมายเพื่อให้ฟีเจอร์มากขึ้นและค่าเริ่มต้นที่ดีกว่า
  • แยกประเภทไฟล์และเมทาดาทาด้วย สี รู้จัก symbolic link, extended attributes และข้อมูล Git และมาในรูปแบบ ไบนารีเดี่ยว ที่เล็กและเร็ว
  • เมื่อเทียบกับ exa เดิม เพิ่มการแก้ Grid Bug, ไฮเปอร์ลิงก์, รายละเอียด mount point, SELinux context, สถานะ Git repository, วันที่สัมพัทธ์ที่อ่านง่าย, การแก้ด้านความปลอดภัย, สีเทอร์มินัลแบบ bright และการตั้งค่า theme.yml
  • ติดตั้งได้บน Windows, macOS และ Linux และในสภาพแวดล้อม Nix flake สามารถ build แล้วรันได้ด้วย nix run github:eza-community/eza
  • มีระบบตัวเลือกที่ไม่เหมือน ls ทั้งหมด และสามารถปรับแต่งรูปแบบเอาต์พุตรายการไฟล์ได้ละเอียดผ่านการแสดงผล การกรอง รายการแบบยาว และการตั้งค่าธีม

ประสบการณ์ทดแทน ls ที่ eza มอบให้

  • eza เป็นทางเลือกสมัยใหม่แทนคำสั่งแสดงรายการไฟล์เก่า ls ที่รวมอยู่ในระบบปฏิบัติการ Unix และ Linux
  • เป้าหมายหลักคือการให้เวอร์ชันที่ มีฟีเจอร์มากกว่าและเป็นมิตรกับผู้ใช้มากกว่า ls
  • แยกประเภทไฟล์และเมทาดาทาด้วยสี
  • รู้จัก symbolic link, extended attributes และข้อมูล Git
  • เล็ก เร็ว และมาในรูปแบบ ไบนารีเดี่ยว

ฟีเจอร์ที่เพิ่มจาก exa

  • eza มีฟีเจอร์จำนวนมากที่ exa ไม่มี
    • แก้ “The Grid Bug” ที่ถูกนำเข้ามาใน exa ปี 2021
    • รองรับ ไฮเปอร์ลิงก์
    • แสดงรายละเอียด mount point
    • แสดง SELinux context
    • แสดงสถานะ Git repository
    • วันที่สัมพัทธ์ที่อ่านง่าย
    • การแก้ไขด้านความปลอดภัยหลายรายการ
    • รองรับสีเทอร์มินัลแบบ bright
    • การแก้บั๊กและการเปลี่ยนแปลงย่อยอื่น ๆ
    • ไฟล์ตั้งค่า theme.yml สำหรับปรับแต่งสีและไอคอน

การรันและการติดตั้ง

  • ในสภาพแวดล้อมที่รองรับ Nix flake สามารถทดลองใช้ eza ได้ด้วยคำสั่งต่อไปนี้
    • nix run github:eza-community/eza
  • Nix จะ build eza แล้วรัน
  • หากต้องการส่งอาร์กิวเมนต์ ให้ใส่ตัวเลือกหลัง -- เช่นนี้
    • nix run github:eza-community/eza -- -ol
  • eza ใช้งานได้บน Windows, macOS, Linux
  • วิธีติดตั้งตามแพลตฟอร์มและดิสโทรอยู่ใน INSTALL.md

โครงสร้างตัวเลือกบรรทัดคำสั่ง

  • ตัวเลือกของ eza แทบเหมือน ls แต่ไม่เหมือนทั้งหมด
  • ตัวเลือกการแสดงผล

    • -1, --oneline: แสดงหนึ่งรายการต่อหนึ่งบรรทัด
    • -G, --grid: แสดงรายการเป็นกริด และเป็นค่าเริ่มต้น
    • -l, --long: แสดงรายละเอียดและคุณสมบัติเพิ่มเติม
    • -R, --recurse: สำรวจไดเรกทอรีแบบ recursive
    • -T, --tree: แสดงไดเรกทอรีแบบ recursive ในรูปต้นไม้
    • -F, --classify=(when): แสดงตัวบ่งชี้ประเภทข้างชื่อไฟล์
    • --colour=(when), --color=(when): กำหนดช่วงเวลาที่จะใช้สีเทอร์มินัล
    • --icons=(when): กำหนดช่วงเวลาที่จะแสดงไอคอน
    • --hyperlink=(when): กำหนดช่วงเวลาที่จะแสดงรายการเป็นไฮเปอร์ลิงก์
    • --absolute=(mode): กำหนดวิธีแสดงพาธแบบ absolute ของรายการ
  • ตัวเลือกการกรอง

    • -a, --all: แสดงไฟล์ซ่อนและ dot files
    • -d, --treat-dirs-as-files: แสดงไดเรกทอรีเหมือนไฟล์ทั่วไป
    • -L, --level=(depth): จำกัดความลึกของ recursion
    • -s, --sort=(field): กำหนดฟิลด์สำหรับเรียงลำดับ
    • --group-directories-first: แสดงไดเรกทอรีก่อน
    • --group-directories-last: แสดงไดเรกทอรีทีหลัง
    • -D, --only-dirs: แสดงเฉพาะไดเรกทอรี
    • -f, --only-files: แสดงเฉพาะไฟล์
    • --git-ignore: ไม่สนใจไฟล์ที่อยู่ใน .gitignore
    • -I, --ignore-glob=(globs): ไม่สนใจไฟล์ที่ตรงกับแพตเทิร์น glob หลายรายการคั่นด้วย pipe
    • หากส่ง --all สองครั้ง จะแสดงไดเรกทอรี . และ .. ด้วย

รายการแบบยาวและข้อมูลเกี่ยวกับ Git

  • เมื่อใช้ --long หรือ -l จะสามารถใช้ตัวเลือกรายการแบบยาวได้
  • มีตัวเลือกเกี่ยวกับขนาดไฟล์และสิทธิ์
    • -b, --binary: แสดงขนาดไฟล์ด้วย binary prefix
    • -B, --bytes: แสดงขนาดไฟล์เป็นไบต์โดยไม่มี prefix
    • -o, --octal-permissions: แสดงสิทธิ์ในรูปแบบเลขฐานแปด
    • --no-permissions, --no-filesize, --no-user, --no-time: ระงับการแสดงผลแต่ละฟิลด์
  • มีตัวเลือกเกี่ยวกับระบบไฟล์และเมทาดาทา
    • -H, --links: แสดงจำนวน hard links
    • -i, --inode: แสดงหมายเลข inode
    • -M, --mounts: แสดงรายละเอียด mount ใช้งานได้เฉพาะบน Linux และ macOS
    • -Z, --context: แสดง security context
    • -@, --extended: แสดง extended attributes และขนาด
    • --total-size: แสดงขนาดไดเรกทอรีแบบ recursive
  • รองรับเอาต์พุตเกี่ยวกับ Git ด้วย
    • --git: แสดงสถานะ Git ของแต่ละไฟล์ที่ถูกติดตามหรือถูกละเว้น
    • --git-repos: แสดงสถานะ Git ของแต่ละไดเรกทอรีที่ถูกติดตาม
    • --git-repos-no-status: แสดงเฉพาะว่าไดเรกทอรีเป็น Git repository หรือไม่ และเร็วกว่า
    • --no-git: ไม่สนใจ --git, --git-repos, --git-repos-no-status เสมอ และระงับการแสดงสถานะ Git
  • รูปแบบเวลารองรับ default, iso, long-iso, full-iso, relative หรือรูปแบบกำหนดเองในรูป +<FORMAT>
    • ตัวอย่าง: +%Y-%m-%d %H:%M จะแสดงผลในรูปแบบ 2023-09-30 13:00
    • ดูสตริงรูปแบบโดยละเอียดได้ที่หน้า manual eza(1) และ chrono documentation
  • ดูหน้า manual ได้ใน ไดเรกทอรี man ของ repository และตั้งแต่เวอร์ชัน [0.18.13] - 2024-04-25 เป็นต้นไป สามารถใช้ man eza ในเทอร์มินัลได้ด้วย

การปรับแต่งธีม

  • eza เพิ่งเพิ่มการรองรับไฟล์ theme.yml
  • ใน theme.yml สามารถกำหนดตัวเลือกธีมเดิมที่เคยใช้ได้ผ่านตัวแปรสภาพแวดล้อม LS_COLORS และ EXA_COLORS
  • มีตัวเลือกสำหรับกำหนด ไอคอนที่แตกต่างกัน ตามประเภทไฟล์และนามสกุลไฟล์ด้วย
  • หากตั้งค่าตัวแปรสภาพแวดล้อมเดิมไว้ จะยังทำงานต่อไปเพื่อความเข้ากันได้ย้อนหลัง และจะมีลำดับความสำคัญสูงกว่า
  • ดูธีมสำเร็จรูปหรือร่วมมีส่วนร่วมได้ที่ repository ทางการ eza-themes
  • ไฟล์ธีมตัวอย่างอยู่ที่ docs/theme.yml
  • ไฟล์ธีมสามารถวางไว้ในไดเรกทอรีที่กำหนดด้วยตัวแปรสภาพแวดล้อม EZA_CONFIG_DIR หรือโดยค่าเริ่มต้นจะค้นหาที่ $XDG_CONFIG_HOME/eza
  • รายละเอียดเพิ่มเติมอยู่ใน eza_colors-explanation.5.md และ docs/theme.yml

การมีส่วนร่วม

  • หากต้องการมีส่วนร่วมกับ eza ต้องปฏิบัติตาม code of conduct
  • ข้อมูลสำหรับการเข้าร่วมพัฒนาจริงอยู่ใน CONTRIBUTING.md

1 ความคิดเห็น

 
GN⁺ 2024-07-23
ความคิดเห็นบน Hacker News
  • ในรายการไดเรกทอรี วันที่แบบอ่านง่ายสำหรับมนุษย์ น่ารำคาญเป็นพิเศษ
    ถ้าผมกำลังหาของที่คัดลอกเข้าโฟลเดอร์เมื่อวานราว 11 โมงเช้า แต่ทุกอย่างแสดงว่า “1 day ago” มันไม่ช่วยเลย ต้องมีวันที่และเวลา และฟอรัมอย่าง HN ก็ควรทำแบบเดียวกัน คือแสดงวันที่/เวลาที่แน่นอนก่อน แล้วถ้าจำเป็นค่อยใส่ “7 hours ago” ต่อท้ายก็ได้
    ไม่เข้าใจว่าทำไมถึงจงใจตัดข้อมูลออก และสงสัยว่านี่เป็นผลจากแนวทางแบบ infinite scroll หรือเปล่า

    • เห็นด้วย GitHub ก็แสดงในคอมมิตประมาณว่า “foo.cpp modified last year” ซึ่งถ้าไม่มีวิธีดู ข้อมูลวันที่/เวลา เพิ่มเติมเลย ก็ไม่สมเหตุสมผลอย่างยิ่ง
    • คิดว่าเว็บไซต์น่าจะใช้แท็ก HTML เพื่อจุดประสงค์นี้ได้ ต่อให้เลือกใช้รูปแบบที่คนอ่านง่าย ถ้ายังเก็บเวลาจริงไว้ ส่วนขยายก็สามารถแทนที่หรือซ้อนทับได้
      เวลาเขียน HTML ผมพยายามใช้เสมอ
      (https://developer.mozilla.org/en-US/docs/Web/HTML/Element/ti...)
    • เป็น ฟีเจอร์ตรงข้ามประโยชน์ ที่น่าทึ่งจริง ๆ ช่วงเวลาที่เปลี่ยนก็คลุมเครือ “1 day ago” จะกลายเป็น “2 days ago” เมื่อไหร่? ตามเกณฑ์ของ Google คือหลัง 48 ชั่วโมง ดังนั้นถ้าดูตอนผ่านไป 47 ชั่วโมง ก็ยังขึ้นว่า “1 day ago” ทำให้เข้าใจผิดเหมือนเกิดขึ้นเมื่อวาน
      ต่อให้จำได้ว่าวันที่ต้องการคือวันถัดจากวันเกิดเพื่อน และพยายามหารายการบางอย่าง ถ้าหน้าจอแสดงแค่ “three months ago” ก็ต้องไล่ค้นข้อมูลทั้งเดือน
    • นี่เป็นการตั้งค่า จึงเปลี่ยนเป็น รูปแบบวันที่ ที่ต้องการได้
    • ผมไม่ชอบวิธีนี้ น่าจะเริ่มจากสตาร์ทอัพยุค Web 2.0 หรือแพร่หลายมาจากเว็บแอป/โซเชียลเว็บแอปของบริษัทอย่าง Google ในช่วงนั้น
      แค่ให้เวลาละเอียดก่อน แล้วถ้าต้องการก็ค่อยแสดง “กี่วันก่อน” ควบคู่ไปก็พอ
  • แม้จะมี lsd แต่ก็ยังชอบ eza มากกว่า
    สำหรับคนที่สนใจ ตอนนี้มีเครื่องมือบรรทัดคำสั่งสมัยใหม่ที่ใช้แทนเครื่องมือเดิม ๆ อยู่หลายตัว: bat คือ cat ที่มีการไฮไลต์ไวยากรณ์, difftastic คือ diff ที่ดีกว่า, gdu คือ ncdu สำหรับ SSD, zoxide คือ cd สมัยใหม่, fd เป็นทางเลือกแทน find, rg คือ ripgrep, fzf เป็นเครื่องมือค้นหาแบบ fuzzy, jless เป็นตัวดู JSON ที่พับด้วยเมาส์ได้, dra ใช้ดาวน์โหลด/ติดตั้ง release assets, lazygit เป็น Git TUI, lazydocker เป็น Docker TUI, yazi เป็นตัวจัดการไฟล์ที่พรีวิวรูปภาพได้, zellij คือ tmux/screen ที่ดีกว่า, starship เป็นเครื่องมือตั้งค่า prompt ที่ใช้ได้กับหลายเชลล์

    • ถ้าเพิ่มเครื่องมือที่ใช้บ่อยอีก 4 ตัว: task เป็นทางเลือกแทน Makefile, hyperfine เป็น เครื่องมือ benchmark, vegeta เป็นเครื่องมือทดสอบโหลด, sd คือ sed ที่ดีกว่าและเข้าใจง่ายกว่า
      ยังมีสามสหาย JSON ด้วย: jq เป็นตัวประมวลผล JSON ที่รู้จักกันดี, jc แปลงเอาต์พุตจากเครื่องมือ CLI หลายตัวเป็น JSON, gron ทำให้ grep JSON ได้ง่ายขึ้น
    • ต้องระวังว่า fd และ rg จะ ละเว้น รายการที่อยู่ใน .gitignore เป็นค่าเริ่มต้น ถ้าคิดว่าเป็นตัวแทน find แบบตรงไปตรงมาอาจแปลกใจได้ มีการถกเรื่องนี้อยู่ที่ [0]
      เวลาจะแนะนำเครื่องมือพวกนี้ควรบอกจุดนี้ให้ชัด ถ้าไม่อ่านเอกสารก็พลาดได้ง่าย โดยส่วนตัวอยากให้เครื่องมือแนว coreutils ทดแทนเหล่านี้คงค่าเริ่มต้นให้ใกล้เคียงกับเครื่องมือต้นฉบับมากกว่านี้ ถ้าโปรโมตว่าเป็น “ทางเลือกแทน find ที่เรียบง่าย รวดเร็ว และเป็นมิตรต่อผู้ใช้” ก็ควรเคารพค่าเริ่มต้นของต้นฉบับเพื่อลดความประหลาดใจของผู้ใช้ใหม่ alias มีอยู่แล้ว ดังนั้นการใส่ alias fd='fd --ignore' ไว้ใน ~/.${SHELL##*/}rc น่าจะดีกว่า alias fd='fd --no-ignore'
      เป็นทิป ถ้าอยากใช้เวอร์ชันที่ไม่ผ่าน alias ให้ใช้ \command ได้ เช่น ผมใช้ alias grep='grep --color=always --no-messages --binary-files=without-match อยู่ แต่ตัวเลือกสีอาจเปลี่ยนการแทนอักขระ ทำให้เกิดข้อผิดพลาดเมื่อ pipe ไปยัง curl ไม่ได้เกิดกับทุก pipe แต่ถ้าเจอครั้งแรกก็ค่อนข้างงง ตรวจสอบได้ด้วย echo "Hello world" | \grep --color=always "Hello" | hexdump แล้วตามด้วย !!:s^always^never
      [0] https://github.com/sharkdp/fd/issues/612
    • ในลิงก์นี้ยังมีรายการเครื่องมือเพิ่มเติมอีกมากที่ไม่เคยได้ยิน แต่ดูน่าสนใจ
      https://github.com/ibraheemdev/modern-unix
    • ชอบตรงที่เครื่องมือส่วนใหญ่พวกนี้เขียนด้วย Rust
    • ยังไม่รู้สึกว่า zellij ดีกว่า screen แท็บ/หมายเลขหน้าจอไม่ได้ถูกกำหนดอย่างถูกต้อง ทำให้ถ้าจะสลับไปทันทีต้องนับเอง ซึ่งรับยาก
  • GNU ls ยังมีการบำรุงรักษาอยู่ มีคอมมิตที่กระทบไฟล์ ls.c ทั้งวันที่ 2024-06-24 และ 2024-06-27 ซึ่งยังไม่ถึงเดือนด้วยซ้ำ
    เมลลิงลิสต์ของ GNU Coreutils ก็ค่อนข้างคึกคัก ดูเหมือนโปรเจกต์นี้ใช้คำว่า “maintained” ในความหมายว่า “มีการพัฒนาอย่างแข็งขัน”

    • ตรงนี้น่าจะหมายถึง exa ที่ eza fork มา exa ไม่ได้รับการบำรุงรักษาประมาณ 1 ปี จนกระทั่งคนเพียงคนเดียวที่มีสิทธิ์เขียนใน repository ทำเครื่องหมาย deprecated อย่างเป็นทางการ
      ตอนนี้ก็ผ่านมานานพอสมควรแล้วหลังจาก fork จึงไม่ใช่ทุกคนที่จะรู้จัก exa และเจตนาของถ้อยคำนี้ก็ยิ่งไม่ชัดเจนมากขึ้น ดูเหมือนถึงเวลาปรับข้อความแล้ว เพราะมีปฏิกิริยาแบบนี้อยู่
    • คำว่า “maintained” ในที่นี้ไม่ได้หมายความว่า ls ไม่ได้รับการบำรุงรักษา แต่หมายถึงเป็น ทางเลือกทดแทน ที่ได้รับการบำรุงรักษา ในฐานะ fork ของ exa ซึ่งเป็นตัวทดแทน ls ที่ไม่ได้รับการบำรุงรักษาแล้ว
  • หลังเปลี่ยนมาใช้เชลล์ fish ปริมาณการใช้ ls ลดลง 100% คำสั่งในตัว Alt + l แสดงเนื้อหาในไดเรกทอรีได้ จึงมีประโยชน์มาก และทำให้ประวัติของเชลล์สะอาดขึ้นด้วย

    • ใน Bash ก็สามารถเพิ่มคำสั่งอย่าง ls ลงในตัวแปรสภาพแวดล้อม HISTIGNORE เพื่อรักษา ประวัติ ให้สะอาดขึ้นได้: https://superuser.com/questions/232885/can-you-share-wisdom-...
    • เป็นทิปที่ดี สิ่งที่ทำให้การใช้ ls ส่วนใหญ่หายไปใน fish คือการตั้งค่าให้รัน ls อัตโนมัติเมื่อเปลี่ยนไดเรกทอรี
      function ls_on_cd --on-variable PWD
      ls
      end
    • ผู้ใช้ Bash ก็สามารถ bind ปุ่มลัดแบบนี้ได้เหมือนกัน โดยผูกปุ่ม home row ฝั่งขวาเข้ากับฟังก์ชันอย่าง __bash_ctrl_n() แล้วให้เครื่องมือต่าง ๆ ใน dotfiles เขียนทับฟังก์ชันเหล่านี้ได้ เช่น ถ้าติดตั้ง Git ไว้ ก็จะตั้งให้ __bash_ctrl_e() รัน git status และ git log
    • ในสภาพแวดล้อมของผม ฟีเจอร์นี้น่าจะรัน eza เพราะผมตั้ง alias ให้ ls เป็น eza ไว้ สุดท้ายก็เหมือนรัน ls เฉย ๆ
    • พอรู้ว่าการรัน ls ส่วนใหญ่เกิดขึ้นทันทีหลัง cd เลยเพิ่มลงในไฟล์เริ่มต้น ตอนนี้แทบทุกครั้งที่ cd จะรัน ls อัตโนมัติ
      ใน Bash เรียก builtin cd "$@" && ls -l ในฟังก์ชัน cd() ส่วนใน fish เรียก builtin cd $argv แล้วถ้าไม่มีข้อผิดพลาดและไม่ใช่การย้ายไปโฮม ก็ให้รัน dir
  • โดยรวมแล้วไม่สะดวกกับเครื่องมือเทอร์มินัลที่บังคับใช้สีเพื่อแยกชนิดหรือคุณสมบัติของไฟล์ ดิสโทรต่าง ๆ ก็มักตั้งค่า ls มาแบบนั้น แต่ผมจะลบการตั้งค่านั้นแล้วใช้ค่าเริ่มต้น
    ผมใช้พื้นหลังเทอร์มินัลที่สบายตา แต่ color scheme แบบนี้มักชนกับพื้นหลังเสมอ หรือมีสีที่อ่านยากอยู่ด้วย เอาต์พุตของ ls หรือโปรแกรมทดแทนไม่จำเป็นต้องมีสี แค่ระดับที่ ls -AFC ให้มาก็พอแล้ว

    • ถ้าเครื่องมือต่าง ๆ ใช้ Base16 Framework[0] แทนโหมดสี “256 color” หรือ “RGB” ตามอำเภอใจ ปัญหาจะน้อยลงมาก เพราะเอาต์พุตจะแสดงด้วยสีที่เทอร์มินัลกำหนดไว้และคาดว่าอ่านได้
      [0] https://github.com/chriskempson/base16
      [1] https://tinted-theming.github.io/base16-gallery/
    • ผมตรงกันข้ามเลย พึ่งพาเอาต์พุตที่มีสีอย่างมาก
      ถึงอย่างนั้นก็ควรมีทางแก้ โดยตั้งค่าใด ๆ ให้ $NO_COLOR ก็พอ https://no-color.org
      การส่ง bug report ให้เครื่องมือที่ไม่ตรวจและไม่เคารพตัวแปรสภาพแวดล้อมนี้ถือว่าสมเหตุสมผลมาก
    • https://no-color.org
    • ใช้ vivid[1] เพื่อเลือกธีมที่เข้ากับพื้นหลังเทอร์มินัล แล้วโหลดตัวแปร LS_COLORS ที่สร้างขึ้นเข้าเชลล์ก็ได้
      [1]: https://github.com/sharkdp/vivid/
  • แปลกที่ README ไม่ได้เขียนว่า eza เป็น ฟอร์กของ exa

    • มีบอกว่า “ฟีเจอร์ของ eza ที่ไม่มีใน exa” อยู่ จึงมีการกล่าวถึงการมีอยู่ของมัน เพียงแต่ไม่มีลิงก์หรือบริบท
  • สงสัยว่าทำไมเวอร์ชันใหม่ ๆ ของยูทิลิตี GNU ถึงถูกทำออกมาภายใต้ ไลเซนส์ MIT เยอะขนาดนี้ ดูเหมือนจะมีค่อนข้างมาก

    • ผู้ใช้ Rust โดยรวมมีแนวโน้มจะเผยแพร่โค้ดภายใต้ ไลเซนส์แบบอนุญาตกว้าง ไม่รู้ว่ามีสถิติที่ตรวจสอบได้ง่ายไหม แต่แทบทุกอย่างใน crates.io ซึ่งเป็นคลังแพ็กเกจ Rust เป็น MIT หรือ Apache-2.0 และไลบรารียอดนิยมก็น่าจะเป็นแบบนั้นแน่นอน
    • โครงการ GNU ไม่ได้เป็นผู้คิดค้น ls ขึ้นมา GNU coreutils ซึ่งรวม ls ด้วย เดิมทีก็เป็นเวอร์ชันใหม่ของยูทิลิตี AT&T แบบ proprietary หรือยูทิลิตีที่ใช้ไลเซนส์ BSD
    • ที่เกี่ยวข้องกันคือ https://github.com/uutils/coreutils ซึ่งเป็น “การเขียน GNU coreutils ใหม่ด้วย Rust แบบข้ามแพลตฟอร์ม”
  • ทำไมโปรแกรมทดแทน ls ถึงต้องใช้ Kerberos กับ SSH?
    ดู ldd /usr/bin/eza แล้วพบว่าลิงก์กับไลบรารีค่อนข้างเยอะ เช่น libgit2, libgssapi_krb5, libmbedtls, libssh2, libkrb5, libcrypto, libzstd เป็นต้น

    • สำหรับสิ่งที่จำเป็นกับ ls แล้ว dependency เยอะเกินไปจริง ๆ
  • บนคีย์บอร์ด QWERTY การพิมพ์ eza เป็นชุดสามตัวอักษรที่ค่อนข้างแย่มาก ข้อดีอย่างหนึ่งของ ls คือเป็นชุดปุ่มที่พิมพ์ได้เร็วมาก
    จะสร้าง alias ก็ได้ แต่ด้วยเหตุผลอย่างความเข้ากันได้ มันรู้สึกแปลก ๆ

    • ตั้งแต่ราวปี 2015 ผมตั้ง alias ให้ eza และก่อนหน้านั้น exa เป็น ls, ll, lll มาโดยตลอด และไม่เคยเจอ ปัญหาความเข้ากันได้ เลย
      ผมติดตั้ง sl ไว้ด้วย เพื่อฝึกตัวเองไม่ให้พิมพ์ผิด
    • จากมุมมองผู้ใช้ Dvorak แล้ว eza ดูเหมือนจะเป็นการปรับปรุง เพราะบน Dvorak ls เทียบกับ QWERTY คือ p- ซึ่งทั้งคู่เป็นปุ่มนิ้วก้อยขวา
    • ช่วยอธิบายเพิ่มได้ไหมว่าทำไมการตั้ง alias ถึงแปลก?
    • จะตั้ง alias เป็นชื่ออะไรก็ได้ตามต้องการ
    • เวลาแบบนี้แหละที่ คีย์บอร์ด AZERTY เฉิดฉาย
  • ยังไงก็เถอะ ใครใช้ ls กัน? ก็แค่กด Tab เติมคำอัตโนมัติไปเรื่อย ๆ จนกว่าไฟล์ที่ต้องการจะโผล่มา
    ล้อเล่นน่ะ แต่ก็สงสัยว่าทำไมถึงอ้างว่า ls ไม่ได้รับการดูแลอีกต่อไปแล้ว

    • ดูเหมือนจะหมายถึง exa[0] ที่ไม่ได้รับการดูแลต่อแล้ว ไม่ใช่ ls
      [0]https://github.com/ogham/exa
    • ด้วยเหตุผลบางอย่าง มันกลายเป็นเหมือนมาตรฐานไปแล้วที่จะคิดว่าถ้าซอฟต์แวร์ไม่ได้อัปเดตเป็นประจำ ก็ถือว่าล้าสมัยโดยเนื้อแท้
    • แน่นอนว่า ls ยังคงได้รับการดูแลในฐานะส่วนหนึ่งของเชลล์หรือ coreutils
      แต่ eza เป็นตัวแยกสายของ exa และเท่าที่ผมรู้ exa ไม่ได้รับการดูแลต่อแล้ว
    • นี่คือการจงใจสับสนคำว่า “maintained” กับ “actively developed” เพื่อทำให้เครื่องมือเดิมดูเหมือนไม่ได้รับการดูแล