4 Làm quen với hệ thống tập tin ext3fs
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 đó ngồ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ẻ ngồ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.
Bảng 4.2: Những tập tin thiết bị chính
Tập tin Ý nghĩa
/dev/console Console hệ thống tức là màn hình và bàn phím kết nối tới máy tính. /dev/hd Các ỗ cứng với giao diện IDE. Thiết bị/dev/hda1tương ứng với phân
vùng đầu tiên của đĩa cứng đầu tiên, đĩa/dev/hda, tức là đĩa Primary Master.
/dev/sd Ổ cứng với giao diện SCSI.
/dev/fd Các tập tin ổ đĩa mềm. Ổ đầu tiên là /dev/fd0, ổ thứ hai là /dev/fd1.
/dev/tty Các tập tin hỗ trợ terminal của người dùng. Tên gọi vẫn được lưu kể từ khi kết nối teletype vào các hệ thống UNIX làm terminal. Trên Linux những tập tin này hỗ trợ các terminal ảo (hãy nhớ lại chương trước). /dev/pty Các tập tin hỗ trợ terminal giả. Sử dụng cho các kết nối từ xa qua telnet.
/dev/ttS Tập tin hỗ trợ làm việc với các cổng kết tiếp nhau (các cổng COM). /dev/ttS0tương ứng với COM1 trong DOS,/dev/ttS1tương ứng với COM2.
/dev/cua Các tập tin cho mơđem.
/dev/null Thiết bị này có thể gọi là “lỗ đen”. Tất cả những gì ghi vào/dev/null sẽ mất vĩnh viễn. Những người viết script thường chuyển những thông báo không cần thiết vào thiết bị này. Nếu sử dụng /dev/null làm thiết bị nhập vào, thì sẽ thu được một chuỗi các số 0, tức là trong trường hợp này tập tin có cỡ bằng 0.
Mỗi dạng thiết bị có thể có một vài tập tin thiết bị. Vì thế các tập tin thiết bị thường có hai số: lớn (major) và nhỏ (minor). Số lớn của thiết bị cho nhân biết là tập tin này thuộc về driver nào, còn số nhỏ cho biết cần phải làm việc với thiết bị cụ thể nào của dạng này. Đối với các tập tin thiết bị, câu lệnhls -lcho biết số lớn và số nhỏ đã nói thay vì kích thước của tập tin.
4.4.2 Các ống có tên (pipes)
Cịn có một dạng tập tin thiết bị nữa đó là các ống có tên, hay bộ đệm FIFO (First
các chương trình khác nhau (pipe dịch từ tiếng Anh sang là ống, đường ống). Ống là phương tiện hết sức thuận tiện và sử dụng rộng rãi để trao đổi thơng tin giữa các tiến trình. Một tiến trình có thể đọc tất cả những gì mà một tiến trình khác đặt vào ống. Nếu có hai tiến trình được sinh ra từ cùng một tiến trình mẹ trao đổi thơng tin (thường xảy ra), thì ống có thể khơng có tên. Trong trường hợp ngược lại cần tạo ra một ống có tên, ví dụ bằng chương trình mkfifo. Khi
này bản thân tập tin ống chỉ tham gia vào sự khởi đầu trao đổi dữ liệu.
4.4.3 Các socket
Socket đó là kết nối giữa các tiến trình, cho phép chúng giao tiếp mà khơng chịu ảnh hưởng của các tiến trình khác. Nói chung socket và sự trao đổi qua socket đóng vai trị hết sức quan trọng trên tất cả các hệ thống UNIX, trong đó có Linux: socket là khái niệm then chốt của TCP/IP và như vậy là dựa trên socket đã xây dựng tồn bộ Internet. Tuy nhiên từ phía hệ thống tập tin socket thực tế khơng khác các ống có tên: đó chỉ là các điểm cho phép nối các chương trình với nhau. Sau khi đã tạo ra kết nối, thì trao đổi được thực hiện mà khơng cần đến socket: dữ liệu do nhân chuyển trực tiếp từ chương trình này đến chương trình khác.
Mặc dù những tiến trình khác có thể thấy các tập tin socket, nhưng những tiến trình khơng tham gia vào kết nối hiện thời không thể thực hiện bất kỳ thao tác đọc hay ghi nào lên tập tin socket. Trong số những hệ thống sử dụng socket cần kể đến X Window, hệ thống in và hệ thốngsyslog.
4.4.4 Liên kết mềm
Trong phần về tên tập tin ở chương trước chúng ta đã nói rằng tập tin trong Linux có thể có vài tên hay liên kết cứng. Liên kết cứng chỉ là một tên khác cho tập tin ban đầu. Nó được ghi trong mơ tả inode của tập tin đó. Sau khi tạo liên kết cứng khơng thể phân biệt đâu là tên tập tin còn đâu là liên kết. Nếu bạn đọc xóa một trong số những tập tin này (nói đúng hơn là một trong số những tên này), thì tập tin vẫn cịn được lưu trên đĩa cho đến khi vẫn cịn ít nhất một tên.
Rất khó phân biệt tên đầu tiên của tập tin và những liên kết cứng được tạo ra sau đó. Vì vậy chỉ dùng liên kết cứng ở những nơi không cần biết sự khác nhau. Một trong những ứng dụng của liên kết cứng đó là ngăn chặn khả năng xóa tập tin một cách vơ tình. Điểm đặc biệt của liên kết cứng là nó chỉ thẳng đến chỉ số inode, và do đó liên kết cứng chỉ có thể dùng cho tập tin của cùng một hệ thống tập tin, tức là trên cùng một phân vùng (đĩa lưu).
Nhưng trên Linux cịn có một dạng liên kết khác gọi là (liên kết tượng trưng9). Những liên kết này cũng có thể coi là tên phụ cho tập tin, nhưng chúng là những tập tin khác – những tập tin liên kết mềm. Khác với liên kết cứng, liên kết mềm có thể chỉ đến những tập tin nằm trong hệ thống tập tin khác, ví dụ trên những đĩa lưu động, hoặc thậm chí trên một máy tính khác. Nếu tập tin ban đầu bị xóa, thì liên kết mềm tuy khơng bị xóa nhưng trở thành vơ giá trị. Hãy sử dụng liên kết mềm trong những trường hợp bạn muốn tránh sự lầm lẫn mà liên kết cứng có thể gây ra, hoặc khi tập tin nằm trên một hệ thống tập tin khác.