[Series] - Linux System Administrator's guide. [Phần 2]


Chương 2. Tổng quan về cây thư mục


Chương này mô tả các phần quan trọng của cây thư mục trong Linux , dựa trên Tiêu chuẩn phân cấp cây thư mục - FileSystem Hierachy Standard - FHS. Nó sẽ giúp bạn có cái nhìn tổng quát về cây thư mục bằng cách chia cây thư mục thành các phần nhỏ hơn , và đồng thời cũng cho bạn thấy đuợc động cơ tại sao lại có sự chia nhỏ này. Không phải bản phân phối Linux nào cũng tuân theo FHS một cách mù quáng, nhưng những mô tả dưới đây sẽ đủ để bạn có một cái nhìn tổng quát chung nhất.


2.1. Sơ qua một chút


Bài viết này dựa trên chuẩn phân cấp cây thư mục FHS , phiên bản 2.1. FHS cố gắng đưa ra một tiêu chuẩn về việc tổ chức các thư mục trong Linux. Việc đưa ra một chuẩn thế này có cái lợi của nó, đó là các phần mềm có thể dễ dàng đuợc viết và chạy trên hầu hết các bản phân phối khác nhau , và việc quản trị hệ thống cũng dễ dàng hơn vì mọi thứ đều đựoc đặt ở chỗ đã đuợc quy định trong tiêu chuẩn. Không có ai ép buộc bạn phải tuân theo FHS , nhưng nó đã đuợc hỗ trợ bởi rất , rất nhiều các bản phân phối LInux khác nhau. Với lý do nào đi nữa, việc bạn phá vỡ tiêu chuẩn này cũng không phải là một ý hay. FHS kết hợp giữa UNIX truyền thống và các xu hướng hiện đại, khiến cho các hệ thống Linux trở nên dễ dàng và thân quen với những người đã có kinh nghiệm với Unix và nguợc lại.

Chương này không chi tiết về FHS. Bạn cũng nên đọc đầy đủ documentation của FHS để hiểu rõ hơn về nó. Chúng ta cũng sẽ không đi vào chi tiết từng file, từng thư mục trong cây thư mục , như vậy quá rườm rà. Chúng ta sẽ nhìn toàn cảnh hệ thống từ một quan điểm khác. Các thông tin mở rộng về mỗi file có thể sẽ đuợc liệt kê ở đâu đó trong bài viết này.

Cây thư mục đuợc chia nhỏ thành nhiều phần khác nhau , mỗi phần có thể ở trên một đĩa riêng, hoặc nằm trên một phân vùng riêng nhằm thích nghi với sự hạn chế của dung lượng đĩa cũng như cho phép các thao tác quản trị và sao lưu dễ dàng hơn. Các phần quan trọng bao gồm root ("/"), /var , /usr , home ; mỗi phần lại có một mục đích riêng của nó. Cây thư mục đuợc thiết kế để sao cho chúng có thể họat động tốt trong một mạng lưới các máy Linux , từ đó bạn có thể chia sẻ một vài phần của các hệ thống tệp tin qua một thiết bị read-only như đĩa CD hoặc qua mạng TCP/IP với Network FileSystem. Hình dưới đây mô tả cấu trúc của một cây thư mục trong Linux, các đường đứt cho thấy giới hạn của các filesystem.


  • root filesystem đuợc chỉ định riêng cho mỗi máy ( nó thường đuợc lưu trữ ở một đĩa cục bộ , mặc dù cũng có thể là RAMdisk hoặc ổ đĩa mạng). Nó chứa các file cần thiết cho quá trình khởi động hệ thống, và các chương trình giúp biến chính nó thành một nơi mà các filesystem khác có thể đuợc mount vào. Nội dung của root filesystem thường đủ dùng khi hệ thống đang ở single user mode. Nó cũng chứa các công cụ giúp sửa chữa các hệ thống hỏng, sao lưu và khôi phục các file bị mất.
  • /usr chứa tất cả các lệnh, các thư viện, các manual, và các file dữ liệu bất biến cần thiết cho hoạt động bình thường của hệ thống. Không một file nào trong /usr đuợc chỉ định cho một máy cụ thể , và theo quy ước trong FHS thì cũng không một ai đuợc thay đổi nội dung của thư mục này. Điều này cho phép /usr có thể đuợc chia sẻ qua mạng , sẽ giúp tiết kiệm không gian trên đĩa cục bộ bởi vì dung lượng của thư mục này đôi khi lên tới hàng trăm Megabytes, có khi lên tới vài Gigabytes. Việc chia sẻ /usr qua mạng cũng khiến cho người quản trị dễ thở hơn bởi vì chỉ cần /usr trên máy chủ thay đổi là mọi client cũng đuợc cập nhật theo, người quản trị sẽ không phải tiến hành thao tác cập nhật trên từng máy đơn lẻ. Thậm chí nếu /usr nằm trên đĩa cục bộ, nó cũng có thể đuợc mount dưới dạng một filesystem chỉ đọc (readonly) , làm giảm khả năng khiến cho hệ thống bị crash hoặc nội dung của /usr bị "vấy bẩn".
  • /var chứa các dữ liệu khả biến ( có thể thay đổi đuợc) , kiểu như các dịch vụ mang tính tuần hoàn, cuốn chiếu như mails, tin tức, máy in ...v...v.. hoặc các log files, các trang manual đã đuợc định dạng, và các file tạm thời. Trước đây mọi thứ trong /var đều nằm trong /usr/var , nhưng như vậy làm mất đi tính bất biến của /usr nên các dữ liệu khả biến đã đuợc tách thành một filesystem ngang hàng với /usr.
  • /home lại chứa các thông tin của những người dùng trong cùng hệ thống, ví dụ: tất cả các thông tin thực tế như profile chẳng hạn. Việc chia độc lập thư mục home ra khỏi cây thư mục khiến cho việc sao lưu dễ dàng hơn. Bởi vì nhiều các phần khác ngoài home không cần phải đuợc sao lưu hoặc ít nhất là dữ liệu của chúng rất hiếm khi bị thay đổi. Một thư mục home lớn có thể tiếp tục đuợc chia nhỏ tùy vào các hệ thống hiện hành , thường các phần con của /home sẽ mang một tên có ý nghĩa nào đó như tên user chẳng hạn. Ví dụ: /home/studients , /home/tranbadat.
