Homebrew mang đến cho bạn những điều tốt nhất của Linux trên máy Mac

Tác giả Starlink, T.Tư 20, 2025, 02:35:15 CHIỀU

« Chủ đề trước - Chủ đề tiếp »

0 Thành viên và 1 Khách đang xem chủ đề.

Bia tự pha chế là nơi trái tim hướng về.

    Các lệnh macOS thường khác với các lệnh Linux do sự không nhất quán giữa BSD và GNU.
    Homebrew giúp đơn giản hóa việc cài đặt phần mềm dòng lệnh bị thiếu trên macOS.
    Homebrew giúp quản lý môi trường PATH cho các lệnh đã cài đặt, tránh trùng lặp và đảm bảo ưu tiên chính xác.

Mở Terminal trên macOS và bạn có thể dễ dàng tưởng tượng rằng bạn đang chạy trong môi trường Linux hoàn chỉnh. Tuy nhiên, những lệnh đó không hoàn toàn giống với những gì bạn thường dùng. May mắn thay, có một cách khắc phục dễ dàng.


1. Vấn đề của macOS là gì?

Kể từ khi OSX ra mắt vào năm 2001, macOS đã được cung cấp một bộ tiện ích dòng lệnh quen thuộc với bất kỳ ai đã sử dụng Linux: grep, find, vim và nhiều tiện ích khác. Đây thường là phiên bản BSD của mỗi chương trình, thay vì phiên bản GNU mà hầu hết các bản phân phối Linux đều có, nhưng chúng phần lớn tương thích.

Tuy nhiên, việc Apple sử dụng phần mềm BSD thay vì GNU gây ra hai vấn đề. Đầu tiên, một số phiên bản BSD hoạt động hơi khác một chút, với các tùy chọn thay thế, hành vi không mong muốn hoặc tiện ích mở rộng không quen thuộc. Bạn thường có thể giải quyết các vấn đề này bằng cách đọc các trang hướng dẫn phù hợp hoặc chỉ cần thích ứng với hành vi lệnh BSD. Nhưng những sự không nhất quán này có thể khó quản lý, đặc biệt nếu bạn đang khởi động kép hoặc sử dụng kết hợp các hệ thống Mac và Linux.

Đôi khi, những khác biệt này là do tuổi của các công cụ; phiên bản Mac BSD có xu hướng cũ hơn các phiên bản GNU tương đương. Apple cũng không phải lúc nào cũng cập nhật các lệnh này thường xuyên, vì vậy chúng có thể trở nên lỗi thời hơn giữa các bản phát hành hệ điều hành.

Một vấn đề quan trọng hơn là macOS không cung cấp phiên bản tương đương của mọi lệnh mà bạn có thể đã quen. Điều này không phải lúc nào cũng là vấn đề, nhưng có một số thiếu sót đáng ngạc nhiên, chẳng hạn như công cụ cây.

Giải pháp cho vấn đề này trước đây là xây dựng từ nguồn: tải xuống mã chương trình thực tế, chạy tập lệnh cấu hình, sau đó sử dụng lệnh make để biên dịch mọi thứ. Ồ, và cầu nguyện rằng mọi thứ đều hoạt động chính xác trong môi trường của bạn.

Ngoài ra, bạn có thể thử tìm một tệp nhị phân được biên dịch trước cho kiến trúc của mình, nhưng quá trình này có thể rất tẻ nhạt và phần mềm được biên dịch có thể không tương thích với môi trường của bạn. Tuy nhiên, hiện nay, có nhiều cách tốt hơn để đưa các lệnh macOS của bạn lên mức hoàn hảo.

2. Làm thế nào để có được lệnh bị mất

Từ năm 2016, Homebrew đã cung cấp cách tốt nhất để cài đặt phần mềm dòng lệnh trên máy Mac của bạn. Homebrew là trình quản lý gói cho phép bạn cài đặt phần mềm mà không cần phải biên dịch từ nguồn. Giống như bất kỳ trình quản lý gói nào, Homebrew đảm nhiệm việc biên dịch và cài đặt. Nó cũng xử lý mạng lưới các phụ thuộc mà một chương trình có thể yêu cầu để chạy, do đó dễ hơn nhiều so với việc xây dựng từ nguồn.

Bạn có thể sử dụng Homebrew để cài đặt nhiều chương trình, không chỉ những chương trình giới hạn trong Mac App Store. Điều này đã mở ra hệ sinh thái Mac cho nhiều ứng dụng nguồn mở mà người dùng Linux thường dùng. Nhiều nhà phát triển phần mềm miễn phí không hài lòng với bản chất khép kín của cửa hàng Apple, vì lý do thực tế hoặc lý tưởng. Homebrew đã mở ra khả năng truy cập vào nhiều phần mềm miễn phí chất lượng hơn bao giờ hết.

Phiên bản hiện tại—4.4—hỗ trợ các bản phát hành Mac OS Ventura (13), Sonoma (14) và Sequoia (15).

Sau khi bạn đã cài đặt Homebrew, việc thêm các lệnh còn thiếu rất dễ dàng. Ví dụ, để cài đặt chương trình wget, hãy sử dụng lệnh này:

Mã nguồn [Chọn]
brew install wget

