Thứ sáu, 27/09/2013 | 00:00 GMT+7

Cách sử dụng Tìm và Định vị để Tìm kiếm Tệp trên VPS Linux

Một vấn đề mà user gặp phải khi lần đầu tiên xử lý một máy Linux là làm thế nào để tìm thấy các file họ đang tìm kiếm.


Hướng dẫn này sẽ trình bày cách sử dụng lệnh find được đặt tên phù hợp. Điều này sẽ giúp bạn tìm kiếm các file trên VPS của bạn bằng nhiều bộ lọc và thông số. Ta cũng sẽ trình bày ngắn gọn về lệnh locate , lệnh này được dùng để tìm kiếm lệnh theo một cách khác.

Tìm theo tên


Cách rõ ràng nhất để tìm kiếm file là theo tên.

Để tìm một file theo tên, hãy nhập:

find -name "query" 

Điều này sẽ phân biệt chữ hoa chữ thường, nghĩa là tìm kiếm “tệp” khác với tìm kiếm “Tệp”.

Để tìm một file theo tên, nhưng bỏ qua trường hợp của truy vấn, hãy nhập:

find -iname "query" 

Nếu bạn muốn tìm tất cả các file không tuân theo một mẫu cụ thể, bạn có thể đảo ngược tìm kiếm bằng “-not” hoặc “!”. Nếu bạn sử dụng “!”, Bạn phải thoát khỏi ký tự để bash không cố gắng diễn giải nó trước khi tìm thấy có thể hoạt động:

find -not -name "query_to_avoid" 

Hoặc là

find \! -name "query_to_avoid" 

Tìm theo loại


Bạn có thể chỉ định loại file bạn muốn tìm bằng tham số "-type". Nó hoạt động như thế này:

find -type type_descriptor query 

Một số bộ mô tả phổ biến nhất mà bạn có thể sử dụng để chỉ định loại file ở đây:

  • f : file thông thường

  • d : folder

  • l : softlink

  • c : thiết bị ký tự

  • b : khối thiết bị

Ví dụ: nếu ta muốn tìm tất cả các thiết bị ký tự trên hệ thống của bạn , ta có thể đưa ra lệnh sau:

find / -type c 

/dev/parport0 /dev/snd/seq /dev/snd/timer /dev/autofs /dev/cpu/microcode /dev/vcsa7 /dev/vcs7 /dev/vcsa6 /dev/vcs6 /dev/vcsa5 /dev/vcs5 /dev/vcsa4 . . . 

Ta có thể tìm kiếm tất cả các file kết thúc bằng “.conf” như sau:

find / -type f -name "*.conf" 

/var/lib/ucf/cache/:etc:rsyslog.d:50-default.conf /usr/share/base-files/nsswitch.conf /usr/share/initramfs-tools/event-driven/upstart-jobs/mountall.conf /usr/share/rsyslog/50-default.conf /usr/share/adduser/adduser.conf /usr/share/davfs2/davfs2.conf /usr/share/debconf/debconf.conf /usr/share/doc/apt-utils/examples/apt-ftparchive.conf . . . 

Lọc theo thời gian và kích thước


Tìm cung cấp cho bạn nhiều cách khác nhau để lọc kết quả theo kích thước và thời gian.

Kích thước


Bạn có thể lọc theo kích thước bằng cách sử dụng thông số "-size".

Ta thêm một hậu tố vào cuối giá trị của ta để chỉ định cách ta đang đếm. Đây là một số tùy chọn phổ biến:

  • c : byte

  • k : Kilobyte

  • M : Megabyte

  • G : Gigabyte

  • b : khối 512 byte

Để tìm tất cả các file có chính xác 50 byte, hãy nhập:

find / -size 50c 

Để tìm tất cả các file nhỏ hơn 50 byte, ta có thể sử dụng biểu mẫu này để thay thế:

find / -size -50c 

Để tìm tất cả các file lớn hơn 700 Megabyte, ta có thể sử dụng lệnh sau:

find / -size +700M 

Thời gian


Linux lưu trữ dữ liệu thời gian về thời gian truy cập, thời gian sửa đổi và thời gian thay đổi.

  • Thời gian truy cập : Lần cuối cùng một file được đọc hoặc ghi vào.

  • Thời gian sửa đổi : Lần cuối cùng nội dung của file đã được sửa đổi.

  • Thời gian thay đổi : Lần cuối cùng metadata inode của file đã được thay đổi.

Ta có thể sử dụng chúng với các tham số “-atime”, “-mtime” và “-ctime”. Chúng có thể sử dụng các ký hiệu cộng và trừ để chỉ định lớn hơn hoặc nhỏ hơn, giống như ta đã làm với kích thước.

Giá trị của tham số này chỉ định số ngày bạn muốn tìm kiếm.

Để tìm các file có thời gian sửa đổi một ngày trước, hãy nhập:

find / -mtime 1 

Nếu ta muốn các file đã được truy cập cách đây chưa đầy một ngày, ta có thể nhập:

find / -atime -1 

Để nhận các file cuối cùng đã thay đổi thông tin meta của chúng cách đây hơn 3 ngày, hãy nhập:

