Bạn có biết dpkg là một trong những công cụ nền tảng và mạnh mẽ nhất giúp bạn quản lý gói phần mềm trên các hệ điều hành Linux dựa trên Debian không? Đối với những người mới làm quen với Linux là gì, đặc biệt là các hệ thống như Ubuntu, Debian, hay Linux Mint, việc cài đặt, gỡ bỏ và quản lý các ứng dụng đôi khi có thể gây bối rối. Các gói phần mềm với đuôi .deb có mặt ở khắp mọi nơi, nhưng làm thế nào để xử lý chúng một cách hiệu quả mà không cần đến giao diện đồ họa? Đây chính là lúc lệnh dpkg phát huy sức mạnh của mình. Nó cung cấp một giải pháp trực tiếp và hiệu quả để tương tác với các gói .deb, từ cài đặt đơn giản đến xử lý các sự cố phức tạp. Trong bài viết này, Bùi Mạnh Đức sẽ cùng bạn khám phá từ những khái niệm cơ bản nhất, hướng dẫn sử dụng chi tiết, đến các ứng dụng nâng cao và mẹo thực tế để bạn có thể làm chủ công cụ thiết yếu này trong hành trình quản trị hệ thống Linux của mình.
Tổng quan về lệnh dpkg và vai trò trong Linux
Để bắt đầu hành trình làm chủ hệ thống Linux, việc hiểu rõ các công cụ cốt lõi là vô cùng quan trọng. Lệnh dpkg chính là một trong những công cụ nền tảng đó, đặc biệt trong hệ sinh thái Debian. Nó là chìa khóa để bạn kiểm soát phần mềm trên hệ thống của mình một cách chi tiết và chính xác.

Lệnh dpkg là gì?
dpkg là viết tắt của “Debian Package”, một công cụ quản lý gói phần mềm cấp thấp cho các hệ điều hành dựa trên Debian. Đây là lệnh lõi, chịu trách nhiệm trực tiếp cho việc cài đặt, xây dựng, gỡ bỏ và cung cấp thông tin về các tệp gói .deb. Hãy coi dpkg như một người thợ lành nghề, có khả năng lắp ráp hoặc tháo dỡ từng bộ phận (phần mềm) một cách chính xác theo yêu cầu.
Nhiều người thường nhầm lẫn giữa dpkg và apt (Advanced Package Tool). Sự khác biệt cơ bản nằm ở cấp độ hoạt động. dpkg chỉ làm việc với các tệp .deb mà bạn đã có sẵn trên máy. Ngược lại, apt là một công cụ quản lý cấp cao hơn. apt không chỉ gọi dpkg để thực hiện cài đặt hoặc gỡ bỏ, mà còn có khả năng tự động tải gói phần mềm từ các kho lưu trữ trực tuyến (repositories) và quan trọng nhất là tự động xử lý các gói phụ thuộc (dependencies). Nói một cách đơn giản, nếu một phần mềm A cần phần mềm B để hoạt động, dpkg sẽ báo lỗi nếu bạn chỉ cài A, trong khi apt sẽ tự tìm và cài cả B cho bạn.
Vai trò của dpkg trong hệ điều hành Debian và các bản phân phối liên quan
dpkg là trái tim của hệ thống quản lý gói trên Debian và các bản phân phối phái sinh nổi tiếng như Ubuntu, Linux Mint, Kali Linux, và nhiều hệ điều hành khác. Mọi phần mềm được cài đặt thông qua apt hay các trình quản lý đồ họa như Ubuntu Software Center cuối cùng đều sử dụng dpkg ở tầng dưới để thực hiện công việc.
Vai trò của nó không chỉ dừng lại ở việc cài đặt. dpkg duy trì một cơ sở dữ liệu chi tiết về tất cả các gói phần mềm đã được cài đặt trên hệ thống. Cơ sở dữ liệu này ghi lại phiên bản, trạng thái, và danh sách các tệp tin của từng gói. Nhờ đó, bạn có thể dễ dàng kiểm tra xem một gói đã được cài đặt chưa, nó bao gồm những tệp tin nào, và những tệp tin đó nằm ở đâu trên hệ thống. Chính khả năng quản lý chi tiết này đã làm cho hệ sinh thái phần mềm của Debian trở nên cực kỳ ổn định và đáng tin cậy, giúp các quản trị viên hệ thống kiểm soát môi trường của họ một cách chặt chẽ.
Hướng dẫn cơ bản sử dụng lệnh dpkg
Sau khi đã hiểu về vai trò của dpkg, chúng ta hãy cùng đi vào phần thực hành với những câu lệnh cơ bản nhất. Đây là những thao tác bạn sẽ sử dụng thường xuyên khi làm việc với các tệp .deb trên hệ thống của mình.

