- Giới thiệu nhiều công cụ dòng lệnh hiện đại giúp nâng cao hiệu suất làm việc trên Linux
- Bao gồm nhiều công cụ thay thế hiện đại hoặc tăng cường các lệnh Unix truyền thống, đồng thời tập trung vào hiệu năng và được phát triển bằng Rust, Go, v.v.
Công cụ xem và duyệt tệp
bat : phiên bản nâng cấp của lệnh cat với syntax highlighting và tích hợp git mạnh hơn
exa : trình xem danh sách tệp hiện đại thay thế ls/tree, nhưng hiện đã ngừng được bảo trì
eza : fork của exa, cung cấp ls/tree hiện đại
lsd : ls thế hệ mới, hỗ trợ tương thích với cách dùng cũ và đầu ra đẹp hơn
broot : trình duyệt tệp dạng cây thư mục với khả năng điều hướng được tăng cường
nnn : trình quản lý tệp trong terminal nhẹ và nhanh
Phân tích dung lượng tệp và thư mục
ncdu : cung cấp giao diện du trực quan dựa trên văn bản
dust : giải pháp thay thế du dễ dùng hơn được viết bằng Rust
duf : công cụ phân tích dung lượng đĩa có khả năng sử dụng tốt hơn so với df truyền thống
Tìm kiếm tệp và mã nguồn
fd : thay thế find ngắn gọn và nhanh, rất dễ dùng
ripgrep : công cụ thay thế grep siêu nhanh có hỗ trợ gitignore
ag : công cụ tìm kiếm mã tương tự ack nhưng nhanh hơn
fzf : công cụ tìm kiếm mờ đa dụng, có thể dùng trong pipeline và nhiều ngữ cảnh khác
bfs : giải pháp thay thế find dựa trên breadth-first
Trình xem Git/diff trong terminal
delta : trực quan hóa kết quả git và diff để dễ đọc hơn
Lịch sử và xử lý lệnh
mcfly : cải tiến đột phá cho tìm kiếm và duyệt lịch sử shell, nâng cao chất lượng tìm kiếm và cung cấp UI trực quan
Xử lý dữ liệu
choose : giải pháp thay thế trực quan và nhanh hơn cut và một phần awk
jq : trình phân tích dữ liệu dùng như sed dành riêng cho JSON
sd : công cụ thay thế sed với find/replace thân thiện hơn
Giám sát hệ thống/tiến trình
bottom : trình giám sát hệ thống và tiến trình dạng đồ họa đa nền tảng
glances : phiên bản cải tiến của top/htop
gtop : trình giám sát hệ thống kiểu dashboard trong terminal
procs : lệnh thay thế ps được viết bằng Rust
Benchmark và mạng
hyperfine : công cụ tự động hóa benchmark CLI
gping : công cụ ping có khả năng xuất biểu đồ
HTTP client
httpie : HTTP client hiện đại và thân thiện cho CLI, phù hợp để kiểm thử API cho lập trình viên
curlie : công cụ kết hợp sức mạnh của curl với tính dễ dùng của httpie
xh : công cụ thay thế httpie tập trung vào hiệu năng
Di chuyển thư mục và trình soạn thảo
zoxide : lệnh cd thông minh lấy cảm hứng từ z
micro : trình soạn thảo văn bản trong terminal với các tính năng hiện đại
Tiện ích CLI mới xuất hiện
up : công cụ pipeline xem trước theo thời gian thực, có thể kiểm tra ngay đầu ra lệnh
Công cụ trợ giúp và tài liệu
ManKier : man page dạng tóm tắt với phần giải thích lệnh gọn gàng
tldr : bản tóm tắt man page ngắn gọn, tập trung vào ví dụ
tealdeer : triển khai tldr bằng Rust với tốc độ chạy nhanh
explainshell : tự động phân tích tham số lệnh và giải thích ý nghĩa theo cách trực quan
cheat.sh : dịch vụ trợ giúp trực tuyến tích hợp tldr và cheatsheet
Công cụ GUI
baobab : trình phân tích dung lượng đĩa dựa trên GUI
stacer : công cụ GUI tối ưu hóa và giám sát hệ thống, bao gồm quản lý dịch vụ
1 bình luận
Ý kiến trên Hacker News
Có thể các công cụ này khách quan mà nói là tốt hơn, nhưng tôi nhận ra rằng mỗi lần cài lại OS, dựng VM hay SSH vào máy là lại phải thiết lập chúng, đúng kiểu khổ vô tận. Việc phải cấu hình cho từng môi trường rất mệt mỏi, và tôi cũng không muốn ở chỗ này dùng công cụ mới, chỗ khác lại trộn với công cụ truyền thống. Học cho thật vững các công cụ cổ điển mới là cách khiến cuộc sống dễ thở nhất
Có người dành phần lớn thời gian trên chính máy tính của mình nên giá trị của những cải tiến tiện dụng như thế này là rất lớn. Dù vậy, họ vẫn biết dùng các công cụ cổ điển ở mức đủ tốt, nên thỉnh thoảng làm việc trên server khác cũng không thành vấn đề. Không phải ai cũng là sysadmin phải đăng nhập vào đủ loại server suốt cả ngày
Có những công cụ tốt hơn hẳn đến mức dù cài đặt hơi phiền vẫn hoàn toàn xứng đáng. Tôi dùng thành thạo công cụ cổ điển, nhưng
fdhayripgrepvẫn luôn tốt hơnLý do tôi thật sự thích Nix là vì nó cho phép có cùng một thiết lập gần như ở mọi môi trường (miễn là môi trường tôi dùng là Linux hoặc macOS, tôi chỉ quan tâm hai cái đó). Có nhiều cách cài Nix không cần quyền root, nên tôi có thể tái tạo nguyên xi môi trường của mình ở bất cứ đâu. Tất nhiên, nếu không có Nix thì công cụ cổ điển vẫn dùng tốt. Không phải chọn một trong hai, mà có thể có cả hai
Khi cài lại OS thì kiểu gì cũng phải cài các gói cần thiết bằng
apt-get,pacman,dnf,brewcác thứ, rồi còn phải tự cài browser, editor của riêng mình nữa. SSH vào thì cũng đâu dùng được GUI, nhưng đó không phải lý do để tránh công cụ GUI. Dù bộ công cụ ở môi trường cá nhân và môi trường dùng chung có khác nhau thì tôi cũng không thấy là vấn đề lớn. Ví dụbatkhông hẳn thay thế hoàn toàncat, mà chỉ thêm syntax highlight để cuộc sống dễ chịu hơn. Nếu chưa cài thì đơn giản là đừng dùngTheo tôi, nếu nhìn theo triết lý UNIX “làm tốt một việc”, thì việc có thể dễ dàng thay thế bằng một phương án tốt hơn chính là tinh thần cốt lõi của các tiện ích đơn giản này. Học công cụ cổ điển trước là đúng nếu xét cho sự nghiệp, nhưng tôi nghĩ nhất định cũng nên học các lựa chọn mới. Với tôi, những công cụ tiết kiệm thời gian như
fd(thayfind),sd(thaysed) hữu ích hơn hẳn so vớibathayezaVới người phải truy cập hàng trăm server trên nhiều mạng và của nhiều khách hàng, gần như không đáng để dùng công cụ tùy biến. Lý do là 90% môi trường không cài sẵn những thứ đó. Tôi chỉ thêm đúng vài thứ vào
ansible-configđể triển khai bằng tự động hóa, và giữ danh sách thật ngắn gọn. 95% hệ thống tôi quản lý là Debian hoặc Ubuntu nên baseline gần như giống nhau, rồi tôi chỉ thêmack,etckeeper,vim,pv,dstatnhững thứ như vậyTừ “server” ở đây mới là điểm mấu chốt. Phần lớn các chương trình kiểu cải tiến nhẹ cho sysadmin có thể không quá đáng giá, nhưng một số lại là dev tool thực thụ cho môi trường phát triển, nên chỉ cần cài trên số ít máy dùng để lập trình là được. Tiêu biểu như
ripgrep(recursive grep rất mạnh),jq(trình xử lý JSON mà bộ công cụ Unix mặc định không có lựa chọn thay thế),hyperfine(benchmarking)Làm việc qua lại giữa Windows và Linux khiến tôi thấy các công cụ đa nền tảng xuất sắc như
ripgrepcực kỳ tiệnTôi tự hỏi có công cụ hay phần mở rộng SSH nào thực sự có thể tự động mang những app này vào phiên SSH từ xa không. Nếu là binary nhỏ thì có thể copy vào thư mục tạm để dùng, và cũng có thể hình dung chuyện tự động hóa quy trình đó. Nhưng vấn đề là có vướng bảo mật hay không, và có cần thêm quyền gì không. Rốt cuộc thì tính portable của các app này mới là mấu chốt. Tôi cũng thường xuyên nghĩ về chuyện này
emacsgần như hoạt động như một hệ điều hành, nên ở bất kỳ hệ thống nào bạn cũng có thể có một môi trường quen thuộc. Câu “GNU is my operating system, linux is just the current kernel” cũng từ đó mà ra. Ở góc nhìn của một admin kỳ cựu, đó là lý do tôi khuyên người mới học Linux hãy bắt đầu bằng lệnhinfovà đọc hết manual của nó. Làm vậy có thể vượt xa phần lớn admin khác. Khi biết công cụ tích hợp sẵn là gì thì manual cũng rất tốt, việc viết script trở nên dễ dàng, và đó chính là trung tâm của triết lý Linux. Đã từng có thời không có cảnano, chỉ cóvi, nhưng ngày nay thêm cả editor TUI bằng tự động hóa CI/CD cũng rất đơn giảnTôi không mấy đồng cảm với những bình luận kiểu “tôi là kiểu người như thế này”. Có rất nhiều người không quan tâm chuyện bạn không cài công cụ tùy biến trên máy từ xa. Ý ở đây là hãy cài chúng ít nhất trên máy local của bạn để hưởng lợi ích
Tôi nghĩ nên có thêm một cột trong bảng là “công cụ này giải quyết vấn đề gì”. Còn kiểu “được viết bằng Rust” thì tôi không xem là điểm khác biệt đáng kể
Tôi từng có một trải nghiệm dở khóc dở cười trong cuộc họp công ty khi nghe người ta giải thích rằng “viết bằng Go” là điểm khác biệt. #facepalm
Nhiều mục trong bảng thực ra có nhắc đến vấn đề cụ thể như “syntax highlight”, “giao diện
ncurses”, “trực quan hơn”. Chỉ là các mô tả kiểu “viết bằng Rust”, “modern”, “better” thì tôi thấy không giúp ích gìMục đích hàng đầu của đa số công cụ là cải thiện UX
Dùng giấy phép không phải GPL cũng không phải là điểm khác biệt
Khá nhiều công cụ trong số này còn dùng được trên Windows, đó là một điểm hay
Những danh sách công cụ kiểu này lúc nào cũng vui. Có lẽ đa số mọi người sẽ tìm được ít nhất một hoặc hai công cụ ở đây hữu ích cho mình. Cá nhân tôi xem
ripgrepvàjqlà thiết yếu.ripgreplà trình thay thếgreptốt nhất theo kiểu drop-in, cònjqgiải quyết đúng bài toán mà tôi thực sự cần. Tôi cũng đang tính thửlsdvàdust. Dù công cụ mới không trực tiếp cần cho tôi, tôi vẫn biết ơn việc mọi người bỏ thời gian vào chúng. Việc cả cộng đồng cùng làm cho hộp đồ nghề chung tốt hơn từng chút một thật đáng nểTôi có lẽ sẽ chọn
fzfđầu tiên. Tôi thích nó hơn hẳnrghayjqripgrephoạt động khácgrep, nên trên thực tế không phải là thay thế drop-in. Nó là một chương trình tuyệt vời, nhưng không hoàn toàn tương thíchNhững admin Linux như tôi ai cũng có một danh sách chắt lọc kiểu này. Tôi thiên về một stack dựa trên GPL, và đặc biệt thích định dạng của ikrima.dev
Tôi sống trong terminal, nhưng các công cụ này либо không giải quyết vấn đề tôi đang cần ngay lúc này, либо không có sẵn trên hệ thống của tôi, thế mà vẫn có hàng chục nghìn sao GitHub. Tôi thật sự không hiểu vì sao chúng lại nổi tiếng đến vậy
Người sống giữa thư viện âm nhạc cũng có thể thấy khó hiểu khi những nghệ sĩ không hợp gu mình hoặc không có trong thư viện của mình lại bán được hàng triệu bản. Nói vui vậy thôi, tôi muốn hỏi là bạn đã thật sự thử dùng mấy công cụ này chưa. Tôi trước đây cũng không hiểu vì sao người ta dùng
vim, nhưng khi dùng nghiêm túc rồi thì tôi hiểu ngayKhông dùng
fzfà? Nghe như sống trong terminal sẽ rất vất vả đấy. Hữu ích nhất là qua các shell plugin, bạn có thể dùngCtrl+Rđể fuzzy searchbash_history, hayCtrl+Tđể fuzzy search file trong thư mục hiện tại, chứ không chỉ chạy trực tiếp nóBộ công cụ Unix cốt lõi vốn đã rất chắc chắn, nên chỉ với công cụ mặc định cũng đủ làm việc. Nhiều công cụ thay thế đúng là tốt hơn, nhưng không phải bắt buộc, hơn nữa đa số lại không được cài sẵn
Hỏi thật vì tò mò: với các công cụ Unix tích hợp sẵn, có cách thanh lịch nào để recursive grep chỉ trên một phần mở rộng nhất định mà bỏ qua file ẩn (
.gitchẳng hạn) không? Ví dụ lệnhrg -g '*.foo' barlà mẫu tôi dùng cực kỳ thường xuyên. Tương tự vớifdđể tìm file theo regex hay glob. Tôi chưa tìm ra cách gọn gàng nào chỉ với công cụ mặc địnhTôi tò mò không biết bạn làm loại công việc gì trong terminal cả ngày mà lại không có nhu cầu cải thiện bộ công cụ. Hay là bạn tự viết mọi công cụ mình dùng?
Ở dark mode, chữ của link quá khó nhìn nên rất khó đọc
Tôi nghĩ chỉ có
jqlà thực sự giải quyết một vấn đề mà công cụ cũ không xử lý được. Còn lại phần lớn chỉ là khác biệt về sở thích, hiệu năng, highlight hay việc được viết bằng RustTôi rất muốn có một “bộ công cụ” mà cùng một team phát hành, với thiết kế nhất quán về tham số, màu sắc, bảng biểu các thứ
Tôi đã dùng
htopthay chotoptrong thời gian dài vì thấy dễ tiếp cận hơn, nhưnghtopmặc định không hiển thị kernel thread nên từng cản trở tôi tìm nguyên nhân sự cố. Từ đó tôi quay lạitopvì nó cho thấy đầy đủ thông tin và đáng tin cậy hơn. Tôi nghĩ các UI nhưhtop/btopkhá giống kiểu phô diễn hơn là cần thiếtBài này là từ năm 2023. Phần lớn “công cụ hiện đại” có thể giờ đã được cập nhật, hoặc đã có thứ mới thời thượng hơn xuất hiện
Có nhiều công cụ đến mức chỉ cần một nửa sống sót thôi cũng đã đủ đáng giá
Trải nghiệm của tôi lại ngược hẳn. Phần lớn các công cụ này, nếu chịu bỏ thời gian học cho tử tế, rốt cuộc cũng chỉ là “phát minh lại” bộ công cụ GNU mặc định vốn đã cực kỳ mạnh mẽ thêm một lần nữa