104.7 Bài 1
Chứng chỉ: |
LPIC-1 |
---|---|
Phiên bản: |
5.0 |
Chủ đề: |
104 Thiết bị, Hệ thống tệp Linux, Tiêu chuẩn phân cấp hệ thống Tệp |
Mục tiêu: |
104.7 Tìm Tệp hệ thống và đặt Tệp vào đúng vị trí |
Bài: |
1 trên 1 |
Giới thiệu
Các bản phân phối của Linux rất đa dạng, nhưng có một điều mà hầu hết chúng đều tuân theo là Tiêu chuẩn Phân cấp Hệ thống Tệp (FHS) xác định “bố cục tiêu chuẩn” cho hệ thống tệp, giúp việc tương tác và quản trị hệ thống trở nên dễ dàng hơn rất nhiều. Trong bài học này, chúng ta sẽ tìm hiểu thêm về tiêu chuẩn này và cách tìm tệp trên hệ thống Linux.
Tiêu chuẩn Phân cấp Hệ thống Tệp
Tiêu chuẩn Phân cấp Hệ thống Tệp (FHS) là một nỗ lực của Hiệp hội Linux (Linux Foundation) nhằm chuẩn hóa cấu trúc thư mục và nội dung thư mục trên hệ thống Linux. Việc tuân thủ tiêu chuẩn không phải là bắt buộc, nhưng hầu hết các bản phân phối đều tuân theo tiêu chuẩn này.
Note
|
Những người quan tâm đến chi tiết về tổ chức hệ thống tệp có thể đọc đặc tả FHS 3.0 có sẵn ở nhiều định dạng tại: http://refspecs.linuxfoundation.org/fhs.shtml |
Theo tiêu chuẩn, cấu trúc thư mục cơ bản như sau:
/
-
Đây là thư mục gốc, thư mục trên cùng trong hệ thống phân cấp. Mọi thư mục khác đều nằm bên trong nó. Một hệ thống tệp thường được so sánh với một “cây”. Vì thế, đây sẽ là “thân cây” mà tất cả các nhánh được kết nối tới.
/bin
-
Các tệp nhị phân cần thiết, có sẵn cho tất cả người dùng.
/boot
-
Các tệp cần thiết cho quá trình khởi động, bao gồm Ổ đĩa RAM ban đầu (initrd) và bản thân nhân Linux.
/dev
-
Tệp thiết bị. Đây có thể là các thiết bị vật lý được kết nối với hệ thống (ví dụ như
/dev/sda
sẽ là đĩa SCSI hoặc đĩa SATA đầu tiên) hoặc các thiết bị ảo do hạt nhân cung cấp. /etc
-
Tệp cấu hình dành riêng cho máy chủ. Các chương trình có thể tạo thư mục con trong
/etc
để lưu trữ nhiều tệp cấu hình nếu cần. /home
-
Mỗi người dùng trong hệ thống đều có một thư mục “chính” để lưu trữ các tệp và sở thích cá nhân, và hầu hết chúng đều nằm trong
/home
. Thông thường, thư mục chính sẽ giống với tên người dùng. Vì vậy, người dùng John sẽ có thư mục của mình dưới/home/john
. Các trường hợp ngoại lệ là siêu người dùng (root) có thư mục riêng (/root
) và một số người dùng hệ thống. /lib
-
Cần có các thư viện chia sẻ để khởi động hệ điều hành và chạy các tệp nhị phân trong
/bin
và/sbin
. /media
-
Phương tiện di động có thể gắn kết với người dùng như ổ đĩa flash, đầu đọc CD và DVD-ROM, đĩa mềm, thẻ nhớ và ổ đĩa cứng ngoại vị đều được gắn ở đây.
/mnt
-
Điểm gắn kết cho các hệ thống tệp được gắn tạm thời.
/opt
-
Các gói phần mềm ứng dụng.
/root
-
Thư mục chính cho siêu người dùng (root).
/run
-
Dữ liệu biến thời gian chạy.
/sbin
-
Tệp nhị phân hệ thống.
/srv
-
Dữ liệu do hệ thống cung cấp. Ví dụ: các trang do máy chủ web cung cấp có thể được lưu trữ trong
/srv/www
. /tmp
-
Các tệp tạm thời.
/usr
-
Dữ liệu người dùng chỉ đọc, bao gồm dữ liệu cần thiết cho một số tiện ích và ứng dụng phụ.
/proc
-
Hệ thống tệp ảo chứa dữ liệu liên quan đến các tiến trình đang chạy.
/var
-
Dữ liệu biến được ghi trong quá trình vận hành hệ thống, bao gồm hàng đợi in, dữ liệu nhật ký, hộp thư, tệp tạm thời, bộ nhớ đệm của trình duyệt, v.v.
Hãy nhớ rằng một trong số các thư mục trên (như /etc
, /usr
và /var
) sẽ chứa toàn bộ hệ thống phân cấp của các thư mục con bên dưới chúng.
Tệp tạm thời
Tệp tạm thời là các tệp được chương trình sử dụng để lưu trữ dữ liệu chỉ cần thiết trong một khoảng thời gian ngắn. Đây có thể là dữ liệu của các tiến trình đang chạy, nhật ký sự cố, tệp scratch từ quá trình lưu tự động, tệp trung gian được sử dụng trong quá trình chuyển đổi tệp, tệp bộ nhớ đệm, v.v.
Vị trí của Tệp tạm thời
Phiên bản 3.0 của Tiêu chuẩn Phân cấp Hệ thống Tệp (FHS) có xác định vị trí tiêu chuẩn cho các tệp tạm thời trên hệ thống Linux. Mỗi vị trí có một mục đích và hành vi khác nhau và các nhà phát triển nên tuân theo các quy ước do FHS đặt ra khi ghi dữ liệu tạm thời vào đĩa.
/tmp
-
Theo FHS, các chương trình không nên giả định rằng các tệp được ghi ở đây sẽ được giữ nguyên giữa các lần gọi chương trình. Khuyến nghị cho người dùng là nên xóa thư mục này (xóa tất cả các tệp) trong quá trình khởi động hệ thống (mặc dù điều này không phải là bắt buộc).
/var/tmp
-
Một vị trí khác dành cho các tệp tạm thời, nhưng vị trí này không nên bị xóa sạch trong quá trình khởi động hệ thống. Các tệp được lưu trữ ở đây thường vẫn sẽ tiếp tục tồn tại giữa các lần khởi động lại.
/run
-
Thư mục này chứa dữ liệu biến thời gian chạy được sử dụng bởi các tiến trình đang chạy (chẳng hạn như các tệp định danh tiến trình -
.pid
). Các chương trình cần nhiều hơn một tệp thời gian chạy nơi có thể tạo các thư mục con tại đây. Vị trí này phải được xóa sạch trong quá trình khởi động hệ thống./var/run
từng được sử dụng để phục vụ cho mục đích này và trên một số hệ thống/var/run
có thể là một liên kết tượng trưng đến/run
.
Hãy lưu ý rằng không có gì ngăn cản một chương trình tạo các tệp tạm thời ở những nơi khác trên hệ thống, nhưng người dùng nên tôn trọng các quy ước do FHS đặt ra.
Tìm Tệp
Để tìm kiếm tệp trên hệ thống Linux, chúng ta có thể sử dụng lệnh find
. Đây là một công cụ rất mạnh mẽ, có đầy đủ các tham số phù hợp với hành vi của nó và có thể sửa đổi đầu ra chính xác theo nhu cầu của người dùng.
Để bắt đầu, find
cần có hai đối số: điểm bắt đầu và nội dung cần tìm. Ví dụ: để tìm kiếm tất cả các tệp trong thư mục hiện tại (và các thư mục con) có tên kết thúc bằng .jpg
, ta có thể sử dụng:
$ find . -name '*.jpg' ./pixel_3a_seethrough_1.jpg ./Mate3.jpg ./Expert.jpg ./Pentaro.jpg ./Mate1.jpg ./Mate2.jpg ./Sala.jpg ./Hotbit.jpg
Vì *
là ký tự đại diện cho “bất cứ một ký tự nào”, lệnh này sẽ trùng khớp với bất kỳ tệp nào có bốn ký tự cuối cùng trong tên là .jpg
dù ký tự đứng trước nó là gì. Tuy nhiên, hãy xem điều gì sẽ xảy ra nếu một *
khác được thêm vào phần cuối của mẫu:
$ find . -name '*.jpg*' ./pixel_3a_seethrough_1.jpg ./Pentaro.jpg.zip ./Mate3.jpg ./Expert.jpg ./Pentaro.jpg ./Mate1.jpg ./Mate2.jpg ./Sala.jpg ./Hotbit.jpg
Tệp Pentaro.jpg.zip
(được in đậm ở trên) không có trong danh sách trước đó vì ngay cả khi nó có chứa .jpg
trên tên của nó, nó không khớp với mẫu vì có các ký tự phụ đứng sau nó. Mẫu mới có nghĩa là “bất cứ thứ gì .jpg
bất cứ thứ gì”, vì vậy nên nó mới có thể khớp tệp này.
Tip
|
Hãy nhớ rằng tham số |
Biểu thức *.jpg
phải được đặt bên trong dấu trích dẫn đơn để tránh vỏ tự diễn giải mẫu. Hãy xem thử trường hợp không có dấu trích dẫn kép và xem điều gì sẽ xảy ra.
Theo mặc định, find
sẽ bắt đầu ở điểm bắt đầu và đi xuống bất kỳ một thư mục con nào (và các thư mục con của các thư mục con đó) được tìm thấy. Ta có thể hạn chế hành vi này bằng tham số -maxdeep N
, trong đó, N
là số cấp độ tối đa.
Để chỉ tìm kiếm trong thư mục hiện tại, ta có thể sử dụng -maxdeep 1
. Giả sử chúng ta có cấu trúc thư mục sau:
directory ├── clients.txt ├── partners.txt -> clients.txt └── somedir ├── anotherdir └── clients.txt
Để tìm kiếm bên trong somedir
, ta cần sử dụng -maxdeep 2
(thư mục hiện tại xuống 1 cấp). Để tìm kiếm bên trong anotherdir
, ta cần có -maxdeep 3
(thư mục hiện tại xuống 2 cấp). Tham số -mindeep N
hoạt động theo cách ngược lại, tức là chỉ tìm kiếm trong các thư mục từ ít nhất từ cấp N
trở xuống.
Tham số -mount
có thể được sử dụng để tránh find
đi xuống bên trong hệ thống tệp đã được gắn kết. Ta cũng có thể hạn chế tìm kiếm ở các loại hệ thống tệp cụ thể bằng cách sử dụng tham số -fstype
. Vì vậy, find /mnt -fstype exfat -iname "*report*"
sẽ chỉ tìm kiếm bên trong các hệ thống tệp exFAT được gắn trong /mnt
.
Tìm kiếm Thuộc tính
Chúng ta có thể sử dụng các tham số bên dưới để tìm kiếm các tệp có thuộc tính cụ thể (chẳng hạn như các tệp mà người dùng có thể ghi, có một bộ quyền cụ thể hoặc có một kích thước nhất định):
-user USERNAME
-
So khớp các tệp thuộc sở hữu của người dùng
USERNAME
. -group GROUPNAME
-
So khớp các tệp thuộc sở hữu của nhóm
GROUPNAME
. -readable
-
So khớp các tệp mà người dùng hiện tại có thể đọc được.
-writable
-
So khớp các tệp mà người dùng hiện tại có thể ghi.
-executable
-
So khớp các tệp mà người dùng hiện tại có thể thực thi được. Đối với thư mục, tham số này sẽ khớp với bất kỳ thư mục nào mà người dùng có thể truy nhập (quyền
x
). -perm NNNN
-
Tham số này sẽ khớp với bất kỳ tệp nào có chính xác quyền
NNNN
. Ví dụ:-perm 0664
sẽ khớp với bất kỳ tệp nào mà người dùng và nhóm có thể đọc và ghi và những tệp mà người khác có thể đọc (hoặcrw-rw-r--
).
Chúng ta có thể thêm -
vào trước NNNN
để kiểm tra các tệp có ít nhất quyền được chỉ định. Ví dụ: -perm -644
sẽ khớp với các tệp có ít nhất quyền 644
(rw-r—r--
) - bao gồm một tệp có 664
(rw-rw-r--
) hoặc thậm chí là 775
(rwxrwx-r-x
).
-empty
-
Sẽ khớp với các tệp và thư mục trống.
-size N
-
Sẽ khớp với bất kỳ tệp nào có kích thước
N
, trong đó,N
theo mặc định là một số khối 512 byte. Ta có thể thêm hậu tố vàoN
cho các đơn vị khác:Nc
sẽ tính kích thước tính bằng byte,Nk
tính bằng kibibytes (KiB, bội số của 1024 byte),NM
tính bằng mebibytes (MiB, bội số của 1024 * 1024) vàNG
cho gibibyte (GiB, bội số của 1024 * 1024 * 1024).
Một lần nữa, chúng ta có thể thêm tiền tố +
hoặc -
(ở đây có nghĩa là lớn hơn và nhỏ hơn) để tìm kiếm kích thước tương đối. Ví dụ: -size -10M
sẽ khớp với bất kỳ tệp nào có kích thước nhỏ hơn 10 MiB.
Ví dụ: để tìm kiếm các tệp trong thư mục chính có chứa mẫu report
không phân biệt chữ hoa chữ thường trong bất kỳ phần nào của tên, có quyền 0644
, đã được truy cập 10 ngày trước và có kích thước ít nhất là 1 Mib, chúng ta có thể sử dụng:
$ find ~ -iname "*report*" -perm 0644 -atime 10 -size +1M
Tìm kiếm theo Thời gian
Bên cạnh việc tìm kiếm các thuộc tính, chúng ta cũng có thể thực hiện tìm kiếm theo thời gian để tìm các tệp đã được truy cập, các thuộc tính của chúng đã thay đổi hoặc đã được sửa đổi trong một khoảng thời gian cụ thể. Các tham số sẽ là:
-amin N
,-cmin N
,-mmin N
-
Các tham số này sẽ khớp với các tệp đã được truy cập và có thuộc tính đã thay đổi hoặc đã được sửa đổi (tương ứng) vào
N
phút trước. -atime N
,-ctime N
,-mtime N
-
Các tham số này sẽ khớp với các tệp đã được truy cập, có thuộc tính đã thay đổi hoặc đã được sửa đổi vào
N*24
giờ trước.
Đối với -cmin N
và -ctime N
, bất kỳ thay đổi thuộc tính nào cũng sẽ khớp (bao gồm thay đổi về quyền, đọc hoặc ghi vào tệp). Điều này làm cho các tham số này trở nên đặc biệt mạnh mẽ vì trên thực tế, bất kỳ thao tác nào liên quan đến tệp cũng sẽ được khớp.
Ví dụ sau sẽ khớp với bất kỳ tệp nào trong thư mục hiện tại đã được sửa đổi chưa đầy 24 giờ trước và lớn hơn 100 MiB:
$ find . -mtime -1 -size +100M
Sử dụng locate
và updatedb
locate
và updatedb
là các lệnh có thể được sử dụng để nhanh chóng tìm thấy một tệp khớp với mẫu đã cho trên hệ thống Linux. Nhưng không giống như find
, locate
sẽ không tìm kiếm mẫu trong hệ thống tệp. Thay vào đó, nó sẽ tìm kiếm mẫu đó trên cơ sở dữ liệu được xây dựng bằng cách chạy lệnh updatedb
. Điều này mang lại cho chúng ta kết quả rất nhanh nhưng có thể sẽ không chính xác, tùy thuộc vào thời điểm cơ sở dữ liệu được cập nhật lần cuối cùng.
Cách đơn giản nhất để sử dụng locate
là chỉ cần cung cấp cho nó một mẫu tìm kiếm. Ví dụ: để tìm mọi hình ảnh JPEG trên hệ thống, chúng ta sẽ sử dụng locate jpg
. Danh sách kết quả có thể sẽ khá dài và nó sẽ có dạng như sau:
$ locate jpg /home/carol/Downloads/Expert.jpg /home/carol/Downloads/Hotbit.jpg /home/carol/Downloads/Mate1.jpg /home/carol/Downloads/Mate2.jpg /home/carol/Downloads/Mate3.jpg /home/carol/Downloads/Pentaro.jpg /home/carol/Downloads/Sala.jpg /home/carol/Downloads/pixel_3a_seethrough_1.jpg /home/carol/Downloads/jpg_specs.doc
Khi được yêu cầu về mẫu jpg
, locate
sẽ hiển thị bất kỳ nội dung nào có chứa mẫu này bất kể phần đứng trước hay sau nó là gì. Chúng ta có thể xem ví dụ về điều này trong tệp jpg_specs.doc
trong danh sách ở trên: nó có chứa mẫu nhưng phần mở rộng lại không phải là jpg
.
Tip
|
Hãy nhớ rằng với |
Theo mặc định, mẫu có phân biệt chữ hoa chữ thường. Điều này có nghĩa là các tệp chứa .JPG
sẽ không được hiển thị do mẫu của chúng ta đang ở dạng chữ thường. Để tránh điều này, hãy truyền tham số -i
cho locate
. Nếu lặp lại ví dụ trước:
$ locate -i .jpg /home/carol/Downloads/Expert.jpg /home/carol/Downloads/Hotbit.jpg /home/carol/Downloads/Mate1.jpg /home/carol/Downloads/Mate1_old.JPG /home/carol/Downloads/Mate2.jpg /home/carol/Downloads/Mate3.jpg /home/carol/Downloads/Pentaro.jpg /home/carol/Downloads/Sala.jpg /home/carol/Downloads/pixel_3a_seethrough_1.jpg
Hãy lưu ý rằng tệp Mate1_old.JPG
được in đậm ở trên không hề có trong danh sách trước đó.
Ta có thể truyền nhiều mẫu cho locate
và chỉ cần phân tách chúng bằng dấu cách. Ví dụ bên dưới sẽ thực hiện tìm kiếm không phân biệt chữ hoa chữ thường đối với bất kỳ tệp nào khớp với mẫu zip
và jpg
:
$ locate -i zip jpg /home/carol/Downloads/Expert.jpg /home/carol/Downloads/Hotbit.jpg /home/carol/Downloads/Mate1.jpg /home/carol/Downloads/Mate1_old.JPG /home/carol/Downloads/Mate2.jpg /home/carol/Downloads/Mate3.jpg /home/carol/Downloads/OPENMSXPIHAT.zip /home/carol/Downloads/Pentaro.jpg /home/carol/Downloads/Sala.jpg /home/carol/Downloads/gbs-control-master.zip /home/carol/Downloads/lineage-16.0-20190711-MOD-quark.zip /home/carol/Downloads/pixel_3a_seethrough_1.jpg /home/carol/Downloads/jpg_specs.doc
Khi sử dụng nhiều mẫu, ta có thể yêu cầu locate chỉ hiển thị các tệp khớp với tất cả các mẫu trong số đó. Điều này được thực hiện với tùy chọn -A
. Ví dụ sau đây sẽ hiển thị bất kỳ tệp nào khớp với các mẫu .jpg
và .zip
:
$ locate -A .jpg .zip /home/carol/Downloads/Pentaro.jpg.zip
Nếu muốn đếm số lượng tệp khớp với một mẫu nhất định thay vì hiển thị đường dẫn đầy đủ của chúng, ta có thể sử dụng tùy chọn -c
. Ví dụ: để đếm số lượng tệp .jpg
trên một hệ thống:
$ locate -c .jpg 1174
Có một vấn đề với locate
là nó sẽ chỉ hiển thị các mục có trong cơ sở dữ liệu được tạo bởi updateb
(nằm trong /var/lib/mlocate.db
). Nếu cơ sở dữ liệu đã lỗi thời, kết quả đầu ra có thể hiển thị các tệp đã bị xóa kể từ lần cập nhật gần đây nhất. Một cách để tránh điều này là thêm tham số -e
. Tham số này sẽ kiểm tra xem liệu tệp có còn tồn tại hay không trước khi hiển thị nó trên đầu ra.
Tất nhiên, điều này sẽ không giải quyết được vấn đề các tệp được tạo sau bản cập nhật cơ sở dữ liệu cuối cùng không hiển thị. Để làm được điều này, chúng ta sẽ phải cập nhật cơ sở dữ liệu bằng lệnh updateb
. Thời gian thực hiện tiến trình này tùy thuộc vào số lượng tệp trên đĩa của người dùng.
Kiểm soát hành vi của updatedb
Hành vi của updatedb
có thể được kiểm soát bởi tệp /etc/updatedb.conf
. Đây là một tệp văn bản mà ở trong đó, mỗi dòng sẽ điều khiển một biến. Các dòng trống sẽ bị bỏ qua và các dòng bắt đầu bằng ký tự #
sẽ được coi là chú thích.
PRUNEFS=
-
Bất kỳ loại hệ thống tệp nào được chỉ định sau tham số này sẽ không được
updatedb
quét. Danh sách các loại phải được phân tách bằng dấu cách và bản thân các loại sẽ không phân biệt chữ hoa chữ thường. Vì thế nênNFS
vànfs
sẽ tương đương với nhau. PRUNENAMES=
-
Đây là danh sách các tên thư mục được phân tách bằng dấu cách mà
updatedb
không quét. PRUNEPATHS=
-
Đây là danh sách các tên đường dẫn nên được
updatedb
bỏ qua. Tên đường dẫn phải được phân tách bằng dấu cách và được chỉ định giống như cách chúng được hiển thị bởiupdatedb
(ví dụ:/var/spool /media
) PRUNE_BIND_MOUNTS=
-
Đây là một biến
yes
hoặcno
đơn giản. Nếu được đặt thànhyes
, các liên kết gắn kết (các thư mục được gắn ở nơi khác bằng lệnhmount --bind
) sẽ bị bỏ qua.
Tìm Tệp nhị phân, Trang hướng dẫn và Mã nguồn
which
là một lệnh rất hữu ích được sử dụng để hiển thị đường dẫn đầy đủ đến tệp thực thi. Ví dụ: nếu muốn định vị tệp thực thi cho bash
, ta có thể sử dụng:
$ which bash /usr/bin/bash
Nếu tùy chọn -a
được thêm vào, lệnh sẽ hiển thị tất cả các tên đường dẫn khớp với tệp thực thi. Hãy quan sát sự khác biệt:
$ which mkfs.ext3 /usr/sbin/mkfs.ext3 $ which -a mkfs.ext3 /usr/sbin/mkfs.ext3 /sbin/mkfs.ext3
Tip
|
Để tìm thư mục nào đang có trong |
type
là một lệnh tương tự sẽ hiển thị thông tin về tệp nhị phân, bao gồm vị trí và loại của nó. Ta chỉ cần sử dụng type
, theo sau là tên lệnh:
$ type locate locate is /usr/bin/locate
Tham số -a
cũng hoạt động theo cách tương tự như trong which
và sẽ hiển thị tất cả các tên đường dẫn khớp với tệp thực thi giống như sau:
$ type -a locate locate is /usr/bin/locate locate is /bin/locate
Và tham số -t
sẽ hiển thị loại tệp của lệnh, có thể là alias
, keyword
, function
, buildin
hoặc file
. Ví dụ:
$ type -t locate file $ type -t ll alias $ type -t type type is a built-in shell command
Lệnh whereis
sẽ linh hoạt hơn và ngoài ra, các tệp nhị phân cũng có thể được sử dụng để hiển thị vị trí của các trang hướng dẫn hoặc thậm chí là mã nguồn của một chương trình (nếu có trong hệ thống). Ta chỉ cần gõ whereis
, theo sau là tên tệp nhị phân:
$ whereis locate locate: /usr/bin/locate /usr/share/man/man1/locate.1.gz
Các kết quả ở trên bao gồm các tệp nhị phân (/usr/bin/locate
) và các trang hướng dẫn được nén (/usr/share/man/man1/locate.1.gz
).
Ta có thể nhanh chóng lọc kết quả bằng cách sử dụng các khoá chuyển dòng lệnh như -b
(giới hạn kết quả ở các tệp nhị phân), -m
(giới hạn kết quả ở các trang hướng dẫn) hoặc -s
(giới hạn kết quả ở mã nguồn). Lặp lại ví dụ trên, ta sẽ nhận được:
$ whereis -b locate locate: /usr/bin/locate $ whereis -m locate locate: /usr/share/man/man1/locate.1.gz
Bài tập Hướng dẫn
-
Hãy tưởng tượng một chương trình cần tạo một tệp tạm thời dùng một lần và sẽ không bao giờ cần đến nó nữa sau khi đóng chương trình. Ta nên tạo tệp này ở trong thư mục nào?
-
Thư mục tạm thời nào phải bị xóa trong quá trình khởi động?
-
Bằng cách sử dụng
find
, hãy tìm kiếm chỉ trong thư mục hiện tại những tệp mà người dùng có thể ghi, đã được sửa đổi trong 10 ngày qua và lớn hơn 4 GiB. -
Bằng cách sử dụng
locate
, hãy tìm bất kỳ tệp nào có chứa cả hai mẫureport
vàupdated
/update
/updating
trong tên của chúng. -
Làm cách nào để có thể biết được trang hướng dẫn cho
ifconfig
được lưu trữ ở đâu? -
Biến nào cần được thêm vào
/etc/updatedb.conf
để khiếnupdatedb
bỏ qua hệ thống tệpntfs
? -
Quản trị viên hệ thống muốn gắn kết một đĩa cục bộ (
/dev/sdc1
). Theo FHS, đĩa này nên được gắn vào thư mục nào?
Bài tập Mở rộng
-
Khi
locate
được sử dụng, kết quả sẽ được lấy từ cơ sở dữ liệu doupdatedb
tạo ra. Tuy nhiên, cơ sở dữ liệu này có thể đã lỗi thời và khiến cholocate
hiển thị các tệp không còn tồn tại. Làm cách nào để có thể khiếnlocate
chỉ hiển thị các tệp hiện có trên đầu ra của nó? -
Hãy tìm bất kỳ tệp nào trên thư mục hiện tại hoặc các thư mục con từ hai cấp trở xuống (ngoại trừ các hệ thống tệp được gắn kết) có chứa mẫu
Status
hoặcstatute
trong tên của chúng. -
Với giới hạn tìm kiếm trong các hệ thống tệp
ext4
, hãy tìm bất kỳ tệp nào trong/mnt
có ít nhất quyền thực thi cho nhóm, có thể đọc được đối với người dùng hiện tại và có bất kỳ thuộc tính nào đã được thay đổi trong 2 giờ qua. -
Hãy tìm các tệp trống được tạo cách đây hơn 30 ngày và xuống dưới ít nhất hai cấp so với thư mục hiện tại.
-
Giả sử người dùng
carol
vàjohn
là một phần của nhómmkt
. Hãy tìm trong thư mục chính củajohn
bất kỳ tệp nào màcarol
cũng có thể đọc được.
Tóm tắt
Trong bài học này, chúng ta đã tìm hiểu về cách tổ chức cơ bản của hệ thống tệp trên máy Linux theo như FHS cũng như cách tìm các tệp nhị phân và tệp theo tên hoặc thuộc tính. Các lệnh sau đã được thảo luận trong bài học này:
find
:: Một lệnh linh hoạt được sử dụng để tìm các tệp và thư mục dựa trên nhiều tiêu chí tìm kiếm khác nhau.
locate
:: Một tiện ích sử dụng một cơ sở dữ liệu cục bộ chứa vị trí của các tệp được lưu trữ cục bộ.
updatedb
:: Cập nhật cơ sở dữ liệu cục bộ được sử dụng bởi lệnh locate
.
which
:: Hiển thị đường dẫn đầy đủ đến tệp thực thi.
whereis
:: Hiển thị vị trí của các trang thủ công, tệp nhị phân và mã nguồn trên hệ thống.
type
:: Hiển thị vị trí của tệp nhị phân và loại ứng dụng của nó (chẳng hạn như chương trình đã được cài đặt, chương trình Bash tích hợp sẵn và hơn thế nữa).
Đáp án Bài tập Hướng dẫn
-
Hãy tưởng tượng một chương trình cần tạo một tệp tạm thời dùng một lần và sẽ không bao giờ cần đến nó nữa sau khi đóng chương trình. Ta nên tạo tệp này chính xác trong thư mục nào?
Vì không quan tâm đến tệp sau khi chương trình chạy xong nên thư mục chính xác sẽ là
/tmp
. -
Thư mục tạm thời nào phải bị xóa trong quá trình khởi động?
Thư mục là
/run
hoặc/var/run
trên một số hệ thống. -
Bằng cách sử dụng
find
, hãy tìm kiếm chỉ trong thư mục hiện tại những tệp mà người dùng có thể ghi, đã được sửa đổi trong 10 ngày qua và lớn hơn 4 GiB.Để làm điều này, bạn sẽ cần các tham số
-writable
,-mtime
và-size
:find . -writable -mtime -10 -size +4G
-
Bằng cách sử dụng
locate
, hãy tìm bất kỳ tệp nào có chứa cả hai mẫureport
vàupdated
/update
/updating
trong tên của chúng.Vì
locate
cần khớp với tất cả các mẫu, hãy sử dụng tùy chọn-A
:locate -A "report" "updat"
-
Làm cách nào để có thể biết được trang hướng dẫn cho
ifconfig
được lưu trữ ở đâu?Sử dụng tham số
-m
chowhereis
:whereis -m ifconfig
-
Biến nào cần được thêm vào
/etc/updatedb.conf
để khiếnupdatedb
bỏ qua hệ thống tệpntfs
?Biến là
PRUNEFS=
, theo sau là loại hệ thống tệp:PRUNEFS=ntfs
. -
Quản trị viên hệ thống muốn gắn kết một đĩa cục bộ (
/dev/sdc1
). Theo FHS, đĩa này nên được gắn vào thư mục nào?Trong thực tế, đĩa có thể được gắn kết ở bất cứ đâu. Tuy nhiên, FHS khuyến nghị việc gắn kết tạm thời nên được thực hiện tại
/mnt
.
Đáp án Bài tập Mở rộng
-
Khi
locate
được sử dụng, kết quả sẽ được lấy từ cơ sở dữ liệu doupdatedb
tạo ra. Tuy nhiên, cơ sở dữ liệu này có thể đã lỗi thời và khiến cholocate
hiển thị các tệp không còn tồn tại. Làm cách nào để có thể khiếnlocate
chỉ hiển thị các tệp hiện có trên đầu ra của nó?Thêm tham số
-e
cho locate như tronglocate -e PATTERN
. -
Hãy tìm bất kỳ tệp nào trên thư mục hiện tại hoặc các thư mục con từ hai cấp trở xuống (ngoại trừ các hệ thống tệp được gắn kết) có chứa mẫu
Status
hoặcstatute
trong tên của chúng.Hãy nhớ rằng đối với
-maxdeep
, bạn cũng phải tính cả thư mục hiện tại. Vì vậy, chúng ta cần có ba cấp độ (thư mục hiện tại cộng với 2 cấp độ giảm xuống):find . -maxdepth 3 -mount -iname "*statu*"
-
Với giới hạn tìm kiếm trong các hệ thống tệp
ext4
, hãy tìm bất kỳ tệp nào trong/mnt
có ít nhất quyền thực thi cho nhóm, có thể đọc được đối với người dùng hiện tại và có bất kỳ thuộc tính nào đã được thay đổi trong 2 giờ qua.Sử dụng tham số
-fstype
củamount
để giới hạn tìm kiếm trong các loại hệ thống tệp cụ thể. Một tệp mà người dùng hiện tại có thể đọc được sẽ có ít nhất là4
ở chữ số đầu tiên của quyền và một tệp có thể thực thi được bởi nhóm sẽ có ít nhất là1
ở chữ số thứ hai. Vì không quan tâm đến quyền của những người khác nên chúng ta có thể sử dụng0
cho chữ số thứ ba. Sử dụng-cmin N
để lọc các thay đổi thuộc tính gần đây (hãy nhớ rằng N được chỉ định theo phút). Vì thế nên câu trả lời sẽ là:find /mnt -fstype ext4 -perm -410 -cmin -120
-
Hãy tìm các tệp trống được tạo cách đây hơn 30 ngày và xuống dưới ít nhất hai cấp so với thư mục hiện tại.
Tham số
-mindeep N
có thể được sử dụng để giới hạn tìm kiếm ở mức ít nhất làN
, nhưng hãy nhớ rằng bạn phải tính cả thư mục hiện tại. Sử dụng-empty
để kiểm tra các tệp trống và-mtime N
để kiểm tra thời gian sửa đổi. Vì thế:find . -empty -mtime +30 -mindepth 3
-
Giả sử người dùng
carol
vàjohn
là một phần của nhómmkt
. Hãy tìm trong thư mục chính củajohn
bất kỳ tệp nào mà`carol
cũng có thể đọc được.Vì họ là thành viên của cùng một nhóm, chúng ta cần ít nhất một
r
(4
) trên các quyền của nhóm và vì không quan tâm đến quyền của những người khác nên câu trả lời sẽ là:find /home/john -perm -040