Hệ thống tập tin và thư mục trên Linux
Hệ thống tập tin của Linux và Unix được tổ chức theo một hệ thống phân bậc tương tự cấu trúc của một cây phân cấp. Bậc cao nhất của hệ thống tập tin là thư mục gốc, được ký hiệu bằng vạch chéo “/” (root directory). Đối với các hệ điều hành Unix và Linux tất các thiết bị kết nối vào máy tính đều được nhận dạng như các tập tin, kể cả những linh kiện như ổ đĩa cứng, các phân vùng đĩa cứng và các ổ USB. Điều này có nghĩa là tất cả các tập tin và thư mục đều nằm dưới thư mục gốc, ngay cả những tập tin biểu tượng cho các ổ đĩa cứng.
Ví dụ, /home/nttvinh/nguyen/scnp.odt chỉ toàn bộ đường dẫn đến tập tin scnp.odt có trong thư mục nttvinh là thư mục phụ nằm trong thư mục home, ngay dưới thư mục gốc (/).
Nằm dưới thư mục gốc (/) có một loạt các thư mục quan trọng của hệ thống tập tin được công nhận ở tất cả các bản phân phối Linux khác nhau. Sau đây là danh sách các thư mục thông thường được nhìn thấy dưới thư mục gốc (/) :
- /bin – chứa các ứng dụng quan trọng (binary applications),
- /boot – các tập tin cấu hình cho quá trình khởi động hệ thống (boot configuration files),
- /dev – chứa các tập tin là chứng nhận cho các thiết bị của hệ thống (device files)
- /etc – chứa các tập tin cấu hình của hệ thống, các tập tin lệnh để khởi động các dịch vụ của hệ thống...
- /home – thư mục này chứa các thư mục cá nhân của những người có quyền truy cập vào hệ thống (local users' home directories),
- /lib – thư mục này lưu các thư viện chia sẻ của hệ thống (system libraries)
- /lost+found – thư mục này được dùng để lưu các tập tin không có thư mục mẹ mà được tìm thấy dưới thư mục gốc (/) sau khi thực hiện lệnh kiểm tra hệ thống tập tin (fsck).
- /media – thư mục này được dùng để tạo ra các tập tin gắn (loaded) tạm thời được hệ thống tạo ra khi một thiết bị lưu động (removable media) được cắm vào như đĩa CDs, máy ảnh kỹ thuật số...
- /mnt – thư mục này được dùng để gắn các hệ thống tập tin tạm thời (mounted filesystems),
- /opt – thư mục dùng dể chứa các phần mềm ứng dụng (optional applications) đã được cài đặt thêm,
- /proc – đây là một thư mục đặc biệt linh động để lưu các thông tin về tình trạng của hệ thống, đặc biệt về các tiến trình (processes) đang hoạt động,
- /root – đây là thư mục nhà của người quản trị hệ thống (root),
- /sbin – thư mục này lưu lại các tập tin thực thi của hệ thống (system binaries)
- /sys – thư mục này lưu các tập tin của hệ thống (system files),
- /tmp – thư mục này lưu lại các tập tin được tạo ra tạm thời (temporary files),
- /usr – thư mục này lưu và chứa những tập tin của các ứng dụng chính đã được cài đặt cho mọi người dùng (all users),
- /var – thư mục này lưu lại tập tin ghi các số liệu biến đổi (variable files) như các tập tin dữ liệu và tập tin bản ghi (logs and databases).
Ổ đĩa và các Partition- /dev/hda Ổ đĩa cứng IDE đầu tiên (chính)
- /dev/hdb Ổ đĩa cứng IDE thứ hai (thứ cấp)
- /dev/sda Ổ đĩa cứng SCSI đầu tiên
- /dev/sdb Ổ đĩa cứng SCSI thứ hai
- /dev/fd0 Ổ đĩa mềm đầu tiên
- /dev/fd1 Ổ đĩa mềm thứ hai
bổ sung thêm ý nghĩa..
Ý nghĩa 1 số folder chính trong linux
1. Thư mục /:
Đây thường được gọi với tên “root directory”--nghĩa là thư mục gốc. Đây là nơi sẽ chứ mọi thư mục con khác. Đây là thư mục bắt buộc phải có cho bất cứ một hệ thống linux nào.
Nếu bạn không quan tâm đến việc tối ưu bước phân vùng, bạn chỉ cần tạo một phân vùng khoảng 5Gb và mount [3] vào / là hoàn toàn có thể cài đặt và sử dụng linux một cách hiệu quả.
2. Thư mục /boot:
Thư mục /boot thường được dùng để chứa kernel, và các cấu hình để boot hệ thống.
Có rất nhiều tài liệu khuyên nên tạo một partition riêng cho /boot. Mình nhận thấy việc này là không cần thiết. Bạn có thể để trực tiếp /boot trong phân vùng dành cho /. /boot chỉ cần thiết khi bạn có ý định sử dụng nhiều linux distro khác nhau trên cùng một hệ thống. Khi đó, bạn có thể đặt tất cả các kernel, các options và các cấu hình vào một phân vùng, và mount vào /boot cho mỗi distro.
3. Thư mục /home
/home là nơi chứa tất cả các dữ liệu cá nhân cho từng user trên hệ thống (ngoại trừ user root). Việc tính toán chính xác bạn cần bao nhiêu chỗ trống cho /home là điều rất khó khăn; trừ khi bạn tiến hành giới hạn tài nguyên cho từng account trên hệ thống và bạn biết rõ sẽ có bao nhiêu account. Do đó, khoai thường phân chia các phân vùng khác trước, và phần còn dư lại được dành cho /home.
4. Thư mục /tmp
/tmp là thư mục dùng để chứa các file tạm. Các file này thường được xóa sau khi chương trình đã hoàn tất và thoát. Nhiều người không tạo thêm một phân vùng riêng cho /tmp mà để /tmp như một thư mục trong /. Điều này hoàn toàn vô hại đối với một hệ thống cá nhân.
Một điểm lưu ý là các users đều phải có quyền write và read trên /tmp. Một user bình thường hoàn toàn cần có /tmp để chứa các file tạm khi user đó sử dụng hệ thống. Một user hoàn toàn có khả năng tạo ra hàng loạt các file có kích thước lớn trong /tmp để làm đầy partition /, và tình trạng này hoàn toàn có khả năng DoS [4] và làm ảnh hưởng đến hệ thống của bạn. Ngoài ra, còn có một số trường hợp tấn công trực tiếp sử dụng /tmp vì user hoàn toàn có lý khi có toàn quyền read, write trên /tmp. Do đó, nên tạo một partition riêng, dành cho /tmp. Partition này có thể được mount thêm với option noexec để không cho bất cứ user nào có quyền execute file trên /tmp, hạn chế tối đa khả năng một user lợi dụng /tmp làm nơi chứa các file thực thi mà bạn không xác định rõ chức năng. Một partition dành cho tmp cần khoảng 500Mb. Nhưng nếu ổ cứng của bạn rộng rãi, bạn nên để khoảng 1Gb dành cho /tmp. Nếu không đủ, tất nhiên chúng ta hoàn toàn có thể “gia tăng thêm” kích thước cho /tmp.
5. Thư mục /var
/var thường được gọi là “kho chứa log” cho cả hệ thống. Mặc định, rất nhiều chương trình sẽ có log ở một trong các thư mục nằm trong /var. /var có thể không cần riêng một partition cho nó, nhưng nên để thêm 500Mb vào partition / khi bạn quyết định đặt /var nằm trong partition /.
Tương tự với /tmp, các file log trong /var có khả năng làm ngập partition root. Nếu có thể, bạn nên tạo một partition riêng cho /var. Nếu bạn có ý định sẽ sử dụng hệ thống này như một web server, một IDS [5], hay bất cứ một dịch vụ hoặc chương trình nào đòi hỏi bạn sẽ cần có rất nhiều log thì bạn nên tạo một partition riêng cho /var. Khi đó, kích thước của var nên gia tăng tuỳ theo nhu cầu của bạn.
6. Thư mục /usr
/usr là nơi chứa rất nhiều các chương trình được cài đặt trên hệ thống. Ngoài ra, /user còn dùng để chứa các library, các file include, các manual pages vân vân. Với một hệ thống cá nhân nho nhỏ, /usr cần khoảng 3Gb đến 4Gb. Tuy vậy, sau khi cài đặt hệ thống, kích thước của /usr ít khi có thay đổi đáng kể. Thường sau khi cài đặt, một hệ thống dùng khoảng 80% chỗ trống được dành cho /usr, và con số này thường không thay đổi. /usr có thể được đặt trong partition dành cho / (nhưng phải gia tăng kích thước partition này thêm 3,4 Gb) hoặc cũng có thể được dành riêng một phân vùng.
[*] Ngoài các thư mục chính kể trên, linux còn các thư mục khác nằm ngay trong /. Các thư mục này thông thường không đòi hỏi phải có riêng một partition. Linux còn cần có một partition swap để làm vùng nhớ tạm khi RAM không đủ. Swap thường chiếm khoảng 2 lần kích thước của RAM. Nếu có điều kiện, tốt nhất là nên mua thêm một ổ cứng nho nhỏ, dùng để chứa swap và /tmp. Do swap và /tmp thường được truy xuất nhiều và liên tục, tách chúng ra lên một ổ cứng khác sẽ giúp ổ cứng chính của bạn sống lâu hơn :~)
Nếu bạn có nhu cầu chia sẽ một số dữ liệu cho cả hai hệ thống linux và windows, khoai đề nghị tạo thêm một phân vùng lớn để chứa dữ liệu. Phân vùng này sẽ được format dạng fat, để windows và linux có thể dễ dàng sử dụng dữ liệu bên trong. Linux có hỗ trợ đầy đủ cho cả ntfs và fat, nhưng windows thì lại không thể nhận ra các filesystem như ext2, ext3 hay reiserfs. Trên windows, để truy xuất một phân vùng định dạng khác ntfs và fat, bạn phải cần có một chương trình khác để làm việc đó.
7. Thư mục /bin
Đây là thư mục chứa các chương trình cơ bản nhất trong hệ thống. Các file binary [6] này thường là các chương trình thiết yếu và đủ để hệ thống có thể khởi động và làm việc ở mức căn bản.
Thông thường, không ai tạo riêng một partition cho /bin. Lý do đầu tiên là kích thước của /bin rất nhỏ, và lại rất cố định. Nhưng lý do quan trọng hơn là bởi vì chức năng của /bin. Khi kernel [7] được load bởi bootloader, việc đầu tiên là kernel sẽ tiến hành mount partition /. Sau đó, các partition khác sẽ được mount sau bởi các init script [8]. Các init script cần có 2 lệnh mount và umount, nằm trong /bin, để có thể tiến hành mount các partition khác. Ngoài ra, trong /bin còn có các chương trình cần thiết khác để khởi động như shell, login, cp vân vân. Do đó, /bin cần được đặt trong partition dành cho /.
8. Thư mục /dev
/dev là nơi kernel đặt các device file. Trong linux và các hệ điều hành Unix-like, mỗi device đều được gán cho một file và các file này sẽ được đặt trong /dev. Khi một tiến trình nào đó muốn truy xuất một device, tiến trình đó sẽ sử dụng các file device này. Ngoài các file device dành cho các hardware trên hệ thống, ở /dev còn có thêm một số file rất tiện dụng như /dev/zero, /dev/null, /dev/random.
Mỗi ổ cứng đương nhiên cũng được tạo một device file trong /dev. Tuy nhiên, chi tiết về device file dành cho hdd (hard disk drive) sẽ được đề cập kỹ hơn trong phần tiến hành partition ổ cứng.
/dev là một pseudo filesystem. Nghĩa là directory /dev là một file system ảo. Kernel sẽ tự tạo và đặt các device file vào /dev nếu như kernel nhận ra device đó. Bất kỳ một device nào cũng cần có driver để tương tác với kernel. Driver cho linux thường đã được nằm sẵn trong kernel. Bạn nào có config và rebuild kernel sẽ nhận ra có rất nhiều driver được support. Các driver được kernel support có thể được build trực tiếp vào kernel, hoặc được compile thành module. Ngoài ra, driver còn có thể được cung cấp dưới dạng kernel loadable module từ nhà sản xuất, hoặc từ các nhóm phát triển khác.
9. Thư mục /lib
/lib thường là nơi chứa các library cần thiết cho hệ thống hoạt động. Một số thư mục khác cũng dùng để đặt lib gồm có: /usr/lib, /usr/local/lib.
Một thư mục đáng quan tâm khác trong /lib là /lib/modules. /lib/modules chứa các modules của kernel đang dùng. Nếu trên máy tính có nhiều hơn 1 kernel, trong /lib/modules sẽ có các directory khác tương ứng cho từng version của kernel.
/lib cần được đặt trong partitions /. kernel đôi khi cần phải load các modules, hoặc sử dụng một số share library trong /lib trước khi mount các partition non-root. Ngoài ra, các chương trình thực thi khác, nếu không compile static thì vẫn phải sử dụng rất nhiều library trong /lib.
10. Thư mục /media và /mnt
Hai thư mục này thường được dùng để đặt các mount point. Như đã bàn ở trên, một partition muốn dùng được phải được mount. Các mount point đó thường được đặt trong /mnt. Một số các chương trình ứng dụng mới không dùng /mnt mà dùng /media là nơi default để đặt các mount point. Do đó, rất nhiều distro cung cấp cả hai thư mục, và sử dụng link để tương thích cho thói quen của user và các application.
11. Thư mục /opt
/opt thường được dùng làm nơi cài đặt thêm các chương trình mang tính “optional”, có nghĩa là không thật sự cần thiết cho hệ thống. Cá nhân mình nhận thấy /opt thường ít được sử dụng.
12. Thư mục /proc
/proc cũng là một pseu-do filesystem. Các file/thư mục trong /proc sẽ được kernel khởi tạo trong lúc hoạt động. Trong /proc sẽ có các file/thư mục tương ứng cho các process đang chạy, và ngay cả kernel. Rất nhiều kernel parameters có thể được xem và thay đổi bằng cách edit trực tiếp các file tương ứng trong /proc mà không cần dùng sysctl.
13. Thư mục /root
/root là home directory cho account root. Thư mục này cũng tương tự như các home directory khác trên hệ thống. Chỉ khác ở điểm thư mục này không nằm trong /home/username mà được đặt ngay trong /.
------------
[1]-Master Boot Record là phần dữ liệu nằm ở đầu của một ổ cứng. Phần này chứa tất cả thông tin về các partition, và các phân chia sector, cylinders vân vân. Một partition table trong master boot record chỉ có thể chứa tối đa 4 partitions. Nhưng một trong số đó có thể là địa chỉ trỏ đến một extended partition table. Trong extended partition table, số lượng partition sẽ nhiều hơn. Các partition nằm trên partition table chính thường được gọi là các primary partition. Trong khi các partition nằm trong extended partition table thường được gọi là logical partition hoặc extended partition.
[2]-Linux distribution là các bản phân phối linux. Tất cả các bản đều sử dụng chung một linux kernel (cho dù thường thì khác version). Điểm khác biệt cơ bản của các distro với nhau là ở mặt cấu trúc thư mục, cấu hình, library, và các hỗ trợ cho người dùng. Nếu bạn có thể dùng một distro, bạn hoàn toàn có khả năng sử dụng một distro khác. Để cài đặt bất cứ distro nào, xin mời tham khảo thêm tài liệu của cụ thể distro đó.
[3]-mount: Trên một hệ thống linux, hoặc các hệ thống “giốn Unix” nói chung, một phân vùng cần được mount trước khi sử dụng. Một phân vùng sẽ được mount vào một thư mục, và tất cả dữ liệu ghi vào thư mục đó sẽ được ghi lên phân vùng đã mount. ví dụ: phân vùng số 1 được mount tại /, và phân vùng số 2 được dành để mount tại /tmp. Nếu ta không mount phân vùng số 2 tại /tmp mà tiến hành ghi một file lên /tmp, file đó sẽ nằm trong phân vùng số 1. Nếu ta mount phân vùng 2 tại /tmp, và ghi một file khác lên /tmp, file này sẽ được nằm trong phân vùng số 2. Trên hệ thống windows cũng có khái niệm mount ổ cứng, ổ CD, USB vân vân, nhưng khái niệm mount này thường được hiển thị cho người dùng ở dạng “ổ đĩa” C, D, vân vân. Do đó, khái niệm mount trên hệ thống windows ít được biết đến và sử dụng.
[4]-DoS là từ viết tắt của Denial of Service(s). Đây là một kiểu tấn công làm cho một hệ thống không thể cung cấp một hoặc một vài dịch vụ nào đó. Một hình thức tấn công DoS đơn giản là cắt dây điện để hệ thống không thể hoạt động, hoặc phức tạp hơn có thể dùng một số công cụ tự động làm ngập đường truyền mạng. Ngoài ra còn có một số hình thức tấn công khác như DDoS hoặc RDDoS. Các vấn đề về DoS sẽ không được đề cập quá chi tiết trong bài viết này.
[5]-IDS là từ viết tắt của Intrusion Detection System. Đây là một hệ thống dùng để quản lý và kiểm tra xem hệ thống của bạn có dấu hiệu bị tấn công hay không.
[6]-Binary: Trên linux, các file chủ yếu được phân ra hai loại chính: text file, và binary file. Text file là các file chỉ chứa các ký tự ASCII. Còn lại đều được gọi là binary file. Các file binary file này có thể là phim, nhạc, hình ảnh, vân vân. Tuy nhiên, binary file được đề cập trong bài là các file chứa mã thực thi cho hệ thống. Các file binary này đã được compile và được link để có thể chạy được.
[7]-Kernel: kernel là từ dùng để chỉ phần lõi của hệ thống. Bất kỳ một hệ điều hành nào cũng có kernel. Linux nói cho chính xác thì chỉ là kernel mà thôi. Kernel là một chương trình giúp cho các chương trình khác có thể giao tiếp với nhau, và với các phần cứng thông qua driver. Source cho linux kernel được cung cấp tại
http://www.kernel.org
.
[8]-init script là từ dùng để chỉ các đoạn shell script được chạy mỗi lần máy tính khởi động. Các init scripts này thường được đặt trong /etc/rc.d, hoặc /etc/init.d tuỳ theo distribution. Các init script này dùng để chạy các chương trình cần thiết khi khởi động, để mount các partitions cần thiết, để chạy các service, hoặc để chỉnh sửa các thông số cho kernel, vân vân. Các init script thường được phân loại dựa theo boot level. Để biết thêm chi tiết về boot level (hoặc init level), xin mời tham khảo thêm man page của inittab và initscript.