32. lệnh dùng liệt kê danh sách các tập tin có ký tự cuối cùng trong tên là ‘?’

Quản lí file

1. Danh mục cây

File hệ thống của Linux đặt ra như một "danh mục cây"directory tree. Có một thư mục root (ký hiệu /), với mọi danh mục khác có "nguồn gốc" danh mục, và mỗi danh mục đều chứa các thư mục đơn

Đây chính là biểu đồ của thư mục cây:

/ |—— bin |—— dev |—— usr | |—— bin | |—— lib | |—— libexec | |—— local | |—— sbin | |—— share |... |...

Vậy dấu / là một danh mục, usr là thư mục có nguồn gốc từ /, lib là danh mục có nguồn gốc từ usr và cứ như thế. Dùng dấu / để chỉ vào danh mục tương ứng như /usr/lib

Đường dẫn như /usr/lib được gọi là "đường dẫn tuyệt đối" (absolute path) kể từ khi đường dẫn được chỉ định rõ ràng đầy đủ bắt đầu từ thư mục root /.

Đặc tính của thư mục con . và ..

Mọi thư mục điều có 2 đặc tính thư mục con "virtual": ...

Chúng ta đã sử dụng thư mục con theo cách relative hoặc reflexive. Dấu . trong danh mục luôn luôn chỉ tới tới "danh mục hiện tại" và tư mục hiện tại luôn luôn chỉ tới "danh mục gốc"

Vậy, ví dụ nhé: /usr/share.. là một đường dẫn thư mục hợp lệ và chỉ tới thư mục gốc của /usr/share .

... được sử dụng nhiều khi điều hướng tập tin hệ thống (file system) từ dòng lệnh. Ví dụ cd .. sẽ khiến cho shell đổi từ thư mục hiện tại sang tư mục gốc.


2. Xem nhiều tệp tin với Wildcards

Khi xem xét nhiều files từ dòng lệnh. bạn có thể sử dụng ký tự wildcard như *? chỉ đến nhóm của file đó (gọi là glods).

Dấu * Wildcard

Dấu * Wildcard được hiểu là "bất kỳ số ký tự bao gồm cả none".

Ví dụ: Nếu bạn muốn di chuyển mọi file với đuôi .mp3 từ thư mục hiện tại đến thư mục ~/music, bạn có thể chạy những dòng lệnh sau:

$ mv *.mp3 ~/music

Dấu ? Wildcard

Dấu ? Wildcard phù hợp với bất kỳ ký tự duy nhất.

Ví dụ: ??? sẽ khớp với mọi tệp với tên có duy nhất 3 ký tự

Dấu [...] Wildcard

Bạn cũng có thể dùng nó với cái ký tự cụ thể

Ví dụ: .*mp[34] sẽ lấy bất kỳ file này có đuôi mp3 và mp4

[CcBb]at sẽ lấy **Cat,cat,Bat **và bat

Hãy cẩn thận với khoảng trắng

Hãy cẩn thận khi sử dụng * như khoảng trắng đặt sai hoặc ký tự nào đó có thể gây lỗi.

Chú ý khoảng trắng giữa *.mp3:

$ mv * .mp3 ~/music

Cái này sẽ di chuyển tất cả các file có * và file có tên .mp3 đến dicrectory ~/music. Nhưng mọi file đều có *, nên chúng ta có thể sẽ phải di chuyển tất cả mọi file sang directory ~music .

Tương tự thế, Hãy tưởng tượng sự khác nhau giữa rm *.mp3 (loại bỏ cái file mp3)rm * .mp3 (nó vô tình loại bỏ tất cả file)

🌎Tìm hiểu thêm

3. Sử dụng which để tìm đường dẫn thực thi

Khi bạn gõ tên của một chương trình trong shell prompt, **shell**của bạn sẽ sử dụng biến môi trường PATH để xác định thực thi nào sẽ chạy. Sẽ đọc nhanh sơ qua tất cả các directory đã liệt kê trong PATH của bạn, làm sao bạn biết cái nào trong shell của bạn để thực thi?

Đó chính là những gì mà lệnh which thực hiện. Đặt tên của một chương trình, which sẽ trả về 1 đường dẫn đầy đủ để thực thi lệnh. Hãy nhìn dưới đây:

32. lệnh dùng liệt kê danh sách các tập tin có ký tự cuối cùng trong tên là ‘?’

Điều này cho tôi biết rằng khi tôi gõ ps tại terminal thì shell của tôi sẽ chạy lệnh thực thi ở đường dẫn /bin/ps