Mặc dù các phần trên cũng đuợc gọi là các filesystem - hệ thống tệp tin, nhưng như thế không có nghĩa là chúng bắt buộc phải nằm trên các phân vùng ổ đĩa khác nhau. Thậm chí chúng có thể nằm trong một phân vùng duy nhất nếu như hệ thống hiện hành là một hệ thống nhỏ đơn người dùng , hoặc chỉ vì người quản trị thích thế. Cây thư mục cũng đuợc chia thành các phần riêng biệt với những cách khác nhau, phụ thuộc vào dung lượng đĩa lớn như thế nào, hoặc từng phân vùng với kích thước khác nhau sẽ đuợc dùng vào mục đích gì.

Hệ thống tệp tin trong Unix nhóm các file theo mục đích sử dụng, ví dụ tất cả các lệnh vào một chỗ, các file dữ liệu ở một chỗ khác. Một phương pháp khác đó là nhóm các file dựa theo vào phần mềm mà các file đó thuộc về, ví dụ tất cả các file của Emacs sẽ ở một chỗ, của TeX sẽ ở một chỗ khác. Cách sắp xếp file thứ hai đôi khi gây khó khắn trong việc chia sẻ file , bởi vì trong một thư mục chứa các file liên quan tới một phần mềm sẽ chứa cả các dữ liệu bất biến và khả biến. Đôi khi đây cũng là một cơn ác mộng trong việc tìm kiếm file , giả sử như muốn tìm hướng dẫn sử dụng cho một chương trình nào đó , bạn sẽ phải lướt qua một số lượng khổng lồ các thư mục của các chương trình khác nhau chỉ để tìm một file hướng dẫn cỏn con. Việc này đã có thể dễ hơn nếu như tất cả các file hướng dẫn sử dụng đều nằm trong cùng một chỗ.

2.2. Thư mục root - "/"