Cách cài đặt gói phần mềm với dpkg
Đây là chức năng phổ biến nhất của dpkg. Khi bạn tải về một tệp .deb từ internet, ví dụ như trình duyệt Google Chrome hoặc ứng dụng Slack, bạn sẽ dùng dpkg để cài đặt nó. Cú pháp rất đơn giản:
sudo dpkg -i [tên_gói].deb
Trong đó:
- sudo: Thực thi lệnh với quyền quản trị viên (root), vì việc cài đặt phần mềm cần thay đổi các tệp hệ thống.
- -i hoặc –install: Tùy chọn để yêu cầu
dpkg thực hiện hành động cài đặt.
- [tên_gói].deb: Là đường dẫn đầy đủ đến tệp .deb bạn muốn cài.
Ví dụ, để cài đặt gói google-chrome-stable_current_amd64.deb bạn vừa tải về thư mục Downloads, bạn sẽ mở terminal và chạy lệnh:
sudo dpkg -i ~/Downloads/google-chrome-stable_current_amd64.deb
Một vấn đề thường gặp khi sử dụng dpkg -i là lỗi phụ thuộc (dependency error). Điều này xảy ra khi gói bạn đang cài đặt yêu cầu một gói khác phải được cài trước, nhưng gói đó lại chưa có trên hệ thống của bạn. dpkg sẽ báo lỗi và dừng quá trình cài đặt. Đừng lo lắng, chúng ta sẽ tìm hiểu cách xử lý vấn đề này trong các phần sau của bài viết.
Gỡ bỏ và kiểm tra trạng thái gói
Quản lý phần mềm không chỉ là cài đặt mà còn bao gồm việc gỡ bỏ và kiểm tra. dpkg cung cấp các tùy chọn mạnh mẽ để bạn làm điều này.
Để gỡ bỏ một gói phần mềm, bạn có hai lựa chọn chính:
- Gỡ bỏ gói nhưng giữ lại các tệp cấu hình: Dùng lệnh
dpkg -r. Điều này hữu ích khi bạn muốn tạm thời gỡ bỏ một phần mềm nhưng có thể sẽ cài lại sau và muốn giữ nguyên các thiết lập cũ.
sudo dpkg -r [tên_gói]
- Gỡ bỏ hoàn toàn gói, bao gồm cả các tệp cấu hình: Dùng lệnh
dpkg -P (purge). Tùy chọn này sẽ dọn dẹp sạch sẽ mọi thứ liên quan đến gói phần mềm đó.
sudo dpkg -P [tên_gói]
Lưu ý: Khi gỡ bỏ, bạn chỉ cần cung cấp tên gói (ví dụ: google-chrome-stable), không cần tên tệp .deb.
Để kiểm tra trạng thái các gói đã cài, bạn có thể dùng các lệnh sau:
- Liệt kê tất cả các gói đã cài đặt: Lệnh
dpkg -l sẽ hiển thị một danh sách dài. Bạn có thể kết hợp với grep để tìm một gói cụ thể.
dpkg -l | grep chrome
- Kiểm tra thông tin chi tiết của một gói: Lệnh
dpkg -s (status) sẽ cung cấp thông tin đầy đủ về một gói, bao gồm phiên bản, mô tả, và trạng thái (đã cài đặt hay chưa).
dpkg -s google-chrome-stable
Những câu lệnh cơ bản này là nền tảng vững chắc để bạn bắt đầu quản lý phần mềm hiệu quả bằng dòng lệnh.
Quản lý và liệt kê các gói phần mềm .deb trên hệ thống
Việc biết được những gì đang có trên hệ thống của bạn là một kỹ năng quan trọng của bất kỳ quản trị viên nào. dpkg cung cấp các công cụ mạnh mẽ để bạn không chỉ liệt kê mà còn “soi” chi tiết từng gói phần mềm, giúp bạn hiểu rõ hệ thống của mình hơn.

