Câu chuyện về hành trình từ Windows sang Linux/Unix - là do zsh và oh-my-zsh

Câu chuyện về hành trình từ Windows sang Linux/Unix - là do zsh và oh-my-zsh

Tin ngắn hàng ngày dành cho bạn
  • Mấy hôm trước OpenAI giới thiệu Deep Research - một công cụ duyệt web để nghiên cứu và cho ra một bản tổng hợp chỉ trong vài chục phút - so với nhiều giờ làm việc đối với con người, theo như họ công bố.

    Tính năng này hiện chỉ có sẵn cho người dùng Pro. Mặc dù chưa được dùng thử, nhưng qua nhiều bài viết đều nhấn mạnh vào sự ấn tượng trước khả năng của công cụ mới này. Nếu vẫn chưa biết Deep Research làm được gì thì bạn cứ hình dung như thế này: Nói với nó "Tôi cần thông tin nghiên cứu về lượng tiêu thụ cà phê của thế giới trong năm ngoái". Thế thôi! Ngồi chờ một lúc để nó tìm kiếm và tổng hợp lại kết quả và gửi lại cho bạn một bài báo cáo chi tiết. Chà, ghê thật chứ!

    Ngay lập tức huggingface đã lên một bài viết cố gắng tái tạo lại công cụ này theo cách của họ. Chi tiết tại Open-source DeepResearch – Freeing our search agents. Và không có gì ngạc nhiên khi cả 2 đều mang hơi hướng của AI Agents.

    » Xem thêm
  • Sống đủ lâu trong thế giới Internet, bạn có thể thấy rằng mọi người ở đây khá háo hức chạy theo xu hướng và chúng lan truyền với tốc độ chóng mặt.

    Chỉ vài tháng trước, chúng ta vẫn còn kinh ngạc về trí thông minh của các mô hình ngôn ngữ lớn (LLM) có thể trả lời giống như con người, và ngay sau đó, chúng đã được cập nhật với khả năng suy nghĩ và lý luận đáng kinh ngạc. Chúng được ứng dụng rộng rãi không chỉ trong lĩnh vực lập trình. Gần đây, thuật ngữ AI Agents đã tạo nên một sự khuấy động.

    Vậy, AI Agents là gì? Trong bài viết ngắn này, tất nhiên là không thể đưa ra một định nghĩa ngắn gọn nhưng toàn diện. Bạn đọc có thể tham khảo bài viết rất chi tiết này tại đây Agents | Chip Huyền. Để dễ hình dung hơn, AI Agents có thể được coi là một người hoặc một thực thể nào đó. Bản thân các Agents được trang bị tất cả các công cụ cần thiết. Từ đó, các Agents có thể kết hợp chúng để hoàn thành một nhiệm vụ mà chúng ta giao.

    Vẫn còn hơi mơ hồ phải không? Một ví dụ thực tế là khi bạn ra lệnh cho các Agents truy cập Facebook vào lúc 8 giờ tối mỗi ngày, kiểm tra bất kỳ tin tức nổi bật nào từ bạn bè, sau đó gửi tóm tắt đến Telegram. Vậy là xong!

    » Xem thêm
  • Hôm qua đến nay, lượt truy cập tới từ Facebook tăng đột biến. Thường như thế là do ai đó chia sẻ bài viết của blog vào một nhóm nào đó.

    Cơ mà lần này là liên kết trực tiếp đến trang chủ luôn. Tò mò ghê, không biết ai chia sẻ, chia sẻ ở đâu nữa. Muốn biết để tìm hiểu "insight" ghê 🥹

    » Xem thêm

Vấn đề