Thường thì thư mục này rất bé vì nó chứa những file rất quan trọng , và vì một thư mục nhỏ ít bị thay đổi cũng sẽ làm tăng khả năng chống hư hại hệ thống. Một thư mục root bị hỏng, đồng nghĩa với việc hệ thống sẽ không thể boot đuợc ngoại trừ một vài phương pháp đặc biệt như boot từ ổ đĩa mềm. Chắc bạn bạn sẽ không muốn nó bị hỏng đâu.
Thư mục root thường không chứa bất kỳ file nào, ngoại trừ trên các hệ thống cũ, thì file boot chuẩn của Linux (/vmliuz) đuợc giữ ở đây. Ngày nay rất nhiều các bản phân phối đã đưa file boot chuẩn vào trong thư mục /boot. Dưới đây là danh sách các thư mục con của root.

  • /bin: Các lệnh sử dụng trong quá trình khởi động, có thể đuợc dùng bởi người dùng sau khi khởi động xong.
  • /sbin: Giống /bin, nhưng các câu lệnh không hướng tới người dùng phổ thông, mặc dù họ có thể dùng chúng trong các trường hợp cần thiết hoặc đuợc sự cho phép. /sbin thường không phải một đường dẫn mặc định của những người dùng bình thường, nhưng là đường dẫn mặc định của người dùng root.
  • /etc: Các file cấu hình đuợc chỉ định riêng cho hệ thống.
  • /root: Thư mục home của người dùng root. Những người dùng khác thường không có khả năng truy xuất vào các file này.
  • /lib: Các shared library cần thiết bởi các chương trình nằm trong thư "/".
  • lib/modules: Loadable kernel modules. Đặc biệt là những module cần thiết trong việc khởi động lại hệ thống sau khi khôi phục hệ thống từ tai nạn( ví dụ : network driverfilesystem driver).
  • /dev: Các file thiết bị. Đây là các file đặc biệt giúp người dùng tương tác với các thiết bị khác nhau trên hệ thống.
  • /tmp: Các file tạm thời, các chương trình thường lưu các dữ liệu tạm thời của chúng trong các file và đặt nó ở trong đây.
  • /boot: Các tệp đuợc sử dụng bởi bootloader (LILO hoặc GRUB). Linux kernel thường đuợc giữ ở đây thay vì "/". Nếu có nhiều các file kernel, thì đúng là ý hay khi giữ chúng trong một thư mục riêng biệt. Một lý do khác đó chính là để đảm bảo rằng các file kernel đều nằm trên 1024 Cylinder đầu tiên trên ổ đĩa IDE. Giới hạn 1024 này không còn đúng trên hầu hết các thường hợp. Với các BIOS hiện đại cùng với các phiên bản mới của LILO , giới hạn 1024 này có thể vượt qua bằng cách sử dụng Logical Block Addressing - LBA.
  • /mnt: Các điểm kết nối (mount point) cho các kết nối tạm thời đuợc tạo ra bởi người quản trị hệ thống. Các chương trình không nhất thiết phải mount các filesystem mà chúng thấy vào /mnt một cách máy móc. /mnt cũng đuợc chia ra thành nhiều các thư mục con, ví dụ /mnt/dosa có thể là một đĩa mềm sử dụng định dạng MS-DOS.
  • /proc , /usr, /var, /home: Các điểm kết nối của các filesystem khác nhau. Mặc dù /proc không thực sự tồn tại, nó vẫn sẽ đuợc đề cập. Chúng ta sẽ nói tới nó ở các chương sau.
2.3. Thư mục /etc