Liệt kê tất cả gói đã cài đặt
Như đã đề cập ở phần trước, lệnh dpkg -l (hoặc dpkg --list) là công cụ chính để xem danh sách tất cả các gói mà dpkg biết đến. Khi chạy lệnh này, bạn sẽ thấy một bảng thông tin với các cột:
dpkg -l
Đầu ra sẽ trông giống như sau:
ii accountsservice 0.6.55-0ubuntu13.1 amd64 query and manipulate user account information
ii acl 2.2.53-6 amd64 Access control list utilities
rc adduser 3.118ubuntu2 all add and remove users and groups
Hãy chú ý đến hai chữ cái đầu tiên ở mỗi dòng. Chúng cho biết trạng thái của gói. Các trạng thái phổ biến nhất là:
- ii: (Install/Install) Gói đã được cài đặt và hoạt động bình thường. Đây là trạng thái bạn mong muốn thấy nhất.
- rc: (Remove/Config-files) Gói đã được gỡ bỏ (remove), nhưng các tệp cấu hình của nó vẫn còn trên hệ thống.
- un: (Unknown/Not-installed) Gói chưa từng được cài đặt.
Vì danh sách này thường rất dài, việc kết hợp với các công cụ như grep để lọc kết quả là vô cùng hữu ích. Ví dụ, để tìm tất cả các gói liên quan đến python, bạn có thể dùng:
dpkg -l | grep python
Tìm kiếm và kiểm tra chi tiết gói
Đôi khi, bạn không chỉ muốn biết một gói có được cài đặt hay không, mà còn muốn biết nó chứa những tệp tin gì và chúng nằm ở đâu. dpkg có hai lệnh cực kỳ hữu ích cho việc này.
Để liệt kê tất cả các tệp tin bên trong một gói đã cài đặt, hãy sử dụng tùy chọn -L (hoặc --listfiles):
dpkg -L [tên_gói]
Ví dụ, để xem tất cả các tệp mà gói curl đã cài đặt vào hệ thống, bạn chạy:
dpkg -L curl
Lệnh này sẽ hiển thị một danh sách các đường dẫn tuyệt đối, cho bạn biết chính xác nơi mỗi tệp được đặt. Điều này rất tiện lợi khi bạn cần tìm một tệp cấu hình hoặc một tệp thực thi cụ thể.
Ngược lại, nếu bạn thấy một tệp lạ trên hệ thống và muốn biết nó thuộc về gói phần mềm nào, bạn có thể sử dụng tùy chọn -S (hoặc --search):
dpkg -S [đường_dẫn_tệp]
Ví dụ, bạn muốn biết tệp /bin/ls do gói nào quản lý? Hãy chạy lệnh:
dpkg -S /bin/ls
Hệ thống sẽ trả về kết quả, thường là coreutils: /bin/ls, cho bạn biết rằng tệp /bin/ls là một phần của gói coreutils. Đây là một công cụ gỡ lỗi và điều tra hệ thống cực kỳ mạnh mẽ.
Ứng dụng nâng cao của lệnh dpkg trong quản lý phần mềm
Khi đã thành thạo các thao tác cơ bản, bạn có thể khám phá những tính năng nâng cao của dpkg để giải quyết các vấn đề phức tạp hơn. Việc kết hợp dpkg với các công cụ khác và xử lý các gói bị lỗi sẽ nâng cao kỹ năng quản trị hệ thống của bạn lên một tầm cao mới.

