Image default
Máy Tính

Tối ưu dòng lệnh macOS: Khắc phục khác biệt với Linux bằng Homebrew

Khi mở Terminal trên macOS, nhiều người dùng thường có cảm giác như đang làm việc trong một môi trường Linux đầy đủ. Tuy nhiên, không ít người nhanh chóng nhận ra rằng các lệnh dòng lệnh trên macOS không hoàn toàn giống với những gì họ đã quen thuộc trên Linux. Điều này đôi khi gây ra sự khó chịu và cản trở quy trình làm việc. May mắn thay, có một giải pháp đơn giản và hiệu quả để giải quyết vấn đề này, giúp bạn tối ưu hóa trải nghiệm dòng lệnh trên hệ điều hành của Apple. Bài viết này sẽ đi sâu vào nguyên nhân của sự khác biệt và hướng dẫn bạn cách sử dụng Homebrew, một trình quản lý gói mạnh mẽ, để biến Terminal macOS trở thành một công cụ mạnh mẽ và linh hoạt hơn, tiệm cận với môi trường Linux mà bạn mong muốn.

Tại sao dòng lệnh macOS khác biệt với Linux?

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

Đầ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 không quen thuộc. Bạn thường có thể giải quyết những vấn đề này bằng cách đọc các trang man tương ứng 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ể gây khó khăn trong việc quản lý, đặc biệt nếu bạn đang sử dụng song song cả Mac và Linux. Đôi khi, những khác biệt này còn bắt nguồn từ tuổi đời của các công cụ; các phiên bản BSD trên Mac thườ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 lỗi thời giữa các bản phát hành hệ điều hành.

Vấn đề đáng kể 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 thuộc. Mặc dù điều này không phải lúc nào cũng là một 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ụ tree để hiển thị cấu trúc thư mục.

Trong quá khứ, giải pháp cho vấn đề này là “build from source”: tải xuống mã nguồn của chương trình, chạy một tập lệnh 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 và dễ gặp lỗi. Một lựa chọn khác là tìm một bản binary đã được biên dịch sẵn cho kiến trúc của bạn, 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. Tuy nhiên, ngày nay, đã có những cách tốt hơn để đưa các lệnh dòng lệnh trên macOS của bạn đạt đến mức mong muốn.

Homebrew: Giải pháp hoàn hảo cho các lệnh bị thiếu trên macOS

Kể từ năm 2016, Homebrew đã trở thành phương pháp 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 (package manager) cho phé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. 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 (dependencies) mà một chương trình có thể yêu cầu để chạy, giúp quá trình này dễ dàng hơn nhiều so với việc biên dịch thủ công.

Bạn có thể sử dụng Homebrew để cài đặt nhiều loại 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í không mặn mà với tính chất đóng của cửa hàng Apple, vì lý do thực tế hoặc tư tưởng. Homebrew đã mở ra cánh cửa tiếp cận với nhiều phần mềm miễn phí chất lượng hơn bao giờ hết.

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

Sau khi cài đặt Homebrew, việc thêm các lệnh bị thiếu trở nên 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

Màn hình Terminal macOS hiển thị lệnh brew install wget để cài đặt công cụ wgetMàn hình Terminal macOS hiển thị lệnh brew install wget để cài đặt công cụ wget

Nếu bạn vẫn cảm thấy việc sử dụng dòng lệnh quá phức tạp, bạn có thể dùng một giao diện người dùng đồ họa (GUI) cho Homebrew như Cork. Tuy nhiên, nếu bạn đang muốn cài đặt và sử dụng phần mềm dòng lệnh, bạn sẽ nhanh chóng làm quen và cảm thấy thoải mái với lệnh brew quen thuộc.

Trên Mac dùng chip Apple Silicon (M1, M2, v.v.), Homebrew cài đặt các chương trình vào /opt/homebrew/bin. Nó cũng sẽ tự động thêm vị trí này vào biến môi trường PATH của bạn, do đó PATH sẽ có dạng tương tự như:

...:/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.

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, giúp bạn kiểm tra các lệnh trùng lặp và xác minh rằng bạn đang sử dụng đúng phiên bả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 để 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 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 cài đặt dưới dạng gsed:

Terminal macOS cho thấy quá trình cài đặt gsed bằng Homebrew và kiểm tra đường dẫn của gsedTerminal macOS cho thấy quá trình cài đặt gsed bằng Homebrew và kiểm tra đường dẫn của gsed