Thư mục này chứa rất nhiều file. Một vài trong số chúng sẽ đuợc mô tả ngay dưới đây. Với các file khác , bạn nên xác định xem chúng thuộc về phần mềm nào và đọc manual của phần mềm đó để biết đuợc file đó có công dụng gì. Nhiều file cấu hình mạng cũng đuợc nằm trong /etc:

  • /etc/rc hoặc /etc/rc.d hoặc /etc/rc?.d: Các đoạn kịch bản hoặc các thư mục chứa các đoạn kịch bản sẽ được thực khi tại lúc khởi động hoặc khi thay đổi run level.
  • /etc/passwd: Cơ sở dữ liệu về người dùng , các fields bao gồm user name , tên thực, thư mục home, và các thông tin khác của các user khác.
  • /etc/shadow: Một file đuợc mật mã hoá , chứa thông tin về mật khẩu người dùng.
  • /etc/fdprm: Bảng tham số đĩa mềm. Nó mô tả sự khác nhau giữa các định dạng đĩa mềm khác nhau. File này đuợc sử dụng bởi chương trình setfdprm.
  • /etc/fstab: Liệt kê các filesystem đuợc tự động mount tại lúc khởi động bởi câu lệnh mount -a (đuợc chứa trong các đoạn kịch bản nằm tại /etc/rc hoặc các file khởi động tương đương). Trong Linux , file này cũng chứa thông tin về các vùng swap đã đuợc tự động sử dụng bởi câu lệnh swapon -a.
  • /etc/group: Tương đương với /etc/passwd nhưng nó lại chứa thông tin về các group.
  • /etc/inittab: File cấu hình cho dịch vụ init.
  • /etc/issue: File đuợc xuất ra bởi getty trước khi dấu nhắc lệnh đăng nhập xuất hiện. Thường nó sẽ chứa một đoạn mô tả ngắn hoặc một lời chào mừng người dùng đến với hệ thống. Nội dung của file đuợc quản lý bởi người quản trị.
  • /etc/magic: File cấu hình cho lệnh file. Nó chứa thông tin mô tả về các định dạng file khác nhau, và dựa vào các mô tả đó , lệnh file có thể đoán đuợc một file đầu vào có định dạng là gì.
  • /etc/motd: The messsage of the day , đây là một thông điệp đuợc xuất ra sau mỗi phiên đăng nhập thành công. Nội dung của nó đuợc quản lý bởi người quản trị.
  • /etc/mtab: Danh sách các filesystem đang đuợc mount. Lúc đầu đuợc thiết đặt bởi các đoạn script khởi động , và đuợc tự động cập nhật bởi lệnh mount. Đuợc sử dụng khi một tác vụ yêu cầu một danh sách các mounted filesystems , lệnh df chẳng hạn.
  • /etc/login.defs: FIle cấu hình cho lệnh login.
  • /etc/printcap: Tương tự với /etc/termcap, nhưng file này đuợc sử dụng cho máy in. Nó cũng sử dụng một cú pháp khác với /etc/termcap.
  • /etc/profile, /etc/bash.rc, /etc/csh.cshrc: Các file đuợc thực thi tại thời điểm login hoặc khởi động của các chương trình như Bourne , BASH hoặc C shells. Nó cho phép người quản trị hệ thống thiết đặt các giá trị mặc định để mọi user trên hệ thống có thể sử dụng. Những người dùng có thể cũng có một bản copy riêng biệt của file này trong thư mục home của họ nhằm mục đích cá nhân hóa môi trường sử dụng.
  • /etc/securetty: Xác định các terminal an toàn , ví dụ các termianl mà cho phép root đăng nhập qua nó. Thông thường chỉ có các virtual console (các teletype tty1 , tty2 .v...v...) mới đuợc liệt kê trong file này. Vậy nên thường thì sẽ bất khả thi hoặc ít nhất là khó khăn để có đuợc quyền root tại một hệ thống đã bị tách ra trên một mạng hoặc một modem. Bạn đừng cho phép đăng nhập dưới quyền root qua mạng. Người ta thường thích đăng nhập dưới tư cách một người dùng bình thường rồi sử dụng su hoặc sudo để đạt đựoc quyền root hơn.
  • /etc/shells: Liệt kê danh sách các shell đáng tin cậy. Lệnh chsh chỉ cho phép người dùng thay đổi login shell của họ thành một trong những shell đuợc liệt kê ở đây. ftpd , một chương trình máy chủ FTP , sẽ kiểm tra xem các shell của người dùng có đuợc liệt kệ trong file này không, Nếu không , nó không cho phép người dùng đăng nhập từ các shell không tin cậy.
  • /etc/termcap: Cơ sở dữ liệu chứa thông tin về năng lực xử lý của các terminal. Nó mô tả các escape sequence khác nhau sẽ điều khiển terminal như thế nào. Các chương trình đuợc viết ra , thay vì trực tiếp xuất ra một escape sequence chỉ chạy trên một vài nhánh terminal nhất định, chúng sẽ nhìn vào file này để xem các escape sequence đó đại diện cho công việc gì. Như một hệ quả , các chương trinh đều chạy rất ngon lành trên nhiều loại terminal khác nhau.
2.4. Thư mục /dev

Thư mục /dev/ chứa các device node cho mọi thiết bị trên hệ thống. Các device node này là các file đuợc tạo ra trong quá trình cài đặt , hoặc cũng có thể đuợc tạo ra bởi đoạn kịch bản /dev/MAKEDEV . /dev/MAKEDEV.local là một đoạn kịch bản cục bộ đuợc viết bởi người quản trị hệ thống nhằm tạo ra các device node hoặc các liên kết tới các driver chưa đuợc chuẩn hóa.


Linux sử dụng cặp số <major>:<minor> để định danh một device node , và thứ duy nhất quan trọng với các device node cũng chính là cặp số này. major đuợc dùng để xác định một device node đại diện cho một thiêt bị thuộc lớp nào (ổ cứng , joystick , đĩa mềm ..v....v...) , minor đuợc dùng để xác định một thiết bị cụ thể thuộc lớp <major>.
Các device node hoặc device files đuợc coi như những cầu nối tình yêu giữa các chương trình và các driver phần cứng.

Ngoài ra bạn cũng cần lưu ý hai khái niệm sau:

  • block device: Các thiết bị cho phép xử lý thông tin theo từng khối các byte tại một thời điểm , ví dụ :ổ cứng , RAM , ..v...v..
  • character device: Các thiết bị chỉ cho phép xử lý từng byte một tại một thời điểm (soundcard , graphics card .v...v..)
Các chương trình có thể truy xuất vào phần cứng hệ thống chỉ bằng các thao tác đọc/ghi nội dung các device node tuơng ứng.

