Thứ Bảy, 6 tháng 10, 2012

Getting Information About Files

Đặt vấn đề

Bạn cần nhiều thông tin về file, ví dụ đó là file gì ?, ai sở hữu nó ? Nếu nó có thể thực thi thì nó thì nó có bao nhiêu links cứng? Lần thay đổi cuối cùng là khi nào?

Giải quyết

Sử dụng các lệnh ls, stat, file hoặc find

Mình tạo một file có tên get_info nằm trong thư mục tmp:
[root@toet ~]# touch /tmp/get_info

Mình sử dụng lệnh ls
[root@toet ~]# ls /tmp/get_info

Kết quả:
/tmp/get_info

Lệnh ls không có các tùy chọn thì chỉ liệt kê được đường dẫn đến file.
Mình sử dụng tùy chọn -l : [root@toet ~]# ls -l /tmp/get_info
Kết quả : -rw-r--r-- 1 root root 0 Sep 29 01:56 /tmp/get_info
Tùy chọn -l cho ta thông tin chi tiết hơn về file. Mình giải thích một vài thông số:
  • -rw-r--r-- : Đây là quyền truy cập vào file.
  • root root : lần lượt là user sở hữu và nhóm sở hữu file.
  • 0 : là số liên kết đến file.
  • Sep 29 01:56 : thời gian sửa đổi cuối cùng.
  • /tmp/get_info : là tên gọi, là đường dẫn.
Một số tùy chọn cũng như thông số khác các bạn có thể man ls để tìm hiểu thêm. ^_^

Mình sử dụng lênh stat (status): Lệnh stat cho ta thấy được trạng thái của file hoặc filesystem
[root@toet ~]# stat /tmp/get_info
Kết quả
  File: `/tmp/get_info'  Size: 0               Blocks: 0          IO Block: 4096   regular empty fileDevice: 801h/2049d   Inode: 2883593  Links: 1Access: (0644/-rw-r--r--)  Uid: (   0/  root)
Gid: (  0/    root) Access: 2012-09-29 01:56:09.000000000 +0700Modify: 2012-09-29 01:56:09.000000000 +0700Change: 2012-09-29 01:56:09.000000000 +0700

Một mớ :) Các chỉ số UID, GID, Inode rất có ý nghĩa và thực sự quan trọng khi ta nghiên cứu về cấu trúc file.
Trong Linux có nhiều kiểu file: Linux không yêu cầu phần mở đuôi file. Mình lấy ví dụ:
Mình tạo một file có tên type_file.txt (có đuôi txt): [root@toet ~]# touch /tmp/type_file.txt
Mình sử dụng lệnh file để xem kiểu của file này: [root@toet ~]# file /tmp/type_file.txt
Kết quả :
/tmp/type_file.txt: empty
Tiếp tục:
[root@toet ~]# file /tmp/get_info
Kết quả:
/tmp/get_info: empty
 Hai kết quả giống nhau và ta biết chúng là những file cùng kiểu, file bình thường.
Mình thử file thêm :
[root@toet ~]# file /etc/passwd
Kết quả:
/etc/passwd: ASCII text
Oh! kiểu của con này khác 2 con trên, ta nhận ra rằng file trong linux có kiểu không dựa vào đuôi. file trên có kiểu ASCII text.

Một điều cần nhớ là trên Linux tất cả mọi thứ đều là file, nếu không phải là file thì nó là một process.

Ta sử dụng lệnh find để  tìm kiếm các file trong một cây thư mục. Ví dụ mình muốn tìm file
file_type.txt hồi nãy thì mình tìm tất cả các file trong thư mục /tmp và có đuôi .txt:
[root@toet ~]# find /tmp/ -name "*.txt"
Kết quả:
/tmp/type_file.txt
/tmp/a.txt
Đúng như ý muốn. Một vài thông số
  • -name : tìm kiếm theo tên
  • "*.txt" : Tất cả các file có đuôi là txt.
Lệnh find rất hay và hữu dụng khi bạn sở hữu một lượng lớn files.
Ta có thể tìm kiếm theo tên ví dụ tìm kiếm file có tên get_info trong thư mục /tmp:
[root@toet ~]# find /tmp -name get_info
Kết quả:
/tmp/get_info

Có thể việc làm trên khá "ngây" khi chỉ việc ls là có kết quả rùi đúng không. OK một ví dụ khác.
Bạn muốn tìm file cấu hình của httpd đi dĩ nhiên bạn biết tên nó, nó là httpd.conf, muốn dùng được find thì ta cần phải biết thêm rằng tìm ở đâu, bước này phụ thuộc vào kình nghiệp, kinh nghiệm ở đây là hầu hết các file cấu hình dịch vụ nằm ở /etc, bắt đầu nào:
[root@toet ~]# find /etc/ -name "httpd.conf"

Kết quả:
/etc/httpd/conf/httpd.conf

Cũng lợi hại đúng không :D
Một điều mình nhận ra đó là nếu mình có thêm một file khác trong thư mục tmp giả sử là get_info.tar nếu mình chỉ dùng find /tmp -name get_info sẽ không hiện được file trên.
Ta sử lí việc trên sử dụng :
[root@toet ~]# find /tmp/ -name get_info\*

Kết quả :
/tmp/get_info.tar
/tmp/get_info

Find có thể tìm kiếm theo kiểu file, theo thời gian sửa đổi cuối cùng. Có thể tìm các tập tin tạo trong ngày hôm nay, ngày hôm qua... Nhiều lắm cứ google nha.

Không có nhận xét nào:

Đăng nhận xét