SQLite: Truy vấn file ZIP bằng SQL (có thể bạn chưa biết)

Trong Linux, có những công cụ mà chúng ta nghĩ đã quá quen thuộc. Nhưng bạn đã biết công cụ quản lý cơ sở dữ liệu nhỏ gọn nhất thế giới, SQLite, lại có một chức năng ít ai ngờ tới: khả năng giao tiếp trực tiếp với các file nén ZIP.

Thú thật là khi tìm hiểu sâu và thấy nó ứng dụng được cũng cũng khá wow và chỉ vì một thói quen đơn giản đọc tài liệu.

Hướng dẫn truy vấn file ZIP bằng SQLite

Hãy tưởng tượng chúng ta có một file nén tên là my.zip. Bên trong nó là những file thông thường. Làm thế nào để nhìn thấu và thao tác nó mà không cần giải nén?

5b88b476-b827-4e83-afc2-01328843b3a2
Toàn bộ quá trình, từ việc tạo file ZIP đến dùng SQL để xóa file bên trong nó.

Bước 1: Chuẩn bị file ZIP

Đầu tiên, chúng ta tạo một file text có nội dung là chữ “hello” được tạo bằng lệnh figlet và nén nó cùng với một thư mục tên là group vào file my.zip.

$ cp /etc/group .
$ figlet hello > hello.txt
$ zip -r my.zip *

Kết quả đầu ra:

adding: group (deflated 56%)
adding: hello.txt (deflated 51%)

Bước 2: Mở file ZIP bằng SQLite

Chúng ta dùng lệnh sqlite3 để mở file ZIP.

$ sqlite3 my.zip

Kết quả đầu ra:

SQLite version 3.43.2 2023-10-10 13:08:14
Enter ".help" for usage hints.
sqlite>

Bước 3: Tạo một Virtual Table

Với một câu lệnh CREATE VIRTUAL TABLE đơn giản, chúng ta đang dạy cho SQLite cách nhìn nhận file my.zip như một bảng dữ liệu.

CREATE VIRTUAL TABLE zip USING zipfile('my.zip');

Bước 4: Truy vấn nội dung file ZIP như một bảng Database

Với câu lệnh SELECT, chúng ta có thể xem danh sách các file trong kho lưu trữ.

SELECT name FROM zip;

Kết quả đầu ra:

group
hello.txt

Sau đó, chúng ta có thể đọc nội dung của một file cụ thể:

SELECT data FROM zip WHERE name = 'hello.txt';

Kết quả đầu ra:

 _          _ _       
| |__   ___| | | ___  
| '_ \ / _ \ | |/ _ \ 
| | | |  __/ | | (_) |
|_| |_|\___|_|_|\___/ 

Toàn bộ nội dung ASCII art của file text đã được hiển thị ngay trên terminal.

Bước 5: Chỉnh sửa file ZIP bằng lệnh SQL

Chúng ta có thể thay đổi cấu trúc của file ZIP bằng SQL. Hãy thử xóa thư mục group ra khỏi kho lưu trữ.

DELETE FROM zip WHERE name = 'group';

Bước 6: Kiểm tra kết quả

Sau khi thoát khỏi SQLite bằng lệnh .quit, một lệnh unzip -l đơn giản sẽ cho thấy kết quả.

$ unzip -l my.zip

Kết quả đầu ra:

Archive:  my.zip
  Length      Date    Time    Name
---------  ---------- -----   ----
      138  08-08-2025 08:58   hello.txt
---------                     -------
      138                     1 file

Bạn có thể thấy rõ, thư mục group đã hoàn toàn biến mất và chỉ còn lại một file duy nhất.

Bí mật nằm ở đâu?

Điều này chứng tỏ điều gì? Nó cho thấy ranh giới giữa các loại công cụ đôi khi rất mong manh. Một trình quản lý database có thể trở thành một tiện ích xử lý file mạnh mẽ. Nó cũng là một lời nhắc nhở rằng, thế giới phần mềm luôn đầy rẫy những easter eggs và những tính năng ẩn, đang chờ đợi những người tò mò và kiên nhẫn đọc tài liệu khám phá ra.

Chia sẻ bài viết:
Theo dõi
Thông báo của
0 Góp ý
Được bỏ phiếu nhiều nhất
Mới nhất Cũ nhất
Phản hồi nội tuyến
Xem tất cả bình luận