Danh sách dưới đây có thể không đầy đủ như bạn mong muốn. Nếu bạn cảm thấy vẫn có những device node cần đuợc liệt kê ở đây, hãy comment , tôi sẽ cố gắng bao gồm nó vào trong bài viết ở những lần trình sửa tiếp theo.

  • /dev/dsp: Bộ sử lý tín hiệu số. Cơ bản thì nó sẽ khuôn mẫu hóa việc trao đổi giữa các chương trình tạo ra âm thanh, và card âm thanh của hệ thống. Nó là một character device , major 14 , minor 3.
  • /dev/fd0: Ổ đĩa mềm đầu tiên, nếu bạn có một vài ổ đĩa mềm khác, chúng sẽ đuợc đánh số tuần tự. Là một character device , major 2 , minor 0.
  • /dev/fb0: Framebuffer đầu tiên, Framebuffer là một tầng trừu tượng nằm giữa các phần mềm và phần cứng đồ họa. Điều này có nghĩa là các phần mềm không cần phải biết kiểu phần cứng đồ họa mà chúng đang tương tác là gì. Thay vì thế chúng chỉ cần học cách giao tiếp với API mà driver đồ họa cung cấp , các API này đã đuợc chuẩn hoá nên việc giao tiếp lại càng trở nên dễ dàng. Framebuffer là character device, major 29, minor 0.
  • /dev/hda: Ổ đĩa master trên IDE controller sơ cấp. /dev/hdb là ổ đĩa slave trên IDE controller sơ cấp. /dev/hdc/dev/hdd lần lượt cũng là hai ổ đĩa master và slave nằm trên IDE controller thứ cấp. Mỗi đĩa lại đựoc chia thành nhiều các phân vùng. Các phân vùng có thể là 1-3 phân vùng primary và nhiều phân vùng logical nằm trong một phân vùng mở rộng (extended partition). Vì vậy mỗi device node đuợc tạo ra cho mỗi phân vùng khác nhau. Ví dụ /dev/hdc9device node của phân vùng thứ 9 trên ổ đĩa master của IDE controller thứ cấp. Việc xác định major và minor của ổ đĩa cứng hơi phức tạp một chút. Tất cả cấc phân vùng thuộc IDE controller sơ cấp đều mang major 3. Ổ đĩa master hda có minor 0 và ổ đĩa slave hdb có minor 64, chúng đều là các block device. Với mỗi một phân vùng nằm trong một ổ đĩa, chúng ta có thể xác định minor của nó bằng cách cộng số thứ tự của phân vùng đó với minor của ổ đĩa, ví dụ /dev/hdb5 có major 3, minor bằng 69 (64 + 5 = 69). Ổ đĩa nằm trên IDE controller thứ cấp cũng tương tự , với major 22.
  • /dev/ht0: Ổ băng từ IDE đầu tiên, các ổ băng từ phía sau có thể đuợc đánh số tuần tự , ví dụ /dev/ht1 , /dev/ht2 . Các ổ băng từ là các character device, major 37 và minor trải tuần tự từ 0 cho ổ băng từ đầu tiên, 1 cho ổ băng từ thứ 2 , 2 cho ổ băng từ thư 3 và tương tự với các ổ khác.
  • /dev/js0: Các cần điều khiển tương tự (analogue joystick) . Các joystick tuần tự phía sau đuợc đánh số dạng js1 , js2 ..v..v... Các cần điều kiển số (digital joystick) thì là djs0 , djs1 . Chúng là các character device , đều mang major 15. Các cần điều khiển tương tự có minor từ 0 đến 127(quá nhiều cho cả những game thủ tuyệt vời nhất) , các cần điều khiển số có minor từ 128 trở lên.
  • /dev/lp0: Máy in sử dụng cổng LPT đầu tiên. Các máy in tiếp theo được đánh ố tuần tự là lp1 , lp2 ..v...v.. Là character device , major 6 , minor trải tuần tự bắt đầu từ 0.
  • /dev/loop0: Thiết bị loopback đầu tiên. Các thiết bị loopback đuợc sử dụng để mount các filesystem đuợc đóng gói trong các file kiểu dạng như *.iso chẳng hạn. Ví dụ bạn muốn mount một file ISO nhưng không muốn burn nó ra CD , thì chỉ có cách tạo một ổ đĩa ảo , và các loopback device sẽ lo liệu việc này. Thao tác tạo ra các loopback device không đuợc nhìn thấy bởi người dùng, chúng đuợc sử lý bởi chương trình mount. Các thiết bị loopback là các block device , major 7 và minor trải tuần tự từ 0.
  • /dev/mixer: Là một phần của Hệ thống âm thanh mở - Open Sound System - OSS.
  • /dev/nullI: Là một cái hố đen phần mềm, bạn ghi dữ liệu vào và nó sẽ một đi không trở lại. Điều này có thể hữu ích trong một vài trường hợp , ví dụ nếu như bạn muốn chạy một lệnh nhưng không muốn bất kỳ một thông tin đầu ra nào đuợc xuất hiện trên terminal. Đây là một character device, major 1 minor 3.
  • /dev/psaux: Cổng chuột PS/2 . Character device , major 10, minor 1.
  • dev/pda: Các ổ đĩa sử dụng cổng song song. Chúng đuợc đặt tên tương tự với các ổ đĩa trên IDE controller (/dev/pda*). Tất cả đều mang major 45. Nhưng minor của chúng thì cần giải thích nhiều hơn một chút. Thiết bị đầu tiên (/dev/pda) có minor là 0. Các phân vùng trong ổ đĩa này đuợc xác định bằng cách cộng thứ tự của chúng với minor của ổ đĩa. Mỗi ổ đĩa sử dụng cổng song song giới hạn 15 phân vùng trên một ổ (giới hạn trên các ổ IDE là 63 phân vùng một ổ đĩa). /dev/pdb có minor node là 16 , pdc là 32 và pdd là 48. Vậy nên , ví dụ minor node của phân vùng /dev/pdc6 sẽ có minor là 38 (32 + 6 = 38). Giới hạn trên hệ thống là 4 ổ đĩa song song , mỗi ổ tối đa 15 phân vùng.
  • /dev/pcd0: Ổ đĩa CD sử dụng cổng song song. Chúng đuợc đánh số từ 0 trở lên. Tất cả đều là block device, major 46.
  • /dev/pt0: Các ổ băng từ sử dụng cổng song song. Các băng từ không có phân vùng , nên mỗi ổ băng từ sẽ đựoc đánh số minor tuần tự. Là các character device , major 96 . Minor đuợc đánh số tuần tự từ 0 cho mỗi ổ băng từ.
  • /dev/parport0: Cổng song song đầu tiên. Hầu hết các thiết bị đuợc gắn vào cổng song song đã sở hữu driver của chính nó. Đây là device file giúp bạn truy xuất trực tiếp đến cổng song song . Cổng song song là một character device , major 99 , các minor đuợc đánh số tuàn tự từ 0 nếu như bạn có nhiều hơn 1 cổng song song trên máy.
  • /dev/random và /dev/urandom: Các bộ tạo số ngẫu nhiên của kernel. Chúng sử dụng các entropy của phần cứng để tạo ra các số ngẫu nhiên (entropy trong thông tin là một đơn vị đo đuợc mở rộng từ khái niệm entropy trong Nhiệt động lực học , nó biểu diễn mức độ hỗn loạn trong một tín hiệu của một sự kiện ngẫu nhiên). Ở /dev/random , nếu như nó chưa thu tập đủ entropy để tạo ra các số random, bạn sẽ phải chờ đến khi nó thu thập đủ. Ở /dev/urandom , nếu như không có entropy , chúng sẽ sử dụng các giá trị ngẫu nhiên đuợc tạo ra trước đó. Urandom đuợc cho là ít bảo mật hơn , khi bạn xây dựng các ứng dụng cần tính bảo mật như mã hóa một cặp key chẳng hạn , hãy sử dụng /dev/random , nhưng nếu ưu tiên hàng đầu của bạn là tốc độ , /dev/urandom sẽ là lựa chọn tốt. Cả hai đều là character device , major 1 . Random có minor 8 , Urandom có minor 9.
  • /dev/sda: Ổ đĩa SCSI đầu tiên trên bus SCSI đầu tiên. Các ổ đĩa theo sau đuợc đặt tên tương tự như cách đặt tên ổ đĩa IDE. /dev/sdb là ổ đĩa thứ 2, /dev/sdc là ổ đĩa thứ 3, tương tự với ổ thứ 4.
  • /dev/ttyS0: Cổng serial đầu tiên.
  • /dev/zero: Đây là một cách đơn giản để có đuợc một loạt các giá trị 0. Mỗi lần bạn đọc từ file này , nó luôn trả về 0. Nó sẽ hữu dụng trong một vài trường hợp, giả sử như khi bạn cần một file với kích thước cố định , nhưng lại không quan tâm tới nội dung của nó là gì. Đây là một character device , major 1 , minor 5.