Từ thuở xa xưa khi lần đầu được tiếp xúc với máy tính, tôi đã được học cách sử dụng Windows. Sau này trên Đại học, ngoài Windows ra tôi còn biết có thêm Ubuntu hay MacOS là những hệ điều hành mà dev thường hay sử dụng. Nhớ lần đầu tiên tiếp xúc với Ubuntu là do chiếc laptop của tôi có cấu hình khá khiêm tốn, chạy Win thì bị lag nên được nhiều người khuyên là "cài Ubuntu đi sẽ mượt hơn đấy". Ngay từ lần đầu đăng nhập, ấn tượng đầu tiên của tôi với Ubuntu là không mấy tốt đẹp: giao diện vừa xấu, vừa khó dùng mà lại còn chẳng cài được nhiều phần mềm như Windows nữa. Thậm chí có bộ gõ Tiếng Việt mà cũng không nên hồn.

Dùng chẳng được bao lâu, tôi quyết định quay lại sử dụng Windows và chế nhạo Ubuntu như một thứ gì đó vừa cùi lại còn bắp, và từ đó không đụng lại nữa. Thời gian cứ thế trôi, sau này tôi được trang bị một chiếc laptop gaming xịn hơn, cấu hình khủng hơn và dĩ nhiên là chạy Windows một cách mượt mà. Lúc đó, tôi nghĩ rằng Windows là quá "xịn", cái gì cũng có, cái gì cũng làm được.

Cuối năm 3 Đại học, tôi bắt đầu đi thực tập ở vị trí Fresher Node.js. Tôi cài đặt nhiều công cụ giúp cho việc lập trình Node rất đầy đủ, từ phiên bản Node.js cho đến phần mềm soạn mã VSCode. Cứ tưởng mọi chuyện sẽ êm đềm, nhưng sự thật lại trái ngược. Nhiều sự cố xảy ra đã làm thay đổi thói quen hàng ngày của tôi. Thi thoảng, tôi không thể cài được package trên npm, nó bắn ra những lỗi rất khó hiểu, hoặc không thể chạy được lệnh npm install mỗi khi cài đặt lại toàn bộ dự án. Đôi lúc còn không thể start được hoặc là run build bị lỗi... Những lỗi này rất khó chịu, tốn khá nhiều thời gian để tìm cách sửa lỗi đối với một đứa gà mờ như tôi. Thế nên anh Trainer khuyên tôi về cài Linux, cụ thể là Ubuntu đi sẽ ít bị lỗi hơn.

Đúng là số phận đưa đẩy, cuối cùng thì vẫn phải dùng Ubuntu. Tôi được biết có cách dual boot, nghĩa là cài được Windows và Ubuntu song song vào máy, thích dùng cái nào thì dùng. Khi đi làm thì dùng Ubuntu còn ở nhà thì dùng Win. Trải qua một thời gian sử dụng Ubuntu, tôi cũng quen dần với nó mặc dù thời gian ban đầu khá chật vật. Những lỗi thường thấy như khi sử dụng Win không còn thấy hoặc ít đi hẳn, tôi bắt đầu thấy thích thú với nó, mày mò nhiều hơn, như cách để sử dụng Terminal cũng như cách sử dụng dòng lệnh trong lập trình.

Nếu như Windows mạnh về biểu diễn đồ họa thì Ubuntu ngược lại, hầu như mọi thứ có thể làm được trên Terminal - tôi nghĩ vậy. Dần dần tôi phát hiện ra sức mạnh thực sự của Ubuntu là nằm ở những dòng lệnh, nó mang đến rất nhiều lệnh và trao cho ta quyền năng "tối thượng" trong hệ thống. Từ khi phát hiện ra điều đó, tôi bắt đầu sử dụng lệnh nhiều hơn và "bỏ quên" Win trong thời gian dài. Kể cả sau này có sử dụng lại, tôi vẫn không cảm thấy "quen thuộc" bằng Ubuntu nữa. Có lẽ, sự tiện ích của dòng lệnh đã khiến tôi từ bỏ Windows.

Mọi chuyện chưa dừng lại, vài năm trở lại đây, đi làm và có chút tiền thì tôi đã mạnh dạn đầu tư cho mình một chiếc Macbook vì nghe dân tình đồn Macbook mang lại giao diện đẹp "như" Windows mà "mạnh mẽ" như Linux. Đúng là lời đồn, Mac mang đến trải nghiệm mới lại, tôi vẫn có giao diện đẹp kèm theo sức mạnh của lệnh. Mà việc đầu tiên tôi làm sau khi mua máy đó chính là cài đặt zsh và oh-my-zsh.

