Hệ thống tập tin gốc Linux: thư mục và lệnh. Cấu trúc thư mục Linux

Học Linux, 101

Quản lý tập tin và thư mục

Tìm hiểu những điều cơ bản khi làm việc với các tệp và thư mục Linux

Chuỗi nội dung:

Đánh giá ngắn

Trong bài viết này, bạn sẽ tìm hiểu về các lệnh Linux cơ bản để quản lý tệp và thư mục. Bạn sẽ học:

  • Xem nội dung của các thư mục.
  • Sao chép, di chuyển và xóa các tập tin và thư mục.
  • Quản lý nhiều tập tin và thư mục theo cách đệ quy.
  • Sử dụng siêu ký tự để thao tác với tập tin.
  • Sử dụng lệnh find để tìm và thực hiện các hành động trên tệp dựa trên loại, kích thước hoặc dấu thời gian của chúng.
  • Nén và giải nén tệp bằng lệnh gzip và bzip2.
  • Lưu trữ tập tin bằng lệnh tar, cpio và dd.
Về loạt bài này

Chuỗi bài viết này sẽ giúp bạn nắm vững các công việc quản trị hệ điều hành Linux. Bạn cũng có thể sử dụng tài liệu trong các bài viết này để chuẩn bị.

Để xem mô tả các bài viết trong loạt bài này và nhận liên kết đến chúng, vui lòng tham khảo trang web của chúng tôi. Danh sách này được cập nhật liên tục với các bài viết mới khi chúng có sẵn và bao gồm các mục tiêu thi chứng chỉ LPIC-1 mới nhất (tính đến tháng 4 năm 2009). Nếu một bài viết bị thiếu trong danh sách, bạn có thể tìm phiên bản cũ hơn đáp ứng các mục tiêu LPIC-1 trước đó (trước tháng 4 năm 2009) bằng cách tham khảo .

Bài viết này sẽ giúp bạn chuẩn bị tham gia kỳ thi Quản trị viên cấp đầu vào LPI 101 (LPIC-1) và chứa tài liệu từ Mục tiêu 103.3 của Chủ đề 103. Mục tiêu có trọng số là 4.

Những điều kiện cần thiết

Để tận dụng tối đa các bài viết của chúng tôi, bạn cần có kiến ​​thức cơ bản về Linux và có một máy tính Linux đang hoạt động có thể chạy tất cả các lệnh bạn gặp phải. Đôi khi các phiên bản khác nhau của chương trình tạo ra kết quả khác nhau, do đó nội dung của danh sách và số liệu có thể khác với những gì bạn thấy trên máy tính.

Duyệt thư mục

Làm thế nào để liên hệ với Ian

Ian là một trong những tác giả nổi tiếng và có nhiều tác phẩm nhất của chúng tôi. Kiểm tra (EN) được xuất bản trên devWorks. Bạn có thể tìm thấy thông tin liên hệ tại và kết nối với anh ấy cũng như những cộng tác viên và cộng tác viên DeveloperWorks khác của tôi.

Trong Linux và UNIX®, tất cả các tệp được lưu trữ dưới dạng cây hệ thống tệp với thư mục gốc /. Các nhánh bổ sung có thể được thêm hoặc bớt khỏi cây này, gắn hoặc tháo bỏ chúng một cách phù hợp. Những hoạt động này sẽ được thảo luận trong một bài viết khác trong loạt bài này - " Gắn và ngắt kết nối hệ thống tập tin" (cm. ).

Xem nội dung thư mục

Khi tìm hiểu các lệnh trong bài viết này, chúng ta sẽ sử dụng các tệp đã được tạo trong bài viết trước của loạt bài này, " ". Nếu bạn đã hoàn thành tất cả các bài tập trong bài viết này thì thư mục lpi103-2 sẽ có trong thư mục chính của bạn. Nếu bạn không có thư mục như vậy thì bạn có thể sử dụng bất kỳ thư mục nào khác.

Tên tập tin và thư mục có thể là tuyệt đối(điều này có nghĩa là chúng bắt đầu bằng /), hoặc liên quan đến(không bắt đầu bằng /) liên quan đến thư mục làm việc hiện tại. Đường dẫn tuyệt đối đến một tệp hoặc thư mục bao gồm ký tự /, tùy ý theo sau là một hoặc nhiều tên thư mục, được phân tách bằng ký tự / bổ sung và cuối cùng là tên thư mục đích.

Nếu bạn biết tên tệp hoặc thư mục liên quan đến thư mục làm việc hiện tại thì bạn có thể chỉ cần kết hợp tên tuyệt đối của thư mục làm việc, ký tự / và tên tương đối. Ví dụ: thư mục lpi103-2 trong bài viết trước đã được tạo trong thư mục chính của tôi, /home/ian, vì vậy đường dẫn đầy đủ hoặc tuyệt đối của nó là /home/ian/lpi103-2.

Tên của thư mục làm việc hiện tại có thể được tìm thấy bằng lệnh pwd. Tên này cũng thường được chứa trong biến môi trường PWD. Liệt kê 1 cho thấy một ví dụ về cách sử dụng lệnh pwd và cũng cho thấy ba cách khác nhau để sử dụng lệnh ls để liệt kê các tệp trong một thư mục.

Liệt kê 1. Xem nội dung của một thư mục
$ pwd /home/ian/lpi103-2 $ echo "$PWD" /home/ian/lpi103-2 $ ls sedtab text1 text2 text3 text4 text5 text6 xaa xab yaa yab $ ls "$PWD" sedtab text1 text2 text3 text4 text5 text6 xaa xab yaa yab $ ls /home/ian/lpi103-2 sedtab text1 text2 text3 text4 text5 text6 xaa xab yaa yab

Như bạn có thể thấy, để xem nội dung của một thư mục, bạn có thể chuyển tên tương đối hoặc tên tuyệt đối của nó cho lệnh ls.

Hiển thị thông tin chi tiết

Các tập tin và thư mục được đặt trên thiết bị lưu trữ dưới dạng một tập hợp khối. Thông tin về một tập tin (chẳng hạn như chủ sở hữu của tập tin, thời gian tập tin được truy cập lần cuối, kích thước của tập tin, quyền đọc hoặc ghi, mục đó là tập tin hay thư mục) được lưu trữ trong inode inode. số inode, còn được gọi là số sê-ri tập tin, là duy nhất trong một hệ thống tệp cụ thể. Bạn có thể sử dụng tùy chọn -l (hoặc --format=long) để hiển thị một số thông tin được lưu trữ trong inode.

Theo mặc định, lệnh ls không liệt kê các tệp đặc biệt có tên bắt đầu bằng dấu chấm (.). Mỗi thư mục, ngoại trừ thư mục gốc, có ít nhất hai mục đặc biệt: chính thư mục đó (.) và thư mục mẹ (..). Thư mục gốc không có thư mục mẹ.

Liệt kê 2 cho thấy một ví dụ về cách sử dụng các tùy chọn -l và -a để liệt kê chi tiết nội dung của một thư mục (bao gồm các phần tử . và ..).

Liệt kê 2. Xem chi tiết nội dung thư mục
$ ls -al tổng cộng 52 drwxrwxr-x. 2 Ian Ian 4096 2009-08-11 21:21 . drwx------. 35 ian ian 4096 2009-08-12 10:55 .. -rw-rw-r--. 1 Ian Ian 8 2009-08-11 21:17 sedtab -rw-rw-r--. 1 Ian Ian 24 2009-08-11 14:02 text1 -rw-rw-r--. 1 Ian Ian 25 2009-08-11 14:27 text2 -rw-rw-r--. 1 Ian Ian 63 2009-08-11 15:41 text3 -rw-rw-r--. 1 Ian Ian 26 2009-08-11 15:42 text4 -rw-rw-r--. 1 Ian Ian 24 2009-08-11 18:47 text5 -rw-rw-r--. 1 Ian Ian 98 2009-08-11 21:21 text6 -rw-rw-r--. 1 Ian Ian 15 2009-08-11 14:41 xaa -rw-rw-r--. 1 Ian Ian 9 2009-08-11 14:41 xab -rw-rw-r--. 1 Ian Ian 17 2009-08-11 14:41 yaa -rw-rw-r--. 1 Ian Ian 8 2009-08-11 14:41 yab

Trong dòng đầu tiên của Liệt kê 2, chúng ta thấy tổng số khối đĩa (52) được các tệp được hiển thị chiếm giữ. Các dòng còn lại chứa thông tin về nội dung của thư mục.

  • Trường đầu tiên (trong trường hợp của chúng tôi là drwxrwxr-x hoặc -rw-rw-r--) cho chúng tôi biết mục nhập là thư mục (d) hay tệp thông thường (-). Bạn cũng có thể thấy các liên kết tượng trưng (|) hoặc các ký hiệu khác cho một số tệp đặc biệt (ví dụ: các tệp trong hệ thống tệp /dev). Các liên kết tượng trưng sẽ được thảo luận chi tiết hơn trong một bài viết khác trong loạt bài này " " (xem ). Theo sau trường loại là ba bộ quyền (chẳng hạn như rwx hoặc r--): dành cho chủ sở hữu tệp, dành cho các thành viên trong nhóm chủ sở hữu và cho tất cả người dùng khác. Ba giá trị ​xác định xem chủ sở hữu, nhóm hoặc tất cả người dùng có các quyền tương ứng là đọc (r), viết (w) hoặc thực thi (x). Các thuộc tính khác, chẳng hạn như setuid, sẽ được đề cập trong một bài viết khác trong loạt bài này" Quản lý quyền và quyền sở hữu tập tin" (cm. ).
  • Trường tiếp theo chứa một số cho chúng ta biết số lượng liên kết cứng mỗi tập tin. Như đã đề cập, inode chứa thông tin về tập tin. Một mục nhập cho một tệp được lưu trữ trong một thư mục chứa một liên kết cứng (hoặc con trỏ) tới inode của tệp đó, do đó mỗi mục nhập phải có ít nhất một liên kết cứng. Các mục thư mục có một liên kết bổ sung cho mục nhập và một liên kết cho mỗi thư mục con. Vì vậy, bạn có thể thấy trong Liệt kê 2 rằng thư mục chính của tôi, được ký hiệu là..., có một số thư mục con vì nó chứa 35 liên kết cứng.
  • Hai trường tiếp theo chứa tên chủ sở hữu tệp và tên của nhóm chính mà nó thuộc về. Một số bản phân phối Linux (chẳng hạn như Red Hat hoặc Fedora) theo mặc định tạo một nhóm riêng cho từng người dùng. Trong các hệ thống khác, tất cả người dùng có thể thuộc về một hoặc nhiều nhóm.
  • Trường tiếp theo chứa kích thước tệp tính bằng byte.
  • Trường áp chót chứa thời gian sửa đổi của tệp.
  • Và cuối cùng, trường cuối cùng chứa tên của tệp hoặc thư mục.

Tùy chọn -i cho ls sẽ hiển thị số inode. Chúng ta sẽ quay lại xem xét các nút ở phần sau của bài viết này, cũng như trong bài viết " Làm việc với các liên kết cứng và tượng trưng" (cm. ).

Thông tin về nhiều tập tin

Bạn có thể truyền một số tham số cho lệnh ls, mỗi tham số sẽ là tên tệp hoặc tên thư mục. Nếu tham số là tên của một thư mục thì thay vì thông tin về thư mục này, lệnh ls sẽ hiển thị nội dung của nó. Trong trường hợp của chúng tôi, giả sử rằng chúng tôi muốn lấy thông tin về chính thư mục lpi103-2. Lệnh ls -l ../lpi103-2 sẽ cung cấp cho chúng ta thông tin tương tự như trong ví dụ trước. Liệt kê 3 cho thấy cách sử dụng tùy chọn -d để hiển thị thông tin về một mục nhập thư mục thay vì nội dung của nó; Nó cũng cho thấy cách hiển thị các mục nhập cho nhiều tệp hoặc thư mục.

Liệt kê 3. Sử dụng ls –d
$ ls -ld ../lpi103-2 sedtab xaa drwxrwxr-x. 2 Ian Ian 4096 2009-08-12 15:31 ../lpi103-2 -rw-rw-r--. 1 Ian Ian 8 2009-08-11 21:17 sedtab -rw-rw-r--. 1 Ian Ian 15 2009-08-11 14:41 xaa

Lưu ý rằng thời gian sửa đổi thư mục lpi103-2 khác với thời gian chúng ta thấy trong danh sách trước đó. Ngoài ra, giống như danh sách trước, lần này khác với thời gian sửa đổi của bất kỳ tệp nào trong thư mục này. Thực tế là khi thực hiện bài viết này, tôi đã tạo thêm một số ví dụ và sau đó xóa chúng; Đây chính xác là những gì dấu thời gian của thư mục nói. Chúng ta sẽ nói nhiều hơn về dấu thời gian của tệp ở phần sau.

Sắp xếp đầu ra

Theo mặc định, lệnh ls hiển thị tên tệp theo thứ tự bảng chữ cái. Có một số tùy chọn để sắp xếp đầu ra. Ví dụ: lệnh ls -t sẽ sắp xếp các tệp theo thời gian sửa đổi (mới nhất đến cũ nhất) và lệnh ls -lS sẽ tạo danh sách chi tiết các tệp được sắp xếp theo kích thước (lớn nhất đến nhỏ nhất). Nếu bạn thêm tùy chọn -r, việc sắp xếp sẽ được thực hiện theo thứ tự ngược lại. Ví dụ: sử dụng lệnh ls -lrt để hiển thị danh sách chi tiết các tệp, được sắp xếp theo ngày sửa đổi theo thứ tự ngược lại. Bạn có thể tìm hiểu về các tùy chọn khác để sắp xếp tệp và thư mục từ trang man.

Sao chép, di chuyển và xóa tập tin

Vì vậy, chúng ta đã biết cách tạo tệp, nhưng nếu chúng ta muốn sao chép hoặc đổi tên chúng, di chuyển chúng đến một vị trí khác trong hệ thống tệp hoặc thậm chí xóa chúng thì sao. Có ba lệnh ngắn cho việc này:

cpđược sử dụng để sao chép một hoặc nhiều tập tin hoặc thư mục. Bạn phải chỉ ra một hoặc nhiều tên nguồn và một cuối cùng Tên. Tên nguồn hoặc tên đích có thể bao gồm đường dẫn. Nếu tên cuối cùng là tên của thư mục hiện có thì tất cả các nguồn sẽ được sao chép V. cô ấy. Nếu thư mục có tên đích không tồn tại thì gốc (đơn) cũng phải là một thư mục; nguồn và nội dung của nó sẽ được sao chép vào một thư mục mới được tạo với tên được chỉ định. Nếu tên đích là tên tệp thì nguồn (đơn) cũng phải là một tệp; một bản sao của nguồn sẽ được tạo dưới dạng một tệp có tên cuối cùng được chỉ định và nếu một tệp có cùng tên đã tồn tại trên hệ thống, nó sẽ được thay thế bằng một tệp mới. Lưu ý rằng, không giống như hệ điều hành DOS và Windows, trong Linux, thư mục hiện tại không phải là thư mục đích theo mặc định. mvđược sử dụng để sự di chuyển hoặc đổi tên một hoặc nhiều tập tin hoặc thư mục. Nhìn chung, quy tắc sử dụng tên cũng giống như lệnh cp; bạn có thể đổi tên một tệp hoặc di chuyển nhiều tệp sang một thư mục mới. Vì tên chỉ là các mục trong thư mục trỏ đến một inode nên bạn không ngạc nhiên khi số inode không thay đổi. cho đến khi cho đến khi tệp được chuyển sang hệ thống tệp khác (trong trường hợp đó thao tác di chuyển giống thao tác sao chép hơn và sau đó xóa tệp gốc). rmđược sử dụng để gỡ bỏ một hoặc nhiều tập tin. Tôi sẽ cho bạn biết cách xóa thư mục sau.
Đội đã đi đâu?