2.5. /usr filesystem

Hệ thống tệp tin /usr thường lớn, bởi vì các chương trình đều được cài đặt tại đây. Tất cả các file trong /usr thường đến từ bản phân phối Linux của bạn. Các phần mềm đuợc cài đặt cục bộ bởi người quản trị hệ thống và các thứ linh tinh khác sẽ nằm ở /usr/local. Điều này khiến cho việc cập nhật hệ thống lên một phiên bản mới , hoặc thâm chí là một bản phân phối toàn hoàn khác dễ dàng hơn. Bạn không cần phải cài đặt lại toàn bộ các ứng dụng đã có. Một vài các thư mục con của /usr đuợc liệt kê dưới đây (*một vài thứ không quan trọng lắm sẽ đuợc bỏ qua):

  • /usr/X11R6: Các file của X Window System.
  • /usr/bin: Hầu hết tất cả các lệnh người dùng đuợc đặt ở đây. Một vài lệnh thì nằm ở /bin hoặc /usr/local/bin.
  • /usr/sbin: Các lệnh dùng cho các tác vụ quản trị hệ thống nhưng lại không cần thiết phải nằm ở thư mục root , hầu hết là các chương trình phía máy chủ.
  • /usr/share/man, /usr/share/info, /usr/share/doc: Các manual, các documentation về thông tin của GNU , các thứ vụn vặt linh tinh không đáng kể cũng đuợc vứt ở đây.
  • /usr/include: Các file header của ngôn ngữ lập trình C. Theo tính nhất quán , đáng ra nó nên đuợc đặt ở /usr/lib, nhưng đây là do cách sắp đặt truyền thống và cũng do rất nhiều các lập trình viên không có nhu cầu sắp xếp nó vào một nơi khác.
  • /usr/lib: Các file dữ liệu bất biến dùng cho các chương trình vá các hệ thống con (*subsystems). Cái tên lib đến từ chữ library bởi vì ban đầu các thư viện lập trình đuợc đặt tại đây.
  • /usr/local: Đây là nơi để cài đặt các phần mềm cục bộ vào lưu trữ các file cũng cục bộ nốt. Các bản phân phối Linux tuân theo FHS thường sẽ không ghi bất kỳ thứ gì vào trong này. Nó đuợc dành riêng cho người quản trị cục bộ. Bằng cách này anh/cô ta có thể tuyệt đối chắc chắn rằng không có sự cập nhật hay nâng cấp nào sẽ ảnh hưởng tới các phần mềm đuợc anh/cô ta cài đặt trong đây.