Sửa lỗi gói bị hỏng (Broken packages)
Một trong những tình huống khó chịu nhất khi quản lý phần mềm là gặp phải “gói bị hỏng”. Tình trạng này có thể xảy ra do quá trình cài đặt bị gián đoạn (mất điện, mất kết nối mạng), hoặc do xung đột giữa các gói. Khi đó, bạn không thể cài đặt hay gỡ bỏ các phần mềm khác một cách bình thường được nữa.
dpkg cung cấp một công cụ để khắc phục tình trạng này. Khi một gói đã được giải nén nhưng chưa được cấu hình đúng cách, bạn có thể buộc dpkg thử lại quá trình cấu hình cho tất cả các gói đang chờ xử lý bằng lệnh:
sudo dpkg --configure -a
Tùy chọn --configure yêu cầu dpkg cấu hình lại một gói, và -a (hoặc --all) áp dụng hành động này cho tất cả các gói đang ở trạng thái chưa hoàn tất.
Tuy nhiên, trong hầu hết các trường hợp lỗi gói bị hỏng là do thiếu phụ thuộc, giải pháp hiệu quả nhất thường là sử dụng apt. Sau khi một lệnh dpkg -i thất bại, bạn có thể chạy lệnh sau để apt tự động tìm và cài đặt các gói phụ thuộc còn thiếu:
sudo apt-get install -f
Lệnh này (với -f là viết tắt của --fix-broken) sẽ đọc trạng thái các gói từ dpkg, phát hiện ra các phụ thuộc chưa được đáp ứng và tự động sửa chữa chúng. Đây là sự kết hợp hoàn hảo giữa sức mạnh cấp thấp của dpkg và sự thông minh của apt.
Sử dụng dpkg kết hợp với các công cụ khác
Sức mạnh thực sự của các công cụ dòng lệnh Linux nằm ở khả năng kết hợp chúng với nhau. dpkg cũng không ngoại lệ.
Như đã thấy ở trên, sự kết hợp giữa dpkg và apt là phổ biến nhất. Bạn có thể dùng dpkg để cài đặt một tệp .deb cục bộ, sau đó dùng apt để sửa lỗi phụ thuộc. Hoặc bạn có thể dùng dpkg -l để liệt kê các gói, sau đó dùng apt-cache show để xem thông tin chi tiết về chúng từ kho lưu trữ.
Một công cụ nâng cao khác là dpkg-divert. Lệnh này cho phép bạn “chuyển hướng” một tệp tin. Nghĩa là, khi một gói cố gắng cài đặt một tệp tin vào một vị trí cụ thể (ví dụ: /usr/bin/example), bạn có thể yêu cầu dpkg cài đặt nó vào một vị trí khác, trong khi phiên bản gốc của tệp vẫn được giữ lại. Điều này rất hữu ích cho các nhà phát triển hoặc quản trị viên hệ thống muốn thử nghiệm một phiên bản khác của một tệp mà không ghi đè lên tệp gốc do hệ thống quản lý. Tuy nhiên, đây là một công cụ mạnh và cần được sử dụng một cách cẩn thận để tránh gây ra sự cố cho hệ thống.
Các vấn đề thường gặp khi dùng dpkg và cách khắc phục
Mặc dù mạnh mẽ, dpkg là một công cụ cấp thấp và đôi khi có thể gây ra những lỗi khiến người dùng mới bối rối. Hiểu rõ nguyên nhân và cách khắc phục các vấn đề phổ biến sẽ giúp bạn tự tin hơn khi làm việc với nó.