find / -ctime +3 

Ngoài ra còn có một số thông số đồng hành mà ta có thể sử dụng để chỉ định phút thay vì ngày:

find / -mmin -1 

Điều này sẽ cung cấp cho các file đã được sửa đổi loại hệ thống trong phút cuối cùng.

Find cũng có thể thực hiện so sánh với file tham chiếu và trả về những file mới hơn:

find / -newer myfile 

Tìm bởi Chủ sở hữu và Quyền


Bạn cũng có thể tìm kiếm file của chủ sở hữu file hoặc chủ sở hữu group .

Bạn thực hiện việc này bằng cách sử dụng các tham số “-user” và “-group” tương ứng. Tìm file do user “nhật ký hệ thống” sở hữu bằng lệnh :

find / -user syslog 

Tương tự, ta có thể chỉ định các file thuộc sở hữu của group “bóng tối” bằng lệnh :

find / -group shadow 

Ta cũng có thể tìm kiếm các file có quyền cụ thể.

Nếu ta muốn khớp một bộ quyền chính xác, ta sử dụng biểu mẫu này:

find / -perm 644 

Điều này sẽ khớp các file với chính xác các quyền được chỉ định.

Nếu ta muốn chỉ định bất kỳ điều gì có ít nhất những quyền đó, bạn có thể sử dụng biểu mẫu này:

find / -perm -644 

Điều này sẽ trùng với các file nào có quyền bổ sung. Tệp có quyền "744" sẽ được khớp trong trường hợp này.

Lọc theo độ sâu


Đối với phần này, ta sẽ tạo một cấu trúc folder trong một folder tạm thời. Nó sẽ chứa ba cấp độ folder , với mười folder ở cấp độ đầu tiên. Mỗi folder (bao gồm cả folder tạm thời) sẽ chứa mười file và mười folder con.

Tạo cấu trúc này bằng cách đưa ra các lệnh sau:

cd mkdir -p ~/test/level1dir{1..10}/level2dir{1..10}/level3dir{1..10} touch ~/test/{file{1..10},level1dir{1..10}/{file{1..10},level2dir{1..10}/{file{1..10},level3dir{1..10}/file{1..10}}}} cd ~/test 

Vui lòng kiểm tra cấu trúc folder với lscd để biết cách sắp xếp mọi thứ. Khi bạn hoàn thành, hãy quay lại folder thử nghiệm:

cd ~/test 

Ta sẽ tìm cách trả về các file cụ thể từ cấu trúc này. Trước tiên, hãy thử một ví dụ chỉ với một tìm kiếm tên thông thường để so sánh:

find -name file1 

./level1dir7/level2dir8/level3dir9/file1 ./level1dir7/level2dir8/level3dir3/file1 ./level1dir7/level2dir8/level3dir4/file1 ./level1dir7/level2dir8/level3dir1/file1 ./level1dir7/level2dir8/level3dir8/file1 ./level1dir7/level2dir8/level3dir7/file1 ./level1dir7/level2dir8/level3dir2/file1 ./level1dir7/level2dir8/level3dir6/file1 ./level1dir7/level2dir8/level3dir5/file1 ./level1dir7/level2dir8/file1 . . . 

Có rất nhiều kết quả. Nếu ta kết hợp kết quả vào một bộ đếm, ta có thể thấy rằng có tổng cộng 1111 kết quả:

find -name file1 | wc -l 

1111 

Đây có lẽ là quá nhiều kết quả hữu ích cho bạn trong hầu hết các trường hợp. Hãy cố gắng thu hẹp nó lại.

Bạn có thể chỉ định độ sâu tối đa của tìm kiếm trong folder tìm kiếm cấp cao nhất:

find -maxdepth num -name query 

Để chỉ tìm thấy “file1” trong các folder “level1” trở lên, bạn có thể chỉ định độ sâu tối đa là 2 (1 cho folder cấp cao nhất và 1 cho các folder cấp1):

find -maxdepth 2 -name file1 

./level1dir7/file1 ./level1dir1/file1 ./level1dir3/file1 ./level1dir8/file1 ./level1dir6/file1 ./file1 ./level1dir2/file1 ./level1dir9/file1 ./level1dir4/file1 ./level1dir5/file1 ./level1dir10/file1 

Đó là một danh sách dễ quản lý hơn nhiều.

Bạn cũng có thể chỉ định một folder tối thiểu nếu bạn biết rằng tất cả các file đều tồn tại trước một thời điểm nhất định trong folder hiện tại:

find -mindepth num -name query 

Ta có thể sử dụng điều này để chỉ tìm các file ở cuối các nhánh folder :

find -mindepth 4 -name file 

./level1dir7/level2dir8/level3dir9/file1 ./level1dir7/level2dir8/level3dir3/file1 ./level1dir7/level2dir8/level3dir4/file1 ./level1dir7/level2dir8/level3dir1/file1 ./level1dir7/level2dir8/level3dir8/file1 ./level1dir7/level2dir8/level3dir7/file1 ./level1dir7/level2dir8/level3dir2/file1 . . . 