2.6 Hệ thống tệp tin /var

/var chứa các dữ liệu khả biến khi hệ thống đang chạy bình thường. Filesystem này đuợc chỉ định riêng cho mỗi hệ thống, nó không nên đuợc chia sẻ giữa các máy với nhau.
  • /var/cache/man: Các file manual trước khi đựoc đọc, cần phải đuợc định dạng. Một vài file đã có các bản định dạng trước đó , nhưng nếu chưa , thì file manual đó sẽ đuợc định dạng và bản định dạng sẽ được cache tại đây. Ở lần đọc tiếp theo, file manual đó không cần phải đuợc định dạng lại nữa.
  • /var/games: Các dự liệu khả biến thuộc về các trò chơi nằm trong /usr nên đuợc đặt ở đây.
  • /var/lib: Các file có nguy cơ bị thay đổi khi hệ thống hoạt động bình thường, đuợc đặt ở đây.
  • /var/local: Các file dữ liệu khả biến của các phần mềm đuợc cài đặt trong /usr/local. Lưu ý rằng cả các chương trình đuợc cài dặt cục bộ cũng nên sử dụng /var và các thư mục con nằm trong nó, như /var/lock chẳng hạn.
  • /var/lock: Các lock file. Rất nhiều các chương trình tuân theo những quy ước chung, chúng sẽ tạo ra một lock file trong /var/lock để chỉ ra rằng chúng đang sử dụng các file hoặc các thiết bị cụ thể. Các chương trình khác sẽ để ý cái file lock đó , và sẽ không cố gắng sử dụng các file hoặc các thiết bị đuợc ghi trong lock file.
  • /var/log: Các log file từ các chương trình khác nhau, đơn cử như login (/var/log/wtmp, nơi giữ tất cả thông tin về các phiên đăng nhập/ đăng xuất từ hệ thống) và syslog (/var/log/messages, nơi các thông điệp, lỗi, cảnh báo của hệ thống thường đuợc lưu trữ). Các file trong này thường có xu hướng gia tăng không thể biết trước, người quản trị có thể sẽ cần phải xóa sạch những log cũ trong này , tại mỗi khoảng thời gian nhất định.
  • /var/mail: Đây là một mục đuợc đề ra trong FHS dành riêng cho các hòm thư. Tùy thuộc vào bản phân phối Linux bạn đang dùng có tuân theo những chỉ định mới nhất từ FHS hay không , mà đôi khi các hòm thư vẫn đuợc lưu trữ ở /var/spool/mail.
  • var/run: Tệp tin chứa các thông tin về hệ thống , các thông tin đó sẽ hợp lệ cho tới lần khởi động tiếp theo. Ví dụ /var/run/utmp chứa thông tin về những người dùng hiện tại đã đăng nhập.
  • /var/spool: Thư mục chứa tin tức, các hàng đợi máy in, và các công việc cần tới các hàng đợi phần mềm. Mỗi một mục sẽ có một thư mục riêng nằm trong /var/spool, ví dụ các tin tức mới có thể đuợc lưu tại /var/spool/news.
  • /var/tmp: Các file tạm thời có kích thước lớn và cần phải đuợc tồn tại trong một khoảng thời gian dài hơn khoảng thời gian chúng đuợc cho phép ở /tmp. Nhưng các file đã quá cũ cũng sẽ được người quản trị để tâm đến và xóa đi.