Nếu bạn đang sử dụng hệ điều hành DOS hoặc Windows®, bạn có thể thấy lạ khi sử dụng lệnh mv để đổi tên một tệp. Linux có lệnh đổi tên nhưng cú pháp của nó khác với lệnh cùng tên trong DOS hay Windows. Để biết thêm thông tin về lệnh này, hãy tham khảo trang man.

Liệt kê 4 cho thấy các ví dụ về cách sử dụng các lệnh cp và mv để tạo nhiều bản sao lưu các tệp văn bản của chúng ta. Chúng tôi cũng sử dụng lệnh ls -i để hiển thị số inode của một số tệp.

  1. Đầu tiên chúng tôi tạo một bản sao của tệp text1 và gọi nó là text1.bkp.
  2. Sau đó, chúng tôi quyết định sử dụng lệnh mkdir để tạo thư mục con sao lưu để lưu trữ các bản sao lưu.
  3. Chúng tôi đã tạo bản sao lưu thứ hai của text1 (lần này là trong thư mục con sao lưu) và cho thấy rằng cả ba tệp đều có các bộ mô tả inode khác nhau.
  4. Chúng tôi đã chuyển tệp text1.bkp của mình sang thư mục con sao lưu và đổi tên nó để khớp với tên của bản sao lưu thứ hai. Mặc dù điều này có thể được thực hiện bằng một lệnh, nhưng để rõ ràng hơn, chúng tôi đã sử dụng hai lệnh.
  5. Chúng tôi kiểm tra lại các bộ mô tả inode và đảm bảo rằng tệp text1.bkp có inode 934193 không còn trong thư mục lpi103-2 của chúng tôi và số inode này hiện thuộc về tệp text1.bkp.1 trong thư mục sao lưu.
Liệt kê 4. Sao chép và di chuyển các tập tin
$ cp text1 text1.bkp $ mkdir sao lưu $ cp text1 sao lưu/text1.bkp.2 $ ls -i text1 text1.bkp sao lưu 933892 text1 934193 sao lưu text1.bkp: 934195 text1.bkp.2 $ mv text1.bkp sao lưu $ mv backup/text1.bkp backup/text1.bkp.1 $ ls -i text1 text1.bkp backup ls: không thể truy cập text1.bkp: Không có tập tin hoặc thư mục như vậy 933892 text1 backup: 934193 text1.bkp.1 934195 text1.bkp.2

Thông thường, lệnh cp sẽ ghi đè lên tệp đích nếu nó tồn tại và có thể bị ghi đè. Mặt khác, lệnh mv không di chuyển hoặc đổi tên tệp nếu tồn tại một tệp khác có cùng tên. Có một số tùy chọn hữu ích để kiểm soát hành vi của lệnh cp và mv.

-f hoặc --force yêu cầu lệnh cp cố gắng xóa một tệp mục tiêu hiện có ngay cả khi nó không thể ghi đè được. -i hoặc --tương tác yêu cầu xác nhận khi cố gắng thay thế một tập tin hiện có. -b hoặc --backup tạo bản sao lưu của tất cả các tập tin được thay thế.

Như mọi khi, thông tin đầy đủ về những tùy chọn này cũng như các tùy chọn sao chép và di chuyển khác có thể được tìm thấy trong các trang hướng dẫn tương ứng.

Liệt kê 6 cho thấy một ví dụ về việc tạo các bản sao lưu và sau đó xóa các tệp gốc.

Liệt kê 5. Sao lưu và xóa các tập tin
$ cp text2 sao lưu $ cp --backup=t sao lưu text2 $ ls sao lưu text1.bkp.1 text1.bkp.2 text2 text2.~1~ $ rm backup/text2 backup/text2.~1~ $ ls text1.bkp dự phòng .1 văn bản1.bkp.2

Lưu ý rằng lệnh rm cho phép bạn sử dụng các tùy chọn -i (tương tác) và -f (bắt buộc). Nếu một tệp bị xóa bằng rm , hệ thống tệp sẽ không còn quyền truy cập vào tệp đó nữa. Trên một số hệ thống, bí danh mặc định cho người dùng root là alias rm="rm -i" để ngăn các tập tin vô tình bị xóa. Tính năng này cũng có thể được sử dụng bởi những người dùng bình thường sợ vô tình xóa nội dung nào đó.

Trước khi rời khỏi chủ đề này, cần lưu ý rằng đối với các tệp mới, lệnh cp sẽ tạo dấu thời gian mới theo mặc định. Chủ sở hữu (và nhóm) của tệp mới sẽ trở thành người dùng (và nhóm của anh ta) tạo bản sao. Bạn có thể sử dụng tùy chọn -p để lưu các thuộc tính đã chọn. Lưu ý rằng người dùng root có thể là người dùng duy nhất có thể giữ quyền sở hữu. Bạn có thể tìm thêm thông tin trên trang man.

Tạo và xóa thư mục

Bạn đã biết cách tạo thư mục bằng lệnh mkdir. Bây giờ chúng ta hãy đi xa hơn và xem phần mềm tương tự của mkdir để xóa các thư mục - chương trình rmdir.

lệnh mkdir

Giả sử rằng chúng ta đang ở trong thư mục lpi103-2 và muốn tạo các thư mục con dir1 và dir2. Giống như các lệnh đã được thảo luận, lệnh mkdir có thể xử lý các yêu cầu tạo nhiều thư mục cùng một lúc, như trong Liệt kê 6.

Liệt kê 6. Tạo nhiều thư mục
$ mkdir dir1 dir2

Lưu ý rằng không có đầu ra nếu lệnh thành công. Để xác minh rằng mã thoát thực sự là 0, bạn có thể sử dụng lệnh echo $? .

Nếu bạn muốn tạo một thư mục con lồng nhau, chẳng hạn như d1/d2/d3, lệnh sẽ không thành công vì các thư mục d1 và d2 không tồn tại. May mắn thay, lệnh mkdir có tùy chọn -p cho phép bạn tạo số lượng thư mục mẹ bất kỳ, như trong Liệt kê 7.

Liệt kê 7. Tạo các thư mục mẹ
$ mkdir d1/d2/d3 mkdir: không thể tạo thư mục `d1/d2/d3": Không có tập tin hoặc thư mục như vậy $ echo $? 1 $ mkdir -p d1/d2/d3 $ echo $? 0

lệnh rmdir

Lệnh rmdir được thiết kế để loại bỏ các thư mục. Nếu tùy chọn -p được chỉ định, tất cả các thư mục mẹ cũng bị xóa. Vì không có tùy chọn buộc xóa nên bạn chỉ có thể xóa các thư mục trống bằng rmdir. Chúng ta sẽ xem xét một cách khác để xóa các thư mục trong phần này. Khi đã quen với phương pháp này, bạn có thể không thường xuyên sử dụng lệnh rmdir ở dòng lệnh, nhưng cũng không hại gì khi biết về nó.

Để chứng minh việc xóa một thư mục, chúng tôi đã sao chép tệp text1 của mình vào thư mục d1/d2, hiện tại thư mục này không còn trống. Sau đó, chúng tôi chạy lệnh rmdir để xóa tất cả các thư mục vừa được tạo bằng mkdir. Như bạn có thể thấy, thư mục d1 và d2 không bị xóa vì thư mục d2 chứa các tệp. Tất cả các thư mục khác đã bị xóa. Khi chúng tôi xóa bản sao của text1 khỏi thư mục d2, chúng tôi có thể xóa thư mục d1 và d2 bằng một lệnh duy nhất, rmdir -p .

Liệt kê 8. Loại bỏ các thư mục
$ cp text1 d1/d2 $ rmdir -p d1/d2/d3 dir1 dir2 rmdir: không thể xóa thư mục `d1/d2": Thư mục không trống $ ls . d1/d2 .: sao lưu sedtab text2 text4 text6 xab yab d1 text1 text3 text5 xaa yaa d1/d2: text1 $ rm d1/d2/text1 $ rmdir -p d1/d2

Xử lý nhiều tập tin và thư mục

Cho đến nay, tất cả các lệnh chúng tôi đã sử dụng đều thực hiện các hành động trên từng tệp riêng lẻ hoặc có thể trên nhiều tệp được liệt kê theo cách thủ công. Trong phần còn lại của bài viết này, chúng ta sẽ xem xét việc thực hiện các thao tác khác nhau trên nhiều tệp, thực hiện các hành động đệ quy trên một phần của cây thư mục cũng như lưu và khôi phục nhiều tệp và thư mục.

Hành động đệ quy

Đầu ra đệ quy của nội dung thư mục

Lệnh ls có tùy chọn -R (lưu ý chữ "R" viết hoa) để in nội dung của một thư mục và tất cả các thư mục con của nó. Tùy chọn đệ quy chỉ áp dụng cho tên thư mục; chẳng hạn, nó sẽ không tìm thấy tất cả các tệp có tên "text1" trong cây thư mục. Bạn có thể sử dụng các tùy chọn khác mà bạn biết kết hợp với tùy chọn -R. Liệt kê 9 cho thấy một đầu ra đệ quy của nội dung của thư mục lpi103-2 của chúng ta, bao gồm cả số inode.

Liệt kê 9. Liệt kê đệ quy nội dung của một thư mục
$ ls -iR .: 934194 sao lưu 933892 text1 933898 text3 933900 text5 933894 xaa 933896 yaa 933901 sedtab 933893 text2 933899 text4 933902 text6 933895 xab 933897 yab . /backup : 934193 text1.bkp.1 934195 text1.bkp.2

Sao chép đệ quy

Bạn có thể sử dụng tùy chọn -r (hoặc -R hoặc --recursive) của lệnh cp để xem các thư mục nguồn và sao chép đệ quy nội dung của chúng. Để ngăn chặn đệ quy vô hạn, thư mục nguồn không thể được sao chép. Liệt kê 10 cho thấy cách sao chép toàn bộ nội dung của thư mục lpi103-2 vào thư mục con copy1. Để xem cây thư mục kết quả, chúng ta sử dụng lệnh ls -R.

Liệt kê 10. Sao chép đệ quy
$cp -pR . copy1 cp: không thể sao chép một thư mục, `.", vào chính nó, `copy1" $ ls -R .: backup copy1 sedtab text1 text2 text3 text4 text5 text6 xaa xab yaa yab ./backup: text1.bkp.1 text1.bkp. 2 ./copy1: text2 text3 text5 xaa yaa yab

Xóa đệ quy

Chúng tôi đã đề cập trước đó rằng lệnh rmdir chỉ xóa các thư mục trống. Chúng ta có thể sử dụng tùy chọn -r (hoặc -R hoặc --recursive) của lệnh rm để xóa tệp các thư mục, như trong Liệt kê 11. Trong Liệt kê 11, chúng ta xóa thư mục copy1 mới được tạo cùng với nội dung của nó, bao gồm cả thư mục con sao lưu và tất cả các tệp trong đó.

Liệt kê 11. Xóa đệ quy
$ rm -r copy1 $ ls -R .: sao lưu sedtab text1 text2 text3 text4 text5 text6 xaa xab yaa yab ./backup: text1.bkp.1 text1.bkp.2

Nếu có những tập tin mà bạn không thể ghi vào, bạn có thể cần tùy chọn -f để buộc xóa. Tùy chọn này thường được người dùng root sử dụng khi xóa hệ thống, tuy nhiên hãy lưu ý rằng nếu sử dụng tùy chọn này một cách bất cẩn, bạn có thể mất dữ liệu quan trọng.

Siêu ký tự và thay thế tên tệp

Thông thường cần phải thực hiện một thao tác đơn giản trên nhiều đối tượng hệ thống tệp mà không cần thao tác trên toàn bộ cây thư mục, như chúng ta vừa làm khi thực hiện các hành động đệ quy. Ví dụ: bạn có thể muốn biết thời gian sửa đổi của tất cả các tệp văn bản được tạo trong thư mục lpi103-2 mà không liệt kê các tệp riêng lẻ. Mặc dù việc này khá dễ thực hiện đối với thư mục nhỏ của chúng ta nhưng nó phức tạp hơn nhiều đối với các hệ thống tệp lớn hơn.

Để giải quyết vấn đề này, hãy sử dụng hỗ trợ siêu ký tự được tích hợp trong trình thông dịch bash. Hỗ trợ này còn được gọi là globbing ("globbing" xuất phát từ tên của chương trình /etc/glob) và cho phép bạn xác định nhiều tệp bằng cách sử dụng các mẫu toàn cầu.