Lưu ý: những đường dẫn này hoàn toàn là giả thuyết và bạn có thể không thấy cùng một đầu ra trên hệ thống của riêng bạn.

Có 2 trường hợp chính để bạn dùng which :

  1. Bạn có tên của lệnh thực thi nhưng bạn muốn tìm đường dẫn cụ thể của nó
  2. Bạn có nhiều chương trình được cài đặt nhưng bạn không chắc chương trình nào trong số đó có thể thực thi

Trường hợp 2 rất thường dùng công cụ để gỡ lỗi, đặc biệt nếu bạn đã từng thử thiết lập môi trường phát triển nơi mà bạn có thể có nhiều trình biên dịch / thông dịch... chẳng hạn như python 3.8.5, gcc 10.1, java 14.0.1...


4. Sử dụng find để tìm kiếm bằng tên file

Lệnh find được sử dụng để tìm kiếm files trên máy tính. Một trong những điều phổ biến nhất là sử dụng để là tìm kiếm file dựa trên tên của nó, mặc dù nó có còn làm được nhiều thứ hơn thế.

Đây là một ví dụ nhỏ: bạn sẽ in ra tên của mọi file có đuôi mp4 trong directory Downloads

$ cd Downloads $ find . -name "*.mp4"

32. lệnh dùng liệt kê danh sách các tập tin có ký tự cuối cùng trong tên là ‘?’

Bạn hãy nhớ lại rằng dấu . là tượng trưng cho "danh mục hiện tại". Bạn có thể thay đổi dấu . bởi bất kỳ tên directory nào và lệnh find sẽ chạy để tìm kiếm nó.

Từ -name để nói cho lệnh find rằng nó tìm kiếm dựa trên tên file và yêu cầu một mẫu khớp với file. Trong trường hợp này "*.mp4" sẽ là mẫu file có bất kỳ đuôi nào là .mp4

Hạn chế kiểu file

Đôi khi bạn chỉ muốn tìm kiếm file và không có directory hoặc ngược lại. Lệnh -type cho phép chúng chỉ định có nên tìm kiếm các file hay chỉ các thư mục

Đây là lệnh tìm mọi file (nhưng không có directory) mà tên của nó chứa chuỗi "user":

$ find . -type f -name "*user*"

Nếu chúng ta muốn tìm directory, chúng ta có thể dùng lệnh -type d để find.

Do đó, trong ví dụ đầu tiên, nếu bạn muốn tìm file kỹ hơn một tý, tìm tất cả file có đuôi là mp4 bạn sẽ sử dụng lệnh sau đây:

$ find . -type f -name "*.mp4"

Tìm hiểu thêm

5. Sử dụng find để tìm kiếm bằng kích thước file

Lệnh find được sử dụng tìm kiếm file trên máy tính của bạn. Nó thường sử dụng nhiều để tìm kiếm bằng kích thước file... nếu bạn muốn tìm xoá các tệp lớn.

Đây là lệnh để tìm tất cả file lớn hơn 100MB trong thư mục hiện tại:

$ find . -type f -size +100M

Dấu + trong +100M biểu diễn cho "ít nhất 100MB". Nếu thay vào đó chúng ta sử dụng -size100MB, find sẽ chỉ tìm những file có đúng 100MB (chứ không có khoảng 100MB)

Đầu ra của lệnh này sẽ liệt kê cơ bản của tên file mà không có bất kỳ thông tin kích thước nào. Để bao gồm nhiều thông tin hơn chúng ta sẽ dùng lệnh như sau:

$ find . -size +100M -exec ls -lh {} \;

32. lệnh dùng liệt kê danh sách các tập tin có ký tự cuối cùng trong tên là ‘?’

Lựa chọn -exec để cho find thực hiện cụ thể lệnh cho từng kết quả, thay thế dấu {} với tên của file. Dấu \; chỉ rõ cuối cùng của dòng lệnh sẽ được thực hiện.

Trong trường hợp này, tôi gọi ls -lh cho từng tôi tôi tìm. trong ls, -l sẽ xuất ra màn hình bao gồm cái kích thước file, quyền file, và chi tiết khác. -h sẽ sẽ gọi ls định dạng lại kích thước file cho mình dễ hiểu. Ví dụ nếu không có -h sẽ là 576716800 (576716800 bytes) còn có -h sẽ là 550M (550MB).

Chú ý: bạn có thể sử dụng bất kỳ dùng lệnh nào với -exec mà không chỉ ls.

🔙Bài 3.Thaotácbiến Bài 5.Quyềntruycậpfile🔜