2.7. /proc

Đây là một hệ thống tệp tin không có thật, bạn có thể hiểu nó như thế. Bởi vì nó không tồn tại trên đĩa , nó đuợc kernel tạo ra trong RAM. Nó đuợc sử dụng để cung cấp thông tin về hệ thống (trước đây chỉ là cung cấp thông tin về các tiến trình , bạn nhìn cái tên nó thì biết - processes). Các phần quan trọng trong /proc sẽ đuợc liệt kệ dưới đây.
  • /proc/1: Chứa thông tin về tiến trình mang Process ID là 1. Mỗi tiến trình sẽ sở hữu một thư mục nằm trong /proc , với tên thư mục là process id của tiến trình đó.
  • /proc/cpuinfo: Chứa thông tin về vi xử lý (loại, kiểu, hiệu xuất ..v....v).
  • /proc/devices: Danh sách các driver thiết bị đuợc cấu hình trong kernel hiện tại.
  • /proc/filesystems: Cho biết các filesystems đuợc cấu hình trong kernel.
  • /proc/interrupts: Cho biết các ngắt đuợc sử dụng , và mỗi CPU sử dụng chúng bao nhiêu lần.
  • /proc/ioports: Cổng nhập/xuất nào đang đuợc sử dụng lúc đó.
  • /proc/kcore: Một file mô tả toàn bộ bộ nhớ vật lý của hệ thống. Nó có kích thước ngang bằng với bộ nhớ vật lý hiện tại nhưng lại không thực sự chiếm dụng quá nhiều không gian tới mức đó. Nó đuợc tạo ra tức thì khi một chương trình nào đó đọc vào đường dẫn /proc/kcore. Lưu ý rằng trừ khi bạn copy paste nội dung trong /proc, mọi thứ thuộc filesystem này sẽ không chiếm dụng một byte nào trên đĩa cả.
  • /proc/kmsg: Các thông điệp của kernel , chúng sẽ đuợc điều hướng tới syslog ngay sau đó.
  • /proc/ksyms: Symbol table của kernel.
  • /proc/loadavg: Tải trung bình của hệ thống, nó cho biết khối lượng công việc mà hệ thống phải thực hiện ngay ở thời điểm nó đuợc đọc.
  • /proc/meminfo: Thông tin về bộ nhớ vật lý, và phân vùng swap.
  • /proc/modules: Nó chứa thông tin về những module đuợc load ngay lúc đó.
  • /proc/net: Các thông tin,trạng thái của các giao thức mạng.
  • /proc/self: Một liên kết tượng trưng (symbolic link) tới những process directory có dạng /proc/1 ,/proc/2 , mà tiến trình tương ứng của chúng đang truy xuất vào /proc. Khi hai tiến trình cùng truy xuất vào /proc , chúng sẽ sở hữu hai liên kết tượng trưng khác nhau. Ví dụ process có pid 1 đang truy xuất vào /proc thì liên kết /proc/self sẽ trỏ tới /proc/1.
  • /proc/stat: Các số liệu thống kê của hệ thống , như số lượng các page fault đã đuợc ném ra kể tử khi hệ thống khởi động. (Page fault : Một lỗi đuợc ném ra bởi vi xử lý để nhắc cho hệ điều hành biết rằng một tiến trình nào đó đang cần thêm bộ nhớ. Nếu như một tiến trình cố gắng truy cập vào các vùng nhớ không hợp lệ , một pagefault cũng sẽ đuợc ném ra và hệ điều hành sẽ hủy diệt cái tiến trình gây lỗi đó ).
  • /proc/version: Phiên bản của kernel.
Lưu ý rằng trong khi hầu hết các file trong cây thư mục đưoc đọc dễ dàng dưới dạng một file text, thì những file khác lại không đuợc đọc dễ dàng như vậy vì chúng sở hữu một định dạng riêng hoặc đuợc mật mã hóa. Có rất nhiều các lệnh giúp bạn làm nhiều việc hơn là chỉ đọc nội dụng của các file đó , nó cũng giúp định dạng lại nội dung file để đọc hiểu dễ dàng hơn. Ví dụ chương trình free sẽ đọc /proc/meminfo và convert số lượng các bytes thành Kilobyte ,cũng như kèm theo một vài các thông tin đi kèm khác.

via Trần Bá Đạt - Nguồn : The Linux documentation project

 
biz.