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
  • swapy là một thư viện giúp bạn tạo ra thao tác kéo thả để hoán đổi vị trí của các thành phần một cách dễ dàng.

    Thư viện hỗ trợ rất nhiều nền tảng, rất thích hợp để xây dựng một cái gì đó mang tính cá nhân hoá như trang Dashboard của người dùng.

    » Xem thêm
  • Ui! Blog đang dính một lỗi bảo mật khá nghiêm trọng. Không biết có bạn nào phát hiện ra chưa. Dù chưa ảnh hưởng đến người dùng nhưng thông qua quá trình Eating your own dog food thì mới phát hiện ra á. Để sửa xong thì mình kể chi tiết.

    » Xem thêm
  • Ngủ dậy thấy bảng tin ngập tràn bài viết về việc Microsoft vừa viết lại trình biên dịch Typescript - tsc bằng Go, hiệu suất cho ra nhanh hơn gấp 10 lần so với cái hiện tại. Wow!

    Nhưng khi nhìn thấy tin này thì trong đầu nảy luôn ra câu hỏi "Tại sao không phải là Rust?". Bạn biết đấy, phong trào viết lại mọi thứ bằng Rust đang nóng hơn bao giờ hết, không ngoa khi nói rằng nó đang càn quét bảng xếp hạng của những công cụ kỳ cựu trước đó.

    Điều thú vị hơn nữa là viêc lựa chọn Go - mang lại hiệu suất tốt nhất cho đến thời điểm hiện tại - như họ nói. Thì rất nhiều người tỏ ra thất vọng vì tại sao không phải là C# 😆. Đấy khi bản nổi tiếng quá làm gì cũng bị xét nét từng tí một, nói chưa chắc ai cũng nghe 🥶

    Why Go? #411

    » 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]