Lỗi phụ thuộc khi cài đặt gói
Đây là lỗi phổ biến nhất và gần như chắc chắn bạn sẽ gặp phải. Khi bạn chạy lệnh dpkg -i some-package.deb, bạn có thể nhận được một thông báo lỗi dài dòng, kết thúc bằng một câu tương tự như:
dpkg: dependency problems prevent configuration of some-package: some-package depends on another-package; however: Package another-package is not installed.
Nguyên nhân rất đơn giản: gói some-package cần gói another-package để hoạt động, nhưng another-package chưa được cài đặt trên hệ thống của bạn. Vì dpkg không thể tự động tải và cài đặt các gói phụ thuộc, nó sẽ dừng lại và báo lỗi.
Cách khắc phục: Đây chính là lúc apt tỏa sáng. Đừng cố gắng tìm và cài đặt thủ công từng gói phụ thuộc. Thay vào đó, hãy để quá trình cài đặt của dpkg thất bại, sau đó chạy ngay lệnh sau:
sudo apt-get install -f
Lệnh này sẽ phân tích tình trạng “hỏng” hiện tại, tìm ra tất cả các gói phụ thuộc còn thiếu và tự động cài đặt chúng. Sau khi apt hoàn tất, nó cũng sẽ tự động cấu hình nốt gói some-package mà bạn đã cố cài đặt ban đầu. Vấn đề được giải quyết một cách nhanh chóng và hiệu quả.
Lỗi gói bị hỏng hoặc không hoàn tất quá trình cài đặt
Đôi khi, quá trình cài đặt hoặc gỡ bỏ một gói có thể bị gián đoạn đột ngột (ví dụ: bạn vô tình đóng terminal, mất điện). Điều này có thể để lại gói ở trạng thái “nửa vời”, khiến cơ sở dữ liệu của dpkg bị khóa hoặc không nhất quán. Khi bạn cố gắng chạy bất kỳ lệnh cài đặt/gỡ bỏ nào khác, bạn có thể nhận được thông báo lỗi như:
E: Could not get lock /var/lib/dpkg/lock-frontend...
hoặc
E: dpkg was interrupted, you must manually run 'sudo dpkg --configure -a' to correct the problem.
Cách khắc phục:
- Làm theo chỉ dẫn: Thông báo lỗi thường đã chỉ ra giải pháp. Hãy thử chạy lệnh mà nó đề xuất trước tiên:
sudo dpkg --configure -a
Lệnh này sẽ cố gắng hoàn tất việc cấu hình cho bất kỳ gói nào đang bị dang dở.
- Xóa tệp khóa (lock file): Nếu lỗi liên quan đến việc không thể lấy được “lock”, điều đó có nghĩa là một tiến trình quản lý gói khác có thể vẫn đang chạy hoặc đã kết thúc đột ngột. Sau khi đảm bảo không có tiến trình
apt hay dpkg nào khác đang hoạt động, bạn có thể thử xóa các tệp khóa theo cách thủ công. Tuy nhiên, hãy thận trọng khi làm việc này.
- Buộc gỡ bỏ gói bị lỗi: Nếu một gói cụ thể gây ra sự cố và không thể gỡ bỏ bằng cách thông thường, bạn có thể phải dùng đến các tùy chọn “mạnh tay” hơn. Đây là giải pháp cuối cùng khi các cách khác không hiệu quả.
sudo dpkg --remove --force-remove-reinstreq [tên_gói_lỗi]
Sau khi buộc gỡ bỏ, hãy chạy lại sudo apt-get install -f để dọn dẹp và ổn định lại hệ thống.
Mẹo và best practices khi sử dụng lệnh dpkg
Để sử dụng dpkg một cách an toàn và hiệu quả, việc tuân thủ một số nguyên tắc và mẹo thực hành tốt nhất là rất quan trọng. Những thói quen này không chỉ giúp bạn tránh được các sự cố phổ biến mà còn đảm bảo hệ thống của bạn luôn ổn định và bảo mật.