Shell, zsh Shell và oh-my-zsh

Nói nhiều đến những dòng lệnh, Terminal mà không thể không nhắc đến Shell. Shell là một chương trình giao diện dòng lệnh (command-line interface) cho phép người dùng tương tác với hệ điều hành máy tính bằng cách nhập các lệnh và thực hiện các tác vụ thông qua bộ lệnh của hệ điều hành. Shell cũng cung cấp một môi trường để chạy các script, tập tin lệnh, và các chương trình khác. Terminal đóng vai trò là phần mềm giúp giao tiếp với Shell.

Để cho dễ hiểu, nếu các phần mềm thông dụng cho phép thao tác trên giao diện của chúng để thực hiện một tác vụ nào đó thì Shell lại cho phép bạn gõ lệnh để sử dụng. Các phần mềm dạng GUI thường tốn một phần lớn chi phí tài nguyên vào việc hiển thị đồ họa thì Shell lại không cần những thứ đó. Bù lại Shell khó mà mang lại sự phong phú khi biểu diễn thông tin.

Shell là phần mềm nên có rất nhiều loại khác nhau. Ví dụ trong Ubuntu, phần lớn người dùng sử dụng bash theo mặc định. Đối với MacOS, trước kia cũng sử dụng bash, nhưng kể từ phiên bản macOS Catalina trở đi, họ đã chuyển sang zsh. Còn trên Windows, chúng ta có cmd.exe trước phiên bản Windows 10, sau đó MS giới thiệu một loại Shell mới là Windows PowerShell với nhiều cải tiến và tính năng mạnh mẽ hơn. Ngoài ra, chúng ta còn có các Shell khác trong Linux/Unix là sh, csh, zsh...

Vậy nếu như Windows cũng có Shell thì tạo sao tôi vẫn dùng Linux hay Unix? Thật ra có nhiều yếu tố để dẫn đến quyết định này, một trong số đó là Shell trên Linux/Unix mạnh mẽ hơn nhiều so với Windows. Có thể do đặc thù của mỗi hệ điều hành và lý do mà chúng trở nên phổ biến. Ví dụ tỉ lệ máy chủ chạy Linux là rất lớn, việc giao tiếp với nó phải thông qua Shell nên nhiều người học Shell trên hệ thống Linux hơn và Shell từ đó mà cũng phát triển mạnh mẽ.

Mạnh mẽ ở đây là khả năng hỗ trợ tối đa trong công việc. Lấy một ví dụ đơn giản, nếu bạn là người thường xuyên làm việc với dòng lệnh thì điều gì mà bạn muốn nhất từ các công cụ hỗ trợ cũng như Shell? Tốc độ, khả năng ghi nhớ/nhắc lệnh, highlight cú pháp...

Tôi sử dụng bash trong một khoảng thời gian trước khi biết đến zsh. Khi mới biết cách dùng Terminal, chỉ cần biết gõ lệnh, Tab để ra gợi ý hoặc thêm một vài cấu hình trong thiết lập bash là đã đủ dùng. Sau này khi lượng công việc cần sử dụng lệnh nhiều lên, số lượng lệnh cần nhớ cũng tăng lên, mình cần phải tìm cách làm sao để công cụ dòng lệnh của mình trở nên tốt hơn như khả năng nhắc lệnh, khả năng ghi nhớ lệnh, khả năng hiển thị thông tin...

zsh tôi không thấy quá khác biệt so với bash, nghĩa là đang dùng bash, chuyển qua zsh vẫn sử dụng như bình thường. Nhưng ưu điểm của zsh thực sự được thể hiện qua kho plugins phong phú của nó. Một trong số đó có thể kể đến là oh-my-zsh.