, do cấu trúc folder phân nhánh của ta , điều này sẽ trả về một số lượng lớn kết quả (1000).

Bạn có thể kết hợp các thông số độ sâu tối thiểu và tối đa để lấy nét trong phạm vi hẹp:

find -mindepth 2 -maxdepth 3 -name file 

./level1dir7/level2dir8/file1 ./level1dir7/level2dir5/file1 ./level1dir7/level2dir7/file1 ./level1dir7/level2dir2/file1 ./level1dir7/level2dir10/file1 ./level1dir7/level2dir6/file1 ./level1dir7/level2dir3/file1 ./level1dir7/level2dir4/file1 ./level1dir7/file1 . . . 

Thực thi và kết hợp Tìm lệnh


Bạn có thể thực hiện một lệnh trợ giúp tùy ý trên mọi thứ tìm thấy kết quả phù hợp bằng cách sử dụng tham số “-exec”. Điều này được gọi là như thế này:

find find_parameters -exec command_and_params {} \; 

“{}” Được sử dụng làm trình giữ chỗ cho các file tìm thấy kết quả phù hợp. Các "\;" được sử dụng để find biết lệnh kết thúc ở đâu.

Ví dụ: ta có thể tìm thấy các file trong phần trước có quyền “644” và sửa đổi chúng để có quyền “664”:

cd ~/test find . -type f -perm 644 -exec chmod 664 {} \; 

Sau đó, ta có thể thay đổi các quyền của folder như sau:

find . -type d -perm 755 -exec chmod 700 {} \; 

Nếu bạn muốn liên kết các kết quả khác nhau với nhau, bạn có thể sử dụng lệnh “-and” hoặc “-hoặc”. “-And” được giả định nếu bỏ qua.

find . -name file1 -or -name file9  

Tìm file bằng cách sử dụng định vị


Một thay thế cho việc sử dụng find là lệnh locate . Lệnh này thường nhanh hơn và có thể tìm kiếm toàn bộ hệ thống file một cách dễ dàng.

Bạn có thể cài đặt lệnh bằng apt-get:

sudo apt-get update sudo apt-get install mlocate 

Lý do định vị nhanh hơn tìm là vì nó dựa trên database của các file trên hệ thống file .

Database thường được cập nhật mỗi ngày một lần bằng tập lệnh cron, nhưng bạn có thể cập nhật nó theo cách thủ công bằng lệnh :

sudo updatedb 

Chạy lệnh này ngay bây giờ. Lưu ý , database phải luôn được cập nhật nếu bạn muốn tìm các file được lấy hoặc tạo gần đây.

Để tìm file với định vị, chỉ cần sử dụng cú pháp sau:

locate query 

Bạn có thể lọc kết quả theo một số cách.

Ví dụ: để chỉ trả về các file chứa chính truy vấn, thay vì trả về mọi file có truy vấn trong các folder dẫn đến nó, bạn có thể sử dụng “-b” để chỉ tìm kiếm “tên cơ sở”:

locate -b query 

Để chỉ xác định vị trí các kết quả trả về vẫn tồn tại trong hệ thống file (chưa bị xóa giữa lần gọi “cập nhậtb” cuối cùng và lệnh gọi “định vị” hiện tại), hãy sử dụng cờ “-e”:

locate -e query 

Để xem thống kê về thông tin định vị đã được lập danh mục, hãy sử dụng tùy chọn “-S”:

locate -S 

Database /var/lib/mlocate/mlocate.db:     3,315 directories     37,228 files     1,504,439 bytes in file names     594,851 bytes used to store database 

Kết luận


Cả tìm và định vị đều là những cách tốt để tìm file trên hệ thống. Tùy thuộc vào bạn để quyết định công cụ nào trong số những công cụ này phù hợp trong từng tình huống.

Tìm và xác định vị trí là các lệnh mạnh mẽ có thể được tăng cường bằng cách kết hợp chúng với các tiện ích khác thông qua đường ống. Thử nghiệm với việc lọc bằng cách sử dụng các lệnh như wc , sortgrep .

Bởi Justin Ellingwood


Tags:

Các tin liên quan

10 Trứng Phục sinh hàng đầu trên Linux
2013-09-18
Cách sử dụng SSH để kết nối với server từ xa trong Ubuntu
2013-09-10
Cách sử dụng ps, kill và hay để quản lý các tiến trình trong Linux
2013-09-06
Cách xem người dùng hệ thống trong Linux trên Ubuntu
2013-09-05
Cách sử dụng mật khẩu và trình bổ sung để quản lý mật khẩu trên VPS Linux
2013-09-04
Cách cài đặt Linux, Lighttpd, MySQL và PHP5 (LLMP Stack) trên CentOS 6
2013-08-30
Cách sử dụng Top, Netstat, Du và các công cụ khác để giám sát tài nguyên server
2013-08-26
So sánh server Django: server phát triển, Mod_WSGI, uWSGI và Gunicorn
2013-08-19
Giới thiệu khái niệm cơ bản về Linux
2013-08-16
Cách sử dụng SFTP để truyền tệp an toàn bằng server từ xa
2013-08-13