4 Làm quen với hệ thống tập tin ext3fs
4.1 Cấu trúc thư mục của Linux
Thư mục Công dụng
/bin Thư mục này gồm chủ yếu các chương trình, phần lớn trong số chúng cần cho hệ thống trong thời gian khởi động (hoặc trong chế độ một người dùng khi bảo trì hệ thống). Ở đây có lưu rất nhiều những câu lệnh thường dùng của Linux.
/boot Gồm các tập tin cố định cần cho khởi động hệ thống, trong đó có nhân (kernel). Tập tin trong thư mục này chỉ cần trong thời gian khởi động8.
/dev Thư mục các tập tin đặc biệt hoặc các tập tin thiết bị phần cứng. Chúng ta sẽ nói đến những tập tin này ở ngay sau trong một phần riêng. Bạn đọc có thể xem qua man mknod (mkn- ode(1)).
/etc Thư mục này và các thư mục con của nó lưu phần lớn những dữ liệu cần cho quá trình khởi động ban đầu của hệ thống và lưu những tập tin cấu hình chính. Ví dụ, trong/etccó tập tin
inittab xác định cấu hình khởi động, và tập tin người dùng
passwd. Một phần các tập tin cấu hình có thể nằm trong các thư mục con của/usr. Thư mục/etckhông được lưu các tập tin chương trình (cần đặt chúng trong/binhoặc/sbin. Dưới đây chúng ta sẽ xem xét công dụng của một vài(!) thư mục con của thư mục/etc.
/etc/rc.d Thư mục này lưu những tập tin sử dụng trong quá trình khởi động hệ thống. Chúng ta sẽ đề cập chi tiết về những tập tin này và quá trình khởi động nói riêng trong một vài chương sắp tới.
/etc/skel Khi tạo người dùng mới, thì những tập tin trong thư mục này sẽ được sao chép vào thư mục cá nhân của người dùng đó. /etc/sysconfig Thư mục lưu một vài (không phải tất cả) tập tin cấu hình hệ
thống.
/etc/X11 Thư mục dành cho các tập tin cấu hình của hệ thống X11 (ví dụ, xorg.conf).
/home Thông thường trong thư mục này là các thư mục cá nhân của người dùng (trừ root).
4.3 Công dụng của các thư mục chính 67
Thư mục Công dụng
/lib Thư mục này lưu các thư viện chia sẻ của các hàm mà trình biên dịch C và các môđun (các driver thiết bị) cần. Thậm chí nếu trên hệ thống không có trình biên dịch C nào, thì các thư viện chia sẻ vẫn cần thiết, vì chúng được nhiều chương trình sử dụng. Những thư viện này chỉ nạp vào bộ nhớ khi có nhu cầu thực hiện hàm nào đó, như vậy cho phép giảm kích thước mã chương trình nằm trong bộ nhớ. Trong trường hợp ngược lại thì cùng một mã lặp lại nhiều lần trong các chương trình khác nhau.
/lost+found Thư mục này sử dụng để phục hồi hệ thống tập tin bằng lệnh
fsck. Nếu fsck tìm ra tập tin mà không xác định được thư mục mẹ thì nó sẽ đưa tập tin đó vào thư mục /lost+found. Vì thư mục mẹ bị mất, nên tập tin sẽ nhận được tên trùng với chỉ số inode của nó.
/mnt Đây là điểm gắn (mount) những hệ thống tập tin gắn tạm thời. Nếu trên máy tính có đồng thời Linux và Windows (DOS) thì thư mục này thường dùng để gắn các hệ thống tập tin FAT. Nếu bạn thường gắn một vài đĩa lưu động như đĩa mềm, CD, DVD, đĩa cứng ngoài, flash,v.v. . . thì có thể tạo trong thư mục này các thư mục con cho từng đĩa lưu.
/tmp Thư mục dành cho các tập tin tạm thời. Ở bất kỳ thời điểm này người dùng root cũng có thể xóa tập tin khỏi thư mục này mà không làm ảnh hưởng lớn đến người dùng khác. Tuy nhiên không nên xóa những tập tin trong thư mục này, trừ khi khi bạn biết rằng tập tin hoặc nhóm tập tin nào đó đang gây ảnh hưởng đến công việc của hệ thống. Hệ thống sẽ tự động dọn dẹp thư mục này theo định kỳ, vì thế không nên lưu ở đây những tập tin mà bạn có thể sẽ cần đến.
/root Đây là thư mục cá nhân của người dùng cao cấp root. Hãy chú ý là thư mục này không nằm cùng chỗ với thư mục cá nhân của những người dùng khác (trong/home).
/sbin Vì thư mục /bin chủ yếu lưu các tập tin thực thi (chương trình và tiện ích của HĐH) sử dụng trong quá trình khởi động và do nhà quản trị chạy. Trong tiêu chuẩn FHS có nói rằng cần đặc trong thư mục này những tập tin thực thi sẽ sử dụng sau khi gắn thành công hệ thống tập tin/usr. Ít nhất trong thư mục này phải có init, mkswap, swapon, swapoff, halt, reboot, shutdown, fdisk, fsck.*, mkfs.*, arp, ifconfig, route.
/proc Đây là điểm gắn hệ thống tập tin proc cung cấp thông tin về các tiến trình đang chạy, về nhân, về các thiết bị tính, v.v. . . Đây là hệ thống tập tin ảo. Chi tiết bạn có thể đọc trong
man 5 proc. Các tập tin đặc biệt của thư mục này sử dụng để nhận và gửi dữ liệu đến nhân.
Thư mục Công dụng
/usr Thư mục này rất lớn và cấu trúc của nó nhìn chung lặp lại cấu trúc của thư mục gốc. Trong các thư mục con của /usrlà tất cả các ứng dụng chính. Theo tiêu chuẩn FHS thì nên dành cho thư mục này một phân vùng riêng hoặc đặt hoàn toàn trên đĩa sử dụng chung trong mạng. Phân vùng hoặc đĩa đó thường gắn chỉ đọc và trên đĩa (phân vùng) là các tập tin cấu hình cũng như tập tin thực thi dùng chung, các tập tin tài liệu, các tiện ích hệ thống và cả các tập tin thêm vào (tập tin dạng include). /usr/bin Các chương trình (tiện ích và ứng dụng) thường được người dùng bình thường sử dụng./usr/bin/X11là nơi thường dùng để lưu các chương trình chạy trên X Window. Và đây cũng thường là liên kết đến /usr/X11R6/bin.
/usr/include Thư mục con này lưu mã nguồn của các thư viện tiêu chuẩn của ngôn ngữ C. Người dùng cần có ít nhất là quyền đọc đối với thư mục này. Dù trong trường hợp nào cũng đừng sửa những tập tin trong thư mục này, vì chúng đã được các nhà phát triển hệ thống kiểm duyệt kỹ càng (không lẽ bạn biết về hệ thống tốt hơn các nhà phát triển).
/usr/lib Trong thư mục này là các thư viện object của các chương trình con, các thư viện động (dynamic library), một số chương trình không thể gọi trực tiếp. Các hệ thống phức tạp (ví dụ Debian Linux) có thể có các thư mục con của mình trong thư mục này. /usr/lib/X11 – nơi thường dùng để đặt các tập tin có liên quan đến X Window và các tập tin cấu hình của hệ thống X Window. Trên Linux đó thường là liên kết mềm đến thư mục
/usr/X11R6/lib/X11.
/usr/local Ở đây thường đặt các chương trình và các thư mục con (nội bộ) chỉ dành cho máy tính này, bao gồm:
/usr/local/bin. Ở đây thường lưu những chương trình ứng dụng.
/usr/local/doc– các tài liệu đi kèm với chương trình ứng dụng.
/usr/local/lib– thư viện và tập tin của các chương trình và hệ thống nội bộ.
/usr/local/man– các trang trợ giúp man.
/usr/local/sbin – các chương trình dành cho nhà quản trị.
/usr/local/src– mã nguồn của các chương trình.
/usr/sbin Thư mục này gồm các chương trình thực thi dành cho nhà quản trị và không sử dụng trong thời gian khởi động.
4.3 Công dụng của các thư mục chính 69
Thư mục Công dụng
/usr/share Thư mục này dùng cho tất cả các tập tin dữ liệu dùng chung và có quyền truy cập là chỉ đọc. Thường dùng để chia sẻ giữa các kiến trúc khác nhau của HĐH, ví dụ i386, Alpha, và PPC có thể dùng chung một thư mục /usr/share nằm trên một phân vùng hoặc đĩa chia sẻ trên mạng. Cần chú ý là thư mục này không dùng để chia sẻ giữa các HĐH khác nhau hoặc giữa các phiên bản khác nhau của cùng một HĐH. Tiêu chuẩn FHS khuyên dùng thư mục con cho mỗi chương trình. Những thư mục sau hoặc liên kết mềm sau phải có trong /usr/share:
man (các trang trợ giúp man), misc (những giữ liệu tùy theo kiến trúc khác nhau). Chúng ta xem xét một vài thư mục con của thư mục này:
/usr/share/dict – các danh sách từ (word list) của tiếng Anh dùng cho các chương trình kiểm tra chính tả như
ispell.
/usr/share/man– các trang trợ giúp man. Mỗi phần của man nằm trong một thư mục con riêng trong thư mục này.
/usr/share/misc (đã nói ở trên).
/usr/src Mã nguồn của các thành phần khác nhau của Linux: nhân, ứng dụng. . .
/usr/tmp Một nơi nữa để lưu các tập tin tạm thời. Thông thường đây là liên kết mềm đến/var/tmp.
/usr/X11R6 Các tập tin thuộc về hệ thống X Window.
/usr/X11R6/bin – các chương trình ứng dụng của hệ thống này.
/usr/X11R6/lib– các tập tin và thư viện có liên quan đến X-Window.
/var Trong thư mục này là các tập tin lưu các dữ liệu biến đổi (variable). Những dữ liệu này xác định cấu hình của một số chương trình trong lần chạy sau hoặc là những thông tin lưu tạm thời sẽ sử dụng sau. Dung lượng thông tin trong thư mục này có thể thay đổi trong một khoảng lớn, vì thư mục giữ các tập tin như bản ghi (log), spool, khóa locking, các tập tin tạm thời, v.v. . .
/var/adm Lưu các thông tin về tài khoản và thông tin chuẩn đoán dành cho nhà quản trị.
/var/lock Các tập tin điều khiển hệ thống dùng để dự trữ tài nguyên. /var/log Các tập tin bản ghi (log).
Thư mục Công dụng
/var/run Các tập tin biến đổi trong thời gian thực hiện các chương trình khác nhau. Chúng lưu thông tin về số tiến trình (PID) và ghi thông tin hiện ghời (utmp). Tập tin trong thư mục này thường được dọn sạch trong thời gian khởi động Linux.
/var/spool Tập tin được đặt vào hàng đợt của các chương trình khác nhau, ví dụ:
/var/spool/at– các công việc màatđã chạy.
/var/spool/cron– tập tin của hệ thống Verb+cron+.
/var/spool/lpd — tập tin trong hàng đợi in.
/var/spool/mail– tập tin thùng thư của người dùng.
/var/spool/uucp– tập tin của hệ thốnguucp. /var/tmp Các tập tin tạm thời.
4.4 Dạng tập tin
Trong các phần trước chúng ta đã xem xét hai dạng tập tin đó là tập tin thông thường và các thư mục. Những trên Linux còn có một vài dạng tập tin nữa. Chúng ta sẽ làm quen với chúng trong phần này.
Như đã nói, đối với hệ điều hành thì tập tin chỉ là một chuỗi các byte liên tục. Nhờ vậy có thể dùng khái niệm tập tin cho các thiết bị và các đối tượng khác. Điều này đơn giản hoá sự tổ chức và trao đổi các dữ liệu, vì có thể thực hiện ghi dữ liệu vào tập tin, chuyển dữ liệu lên các thiết bị và trao đổi dữ liệu giữa các tiến trình bằng cách tương tự như nhau. Trong tất cả các trường hợp này sử dụng cùng một phương pháp dựa trên ý tưởng chuỗi các byte. Do đó ngoài các tập tin thông thường và thư mục, những thành phần sau cũng được Linux coi là tập tin:
các tập tin thiết bị
các ống (kênh) có tên (named pipe)
các socket (tổ với nghĩa như tổ chim)
các liên kết mềm (symlinks).
4.4.1 Các tập tin thiết bị
Như đã nói, đối với Linux thì tất cả các thiết bị kết nối vào máy tính (ổ cứng, ổ tháo rời, terminal, máy in, máy scan, môđem, bàn phím, chuột, v.v. . . ) đều là các tập tin. Ví dụ, nếu cần đưa ra màn hình terminal thứ nhất thông tin nào đó, thì hệ thống thực hiện thao tác ghi vào tập tin/dev/tty1.
Có hai dạng thiết bị: ký tự (hay còn gọi là các thiết bị trao đổi theo byte) và
4.4 Dạng tập tin 71
thông tin vào các thiết bị. Các thiết bị ký tự trao đổi thông tin theo từng ký tự (theo từng byte) trong chế độ chuỗi các byte. Ví dụ thiết bị dạng này là terminal. Còn thông tin được đọc và ghi vào các thiết bị khối theo các khối. Ví dụ các ổ cứng. Không thể đọc từ đĩa cứng và ghi lên đó từng byte, trao đổi thông tin với đĩa chỉ có thể theo từng khối.
Trao đổi dữ liệu với các thiết bị trên Linux do các driver thiết bị đảm nhiệm. Những driver này hoặc nằm trong nhân hoặc nằm riêng ở dạng môđun và có thể gắn vào nhân sau. Để trao đổi với các phần khác của hệ điều hành mỗi driver tạo ra một giao diện liên lạc có vẻ ngoài giống như tập tin. Phần lớn những tập tin như vậy đã được tạo sẵn từ trước và nằm trong thư mục dev. Nếu nhìn vào thư mục/dev(tức là chuyển vào thư mục đó bằng lệnhcdrồi chạy ls), thì bạn sẽ thấy một lượng khổng lồ những tập tin thiết bị. Bảng4.2cho biết những tập tin thường dùng nhất.