Lệnh find của Linux: tùy chọn -name, -type, -size, -mtime và -delete
Lệnh find của Linux đi lần lượt xuống từ thư mục bắt đầu và tìm các tệp, thư mục khớp với điều kiện như tên, loại, kích thước, thời gian sửa đổi và quyền. Khi tạo mười tệp trong thư mục thử nghiệm trên máy chủ AlmaLinux 9 và chạy lệnh, đổi từng điều kiện một, chúng tôi đã chuyển các tệp tìm thấy bằng -exec sang lệnh khác, và khi xóa thì kiểm tra danh sách trước bằng cùng điều kiện rồi mới dùng -delete.
Đường dẫn thư mục thử nghiệm và thời gian tệp trong các ô kết quả đã được đổi thành giá trị ví dụ. Với đầu ra của máy chủ Debian 12, chỉ đường dẫn thư mục home là giá trị ví dụ, phần còn lại giữ nguyên.
1️⃣ Cách dùng lệnh find của Linux
Dạng cơ bản là [find đường-dẫn-bắt-đầu điều-kiện]. Nếu bỏ đường dẫn bắt đầu, find tìm ở thư mục hiện tại (.), và nếu bỏ điều kiện, nó in mọi tệp và thư mục dưới đường dẫn bắt đầu.
Thử nghiệm được thực hiện trong /root/work với ba thư mục và mười tệp như bên dưới.
find /root/work/root/work
/root/work/docs
/root/work/docs/readme.txt
/root/work/docs/guide.txt
/root/work/docs/old.tmp
/root/work/logs
/root/work/logs/app.log
/root/work/logs/cache.tmp
/root/work/backup
/root/work/report.txt
/root/work/README.md
/root/work/run.sh
/root/work/my notes.txt
/root/work/empty.txtfind không sắp xếp kết quả theo tên; trong lần chạy này, khi đến thư mục docs, nó in hết các tệp bên trong trước rồi mới sang logs.
Nếu viết nối tiếp nhiều điều kiện, chỉ các tệp khớp tất cả mới còn lại.
-name chỉ so tên tệp với mẫu, không so đường dẫn. Hãy bọc mẫu bằng dấu nháy đơn để shell không mở rộng * trước mà chuyển nguyên cho find.
find /root/work -name '*.txt'/root/work/docs/readme.txt
/root/work/docs/guide.txt
/root/work/report.txt
/root/work/my notes.txt
/root/work/empty.txt-name phân biệt chữ hoa thường. Tìm tên bắt đầu bằng readme chỉ ra docs/readme.txt, đổi sang -iname thì ra cả README.md.
find /root/work -name 'readme*'/root/work/docs/readme.txtfind /root/work -iname 'readme*'/root/work/docs/readme.txt
/root/work/README.mdfind nằm trong gói findutils. Phiên bản ở dòng đầu của [find --version] là findutils 4.8 trên máy chủ AlmaLinux 9.8 và 4.9 trên máy chủ Debian 12.
2️⃣ find -type d và -maxdepth
-type f chỉ giữ tệp thường, -type d chỉ giữ thư mục.
find /root/work -type d/root/work
/root/work/docs
/root/work/logs
/root/work/backupĐường dẫn bắt đầu /root/work cũng là thư mục nên hiện ở dòng đầu. Đổi sang -type f trên cùng đường dẫn thì hiện đủ mười tệp.
-maxdepth đặt số cấp đi xuống từ đường dẫn bắt đầu. Với -maxdepth 1, các tệp trong docs và logs bị loại, chỉ còn năm tệp ngay dưới /root/work.
find /root/work -maxdepth 1 -type f/root/work/report.txt
/root/work/README.md
/root/work/run.sh
/root/work/my notes.txt
/root/work/empty.txtNgược lại, -mindepth 2 bỏ qua những gì ngay dưới đường dẫn bắt đầu và chỉ in năm tệp trong thư mục con.
find /root/work -mindepth 2 -type f/root/work/docs/readme.txt
/root/work/docs/guide.txt
/root/work/docs/old.tmp
/root/work/logs/app.log
/root/work/logs/cache.tmpTrang man khuyên viết tùy chọn toàn cục như -maxdepth ngay sau đường dẫn bắt đầu. Viết -maxdepth 1 sau -type f vẫn cho cùng năm tệp, nhưng trong terminal sẽ có một dòng cảnh báo yêu cầu đặt tùy chọn toàn cục lên trước (theo trang man).
Để chỉ xem có bao nhiêu thư mục hay tệp, hãy chuyển đầu ra cho wc -l. Đếm đầu ra của -type d được 4, kể cả đường dẫn bắt đầu.
find /root/work -type d | wc -l4Thêm -maxdepth 1 vẫn được 4, vì cả ba thư mục con đều ngay dưới đường dẫn bắt đầu.
find /root/work -maxdepth 1 -type d | wc -l4Đếm riêng các tệp trong thư mục con bằng -mindepth 2 được 5.
find /root/work -mindepth 2 -type f | wc -l53️⃣ Điều kiện kích thước và thời gian của lệnh find
Dấu + trước số nghĩa là lớn hơn giá trị đó, - là nhỏ hơn, không có dấu là đúng giá trị đó. Đơn vị của -size ở bảng bên dưới (theo trang man).
| Đơn vị | Kích thước | Có |
|---|---|---|
| c | 1 byte | -size +500c |
| k | 1,024 byte | -size +1k |
| M | 1,048,576 byte | -size +1M |
| G | 1,073,741,824 byte | -size +1G |
| (không có) | Khối 512 byte | -size +2 |
find /root/work -type f -size +1k/root/work/docs/guide.txt
/root/work/logs/app.log
/root/work/report.txtCác tệp lớn hơn 1k là guide.txt 5,000 byte, app.log 2MB và report.txt 1,200 byte.
find /root/work -size +1M/root/work/logs/app.logViết -size hai lần để đặt khoảng thì chỉ còn hai tệp lớn hơn 1k và nhỏ hơn 100k.
find /root/work -type f -size +1k -size -100k/root/work/docs/guide.txt
/root/work/report.txt-size chia kích thước cho đơn vị rồi làm tròn lên trước khi so sánh. Vì vậy README.md 300 byte cũng tính là 1k, và -size -1k chỉ ra empty.txt có kích thước 0.
find /root/work -type f -size -1k/root/work/empty.txtĐể xem điều kiện thời gian, chúng tôi đặt thời gian sửa đổi của README.md, my notes.txt và docs/readme.txt về 3 ngày trước, hai tệp .tmp về 10 ngày trước. Mỗi tệp lưu ba mốc thời gian là truy cập, sửa đổi và thay đổi, có thể kiểm tra bằng lệnh stat.
-mtime đếm thời gian từ lần sửa đổi cuối theo đơn vị 24 giờ. -mtime -1 cho năm tệp tạo trong 24 giờ.
find /root/work -type f -mtime -1/root/work/docs/guide.txt
/root/work/logs/app.log
/root/work/report.txt
/root/work/run.sh
/root/work/empty.txt-mtime +7 chỉ cho hai tệp .tmp đặt về 10 ngày trước. Hãy dùng dạng này để kiểm tra danh sách trước khi xóa nhật ký cũ hoặc tệp tạm.
find /root/work -type f -mtime +7/root/work/docs/old.tmp
/root/work/logs/cache.tmp-mmin tính tương tự theo phút. Kết quả của -mmin -60 là cùng năm tệp với -mtime -1.
find /root/work -type f -mmin -60/root/work/docs/guide.txt
/root/work/logs/app.log
/root/work/report.txt
/root/work/run.sh
/root/work/empty.txt-newer tìm các tệp sửa đổi sau tệp tham chiếu. Lấy README.md đặt về 3 ngày trước làm tham chiếu thì ra năm tệp tạo sau đó.
find /root/work -type f -newer /root/work/README.md/root/work/docs/guide.txt
/root/work/logs/app.log
/root/work/report.txt
/root/work/run.sh
/root/work/empty.txt-empty tìm cả tệp có kích thước 0 và thư mục trống, cho ra thư mục trống backup và empty.txt.
find /root/work -empty/root/work/backup
/root/work/empty.txt4️⃣ Điều kiện -perm và -user của find
Nếu sau -perm chỉ viết số, find tìm tệp có quyền đúng giá trị đó. -perm 644 loại run.sh 755 và my notes.txt 600, cho ra tám tệp.
find /root/work -type f -perm 644/root/work/docs/readme.txt
/root/work/docs/guide.txt
/root/work/docs/old.tmp
/root/work/logs/app.log
/root/work/logs/cache.tmp
/root/work/report.txt
/root/work/README.md
/root/work/empty.txtThêm - trước chế độ sẽ tìm tệp có đủ mọi quyền đã viết. Chỉ run.sh có quyền thực thi của chủ sở hữu (u+x).
find /root/work -type f -perm -u+x/root/work/run.shThêm / trước chế độ thì chỉ cần có một trong các quyền đã viết. 6000 là tổng của SUID (4000) và SGID (2000), dạng này dùng để kiểm tra trên máy chủ các tệp khi chạy sẽ hoạt động bằng quyền của chủ sở hữu hoặc nhóm.
Thư mục thử nghiệm không có tệp như vậy, nên sau khi gán SUID cho run.sh và chạy thì ra run.sh.
chmod u+s /root/work/run.shfind /root/work -type f -perm /6000/root/work/run.shTài liệu cũ ghi -perm +6000 ở cùng vị trí. Chạy nguyên như vậy thì kết thúc với lỗi [invalid mode].
find /root/work -type f -perm +6000find: invalid mode '+6000'Dạng + đã bị gỡ trong findutils 4.5.12 (theo trang man), nên hãy viết /. SUID gán để thử nghiệm đã được gỡ bằng chmod u-s.
-user lọc theo tên chủ sở hữu. Mọi tệp thử nghiệm đều thuộc root nên -user root một mình không lọc được gì; thêm -name để chọn tệp .log thì chỉ ra app.log.
find /root/work -type f -user root -name '*.log'/root/work/logs/app.log-nouser tìm các tệp có UID chủ sở hữu không khớp tài khoản nào. Dùng để kiểm tra tệp còn lại trên máy chủ sau khi xóa tài khoản; sau khi đổi chủ của guide.txt sang UID 1500 không tồn tại thì ra guide.txt.
chown 1500:1500 /root/work/docs/guide.txtfind /root/work -nouser/root/work/docs/guide.txt-nogroup kiểm tra tương tự với nhóm sở hữu, và ra guide.txt có nhóm cũng đổi thành 1500. Sau khi thử nghiệm, chúng tôi khôi phục bằng chown root:root.
Thêm -o giữa các điều kiện thì chỉ cần khớp một. Khi dùng cùng điều kiện khác như -type f, hãy nhóm các điều kiện nối bằng -o trong ngoặc. Đặt dấu gạch chéo ngược trước ngoặc để shell không diễn giải trước, và để khoảng trắng giữa ngoặc và điều kiện.
find /root/work -type f \( -name '*.log' -o -name '*.tmp' \)/root/work/docs/old.tmp
/root/work/logs/app.log
/root/work/logs/cache.tmp! đảo điều kiện ngay sau nó. Tìm các tệp không phải .txt ra năm tệp.
find /root/work -type f ! -name '*.txt'/root/work/docs/old.tmp
/root/work/logs/app.log
/root/work/logs/cache.tmp
/root/work/README.md
/root/work/run.sh5️⃣ Sử dụng find -exec
-exec chạy lệnh viết phía sau cho từng tệp tìm thấy, đường dẫn tìm thấy đi vào vị trí {}. Dấu ; cuối lệnh viết là \; để shell không đọc trước thành dấu phân cách lệnh.
find /root/work -name '*.log' -exec ls -l {} \;-rw-r--r-- 1 root root 2097152 Oct 5 14:10 /root/work/logs/app.logNếu kết thúc bằng + thay vì \;, các đường dẫn được gom lại và lệnh chỉ chạy một lần. So sánh bằng echo, \; in năm đường dẫn trên năm dòng, còn + in trên một dòng.
find /root/work -name '*.txt' -exec echo {} \;/root/work/docs/readme.txt
/root/work/docs/guide.txt
/root/work/report.txt
/root/work/my notes.txt
/root/work/empty.txtfind /root/work -name '*.txt' -exec echo {} +/root/work/docs/readme.txt /root/work/docs/guide.txt /root/work/report.txt /root/work/my notes.txt /root/work/empty.txtVới lệnh nhận nhiều đường dẫn như ls, hãy gom bằng + để giảm số lần chạy. Chúng tôi kiểm tra kích thước ba tệp lớn hơn 1k bằng một lần ls -lh.
find /root/work -type f -size +1k -exec ls -lh {} +-rw-r--r-- 1 root root 4.9K Oct 5 14:10 /root/work/docs/guide.txt
-rw-r--r-- 1 root root 2.0M Oct 5 14:10 /root/work/logs/app.log
-rw-r--r-- 1 root root 1.2K Oct 5 14:10 /root/work/report.txt-exec cũng dùng để đặt quyền hàng loạt cho thư mục web, 644 cho tệp và 755 cho thư mục. Trước khi chạy, chúng tôi tìm các tệp có giá trị khác và ra run.sh cùng my notes.txt.
find /root/work -type f ! -perm 644/root/work/run.sh
/root/work/my notes.txtTệp và thư mục có quyền khác nhau nên chạy riêng với -type f và -type d. chmod cũng nhận nhiều đường dẫn nên chúng tôi kết thúc bằng +.
find /root/work -type f -exec chmod 644 {} +find /root/work -type d -exec chmod 755 {} +Tìm lại với cùng điều kiện không ra gì, và thư mục backup đã đổi sẵn thành 700 cũng thành 755.
Nhưng run.sh cũng thành 644, chạy thì báo [Permission denied]. Trong thư mục có lẫn tệp thực thi, hãy cấp lại quyền thực thi cho các tệp đó bằng chmod +x.
Để chỉ đổi tệp trong thư mục con, hãy thêm -mindepth 2. Chạy với 660 thì chỉ năm tệp trong docs và logs đổi, và sau khi kiểm tra chúng tôi trả về 644.
find /root/work -mindepth 2 -type f -exec chmod 660 {} +find /root/work -type f -perm 660/root/work/docs/readme.txt
/root/work/docs/guide.txt
/root/work/docs/old.tmp
/root/work/logs/app.log
/root/work/logs/cache.tmpNối find với grep sẽ tìm theo nội dung tệp thay vì tên. Để tạo tình huống kiểm tra web shell, chúng tôi tạo bốn tệp PHP trong thư mục riêng /root/site và đặt chuỗi [base64_decode] vào html-cache.php và photo.php trong thư mục upload.
find /root/site -type f/root/site/lib/func.php
/root/site/upload/html-cache.php
/root/site/upload/photo.php
/root/site/index.phpNếu biết tên web shell, hãy tìm bằng -name. Thêm -maxdepth 2 để chỉ xuống đến thư mục upload thì chỉ ra html-cache.php.
find /root/site -maxdepth 2 -type f -name 'html*.php'/root/site/upload/html-cache.phpphoto.php đổi sang tên bình thường không hiện ở đây. Chạy grep -l qua -exec chỉ in đường dẫn của tệp chứa chuỗi, và cả hai tệp đều hiện.
find /root/site -name '*.php' -exec grep -l 'base64_decode' {} +/root/site/upload/html-cache.php
/root/site/upload/photo.php[base64_decode] là hàm có cả trong tệp lõi WordPress, nên hãy mở kiểm tra nội dung tệp tìm thấy rồi mới xóa.
-print0 đặt ký tự null thay cho xuống dòng giữa các đường dẫn. Ký tự null không hiện trên màn hình nên các đường dẫn dính liền trên một dòng.
find /root/work -name '*.txt' -print0/root/work/docs/readme.txt/root/work/docs/guide.txt/root/work/report.txt/root/work/my notes.txt/root/work/empty.txtKhi chuyển tên có dấu cách như my notes.txt sang lệnh khác mà không bị đứt, đầu ra của -print0 được dùng cặp với xargs -0 (theo trang man).
6️⃣ Xóa tệp bằng find và tùy chọn
Trước khi xóa, hãy chạy cùng điều kiện mà không xóa và tự kiểm tra danh sách tệp sẽ xóa.
find /root/work -name '*.tmp'/root/work/docs/old.tmp
/root/work/logs/cache.tmp-exec rm {} \; chạy rm cho từng tệp tìm thấy. Chạy riêng trong thư mục logs thì cache.tmp bị xóa, chỉ còn app.log.
find /root/work/logs -name '*.tmp' -exec rm {} \;ls /root/work/logsapp.log-delete để find tự xóa mà không chạy rm. Khi chạy không in gì, và tìm lại với cùng điều kiện thì không còn tệp .tmp.
find /root/work -name '*.tmp' -deletefind /root/work -name '*.tmp'-delete phải luôn viết sau điều kiện. find tính dòng lệnh từ đầu như một biểu thức, nên nếu đặt -delete lên đầu, nó sẽ cố xóa mọi thứ dưới đường dẫn bắt đầu trước khi xét điều kiện (theo trang man).
🔲 Tùy chọn của lệnh find
📌 Tùy chọn chính: kết quả chạy trong bài này
| Tùy chọn | Chức năng | Kết quả trong bài này | |
|---|---|---|---|
| -name | Tìm tên khớp với mẫu (phân biệt chữ hoa thường) | '*.txt' cho năm tệp, 'readme*' chỉ cho docs/readme.txt | |
| -iname | So tên không phân biệt chữ hoa thường | 'readme*' cho docs/readme.txt và README.md | |
| -type f, -type d | Chỉ giữ tệp thường (f) hoặc thư mục (d) | -type d cho bốn thư mục kể cả đường dẫn bắt đầu, -type f cho mười tệp | |
| -maxdepth | Chỉ đi xuống N cấp dưới đường dẫn bắt đầu | -maxdepth 1 chỉ còn năm tệp ngay dưới /root/work | |
| -mindepth | Bỏ qua các cấp phía trên N từ đường dẫn bắt đầu | -mindepth 2 chỉ cho năm tệp trong thư mục con | |
| -size | Tìm theo kích thước (+ lớn hơn, - nhỏ hơn, đơn vị c, k, M, G) | -size +1k cho ba tệp, -size -1k chỉ cho empty.txt | |
| -mtime | So thời gian từ khi sửa nội dung theo đơn vị 24 giờ | -mtime -1 cho năm tệp, -mtime +7 cho hai tệp .tmp | |
| -mmin | So thời gian từ khi sửa theo phút | -mmin -60 cho cùng năm tệp với -mtime -1 | |
| -ctime | So theo đơn vị 24 giờ đến cả lúc thông tin tệp như quyền và tên thay đổi | -ctime -1 cho đủ mười tệp thử nghiệm | |
| -newer | Tìm những gì sửa sau tệp tham chiếu | Năm tệp khi lấy README.md đặt về 3 ngày trước làm tham chiếu | |
| -empty | Tìm tệp kích thước 0 và thư mục trống | Cho thư mục trống backup và empty.txt | |
| -perm | Tìm theo quyền (chỉ số: đúng giá trị đó, có - phía trước: đủ mọi quyền đã viết, có /: ít nhất một quyền) | -perm 644 cho tám tệp, -perm -u+x cho run.sh, sau khi gán SUID thì -perm /6000 cho run.sh | |
| -user | Lọc theo tên chủ sở hữu | Cùng -name '*.log' cho app.log, tài khoản không tồn tại kết thúc bằng lỗi | |
| -nouser | Tìm những gì có UID chủ sở hữu không có tài khoản | Cho guide.txt có UID đổi thành 1500 | |
| -nogroup | Tìm những gì có GID nhóm không có nhóm | Cho guide.txt có GID đổi thành 1500 | |
| -o | Giữ những gì khớp một trong hai (đặt trong ngoặc khi dùng cùng điều kiện khác) | Gộp .log và .tmp cho ba tệp | |
| ! | Đảo điều kiện ngay sau nó | Cho năm tệp không phải .txt | |
| -exec | Chạy lệnh viết phía sau cho từng tệp tìm thấy (đường dẫn ở vị trí {}) | Kết thúc bằng + thì một lần echo in năm đường dẫn trên một dòng | |
| -print0 | Đặt ký tự null thay cho xuống dòng giữa các đường dẫn | Ký tự null không hiện, đường dẫn dính liền trên một dòng | |
| -delete | find tự xóa các tệp tìm thấy (viết sau điều kiện) | Không in gì, tìm lại không còn tệp .tmp |
📎 Tùy chọn khác: theo tài liệu hướng dẫn chính thức
| Tùy chọn | Chức năng | |
|---|---|---|
| -L | Đi theo liên kết tượng trưng và dùng thông tin của tệp đích | |
| -path | So toàn bộ đường dẫn thay vì tên với mẫu shell | |
| -regex | So toàn bộ đường dẫn với biểu thức chính quy | |
| -iregex | So như -regex nhưng không phân biệt chữ hoa thường | |
| -atime | So thời gian từ lần truy cập cuối theo đơn vị 24 giờ | |
| -cnewer | Tìm những gì đổi trạng thái sau thời gian sửa của tệp tham chiếu | |
| -group | Lọc theo tên nhóm sở hữu | |
| -xdev | Không đi xuống thư mục của hệ thống tệp khác | |
| -daystart | Tính điều kiện thời gian từ 0 giờ hôm nay thay vì 24 giờ trước | |
| -prune | Nếu là thư mục thì không đi xuống | |
| -quit | Kết thúc ngay (-print -quit chỉ in kết quả đầu tiên) | |
| -printf | In theo định dạng tự đặt | |
| -ls | In tệp tìm thấy theo dạng ls -dils | |
| -fprint | Lưu đường dẫn tìm thấy vào tệp chỉ định thay vì màn hình | |
| -ok | Chạy như -exec nhưng hỏi trước | |
| -execdir | Chạy như -exec nhưng chạy lệnh trong thư mục của tệp tìm thấy |
🔲 Trình mô phỏng lệnh find
Trình mô phỏng bên dưới là máy chủ ảo chứa cùng thư mục thử nghiệm, nơi bạn có thể tự chạy các điều kiện như -name, -type, -size, -mtime, -perm cùng -exec và -delete.
7️⃣ Lỗi của lệnh find
Nếu viết mẫu không có dấu nháy, shell áp dụng quy tắc Ký tự đại diện và mở rộng trước thành tên tệp trong thư mục hiện tại. Khi chuyển đến thư mục docs và viết *.txt không có dấu nháy, shell đổi thành hai tên guide.txt và readme.txt rồi chuyển đi, nên xuất hiện lỗi bên dưới.
cd /root/work/docsfind /root/work -name *.txtfind: paths must precede expression: `readme.txt'
find: possible unquoted pattern after predicate `-name'?Mã thoát là 1.
Thiếu \; hoặc + ở cuối -exec thì báo [missing argument to `-exec’].
find /root/work -name '*.log' -exec ls -l {}find: missing argument to `-exec'Đường dẫn bắt đầu không tồn tại cho [No such file or directory] và kết thúc với mã thoát 1.
find /nonexistent-dir -name xfind: '/nonexistent-dir': No such file or directoryTên tài khoản không tồn tại ở -user, hoặc giá trị khác các chữ quy định như f và d ở -type, đều kết thúc ngay bằng lỗi mà không bắt đầu tìm.
find /root/work -user nosuchuserfind: 'nosuchuser' is not the name of a known userfind /root/work -type xfind: Unknown argument to -type: xBằng tài khoản thường trên máy chủ Debian 12, chúng tôi đổi quyền của thư mục lock trong thư mục thử nghiệm thành 000 rồi tìm trong thư mục thử nghiệm. Không đọc được bên trong lock nên báo [Permission denied] và mã thoát là 1.
find ~/findtest/home/user/findtest
/home/user/findtest/report.txt
/home/user/findtest/lock
find: '/home/user/findtest/lock': Permission denied
/home/user/findtest/docs
/home/user/findtest/docs/readme.txtĐể chỉ ẩn các dòng lỗi, hãy thêm 2>/dev/null. Thông báo lỗi biến mất nhưng mã thoát vẫn là 1.
find ~/findtest -name '*.txt' 2>/dev/null/home/user/findtest/report.txt
/home/user/findtest/docs/readme.txt🔢 FAQ & nội dung đề xuất
Tìm nội dung
Lệnh grep trên Linux
Bài viết về lệnh grep tìm chữ trong tệp và in dòng đó, cùng các tùy chọn.
Xóa
Lệnh rm trên Linux: tùy chọn rm -rf và cách xóa không cần xác nhận
Bài viết về tùy chọn -r, -f và câu hỏi xác nhận của lệnh rm khi xóa tệp và thư mục.
Dung lượng
Lệnh du: kiểm tra dung lượng đĩa của tệp
Bài viết về cách cộng dung lượng đĩa mà thư mục và tệp chiếm bằng lệnh du.
ℹ️ Thông báo tiếp thị liên kết
Nội dung trên trang này có chứa liên kết affiliate (tiếp thị liên kết). Khi khách truy cập mua sản phẩm hoặc dịch vụ qua các liên kết này, trang sẽ nhận hoa hồng từ bên bán. Trong quá trình đó, số tiền người mua phải trả (sẽ giảm khi có chương trình khuyến mãi ↓) không hề tăng lên. Giá, khuyến mãi và tình trạng hàng được đăng theo thời điểm viết bài và có thể khác với thực tế, vì vậy hãy kiểm tra lại lần cuối với bên bán trước khi mua. Việc chọn và đánh giá sản phẩm dựa trên tiêu chí riêng của trang; việc có nhận hoa hồng hay không không ảnh hưởng đến thứ tự giới thiệu hay nội dung đánh giá.