Phiên bản sed của BSD không thực sự có số phiên bản, nhưng trang man của nó trong Sequoia ghi ngày là tháng 6 năm 2020. Bạn cũng có thể cài đặt bộ công cụ cốt lõi của GNU (coreutils) để có các phiên bản GNU của các lệnh quen thuộc:

brew install coreutils

Những công cụ dòng lệnh quan trọng thường bị thiếu trên macOS

Lần đầu tiên tôi nhận ra có điều gì đó “không ổn” với bộ công cụ của macOS là khi tôi muốn sử dụng tiện ích tree đáng tin cậy. 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 bên dưới nó, giống như một lệnh ls được tăng cường sức mạnh. Nhưng nó sẽ không hoạt động trên một cài đặt macOS tiêu chuẩn:

Màn hình dòng lệnh macOS thông báo lỗi 'command not found' khi chạy lệnh treeMàn hình dòng lệnh macOS thông báo lỗi 'command not found' khi chạy lệnh tree

Trước đây, tôi thường giải quyết vấn đề này bằng một tập lệnh shell đơn giản để thực hiện chức năng tương tự. Nhưng tập lệnh đó 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 và chức năng phong phúTrang man page của lệnh tree hiển thị danh sách các tùy chọn và chức năng phong phú

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 của 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.

Một chương trình rất phổ biến khác cũng bị thiếu một cách đáng chú ý là Emacs. Đúng là Emacs cũng thường bị 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 nó bị bỏ qua khỏi macOS trở nên dễ hiểu hơn.

Giao diện trình soạn thảo văn bản GNU Emacs đang mở trong cửa sổ TerminalGiao diện trình soạn thảo văn bản GNU Emacs đang mở trong cửa sổ 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 hoặc thử nó nếu chưa từng. May mắn thay, Emacs chỉ cách một lệnh brew install emacs nhanh chóng.

Lệnh find là một trong 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 lưu ý rằng Homebrew cài đặt lệnh này dưới dạng gfind. Homebrew thường sử dụng quy ước tiền tố “g” cho các phiên bản 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:

Kiểm tra đường dẫn của lệnh find và gfind trên macOS bằng lệnh whichKiểm tra đường dẫn của lệnh find và gfind trên macOS bằng lệnh which

Điều này nhằm đảm bảo phiên bản 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 GNU find 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 (symlink) tên “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.

Tận dụng Homebrew để nâng tầm trải nghiệm dòng lệnh macOS

Homebrew không chỉ đơn thuần là một trình cài đặt gói; nó là một cánh cửa mở ra toàn bộ thế giới các công cụ dòng lệnh mạnh mẽ và linh hoạt cho người dùng macOS. Từ việc khắc phục những khác biệt nhỏ giữa các phiên bản lệnh BSD và GNU, cho đến việc bổ sung các tiện ích quan trọng bị thiếu như tree hoặc trình soạn thảo Emacs, Homebrew đều mang đến giải pháp hiệu quả.

Bằng cách sử dụng Homebrew, bạn có thể dễ dàng cài đặt các lệnh thiết yếu, bao gồm cả các phiên bản GNU mà bạn có thể đã quen thuộc hơn, cung cấp hành vi nâng cao hoặc thay thế. Điều này giúp đồng bộ hóa môi trường làm việc dòng lệnh của bạn giữa macOS và Linux, tối ưu hóa quy trình phát triển và tăng cường hiệu suất làm việc.

Với Homebrew, bạn không còn phải lo lắng về việc các lệnh cơ bản trên macOS không hoạt động như mong đợi hay thiếu đi các công cụ cần thiết. Hãy khám phá và tận dụng sức mạnh của Homebrew để biến Terminal trên chiếc Mac của bạn thành một môi trường dòng lệnh chuyên nghiệp 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? Hãy chia sẻ kinh nghiệm của bạn trong phần bình luận bên dưới!

Related posts

Khám Phá 7 Thuộc Tính CSS Mạnh Mẽ Nhưng Ít Được Biết Đến: Nâng Tầm Giao Diện Web Của Bạn

Administrator

Đánh giá Lenovo Yoga Slim 9i 14 Gen 10: Sức Mạnh AI, Màn Hình 4K OLED Đỉnh Cao và Những Hạn Chế Cần Cân Nhắc

Administrator

Biểu Tượng Copilot Cố Định Trong Word Cho Web: Thay Đổi Gây Tranh Cãi Và Ảnh Hưởng Đến Trải Nghiệm Người Dùng

Administrator