- Ưu tiên sử dụng apt hoặc apt-get cho các tác vụ hàng ngày. Mặc dù việc hiểu
dpkg là cần thiết, nhưng đối với việc cài đặt phần mềm từ các kho lưu trữ chính thức, apt luôn là lựa chọn tốt hơn. Nó tự động xử lý các gói phụ thuộc, giúp bạn tiết kiệm thời gian và tránh các lỗi không cần thiết. Chỉ sử dụng dpkg -i khi bạn cần cài đặt một tệp .deb cụ thể không có trong kho lưu trữ.
- Luôn kiểm tra gói trước khi cài đặt. Trước khi cài đặt một tệp .deb lạ, đặc biệt là từ các nguồn không chính thức, bạn nên kiểm tra thông tin của nó. Sử dụng lệnh
dpkg -I [tên_gói].deb (hoặc dpkg --info) để xem mô tả, phiên bản, và các gói phụ thuộc mà nó yêu cầu. Điều này giúp bạn đánh giá được mức độ tin cậy và sự tương thích của gói.
- Sao lưu cấu hình trước khi gỡ bỏ gói quan trọng. Khi bạn sử dụng lệnh
dpkg -P (purge) để gỡ bỏ hoàn toàn một gói, tất cả các tệp cấu hình của nó (thường nằm trong thư mục /etc) sẽ bị xóa. Nếu đó là một dịch vụ quan trọng như máy chủ web hoặc cơ sở dữ liệu, hãy sao lưu các tệp cấu hình này trước khi gỡ bỏ. Điều này cho phép bạn dễ dàng khôi phục lại các thiết lập nếu cần cài đặt lại sau này.
- Tránh cài đặt gói không rõ nguồn gốc để bảo mật hệ thống. Một trong những rủi ro lớn nhất khi sử dụng
dpkg để cài đặt tệp .deb thủ công là vấn đề bảo mật. Các gói từ kho lưu trữ chính thức của Debian/Ubuntu đã được kiểm tra và ký số để đảm bảo tính toàn vẹn. Các tệp .deb tải từ các trang web ngẫu nhiên có thể chứa mã độc hoặc làm hỏng hệ thống của bạn. Hãy luôn ưu tiên các nguồn đáng tin cậy.
- Kết hợp
dpkg và apt một cách thông minh. Hãy coi dpkg là công cụ chuyên dụng và apt là công cụ đa năng. Khi một lệnh dpkg thất bại do thiếu phụ thuộc, đừng ngần ngại sử dụng sudo apt-get install -f để sửa chữa. Hiểu được mối quan hệ cộng sinh giữa hai công cụ này là chìa khóa để quản lý gói phần mềm hiệu quả trên Debian và các hệ điều hành tương tự.
Kết luận
Qua bài viết này, chúng ta đã cùng nhau thực hiện một hành trình chi tiết để khám phá lệnh dpkg, từ những khái niệm cơ bản nhất đến các ứng dụng nâng cao và mẹo thực tiễn. dpkg không chỉ là một công cụ dòng lệnh khô khan, mà nó chính là bộ khung xương, là nền tảng vững chắc cho hệ thống quản lý phần mềm của toàn bộ hệ sinh thái Debian. Việc nắm vững cách cài đặt, gỡ bỏ, truy vấn và khắc phục sự cố với dpkg mang lại cho bạn quyền kiểm soát sâu sắc và chính xác đối với hệ thống của mình.
Bùi Mạnh Đức khuyến khích bạn không chỉ đọc mà hãy mở cửa sổ terminal và thực hành ngay những câu lệnh đã học. Hãy thử cài đặt một tệp .deb, kiểm tra thông tin của một gói phần mềm bạn thường dùng, hay liệt kê các tệp tin của nó. Chính qua quá trình thực hành, những kiến thức này mới thực sự trở thành kỹ năng của bạn. Bước tiếp theo trên hành trình của bạn có thể là tìm hiểu sâu hơn về apt, cách nó quản lý các kho lưu trữ, hoặc khám phá các công cụ quản lý gói nâng cao khác trên Linux. Chúc bạn thành công trên con đường chinh phục và làm chủ hệ điều hành mạnh mẽ này.