[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"site-settings":3,"site-menu":10,"category-bao-mat":21},{"siteName":4,"siteDescription":5,"contactEmail":6,"phone":7,"githubUrl":8,"facebookUrl":9},"Tôi là thợ hồ công nghệ","Ghi chép về lập trình, hệ thống và những điều học được trên đường làm sản phẩm.","contact@vdhoangson.com","+84 387 324 112","https:\u002F\u002Fgithub.com\u002Fvdhoangson","",{"items":11},[12,15,18],{"href":13,"label":14},"\u002F","Mới nhất",{"href":16,"label":17},"\u002Fcategory\u002Fdich-vu","Dịch vụ",{"href":19,"label":20},"\u002Fabout","Về tôi",{"items":22,"total":86,"page":87,"pageSize":88},[23,50],{"id":24,"wordpressId":25,"title":26,"slug":27,"excerpt":28,"contentHtml":29,"status":30,"authorName":31,"seoTitle":32,"seoDescription":33,"featuredMediaId":34,"featuredMedia":35,"categories":41,"tags":47,"publishedAt":48,"createdAt":49,"updatedAt":49},"9c267e54-c703-454b-90c1-1fbd8239785f",null,"Lỗ hổng nhân Linux CVE-2026-98432: use-after-free trong TCP, chiếm root từ xa","lo-hong-nhan-linux-cve-2026-98432","CVE-2026-98432 là lỗi use-after-free trong xử lý kết nối TCP\u002FIPv4 của nhân Linux từ bản 4.4, CVSS 9.8. Lỗi là gì, ai bị ảnh hưởng, cách kiểm tra và vá máy chủ.","\u003Cp>Giữa tháng 10\u002F2026, nhân Linux có thêm một lỗ hổng mà ai đang vận hành máy chủ cũng nên dừng tay đọc: \u003Cstrong>CVE-2026-98432\u003C\u002Fstrong>. Lỗi nằm ngay trong đường xử lý kết nối TCP qua IPv4, tồn tại từ Linux 4.4, và được chấm CVSS 9.8. Bài này tóm lại lỗi là gì, ai bị ảnh hưởng và nên làm gì trên máy chủ của mình.\u003C\u002Fp>\n\n\u003Ch2>Lỗi nằm ở đâu?\u003C\u002Fh2>\n\u003Cp>Khi bắt tay ba bước TCP hoàn tất, hàm \u003Ccode>tcp_v4_syn_recv_sock()\u003C\u002Fcode> chuyển các IP option của request socket sang socket con mà \u003Cem>không sao chép\u003C\u002Fem> — hai bên dùng chung một vùng nhớ. Nếu cùng lúc một CPU khác đang xử lý gói SYN gửi lại cho đúng request đó và dựng gói SYN-ACK, socket con có thể bị giải phóng giữa chừng. Vùng nhớ chứa option bị \u003Ccode>kfree()\u003C\u002Fcode> ngay, trong khi CPU kia vẫn đọc nó: một lỗi \u003Cstrong>use-after-free do race condition\u003C\u002Fstrong>.\u003C\u002Fp>\n\u003Cp>Lỗi xuất hiện từ khi request socket được đưa vào bảng ehash và xử lý mà không cần giữ khóa của listener. Một biến thể tương tự xảy ra khi bật di chuyển request socket (\u003Ccode>net.ipv4.tcp_migrate_req=1\u003C\u002Fcode> hoặc chương trình BPF reuseport).\u003C\u002Fp>\n\u003Cp>Bản vá rất gọn: đổi sang \u003Ccode>kfree_rcu()\u003C\u002Fcode> để vùng nhớ chỉ được giải phóng sau một chu kỳ RCU, đúng như các đường xử lý khác vốn đã làm. IPv6 không dính lỗi chính vì phía IPv6 có sao chép option.\u003C\u002Fp>\n\n\u003Ch2>Vì sao nghiêm trọng?\u003C\u002Fh2>\n\u003Cp>Đội Frontier Red Team của Anthropic công bố đã dùng Claude viết bản khai thác chứng minh khái niệm: từ xa, không cần tài khoản, không cần người dùng tương tác, kẻ tấn công lấy được quyền root trên máy chủ có MPTCP listener. Theo mô tả, khâu vượt KASLR mất khoảng 48 phút, khâu thực thi lệnh thêm khoảng 5 phút. Điểm đáng ngại là một lần race thất bại chỉ làm hỏng bắt tay chứ không làm sập máy, nên kẻ tấn công có thể thử lại nhiều lần mà khó bị phát hiện.\u003C\u002Fp>\n\u003Cp>Anthropic không công bố mã khai thác. Đến thời điểm viết bài chưa có báo cáo khai thác ngoài thực tế, nhưng với mức độ này thì không nên đợi.\u003C\u002Fp>\n\u003Cp>Cần lưu ý: bản khai thác được trình diễn cần MPTCP, nhưng \u003Cstrong>bản thân lỗi không riêng gì MPTCP\u003C\u002Fstrong>. Nhóm bảo mật Go đã cảnh báo hệ thống không có MPTCP listener vẫn có thể bị tấn công theo cách khác.\u003C\u002Fp>\n\n\u003Ch2>Ai bị ảnh hưởng?\u003C\u002Fh2>\n\u003Cul>\n  \u003Cli>Mọi máy chạy kernel Linux từ 4.4 trở lên chưa được vá.\u003C\u002Fli>\n  \u003Cli>Rủi ro cao nhất: máy chủ mở MPTCP listener ra Internet. Lưu ý từ \u003Cstrong>Go 1.24\u003C\u002Fstrong>, chương trình Go mặc định bật MPTCP cho socket listen trên Linux — rất nhiều dịch vụ viết bằng Go đang mở MPTCP mà chủ nhân không hề biết.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>Các nhánh stable đã có bản vá từ các phiên bản:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>5.10.272   5.15.223   6.1.190    6.6.159\n6.12.113   6.18.56    7.2.10     7.3\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Kernel của bản phân phối (Ubuntu, RHEL, Debian, SUSE…) có số phiên bản riêng, nên hãy xem thông báo bảo mật của bản phân phối mình đang dùng thay vì so trực tiếp với danh sách trên.\u003C\u002Fp>\n\n\u003Ch2>Kiểm tra máy chủ của bạn\u003C\u002Fh2>\n\u003Cpre>\u003Ccode># Kernel đang chạy\nuname -r\n\n# Có MPTCP listener nào đang mở không?\nss -Mltnp\n\n# MPTCP có đang bật ở mức hệ thống không? (1 = bật)\nsysctl net.mptcp.enabled\u003C\u002Fcode>\u003C\u002Fpre>\n\n\u003Ch2>Xử lý thế nào?\u003C\u002Fh2>\n\u003Ch3>1. Cập nhật kernel và khởi động lại\u003C\u002Fh3>\n\u003Cp>Đây là cách duy nhất thật sự sửa lỗi. Cài kernel mới nhất từ bản phân phối, rồi \u003Cstrong>reboot\u003C\u002Fstrong> — cài xong mà không khởi động lại thì máy vẫn chạy kernel cũ. Nếu bản phân phối hỗ trợ livepatch, có thể dùng để vá ngay khi chưa sắp xếp được lịch reboot.\u003C\u002Fp>\n\n\u003Ch3>2. Giảm thiểu tạm thời khi chưa vá được\u003C\u002Fh3>\n\u003Cp>Các biện pháp dưới đây chỉ thu hẹp bề mặt tấn công, không thay thế được kernel đã vá:\u003C\u002Fp>\n\u003Cul>\n  \u003Cli>\u003Cstrong>Tắt MPTCP toàn hệ thống:\u003C\u002Fstrong> \u003Ccode>sysctl -w net.mptcp.enabled=0\u003C\u002Fcode>. Chương trình Go khởi động sau đó sẽ tự quay về TCP thường; chương trình đang chạy có thể gặp lỗi ở kết nối mới, nên khởi động lại dịch vụ sau khi tắt.\u003C\u002Fli>\n  \u003Cli>\u003Cstrong>Tắt MPTCP riêng cho dịch vụ Go:\u003C\u002Fstrong> đặt biến môi trường \u003Ccode>GODEBUG=multipathtcp=0\u003C\u002Fcode>, hoặc thêm \u003Ccode>godebug multipathtcp=0\u003C\u002Fcode> vào \u003Ccode>go.mod\u003C\u002Fcode> rồi build lại. Cách này dễ sót: chỉ một listener bị bỏ quên là đủ, và code gọi \u003Ccode>SetMultipathTCP\u003C\u002Fcode> sẽ ghi đè cấu hình này.\u003C\u002Fli>\n  \u003Cli>\u003Cstrong>Chặn gói TCP mang IPv4 option ở tường lửa:\u003C\u002Fstrong> một số bản phân phối (ví dụ AlmaLinux) đã hướng dẫn rule nftables cho việc này. Lưu ý rule có thể bị vượt qua bởi lưu lượng giữa các container trên cùng máy.\u003C\u002Fli>\n  \u003Cli>\u003Cstrong>Bật \u003Ccode>init_on_free=1\u003C\u002Fcode>:\u003C\u002Fstrong> tham số khởi động này xóa trắng vùng nhớ khi giải phóng, khiến dữ liệu đọc được qua lỗi use-after-free chỉ còn là số 0. Không sửa lỗi nhưng làm khó kẻ tấn công; đổi lại hiệu năng có thể giảm khoảng 1–5% với tải cấp phát bộ nhớ nhiều.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cpre>\u003Ccode># Ví dụ trên RHEL\u002FAlmaLinux\ngrubby --update-kernel=ALL --args=\"init_on_free=1\"\nreboot\ngrep -o init_on_free=1 \u002Fproc\u002Fcmdline\u003C\u002Fcode>\u003C\u002Fpre>\n\n\u003Ch2>Ghi chú của tôi\u003C\u002Fh2>\n\u003Cp>Đây là một trong những lỗ hổng kernel đầu tiên mà bản khai thác root từ xa được viết với sự hỗ trợ của AI và công bố công khai quy trình. Khoảng cách từ lúc lỗi được công bố tới lúc có người khai thác được sẽ ngày càng ngắn. Với người vận hành máy chủ, bài học vẫn cũ nhưng gấp hơn: có lịch cập nhật kernel định kỳ, biết rõ máy mình đang mở cổng gì, và đừng để reboot thành việc \"để sau\".\u003C\u002Fp>\n\n\u003Ch2>Tham khảo\u003C\u002Fh2>\n\u003Cul>\n  \u003Cli>\u003Ca href=\"https:\u002F\u002Fnvd.nist.gov\u002Fvuln\u002Fdetail\u002FCVE-2026-98432\" target=\"_blank\" rel=\"noopener noreferrer\">NVD — CVE-2026-98432\u003C\u002Fa>\u003C\u002Fli>\n  \u003Cli>\u003Ca href=\"https:\u002F\u002Fwww.anthropic.com\u002Fresearch\u002Fdiscovering-vulnerabilities-with-claude\" target=\"_blank\" rel=\"noopener noreferrer\">Anthropic — Discovering vulnerabilities with Claude\u003C\u002Fa>\u003C\u002Fli>\n  \u003Cli>\u003Ca href=\"https:\u002F\u002Fgit.kernel.org\u002Fstable\u002Fc\u002Fe3f33b0a1d89d738e2b913dab519226eaf76e15b\" target=\"_blank\" rel=\"noopener noreferrer\">Bản vá upstream: ipv4: free inet_opt and ireq_opt after an RCU grace period\u003C\u002Fa>\u003C\u002Fli>\n  \u003Cli>\u003Ca href=\"https:\u002F\u002Fwww.openwall.com\u002Flists\u002Foss-security\u002F2026\u002F10\u002F30\u002F1\" target=\"_blank\" rel=\"noopener noreferrer\">Go Security Team — Protecting against CVE-2026-98432\u003C\u002Fa>\u003C\u002Fli>\n  \u003Cli>\u003Ca href=\"https:\u002F\u002Fwww.openwall.com\u002Flists\u002Foss-security\u002F2026\u002F10\u002F31\u002F5\" target=\"_blank\" rel=\"noopener noreferrer\">oss-security — init_on_free=1 as an additional interim mitigation\u003C\u002Fa>\u003C\u002Fli>\n\u003C\u002Ful>\n","published","Hoàng Sơn","CVE-2026-98432: lỗ hổng TCP nhân Linux cho phép chiếm root từ xa","Tóm tắt CVE-2026-98432 (CVSS 9.8): use-after-free trong TCP\u002FIPv4 của nhân Linux, ảnh hưởng máy chủ có MPTCP. Cách kiểm tra, cập nhật kernel và giảm thiểu tạm thời.","1260ff1d-df73-416e-b839-4ca7ff6195a9",{"id":34,"wordpressId":25,"filename":36,"storageKey":37,"sourceUrl":25,"mimeType":38,"altText":9,"caption":25,"width":25,"height":25,"createdAt":39,"updatedAt":39,"url":40},"lo-hong-linux-cve-2026-98432.png","5d897e92-9ca0-450e-938b-9b7700b4e115.png","image\u002Fpng","2026-11-02T04:57:29.095Z","\u002Fuploads\u002F5d897e92-9ca0-450e-938b-9b7700b4e115.png",[42],{"id":43,"wordpressId":44,"name":45,"slug":46,"parentId":25},"858b8023-72fd-4b6e-b610-6d319a21ede1",326,"Bảo mật","bao-mat",[],"2026-11-02T04:58:16.192Z","2026-11-02T04:58:16.210Z",{"id":51,"wordpressId":52,"title":53,"slug":54,"excerpt":55,"contentHtml":56,"status":30,"authorName":57,"seoTitle":53,"seoDescription":55,"featuredMediaId":58,"featuredMedia":59,"categories":69,"tags":71,"publishedAt":84,"createdAt":84,"updatedAt":85},"8655cf37-cde3-4457-967a-e88bf179cad1",16374,"Làm Chủ Terminal Với Oh My Zsh – Bí kíp dành cho Developer hiện đại","lam-chu-terminal-voi-oh-my-zsh-bi-kip-danh-cho-developer-hien-dai","Nếu bạn đã từng gõ cd ..\u002F..\u002F và thấy cuộc đời vô nghĩa, hoặc nhìn terminal của mình mà tưởng như đang nói chuyện với DOS 1998 – thì Oh My Zsh chính là phép màu bạn đang tìm kiếm. 🎩 Oh My Zsh là gì? Oh My Zsh là một framework mở rộng cho […]","\n\u003Cp class=\"wp-block-paragraph\">Nếu bạn đã từng gõ \u003Ccode>cd ..\u002F..\u002F\u003C\u002Fcode> và thấy cuộc đời vô nghĩa, hoặc nhìn terminal của mình mà tưởng như đang nói chuyện với DOS 1998 – thì \u003Cstrong>Oh My Zsh\u003C\u002Fstrong> chính là phép màu bạn đang tìm kiếm.\u003C\u002Fp>\n\n\n\n\u003Ch2 class=\"wp-block-heading\">🎩 Oh My Zsh là gì?\u003C\u002Fh2>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">\u003Cstrong>Oh My Zsh\u003C\u002Fstrong> là một \u003Cstrong>framework mở rộng cho Zsh shell\u003C\u002Fstrong>, được viết bằng bash script. Nó giúp terminal của bạn:\u003C\u002Fp>\n\n\n\n\u003Cul class=\"wp-block-list\">\n\u003Cli>\u003Cstrong>Đẹp\u003C\u002Fstrong> hơn (vì ai lại muốn nhìn terminal xấu xí mỗi ngày 😭)\u003C\u002Fli>\n\n\n\n\u003Cli>\u003Cstrong>Thông minh\u003C\u002Fstrong> hơn (tự gợi ý, tự hoàn thành lệnh, highlight lỗi cú pháp)\u003C\u002Fli>\n\n\n\n\u003Cli>\u003Cstrong>Nhanh hơn\u003C\u002Fstrong> trong thao tác (nhờ các alias và plugin mạnh mẽ)\u003C\u002Fli>\n\u003C\u002Ful>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Nói ngắn gọn:\u003C\u002Fp>\n\n\n\n\u003Cblockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n\u003Cp class=\"wp-block-paragraph\">“Nếu Bash là nông dân, thì Zsh là hiệp sĩ. Còn Oh My Zsh là áo giáp vàng của hiệp sĩ đó.” ⚔️\u003C\u002Fp>\n\u003C\u002Fblockquote>\n\n\n\n\u003Ch2 class=\"wp-block-heading\">🧩 Vì sao nên dùng Oh My Zsh?\u003C\u002Fh2>\n\n\n\n\u003Cfigure class=\"wp-block-table\">\u003Ctable class=\"has-fixed-layout\">\u003Cthead>\u003Ctr>\u003Cth>Tính năng\u003C\u002Fth>\u003Cth>Bash\u003C\u002Fth>\u003Cth>Zsh + Oh My Zsh\u003C\u002Fth>\u003C\u002Ftr>\u003C\u002Fthead>\u003Ctbody>\u003Ctr>\u003Ctd>Tự động gợi ý lệnh\u003C\u002Ftd>\u003Ctd>❌ Không\u003C\u002Ftd>\u003Ctd>✅ Có\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>Highlight lỗi cú pháp\u003C\u002Ftd>\u003Ctd>❌ Không\u003C\u002Ftd>\u003Ctd>✅ Có\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>Hỗ trợ theme và plugin\u003C\u002Ftd>\u003Ctd>❌ Cực hạn chế\u003C\u002Ftd>\u003Ctd>✅ Hơn 300 plugin, 100+ theme\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>Tốc độ thao tác (alias, shortcut)\u003C\u002Ftd>\u003Ctd>⚙️ Bình thường\u003C\u002Ftd>\u003Ctd>⚡ Siêu nhanh\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd>Giao diện\u003C\u002Ftd>\u003Ctd>💤 Đơn sắc\u003C\u002Ftd>\u003Ctd>🌈 Màu mè xịn sò\u003C\u002Ftd>\u003C\u002Ftr>\u003C\u002Ftbody>\u003C\u002Ftable>\u003C\u002Ffigure>\n\n\n\n\u003Ch2 class=\"wp-block-heading\">⚙️ Cài đặt Oh My Zsh\u003C\u002Fh2>\n\n\n\n\u003Ch3 class=\"wp-block-heading\">🪄 Bước 1: Cài Zsh\u003C\u002Fh3>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Trên \u003Cstrong>Ubuntu \u002F Debian\u003C\u002Fstrong>:\u003C\u002Fp>\n\n\n\n\u003Cpre class=\"wp-block-code\">\u003Ccode>sudo apt update\nsudo apt install zsh -y\n\u003C\u002Fcode>\u003C\u002Fpre>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Trên \u003Cstrong>Fedora \u002F CentOS\u003C\u002Fstrong>:\u003C\u002Fp>\n\n\n\n\u003Cpre class=\"wp-block-code\">\u003Ccode>sudo dnf install zsh -y\u003C\u002Fcode>\u003C\u002Fpre>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Trên \u003Cstrong>macOS\u003C\u002Fstrong> (đã có sẵn Zsh từ Catalina, nhưng bạn có thể update):\u003C\u002Fp>\n\n\n\n\u003Cpre class=\"wp-block-code\">\u003Ccode>\u003Ccode>brew install zsh\u003C\u002Fcode>\u003C\u002Fcode>\u003C\u002Fpre>\n\n\n\n\u003Ch3 class=\"wp-block-heading\">🧙 Bước 2: Cài Oh My Zsh\u003C\u002Fh3>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Bạn chỉ cần chạy một dòng lệnh duy nhất (chính là “phép thuật”):\u003C\u002Fp>\n\n\n\n\u003Cpre class=\"wp-block-code\">\u003Ccode>\u003Ccode>sh -c \"$(curl -fsSL https:\u002F\u002Fraw.githubusercontent.com\u002Fohmyzsh\u002Fohmyzsh\u002Fmaster\u002Ftools\u002Finstall.sh)\"\u003C\u002Fcode>\u003C\u002Fcode>\u003C\u002Fpre>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Hoặc nếu thích \u003Ccode>wget\u003C\u002Fcode> hơn:\u003C\u002Fp>\n\n\n\n\u003Cpre class=\"wp-block-code\">\u003Ccode>sh -c \"$(wget https:\u002F\u002Fraw.githubusercontent.com\u002Fohmyzsh\u002Fohmyzsh\u002Fmaster\u002Ftools\u002Finstall.sh -O -)\"\u003C\u002Fcode>\u003C\u002Fpre>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Sau khi cài xong, terminal của bạn sẽ đổi giao diện – chúc mừng, bạn vừa nâng cấp từ “nông dân shell” lên “hiệp sĩ terminal”\u003C\u002Fp>\n\n\n\n\u003Ch3 class=\"wp-block-heading\">💅 Bước 3: Chọn Theme đẹp\u003C\u002Fh3>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Mở file cấu hình: \u003C\u002Fp>\n\n\n\n\u003Cpre class=\"wp-block-code\">\u003Ccode>\u003Ccode>nano ~\u002F.zshrc\u003C\u002Fcode>\u003C\u002Fcode>\u003C\u002Fpre>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Tìm dòng:\u003C\u002Fp>\n\n\n\n\u003Cpre class=\"wp-block-code\">\u003Ccode>ZSH_THEME=\"robbyrussell\"\u003C\u002Fcode>\u003C\u002Fpre>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Thay bằng một theme khác, ví dụ:\u003C\u002Fp>\n\n\n\n\u003Cpre class=\"wp-block-code\">\u003Ccode>ZSH_THEME=\"agnoster\"\u003C\u002Fcode>\u003C\u002Fpre>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Rồi reload lại:\u003C\u002Fp>\n\n\n\n\u003Cpre class=\"wp-block-code\">\u003Ccode>source ~\u002F.zshrc\u003C\u002Fcode>\u003C\u002Fpre>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Gợi ý: Bạn có thể xem danh sách theme tại\u003Cbr \u002F>🔗 \u003Ca rel=\"noopener noreferrer\">https:\u002F\u002Fgithub.com\u002Fohmyzsh\u002Fohmyzsh\u002Fwiki\u002FThemes\u003C\u002Fa>\u003C\u002Fp>\n\n\n\n\u003Ch3 class=\"wp-block-heading\">⚡ Bước 4: Kích hoạt plugin\u003C\u002Fh3>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Mở lại \u003Ccode>~\u002F.zshrc\u003C\u002Fcode>, tìm dòng:\u003C\u002Fp>\n\n\n\n\u003Cpre class=\"wp-block-code\">\u003Ccode>plugins=(git)\u003C\u002Fcode>\u003C\u002Fpre>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Thêm các plugin bạn muốn:\u003C\u002Fp>\n\n\n\n\u003Cpre class=\"wp-block-code\">\u003Ccode>plugins=(git docker vscode laravel)\u003C\u002Fcode>\u003C\u002Fpre>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Sau đó reload:\u003C\u002Fp>\n\n\n\n\u003Cpre class=\"wp-block-code\">\u003Ccode>source ~\u002F.zshrc\u003C\u002Fcode>\u003C\u002Fpre>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Các plugin này giúp:\u003C\u002Fp>\n\n\n\n\u003Cul class=\"wp-block-list\">\n\u003Cli>\u003Cstrong>docker\u003C\u002Fstrong> → gợi ý lệnh docker\u003C\u002Fli>\n\n\n\n\u003Cli>\u003Cstrong>vscode\u003C\u002Fstrong> → gợi ý lệnh vscode\u003C\u002Fli>\n\n\n\n\u003Cli>\u003Cstrong>laravel\u003C\u002Fstrong> → gợi ý lệnh laravel\u003C\u002Fli>\n\u003C\u002Ful>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Bạn có thể tìm thêm plugins ở đây: \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fohmyzsh\u002Fohmyzsh\u002Fwiki\u002FPlugins\" target=\"_blank\" rel=\"noopener noreferrer\">https:\u002F\u002Fgithub.com\u002Fohmyzsh\u002Fohmyzsh\u002Fwiki\u002FPlugins\u003C\u002Fa>\u003C\u002Fp>\n\n\n\n\u003Ch2 class=\"wp-block-heading\">🧠 Mẹo nhỏ của cao thủ\u003C\u002Fh2>\n\n\n\n\u003Cul class=\"wp-block-list\">\n\u003Cli>Đặt alias riêng trong \u003Ccode>~\u002F.zshrc\u003C\u002Fcode>, ví dụ:\u003C\u002Fli>\n\u003C\u002Ful>\n\n\n\n\u003Cpre class=\"wp-block-code\">\u003Ccode>alias art=\"php artisan\"\u003Cbr \u002F>alias gs=\"git status\"\u003Cbr \u002F>alias gl=\"git log --oneline --graph --decorate\"\u003C\u002Fcode>\u003C\u002Fpre>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Dùng \u003Cstrong>Powerlevel10k\u003C\u002Fstrong> theme để có giao diện “pro” như hacker trong phim:\u003C\u002Fp>\n\n\n\n\u003Cpre class=\"wp-block-code\">\u003Ccode>git clone --depth=1 https:\u002F\u002Fgithub.com\u002Fromkatv\u002Fpowerlevel10k.git ${ZSH_CUSTOM:-$HOME\u002F.oh-my-zsh\u002Fcustom}\u002Fthemes\u002Fpowerlevel10k\u003C\u002Fcode>\u003C\u002Fpre>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Sau đó chỉnh:\u003C\u002Fp>\n\n\n\n\u003Cpre class=\"wp-block-code\">\u003Ccode>ZSH_THEME=\"powerlevel10k\u002Fpowerlevel10k\"\u003C\u002Fcode>\u003C\u002Fpre>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">Sau đó reload:\u003C\u002Fp>\n\n\n\n\u003Cpre class=\"wp-block-code\">\u003Ccode>source ~\u002F.zshrc\u003C\u002Fcode>\u003C\u002Fpre>\n\n\n\n\u003Ch2 class=\"wp-block-heading\">🎯 Kết luận\u003C\u002Fh2>\n\n\n\n\u003Cp class=\"wp-block-paragraph\">\u003Cstrong>Oh My Zsh\u003C\u002Fstrong> không chỉ là “một công cụ làm đẹp terminal” — mà là \u003Cstrong>một bước tiến trong tư duy của developer\u003C\u002Fstrong>: tối ưu hoá từng phút bạn gõ lệnh, giúp bạn làm việc nhanh hơn, gọn hơn, và vui hơn.\u003C\u002Fp>\n\n\n\n\u003Cblockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n\u003Cp class=\"wp-block-paragraph\">“Vì terminal đẹp khiến code bug cũng thấy nhẹ nhàng hơn.” 😎\u003C\u002Fp>\n\u003C\u002Fblockquote>\n","vdhoangson@gmail.com","59154d1a-2a06-4512-a0d1-7ca6aa0e37ab",{"id":58,"wordpressId":60,"filename":61,"storageKey":62,"sourceUrl":63,"mimeType":38,"altText":9,"caption":25,"width":64,"height":65,"createdAt":66,"updatedAt":67,"url":68},16375,"oh-my-zsh.png","wordpress\u002F2025\u002F11\u002Foh-my-zsh.png","https:\u002F\u002Fvdhoangson.com\u002Fwp-content\u002Fuploads\u002F2025\u002F11\u002Foh-my-zsh.png",1536,1024,"2025-11-10T02:24:10.000Z","2026-10-15T04:59:31.204Z","\u002Fuploads\u002Fwordpress\u002F2025\u002F11\u002Foh-my-zsh.png",[70],{"id":43,"wordpressId":44,"name":45,"slug":46,"parentId":25},[72,76,80],{"id":73,"wordpressId":74,"name":75,"slug":75},"893c6a9a-823e-4e5c-b18b-1a185bbbab0e",330,"bash",{"id":77,"wordpressId":78,"name":79,"slug":79},"ccdbe082-426e-4d37-b642-a1e1d5320548",328,"oh-my-zsh",{"id":81,"wordpressId":82,"name":83,"slug":83},"a7955853-178f-4219-bdcf-d1e035eeab5d",327,"zsh","2025-11-10T02:24:25.000Z","2025-11-10T02:24:28.000Z",2,1,12]