Nếu vẫn còn quá phức tạp, bạn có thể sử dụng Homebrew GUI như Cork. Nhưng hãy thực tế: nếu bạn muốn cài đặt và sử dụng phần mềm dòng lệnh, bạn sẽ thoải mái hơn khi sử dụng lệnh brew.

Trên Silicon Mac, Homebrew cài đặt chương trình vào /opt/homebrew/bin. Nó cũng sẽ thêm vị trí đó vào PATH của bạn, do đó trông giống như sau:

Mã nguồn [Chọn]
...:/opt/homebrew/bin:.../usr/local/bin:...:/bin:...
Nói cách khác, các lệnh được cài đặt trong Homebrew sẽ được ưu tiên chạy thay cho bất kỳ lệnh trùng lặp nào do hệ thống cung cấp trong /bin chẳng hạn.

Bạn có thể sử dụng lệnh which để kiểm tra vị trí của bất kỳ chương trình nào, ví dụ:
 
Mã nguồn [Chọn]
$ which find
/usr/bin/find

Tùy chọn -a sẽ hiển thị tất cả vị trí của lệnh trong PATH, do đó bạn có thể sử dụng tùy chọn này để kiểm tra các lệnh trùng lặp và xác minh rằng bạn đang sử dụng phiên bản chính xác:
   
Mã nguồn [Chọn]
$ which -a [...]
Hãy nhớ rằng hầu hết các lệnh đều chấp nhận tùy chọn --version hoặc --help có thể cho bạn biết phiên bản bạn đang sử dụng. Một chi tiết quan trọng khác là các công cụ GNU thường được cài đặt với tên khác nhau để tránh xung đột. Ví dụ, gói Homebrew cho sed được gọi là gnu-sed và cài đặt dưới dạng gsed:


Phiên bản BSD của sed không thực sự có số phiên bản, nhưng trang hướng dẫn trong Sequoia ghi là tháng 6 năm 2020.
   
Mã nguồn [Chọn]
brew install coreutils
3. Phần mềm bị thiếu cần chú ý

Lần đầu tiên tôi nhận ra có điều gì đó hơi "sai" với công cụ của macOS là khi tôi tìm đến tiện ích tệp đáng tin cậy, tree. Bây giờ, tree không phải là điều cần thiết, nhưng nó cực kỳ hữu ích. Lệnh này hiển thị toàn bộ hệ thống phân cấp của một thư mục, in tất cả các tệp và thư mục bên dưới nó, giống như một ls siêu nạp. Ngoại trừ việc nó sẽ không làm điều đó trên bản cài đặt macOS vanilla:


Tôi đã từng giải quyết vấn đề này bằng một tập lệnh shell thô sơ để thực hiện cùng một chức năng. Nhưng tập lệnh đó thiếu tất cả các tùy chọn của tree, mặc dù chúng rất phong phú:


Homebrew cho phép bạn cài đặt tree, cung cấp lệnh đầy đủ trong tất cả vinh quang của nó. Đây là phiên bản mới nhất của tree: 2.2.1 được phát hành vào tháng 11 năm 2024.

Một chương trình rất phổ biến khác cũng dễ nhận thấy là thiếu Emacs. Đúng là Emacs cũng thường không có trong các bản phân phối Linux hiện đại, nhưng điều đó không làm cho việc thiếu nó khỏi macOS trở nên hợp lý hơn.


Emacs là trình soạn thảo văn bản phổ biến và là giải pháp thay thế mạnh mẽ cho vim, vì vậy bạn có thể muốn sử dụng hoặc dùng thử nếu chưa từng dùng. May mắn thay, Emacs chỉ là mặt khác của một bản cài đặt emacs nhanh.

Lệnh find là một trong nhiều lệnh, mặc dù có sẵn trên macOS, nhưng hoạt động hơi khác một chút trong phiên bản BSD. Hai phiên bản hỗ trợ các tùy chọn và hành vi hơi khác nhau, khiến việc chuyển đổi giữa chúng trở nên khó khăn.

Lệnh find của Homebrew là một phần của gói findutils, vì vậy bạn có thể cài đặt nó như thế này:

Mã nguồn [Chọn]
brew install findutils
Bạn nên biết rằng Homebrew cài đặt lệnh dưới dạng gfind. Homebrew thường sử dụng quy ước này để thêm tiền tố GNU-equivalents của lệnh tích hợp với "g" để cả hai phiên bản có thể cùng tồn tại:


Điều này nhằm đảm bảo BSD mặc định tìm kiếm được ưu tiên, nhưng có thể gây nhầm lẫn và khó nhớ. Nếu bạn muốn sử dụng GNU find theo mặc định, bạn có thể thêm thư mục này vào PATH của mình:

Mã nguồn [Chọn]
/opt/homebrew/opt/findutils/libexec/gnubin
Thư mục đó phải có liên kết tượng trưng có tên "find" trỏ đến tệp thực thi "gfind" trong /opt/homebrew/bin. Hãy nhớ thêm nó trước /usr/bin trong đường dẫn của bạn để đảm bảo shell của bạn tìm thấy phiên bản GNU trước.

Homebrew cho phép bạn cài đặt các lệnh quan trọng, bao gồm các lệnh GNU tương đương mà bạn có thể quen dùng hơn, cung cấp hành vi nâng cao hoặc thay thế.