Cài oh-my-zsh rất đơn giản, có thể chỉ cần chạy 1 lệnh:

sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"

Hoặc xem thêm tài liệu chi tiết về cách cài đặt ở Welcome to Oh My Zsh!.

Sau khi cài xong, bạn sẽ thấy giao diện của Terminal có phần thay đổi.

giao diện của Terminal

Và nếu di chuyển vào một thư mục nào đó đang có git, bạn sẽ thấy rõ ràng sự thay đổi hơn.

giao diện của Terminal trong thư mục có git

Như trong hình trên có thể thấy hiện tại thư mục có git và đang ở branch master.

Để làm được điều đó là nhờ vào plugin git của oh-my-zsh hiện có hơn 275 plugins và nếu thích cái nào hoặc đang sử dụng công cụ nào thì có thể "bật" nó lên bằng cách sửa lại cấu hình trong file ~/.zshrc.

$ vi ~/.zshrc

Cấu hình zsh

Tìm đến dòng có chứa "plugins=(git)" và thêm vào. Ví dụ, tôi đang sử dụng docker và tôi muốn bật plugins nhắc lệnh docker lên thì sửa lại "plugins=(git docker)", lưu và tải lại cấu hình bằng lệnh:

source ~/.zshrc

Sau đó thử gõ docker serviceTab bạn sẽ thấy nhắc lệnh rất đầy đủ.

Nhắc lệnh zsh

Ngoài ra còn có nhiều plugins khác cho bạn khám phá. Hiện tại thì tôi đang dùng thêm 4 plugins trợ giúp cho cú pháp và nhắc lệnh là zsh-autosuggestions, zsh-syntax-highlighting, fast-syntax-highlighting và zsh-autocomplete. Bạn đọc có thể tham khảo về cách cài đặt tại đây.

Trong khi zsh-syntax-highlighting và fast-syntax-highlighting hỗ trợ cú pháp tô sáng thì zsh-autosuggestions và zsh-autocomplete hỗ trợ gợi ý nhập lệnh và tự động hoàn thành câu lệnh.

zsh mạnh mẽ

Sau khi cài đặt plugins, về cơ bản chúng ta sẽ có một terminal khá là khác so với "nguyên bản". Để cảm nhận và đánh giá được độ hữu ích, tôi khuyên bạn đọc nên tự trải nghiệm.

Ngoài những thứ tôi nêu ra ở trên, oh-my-zsh còn hỗ trợ themes, alias (bí danh - set một lệnh dài, phức tạp thành một cụm từ dễ nhớ)... và rất nhiều plugins khác mà bạn có thể khám phá thông qua Google.

Cao cấp
Hello

Tôi & khao khát "chơi chữ"

Bạn đã thử viết? Và rồi thất bại hoặc chưa ưng ý? Tại 2coffee.dev chúng tôi đã có quãng thời gian chật vật với công việc viết. Đừng nản chí, vì giờ đây chúng tôi đã có cách giúp bạn. Hãy bấm vào để trở thành hội viên ngay!

Bạn đã thử viết? Và rồi thất bại hoặc chưa ưng ý? Tại 2coffee.dev chúng tôi đã có quãng thời gian chật vật với công việc viết. Đừng nản chí, vì giờ đây chúng tôi đã có cách giúp bạn. Hãy bấm vào để trở thành hội viên ngay!

Xem tất cả

Đăng ký nhận thông báo bài viết mới

hoặc
* Bản tin tổng hợp được gửi mỗi 1-2 tuần, huỷ bất cứ lúc nào.

Bình luận (1)

Nội dung bình luận...
Avatar
Thọ1 năm trước
tôi có nên chuyển từ macos sang ubuntu không?
Trả lời
Avatar
Xuân Hoài Tống1 năm trước
Đó là sở thích cá nhân thôi nếu bạn thích thì có thể chuyển sang không vấn đề gì :D @gif [75Xh6bEVpEleyM237R]
Bấm hoặc cuộn mạnh để sang bài mới