Sự khác biệt giữa hệ điều hành BSD và Linux ảnh hưởng đến các lệnh dòng trên macOS
Máy Tính

Homebrew Trên macOS: Giải Pháp Toàn Diện Cho Công Cụ Dòng Lệnh GNU Mạnh Mẽ

Khi bạn mở Terminal trên macOS, thật dễ dàng để hình dung mình đang làm việc trong một môi trường Linux đầy đủ. Tuy nhiên, các lệnh bạn quen thuộc có thể không hoạt động chính xác như mong đợi. Sự thật là, các công cụ dòng lệnh của macOS thường có những khác biệt đáng kể so với phiên bản GNU trên Linux do hệ điều hành này dựa trên BSD. Điều này có thể gây ra không ít phiền toái cho những ai thường xuyên chuyển đổi giữa hai hệ thống hoặc phụ thuộc vào các công cụ GNU cụ thể. May mắn thay, có một giải pháp đơn giản và hiệu quả: Homebrew. Bài viết này sẽ đi sâu vào nguyên nhân của vấn đề và cách Homebrew giúp bạn tối ưu hóa trải nghiệm dòng lệnh trên máy Mac của mình.

Vấn Đề Với Các Lệnh Mặc Định Trên macOS

Từ khi ra mắt OSX vào năm 2001, macOS đã được trang bị một bộ tiện ích dòng lệnh quen thuộc với người dùng Linux như grep, find, vim và nhiều lệnh khác. Tuy nhiên, chúng thường là các phiên bản BSD của mỗi chương trình, chứ không phải các phiên bản GNU mà hầu hết các bản phân phối Linux sử dụng. Mặc dù về cơ bản chúng tương thích, nhưng việc Apple sử dụng phần mềm BSD thay vì GNU tạo ra hai vấn đề chính.

Khác Biệt Giữa Phiên Bản BSD và GNU

Đầ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 các phần mở rộng lạ lẫm. Bạn thường có thể giải quyết những vấn đề này bằng cách đọc các trang hướng dẫn (man pages) hoặc đơn giản là thích nghi với hành vi của lệnh BSD. Tuy nhiên, 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 dual-boot hoặc sử dụng kết hợp các hệ thống Mac và Linux.

Sự khác biệt giữa hệ điều hành BSD và Linux ảnh hưởng đến các lệnh dòng trên macOSSự khác biệt giữa hệ điều hành BSD và Linux ảnh hưởng đến các lệnh dòng trên macOS

Các Công Cụ Dòng Lệnh BSD Thường Lỗi Thời

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

Thiếu Sót Một Số Lệnh Phổ Biến

Một vấn đề đáng kể hơn là macOS không đi kèm với phiên bản tương đương của mọi lệnh mà bạn có thể đã quen thuộc. Điều này không phải lúc nào cũng gây rắc rối, nhưng có một số thiếu sót đáng ngạc nhiên, chẳng hạn như công cụ tree để hiển thị cấu trúc thư mục. Đối với những nhà phát triển hay quản trị hệ thống, việc thiếu những công cụ cơ bản như vậy có thể làm giảm đáng kể hiệu suất công việc.

Tại Sao Cách Cài Đặt Truyền Thống Lại Khó Khăn?

Giải pháp cho vấn đề này trước đây là xây dựng từ mã nguồn (build from source): tải mã chương trình, chạy một script cấu hình, sau đó sử dụng lệnh make để biên dịch mọi thứ. Quy trình này thường phức tạp, dễ gặp lỗi và yêu cầu người dùng phải có kiến thức sâu rộng về hệ thống. Hoặc bạn có thể tìm kiếm một bản nhị phân đã được biên dịch sẵn cho kiến trúc của mình, nhưng quá trình này có thể tẻ nhạt và phần mềm biên dịch có thể không tương thích với môi trường của bạn.

Homebrew: “Người Bạn Thân” Của Lập Trình Viên Mac

Kể từ năm 2016, Homebrew đã trở thành 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à một trình quản lý gói giúp bạn cài đặt phần mềm mà không cần phải biên dịch từ mã nguồn.