? khớp với bất kỳ ký tự đơn nào. * khớp với bất kỳ chuỗi nào, kể cả chuỗi trống. [ lớp nhân vật. Lớp ký tự là một chuỗi không trống kết thúc bằng "]". Trận đấu có nghĩa là trận đấu với bất kỳ ký tự đơn nào được đặt trong dấu ngoặc vuông. Có một số thỏa thuận đặc biệt:
  • Các ký tự "*" và "?" nghĩa là chính họ. Nếu sử dụng chúng trong tên file, bạn cần chú ý sử dụng đúng dấu ngoặc kép và chuỗi thoát.
  • Vì dòng không được để trống và kết thúc bằng "]", bạn phải đặt ký tự "]" Đầu tiên trong chuỗi nếu bạn muốn khớp nó.
  • Dấu "-" được đặt giữa hai ký tự khác biểu thị một phạm vi bao gồm hai ký tự đó cũng như tất cả các ký tự giữa chúng theo sơ đồ đối chiếu. Ví dụ: cấu trúc khớp với bất kỳ chữ số thập lục phân chữ thường hoặc chữ hoa nào. Nếu bạn muốn khớp ký tự "-", hãy đặt ký tự này đầu tiên hoặc cuối cùng trong phạm vi.
  • Ký tự "!" được đặt ở vị trí đầu tiên của một phạm vi có nghĩa là phạm vi đó sẽ khớp với bất kỳ ký tự nào ngoại trừ các ký tự được chỉ định trong đó. Ví dụ: [!0-9] khớp với bất kỳ ký tự nào ngoại trừ các số từ 0 đến 9. Ký tự "!" được đặt ở bất kỳ vị trí nào khác trong phạm vi khớp với chính nó. Hãy nhớ rằng "!" cũng được sử dụng trong lịch sử shell nên hãy cẩn thận và sử dụng nó cẩn thận.

Ghi chú. Các mẫu ký tự đại diện và biểu thức chính quy có những điểm tương đồng nhất định, nhưng chúng Không như nhau. Hãy đặc biệt chú ý đến điều này!

Việc thay thế được áp dụng riêng cho từng thành phần của tên đường dẫn. Bạn không thể khớp ký tự "/" hoặc đưa nó vào một phạm vi. Bạn có thể sử dụng nó ở bất cứ đâu để chỉ định nhiều tệp hoặc tên thư mục, chẳng hạn như trong các lệnh ls , cp , mv hoặc rm . Trong Liệt kê 12, trước tiên chúng ta tạo một số tệp có tên lạ và sau đó sử dụng lệnh ls và rm kết hợp với các ký tự đại diện.

Liệt kê 12. Ví dụ về các mẫu ký tự đại diện
$ echo Odd1>"text[*?!1]" $ echo Odd2>"text" $ ls văn bản dự phòng1 text2 text3 text5 xaa yaa sedtab text[*?!1] văn bản text4 text6 xab yab $ ls văn bản text2 text3 text4 $ ls text[!2-4] text1 text5 text6 $ ls text** text2 text text3 text4 $ ls text*[!2-4]* # Bất ngờ! text1 text[*?!1] text text5 text6 $ ls text*[!2-4] # Một điều bất ngờ khác! text1 văn bản[*?!1] văn bản text5 text6 $ echo text*>text10 $ ls *\!* text[*?!1] văn bản $ ls ** text1 văn bản[*?!1] text10 text2 văn bản text3 text4 text5 text6 xaa xab $ ls ** text[*?!1] text yaa yab $ ls tex?[* text[*?!1] text $ rm tex?[* $ ls *b* sedtab xab yab backup: text1.bkp. 1 text1.bkp.2 $ ls backup/*2 backup/text1.bkp.2 $ ls -d .* . ..

Ghi chú:

  1. Việc hình thành phần bù cùng với ký hiệu "*" có thể dẫn đến một số điều bất ngờ. Mẫu "*[!2-4]" khớp với phần dài nhất của tên không có số 2, 3 hoặc 4 theo sau, khớp với văn bản tên[*?!1], vậy sau đó văn bản tên.
  2. Giống như các ví dụ về lệnh ls trước, nếu tên khớp với mẫu là tên thư mục và tùy chọn -d không được chỉ định thì nội dung của thư mục đó sẽ được liệt kê (như trường hợp với mẫu "*b*" trong ví dụ của chúng tôi).
  3. Nếu tên tệp bắt đầu bằng dấu chấm (.), thì ký tự này phải được chỉ định rõ ràng. Lưu ý rằng chỉ có lệnh ls cuối cùng hiển thị hai mục đặc biệt (. và ..).

Xin lưu ý rằng mọi ký tự đại diện đều được trình thông dịch lệnh phân tích cú pháp, điều này có thể dẫn đến kết quả không mong muốn. Hơn nữa, nếu bạn chỉ định một mẫu ký tự đại diện không khớp với bất kỳ đối tượng hệ thống tệp nào, thì tiêu chuẩn POSIX yêu cầu chuỗi mẫu gốc phải được chuyển tới lệnh. Một số phiên bản trước đó đã chuyển một danh sách trống vào lệnh, do đó bạn có thể gặp phải các tập lệnh cũ hơn hoạt động bất thường. Hãy minh họa điều này trong Liệt kê 13.

Liệt kê 13. Những điều ngạc nhiên khi sử dụng ký tự đại diện
$ echo text* text1 text10 text2 text3 text4 text5 text6 $ echo "text*" text* $ echo text[[\!?]z?? văn bản[[!?]z??

Để biết thêm thông tin về việc thay thế tên, hãy xem trang man 7 glob man. Số phần là cần thiết vì thông tin về ký tự đại diện cũng có trong Phần 3. Cách tốt nhất để học ký tự đại diện là thông qua thực hành, vì vậy hãy thử sử dụng siêu ký tự mỗi khi bạn có cơ hội. Để tránh những hành động không thể khắc phục, đừng quên kiểm tra các mẫu thay thế của bạn bằng ls và chỉ sau đó áp dụng các lệnh như cp, mv hoặc đặc biệt là rm cho chúng.

Sử dụng cảm ứng

Trong phần này, chúng ta sẽ xem xét lệnh touch, lệnh này có thể cập nhật thời gian truy cập hoặc thời gian sửa đổi của tệp cũng như tạo các tệp trống. Bạn sẽ thấy cách sử dụng thông tin này để tìm các tập tin và thư mục. Trong ví dụ của chúng tôi, chúng tôi sẽ tiếp tục sử dụng thư mục lpi103-2. Chúng ta cũng sẽ xem xét các cách khác nhau để đặt dấu thời gian.

lệnh chạm

Lệnh cảm ứng, chạy mà không có bất kỳ tùy chọn nào, lấy một hoặc nhiều tên tệp làm tham số và cập nhật thời gian của chúng sửa đổi– giá trị thường được hiển thị khi liệt kê chi tiết nội dung của các thư mục. Trong Liệt kê 14, chúng ta sử dụng lệnh echo quen thuộc để tạo một tệp nhỏ có tên f1, sau đó in ra nội dung của thư mục ở dạng dài dòng để hiển thị thời gian sửa đổi (hoặc thời gian). Trong trường hợp này, thời gian sửa đổi sẽ là thời điểm file được tạo. Sau đó chúng ta sử dụng lệnh ngủ để đợi 60 giây và chạy lại lệnh ls. Lưu ý rằng dấu thời gian của tệp đã thay đổi một phút.

Liệt kê 14. Cập nhật thời gian sửa đổi lần cuối bằng cách sử dụng touch
$ echo xxx>f1; ls -l f1; ngủ 60; chạm vào f1; ls -l f1 -rw-rw-r--. 1 Ian Ian 4 2009-08-14 18:24 f1 -rw-rw-r--. 1 Ian Ian 4 2009-08-14 18:25 f1

Nếu bạn chỉ định tên tệp không tồn tại, lệnh touch sẽ tạo một tệp trống có tên đó (trừ khi tùy chọn -c hoặc --no-create được sử dụng). Liệt kê 15 cho thấy các ví dụ về cả hai lệnh. Xin lưu ý rằng chỉ có tệp f2 được tạo.

Liệt kê 15. Tạo các tập tin trống bằng cách sử dụng touch
$ chạm f2; chạm -c f3; ls -l f* -rw-rw-r--. 1 Ian Ian 4 2009-08-14 18:25 f1 -rw-rw-r--. 1 Ian Ian 0 2009-08-14 18:27 f2

Bạn cũng có thể đặt ngày và giờ sửa đổi tệp (còn được gọi là thời gian) tương ứng. Tùy chọn -d hiểu nhiều định dạng ngày và giờ khác nhau, trong khi tùy chọn -t yêu cầu thời gian phải được chỉ định ở định dạng MMDDhhmm (năm và giây là các tham số tùy chọn). Liệt kê 16 cho thấy một số ví dụ.

Liệt kê 16. Đặt mtime bằng cách sử dụng cảm ứng
$ touch -t 200908121510.59 f3 $ touch -d 11 giờ sáng f4 $ touch -d "hai tuần trước" f5 $ touch -d "6 giờ sáng hôm qua" f6 $ touch -d "2 ngày trước 12:00" f7 $ touch -d "ngày mai 02 :00" f8 $ touch -d "5 tháng 11" f9 $ ls -lrt f* -rw-rw-r--. 1 Ian Ian 0 2009-07-31 18:31 f5 -rw-rw-r--. 1 Ian Ian 0 2009-08-12 12:00 f7 -rw-rw-r--. 1 Ian Ian 0 2009-08-12 15:10 f3 -rw-rw-r--. 1 Ian Ian 0 2009-08-13 06:00 f6 -rw-rw-r--. 1 Ian Ian 0 2009-08-14 11:00 f4 -rw-rw-r--. 1 Ian Ian 4 2009-08-14 18:25 f1 -rw-rw-r--. 1 Ian Ian 0 2009-08-14 18:27 f2 -rw-rw-r--. 1 Ian Ian 0 2009-08-15 02:00 f8 -rw-rw-r--. 1 Ian 0 2009-11-05 00:00 f9

Nếu bạn cảm thấy khó khăn khi tạo biểu thức cho ngày mong muốn, thì bạn có thể tìm hiểu bằng cách sử dụng lệnh date. Lệnh này cũng có tùy chọn -d và có thể hiểu các định dạng ngày giống như lệnh touch.

Bạn có thể sử dụng tùy chọn -r (hoặc --reference) kết hợp với tên tập tin tham khảođể yêu cầu chương trình cảm ứng (hoặc ngày) đặt ngày khớp với dấu thời gian của tệp hiện có. Liệt kê 17 cho thấy một số ví dụ.

Liệt kê 17. Dấu thời gian của các tệp được tham chiếu
$ ngày Thứ Sáu ngày 14 tháng 8 18:33:48 EDT 2009 $ ngày -r f1 Thứ Sáu ngày 14 tháng 8 18:25:50 EDT 2009 $ touch -r f1 f1a $ ls -l f1* -rw-rw-r--. 1 Ian Ian 4 2009-08-14 18:25 f1 -rw-rw-r--. 1 Ian Ian 0 2009-08-14 18:25 f1a

Hệ thống Linux ghi lại thời gian sửa đổi tập tin và thời gian truy cập nộp ( thời gianmột thời gian tương ứng). Cả hai dấu thời gian đều có cùng giá trị khi tệp được tạo và được đặt lại cùng nhau khi tệp được sửa đổi. Nếu một tập tin đã được truy cập, thời gian truy cập sẽ được cập nhật, ngay cả khi tập tin đó chưa được sửa đổi. Trong ví dụ cuối cùng về cách làm việc với lệnh touch, chúng ta sẽ xem xét thời gian truy cập. Tùy chọn -a (hoặc --time=atime , --time=access hoặc --time=use ) chỉ định rằng thời gian truy cập cần được cập nhật. Trong Liệt kê 18, chúng ta sử dụng lệnh cat để truy cập tệp f1 và in nội dung của nó. Sau đó, chúng tôi sử dụng các lệnh ls -l và ls -lu để xuất ra thời gian sửa đổi và thời gian truy cập tương ứng cho các tệp f1 và f1a mà chúng tôi đã tạo bằng cách sử dụng tệp f1 làm tệp tham chiếu. Cuối cùng sử dụng touch -a chúng ta thay đổi thời gian truy cập của file f1 thành thời gian truy cập của file f1a và kiểm tra kết quả.

Liệt kê 18. Thời gian truy cập và thời gian sửa đổi
$ ls -lu f1* -rw-rw-r--. 1 Ian Ian 4 2009-08-14 18:39 f1 -rw-rw-r--. 1 Ian Ian 0 2009-08-14 18:25 f1a $ ls -l f1* -rw-rw-r--. 1 Ian Ian 4 2009-08-14 18:25 f1 -rw-rw-r--. 1 Ian Ian 0 2009-08-14 18:25 f1a $ touch -a -r f1a f1 $ ls -lu f1* -rw-rw-r--. 1 Ian Ian 4 2009-08-14 18:25 f1 -rw-rw-r--. 1 Ian Ian 0 2009-08-14 18:25 f1a

Để biết thêm thông tin về các thông số kỹ thuật ngày và giờ khác nhau, hãy xem trang hướng dẫn sử dụng hoặc thông tin về các lệnh cảm ứng và ngày.

Tìm tập tin

Bây giờ chủ đề về các tập tin và thư mục của chúng ta đã cạn kiệt bởi phép đệ quy và thay thế, chúng ta hãy xem lệnh find, lệnh này giống như một con dao mổ phẫu thuật hơn. Lệnh find được sử dụng để tìm kiếm các tệp trong cây thư mục dựa trên tên, ngày tháng hoặc kích thước của chúng. Lần này chúng ta sẽ sử dụng lại thư mục lpi103-2 của mình.

tìm lệnh

Lệnh find tìm kiếm các tập tin hoặc thư mục bằng cách sử dụng tên đầy đủ hoặc một phần của nó; việc tìm kiếm có thể được thực hiện dựa trên các tiêu chí khác, chẳng hạn như kích thước, loại, chủ sở hữu, ngày tạo hoặc truy cập lần cuối. Phổ biến nhất là tìm kiếm theo tên hoặc một phần của nó. Liệt kê 19 cho thấy một số ví dụ về tìm kiếm tệp: Đầu tiên chúng ta tìm kiếm trong thư mục lpi103-2 cho tất cả các tệp có "1" hoặc "k" trong tên của chúng, sau đó thực hiện tìm kiếm đường dẫn, việc này được giải thích chi tiết trong ghi chú.

Liệt kê 19. Tìm các tập tin theo tên
$ tìm. -name "**" ./f1a ./f1 ./text10 ./backup ./backup/text1.bkp.1 ./backup/text1.bkp.2 ./text1 $ find . -ipath "*ACK*1" ./backup/text1.bkp.1 $ find . -ipath "*ACK*/*1" [

Ghi chú:

Trong ví dụ đầu tiên của Liệt kê 19, chúng tôi đã tìm thấy cả hai tệp và một thư mục (./backup). Để giới hạn tìm kiếm, hãy sử dụng tham số -type cùng với đặc tả loại (giá trị một ký tự): "f" - tệp thông thường, "d" - thư mục, "l" - liên kết tượng trưng. Bạn có thể tìm hiểu về các loại khác trong trang man của lệnh find. Liệt kê 20 hiển thị kết quả tìm kiếm thư mục (tùy chọn -type d) theo sau là tên (*, trong trường hợp này có nghĩa là tất cả các thư mục).

Liệt kê 20. Tìm kiếm tệp theo loại
$ tìm. -loại d. ./backup $ tìm . -Gõ tên "*" . ./hỗ trợ

Xin lưu ý rằng tham số -type d không chỉ định tên sẽ hiển thị các thư mục có tên bắt đầu bằng dấu chấm (trong trường hợp của chúng tôi, chỉ thư mục hiện tại); kết quả tương tự đạt được bằng cách sử dụng ký tự đại diện "*".

Bạn cũng có thể tìm kiếm tệp theo kích thước của chúng; Bạn có thể tìm kiếm các tệp có kích thước nhất định (n), cũng như các tệp có kích thước lớn hơn (+n) hoặc nhỏ hơn (-n) so với một giá trị được chỉ định. Bằng cách chỉ định giá trị bắt đầu và kết thúc, bạn có thể tìm kiếm các tệp có kích thước nằm trong phạm vi được chỉ định. Theo mặc định, tùy chọn -size của find sử dụng đơn vị đo "b" - khối 512 byte. Các đơn vị đo khác có thể là "c" (byte) hoặc "k" (kilobyte). Trong Liệt kê 21, trước tiên chúng ta tìm tất cả các tệp có kích thước bằng 0 và sau đó là tất cả các tệp có kích thước 24 hoặc 25 byte. Xin lưu ý rằng nếu bạn chỉ định tùy chọn -empty thay vì tùy chọn -size 0, tất cả các tệp có kích thước bằng 0 cũng sẽ được tìm thấy.

Liệt kê 21. Tìm tập tin theo kích thước
$ tìm. -kích thước 0 ./f1a ./f6 ./f8 ./f2 ./f3 ./f7 ./f4 ./f9 ./f5 $ find . -size -26c -size +23c -print ./text2 ./text5 ./backup/text1.bkp.1 ./backup/text1.bkp.2 ./text1

Trong ví dụ thứ hai của Liệt kê 21, chúng ta sử dụng tùy chọn -print, đây là một ví dụ hành động, có thể được thực thi trên kết quả tìm kiếm. Trong trình thông dịch bash, hành động này được thực hiện theo mặc định trừ khi các hành động khác được chỉ định. Trên một số hệ thống và shell, hành động phải được chỉ định, nếu không bạn sẽ không thấy bất kỳ kết quả nào trên màn hình.

Các hành động khác là -ls (thông tin file đầu ra, tương tự đầu ra của ls -lids) và -exec (thực thi lệnh cho từng file). Hành động -exec phải kết thúc bằng dấu chấm phẩy để ngăn trình thông dịch coi nó như một tập hợp lệnh thông thường. Đồng thời đặt () vào bất kỳ vị trí nào trong lệnh nơi tệp được trả về sẽ được sử dụng. Hãy nhớ rằng shell xử lý các dấu ngoặc nhọn, vì vậy chúng phải được thoát (hoặc trích dẫn). Liệt kê 22 cho thấy một ví dụ về cách sử dụng các tùy chọn -ls và -exec để hiển thị thông tin về các tập tin. Lưu ý rằng ví dụ thứ hai không in thông tin về inode.

Liệt kê 22. Tìm và thực hiện các hành động trên tệp
$ tìm. -size -26c -size +23c -ls 933893 4 -rw-rw-r-- 1 ian ian 25 ngày 11 tháng 8 14:27 ./text2 933900 4 -rw-rw-r-- 1 ian ian 24 ngày 11 tháng 8 18: 47 ./text5 934193 4 -rw-rw-r-- 1 ian 24 ngày 12 tháng 8 15:36 ./backup/text1.bkp.1 934195 4 -rw-rw-r-- 1 ian ian 24 ngày 12 tháng 8 15: 36 ./backup/text1.bkp.2 933892 4 -rw-rw-r-- 1 ian ian 24 tháng 8, 11 tháng 8 14:02 ./text1 $ find . -size -26c -size +23c -exec ls -l "()" \; -rw-rw-r--. 1 Ian Ian 25 2009-08-11 14:27 ./text2 -rw-rw-r--. 1 Ian Ian 24 2009-08-11 18:47 ./text5 -rw-rw-r--. 1 Ian Ian 24 2009-08-12 15:36 ./backup/text1.bkp.1 -rw-rw-r--. 1 Ian Ian 24 2009-08-12 15:36 ./backup/text1.bkp.2 -rw-rw-r--. 1 Ian Ian 24 2009-08-11 14:02 ./text1

Tùy chọn -exec có thể được sử dụng cho nhiều mục đích khác nhau và chỉ bị giới hạn bởi trí tưởng tượng của bạn. Ví dụ, lệnh

Tìm thấy. -empty -exec rm "()" \;

Xóa tất cả các tệp trống khỏi cây thư mục và lệnh

Tìm thấy. -name "*.htm" -exec mv "()" "()l" \;

Đổi tên tất cả các tệp có phần mở rộng .htm thành các tệp có phần mở rộng .html.

Trong ví dụ cuối cùng của chúng tôi về lệnh find, chúng tôi tìm kiếm các tệp dựa trên dấu thời gian cụ thể (mà lệnh touch hoạt động cùng). Liệt kê 23 chứa ba ví dụ.

  1. Khi sử dụng tùy chọn -mtime -2, lệnh find sẽ tìm kiếm tất cả các tệp đã được sửa đổi trong hai ngày qua. Trong trường hợp này, một ngày là 24 giờ kể từ thời điểm hiện tại. Lưu ý rằng nếu bạn muốn tìm tệp dựa trên thời gian truy cập thay vì thời gian sửa đổi, bạn có thể sử dụng tùy chọn -atime để thực hiện việc này.
  2. Việc thêm tùy chọn -daystart có nghĩa là chúng ta muốn đếm ngược số ngày theo lịch bắt đầu từ nửa đêm. Vì vậy, ví dụ này thiếu f3.
  3. Trong ví dụ trước, chúng tôi minh họa việc sử dụng phạm vi thời gian được chỉ định theo phút thay vì ngày để tìm các tệp đã được sửa đổi trong khoảng thời gian từ một giờ (60 phút) đến mười giờ (600 phút) trước.
Liệt kê 23. Tìm tập tin theo dấu thời gian
$ ngày Thứ Bảy, 15 tháng 8 00:27:36 EDT 2009 $ find . -mtime -2 -type f -exec ls -l "()" \; -rw-rw-r--. 1 Ian Ian 0 2009-08-14 18:25 ./f1a -rw-rw-r--. 1 Ian Ian 4 2009-08-14 18:25 ./f1 -rw-rw-r--. 1 Ian Ian 0 2009-08-13 06:00 ./f6 -rw-rw-r--. 1 Ian Ian 0 2009-08-15 02:00 ./f8 -rw-rw-r--. 1 Ian Ian 0 2009-08-14 18:27 ./f2 -rw-rw-r--. 1 Ian Ian 58 2009-08-14 17:30 ./text10 -rw-rw-r--. 1 Ian Ian 0 2009-08-14 11:00 ./f4 -rw-rw-r--. 1 Ian Ian 0 2009-11-05 00:00 ./f9 $ find . -daystart -mtime -2 -type f -exec ls -l "()" \; -rw-rw-r--. 1 Ian Ian 0 2009-08-14 18:25 ./f1a -rw-rw-r--. 1 Ian Ian 4 2009-08-14 18:25 ./f1 -rw-rw-r--. 1 Ian Ian 0 2009-08-15 02:00 ./f8 -rw-rw-r--. 1 Ian Ian 0 2009-08-14 18:27 ./f2 -rw-rw-r--. 1 Ian Ian 58 2009-08-14 17:30 ./text10 -rw-rw-r--. 1 Ian Ian 0 2009-08-14 11:00 ./f4 -rw-rw-r--. 1 Ian Ian 0 2009-11-05 00:00 ./f9 $ find . -mmin -600 -mmin +60 -type f -exec ls -l "()" \; -rw-rw-r--. 1 Ian Ian 0 2009-08-14 18:25 ./f1a -rw-rw-r--. 1 Ian Ian 4 2009-08-14 18:25 ./f1 -rw-rw-r--. 1 Ian Ian 0 2009-08-14 18:27 ./f2 -rw-rw-r--. 1 Ian Ian 58 2009-08-14 17:30 ./text10

Chúng tôi không thể hướng dẫn bạn qua tất cả các tùy chọn của lệnh tìm trong hướng dẫn nhanh này. Nếu bạn muốn biết thêm về lệnh này, vui lòng tham khảo các trang man tương ứng.

Xác định loại tệp

Các tệp thường có phần mở rộng (chẳng hạn như gif, jpeg hoặc html) cung cấp manh mối về những gì có thể có bên trong tệp. Trên Linux, những phần mở rộng như vậy là tùy chọn và thường không được sử dụng để xác định loại tệp. Nếu bạn biết loại tệp, bạn có thể chọn chương trình thích hợp để làm việc với nó. Lệnh file cho phép bạn lấy một số thông tin về loại dữ liệu được lưu trữ trong một hoặc nhiều tệp. Liệt kê 24 cho thấy một số ví dụ về cách sử dụng lệnh file.

Liệt kê 24. Xác định nội dung tập tin
$ file backup text1 f2 ../p-ishields.jpg /bin/echo backup: thư mục text1: ASCII text f2:empty ../p-ishields.jpg: Dữ liệu ảnh JPEG, chuẩn JFIF 1.02 /bin/echo: ELF 32 -bit LSB có thể thực thi được, Intel 80386, phiên bản 1 (SYSV), được liên kết động (sử dụng lib được chia sẻ), dành cho GNU/Linux 2.6.18, đã bị loại bỏ

Lệnh file cố gắng phân tích từng tệp bằng ba cách kiểm tra khác nhau. Kiểm tra hệ thống tệp sử dụng kết quả của lệnh stat để xác định tệp là gì, ví dụ: tệp đó có thể là tệp trống hoặc thư mục. Cái gọi là ảo thuật kiểm tra các tệp tìm kiếm để tìm nội dung cụ thể cho phép chúng được xác định. Những chữ ký nhận dạng này còn được gọi là con số ma thuật. Cuối cùng, kiểm tra ngôn ngữ sẽ kiểm tra nội dung của tệp văn bản và cố gắng xác định loại của chúng (tệp XML, mã nguồn C hoặc C++, tệp troff hoặc bất kỳ tệp mã nguồn bộ xử lý ngôn ngữ nào khác). Nếu tùy chọn -k hoặc --keep- going không được chỉ định, thông tin về loại tệp đầu tiên được tìm thấy sẽ được in và các hoạt động kiểm tra tiếp theo sẽ bị dừng.

Lệnh tập tin có nhiều tùy chọn mà bạn có thể tìm hiểu từ các trang man. Liệt kê 25 cho thấy cách sử dụng tùy chọn -i (hoặc --mime) để in loại tệp dưới dạng chuỗi MIME.

Liệt kê 25. Xác định nội dung tệp là MIME
$ file -i backup text1 f2 ../p-ishields.jpg /bin/echo backup: application/x-directory; bộ ký tự=văn bản nhị phân1: văn bản/thuần túy; bộ ký tự=us-ascii f2: application/x-empty; charset=binary ../p-ishields.jpg: image/jpeg; charset=binary /bin/echo: application/x-executable; bộ ký tự=nhị phân

Lệnh file cũng hoạt động với các file chứa chữ ký số ma thuật. Bạn có thể tìm thêm thông tin trong các trang hướng dẫn sử dụng.

Ghi chú. Lệnh xác định từ gói ImageMagick là một công cụ bổ sung cho phép bạn lấy thông tin chi tiết hơn về tệp hình ảnh.

Nén tập tin

Nén thường được sử dụng khi sao lưu tệp cũng như khi lưu trữ hoặc truyền chúng. Hai chương trình nén file phổ biến trên Linux là gzip và bzip2. Lệnh gzip sử dụng thuật toán Lempel-Ziv và lệnh bzip2 sử dụng thuật toán sắp xếp khối Burrows-Wheeler.

chương trình gzip và gunzip

Thông thường, tỷ lệ nén cao nhất đạt được khi xử lý tệp văn bản. Nhiều định dạng đồ họa đã được nén sẵn nên chúng (và có lẽ cả các tệp nhị phân khác) có thể không được hưởng lợi từ việc nén. Để chứng minh kết quả của việc nén một tệp văn bản khá lớn, hãy sao chép tệp /etc/services vào thư mục của chúng ta và nén nó bằng gzip, như trong Liệt kê 26. Chúng ta sử dụng tùy chọn -p của lệnh cp để giữ nguyên dấu thời gian của tệp /etc/services. Lưu ý rằng tệp nén có phần mở rộng .gz và có cùng dấu thời gian.

Liệt kê 26. Nén bằng gzip
$ cp -p /etc/services . $ ls -l serv* -rw-r--r--. 1 ian ian 630983 2009-04-10 04:42 dịch vụ $ dịch vụ gzip $ ls -l serv* -rw-r--r--. 1 Ian Ian 124460 2009-04-10 04:42 services.gz

Các tệp nén bằng gzip được giải nén bằng cùng một chương trình chạy với tùy chọn -d hoặc bằng lệnh gunzip (phương pháp thứ hai phổ biến hơn). Liệt kê 27 thể hiện phương pháp đầu tiên. Lưu ý tên và dấu thời gian của file trích xuất giống với file gốc.

Liệt kê 27. Giải nén bằng gzip
$ gzip -d services.gz $ ls -l serv* -rw-r--r--. 1 Ian Ian 630983 2009-04-10 04:42 dịch vụ

lệnh bzip2 và bunzip2

Như bạn có thể thấy trong Liệt kê 28, lệnh bzip2 hoạt động tương tự như lệnh gzip.

Liệt kê 28. Nén bằng bzip2
$ ls -l serv* -rw-r--r--. 1 ian ian 630983 2009-04-10 04:42 dịch vụ $ bzip2 dịch vụ $ ls -l serv* -rw-r--r--. 1 Ian Ian 113444 2009-04-10 04:42 services.bz2 $ bunzip2 services.bz2 $ ls -l serv* -rw-r--r--. 1 Ian Ian 630983 2009-04-10 04:42 dịch vụ

Sự khác biệt giữa gzip và bzip2

Mặc dù chương trình bzip2 và gzip có nhiều tùy chọn giống nhau nhưng chúng không giống nhau. Bạn có thể nhận thấy rằng trong cả hai ví dụ, tệp được trích xuất có cùng tên và dấu thời gian với tệp gốc. Tuy nhiên, việc đổi tên tệp hoặc chạy lệnh cảm ứng trên tệp có thể thay đổi hành vi này. Lệnh gzip có tùy chọn -N hoặc --name cho phép bạn lưu tên và dấu thời gian, nhưng lệnh bzip2 không có tùy chọn như vậy. Lệnh gzip cũng có tùy chọn -l để hiển thị thông tin về file nén, bao gồm tên mà nó sẽ nhận được sau khi giải nén. Liệt kê 29 cho thấy một số khác biệt giữa các lệnh này.

Liệt kê 29. Một số khác biệt giữa gzip và bzip2
$ ls -l serv* -rw-r--r--. 1 ian ian 630983 2009-04-10 04:42 services $ gzip -N services $ touch services.gz $ mv services.gz services-x.gz $ ls -l serv* -rw-r--r--. 1 ian ian 124460 2009-09-23 14:08 services-x.gz $ gzip -l services-x.gz tỷ lệ nén không nén uncompression_name 124460 630983 80,3% services-x $ gzip -lN services-x.gz tỷ lệ nén không nén uncombbed_name 124460 630983 80,3% dịch vụ $ gunzip -N services-x.gz $ ls -l serv* -rw-r--r--. 1 ian ian 630983 2009-04-10 04:42 dịch vụ $ $ bzip2 dịch vụ $ mv services.bz2 services-x.bz2 $ touch services-x.bz2 $ ls -l serv* -rw-r--r--. 1 Ian Ian 113444 2009-09-23 14:10 services-x.bz2 $ bunzip2 services-x.bz2 $ ls -l serv* -rw-rw-r--. 1 ian ian 630983 2009-09-23 14:10 services-x $ rm services-x # Không cần cái này nữa

Cả gzip và bzip2 đều nhận đầu vào từ thiết bị stdin. Cả hai lệnh đều có tùy chọn -c để chuyển hướng đầu ra tới thiết bị xuất chuẩn.

Có hai lệnh khác liên quan đến lệnh bzip2.

  1. Lệnh bzcat giải nén các tập tin vào thiết bị xuất chuẩn và tương đương với lệnh bzip2 -dc.
  2. Lệnh bzip2recover cố gắng khôi phục dữ liệu từ các tệp bzip2 bị hỏng.

Bạn có thể tìm thêm thông tin về các lệnh gzip và bzip2 trong các trang man tương ứng.

Các công cụ nén khác

Hai chương trình cũ hơn vẫn thường thấy trên hệ thống Linux và UNIX là nén và giải nén.

Ngoài ra, các tiện ích zip và giải nén đã được phát triển cho hệ điều hành Linux trong khuôn khổ dự án Info-ZIP. Các chương trình này sử dụng chức năng nén đa nền tảng chạy trên các phần cứng khác nhau chạy các hệ điều hành khác nhau. Hãy nhớ rằng các hệ điều hành khác nhau có thể sử dụng các thuộc tính tệp và khả năng hệ thống tệp khác nhau. Nếu bạn tải xuống tệp zip cài đặt đã nén, giải nén nó trên Windows rồi ghi nó vào đĩa CD hoặc DVD để cài đặt sau trên Linux, bạn có thể gặp sự cố khi cài đặt từ đĩa đó; ví dụ: Windows không hỗ trợ các liên kết tượng trưng, ​​​​các liên kết này có thể trở thành một phần của bộ tệp nguồn không nén.

Để biết thêm thông tin về các chương trình này cũng như các chương trình nén và giải nén khác, hãy xem các trang hướng dẫn tương ứng của chúng.

Lưu trữ tập tin

Các lệnh tar, cpio và dd được sử dụng rộng rãi để tạo bản sao lưu của các nhóm tệp hoặc thậm chí toàn bộ phân vùng, cũng như để lưu trữ và truyền tệp sang máy tính khác hoặc tới người dùng khác. Các chủ đề sao lưu được đề cập chi tiết trong Kỳ thi quản trị viên trung cấp LPI 201 (LPIC-2).

Có ba cách tiếp cận chính để sao lưu.

  1. vi phân hoặc tích lũy lưu trữ – sao lưu tất cả dữ liệu đã thay đổi kể từ khi bản lưu trữ đầy đủ cuối cùng được tạo. Để khôi phục dữ liệu, bạn phải có bản sao lưu đầy đủ mới nhất và bản sao lưu vi sai mới nhất.
  2. Tăng dần lưu trữ - chỉ sao lưu những thay đổi đã xảy ra kể từ khi tạo kho lưu trữ gia tăng cuối cùng. Để khôi phục dữ liệu, bạn phải có bản lưu trữ đầy đủ cuối cùng và tất cả các bản lưu trữ gia tăng (theo thứ tự) được tạo sau khi tạo bản lưu trữ đầy đủ.
  3. Hoàn thành lưu trữ - sao lưu toàn bộ dữ liệu (thường là hệ thống tệp, thư mục hoặc nhóm tệp). Vì trong trường hợp này thời gian tạo kho lưu trữ là tối đa nên phương pháp này được sử dụng kết hợp với hai phương pháp còn lại.

Các lệnh này, cũng như các lệnh khác mà bạn đã biết trong bài viết này, cho phép bạn tạo bản sao lưu theo bất kỳ cách nào trong ba cách trên.

lệnh tar

Lệnh tar (tên gốc Lưu trữ băng) tạo một tệp lưu trữ (tên khác của nó là hồ dầu hoặc tập tin nén) từ nhiều tệp hoặc thư mục, đồng thời trích xuất các tệp từ kho lưu trữ đã tạo. Nếu bạn chuyển tên của một thư mục làm đầu vào cho lệnh tar thì tất cả các tệp và thư mục con trong đó sẽ tự động được đưa vào kho lưu trữ; Điều này làm cho tar rất thuận tiện cho việc lưu trữ toàn bộ các nhánh của cây thư mục.

Đầu ra có thể được gửi đến một tệp, tới một thiết bị lưu trữ (chẳng hạn như ổ băng từ hoặc thiết bị lưu trữ di động khác) hoặc tới thiết bị xuất chuẩn. Vị trí cuối cùng được chỉ định bằng tùy chọn -f. Các tùy chọn thường được sử dụng khác là -c (tạo một kho lưu trữ), -x (giải nén kho lưu trữ), -v (in danh sách dài dòng chứa tên của các tệp đang được xử lý), -z (sử dụng nén gzip) và -j (sử dụng nén bzip2). Hầu hết các tùy chọn lệnh tar có thể được chỉ định ngắn gọn bằng cách sử dụng một dấu gạch nối hoặc chi tiết bằng cách sử dụng dấu gạch nối kép. Hình thức ngắn được hiển thị trong ví dụ của chúng tôi. Bạn có thể tìm thấy thông tin về các tùy chọn bổ sung và biểu mẫu chi tiết để viết chúng trên các trang hướng dẫn.

Liệt kê 30 cho thấy cách sao lưu thư mục lpi103-2 của chúng ta bằng cách sử dụng tar .

Liệt kê 30. Sao lưu thư mục lpi103-2 bằng tar
$ tar -cvf ../lpitar1.tar . ./ ./text3 ./yab ... ./f5

Thông thường, các tệp lưu trữ được nén để tiết kiệm dung lượng ổ đĩa hoặc thời gian chuyển kho lưu trữ. Phiên bản GNU của tar cho phép bạn thực hiện đồng thời cả hai thao tác bằng cách sử dụng tùy chọn -z (nén gzip) hoặc -b (nén bzip2). Liệt kê 31 cho thấy một ví dụ về cách sử dụng tùy chọn -z và cho thấy sự khác biệt về kích thước của hai tệp lưu trữ.

Liệt kê 31. Nén một kho lưu trữ tar bằng gzip
$ tar -zcvf ../lpitar2.tar ~/lpi103-2/ tar: Xóa `/" đứng đầu khỏi tên thành viên /home/ian/lpi103-2/ /home/ian/lpi103-2/text3 /home/ian/ lpi103-2/yab ... /home/ian/lpi103-2/f5 $ ls -l ../lpitar* -rw-rw-r--. 1 ian ian 30720 2009-09-24 15:38 .. /lpitar1.tar -rw-rw-r--. 1 Ian 881 2009-09-24 15:39 ../lpitar2.tar

Liệt kê 31 sử dụng một hàm tar quan trọng khác. Chúng tôi đã chỉ định một đường dẫn tuyệt đối cho thư mục của mình và chúng tôi thấy rằng dòng đầu ra đầu tiên từ tar cho chúng tôi biết rằng nó đang xóa ký tự gạch chéo (/) ở đầu khỏi tên tệp. Điều này cho phép bạn khôi phục các tập tin đến bất kỳ vị trí nào khác để kiểm tra chúng và đóng vai trò đặc biệt quan trọng khi khôi phục các tập tin hệ thống. Nếu bạn vẫn cần lưu đường dẫn tuyệt đối, hãy sử dụng tùy chọn -p cho việc này. Tránh sử dụng các đường dẫn tuyệt đối và tương đối cùng nhau khi tạo kho lưu trữ, vì khi khôi phục từ kho lưu trữ, tất cả các đường dẫn sẽ trở thành tương đối.

Lệnh tar có thể thêm tệp vào kho lưu trữ hiện có; Tùy chọn -r hoặc --append được sử dụng cho việc này. Do đó, nhiều bản sao của cùng một tệp có thể được thêm vào kho lưu trữ. Trong trường hợp này, khi giải nén từ kho lưu trữ, tệp đã được thêm vào sẽ được khôi phục cuối cùng. Để khôi phục một bản sao cụ thể của một tệp, hãy sử dụng tùy chọn --occurrence. Nếu kho lưu trữ không được lưu trên băng mà trên hệ thống tệp thông thường thì bạn có thể sử dụng tùy chọn -u hoặc --update để cập nhật nó. Trong trường hợp này, thao tác cập nhật tương tự như thao tác thêm tệp, ngoại trừ dấu thời gian của các tệp trong kho lưu trữ được so sánh với dấu thời gian của các tệp được thêm vào và chỉ những tệp đã thay đổi kể từ khi kho lưu trữ được tạo mới được thêm vào. . Như đã đề cập, tính năng này không hoạt động khi sử dụng kho lưu trữ băng từ.

Lệnh tar có thể so sánh các kho lưu trữ với hệ thống tệp hiện tại và trích xuất các tệp từ kho lưu trữ. Để so sánh, hãy sử dụng tùy chọn -d , --compare hoặc --diff. Việc so sánh sẽ hiển thị tất cả các tệp có nội dung khác nhau cũng như tất cả các tệp có dấu thời gian khác nhau. Theo mặc định, chỉ các tệp khác nhau (nếu có) mới được hiển thị. Để có đầu ra dài dòng, hãy sử dụng tùy chọn -v đã thảo luận trước đó. Tùy chọn -C hoặc --directory yêu cầu lệnh tar thực hiện thao tác bắt đầu từ thư mục đã chỉ định thay vì thư mục hiện tại.

Liệt kê 32 cho thấy một số ví dụ. Chúng tôi đã sử dụng lệnh touch để thay đổi dấu thời gian của tệp f1 và sau đó thực hiện so sánh trước khi trích xuất tệp f1 từ một trong các kho lưu trữ của chúng tôi. Để chứng minh khả năng của tar, chúng tôi đã sử dụng nhiều tùy chọn khác nhau.

Liệt kê 32. So sánh và khôi phục bằng tar
$ touch f1 $ tar --diff --file ../lpitar1.tar . ./f1: Thời gian mod khác nhau $ tar -df ../lpitar2.tar -C / home/ian/lpi103-2/f1: Thời gian mod khác nhau $ tar -xvf ../lpitar1.tar ./f1 # Xem bên dưới . /f1 $ tar --compare -f ../lpitar2.tar --directory /

Tên của các tập tin hoặc thư mục được trích xuất từ ​​kho lưu trữ phải khớp với tên của chúng trong kho lưu trữ. Trong ví dụ của chúng tôi, việc cố gắng khôi phục tệp f1 thay vì ./f1 sẽ không thành công. Bạn có thể sử dụng thay thế tên, nhưng hãy cẩn thận, nếu không kết quả có thể không chính xác như bạn mong muốn. Nếu bạn muốn xem những gì được lưu trữ trong kho lưu trữ, hãy sử dụng tùy chọn --list hoặc -t để liệt kê nội dung của nó. Liệt kê 33 cho thấy một ví dụ về việc sử dụng các ký tự đại diện để trích xuất nhiều thứ hơn là chỉ tệp ./f1 từ kho lưu trữ.

Liệt kê 33. Xem nội dung lưu trữ bằng tar
$ tar -tf ../lpitar1.tar "*f1*" ./f1a ./f1

Bạn có thể chọn tệp để lưu trữ bằng lệnh find, sau đó chuyển kết quả tìm kiếm làm đầu vào cho lệnh tar. Chúng ta sẽ xem xét phương pháp này khi tìm hiểu về lệnh cpio, nhưng nó cũng hoạt động với lệnh tar.

Giống như các lệnh khác xuất hiện trong hướng dẫn của chúng tôi, chúng tôi không thể đề cập đến tất cả các tùy chọn cho lệnh tar. Để biết thêm thông tin, hãy xem trang man hoặc thông tin.

lệnh cpio

Lệnh cpio hoạt động ở ba chế độ: sao chépđể tạo một kho lưu trữ, Sao chép trongđể trích xuất từ ​​kho lưu trữ và sao chép-passđể sao chép một tập hợp các tập tin từ vị trí này sang vị trí khác. Đối với chế độ sao chép ra, hãy sử dụng tùy chọn -o hoặc --create, đối với chế độ sao chép vào, hãy sử dụng tùy chọn -i hoặc --extract, và cuối cùng đối với chế độ sao chép qua, hãy sử dụng tùy chọn -p hoặc --pass-through. Lệnh nhận danh sách các tệp đầu vào từ thiết bị đầu vào tiêu chuẩn stdin. Đầu ra được gửi đến thiết bị xuất chuẩn của thiết bị đầu ra tiêu chuẩn hoặc tới thiết bị hoặc tệp được chỉ định bằng tùy chọn -f hoặc --file.

Liệt kê 34 cho thấy cách tạo ra một danh sách các tệp bằng cách sử dụng lệnh find và chuyển chúng tới lệnh cpio. Lưu ý việc sử dụng tùy chọn -print0 của find để tạo tên tệp dưới dạng chuỗi kết thúc bằng null và tùy chọn --null tương ứng của cpio để đọc dữ liệu ở định dạng này. Việc sử dụng các tùy chọn này cho phép bạn xử lý tên tệp chứa dấu cách hoặc ký tự dòng mới. Tùy chọn -deep yêu cầu lệnh find hiển thị các mục thư mục trước tên thư mục. Trong ví dụ của chúng tôi, chúng tôi tạo hai bản lưu trữ của thư mục lpi103-2: một bản lưu trữ có đường dẫn tương đối, bản lưu trữ thứ hai có đường dẫn tuyệt đối. Chúng tôi không sử dụng các tính năng khác nhau của lệnh find để giới hạn danh sách tệp (ví dụ: chỉ tìm kiếm các tệp đã thay đổi trong tuần này).

Liệt kê 34. Sao lưu một thư mục bằng cpio
$ tìm. -độ sâu -print0 | cpio --null -o > ../lpicpio.1 3 khối $ find ~/lpi103-2/ -deep -print0 | cpio --null -o > ../lpicpio.2 4 khối

Nếu bạn muốn tên của các tập tin lưu trữ được hiển thị trên màn hình, hãy sử dụng tùy chọn -v của lệnh cpio.

Lệnh cpio ở chế độ sao chép vào (tùy chọn -i hoặc --extract) có thể xuất nội dung của kho lưu trữ hoặc trích xuất các tệp đã chọn. Khi in nội dung của một kho lưu trữ, một số phiên bản cũ hơn của cpio sẽ xóa / ở đầu mỗi tên (nếu nó chứa một tên) và in thông báo tương ứng. Để loại bỏ những thông báo không liên quan này khi xem nội dung lưu trữ, bạn có thể chỉ định tùy chọn --absolute-filenames. Tùy chọn này bị bỏ qua một cách lặng lẽ trong nhiều triển khai hiện tại. Liệt kê 35 cho thấy đầu ra có chọn lọc của nội dung của hai kho lưu trữ trước đó của chúng tôi.

Liệt kê 35. Xem và truy xuất các tệp đã chọn bằng cpio
$ cpio -i --list "*sao lưu*"< ../lpicpio.1 backup backup/text1.bkp.1 backup/text1.bkp.2 3 blocks $ cpio -i --list absolute-filenames "*text1*" < ../lpicpio.2 /home/ian/lpi103-2/text10 /home/ian/lpi103-2/backup/text1.bkp.1 /home/ian/lpi103-2/backup/text1.bkp.2 /home/ian/lpi103-2/text1 4 blocks

Liệt kê 36 cho thấy cách trích xuất tất cả các tệp có chứa "text1" trong tên của chúng, cùng với đường dẫn của chúng, vào một thư mục tạm thời. Một số tệp này nằm trong thư mục con. Không giống như tar, bạn cần chỉ định rõ ràng tùy chọn -d hoặc --make-directories nếu cây thư mục không tồn tại. Ngoài ra, lệnh cpio không thay thế các tệp hiện có bằng ngày sau đó trừ khi tùy chọn -u hoặc --unconditional được chỉ định.

Liệt kê 36. Truy xuất các tệp đã chọn bằng cpio
$ mkdir temp $ cd temp $ cpio -idv "*f1*" "*.bkp.1"< ../../lpicpio.1 f1a f1 backup/text1.bkp.1 3 blocks $ cpio -idv "*.bkp.1" < ../../lpicpio.1 cpio: backup/text1.bkp.1 not created: newer or same age version exists backup/text1.bkp.1 3 blocks $ cpio -id --no-absolute-filenames "*text1*" < ../../lpicpio.2 cpio: Removing leading `/" from member names 4 blocks ./home/ian/lpi103-2/backup/text1.bkp.1 ./home/ian/lpi103-2/backup/text1.bkp.2 ./home/ian/lpi103-2/text1 ./backup/text1.bkp.1 $ cd .. $ rm -rf temp # You may remove these after you have finished

Để biết thêm thông tin về các tùy chọn khác nhau, hãy xem trang man.

lệnh đ

Ở dạng đơn giản nhất, lệnh dd sao chép tệp nguồn sang tệp mới. Vì bạn đã quen với lệnh cp nên có thể bạn đang thắc mắc lệnh sao chép tập tin khác dùng để làm gì? Vấn đề là lệnh dd có thể thực hiện một số việc mà lệnh cp thông thường không thể thực hiện được. Đặc biệt, nó có thể thực hiện các phép biến đổi trên tập tin, chẳng hạn như chuyển đổi từ chữ thường sang chữ hoa hoặc chuyển đổi từ ASCII sang EBCDIC. Nó cũng có thể hoạt động với các khối tệp, điều này có thể hữu ích khi truyền tệp sang thiết bị băng. Lệnh này có thể bỏ qua hoặc chỉ sử dụng các khối đã chọn của tệp. Cuối cùng, nó có thể đọc và ghi vào các thiết bị thô như /dev/sda, cho phép bạn tạo hoặc khôi phục tệp là hình ảnh của toàn bộ phân vùng. Thông thường, bạn phải có quyền root để ghi vào thiết bị.

Chúng ta sẽ bắt đầu với một ví dụ đơn giản chuyển đổi một tệp văn bản thành chữ hoa bằng cách sử dụng tùy chọn conv, như trong Liệt kê 37. Bằng cách sử dụng tùy chọn if, chúng ta xác định rằng đầu vào phải được lấy từ một tệp chứ không phải từ thiết bị đầu vào tiêu chuẩn. Có một tùy chọn tương tự là , ghi đè thiết bị đầu ra tiêu chuẩn mặc định. Để thể hiện khả năng của chương trình, chúng tôi chỉ định các kích thước khác nhau của khối đầu vào và đầu ra bằng cách sử dụng tùy chọn ibs và obs. Khi làm việc với các tệp lớn, bạn có thể thấy thuận tiện khi sử dụng kích thước khối lớn hơn để tăng tốc độ truyền từ đĩa này sang đĩa khác. Trong các trường hợp khác, kích thước khối chủ yếu được sử dụng để làm việc với băng từ. Hãy lưu ý ba dòng trạng thái ở cuối danh sách, cho biết có bao nhiêu khối toàn bộ và một phần đã được đọc và ghi, cũng như kích thước cuối cùng của dữ liệu được truyền.

Liệt kê 37. Chuyển đổi văn bản thành chữ hoa bằng cách sử dụng dd
$ cat text6 1 quả táo 2 quả lê 3 quả chuối 9 quả mận 3 quả chuối 10 quả táo 1 quả táo 2 quả lê 3 quả chuối 9 quả mận 3 quả chuối 10 quả táo $ dd if=text6 conv=ucase ibs=20 obs=30 1 APPLE 2 PEAR 3 BANANA 9 Plum 3 BANANA 10 APPLE 1 APPLE 2 PEAR 3 BANANA 9 Plum 3 BANANA 10 APPLE 4+1 ghi trong 3+1 ghi lại 98 byte (98 B) được sao chép, 0,00210768 s, 46,5 kB/s

Bất kỳ tập tin nào cũng có thể là một thiết bị thô. Điều này thường xảy ra với băng, nhưng bản sao lưu của toàn bộ phân vùng đĩa, chẳng hạn như /dev/hda1 hoặc /dev/sda2, có thể được đặt vào một tệp hoặc băng. Lý tưởng nhất là hệ thống tệp của thiết bị phải được ngắt kết nối hoặc ít nhất được gắn ở chế độ chỉ đọc để đảm bảo rằng dữ liệu không thay đổi trong khi nó được sao lưu. Trong ví dụ về Liệt kê 38, tệp đầu vào là thiết bị thô dev/sda2 và tệp đầu ra là tệp backup-1 thông thường nằm trong thư mục chính của người dùng root. Để kết xuất tệp vào băng hoặc phương tiện lưu động khác, bạn phải sử dụng các tùy chọn như of=/dev/fd0 hoặc of=/dev/st0 .

Liệt kê 38. Sao lưu một phân vùng bằng dd
# dd if=/dev/sda2 of=backup-1 1558305+0 bản ghi trong 1558305+0 ghi ra 797852160 byte (798 MB) được sao chép, 24,471 giây, 32,6 MB/s

Lưu ý rằng 797.852.160 byte dữ liệu đã được sao chép và tệp kết quả thực sự có kích thước đó, mặc dù dung lượng ổ đĩa trên phân vùng này chỉ được sử dụng 3%. Nếu bạn không sử dụng tính năng nén phần cứng khi sao chép vào băng, bạn có thể cần phải nén dữ liệu. Liệt kê 39 cho thấy cách thực hiện điều này; Lệnh ls và df cho phép bạn ước tính kích thước tệp và phần trăm mức sử dụng hệ thống tệp trên thiết bị /dev/sda2.

Liệt kê 39. Tạo bản sao lưu bằng cách sử dụng tính năng nén dd
# dd if=/dev/sda2 |gzip >backup-2 1558305+0 bản ghi trong 1558305+0 ghi ra 797852160 byte (798 MB) được sao chép, 23,4617 giây, 34,0 MB/s # ls -l backup- -rw-r- -r--. 1 gốc gốc 797852160 2009-09-25 17:13 backup-1 -rw-r--r--. 1 root root 995223 2009-09-25 17:14 backup-2 # df -h /dev/sda2 Kích thước hệ thống tệp được sử dụng Sử dụng sẵn có% Được gắn trên /dev/sda2 755M 18M 700M 3% /grubfile

Nén bằng gzip giúp giảm kích thước tệp khoảng 20%. Tuy nhiên, các khối không được sử dụng có thể chứa dữ liệu tùy ý, do đó, ngay cả kho lưu trữ nén cũng có thể lớn hơn tổng kích thước dữ liệu trong phân vùng.

Nếu chia tổng số byte được sao chép cho số bản ghi được xử lý, bạn sẽ thấy rằng dd ghi dữ liệu theo khối 512 byte. Nếu việc sao chép được thực hiện trên một thiết bị thô như băng từ, tốc độ sao chép có thể bị giảm đáng kể. Như đã đề cập trước đó, bạn có thể sử dụng tùy chọn obs để thay đổi kích thước của khối đầu ra và tùy chọn ibs để thay đổi kích thước của khối đầu vào. Tùy chọn bs có thể được sử dụng để đặt kích thước tổng thể cho cả khối đầu vào và khối đầu vào. Nếu bạn đang sử dụng ổ băng từ, hãy đảm bảo sử dụng cùng kích thước khối khi đọc từ băng cũng như khi ghi vào băng.

Nếu bạn cần sử dụng nhiều băng cassette hoặc phương tiện di động khác để lưu trữ các kho lưu trữ, bạn có thể cần chia kho lưu trữ thành nhiều phần nhỏ hơn bằng cách sử dụng tiện ích như chia nhỏ. Nếu bạn cần bỏ qua các khối như nhãn đĩa hoặc băng, bạn có thể thực hiện việc này với dd . Bạn có thể tìm thấy các ví dụ trên các trang man.

Lệnh dd không dành riêng cho hệ thống tệp, vì vậy nếu bạn muốn biết dữ liệu nào được chứa trong một phân vùng, bạn cần khôi phục kết xuất của nó. Liệt kê 40 cho thấy cách khôi phục phân vùng từ kết xuất được tạo trong Liệt kê 39 sang phân vùng /dev/sdc7, được tạo đặc biệt cho ví dụ của chúng ta trên ổ USB di động.

Liệt kê 40. Khôi phục một phân vùng bằng dd
# sao lưu gunzip-2 -c | dd of=/dev/sdc7 1558305+0 bản ghi trong 1558305+0 ghi ra 797852160 byte (798 MB) được sao chép, 30,624 giây, 26,1 MB/s

Có thể bạn sẽ muốn biết rằng một số chương trình ghi đĩa CD và DVD đã lén lút sử dụng lệnh dd để ghi dữ liệu trực tiếp vào thiết bị. Nếu chương trình của bạn ghi lại mọi hành động mà nó thực hiện vào một nhật ký, thì bây giờ bạn đã biết một chút về dd, bạn có thể thấy việc xem xét nó sẽ hữu ích. Nếu bạn đang ghi ảnh ISO vào đĩa CD hoặc DVD, một cách để đảm bảo không có lỗi trong quá trình ghi là đọc dữ liệu từ đĩa bằng cách sử dụng dd và chuyển kết quả làm đầu vào cho lệnh cmp. Liệt kê 41 cho thấy một cách tiếp cận chung sử dụng tệp lưu trữ mà chúng tôi đã tạo trước đó thay vì ảnh ISO. Lưu ý rằng chúng tôi tính toán số khối cần đọc dựa trên kích thước của hình ảnh.

Liệt kê 41. So sánh một hình ảnh với một hệ thống tập tin
# ls -l backup-1 -rw-r--r--. 1 gốc gốc 797852160 2009-09-25 17:13 backup-1 # echo $((797852160 / 512)) # tính số khối 512 byte 1558305 # dd if=/dev/sdc7 bs=512 count=1558305 | cmp - backup-1 1558305+0 bản ghi trong 1558305+0 ghi ra 797852160 byte (798 MB) được sao chép, 26,7942 giây, 29,8 MB/s

Một trong những lựa chọn khó khăn nhất mà bạn sẽ phải đối mặt khi cài đặt Linux và phân vùng ổ cứng là liệu bạn có đặt một thư mục hay không. /trang chủ trên một phần riêng biệt? Trong đó có các tệp người dùng trực tiếp - nghĩa là các tài liệu cá nhân và cài đặt tài khoản người dùng chứ không phải các tệp hệ điều hành, được đặt trong các thư mục riêng biệt. Một số bản phân phối Linux khuyên bạn nên tạo một phân vùng riêng và một số mặc định đặt mọi thứ trên cùng một phân vùng. Những gì bạn nên làm? Câu trả lời phụ thuộc vào cách bạn sử dụng máy tính của mình. Nếu bạn dự định thử nhiều bản phân phối khác nhau và thường cài đặt các bản phân phối mới chồng lên các bản phân phối cũ thì việc tạo một phân vùng riêng là điều hợp lý. /trang chủ.

Nhờ đó, bạn có thể làm bất cứ điều gì bạn muốn với hệ điều hành - nâng cấp, hạ cấp xuống phiên bản cũ hơn hoặc xóa và cài đặt bản phân phối mới lạ được chọn ngẫu nhiên từ Quần đảo Faroe. Cho dù bạn sử dụng bản phân phối Linux nào, các tệp cá nhân của bạn sẽ luôn ở đó, an toàn và lành mạnh, trên một phần riêng biệt của đĩa. Thận trọng một chút, bạn thậm chí có thể có nhiều bản phân phối Linux trên cùng một máy tính, tất cả đều truy cập vào cùng một phân vùng /trang chủ sau khi tải xuống. Nhưng tại sao chúng ta lại nói về sự thận trọng? Hãy suy nghĩ về các cài đặt và tập tin cấu hình. Ví dụ, bằng cách ra lệnh, ls -a trong thư mục chính của bạn, bạn sẽ thấy một số lượng lớn các tệp và thư mục ẩn, tên của chúng bắt đầu bằng dấu chấm - chúng chứa các cài đặt chương trình. Nếu bạn cố gắng sử dụng cùng một cài đặt trong các phiên bản khác nhau của chương trình, chương trình có thể bị nhầm lẫn. Giả sử bạn có Bản phân phối A và Bản phân phối B trên máy tính của mình. Bạn tải xuống Bản phân phối A và chạy Chương trình Foo 2.0 lần đầu tiên và nó tạo một thư mục cài đặt.fooprogram/ trong thư mục chính của bạn. Sau đó, bạn tải xuống Bản phân phối B trong cùng thư mục chính đó và chạy FooProgram - nhưng lần này nó sẽ là phiên bản 1.0. Nó sẽ bị nhầm lẫn do sự khác biệt trong các tệp cấu hình, điều này có thể dẫn đến mất hoặc hỏng dữ liệu hoàn toàn.

Các sự cố tiềm ẩn với /home trên Linux

Một vấn đề tiềm ẩn khác với thư mục /home riêng biệt là giới hạn kích thước. Nếu bạn đặt mọi thứ trên một phân vùng, thì cả thư mục chính và hệ điều hành sẽ có quyền truy cập vào không gian trống. Nếu bạn đặt /home trên một phân vùng riêng và không có đủ dung lượng, bạn sẽ không thể đơn giản lấy dung lượng từ phân vùng hệ điều hành (nhưng nếu bạn đang sử dụng LVM, Trình quản lý khối logic, như được cung cấp trong giai đoạn cài đặt của nhiều bản phân phối, sẽ khắc phục được vấn đề này vì nó hỗ trợ thay đổi kích thước phân vùng).

Tuy nhiên, cách tiếp cận phân vùng riêng cũng có những lợi thế, đặc biệt là hiện nay ổ SSD (ổ đĩa thể rắn) đang trở nên phổ biến hơn và giá cả phải chăng. Vì chúng cực kỳ nhanh so với ổ cứng quay, bạn có thể đặt các tệp hệ điều hành trên ổ SSD để đảm bảo hiệu năng hệ thống và thời gian khởi động ứng dụng nhanh, đồng thời /trang chủ– vào ổ cứng truyền thống (xét cho cùng, bạn không quan tâm quá nhiều đến việc tải tài liệu mất bao lâu LibreOffice hoặc ảnh). Nhưng đối với các hệ thống trên ổ cứng thông thường, nếu bạn không có kế hoạch tìm hiểu bản phân phối mới vào bất kỳ ngày nào, chúng tôi khuyên bạn nên sử dụng phương pháp "Đặt mọi thứ trên một phân vùng".

4.3. Mục đích của các thư mục hệ thống chính

Ví dụ: nếu bạn đã từng làm việc với Windows 95, thì bạn biết rằng mặc dù người dùng có toàn quyền tự do trong việc tổ chức cấu trúc thư mục nhưng một số "phong tục" vẫn còn tồn tại. Do đó, các tệp hệ thống thường nằm trong thư mục con C:\Windows, các chương trình mới cài đặt được đặt mặc định trong thư mục C:\Program Files, v.v. Trong Linux, cấu trúc thư mục tiêu chuẩn có lẽ được duy trì nghiêm ngặt hơn. Hơn nữa, thậm chí còn có một tiêu chuẩn cho cấu trúc thư mục cho các hệ điều hành giống UNIX, được gọi là Tiêu chuẩn phân cấp hệ thống tập tin (FHS), văn bản đầy đủ của tiêu chuẩn này có thể tìm thấy tại http://www.pathname.com/fhs/(Chú thích 10). Việc phân phối Red Hat phần lớn tuân thủ tiêu chuẩn FHS.

Trong bảng 4.1 cung cấp một danh sách ngắn các thư mục chính được tạo tiêu chuẩn của cấu trúc tệp được tạo khi cài đặt bản phân phối Red Hat (và các bản kế thừa của nó).

Cột bên trái liệt kê các thư mục con của thư mục gốc, cột thứ hai liệt kê một số thư mục con cấp hai chính (không phải tất cả!) và cột thứ ba cung cấp giải thích ngắn gọn về mục đích của tất cả các thư mục này. Những lời giải thích nhất thiết phải rất ngắn gọn; bạn có thể tìm hiểu thêm về các danh mục chính trong văn bản của tiêu chuẩn FHS ( http://www.pathname.com/fhs/).

Bảng 4.1. Cấu trúc thư mục Red Hat Linux

Mục lục

Thư mục con

Mục đích

/thùng rác

Thư mục này chứa hầu hết các chương trình sẵn sàng để thực thi, hầu hết đều cần thiết trong quá trình khởi động hệ thống (hoặc ở chế độ hệ thống một người dùng được sử dụng để gỡ lỗi). Một số lượng đáng kể các lệnh Linux thường được sử dụng được lưu trữ ở đây

/khởi động

Chứa các tệp liên tục chính để khởi động hệ thống, đặc biệt là kernel có khả năng khởi động. Các tập tin từ thư mục này chỉ cần thiết trong quá trình khởi động hệ thống

/dev

Một thư mục chứa các tập tin đặc biệt hoặc thiết bị. Chúng ta sẽ nói về chúng chi tiết hơn ở một trong các phần sau. Bạn cũng có thể nhìn vào người đàn ông mknod(1)

/vân vân

Thư mục này và các thư mục con của nó chứa hầu hết dữ liệu cần thiết để khởi động hệ thống và các tệp cấu hình chính. Ví dụ: /etc chứa tệp inittab, xác định cấu hình đã tải và tệp mật khẩu người dùng passwd. Một số tập tin cấu hình có thể nằm ở /usr/vv. Thư mục /etc không được chứa bất kỳ tệp nhị phân nào (chúng phải được chuyển đến /bin hoặc /sbin). Dưới đây là mục đích của các thư mục con chính (nhưng không phải tất cả!) của thư mục /etc

/etc/rc.d

Thư mục con này chứa các tập tin được sử dụng trong quá trình khởi động hệ thống. Thông tin chi tiết hơn về chúng và quá trình tải nói chung sẽ được thảo luận trong phần 8.2

/etc/skel

Khi người dùng và tài khoản mới được tạo cho nó, các tệp từ thư mục này sẽ được sao chép vào thư mục chính của người dùng mới được tạo

/etc/sysconfig

Thư mục chứa một số (nhưng không phải tất cả) tệp cấu hình hệ thống

/etc/X11

/trang chủ

Thông thường thư mục này chứa các thư mục chính của người dùng

/lib

Thư mục này chứa các thư viện chia sẻ các chức năng được yêu cầu bởi trình biên dịch C và các mô-đun (trình điều khiển thiết bị). Ngay cả khi bạn không cài đặt trình biên dịch C trên hệ thống của mình, các thư viện dùng chung vẫn cần thiết vì chúng được nhiều chương trình ứng dụng sử dụng. Chúng được tải vào bộ nhớ khi cần thiết để thực hiện một số chức năng nhất định, giúp giảm số lượng mã chương trình - nếu không, cùng một mã sẽ được lặp lại nhiều lần trong các chương trình khác nhau.

/thất lạc+tìm thấy

Thư mục này được sử dụng khi khôi phục hệ thống tập tin bằng lệnh chết tiệt. Nếu như chết tiệt phát hiện một tập tin mà thư mục mẹ không thể xác định được, nó sẽ đặt tập tin đó vào thư mục /lost+found. Vì thư mục mẹ bị mất nên các tệp đó được đặt tên khớp với số inode của chúng.

/mnt

Đây là điểm gắn kết cho các hệ thống tập tin được gắn tạm thời. Nếu máy tính chạy luân phiên Linux và MS DOS thì thư mục này thường được sử dụng để mount hệ thống file MS DOS. Nếu bạn có thói quen gắn thêm một số phương tiện bổ sung, ví dụ: đĩa mềm, CD-ROM, ổ cứng bổ sung, v.v., thì bạn có thể tạo các thư mục con bổ sung tương ứng cho mỗi phương tiện

/proc

Đây là điểm gắn kết cho hệ thống tệp proc, cung cấp thông tin về các tiến trình đang chạy, kernel, phần cứng cài đặt máy tính, v.v. Đây là một hệ thống tệp giả, có thể tìm thấy chi tiết về nó bằng lệnh người đàn ông 5 proc. Các tệp đặc biệt từ thư mục này được sử dụng để nhận và truyền dữ liệu đến kernel

/nguồn gốc

Đây là thư mục chính của superuser. Xin lưu ý rằng nó không được đặt ở nơi có thư mục cá nhân của người dùng khác (trong /home)

/sbin

Tương tự như thư mục /bin, nó chủ yếu chứa các tệp thực thi - các chương trình và tiện ích hệ điều hành được sử dụng trong quá trình khởi động và được quản trị viên hệ thống khởi chạy. Tiêu chuẩn FHS quy định rằng các tệp thực thi được sử dụng sau khi hệ thống tệp /usr được gắn thành công phải được đặt trong thư mục này. Nội dung tối thiểu của thư mục này bao gồm các chương trình clock, getty, init, update, mkswap, swapon, swapoff, dừng, khởi động lại, tắt máy, fdisk, fsck.*, mkfs.*, lilo, arp, ifconfig, Route

/tmp

Thư mục cho các tập tin tạm thời. Bất cứ lúc nào, siêu người dùng có thể xóa các tập tin khỏi thư mục này mà không gây hại nhiều cho người dùng khác. Tuy nhiên, bạn không nên xóa các tệp khỏi thư mục này trừ khi bạn thấy rõ rằng một tệp hoặc nhóm tệp cụ thể đang cản trở hoạt động sản xuất liên tục trên máy. Hệ thống tự dọn dẹp thư mục này định kỳ, vì vậy bạn không nên lưu trữ các tệp ở đây mà bạn có thể cần sau này

/usr

Thư mục này rất lớn và cấu trúc của nó về cơ bản tuân theo cấu trúc của thư mục gốc. Các thư mục con của nó chứa tất cả các ứng dụng chính. Theo tiêu chuẩn FHS, nên phân bổ một phân vùng đĩa riêng cho thư mục này hoặc thậm chí đặt nó trên một ổ đĩa mạng chung cho tất cả các máy tính trong mạng. Một phân vùng hoặc đĩa như vậy được gắn ở chế độ chỉ đọc và chứa các tệp thực thi và cấu hình chung, tài liệu, tiện ích hệ thống và thư viện, cũng như các tệp bao gồm (các tệp thuộc loại bao gồm)

/usr/bin

Các chương trình sẵn sàng chạy là các tiện ích và ứng dụng thường được người dùng thông thường gọi.

/usr/bin/X11 - Vị trí chung cho các chương trình X-Window sẵn sàng chạy trên Linux. Thông thường đây là một liên kết tượng trưng đến /usr/X11R6/bin

/usr/dict

Thư mục này chứa các tập tin từ vựng cho các chương trình kiểm tra chính tả.

/usr/vv

Nó chứa các tập tin cấu hình cho một nhóm máy. Tuy nhiên, các lệnh và chương trình phải tìm trong thư mục /vân vân, nên chứa liên kết đến các tập tin trong thư mục /usr/vv

/usr/bao gồm

Thư mục này chứa mã nguồn của các thư viện C tiêu chuẩn, được chèn vào các chương trình bằng cách sử dụng chỉ thị tiền xử lý include. Vì vậy, người dùng ít nhất phải có quyền đọc từ thư mục này. Trong mọi trường hợp, bạn không nên sửa đổi các tệp trong thư mục này vì chúng đã được nhà phát triển hệ thống gỡ lỗi cẩn thận (trừ khi bạn biết rõ về hệ thống hơn nhà phát triển)

/usr/lib

Thư mục này chứa các thư viện đối tượng của chương trình con, thư viện động và một số chương trình sẵn sàng thực thi không được gọi trực tiếp. Các hệ thống phần mềm phức tạp có thể có các thư mục con riêng trong thư mục này.

    /usr/lib/X11 - Một nơi chung để đặt các tệp liên quan đến X-Window, cũng như các tệp cấu hình cho chính hệ thống X-Window. Trên Linux đây thường là một liên kết tượng trưng đến một thư mục /usr/X11R6/lib/X11.

    /usr/lib/gcc-lib - Chứa các chương trình sẵn sàng chạy và bao gồm các tệp cho trình biên dịch GNU C (gcc).

    /usr/lib/groff - Các tệp dành cho hệ thống định dạng văn bản thô tục.

    /usr/lib/uucp - Tệp cho UUCP.

    usr/lib/zoneinfo - Tệp để xác định múi giờ. Xem thêm các trang hướng dẫn tên-xfer (8), tập tin tz (5), tzselect (8), zdump (8), zic (8)

/usr/địa phương

Thông thường, các chương trình và thư mục con cục bộ (duy nhất) cho một máy nhất định sẽ được đặt ở đây.

    /usr/local/bin - Thông thường, các chương trình sẵn sàng thực thi cục bộ (duy nhất) cho một máy nhất định sẽ được đặt ở đây.

    /usr/local/doc - Tài liệu về tất cả các gói phần mềm ứng dụng được cài đặt trên máy tính của bạn nằm ở đây.

    /usr/local/etc - Tệp cấu hình cho các chương trình được cài đặt cục bộ.

    /usr/local/lib - Thư viện và tệp cho các chương trình và hệ thống được cài đặt cục bộ.

    /usr/local/info - Các trang mô tả được xem qua chương trình thông tin dành cho các chương trình được cài đặt cục bộ.

    /usr/local/man - Các trang mô tả, được xem qua chương trình man, dành cho các chương trình được cài đặt cục bộ.

    /usr/local/sbin - Chương trình quản trị hệ thống cục bộ.

    /usr/local/src — Văn bản nguồn của các chương trình được cài đặt trên máy này

/usr/man

Các trang trực tuyến ở định dạng ban đầu (không được hiển thị để xem).

/usr/man/ /man - Những thư mục này chứa các trang thủ công bằng nhiều ngôn ngữ khác nhau (tùy thuộc vào giá trị ngôn ngữ). Các hệ thống sử dụng một ngôn ngữ và một bộ mã có thể không sử dụng chuỗi con

/usr/sbin

Thư mục này chứa các chương trình quản trị hệ thống sẵn sàng chạy không được sử dụng khi khởi động

/usr/src

Mã nguồn cho các phần khác nhau của Linux.
/usr/src/linux - nguồn cho nhân Linux

/usr/tmp

Một nơi khác để lưu trữ các tập tin tạm thời. Đây thường là một liên kết tượng trưng đến một thư mục /var/tmp

/usr/X11R6

Các tệp liên quan đến hệ thống X-Window (phiên bản 11, phiên bản 6).

    /usr/X11R6/bin - Các chương trình hệ thống X-Window sẵn sàng để thực thi.

    /usr/X11R6/lib - Các tệp và thư viện được liên kết với hệ thống X-Window

/var

Thư mục này chứa các tệp lưu trữ nhiều loại dữ liệu có thể thay đổi nhằm xác định cấu hình của một số chương trình nhất định vào lần khởi chạy tiếp theo của chúng hoặc thông tin được lưu trữ tạm thời sẽ được sử dụng sau này trong phiên hiện tại. Lượng dữ liệu trong thư mục này có thể khác nhau rất nhiều vì nó chứa các tệp nhật ký, tệp đệm và khóa, tệp tạm thời, v.v.

/var/adm

Chứa thông tin kế toán và chẩn đoán theo yêu cầu của quản trị viên hệ thống

/var/sao lưu

/var/catman/cat

Thư mục này được sử dụng để lưu trữ các trang hướng dẫn đã được tạo theo số chương

/var/khóa

Nó chứa các tệp điều khiển hệ thống được sử dụng để bảo lưu việc sử dụng các tài nguyên hệ thống nhất định

/var/log

Các tệp giao thức khác nhau (nhật ký)

/var/chạy

Các tập tin biến đổi trong thời gian chạy của các chương trình khác nhau. Chúng chứa các mã định danh quy trình (PID) và ghi lại thông tin hiện tại (utmp). Các tập tin trong thư mục này thường bị xóa trong quá trình khởi động hệ thống

/var/spool

Các tập tin của các chương trình khác nhau được xếp hàng chờ dịch vụ.

    /var/spool/at - Các tệp cho công việc được khởi chạy bằng lệnh at.

    /var/spool/cron — Tệp hệ thống cron.

    /var/spool/lpd - Tệp đang chờ in.

    /var/spool/mail - Hộp thư của người dùng.

    /var/spool/news — Tệp hệ thống tin tức.

    /var/spool/uucp — tập tin hệ thống uucp

/var/tmp

Hồ sơ tạm thời

V. Kostromin (kos và rus-linux dot net) - 4.3. Mục đích của các thư mục hệ thống chính

Trong "HĐH" Linux toàn bộ hệ thống tập tin có một cấu trúc cụ thể, có tổ chức. Người dùng mới bắt đầu mới chuyển từ các cửa sổ theo quy luật, họ gặp phải những khó khăn nhất định do thiếu ý tưởng rõ ràng về quyền sở hữu của từng thư mục. Tất cả các tài liệu được trình bày dưới đây sẽ lấp đầy khoảng trống này.

Cấu trúc thư mục Linux.

(Để chuyển từ bảng sang phần mô tả thư mục, bạn cần bấm vào tên thư mục. Để đưa trang về đầu trang, bạn cần bấm vào hình vuông có mũi tên ở góc dưới bên phải màn hình.)

Mô tả ngắn.

/phân vùng gốc

Phân vùng gốc.

Thư mục này chứa tập hợp các lệnh hệ điều hành chính, bao gồm các lệnh hệ thống shell và tệp: ls, cp vân vân...

Đây là kho lưu trữ hình ảnh hạt nhân, cũng như bộ tải khởi động: Grub hoặc Lilo vân vân...

Các tệp liên quan đến các thiết bị cụ thể được kết nối với “HĐH” có tại đây. Thực tế là trong hệ điều hành Linux, mọi thiết bị đều được liên kết với một tệp cụ thể, tức là. có thể là máy in, máy quét, ổ cứng, v.v., mọi thứ đều phải có tệp riêng để có được quyền truy cập cần thiết vào một thiết bị cụ thể.

Đây là vị trí lưu trữ các file cấu hình hệ điều hành, ví dụ: cài đặt mạng, người dùng, nhóm và ứng dụng như Apache, Samba, v.v. và như thế.

Thư mục này có thể và thậm chí hơn thế nữa phải chứa tất cả “thông tin” cá nhân của người dùng. Nói chung, bạn, với tư cách là chủ sở hữu của một máy cụ thể, có quyền lưu giữ “thông tin” của mình ở bất cứ đâu bạn muốn, nhưng vì mục đích bảo mật hệ thống, tốt hơn hết bạn nên giữ nó ở đây và nên tạo thư mục thành một phân vùng độc lập của ổ cứng.

/home/tên người dùng

Đây cũng là thư mục chính nhưng chỉ dành cho "tên người dùng" của người dùng. Các tệp cấu hình cho cài đặt ứng dụng và thông tin cá nhân được lưu trữ tại đây. Nếu có nhiều người dùng thì mỗi người đều có thư mục cá nhân riêng cho những tệp đó. Ngoài ra còn có một thư mục superuser "root", nằm ở thư mục gốc của hệ thống tập tin. Việc tách các thư mục khỏi các tệp hệ thống này làm tăng đáng kể độ tin cậy và đơn giản hóa đáng kể quá trình sao lưu dữ liệu.

Các tệp không có liên kết từ tất cả các thư mục khác sẽ được đưa vào đây, mặc dù thực tế là "inod" của chúng không có nhãn "không sử dụng". Ví dụ: bạn xóa một tập tin và ngay lúc đó nguồn điện sẽ xuất hiện. Kết quả là, một “inod” bị mất được hình thành trong hệ thống, có đường dẫn đến tệp nhưng tệp bị thiếu. Tiếp theo, trong ext2 (chưa đăng nhập), "fsck" tìm "inod", tạo liên kết trong lost+found, sau đó, bạn có thể xem tệp và bình thường hóa mọi thứ. Trong ext3 (đã ghi), "fsck" kiểm tra nhật ký và xác định rằng thao tác chưa hoàn tất, sau đó khôi phục. Do đó, trong "FS" được ghi lại, số inod bị mất ít hơn nhiều.

Không gian này chứa các thư viện hệ thống đảm bảo chức năng của các ứng dụng nằm trong /bin, /sbin và “OS” trên toàn cầu.

Được thiết kế cho các thiết bị tự động gắn: USB, CD-ROM, v.v. Khi bất kỳ thiết bị nào được kích hoạt, nó sẽ tự động được kết nối với thư mục tương ứng trong thư mục này.

Thư mục này thực sự giống với thư mục /media trước đó, với điểm khác biệt duy nhất là kiểu kết nối thủ công được sử dụng, cụ thể là khi lệnh "mount" được thực thi.

Các ứng dụng đã cài đặt có kích thước lớn hoặc các gói bổ sung sẽ được root tại trang này, ví dụ: /opt/libreoffice.org

“Procfs” được gắn ở đây, một “FS” ảo, với nhiều thông tin có thể lấy được. Giả sử bạn cần tìm hiểu mô-đun hạt nhân nào được tải, đây sẽ là tệp - /proc/modules hoặc lấy thông tin về bộ xử lý - /proc/cpuinfo

Đây là thư mục chính của siêu người dùng. Thư mục này giống hệt thư mục người dùng và nằm ở thư mục gốc của hệ thống tập tin. Nếu bạn đột nhiên gặp sự cố khi truy cập /home, hãy đăng nhập bằng quyền siêu người dùng,
Bạn luôn có thể giải quyết vấn đề này.

Hệ thống này có các chương trình đặc biệt dành cho các cài đặt và quản trị khác nhau, họ cũng cần phải “sống” ở đâu đó.

Các tham số hệ thống cụ thể, trong hầu hết các trường hợp đều trống.

Thư mục này đã được sử dụng kể từ kernel v_2.6 và “sysfs” được gắn vào nó, cùng với thông tin về kernel, thiết bị và trình điều khiển.

Dưới đây là danh mục các thiết bị khối có sẵn trong hệ thống theo thời gian thực.

Danh sách các bus lõi: eisa, pci, v.v. và như thế.

Danh sách các thiết bị được nhóm theo phân loại: máy in, thiết bị scsi, v.v. và như thế.

Đây là người anh em của thư mục "Temp" trong Windows, để lưu trữ các tập tin tạm thời. Đọc và viết có sẵn cho tất cả người dùng.

Vị trí của các gói phần mềm đã cài đặt, tài liệu, mã kernel, X Window. Có thể truy cập hoàn toàn bằng "root", những thứ khác đều bị cấm ngoại trừ việc đọc. Thư mục có thể được gắn trên mạng và chia sẻ trạng thái cho một số máy tính.

/usr/bin thùng2

Vị trí của các ứng dụng bổ sung cho tất cả các tài khoản.

Môi trường sống của “giải trí”, nói một cách dễ hiểu, là trò chơi.

Các tệp tiêu đề C++.

/usr/lib lib2

Thư viện hệ thống cho các ứng dụng trong /usr.

Lý tưởng nhất là /usr phải có trạng thái "được chia sẻ" và được gắn qua mạng - /usr/local phải chứa các gói ứng dụng trên thiết bị cục bộ. Ví dụ: /usr - ngân sách gia đình, /usr/local - thu nhập cá nhân.

Trong Ubuntu đóng gói, theo quy luật, các gói "có liên quan" được đặt trong /usr, của chính chúng và trong /usr/local, chúng được thu thập từ các nguồn, không liên quan cụ thể đến bất kỳ bản phân phối nào.

Các ứng dụng hệ thống bổ sung

Hệ thống tệp Linux có cấu trúc rõ ràng về các thư mục và tệp. Trong bài viết này chúng ta sẽ xem xét mục đích ngắn gọn của từng thư mục.

Các hệ thống tệp Linux chứa nhiều thư mục, hầu hết trong số đó được xác định bởi FHS (Tiêu chuẩn phân cấp hệ thống tệp).

Tiêu đề của bài viết bao gồm các thuật ngữ “thư mục”, “thư mục” và “thư mục”. Hãy nhìn vào chúng.

Thư mục hoặc thư mục là một đối tượng trong hệ thống tệp giúp đơn giản hóa việc tổ chức tệp.

Thư mục là một thuật ngữ được sử dụng để thể hiện các thư mục trong giao diện người dùng đồ họa.

Vì vậy, tất cả các thuật ngữ này có nghĩa giống nhau. Để thuận tiện, chúng tôi sẽ sử dụng thuật ngữ danh mục trong bài viết này, bởi vì Tôi nghĩ nó là phù hợp nhất (ý kiến ​​cá nhân của tôi).

Cấu trúc chung của hệ thống tệp hệ điều hành Linux

Tùy thuộc vào bản phân phối Linux mà bạn đang sử dụng, một số thư mục được trình bày có thể không tồn tại hoặc ngược lại, các thư mục khác không được trình bày ở đây có thể xuất hiện. Tôi đã cố gắng chỉ thu thập và mô tả những thư mục phổ biến nhất trong hệ điều hành Linux.

/ - thư mục gốc

Thư mục chính, đây là nơi lưu trữ mọi thứ trên hệ điều hành Linux của bạn. Tất cả các phân vùng Linux được lưu trữ dưới dạng thư mục con khác trong thư mục gốc /.

/bin - tệp nhị phân chính (chương trình)

Chứa các chương trình hệ thống nhị phân chính (mô-đun), tiện ích (ls, cp, v.v.) và shell lệnh (bash, v.v.), sẽ cung cấp mức hiệu suất hệ thống tối thiểu ở chế độ một người dùng. Việc đặt các tệp này vào thư mục /bin đảm bảo rằng hệ thống sẽ có những tiện ích quan trọng này ngay cả khi các hệ thống tệp khác không được gắn kết.

/boot - các tập tin để tải hệ điều hành

Hình ảnh nhân Linux và các tệp quản lý khởi động (grub, lilo, v.v.) được lưu trữ.

/cdrom – điểm gắn kết cho đĩa CD

Thư mục này không phải là một phần của tiêu chuẩn FHS; nó có trong Ubuntu và các bản phân phối của nó. Được sử dụng làm nơi gắn ổ đĩa CD-ROM.

/dev - tập tin thiết bị

Trong Linux, tất cả các thiết bị đều được cung cấp dưới dạng tệp cụ thể nằm trong thư mục này. Ví dụ: tệp /dev/sda đại diện cho ổ đĩa SATA. Thư mục này cũng lưu trữ các tập tin thiết bị giả (ảo); những tập tin này không có thiết bị thực tương ứng. Ví dụ: tệp /dev/random tạo các số ngẫu nhiên và tệp /dev/null là một thiết bị đặc biệt để xóa tất cả dữ liệu đầu vào.

/etc - tập tin cấu hình

Chứa các tập tin cấu hình chính của hệ điều hành và các chương trình khác nhau.

/home - thư mục nhà của người dùng

Chứa các thư mục chính của người dùng. Theo hệ tư tưởng UNIX, để đảm bảo tính bảo mật của hệ điều hành, nên lưu trữ dữ liệu người dùng trong thư mục này. Ví dụ: nếu tên người dùng của bạn là mara thì bạn có một thư mục chính nằm ở /home/mara và chứa các tệp cấu hình người dùng cũng như thông tin cá nhân. Mỗi người dùng chỉ có quyền ghi vào thư mục chính của họ.

/lib - thư viện chính

Thư mục này nhằm mục đích lưu trữ các thư viện hệ thống và các thành phần trình biên dịch C cần thiết cho hoạt động của các chương trình từ thư mục /bin và /sbin cũng như toàn bộ hệ điều hành.

/lib64 - Thư viện chính 64-bit

Thư mục này hiện diện chủ yếu trên các hệ thống 64 bit và chứa một tập hợp các thư viện và thành phần trình biên dịch C cho các chương trình 64 bit.

/lost+found - tập tin được khôi phục

Có mặt trên tất cả các hệ điều hành Linux. Nếu hệ thống tệp bị lỗi và hệ thống tệp được kiểm tra thêm (khi tải HĐH), tất cả các tệp bị hỏng được tìm thấy sẽ được đặt trong thư mục lost+found và bạn có thể thử khôi phục chúng.

/media - điểm để gắn tự động

Được sử dụng để tự động gắn các thiết bị CD-ROM, ổ USB, v.v.

/mnt - điểm để gắn thủ công

Được sử dụng để gắn tạm thời theo cách thủ công (sử dụng lệnh mount) các thiết bị khác nhau như CD-ROM, ổ USB, v.v.

/opt - gói phần mềm phụ trợ

Có các thư mục con cho các gói phần mềm bổ sung. Thư mục này được sử dụng rộng rãi bởi phần mềm độc quyền không tuân theo hệ thống phân cấp tệp tiêu chuẩn.

/proc – tập tin kernel và tiến trình

Hệ thống tệp ảo Procfs được gắn trong thư mục này. Nó chứa các tệp đặc biệt cung cấp thông tin về hệ thống và các tiến trình đang chạy. Ví dụ: tệp /proc/cpuinfo lưu trữ thông tin về bộ xử lý.

/root - Thư mục chính của người dùng root

Thư mục chính của người dùng root. Thay vì nằm trong /home/root, nó được đặt trong /root để hệ thống có độ tin cậy cao hơn.

/run – tập tin trạng thái ứng dụng

Là một thư mục khá mới cho phép các ứng dụng lưu trữ các tệp hỗ trợ mà chúng yêu cầu, chẳng hạn như ổ cắm và ID tiến trình, theo cách tiêu chuẩn. Những tệp này không nên được lưu trữ trong thư mục /tmp vì những tệp này có thể bị xóa ở đó.

/sbin - tệp nhị phân (chương trình) để quản trị hệ thống

Thư mục /sbin tương tự như thư mục /bin. Nó chứa các tệp nhị phân quan trọng thường được người dùng chạy khi quản trị hệ thống.

/selinux – Hệ thống tệp ảo SELinux

Một số bản phân phối (Red Hat, Fedora, v.v.) sử dụng gói SELinux (Linux được tăng cường bảo mật) để cung cấp bảo mật, tạo thư mục chứa các tệp /selinux.

/srv – dữ liệu dịch vụ

Thư mục này không có trong tất cả các bản phân phối; nó chứa “dữ liệu cho các dịch vụ do hệ thống cung cấp” (ví dụ: máy chủ Apache có thể lưu trữ các tệp trang web của bạn trong thư mục này). Trong hầu hết các trường hợp, thư mục trống.

/sys - hệ thống tệp ảo sysfs

Thư mục này xuất hiện cùng với việc phát hành kernel phiên bản 2.6 và hệ thống tệp ảo sysfs với thông tin về thiết bị, trình điều khiển, kernel hệ điều hành, v.v. được gắn trong đó.

Mô tả các thư mục con:

/sys/block - chứa thư mục của tất cả các thiết bị khối hiện có trong hệ thống.

/sys/bus - Chứa danh sách các bus được xác định trong nhân Linux (eisa, pci, v.v.).

/sys/class - chứa danh sách các thiết bị được nhóm theo lớp (máy in, thiết bị scsi, v.v.).

/tmp - tập tin tạm thời

Các tập tin tạm thời thường bị xóa khi hệ thống được khởi động lại. Nó tương tự như C:/Windows/Temp trong hệ điều hành Windows. Tất cả người dùng đều có quyền đọc và ghi trên thư mục này.

/usr - tệp nhị phân chỉ đọc của người dùng

Thư mục này chứa các ứng dụng và tệp chỉ được người dùng sử dụng chứ không phải bởi chính hệ thống.

Mô tả các thư mục con:

/usr/bin - tập tin thực thi cho tất cả các tài khoản.

/usr/games - thư mục chứa các trò chơi máy tính trên hệ thống.

/usr/include - các tệp tiêu đề dành cho việc biên dịch chương trình C.

/usr/lib - thư viện hệ thống và các tệp phụ trợ nằm trong thư mục /usr.

/usr/local - Các ứng dụng được biên dịch cục bộ được cài đặt trong thư mục này, cho phép chúng không trộn lẫn với phần còn lại của hệ thống.

/usr/local/bin - các tệp thực thi cục bộ.

/usr/local/etc - các lệnh hệ thống và tệp cấu hình cục bộ.

/usr/local/lib - các tệp phụ trợ cục bộ.

/usr/local/sbin - lệnh hệ thống dịch vụ cục bộ.

/usr/local/src - mã nguồn cho các chương trình trong thư mục /usr/local/*

/usr/man - trang tài liệu tương tác.

/usr/sbin - các lệnh quản trị hệ thống ít quan trọng hơn.

/usr/share - dữ liệu chung của các chương trình đã cài đặt (chỉ đọc).

/usr/share/man - trang tài liệu tương tác.

/usr/share/icons - biểu tượng hệ thống.

/usr/share/doc - tài liệu tham khảo.

/usr/src - mã nguồn của các gói phần mềm không cục bộ (ví dụ: mã nguồn kernel được đặt ở đây).

/var - thư mục chứa dữ liệu thay đổi thường xuyên

Thư mục này chứa nhật ký hệ điều hành, tệp nhật ký hệ thống, tệp bộ đệm, v.v.

/var/adm - tệp nhật ký, bản ghi cài đặt hệ thống, thành phần quản trị.

/var/cache - tất cả bộ đệm cho các chương trình khác nhau.

/var/games - tập tin chứa thành tích trò chơi.

/var/log - tệp nhật ký hệ thống (tệp nhật ký).

/var/lock - có các tệp khóa cho biết một số tài nguyên đang bận.

/var/lib - được sửa đổi bởi các chương trình trong quá trình hoạt động (ví dụ: cơ sở dữ liệu, siêu dữ liệu, v.v.).

/var/spool - thư mục bộ đệm (ví dụ: hàng đợi in, email chưa đọc hoặc chưa gửi, tác vụ cron, v.v.).

/var/tmp - thư mục lưu trữ tạm thời các tập tin.

/var/www - Các trang web dành cho máy chủ Apache được lưu trữ.

Bạn có thể xem cấu trúc hệ thống tệp bằng lệnh ls -la. Dưới đây là ví dụ về đầu ra lệnh cho bản phân phối OpenSUSE.

# ls -la tổng 260 drwxr-xr-x 24 gốc gốc 4096 30 tháng 8 năm 2013 . drwxr-xr-x 24 gốc gốc 4096 30 tháng 8 năm 2013 .. drwxr-xr-x 2 gốc gốc 4096 8 tháng 8 năm 2012 .config -rw-r--r-- 1 gốc 149519 30 tháng 8 năm 2013 .readahead drwxr-xr- x 2 root root 4096 8 tháng 8 năm 2012 bin drwxr-xr-x 3 root root 4096 8 tháng 8 năm 2012 boot drwxr-xr-x 18 root root 3340 16 tháng 5 16:29 dev drwxr-xr-x 122 root root 12288 27 tháng 6 năm 2013 v.v. drwxr-xr-x 4 gốc gốc 4096 Ngày 21 tháng 9 năm 2012 nhà drwxr-xr-x 16 gốc gốc 4096 Ngày 23 tháng 8 năm 2012 lib drwxr-xr-x 10 gốc gốc 12288 Ngày 23 tháng 8 năm 2012 lib64 drwx------ 2 gốc gốc 16384 Ngày 8 tháng 8 năm 2012 bị mất+tìm thấy drwxr-xr-x 2 gốc gốc 40 Ngày 11 tháng 12 năm 2013 phương tiện truyền thông drwxr-xr-x 2 gốc gốc 4096 Ngày 25 tháng 10 năm 2011 mnt drwxr-xr-x 3 gốc gốc 4096 Ngày 23 tháng 8 năm 2012 opt dr-xr-xr -x 194 root root 0 11/12/2013 proc drwx------ 31 root root 4096 10/6 14:38 root drwxr-xr-x 23 root root 780 9/7 17:39 chạy drwxr-xr-x 3 root root 12288 Ngày 8 tháng 8 năm 2012 sbin drwxr-xr-x 2 gốc gốc 4096 Ngày 25 tháng 10 năm 2011 selinux drwxr-xr-x 6 1004 người dùng 4096 Ngày 21 tháng 9 năm 2012 srv drwxr-xr-x 12 gốc gốc 0 Ngày 11 tháng 12 năm 2013 sys drwxrwxrwt 95 gốc gốc 4096 tháng 7 9 17:39 tmp drwxr-xr-x 13 gốc gốc 4096 Ngày 10 tháng 11 năm 2011 usr drwxr-xr-x 16 gốc gốc 4096 Ngày 9 tháng 8 năm 2012 var

Đó là tất cả. Việc xem xét mục đích của các thư mục chính được tìm thấy trong hệ thống tệp Linux đã hoàn tất.