Homebrew Là Gì và Hoạt Động Như Thế Nào?

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ần phụ thuộc mà một chương trình có thể yêu cầu để chạy, giúp quá trình cài đặt dễ dàng hơn rất nhiều so với việc xây dựng từ mã nguồn.

Homebrew cho phép bạn cài đặt một loạt các chương trình, không chỉ giới hạn ở Mac App Store. Điều này đã mở ra hệ sinh thái Mac cho nhiều ứng dụng mã nguồn mở mà người dùng Linux đã quen thuộc. Nhiều nhà phát triển phần mềm miễn phí thường không hài lòng với tính chất đóng của cửa hàng ứng dụng Apple, vì lý do thực tế hoặc ý thức hệ. Homebrew đã mở ra quyền truy cập vào phần mềm miễn phí chất lượng cao 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 macOS Ventura (13), Sonoma (14) và Sequoia (15).

Hướng Dẫn Cài Đặt Lệnh Bằng Homebrew

Sau khi bạn đã cài đặt Homebrew, việc thêm các lệnh còn thiếu trở nên vô cùng dễ dàng. Ví dụ, để cài đặt chương trình wget, bạn chỉ cần sử dụng lệnh sau:

brew install wget

Giao diện Terminal trên macOS hiển thị lệnh brew install wget để cài đặt công cụ tải dữ liệuGiao diện Terminal trên macOS hiển thị lệnh brew install wget để cài đặt công cụ tải dữ liệu

Nếu bạn cảm thấy cách này vẫn phức tạp, bạn có thể sử dụng giao diện người dùng Homebrew như Cork. Tuy nhiên, thực tế là nếu bạn đang tìm cách cài đặt và sử dụng phần mềm dòng lệnh, bạn sẽ cảm thấy thoải mái hơn khi sử dụng lệnh brew.

Homebrew Quản Lý Biến Môi Trường PATH

Trên Mac chạy chip Silicon (M-series), Homebrew cài đặt các chương trình vào /opt/homebrew/bin. Nó cũng sẽ thêm vị trí này vào biến môi trường PATH của bạn, điều này sẽ trông như sau:

...:/opt/homebrew/bin:.../usr/local/bin:...:/bin:...

Nói cách khác, các lệnh được cài đặt bởi Homebrew sẽ được ưu tiên, chạy thay vì bất kỳ lệnh trùng lặp nào được hệ thống cung cấp trong /bin, chẳng hạn.

Biến môi trường PATH trong Unix và tầm quan trọng của nó trong việc tìm kiếm chương trìnhBiến môi trường PATH trong Unix và tầm quan trọng của nó trong việc tìm kiếm chương trình

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ụ:

$ which find
/usr/bin/find

Tùy chọn -a sẽ hiển thị tất cả các vị trí của một lệnh trong PATH của bạn, vì vậy bạn có thể sử dụng nó để kiểm tra các bản sao và xác minh rằng bạn đang sử dụng phiên bản chính xác:

$ 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 bạn đang sử dụng phiên bản nào.

Quy Ước Đặt Tên Cho Các Công Cụ GNU

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 một tên khác để tránh xung đột. Ví dụ, gói Homebrew cho sed được gọi là gnu-sed, và nó cài đặt dưới dạng gsed:

Cài đặt gsed (phiên bản GNU của sed) bằng Homebrew và kiểm tra đường dẫn cài đặt trên macOSCài đặt gsed (phiên bản GNU của sed) bằng Homebrew và kiểm tra đường dẫn cài đặt trên macOS

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 của nó trong Sequoia ghi ngày tháng 6 năm 2020. Bạn có thể cài đặt nhiều công cụ cốt lõi của GNU bằng lệnh sau:

brew install coreutils

Hướng dẫn cài đặt Homebrew trên MacBook Air M2 để quản lý các gói phần mềmHướng dẫn cài đặt Homebrew trên MacBook Air M2 để quản lý các gói phần mềm

Những Lệnh Phổ Biến Bạn Nên Cài Đặt Qua Homebrew

Dưới đây là một số công cụ dòng lệnh phổ biến mà người dùng macOS thường xuyên cần và nên cài đặt thông qua Homebrew để có trải nghiệm tốt hơn.

tree – Công Cụ Hiển Thị Cấu Trúc Thư Mục

Lần đầu tiên tôi nhận ra có điều gì đó “không ổn” với các công cụ của macOS là khi tôi tìm đến tiện ích quen thuộc tree. Mặc dù tree không phải là thiết yếu, nhưng nó vô cùng 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 con bên dưới nó, giống như một lệnh ls được “nâng cấp”. Ngoại trừ việc nó sẽ không hoạt động trên một cài đặt macOS mặc định:

Lỗi "command not found: tree" trên Terminal macOS khi cố gắng sử dụng lệnh tree mặc địnhLỗi "command not found: tree" trên Terminal macOS khi cố gắng sử dụng lệnh tree mặc định

Trước đây, tôi thường giải quyết vấn đề này bằng một script shell thô sơ để thực hiện chức năng tương tự. Nhưng script đó thiếu tất cả các tùy chọn của tree, vốn rất phong phú:

Trang man page của lệnh tree hiển thị danh sách các tùy chọn phong phú để tùy chỉnh hiển thị cấu trúc thư mụcTrang man page của lệnh tree hiển thị danh sách các tùy chọn phong phú để tùy chỉnh hiển thị cấu trúc thư mục

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

Emacs – Trình Soạn Thảo Văn Bản Mạnh Mẽ

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

Giao diện trình soạn thảo văn bản GNU Emacs hoạt động trong môi trường TerminalGiao diện trình soạn thảo văn bản GNU Emacs hoạt động trong môi trường Terminal

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

find – Phiên Bản GNU Với Tính Năng Vượt Trội

Lệnh find là một trong số nhiều lệnh mà, 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 của nó. 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ư sau:

brew install findutils

Bạn nên biết rằng Homebrew cài đặt lệnh này dưới dạng gfind. Homebrew thường sử dụng quy ước này để thêm tiền tố “g” vào các công cụ tương đương GNU của các lệnh tích hợp sẵn để cả hai phiên bản có thể cùng tồn tại:

Kết quả lệnh which hiển thị đường dẫn của lệnh find mặc định và gfind (phiên bản GNU) trên macOSKết quả lệnh which hiển thị đường dẫn của lệnh find mặc định và gfind (phiên bản GNU) trên macOS

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

/opt/homebrew/opt/findutils/libexec/gnubin

Thư mục đó sẽ có một liên kết tượng trưng tên là “find” trỏ đến tệp thực thi “gfind” trong /opt/homebrew/bin. Hãy nhớ thêm nó vào trước /usr/bin trong PATH của bạn để đảm bảo shell của bạn tìm thấy phiên bản GNU trước tiên.

Kết Luận

Homebrew thực sự là một công cụ không thể thiếu đối với bất kỳ người dùng macOS nào thường xuyên làm việc với dòng lệnh hoặc đến từ môi trường Linux/Unix. Nó không chỉ giúp bạn dễ dàng cài đặt các công cụ dòng lệnh mạnh mẽ bị thiếu trên macOS mà còn cho phép bạn thay thế các phiên bản BSD cũ hoặc khác biệt bằng các phiên bản GNU hiện đại và quen thuộc hơn.

Với Homebrew, bạn có thể tạo một môi trường dòng lệnh tùy chỉnh và mạnh mẽ, tối ưu hóa cho quy trình làm việc của mình, loại bỏ những phiền toái do sự không nhất quán giữa BSD và GNU. Hãy khám phá và tận dụng tối đa Homebrew để biến Terminal trên Mac của bạn thành một trung tâm điều khiển mạnh mẽ và hiệu quả hơn bao giờ hết. Bạn đã sử dụng Homebrew để cài đặt những công cụ nào trên máy Mac của mình? Hãy chia sẻ kinh nghiệm và những lệnh yêu thích của bạn trong phần bình luận bên dưới!

Related posts

Giải Pháp Lưu Trữ Dữ Liệu Ngoài Đám Mây: Kiểm Soát Toàn Diện Quyền Riêng Tư và Chi Phí

Administrator

Biến MacBook Thành Máy Tính Để Bàn Hoàn Chỉnh: Dễ Dàng Hơn Bạn Tưởng

Administrator

Snipping Tool Windows 11: Tính năng Trích xuất Văn bản OCR Đột phá

Administrator