🔙 Quay lại trang tải sách pdf ebook Tự Học Sử Dụng Linux Ebooks Nhóm Zalo Tự học sử dụng Linux Tác giả: Kostromin V. A. Dịch và cộng tác: Phan Vĩnh Thịnh Phiên bản: 0.9.4 Ngày 13 tháng 9 năm 2006 Dành cho người dùng mới và rất mới... Mục lục 1 HĐH Linux: lịch sử và các bản phân phối 2 1.1 Thế nào là HĐH nói chung và Linux nói riêng . . . . . . . . . . . . 2 1.1.1 Các hệ điều hành dạng UNIX . . . . . . . . . . . . . . . . . . 2 1.1.2 Một chút về lịch sử . . . . . . . . . . . . . . . . . . . . . . . . 3 1.1.3 Đặc điểm chính của HĐH Linux . . . . . . . . . . . . . . . . 6 1.2 Bản phân phối Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 1.3 Yêu cầu đối với máy tính . . . . . . . . . . . . . . . . . . . . . . . . . 11 1.4 Lấy Linux ở đâu? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 2 Cài đặt HĐH Linux trên cùng máy tính với Windows 14 2.1 Chuẩn bị cài đặt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 2.2 Phòng xa và những lời khuyên . . . . . . . . . . . . . . . . . . . . . . 16 2.3 Phân vùng trên đĩa và quá trình khởi động . . . . . . . . . . . . . . 18 2.3.1 Thế nào là cấu trúc “hình học của đĩa” . . . . . . . . . . . . . 18 2.3.2 Phân vùng và bảng phân vùng của đĩa . . . . . . . . . . . . . 18 2.3.3 Quá trình khởi động các HĐH của công ty Microsoft . . . . . 20 2.3.4 Vấn đề với các đĩa lớn . . . . . . . . . . . . . . . . . . . . . . . 22 2.4 Lựa chọn trình khởi động . . . . . . . . . . . . . . . . . . . . . . . . . 23 2.4.1 Trình khởi động GRUB . . . . . . . . . . . . . . . . . . . . . . 23 2.4.2 Trình khởi động LILO . . . . . . . . . . . . . . . . . . . . . . 25 2.4.3 Các trình khởi động khác . . . . . . . . . . . . . . . . . . . . . 26 2.4.4 Các phương án khởi động . . . . . . . . . . . . . . . . . . . . 27 2.5 Chuẩn bị các phân vùng trên đĩa . . . . . . . . . . . . . . . . . . . . 28 2.5.1 Lời khuyên khi tạo phân vùng . . . . . . . . . . . . . . . . . . 28 2.5.2 Chương trình để phân chia ổ đĩa . . . . . . . . . . . . . . . . 30 2.6 Windows NT và Linux: khởi động qua NT OS Loader . . . . . . . . 31 2.7 Sử dụng trình khởi động GRUB . . . . . . . . . . . . . . . . . . . . . 34 2.7.1 Cài đặt GRUB . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 2.7.2 Cấu hình GRUB . . . . . . . . . . . . . . . . . . . . . . . . . . 34 2.8 Sử dụng trình khởi động LILO . . . . . . . . . . . . . . . . . . . . . 36 2.8.1 Cài đặt và cấu hình LILO . . . . . . . . . . . . . . . . . . . . 36 2.8.2 Cài đặt các hệ điều hành khác sau Linux . . . . . . . . . . . 39 2.8.3 Chuyển thư mục /boot lên phân vùng DOS . . . . . . . . . . 39 2.9 Khởi động Linux từ MS-DOS bằng loadlin.exe . . . . . . . . . . . . 40 iv MỤC LỤC 3 Khởi động Linux lần đầu 43 3.1 Khởi động HĐH Linux . . . . . . . . . . . . . . . . . . . . . . . . . . 43 3.2 Đăng nhập vào hệ thống . . . . . . . . . . . . . . . . . . . . . . . . . 44 3.3 Console, terminal ảo và shell . . . . . . . . . . . . . . . . . . . . . . 47 3.4 Soạn thảo dòng lệnh. Lịch sử lệnh . . . . . . . . . . . . . . . . . . . 49 3.5 Ngừng làm việc với Linux . . . . . . . . . . . . . . . . . . . . . . . . 51 3.6 Trợ giúp khi dùng Linux . . . . . . . . . . . . . . . . . . . . . . . . . 53 3.6.1 Các nguồn thông tin trợ giúp . . . . . . . . . . . . . . . . . . 53 3.6.2 Các trang trợ giúp man . . . . . . . . . . . . . . . . . . . . . . 54 3.6.3 Câu lệnh info . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 3.6.4 Câu lệnh help . . . . . . . . . . . . . . . . . . . . . . . . . . . 56 3.6.5 Tài liệu đi kèm với bản phân phối và chương trình ứng dụng 56 3.6.6 Câu lệnh xman . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 3.6.7 Câu lệnh helptool . . . . . . . . . . . . . . . . . . . . . . . . 57 3.6.8 Sách và Internet . . . . . . . . . . . . . . . . . . . . . . . . . . 57 4 Làm quen với hệ thống tập tin ext3fs 60 4.1 Tập tin và tên của chúng . . . . . . . . . . . . . . . . . . . . . . . . . 60 4.2 Thư mục . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 4.3 Công dụng của các thư mục chính . . . . . . . . . . . . . . . . . . . . 65 4.4 Dạng tập tin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70 4.4.1 Các tập tin thiết bị . . . . . . . . . . . . . . . . . . . . . . . . 70 4.4.2 Các ống có tên (pipes) . . . . . . . . . . . . . . . . . . . . . . . 71 4.4.3 Các socket . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72 4.4.4 Liên kết mềm . . . . . . . . . . . . . . . . . . . . . . . . . . . 72 4.5 Quyền truy cập đến tập tin và thư mục . . . . . . . . . . . . . . . . . 73 4.6 Các câu lệnh cơ bản để làm việc với tập tin và thư mục . . . . . . . 79 4.6.1 Câu lệnh chown và chgrp . . . . . . . . . . . . . . . . . . . . 80 4.6.2 Câu lệnh mkdir . . . . . . . . . . . . . . . . . . . . . . . . . . 80 4.6.3 Câu lệnh cat . . . . . . . . . . . . . . . . . . . . . . . . . . . 80 4.6.4 Câu lệnh cp . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81 4.6.5 Câu lệnh mv . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82 4.6.6 Câu lệnh rm và rmdir . . . . . . . . . . . . . . . . . . . . . . 82 4.6.7 Câu lệnh more và less . . . . . . . . . . . . . . . . . . . . . 83 4.6.8 Câu lệnh tìm kiếm find và mẫu tên tập tin . . . . . . . . . . 83 4.6.9 Câu lệnh split . . . . . . . . . . . . . . . . . . . . . . . . . . 86 4.6.10 So sánh các tập tin và lệnh patch . . . . . . . . . . . . . . . 87 4.7 Các câu lệnh lưu trữ và nén tập tin . . . . . . . . . . . . . . . . . . . 88 4.7.1 Chương trình tar . . . . . . . . . . . . . . . . . . . . . . . . . 89 4.7.2 Chương trình gzip . . . . . . . . . . . . . . . . . . . . . . . . 91 4.7.3 Chương trình bzip2 . . . . . . . . . . . . . . . . . . . . . . . 92 4.7.4 Sử dụng kết hợp tar với gzip và bzip2 . . . . . . . . . . . . 94 4.8 Tạo và gắn các hệ thống tập tin . . . . . . . . . . . . . . . . . . . . . 95 MỤC LỤC v 5 Bash 100 5.1 Hệ vỏ là gì? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100 5.2 Các ký tự đặc biệt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101 5.3 Thực thi các câu lệnh . . . . . . . . . . . . . . . . . . . . . . . . . . . 102 5.3.1 Thao tác ; . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102 5.3.2 Thao tác & . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103 5.3.3 Thao tác && và || . . . . . . . . . . . . . . . . . . . . . . . . 103 5.4 Đầu vào/đầu ra tiêu chuẩn . . . . . . . . . . . . . . . . . . . . . . . . 103 5.4.1 Dòng dữ liệu vào – ra . . . . . . . . . . . . . . . . . . . . . . . 103 5.4.2 Lệnh echo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104 5.4.3 Lệnh cat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104 5.5 Chuyển hướng đầu vào/đầu ra, đường ống và bộ lọc . . . . . . . . . . 105 5.5.1 Sử dụng >, < và » . . . . . . . . . . . . . . . . . . . . . . . . . 105 5.5.2 Sử dụng | . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107 5.5.3 Bộ lọc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107 5.6 Tham biến và các biến số. Môi trường của hệ vỏ . . . . . . . . . . . . 108 5.6.1 Các dạng tham biến khác nhau . . . . . . . . . . . . . . . . . 108 5.6.2 Dấu nhắc của hệ vỏ . . . . . . . . . . . . . . . . . . . . . . . . 110 5.6.3 Biến môi trường PATH . . . . . . . . . . . . . . . . . . . . . . . 111 5.6.4 Biến môi trường IFS . . . . . . . . . . . . . . . . . . . . . . . 112 5.6.5 Thư mục hiện thời và thư mục cá nhân . . . . . . . . . . . . 112 5.6.6 Câu lệnh export . . . . . . . . . . . . . . . . . . . . . . . . . 112 5.7 Khai triển biểu thức . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112 5.7.1 Khai triển dấu ngoặc . . . . . . . . . . . . . . . . . . . . . . . 113 5.7.2 Thay thế dấu ngã (Tilde Expansion) . . . . . . . . . . . . . . 114 5.7.3 Phép thế các tham biến và biến số . . . . . . . . . . . . . . . 114 5.7.4 Phép thế các câu lệnh . . . . . . . . . . . . . . . . . . . . . . . 114 5.7.5 Phép thế số học (Arithmetic Expansion) . . . . . . . . . . . . 115 5.7.6 Phân chia từ (word splitting) . . . . . . . . . . . . . . . . . . 115 5.7.7 Khai triển các mẫu tên tập tin và thư mục (Pathname Ex pansion) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115 5.7.8 Xóa các ký tự đặc biệt . . . . . . . . . . . . . . . . . . . . . . . 116 5.8 Shell - một ngôn ngữ lập trình . . . . . . . . . . . . . . . . . . . . . . 116 5.8.1 Toán tử if và test (hoặc [ ]) . . . . . . . . . . . . . . . . . . 117 5.8.2 Toán tử test và điều kiện của biểu thức . . . . . . . . . . . . 117 5.8.3 Toán tử case . . . . . . . . . . . . . . . . . . . . . . . . . . . 120 5.8.4 Toán tử select . . . . . . . . . . . . . . . . . . . . . . . . . . 120 5.8.5 Toán tử for . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121 5.8.6 Toán tử while và until . . . . . . . . . . . . . . . . . . . . . 122 5.8.7 Các hàm số . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123 5.8.8 Tham số . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123 5.8.9 Biến nội bộ (local) . . . . . . . . . . . . . . . . . . . . . . . . . 123 5.9 Script của hệ vỏ và lệnh source . . . . . . . . . . . . . . . . . . . . . 124 5.10 Câu lệnh sh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125 vi MỤC LỤC 6 Sử dụng Midnight Commander 126 6.1 Cài đặt chương trình Midnight Commander . . . . . . . . . . . . . . 126 6.2 Vẻ ngoài của màn hình Midnight Commander . . . . . . . . . . . . 127 6.3 Trợ giúp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129 6.4 Sử dụng chuột . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130 6.5 Điều khiển các bảng . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131 6.5.1 Dạng danh sách tập tin . . . . . . . . . . . . . . . . . . . . . . 131 6.5.2 Những chế độ hiển thị khác . . . . . . . . . . . . . . . . . . . 134 6.5.3 Các tổ hợp phím điều khiển bảng . . . . . . . . . . . . . . . . 136 Danh sách hình vẽ 3.1 Màn hình khởi động của GRUB . . . . . . . . . . . . . . . . . . . . . 44 6.1 Midnight Commander tiếng Việt . . . . . . . . . . . . . . . . . . . . 127 6.2 Màn hình Midnight Commander . . . . . . . . . . . . . . . . . . . . 128 6.3 Hộp thoại chọn định dạng hiển thị . . . . . . . . . . . . . . . . . . . 131 6.4 Hộp thoại sắp xếp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134 6.5 Chế độ thông tin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135 6.6 Chế độ cây thư mục . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135 6.7 Chế độ xem nhanh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136 Danh sách bảng 1.1 Yêu cầu đối với phần cứng . . . . . . . . . . . . . . . . . . . . . . . . 11 2.1 Cấu trúc của sector khởi động chính . . . . . . . . . . . . . . . . . . 21 2.2 Nhu cầu sử dụng không gian đĩa của HĐH . . . . . . . . . . . . . . 28 3.1 Những câu lệnh đơn giản của Linux . . . . . . . . . . . . . . . . . . 46 3.2 Những phím soạn thảo dòng lệnh . . . . . . . . . . . . . . . . . . . . 50 3.3 Tổ hợp phím điều khiển lịch sử lệnh . . . . . . . . . . . . . . . . . . 52 3.4 Các phần chính của trợ giúp man . . . . . . . . . . . . . . . . . . . . 54 3.5 Phím sử dụng để xem trang man . . . . . . . . . . . . . . . . . . . . . 55 4.1 Cấu trúc thư mục của Linux . . . . . . . . . . . . . . . . . . . . . . . 66 4.2 Những tập tin thiết bị chính . . . . . . . . . . . . . . . . . . . . . . . 71 4.3 Những tùy chọn chính của lệnh cp . . . . . . . . . . . . . . . . . . . 81 4.4 Tiêu chí tìm kiếm của câu lệnh find. . . . . . . . . . . . . . . . . . . 85 4.5 Những tùy chọn chính của tar . . . . . . . . . . . . . . . . . . . . . 89 4.6 Những tùy chọn chính của chương trình gzip . . . . . . . . . . . . 92 4.7 Những tùy chọn chính của chương trình bzip2 . . . . . . . . . . . . 93 4.8 Những tùy chọn chính của câu lệnh mount . . . . . . . . . . . . . . 98 5.1 Các câu lệnh bộ lọc . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108 5.2 Thay thế các tham biến đặc biệt . . . . . . . . . . . . . . . . . . . . . 109 5.3 Ký tự xác định dạng dấu nhắc . . . . . . . . . . . . . . . . . . . . . . 111 5.4 Các ký tự tạo mẫu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116 6.1 Các tổ hợp phím di chuyển dùng chung . . . . . . . . . . . . . . . . . 129 6.2 Di chuyển trong trình xem tập tin . . . . . . . . . . . . . . . . . . . . 129 6.3 Di chuyển khi xem trợ giúp . . . . . . . . . . . . . . . . . . . . . . . 130 Lời mở đầu Đây là bản dịch cuốn “Linux cho người dùng” (sêri sách tự học) của Kostromin Victor Alexeevich cộng thêm một vài kinh nghiệm sử dụng Linux của người dịch. Bản gốc được viết trên tiếng Nga. Theo yêu cầu của Kostromin A. V., xin được đưa ra các liên kết tới bản gốc sau đây: http://rus-linux.net/book1.php?name=book1/oglavl http://linux-ve.chat.ru/ Cảm ơn Trước tiên cần cảm ơn Kostromin V. A. đã viết một cuốn sách về Linux cho người dùng mới tuyệt vời, hai bác Nguyễn Đại Quý và Nguyễn Đặng Hoàng Tuân đã giúp trong việc sử dụng LATEX. Bác Nguyễn Đại Quý đã đọc và sửa cho phiên bản 0.9. Xin hãy gửi thư nhắc người dịch tại [email protected] nếu như người dịch có quên ai đó. Bản quyền Cuốn “Tự học sử dụng Linux” này sử dụng bản quyền Creative Commons Public License 2.5 (http://creativecommons.org/licenses/by/2.5/). Tác giả Kostromin V. A. cũng như người dịch và cộng tác không chịu trách nhiệm về hậu quả do việc sử dụng cuốn sách này gây ra. Mọi đề nghị sửa đổi, thông báo lỗi chính tả, lỗi kiến thức của bản dịch cũng như đề nghị giúp đỡ dịch xin gửi cho Phan Vĩnh Thịnh theo địa chỉ [email protected]. Chương 1 HĐH Linux: lịch sử và các bản phân phối “Just for fun” – Linus Torvalds. Người dịch: Lịch sử luôn là điểm khởi đầu khi nghiên cứu một ngành khoa học nào đó. Không có ngoại lệ đối với Toán học, Vật lý, môn chuyên ngành của tôi – Hoá học và tất nhiên cả HĐH Linux. Trong chương đầu tiên của cuốn sách “Tự học sử dụng Linux” này chúng ta sẽ trả lời ngắn gọn cho câu hỏi “Linux là gì?”. Đồng thời nói đôi dòng về những điểm đặc biệt của Linux, yêu cầu của Linux đối với phần cứng, khái niệm bản phân phối Linux, và cách có được những bản phân phối này. Hơn thế nữa bạn đọc sẽ hiểu ít nhiều về OpenSource, GNU và FSF. 1.1 Thế nào là HĐH nói chung và Linux nói riêng 1.1.1 Các hệ điều hành dạng UNIX Hệ điều hành (HĐH) đó là một bộ các chương trình hỗ trợ việc điều khiển phần cứng của máy tính, tổ chức làm việc với các tập tin (trong đó có chạy và điều khiển việc thực hiện của các chương trình), và đồng thời thực thi sự giao tiếp với người dùng, tức là dịch các câu lệnh của người dùng và hiển thị kết quả làm việc của những lệnh này. Không có hệ điều hành thì máy tính không thực hiện được chức năng của mình. Trong trường hợp đó máy tính chỉ là một tập hợp các thiết bị điện tử không làm việc, không hiểu là để làm gì. Đến thời điểm hiện nay thì các hệ điều hành nổi tiếng nhất cho máy tính là Microsoft Windows (C) và UNIX. Windows bắt nguồn từ hệ điều hành MS-DOS trước đây làm việc trên các máy tính của hãng IBM. Hệ điều hành UNIX do nhóm các nhà phát triển Bell Labs viết ra vào năm 1969 dưới sự điều khiển của Dennis Ritchie, Ken Thompson và Brian Kernighan. Nhưng bây giờ khi nói đến hệ điều hành UNIX thường có ý không nói cụ thể một hệ điều hành cụ thể nào mà là một nhóm các hệ điều hành dòng UNIX (UNIX-liked OS). Chính bản thân từ UNIX (viết hoa tất cả các chữ cái) trở thành nhãn hiệu thương mại của tổng công ty AT&T.1 1Người dịch: Người mỹ “không ngại ngần” đăng ký nhãn hiệu thương mại bất kỳ thứ gì, kể cả Yoga mà bắt nguồn từ Ấn Độ. 1.1 Thế nào là HĐH nói chung và Linux nói riêng 3 Vào cuối những năm 70 của thế kỷ trước (thế kỷ XX) các nhà phát triển của trường đại học California ở Berkeley đã thêm vào mã nguồn của UNIX rất nhiều sự cải tiến trong đó có hỗ trợ giao thức2 TCP/IP (giao thức mạng chính hiện nay). Sản phẩm này nổi tiếng dưới tên BSD ("Berkeley Systems Distribution"). Điều đặc biệt ở chỗ bản quyền của sản phẩm cho phép người khác phát triển và cải tiến và chuyển kết quả thu được đến người thứ ba (cùng với mã nguồn hoặc không) với điều kiện là phải chỉ ra phần nào của mã được phát triển ở Berkeley. Hệ điều hành dòng UNIX, trong đó có BSD, lúc đầu được phát triển để làm việc với các máy tính nhiều người dùng – các mainframe. Nhưng dần dần cấu hình trang thiết bị của máy tính cá nhân cũng mạnh lên và hiện nay có khả năng cao hơn so với những mainframe của những năm 70 thế kỷ trước. Và và đầu những năm 90 một sinh viên của trường đại học Helsinki (Phần Lan), Linus Torvalds, đã bắt đầu phát triển một HĐH kiểu UNIX cho các máy tính cá nhân tương thích với IBM (IBM-compatible PC). 1.1.2 Một chút về lịch sử HĐH Linux vừa kỷ niệm sinh nhật lần thứ 15 của mình. Đây là bức thư mà Linus gửi vào nhóm tin tức comp.os.minix ngày 25 tháng 8 năm 1991 (được coi là ngày sinh nhật của HĐH này): From: [email protected] (Linus Benedict Torvalds) Newsgroups: comp.os.minix Subject: What would you like to see most in minix? Summary: small poll for my new operating system Message-ID: <[email protected]> Date: 25 Aug 91 20:57:08 GMT Organization: University of Helsinki Hello everybody out there using minix - I’m doing a (free) operating system (just a hobby, won’t be big and professional like gnu) for 386(486) AT clones. This has been brewing since april, and is starting to get ready. I’d like any feedback on things people like/dislike in minix, as my OS resembles it somewhat (same physical layout of the file-system (due to practical reasons) among other things). I’ve currently ported bash(1.08) and gcc(1.40), and things seem to work. This implies that I’ll get something practical within a few months, and I’d like to know what features most people would want. Any suggestions are welcome, but I won’t promise I’ll implement them :-) Linus ([email protected]) PS. Yes — it’s free of any minix code, and it has a multi-threaded fs. It is NOT portable (uses 386 task switching etc), and it probably never will support anything other than AT-harddisks, as that’s all I have :-(. Trong thư này Linus cho biết anh đang phát triển một hệ điều hành tự do cho các máy tính đời 386 (486) và yêu cầu những ai quan tâm cho biết những thành phần nào của hệ thống cho người dùng cần phải có đầu tiên. Những người dùng trong nhóm tin tức này đã làm việc dưới hệ điều hành Minux do giáo sư Andy 2protocol 4 HĐH Linux: lịch sử và các bản phân phối Tanenbaum viết ra để làm công cụ học tập cho các sinh viên lập trình. Minux làm việc trên các máy tính với bộ xử lý 286 và được Linus dùng làm mô hình cho HĐH mới. Tập tin phiên bản đầu tiên của Linux (phiên bản 0.01) được công bố trên Internet ngày 17 tháng 09 năm 1991. Linus Torvalds viết: “As I already men tioned, 0.01 didn’t actually come with any binaries: it was just source code for people interested in what linux looked like. Note the lack of announcement for 0.01: I wasn’t too proud of it, so I think I only sent a note to everybody who had shown interest.” (“Như tôi đã nói trước đây, 0.01 không đi kèm theo binary nào: nó chỉ là mã nguồn cho những ai muốn biết linux trông ra sao. Chú ý rằng không có thông báo cho bản 0.01: tôi không tự hào lắm về nó, vì thế chỉ gửi thông báo đến tất cả những ai muốn thể hiện sự quan tâm.”)3 Sau đó ngày 05 tháng 10 năm 1991 phiên bản 0.02 ra đời. Đây là phiên bản đã có thể làm việc trên máy. Nếu bạn đọc quan tâm đến lịch sử của HĐH này thì hãy đọc trang web sau: http://www.li.org/linuxhistory.php. Ở đó bạn sẽ nhận được thông tin chi tiết về lịch sử xuất hiện và phát triển Linux. Linus Torvalds không đăng ký bằng sáng chế cũng như không giới hạn việc phân phối HĐH mới này. Ngay từ đầu Linux đã được phân phối theo điều kiện của bản quyền General Public License (GPL)4thường dùng cho các phần mềm ứng dụng Open Source và dự án GNU. Theo tiếng lóng của Linux thì bản quyền này đôi khi được gọi là Copyleft. Về bản quyền này, Open Source và dự án GNU cần phải nói đến một cách đặc biệt. Vào năm 1984 nhà bác học người mỹ Richard Stallman sáng lập ra Tổ chức phần mềm tự do (FSF, Free Software Foundation) có trang chủ nằm tại địa chỉ http://www.fsf.org. Mục đích của tổ chức này là loại trừ tất cả những điều cấm đoán và hạn chế phân phối, sao chép, sửa đổi, nghiên cứu chương trình ứng dụng. Bởi vì tính đến thời điểm bắt đầu xây dựng tổ chức thì các công ty thương mại giữ rất cẩn thận các chương trình ứng dụng của mình, bảo vệ nó bằng các bằng sáng chế, các dấu hiệu bảo vệ quyền tác giả, giữ bí mật nghiêm ngặt mã nguồn của chương trình viết trên các ngôn ngữ bậc cao (như C++). Stallman cho rằng việc này rất có hại đối với phát triển chương trình ứng dụng, dẫn đến việc giảm chất lượng chương trình và sự có mặt của rất nhiều lỗi không xác định được trong những chương trình này. Tồi tệ nhất là làm chậm quá trình trao đổi ý tưởng trong ngành lập trình, làm chậm quá trình tạo ứng dụng mới vì mỗi nhà lập trình sẽ phải viết lại từ đầu một ứng dụng thay vì dùng đoạn mã nguồn đã có trong ứng dụng khác. Trong khuôn khổ Tổ chức phần mềm tự do đã bắt đầu làm việc dự án GNU (http://www.gnu.org) – dự án tạo chương trình ứng dùng miễn phí. GNU là từ viết tắt của GNU’s Not Unix, tức là những gì thuộc về dự án GNU không phải là một phần của Unix (vào thời gian đó thậm chí từ UNIX đã trở thành thương 3Người dịch: Rất thú vị là sau khi Linus Torvalds phát triển HĐH của mình thì giữa anh và giáo sư Andy Tanenbaum đã nổ ra một cuộc tranh cãi. Nếu bạn đọc quan tâm thì có thể tìm đọc những thư mà hai người này gửi cho nhau trong nhóm tin tức nói trên, hoặc tìm đọc cuốn “Linux: Just for fun”, một cuốn sách nói về đời tư của Linus Torvalds đến thời điểm anh làm cho Transmeta và việc phát triển HĐH Linux. 4Người dịch: Thật ra lúc đầu nhân Linux được phân phối theo bản quyền mà FSF không không nhận là tự do vì nghiêm cấm phân phối thương mại. Bản quyền này có thể tìm thấy trong những phiên bản đầu tiên của nhân trên ftp.kernel.org, ví dụ ftp://ftp.kernel.org/pub/linux/kernel/Historic/old-versions/RELNOTES 0.01. Bản quyền được đổi sang GPL từ phiên bản 0.12, hãy xem RELNOTES-0.12 theo địa chỉ ở trên. 1.1 Thế nào là HĐH nói chung và Linux nói riêng 5 hiệu, do đó không còn tự do). Trong “Manifesto GNU” (http://www.gnu.org/ gnu/manifesto.html) vào năm 1985 Stallman viết rằng động lực để ông sáng lập ra FSF và dự án GNU đó là sự khó chịu trong quyền sở hữu của một số người đối với chương trình ứng dụng. Những gì do dự án GNU phát triển đề là tự do, nhưng không có nghĩa là chúng được phân phối không có bản quyền và không được luật pháp bảo vệ. Những chương trình Open Source (Mã nguồn mở) được phân phối theo điều kiện của bản quyền General Public License (GPL). Bạn có thể đọc bản quyền này theo địa chỉ http://www.gnu.org/copyleft/gpl.html. Bản dịch tiếng Việt không chính thức nằm tại http://vi.openoffice.org/gplv.html. Nếu như nói một cách thật ngắn gọn thì bản chất của GPL như sau. Chương trình ứng dụng phân phối theo GPL được quyền phát triển, sửa đổi, chuyển hoặc bán cho người khác không hạn chế với một điều kiện là kết quả thu được cũng phải phân phối theo bản quyền copyleft. Điều kiện cuối là quan trọng và then chốt của bản quyền này. Nó bảo đảm rằng kết quả lao động của các nhà phát triển phần mềm tự do sẽ luôn luôn mở và không trở thành một phần của sản phẩm nào đó dùng bản quyền bình thường (ý nói sản phẩm đóng). Điều kiện này cũng phân biệt phần mềm tự do với phần mềm phân phối miễn phí. Nói như các nhà sáng lập ra FSF, thì bản quyền GPL “làm cho chương trình ứng dụng tự do và đảm bảo là chương trình này sẽ tự do”5. Gần như tất cả các chương trình ứng dụng phân phối theo điều kiện GPL có thể coi là miễn phí đối với người dùng (trong phần lớn các trường hợp để nhận được nó bạn chỉ phải trả tiền đĩa CD, DVD hoặc kết nối Internet). Điều đó không có nghĩa là các nhà lập trình không còn nhận được phần thưởng (tiền) cho công việc của mình. Ý tưởng chính của Stallman là ở chỗ không phải bán chương trình ứng dụng, mà bán chính sức lao động của nhà lập trình. Ở đây cần phải đưa ra ví dụ để bạn đọc hiểu rõ hơn: nguồn thu nhập có thể là các sản phẩm đi kèm hoặc dịch vụ cài đặt và cấu hình cho những máy tính mới hoặc phát triển cho những điều kiện làm việc mới, dạy cách sử dụng, v.v. . . Một phần thưởng tốt nữa đó là khi chương trình trở lên nổi tiếng thì tác giả của chương trình sẽ có điều kiện tìm một công việc có lương cao. Các nhà phát triển xvnkb (http://xvnkb.sf.net), unikey (http://unikey.org) và pdfLaTeX (http://www.tug.org), là những người hiểu rõ nhất điều này. Hãy viết thư cho họ để học hỏi kinh nghiệm! Trong khuôn khổ của hoạt động Open Source nói chung và dự án GNU nói riêng, đã phát triển một lượng đáng kể các chương trình ứng dụng, nổi tiếng nhất trong số chúng đó là trình soạn thảo Emacs và trình biên dịch GCC (GNU C Compliler) – trình biên dịch ngôn ngữ C tốt nhất hiện nay. Việc mở mã nguồn đồng thời nâng cao rất nhiều chất lượng của chương trình ứng dụng: tất cả những gì tốt nhất, những ý tưởng và cách giải quyết mới được phân phối rộng rãi ngay lập tức, còn các lỗi sẽ được nhận ra và sửa nhanh chóng. Ở đây chúng ta gặp lại cơ chế đào thải (hay tốt hơn là chọn lọc) tự nhiên như trong thuyết sinh học của Darwin. Cơ chế này bị kìm nén trong thế giới chương trình ứng dụng thương mại. 5Người dịch: Bạn đọc cũng nên biết là sắp tới sẽ có phiên bản thứ 3 của GPL (GPLv3). Cùng với sự ra đời của phiên bản thứ 3 này đã nảy ra rất nhiều tranh cãi xung quanh tính tự do của bản quyền. Tham gia vào tranh cãi có cả người viết ra nhân Linux đầu tiên – Linus Torvalds. 6 HĐH Linux: lịch sử và các bản phân phối Tuy nhiên bây giờ xin quay lại với lịch sử của Linux. Cần nói rằng Linus Torvalds chỉ phát triển phần nhân (kernel) của hệ điều hành. Nhân này “đậu” đúng vào miền “đất lành”, vì trong dự án GNU đã phát triển số lượng lớn các tiện ích khác nhau. Nhưng để chuyển GNU thành một HĐH hoàn chỉnh thì chỉ còn thiếu nhân. Dự án GNU cũng đã bắt đầu phát triển nhân cho riêng mình (được gọi là Hurd), nhưng vì lý do nào đó đã bị chậm lại. Vì thế sự xuất hiện của nhân Linux là rất đúng lúc. Nó đồng nghĩa với việc ra đời của một hệ điều hành mới tự do phân phối cùng với mã nguồn mở. Stallman tất nhiên đã đúng khi đòi hỏi hệ điều hành Linux phải được gọi là GNU/Linux. Nhưng đã thành lệ người dùng thường sử dụng tên gọi của nhân làm tên gọi của hệ điều hành, và chúng ta cũng làm như vậy trong cuốn sách này. 1.1.3 Đặc điểm chính của HĐH Linux Do mã nguồn Linux phân phối tự do và miễn phí, nên ngay từ đầu đã có rất nhiều nhà lập trình tham gia vào quá trình phát triển hệ thống. Nhờ đó đến thời điểm hiện nay Linux là hệ điều hành hiện đại, bền vững và phát triển nhanh nhất, hỗ trợ các công nghệ mới gần như ngay lập tức. Linux có tất cả các khả năng, đặc trưng cho các hệ điều hành đầy đủ tính năng dòng UNIX. Xin đưa ra đây danh sách ngắn gọn những khả năng này. 1. Nhiều tiến trình thật sự Tất cả các tiến trình là độc lập, không một tiến trình nào được cản trở công việc của tiến trình khác. Để làm được điều này nhân thực hiện chế độ phân chia thời gian của bộ xử lý trung tâm, lần lượt chia cho mỗi tiến trình một khoảng thời gian thực hiện. Cách này hoàn toàn khác với chế độ “nhiều tiến trình đẩy nha” được thực hiện trong Windows 95, khi một tiến trình phải nhường bộ xử lý cho các tiến trình khác (và có thể làm chậm trễ rất lâu việc thực hiện). 2. Truy cập nhiều người dùng Linux không chỉ là HĐH nhiều tiến trình, Linux hỗ trợ khả năng nhiều người dùng làm việc cùng lúc. Khi này Linux có thể cung cấp tất cả các tài nguyên hệ thống cho người dùng làm việc qua các terminal ở xa khác nhau. 3. Swap bộ nhớ lên đĩa Swap bộ nhớ cho phép làm việc với Linux khi dung lượng bộ nhớ có hạn. Nội dung của một số phần (trang) bộ nhớ được ghi lên vùng đĩa cứng xác định từ trước. Vùng đĩa cứng này được coi là bộ nhớ phụ thêm vào. Việc này có làm giảm tốc độ làm việc, nhưng cho phép chạy các chương trình cần bộ nhớ dung lượng lớn mà thực tế không có trên máy tính. 4. Tổ chức bộ nhớ theo trang Hệ thống bộ nhớ Linux được tổ chức ở dạng các trang với dung lượng 4K. Nếu bộ nhớ đầy, thì HĐH sẽ tìm những trang bộ nhớ đã lâu không được sử dụng để chuyển chúng từ bộ nhớ lên đĩa cứng. Nếu có trang nào đó trong số những trang này lại trở thành cần thiết, thì Linux sẽ phục hồi chúng từ đĩa cứng (vào bộ nhớ). Một số hệ thống Unix cũ và một số hệ thống hiện đại 1.1 Thế nào là HĐH nói chung và Linux nói riêng 7 (bao gồm cả Microsoft Windows) chuyển lên đĩa tất cả nội dung của bộ nhớ thuộc về những ứng dụng không làm việc tại thời điểm hiện thời (tức là TẤT CẢ các trang bộ nhớ thuộc về ứng dụng sẽ được lưu lên đĩa khi không đủ bộ nhớ) và như vậy kém hiệu quả hơn. 5. Nạp môđun thực hiện “theo yêu cầu” Nhân Linux hỗ trợ việc cung cấp các trang bộ nhớ theo yêu cầu, khi này chỉ phần mã cần thiết của chương trình mới nằm trong bộ nhớ, còn những phần mã không sử dụng tại thời điểm hiện tại thì nằm lại trên đĩa. 6. Cùng sử dụng chương trình Nếu cần chạy một lúc nhiều bản sao của cùng một ứng dụng nào đó6, thì Linux chỉ nạp vào bộ nhớ một bản sao của mã chương trình và tất cả các tiến trình giống nhau cùng sử dụng một mã này. 7. Thư viện chung Thư viện – bộ các quá trình (thao tác) được chương trình dùng để làm việc với dữ liệu. Có một số thư viện tiêu chuẩn được dùng cùng lúc cho vài tiến trình. Trên các hệ thống cũ những thư viện đó nằm trong mỗi tập tin chương trình, và thực hiện cùng lúc những chương trình này dẫn đến hao hụt bộ nhớ không đáng có. Trên các hệ thống mới (bao gồm Linux) có hỗ trợ làm việc với các thư viện động (dynamic) và tĩnh (static) được chia ra, và như vậy cho phép giảm kích thước bộ nhớ bị ứng dụng chiếm. 8. Bộ đệm động của đĩa Bộ đệm của đĩa đó là một phần bộ nhớ của hệ thống dùng làm nơi lưu những dữ liệu thường dùng của đĩa, nhờ đó nâng cao rất nhiều tốc độ truy cập tới những chương trình và tiến trình thường dùng. Người dùng MS DOS sẽ nhớ đến chương trình SmartDrive, chương trình này dự trữ một phần bộ nhớ có kích thước xác định để làm bộ đệm cho đĩa. Linux sử dụng hệ thống đệm linh động hơn: bộ nhớ được dự trữ cho đệm được tăng lên khi bộ nhớ không được sử dụng, và sẽ giảm xuống khi hệ thống hay tiến trình cần nhiều bộ nhớ hơn. 9. 100% tương ứng với tiêu chuẩn POSIX 1003.1. Hỗ trợ một phần các khả năng của System V và BSD POSIX 1003.1 (Portable Operating System Interface – giao diện của hệ điều hành lưu động) đưa ra giao diện tiêu chuẩn cho các hệ thống Unix, đó là một bộ các thủ tục ngôn ngữ C. Ngày nay giao diện này được tất cả các hệ điều hành mới hỗ trợ. Microsoft Windows NT cũng hỗ trợ POSIX 1003.1. Linux 100% tương ứng với tiêu chuẩn POSIX 1003.1. Thêm vào đó Linux còn hỗ trợ các khả năng của System V và BSD để tăng tính tương thích. 10. System V IPC Linux sử dụng công nghệ IPC (InterProcess Communication) để trao đổi thông tin giữa các tiến trình, để sử dụng tín hiệu và bộ nhớ chung. 6hoặc một người dùng chạy vài tiến trình giống nhau, hoặc nhiều người dùng chạy cùng một chương trình 8 HĐH Linux: lịch sử và các bản phân phối 11. Khả năng chạy chương trình của HĐH khác Trong lịch sử Linux không phải là hệ điều hành đầu tiên. Người ta đã viết ra hàng loạt các chương trình ứng dụng, trong đó có cả những chương trình có ích và không đến nỗi tồi, cho các HĐH đã phát triển trước Linux, bao gồm DOS, Windows, FreeBSD và OS/2. Để chạy những chương trình như vậy dưới Linux đã phát triển các trình giả lập (emulator) cho DOS, Windows 3.1, Windows 95 và Wine. Ngoài ra, còn có một loạt các chương trình tạo máy ảo7 mã nguồn mở cũng như sản phẩm thương mại: qemu, bochs, pearpc, vmware,. . . HĐH Linux còn có khả năng chạy chương trình dành cho bộ xử lý Intel của các hệ thống Unix khác, nếu hệ thống đáp ứng tiêu chuẩn iBCS2 (intel Binary Compatibility). 12. Hỗ trợ các định dạng hệ thống tập tin khác nhau Linux hỗ trợ một số lượng lớn các định dạng hệ thống tập tin, bao gồm các hệ thống tập tin DOS và OS/2, và cả các hệ thống tập tin mới, như reiserfs, HFS,. . . . Trong khi đó hệ thống tập tin chính của Linux, được gọi là Second Extended File System (ext2fs) và Third Extended File System (ext3fs) cho phép sử dụng không gian đĩa một cách có hiệu quả. 13. Khả năng hỗ trợ mạng Linux có thể gắn vào bất kỳ mạng nội bộ nào. Hỗ trợ tất cả các dịch vụ Unix, bao gồm Networked File System (NFS), kết nối từ xa (telnet, rlogin, ssh), làm việc trong các mạng TCP/IP, truy cập dial-up qua các giao thức SLIP và PPP,v.v. . . Đồng thời có hỗ trợ dùng Linux là máy chủ hoặc máy khách cho mạng khác, trong đó có chia sẻ (dùng chung, sharing) các tập tin và in từ xa trong các mạng Macintosh, NetWare và Windows. 14. Làm việc trên các phần cứng khác nhau Mặc dù đầu tiên HĐH Linux được phát triển cho máy tính cá nhân (PC) trên nền tảng Intel 386/486, bây giờ nó có thể làm việc trên tất cả các bộ vi xử lý Intel bắt đầu từ 386 và kết thúc là các hệ thống nhiều bộ xử lý Pentium IV, bao gồm cả các bộ xử lý 64bit. Đồng thời Linux còn làm việc trên rất nhiều bộ xử lý tương thích với Intel của các nhà sản xuất khác, như AMD. Trong Internet còn có những thông báo nói rằng trên các bộ xử lý Athlon và Duron của AMD Linux còn làm việc tốt hơn so với trên Intel. Ngoài ra còn có phiên bản Linux cho các bộ xử lý khác bao gồm ARM, DEC Alpha, SUN Sparc, M68000 (Atari và Amiga), MIPS, PowerPC và những bộ xử lý khác8. Xin được nói luôn là trong cuốn sách này chúng ta chỉ xem xét trường hợp Linux cho các máy tính tương thích với IBM. 1.2 Bản phân phối Linux Trong bất kỳ hệ điều hành nào cũng có thể chia ra 4 phần chính: nhân, cấu trúc (hệ thống) tập tin, trình dịch lệnh người dùng và các tiện ích. Nhân đó là 7cho phép sử dụng nhiều hệ điều hành trên một máy 8Người dịch: bản phân phối Linux hỗ trợ nhiều bộ xử lý nhất cần phải kể đến Debian (http://www. debian.org) 1.2 Bản phân phối Linux 9 thành phần chính, nòng cốt của HĐH, nó điều khiển các thiết bị phần cứng và điều khiển việc thực hiện chương trình. Cấu trúc tập tin (hệ thống tập tin) – là hệ thống lưu tập tin trên các thiết bị lưu. Trình dịch lệnh hay hệ vỏ (shell) – là chương trình tổ chức giao tiếp giữa máy tính và người dùng. Và cuối cùng các tiện ích – đó đơn giản là các chương trình riêng lẻ, nói chung không khác so với những chương trình bình thường khác mà người dùng có thể chạy, nhưng có chức năng chính là thực hiện các công việc dịch vụ (service). Như đã nói ở trên, nếu chính xác thì từ “Linux” chỉ có nghĩa là nhân. Vì thế khi nói về hệ điều hành nói chính xác hơn sẽ là “hệ điều hành dựa trên nhân Linux”. Nhân của HĐH Linux hiện thời đang được phát triển dưới sự lãnh đạo của Linus Torvalds và phân phối một cách tự do (với bản quyền GPL) giống như một số lượng khổng lồ các chương trình ứng dụng và tiện ích khác. Một trong những kết quả của việc phân phối tự do chương trình ứng dụng cho Linux đó là có nhiều công ty cũng như nhóm các nhà phát triển độc lập đã phát hành ra các bản Linux khác nhau được gọi là “bản phân phối Linux”. Bản phân phối – đó là một bộ các chương trình ứng dụng bao gồm tất cả bốn phần chính của HĐH, tức là nhân, hệ thống tập tin, hệ vỏ shell và các tiện ích, đồng thời còn có thêm các chương trình cho công việc hàng ngày của người dùng. Thông thường tất cả những chương trình nằm trong bản phân phối Linux đều dùng bản quyền GPL. Rất có thể xuất hiện trong bạn đọc ý nghĩ rằng bất kỳ ai cũng có khả năng cho ra bản phân phối Linux, hay nói đúng hơn là bất kỳ người nào không lười sưu tập các chương trình tự do. Và suy nghĩ đó có phần nào đúng. Tuy nhiên các nhà phát triển của một bản phân phối Linux cần tạo ra ít nhất một chương trình cài đặt để đưa HĐH lên máy tính trống không chưa có HĐH nào. Ngoài ra, cần tìm cách giải quyết sự phụ thuộc và mâu thuẫn giữa các gói (và giữa các phiên bản của gói) chương trình. Và như chúng ta sẽ thấy ở sau đó không phải là bài toán đơn giản. Tuy vậy, trên thế giới đang có hàng trăm (hàng nghìn?) bản phân phối Linux và mỗi ngày lại xuất hiện các bản mới. Có thể tìm thấy danh sách tương đối đầy đủ cùng với đặc điểm ngắn gọn của mỗi bản phân phối trên http://www. linuxhq.com (còn có một số bản phân phối khác tiếng Anh). Ngoài ra, trên trang đó cũng như nhiều trang web khác còn có liên kết đến những danh sách bản phân phối khác, vì thế nếu muốn có thể tìm thấy tất cả những gì có trên thế giới (hầu hết những trang này dùng tiếng Anh và các bản phân phối Việt Nam ít được nói đến). Một vài tác giả đã thử phân loại các bản phân phối dựa trên những tiêu chí khác nhau: ˆ cấu trúc hệ thống tập tin ˆ chương trình cài đặt ˆ phương tiện dùng để cài đặt các gói chương trình ˆ thành phần của các tiện ích và chương trình ứng dụng có trong bản phân phối. Mặc dù hầu hết các tác giả cho rằng sự khác nhau giữa các bản phân phối là không cơ bản. Nhưng hiện nay có thể chia ít nhất 3 nhóm bản phân phối, mà đại diện của mỗi nhóm là Red Hat, Slackware và Debian. 10 HĐH Linux: lịch sử và các bản phân phối Vậy thì cần lựa chọn bản phân phối theo tiêu chuẩn nào? Theo ý kiến của tác giả thì đối với người dùng Việt Nam có hai tiêu chuẩn: thứ nhất phải có giao diện người dùng tiếng Việt và thứ hai phải có một nhóm các nhà phát triển hỗ trợ bản phân phối này. Và tốt nhất nếu nhóm các nhà phát triển này nhận được nguồn lợi từ sản phẩm Linux của mình, tức là làm việc như một công ty thương mại. Thậm chí chỉ trong khoảng thời gian không lâu mà tôi sử dụng Linux (khoảng 5 năm) đã có nhiều bản phân phối Việt Nam cũng như nước ngoài đã chào tạm biệt thế giới Linux vì nhóm hỗ trợ của chúng không thu được nhiều lợi nhuận và sau đó một thời gian ngừng hỗ trợ tác phẩm của mình. Đối với người dùng Linux Việt Nam hiện thời có hai lựa chọn: thứ nhất, sử dụng các sản phẩm Linux tiếng Việt do một số người tự nguyện duy trì; thứ hai, sử dụng các sản phẩm Linux lớn có hỗ trợ tiếng Việt. Chúng ta sẽ nói đến hai sự lựa chọn này một cách kỹ càng hơn. Lựa chọn thứ nhất, theo ý kiến của tôi không được ưu tiên ở đây. Lý do chính là chưa đạt được tiêu chuẩn thứ hai nêu trên. Hiện thời có một bản phân phối như vậy: vnlinux-CD (cùng với một vài biến thể) do anh Larry Nguyễn, một Việt kiều ở Mỹ duy trì. Lựa chọn thứ hai đó là sử dụng các bản phân phối hỗ trợ tiếng Việt tốt như Debian, Ubuntu và Mandriva, openSuSE cũng đang dần dần hỗ trợ tiếng Việt (http://vi.opensuse.org). Lựa chọn thứ hai này được ưu tiên vì: ˆ chúng có hỗ trợ tiếng Việt và càng ngày càng hoàn thiện ˆ chúng có trình cài đặt tốt, hỗ trợ nhiều phần cứng khác nhau ˆ có thể cài đặt thêm các phần mềm khác một cách dễ dàng phần lớn chương trình đã được biên dịch sẵn cho mọi yêu cầu của người dùng ˆ những bản phân phối này được một nhóm các nhà phát triển duy trì, cập nhật thường xuyên thông thường là theo một lịch định sẵn. Ngoài ra còn đảm bảo là bạn sẽ nhận được phiên bản mới của nó trong tương lai. Không sợ trường hợp “đem con bỏ chợ”. Để kết thúc câu chuyện về lựa chọn bản phân phối Linux cần nói thêm là gần đây bác Nguyễn Đại Quý (http://vnoss.org) đã cho ra đời một bản phân phối mới hướng về người dùng Việt Nam – FCxVnOSS. Bản phân phối này dựa trên nền tảng của FC cộng thêm giao diện tiếng Việt và một số ứng dụng “mang tính Việt Nam” như chương trình gõ tiếng Việt, từ điển tiếng Việt,. . . Cần nói vài lời về đánh số phiên bản. Cần phân biệt số phiên bản của bản phân phối và số phiên bản của nhân. Khi nói đến phiên bản của Linux thường có ý là phiên bản nhân (vì một hệ điều hành là Linux chỉ khi nó sử dụng nhân Linux). Vì Linus Torvalds tiếp tục điều hành việc phát triển nhân, nên phiên bản của nhân tăng lên theo thứ tự, chứ không phân nhánh và nhân lên giống như trường hợp bản phân phối. Phiên bản nhân Linux thường được ký hiệu bằng ba số9, phân cách nhau bởi dấu chấm. Ví dụ, bản phân phối openSuSE Linux 10.1 được dựa trên nhân phiên bản 2.6.16.13, tức là Linux phiên bản 2.6.16.13. Phiên bản nhân với số thứ hai 9Người dịch: Điều này chỉ đúng với các phiên bản nhân trước 2.6. Từ 2.6 trở đi Linus và các nhà phát triển khác thử nghiệm dùng bốn số. 1.3 Yêu cầu đối với máy tính 11 lẻ (ví dụ, 2.5.0) thường không được sử dụng để tạo các bản phân phối, vì đó là phiên bản thử nghiệm (chỉ dành cho phát triển). Chúng được dành cho những người tình nguyện có mong muốn thử nghiệm để tìm ra các lỗi. Tất nhiên phiên bản như vậy có thể làm việc, nhưng không bền vững. Phiên bản với số thứ hai chẵn (ví dụ 2.6.16.13) được coi là làm việc ổn định. Tất nhiên là bạn có thể cài đặt bất kỳ phiên bản nào, nhưng đối với người dùng mới thì nên chọn phiên bản nhân với số thứ hai trong phiên bản là chẵn. Nếu cài đặt một bản phân phối đầy đủ thì đương nhiên lựa chọn nhân đã được các nhà phát triển làm giùm bạn đọc, nhưng cần biết cách đánh số phiên bản nếu khi nào đó bạn muốn cập nhật nhân Linux của mình. 1.3 Yêu cầu đối với máy tính Tôi đã đọc ở đâu đó nói rằng có những phiên bản Linux đặc biệt, làm việc thậm chí trên bộ xử lý 8086 với 512Kbyte bộ nhớ, còn phiên bản đặc biệt có thể chạy từ một hoặc hai đĩa mềm không cần đĩa cứng thì tôi đã gặp. Vì thế nếu bạn có một cái máy tính cũ, trên đó không thể chạy nổi Windows, thì có thể sử dụng nó để học Linux và rất có thể sẽ ngạc nhiên về khả năng của HĐH này. Nhưng trong cuốn sách này chúng ta sẽ không xem xét những trường hợp đặc biệt như vậy. Vì HĐH Linux sử dụng chế độ bảo vệ của bộ vi xử lý, nên để cài đặt HĐH này cần ít nhất là một máy tính có bộ xử lý 386. Theo các nguồn thông tin khác nhau thì tất cả các biến thể đều dùng tốt: SX, DX v.v. . . Xin đừng lo lắng, những máy tính sản xuất gần đây đáp ứng được toàn bộ những yêu cầu đã đưa ra và sẽ đưa ra dưới đây. Yêu cầu đối với phần cứng của hệ thống muốn cài đặt Linux còn được xác định bởi lựa chọn phần mềm của người dùng (và tức là sẽ phụ thuộc vào phiên bản của các phần mềm và ít nhiều vào bản phân phối). Bảng 1.1 dưới đây sẽ đưa ra một vài con số chỉ với mục đích giúp bạn đọc làm quen, những con số này là không chính xác10 nhưng không khác biệt nhiều giữa các bản Linux khác nhau. Bảng 1.1: Yêu cầu đối với phần cứng Mong muốn của người dùng Yêu cầu, MB Bộ nhớ Đĩa cứng Yêu cầu nhỏ nhất: chỉ làm việc trong giao diện văn bản với dòng lệnh của shell, có đủ một số ứng dụng người dùng như vim, emacs,. . . 8 200 Dùng được giao diện đồ hoạ X Window cùng với một số trình quản lý cửa sổ nhỏ nhẹ như icewm, fluxbox, windowmaker. 32 400 Dùng môi trường làm việc đồ hoạ KDE. 128 1000 Chạy các ứng dụng cần nhiều bộ nhớ (như GIMP, các ứng dụng nằm trong KOffice, OpenOffice.org). 256 1500 Như vậy Linux có một ưu điểm lớn đó là khả năng làm việc thậm chí trên 10Người dịch: bản gốc đưa ra một bản đã quá cũ, tôi xin đưa ra một bản mới dựa trên cơ sở của openSuSE 10.1. 12 HĐH Linux: lịch sử và các bản phân phối những máy rất cũ, mà trước đây chỉ có thể dùng MS DOS (tất nhiên là trong trường hợp này chúng ta chỉ thu được chế độ dòng lệnh, nhưng điều này không ngăn cản việc dùng các máy tính cũ làm việc có lợi ví dụ làm router11). Để bắt đầu học Linux thì chỉ cần có một máy tính với bộ xử lý 486, 16MB bộ nhớ và ổ cứng khoảng 300MB. Tất nhiên đối với dung lượng bộ nhớ cũng như cấu hình máy nói chung thì máy càng mạnh, càng nhiều bộ nhớ, ổ cứng càng rộng thì càng tốt. Không có gì là thừa thãi. Người dịch: Để kết thúc xin đưa ra đây trường hợp cấu hình máy của tôi: bộ xử lý 686, bộ nhớ 256Mb (+256Mb swap), 10GB ổ cứng dành cho cài đặt Linux, phần còn lại dành cho dữ liệu. Tôi hiện sử dụng openSuSE Linux 10.1 với môi trường làm việc KDE. Có thể làm việc đồng thời nhiều ứng dụng yêu cầu: OpenOffice.org, KBabel, Kile (dùng để viết những dòng này), StarDict (chương trình từ điển), Konqueror, GIMP. Nếu máy tính của bạn có thể làm việc với các hệ điều hành Windows 2000 và Windows XP thì việc chạy Linux trên nó sẽ không có gì khó khăn. 1.4 Lấy Linux ở đâu?12 Và trong phần cuối của chương thứ nhất chúng ta sẽ trả lời ngắn gọn cho câu hỏi “Lấy Linux ở đâu?”. Như đã nói ở trên, Linux cùng với một số lượng khổng lồ các chương trình ứng dụng được phân phối gần như miễn phí. Có nghĩa là người dùng không có ý định thay đổi chương trình hoặc mua bán những chương trình này, thì có toàn quyền sao chép toàn bộ bản phân phối Linux hoặc một phần bất kỳ của nó ở chỗ người quen, hoặc tải xuống từ Internet hoặc mua đĩa CD (DVD) Linux ở chỗ những người bán hàng đâu đó trên hè phố mà không sợ bị truy cứu vì vi phạm bản quyền (các chương trình có bản quyền thương mại thường dùng từ “sự đồng ý” giữa người dùng và nhà phân phối) của các nhà (công ty) phát triển. Trong số ba phương án kể trên thì đối với người dùng Linux Việt Nam phương án mua CD, DVD là tốt nhất. Cần nói thêm là những đĩa ghi vỉa hè thường có lỗi và có thể gây mất dữ liệu hoặc làm hỏng phần cứng. Tốt hơn hết là nên mua đĩa của một công ty máy tính hoặc qua một cửa hàng trên mạng. Khi đó còn có khả năng lựa chọn và có bảo đảm là sẽ đổi được đĩa xấu. Tất nhiên là chênh lệnh giá thành đĩa phải không quá cao, giá thành bán Linux bao nhiêu đó là quyền của người bán (ngoài ra giá thành cao còn có ở các bản phân phối chuyên nghiệp như Xandros, Novell Desktop,. . . ). Hiện giờ trên mạng Việt Nam đã xuất hiện một vài cửa hàng bán đĩa Linux. Địa chỉ cụ thể xin không đưa ra ở đây vì quảng cáo trong thế giới hiện đại đã không còn là miễn phí. Và việc giấu địa chỉ không làm ảnh hưởng đến những ai có mong muốn mua Linux để nghiên cứu. Cần nói riêng về hệ thống phát đĩa với bản phân phối Ubuntu một cách miễn phí. Chỉ cần vào địa chỉ http://shipit.ubuntu.com đăng ký số lượng đĩa bạn cần, tất nhiên có kèm theo địa chỉ bưu điện, sau một thời gian khoảng 1 tháng – 11máy giúp chuyển hướng các gói mạng 12Phần này do người dịch viết 1.4 Lấy Linux ở đâu? 13 1 tháng rưỡi bạn sẽ nhận được chúng. Theo tôi nghĩ đây là cách tốt nhất nếu bạn không có điều kiện để mua đĩa. Chương 2 Cài đặt HĐH Linux trên cùng máy tính với Windows “Software is like sex, it’s good when it’s free” – Linus Torvalds. Thông thường trên các đĩa của bản phân phối Linux đã có hướng dẫn ngắn gọn cách cài đặt Linux. Ngoài ra, trên Internet bạn có thể tìm thấy rất nhiều cuốn sách nó về vấn đề này. Và tất cả các bản phân phối lớn (Debian, Slackware, Fedora, Mandrake, ...) đều đã có cuốn hướng dẫn cài đặt rất chi tiết, cho mọi tình huống sử dụng. Hãy chờ đợi và hy vọng trong tương lai không xa sẽ có bản dịch Tiếng Việt của những cuốn sách này. Chính vì vậy trong cuốn sách này, tác giả sẽ không đưa ra các bước cụ thể của việc cài đặt, mà xin bạn đọc hãy tìm các cuốn hướng dẫn tương ứng. Thay vào đó là những gì bạn cần biết và chuẩn bị trước khi cài đặt, đồng thời, tác giả sẽ đi cụ thể và chi tiết vào những gì đặc biệt khi cài đặt Linux trên máy tính đã có một trong các hệ điều hành (HĐH) Windows cũng như việc khởi động nhiều hệ điều hành. Vấn đề ở chỗ, phần lớn người dùng Việt Nam trước khi bắt đầu học Linux đã làm quen và rất có thể đã có kinh nghiệm sử dụng các HĐH dòng Windows như Windows 98, Windows 2000 và Windows XP. Và trên thực tế thì tạm thời Linux khó có thể là HĐH đầu tiên mà người dùng làm quen. Như thế, một cách tự nhiên, nếu người dùng đã làm việc với HĐH Windows và quyết định thử nghiệm với Linux, thì họ không muốn mất đi môi trường làm việc quen thuộc của mình, cùng với những gì đã tạo ra và đã cấu hình dưới dưới Windows. Rất may là không nhất thiết phải đánh mất tất cả những thứ đó. Bởi vì trên một máy tính có thể cùng “chung sống hòa bình” hai HĐH và thậm chí nhiều hơn nữa (nếu có đủ chỗ trên đĩa!). Chính vì thế, ở phía dưới sẽ nói cách cài đặt HĐH Linux trên máy tính đã cài đặt một trong các hệ điều hành của hãng Microsoft. 2.1 Chuẩn bị cài đặt Có thể cài đặt Linux bằng một trong các cách sau: ˆ Từ ổ đĩa CD-ROM ˆ Từ bản sao chép Linux trên ổ đĩa cứng ˆ Từ máy chủ tập tin của mạng nội bộ qua NFS; 2.1 Chuẩn bị cài đặt 15 ˆ Từ máy tính khác trong mạng nội bộ qua SMB; ˆ Từ máy tính ở xa (ví dụ từ Internet) qua giao thức FTP; ˆ Từ một máy chủ WWW qua giao thức HTTP. Theo ý kiến cá nhân của tác giả thì thuận tiện và có tính thực tế nhất là cài đặt Linux từ CD-ROM, hơn nữa việc mua các đĩa CD bây giờ không gây khó khăn gì. Trước khi bắt đầu cài đặt, hãy thu thập (hãy viết lên một tờ giấy) tất cả những thông tin cấu hình cần thiết của máy tính. Nếu như máy tính của bạn tạm thời vẫn còn làm việc dưới HĐH Windows 95/98/2000/XP, thì bạn sẽ tìm thấy rất nhiều thông tin nếu nhấn chuột phải vào biểu tượng My Computer, chọn lệnh Properties. Ở đây bạn có thể tìm thấy gần hết tất cả thông tin cần thiết. Nếu như bạn không thấy thông tin nào đó, thì cần tìm kiếm theo các cách khác, kể cả việc mở vỏ máy và đọc những dòng chữ trên thiết bị. Để giúp bạn đọc, xin được đưa ra đây danh sách những thông tin cần thu thập. Xin đừng lười biếng và hãy cố gắng ghi càng nhiều dữ liệu về một thiết bị càng tốt (tất cả những thông tin có thể tìm thấy), những dữ liệu này sẽ cần đến khi cài đặt và cấu hình, khi mà việc tìm kiếm chúng sẽ khó khăn hơn. ˆ BIOS: – nhà sản xuất; – số hiệu phiên bản. ˆ Controller ổ đĩa cứng: loại (IDE hay SCSI) và dung lượng của ổ đĩa (nếu như bạn đọc dùng đĩa IDE, thì cần kiểm tra xem BIOS có hỗ trợ việc truy cập ở chế độ LBA hay không): – hda (Master trên controller số 1 hay Primary Master); – hdb (Slave trên controller số 1 hay Primary Slave); – hdc (Master trên controller số 2 hay Secondary Master); – hdd (Slave trên controller số 2 hay Secondary Slave). – nhà sản xuất và số mẫu mã của adapter SCSI (nếu có). ˆ Dung lượng của bộ nhớ (tính bằng Kilobyte ˆ CD-ROM: – Giao diện (IDE, SCSI, hay giao diện khác); – đối với các ổ đĩa CD-ROM không phải IDE, cũng như SCSI - nhà sản xuất và số mẫu mã. ˆ Chuột: – loại chuột (serial, PS/2, hay bus mouse); – giao thức (Microsoft, Logitech, MouseMan, v.v. . . ); 16 Cài đặt HĐH Linux trên cùng máy tính với Windows – số nút; – đối với chuột cắm vào cổng nối tiếp thì cần số thứ tự của cổng đó. ˆ Cạc màn hình – nhà sản xuất; – số mẫu mã (hay chipset sử dụng) – dung lượng bộ nhớ; ˆ Màn hình – nhà sản xuất – số mẫu mã; – các giá trị giới hạn (min, max) của tần số làm mới theo chiều dọc và theo chiều ngang (những giá trị này bạn đọc chỉ có thể tìm thấy trong tài liệu đi kèm với màn hình, Windows không hiển thị những giá trị này, và chúng rất quan trọng trong khi cấu hình giao diện đồ họa). ˆ Nếu như bạn đọc muốn kết nối mạng (mà UNIX nói chung là HĐH dành cho mạng), thì hãy ghi lại những dữ liệu sau: – nhà sản xuất và số mẫu mã cạc mạng; – địa chỉ IP của mình; – tên của máy tính trong mạng; – mặt nạ mạng con (subnet mask); – địa chỉ IP của gateway; – địa chỉ IP của các máy chủ tên miền (DNS server); – địa chỉ IP của máy chủ WINS(Windows Internet Name Service); – tên miền của công ty bạn đọc. ˆ Loại và nhà sản xuất cạc âm thanh và game controller (nếu như có) 2.2 Phòng xa và những lời khuyên Trước khi cài đặt HĐH Linux sau Windows, rất nên thực hiện vài thao tác “phòng xa” (“phòng cháy hơn chữa cháy”). Vì rất có thể bạn đọc sẽ phải phân vùng lại ổ đĩa, thay đổi bản ghi khởi động (Boot Record) và làm việc với các tập tin khởi động cũng như các tập tin cấu hình. Các thao tác này không phải lúc nào cũng đem lại đem lại một kết quả theo ý muốn, và trong trường hợp xấu có thể máy tính của bạn đọc sẽ không khởi động nữa. Có biết cách thoát ra khỏi tình huống này và phục hồi dữ liệu cần thiết không đó còn là một câu hỏi. Nhưng rơi vào tình huống như vậy hết sức dễ dàng nhất là với người dùng lần đầu tiên cài đặt Linux. Chính vì vậy, đầu tiên, cần tạo một đĩa mềm khởi động hay một đĩa mềm giúp phục hồi hệ thống (nếu bạn đọc còn chưa tạo). Thứ hai, cần ghi lại những dữ liệu có giá trị (backup). Và thứ ba, chuẩn bị các tập tin (đĩa mềm, CD) cài đặt 2.2 Phòng xa và những lời khuyên 17 cho hệ thống cũ. Một lời khuyên quan trọng khác: nếu có gì đó xảy ra không theo ý muốn thì không nên hoang mang. Xin chia sẻ một kinh nghiệm buồn: khi lần đầu tiên tác giả cài Linux trên máy tính đã có Windows NT, và kết quả là máy tính không thể khởi động được. Không hiểu hết vấn đề tác giả nghĩ là không còn cách gì khác ngoài định dạng lại ổ đĩa và cài đặt lại từ đầu. Bây giờ thì tác giả đã hiểu là có thể phục hồi lại nếu như không quyết định quá vội vàng. Vì vậy có thể nói rằng Werner Almesberger đúng, khi trong hướng dẫn sử dụng LILO có đưa ra những lời khuyên sau cho người dùng khi rơi vào trường hợp khó khăn như vậy: ˆ Không hoảng hốt. Nếu như có gì đó không làm việc, hãy thử mọi cách để tìm ra nguyên nhân, kiểm tra lại nhiều lần thao tác của mình. Chỉ sau khi đó mới thực hiện các bước sửa lỗi. ˆ Hãy đọc tài liệu. Đặc biệt trong các trường hợp, khi hệ thống làm những gì bạn đọc không mong đợi. Xin thêm một lời khuyên phổ biến sau: * Hãy xem các tập tin log, tức là các tập tin ghi lại sự kiện của hệ thống (cần tìm chúng trong thư mục /var/log). Như đã nói ở trên, quá trình cài đặt HĐH Linux nói riêng không phải là đề tài của cuốn sách. Người dùng cần tìm các cuốn hướng dẫn tương ứng. Tuy nhiên, tác giả cũng muốn đưa ra vài lời khuyên để giúp người dùng đưa ra quyết định trong khi cài đặt. Thứ nhất, đừng vội vàng và hãy chú ý đọc những thông báo sẽ hiển thị trên màn hình, và hãy suy nghĩ kỹ khi chọn câu trả lời. Để minh chứng cho lời khuyên này xin được kể lại trường hợp khi tác giả cài Red Hat 7.1, và tự động nhấn lên nút Next, vì cho rằng phương án theo mặc định là đủ. Kết quả là tác giả không thể truy cập được đến máy này qua các giao thức mạng (telnet, ftp, NFS, Samba), mặc dù đã cấu hình giao diện mạng cho máy. Nguyên nhân là trong phương án theo mặc định thì tường lửa được cài đặt, và tường lửa đóng hết các truy cập từ mạng. Để mở truy cập này, thì trong quá trình cài đặt cần chỉ rõ các dịch vụ được mở. Nhưng chúng ta quá vội vàng! Thứ hai, tác giả khuyên không nên đồng ý với việc tự động khởi động vào giao diện đồ họa. Vì cuối cùng người dùng không khó khăn gì khi gõ câu lệnh startx, còn việc cấu hình giao diện đồ họa (nếu có gì đó làm việc không đúng) với người dùng mới rất khó thành công. Sau khi làm xong các công việc phòng xa, cần quyết định sẽ tổ chức khởi động nhiều HĐH như thế nào, chuẩn bị các ổ đĩa (phân vùng) để cài đặt, tức là cần chia ổ đĩa thành số phân vùng cần thiết. Nhưng trước khi chuyển sang các bước cụ thể để chuẩn bị ổ đĩa, xin được nói qua một chút về cấu trúc của đĩa và quá trình khởi động HĐH. Nếu ai đó không đủ kiên nhẫn để đọc phần lý thuyết này, thì có thể bỏ qua chúng và chuyển thẳng đến vấn đề chọn chương trình khởi động. 18 Cài đặt HĐH Linux trên cùng máy tính với Windows 2.3 Phân vùng trên đĩa và quá trình khởi động 2.3.1 Thế nào là cấu trúc “hình học của đĩa” Như bạn đọc biết, đĩa cứng gồm vài đĩa có phủ lớp từ tính, nằm trên cùng một trục và quay với vận tốc lớn. Đọc/Ghi dữ liệu được thực hiện bởi các đầu đọc nằm giữa các đĩa này, di chuyển từ tâm đĩa ra rìa ngoài của đĩa. Vòng tròn đầu đọc vẽ ra trên các đĩa khi quay quanh chúng gọi là rãnh (track), còn tập hợp các rãnh nằm chồng lên nhau gọi là cylinder. Mỗi rãnh lại chia thành các sector, và có thể ghi vào mỗi sector 512 byte thông tin. Vì thế đặc điểm của một ổ đĩa thường là tập hợp ba sô: số cylinder/số rãnh trong cylinder/số sector trên rãnh hay còn viết tắt là C/H/S (ba chữ cái đầu tiên của các thuật ngữ Tiếng Anh tương ứng: Cyliner/Head/Sector). Ba số này gọi là cấu trúc “hình học của đĩa”. Đĩa với cấu trúc hình học C/H/S có dung lượng C*H*S*512 byte. Đĩa cứng là các thiết bị khối, tứ là đọc và ghi thông tin theo các khối, và kích thước nhỏ nhất của khối bằng một sector (512 byte). Để có thể ghi thông tin lên đĩa, cần đặt đầu đĩa đúng vị trí, tức là chỉ cho controller biết cần ghi thông tin này vào sector nào. Sector được đánh địa chỉ theo số thứ tự cylinder, số thứ tự đầu đọc (hay rãnh) và số thứ tự sector trên rãnh. 2.3.2 Phân vùng và bảng phân vùng của đĩa Trong các hệ thống Intel ổ đĩa thường được chia thành các phân vùng. Rất có thể nguyên nhân của việc phân vùng là nguyên nhân lịch sử: các phiên bản MS-DOS đầu tiên không thể sử dụng được các đĩa lớn, mà dung lượng đĩa lại phát triển nhanh hơn khả năng của DOS. Khi đó đã nghĩ ra việc chia ổ đĩa thành các phân vùng. Để làm được điều này, trong sector số 0 của đĩa (sector số 0 của rãnh đầu tiên trong cylinder số 0) ghi nhớ bảng chia ổ đĩa thành các phân vùng (partition table). Mỗi phân vùng được dùng như một đĩa vật lý riêng rẽ. Một trường hợp nói riêng đó là trong các phân vùng khác nhau có thể cài đặt các hệ điều hành khác nhau. Bảng phân vùng chứa 4 bản ghi 16 byte cho 4 phân vùng chính. Mỗi bản ghi có cấu trúc như sau: struct partition { char active; /* 0x80: phân vùng kích hoạt, 0: không kích hoạt */ char begin[3]; /* CHS sector đầu tiên, 24 bit char type; /* loại phân vùng (ví dụ, 83 -- LINUX_NATIVE) */ char end[3]; /* CHS sector cuối cùng, 24 bit */ int start; /* số của sector đầu tiên (32-bit, tính từ 0) */ int length; /* số sector có trong phân vùng (32 bit) */ }; Bảng phân vùng đĩa thường được tạo bởi chương trình fdisk. Trên HĐH Linux ngoài chương trình fdisk “truyền thống” (tuy vậy rất khác so với chương trình fdisk trong MS-DOS và Windows), còn có hai chương trình để làm việc với phân vùng đĩa: cfdisk và sfdisk. Chương trình cfdisk, giống như fdisk chỉ dành để làm việc với bảng phân vùng đĩa: nó không quan tâm chú ý đến thông tin có trên đĩa. Chỉ khác biệt với fdisk ở giao diện thuận tiện: chỉ dẫn sử dụng 2.3 Phân vùng trên đĩa và quá trình khởi động 19 lệnh và hệ thống trình đơn (thực đơn). Chương trình sfdisk có vài khả năng cao hơn, ví dụ, cho phép thao tác trên các phân vùng đã có của đĩa. DOS sử dụng trường begin và end của bảng phân vùng và Interrupt 13 của BIOS (Int 13h) để truy cập tới đĩa, vì thế không thể sử dụng đĩa có dung lượng lớn hơn 8,4 Gbyte, ngay cả với các BIOS mới (về vấn đề này sẽ nói đến ở sau), còn phân vùng thì không thể lớn hơn 2,1 Gbyte (nhưng đây là do hạn chế của hệ thống tập tin FAT16). Linux thì chỉ sử dụng trường start và length của bảng phân vùng đĩa và hỗ trợ các phân vùng chứa đến 232 sector, tức là dung lượng có thể đạt 2 Tbyte Vì trong bảng chia ổ đĩa chỉ có 4 dòng cho các phân vùng, số phân vùng chính trên đĩa ngay từ đầu dã hạn chế: không thể lớn hơn 4. Khi mà 4 phân vùng trở thành ít, thì người ta sáng chế ra phân vùng lôgíc. Một trong số các phân vùng chính trở thành mở rộng (loại phân vùng - 5 hay F hay 85 trong hệ cơ số mười sáu). Và trong phân vùng mở rộng người ta tạo ra các phân vùng lôgíc. Phân vùng mở rộng không được sử dụng trực tiếp mà chỉ dùng để ghi các phân vùng lôgíc. Sector đầu tiên của phân vùng mở rộng ghi nhớ bảng phân vùng với bốn đầu vào: một dùng cho phân vùng lôgíc, một cho phân vùng mở rộng khác, còn hai cái còn lại không được sử dụng. Mỗi phân vùng mở rộng có một bảng chia của mình, trong bảng này, cũng giống như trong phân vùng mở rộng chính, chỉ sử dụng có hai dòng để đưa ra một phân vùng lôgíc và một phân vùng mở rộng. Như vậy, thu được một chuỗi các mắt xích từ bảng phân vùng, mắt xích đầu tiên mô tả ba phân vùng chính, và mỗi mắt xích tiếp theo – một phân vùng lôgíc và vị trí của bảng tiếp theo. Chương trình sfdisk trên Linux cho thấy toàn bộ chuỗi này: [root]# sfdisk -l -x /dev/hda Disk /dev/hda: 784 cylinders, 255 heads, 63 sectors/track Units = cylinders of 8225280 bytes, blocks of 1024 bytes, counting from 0 Device Boot Start End #cyls #blocks Id System /dev/hda1 * 0+ 189 190- 1526143+ 6 FAT16 /dev/hda2 190 783 594 4771305 5 Extended /dev/hda3 0 — 0 0 0 Empty /dev/hda4 0 — 0 0 0 Empty /dev/hda5 190+ 380 191- 1534176 6 FAT16 — 381 783 403 3237097+ 5 Extended — 190 189 0 0 0 Empty — 190 189 0 0 0 Empty /dev/hda6 381+ 783 403- 3237066 7 HPFS/NTFS — 381 380 0 0 0 Empty — 381 380 0 0 0 Empty — 381 380 0 0 0 Empty Số phân vùng lôgíc theo nguyên tắc không hạn chế, vì mỗi phân vùng lôgíc có thể chứa bảng phân vùng và các phân vùng lôgíc của mình. Tuy nhiên trên thực thế vẫn có những hạn chế. Ví dụ, Linux không thể làm việc với hơn 15 phân vùng trên các đĩa SCSI và hơn 63 phân vùng trên đĩa IDE. Phân vùng mở rộng trên một đĩa vật lý, hay trong một phân vùng mở rộng chứa nó (có thể gọi là “mẹ”) chỉ có thể làm một: không một chương trình phân 20 Cài đặt HĐH Linux trên cùng máy tính với Windows chia ổ đĩa nào trong số đã có (fdisk và tương tự) có thể tạo thêm một phân vùng mở rộng thứ hai. Ổ đĩa trên Linux nói riêng (ổ đĩa vật lý) được truy cập qua tên của thiết bị: /dev/hda, /dev/hdb, /dev/sda, v.v. . . Các phân vùng chính có thêm số 1- 4 trong tên thiết bị: /dev/hda1, /dev/hda2, /dev/hda3, còn phân vùng lôgíc thì có các tên: /dev/hda5, /dev/hda6, /dev/hda7 . . . (bắt đầu từ số 5). Từ những gì đề cập đến ở trên có thể suy ra tại sao lại có thể bỏ qua các tên như /dev/hda3 hay /dev/hda4 (đơn giản là phân vùng chính thứ ba và thứ tư không được tạo ra) và ngay sau /dev/hda2 bạn đọc thấy /dev/hda5 (phân vùng lôgíc trong phân vùng mở rộng /dev/hda2), và sau đó thì việc đánh số lại theo thứ tự thông thường. Trong Windows các phân vùng lôgíc nhận được tên (chữ cái), bắt đầu từ chữ cái cuối dùng dành cho phân vùng chính. Ví dụ nếu một đĩa cứng có hai phân vùng chính (C: và D:) và một phân vùng mở rộng, trong phân vùng mở rộng tạo ra hai phân vùng lôgíc, thì những phân vùng lôgíc này sẽ được đặt tên E: và F:. Xin nói thêm, trong Windows NT và 2000/XP có thể thay đổi tên của các phân vùng đĩa. 2.3.3 Quá trình khởi động các HĐH của công ty Microsoft Dù hệ điều hành có là gì, thì để có thể bắt đầu điều khiển máy tính, cần nạp HĐH vào bộ nhớ. Vì thế hãy xem xét qua quá trình khởi động của các HĐH khác nhau. Chúng ta chỉ quan tâm đến việc khởi động từ ổ đĩa cứng, nên sẽ không xem xét đến việc khởi động từ đĩa mềm, CD-ROM và qua mạng. Hãy bắt đầu từ MS-DOS và MS Windows cũ (xin đừng quên rằng, việc phát triển và hoàn thiện máy tính cá nhân song song với sự phát triển của HĐH của Microsoft và những quyết định sử dụng trong các HĐH này có ảnh hưởng mạnh đến quyết định của các nhà phát triển thiết bị). Như bạn đọc biết, khi bật máy tính đầu tiên sẽ chạy chương trình POST (Power On Self Test). Chương trình xác định dung lượng bộ nhớ, thử nghiệm bộ nhớ, và xác định các thành phần khác (bàn phím, ổ cứng. . . ), khởi động các thẻ adaptor. Trên màn hình thường xuất hiện các thông báo về dung lượng bộ nhớ, về việc thử nghiệm bộ nhớ, danh sách các thiết bị nhận ra (ổ đĩa cứng và mềm, bộ xử lý, cổng COM và v.v. . . ). Sau khi hoàn thành việc thử nghiệm POST gọi Int 19h. Công việc của Int 19h là tìm thiết bị khởi động. Việc tìm kiếm thực hiện theo thứ tự xác định trong Setup BIOS và theo cách thăm dò sector số 0 của các thiết bị tương ứng. Nếu đĩa có thể khởi động, thì trong sector số 0 của đĩa có bản ghi khởi động chính – Master Boot Record (MBR). Hai byte cuối cùng của MBR – “số màu nhiệm”, là dấu hiệu cho biết sector có MBR, và theo đó đĩa có thể khởi động. Ngoài “số màu nhiệm” MBR còn chứa bảng phân vùng đĩa đã nói ở trên, và một chương trình nhỏ – trình khởi động chính, kích thước chỉ có 446 (0x1BE) byte. Bảng 2.1 cho thấy cấu trúc của sector khởi động chính sau khi cài đặt Win dows. MS-DOS, Windows95 và NT ghi nhớ DOS MBR trong khi cài đặt. Ngoài ra cũng có thể tạo MBR của MS với câu lệnh DOS sau: fdisk /mbr. Xin trở lại với quá trình khởi động. Int 19h của BIOS nạp trình khởi động 2.3 Phân vùng trên đĩa và quá trình khởi động 21 Bảng 2.1: Cấu trúc của sector khởi động chính Dịch chuyển Nội dung 0x000 Mã của trình khởi động chính 0x1BE Bảng phân vùng ổ đĩa 0x1FE “Số màu nhiệm” (0xAA55) chính vào bộ nhớ máy tính và chuyển quyền điều khiển cho chương trình này. Nhưng chương trình “bé nhỏ” này không đủ khả năng khởi động HĐH; tất cả những gì mà nó có thể làm – đó là nạp vào bộ nhớ chương trình mạnh hơn – trình khởi động thứ hai. Để làm được điều này, nó tìm trong bảng phân vùng kích hoạt và đọc vào bộ nhớ trình khởi động thứ hai, bắt đầu từ sector lôgíc đầu tiên của phân vùng kích hoạt. Hãy chú ý đến cụm từ “bắt đầu từ”. Vì trình khởi động thứ hai trên các hệ thống khác nhau có độ dài khác nhau. Trong phân vùng được định dạng dưới hệ thống tập tin FAT, trình khởi động thứ hai chiếm một sector (512 byte). Trong phân vùng định dạng dưới hệ thống tập tin NTFS, trình khởi động thứ hai chiếm vài sector. Trình khởi động thứ hai nạp lớp chương trình đầu tiên, cần thiết cho việc khởi động hệ điều hành. Trong trường hợp MS DOS chương trình khởi động động nạp IO.SYS theo địa chỉ 700h, sau đó MSDOS.SYS và chuyển quyền điều khiển cho SYSINIT của môđun IO.SYS. Nếu vì lý do nào đó không tìm thấy trên đĩa phân vùng kích hoạt, thì quá trình khởi động sẽ tiếp tục với việc xử lý Int 18h. Trường hợp này trên thực tế rất hiếm khi sử dụng, nhưng khả năng này có thể có ích trong trường hợp nào đó. Trong khi khởi động từ xa, khi hệ điều hành khởi động từ máy chủ, thì Int này được POST chuyển hướng lên ROM của cạc mạng. Đối với các HĐH khác của Microsoft thì quá trình khởi động diễn ra tương tự. ˆ Windows95 khởi động giống như DOS nhưng thay thế IO.SYS và MS DOS.SYS bởi các tập tin của mình. Các tập tin DOS được giữ lại dưới các tên tương ứng IO.DOS và MSDOS.DOS. Khi bạn đọc chọn khởi động DOS, Windows95 sẽ đổi tên các tập tin của mình với phần mở rộng w40 và phục hồi tên ban đầu của các tập tin hệ thống của DOS. Quá trình khởi động tiếp tục với việc nạp IO.SYS. Như thế, sector khởi động của DOS và Windows95 là như nhau. ˆ Windows NT4 sử dụng MBR DOS, nhưng thay thế bản ghi khởi động của phân vùng kích hoạt bằng cách thay thế NTLDR vào chỗ IO.SYS. Đây là một chương trình mạng và có thể làm được nhiều thứ. Ví dụ, có thể tìm tập tin boot.ini và nếu như tham số timeout lớn hơn 0, thì đưa ra trình đơn (thực đơn) khởi động. Mỗi dòng của phần [operating systems] trong tập tin boot.ini xác định một phương án (một HĐH) khởi động và được viết theo mẫu sau: địa_chỉ_trình_khởi_động_thứ_hai=‘‘tên_gọi_của_phương_án’’ Địa chỉ của trình khởi động thứ hai có thể là một phân vùng cụ thể nào đó của đĩa cũng như tập tin khởi động. Dưới đây là một ví dụ tập tin boot.ini: 22 Cài đặt HĐH Linux trên cùng máy tính với Windows [operating systems] multi(0)disk(0)rdisk(0)partition(3)\WINNT="Windows NT Workstation 4" C:\="Microsoft Windows" C:\BOOTSECT.LNX="Linux" Nếu người dùng chọn NT, thì sẽ khởi động theo địa chỉ phân vùng được chỉ trên dòng đầu tiên. Trên dòng tương ứng với phương án Microsoft Windows, chỉ đưa ra “C:\”, vì tên của tập tin khởi động được lấy theo mặc định: bootsect.dos. Tập tin được nạp vào bộ nhớ và quá trình khởi động được tiếp tục giống như khi bản ghi khởi động được nạp bởi mã chương trình từ MBR. Đối với việc khởi động các hệ thống khác, có thể sử dụng cách đó. Chỉ cần thêm vào boot.ini các dòng chứa liên kết đến tập tin khởi động khác. Khi chọn các dòng này sẽ khởi động HĐH tương ứng. Trong ví dụ trên Linux cũng được khởi động theo các này. Trong tập tin C:\BOOTSECT.LNX cần ghi nội dung của bản ghi khởi động, tạo bởi Linux (nói đúng hơn – LILO, trình khởi động tiêu chuẩn của Linux). 2.3.4 Vấn đề với các đĩa lớn Trên MS-DOS và các phiên bản đầu tiên của Windows truy cập tới đĩa (trong đó có cả bước khởi động đầu tiên của HĐH) được tổ chức qua Int 13 (Int 13h) của BIOS. Khi này sử dụng sự đánh địa chỉ sector trên đĩa trên cơ sở C/H/S (xem trên). Chính xác hơn: ˆ AH — chọn thao tác; ˆ CH — 8 bit nhỏ hơn của số cylinder; ˆ CL — 7-6 bit tương ứng bit lớn của số cylinder, 5-0 tương ứng số sector; ˆ DH — số của đầu đọc; ˆ DL — số của đĩa(80h hay 81h). (Cần lưu ý rằng việc đánh số cylinder vật lý và rãnh thường bắt đầu từ 0, còn sector trên rãnh đánh số bắt đầu từ 1). Tuy nhiên trên thực tế số đầu đọc không quá 16, còn số sector trên rãnh – không quá 63, và dù có dùng 10 bit để chỉ ra cylinder, BIOS vẫn không thể làm việc với đĩa dung lượng lớn hơn 1024*63*16*512 = 528 Mbyte. Để vượt qua hạn chế này, người ta áp dụng nhiều cách “láu cá” khác nhau. Ví dụ, Extended CHS (ECHS) hay “Large disk support” (đôi khi còn gọi là “Large”) sử dụng ba bit chưa dùng đến của số thứ tự đầu đọc để tăng số cylinder. Cách này cho pehsp sử dụng cấu trúc “hình học giả mạo của đĩa” với 1024 cylinder, 128 đầu đọc và 63 sector/rãnh. Biến đổi Extended CHS thành địa chỉ CHS thực (có thể chứa đến 8192 cylinder) được BIOS thực hiện. Cách này cho phép làm việc với đĩa có dung lượng đến 8192*16*63*512 = 4 227 858 432 byte hay 4,2 Gbyte. Nhưng các nhà phát triển càng ngày càng tăng mật độ ghi của đĩa, số đĩa và số rãnh, và còn phát minh ra các phương pháp khác để tăng dung lượng đĩa. Ví dụ, số sector trên rãnh không còn cố định mà trở thành khác nhau trên các rãnh 2.4 Lựa chọn trình khởi động 23 khác nhau (trên các rãnh nằm gần rìa ngoài của đĩa, dài hơn, số sector được tăng lên). Kết quả là bộ ba số C/H/S không còn phản ánh đúng cấu trúc “hình học của đĩa”, và các phiên bản BIOS cũ không thể hỗ trợ truy cập tới toàn bộ không gian đĩa. Khi đó người ta nghĩ ra phương pháp khác để làm việc với các đĩa lên qua Int 13h - đánh địa chỉ các khối theo đường thẳng (“Linear Block Addressing” hay LBA). Không đi sâu vào chi tiết, có thể nói rằng tất cả sector trên đĩa được đánh số một cách tuần tự, bắt đầu từ sector đầu tiên trên rãnh số 0 của cylinder số 0. Thay vào chỗ địa chỉ CHS mỗi sector nhận được một địa chỉ lôgíc – số thứ tự của sector trong tổng số tất cả sector. Việc đánh số sector lôgíc bắt đầu từ 0, trong đó sector số 0 chứa bản ghi khởi động chính (MBR). Trong Setup BIOS hỗ trợ biến đổi số thứ tự theo đường thẳng thành địa chỉ CHS có dạng “Hỗ trợ LBA”. Như vậy, trong các phiên bản BIOS mới thường có lựa chọn với ba phương án: “Large”, “LBA”, và “Normal” (phương án cuối cùng có nghĩa là không thực hiện biến đổi địa chỉ). Tuy nhiên trong chế độ LBA việc sử dụng đĩa vật lý vẫn được thực hiện qua Int 13h, mà Int 13h vẫn sử dụng bộ 3D (C,H,S). Vì nguyên nhân này xuất hiện hạn chế lên dung lượng của đĩa: BIOS, và theo đó, MS-DOS và các phiên bản Windows đầu tiên không thể đánh địa chỉ các đĩa có dung lượng lớn hơn 8,4 Gbyte. Cần chú ý rằng hạn chế nói trên chỉ áp dụng với các đĩa có giao diện IDE. Trong các controller của đĩa SCSI, số của sector được chuyển vào các lệnh SCSI, và sau đó tự đĩa tìm ra vị trí cần thiết, vì thế hạn chế lên dung lượng đĩa không xuất hiện. Một lần nữa muốn nhắc lại rằng, tất cả những hạn chế nói trên chỉ có ý nghĩa trong giai đoạn khởi động HĐH. Bởi vì Linux và các phiên bản Windows mới nhất khi làm việc với đĩa đã không còn sử dụng Int 13 của BIOS, mà sử dụng driver riêng của mình. Nhưng trước khi có thể sử dụng driver của mình, hệ thống phải được nạp. Vì thế trong giai đoạn khởi động đầu tiên bất kỳ hệ thống nào cũng cần sử dụng BIOS. Điều này hạn chế việc đặt nhiều hệ thống ra ngoài vùng 8 Gbyte đĩa đầu tiên: chúng không thể khởi động từ đó, mặc dù sau khi khởi động thì có thể làm việc với các đĩa có dung lượng lớn hơn nhiều. Để có thể hiểu cách thoát khỏi những hạn chế này, chúng ta cần một chút kiến thức về quá trình khởi động của HĐH Linux. 2.4 Lựa chọn trình khởi động 2.4.1 Trình khởi động GRUB1 GRUB (GRand Unified Bootloader) – trình khởi động hết sức mạnh có khả năng khởi động rất nhiều HĐH miễn phí cũng như HĐH thương mại. GRUB được Erich Boleyn viết vào năm 1995 để khởi động hệ thống GNU Mach, vì không thể sử dụng những trình khởi động khác. Sau đó vào năm 1999 Gordon Matzigkeit và Yoshinori K. Okuji chuyển GRUB thành một gói chương trình GNU, đưa chương trình này thành một phần mềm mã nguồn mở. Mặc dù mới ra đời và số phiên bản 1Phần về GRUB này do người dịch viết. 24 Cài đặt HĐH Linux trên cùng máy tính với Windows còn rất nhỏ2 nhưng đây là sự lựa chọn tốt đối với phần lớn người dùng máy tính cá nhân. Nếu không có nhu cầu đặc biệt nào đó thì bạn nên chọn trình khởi động này. Các bản phân phối Linux lớn (Debian, SuSE, Fedora,. . . ) cũng đã chuyển sang sử dụng GRUB làm lựa chọn theo mặc định. Một trong những tính năng quan trọng của GRUB là tính mềm dẻo. GRUB có thể hiểu các hệ thống tập tin và định dạng thực thi của nhân, vì thế bạn có thể nạp HĐH theo cách ưa thích. Ngoài ra, nếu không muốn dùng giao diện dòng lệnh, thì bạn có thể cài đặt và sử dụng giao diện thực đơn và thay đổi giao diện thực đơn theo mong muốn của mình. Một điểm mạnh khác của GRUB đó là “grub shell” có thể chạy khi bắt đầu khởi động hoặc sau khi đã khởi động xong hệ thống. Bằng grub shell bạn có thể “giả lập” (emulate) trình khởi động này và cài đặt GRUB. Bây giờ chúng ta xem xét ngắn gọn về tên gọi thiết bị dùng trong GRUB, vì cú pháp thiết bị trong trình khởi động này có khác một chút so với những gì mà bạn đã thấy trên những hệ thống của mình. Bạn cần hiểu cú pháp này để biết cách chỉ ra một ổ đĩa hay phân vùng nào đó. Ví dụ một cú pháp là: (fd0) Trước tiên cần nói GRUB yêu cầu tất cả các tên thiết bị phải đặt trong ngoặc ‘(’ và ‘)’. Phần fd có nghĩa là đĩa mềm. Số ‘0’ chỉ ra số thứ tự của ổ, đếm bắt đầu từ 0. Ví dụ 2: (hd0,1) Ở đây ‘hd’ có nghĩa là ổ cứng. Số nguyên ‘0’ đầu tiên cho biết số thứ tự của ổ, tức là ổ cứng thứ nhất. Số nguyên thứ hai (‘1’) cho biết số thứ tự của phân vùng (chúng ta không xem xét các HĐH khác Linux). Xin nhắc lại một lần nữa là các số đếm đều bắt đầu từ số không ‘0’. Trong trường hợp này đây là phân vùng thứ hai của ổ cứng thứ nhất. GRUB sử dụng một phân vùng của đĩa chứ không phải toàn bộ đĩa. Ví dụ 3: (hd0,4) Đây là phân vùng mở rộng (“extended partition”) thứ nhất của đĩa cứng thứ nhất. Chú ý rằng các phân vùng mở rộng được đếm bắt đầu từ ‘4’ không phụ thuộc vào số phân vùng chính (“primary partition”) thực tế có trên đĩa. Cần chú ý thêm là GRUB không phân biệt IDE và SCSI. Nó đếm số thứ tự ổ bắt đầu từ ‘0’ không phụ thuộc vào dạng đĩa. Làm sao để chỉ ra một tập tin? Hãy xem ví dụ sau đây: (hd0,0)/vmlinuz Dòng này chỉ ra tập tin ‘vmlinuz’ nằm trên phân vùng đầu tiên của ổ cứng đầu tiên. Hết sức đơn giản! Thông tin trong phần này sẽ giúp bạn hiểu được cấu hình của GRUB sẽ nói đến sắp tới đây. 2hãy so sánh số phiên bản của GRUB và LILO 2.4 Lựa chọn trình khởi động 25 2.4.2 Trình khởi động LILO Trình khởi động LILO được viết bởi Werner Almesberber. LILO có thể khởi động nhân Linux từ đĩa mềm, đĩa cứng, và cũng có thể khởi động các hệ điều hành khác: PC/MS-DOS, DR DOS, OS/2, Windows 95/98, Windows NT/2000/XP, 386BSD, SCO UNIX, Unixware v.v. . . LILO cho phép chọn đến 16 hệ điều hành khác nhau để khởi động. LILO không phải là chương trình đơn lẻ mà là một bộ gồm nhiều chương trình: trình khởi động, các chương trình sử dụng để cài đặt và cấu hình trình khởi động, và các tập tin phục vụ: ˆ chương trình /sbin/lilo, chạy dưới Linux, phục vụ để ghi tất cả thông tin cần thiết trong giai đoạn khởi động vào các chỗ tương ứng. Cần chạy chương trình này sau mỗi lần có thay đổi trong nhân hay trong tập tin cấu hình LILO; ˆ các tập tin phục vụ, cần cho LILO trong thời gian khởi động. Những tập tin này thường nằm trong thư mục /boot. Quan trọng nhất trong số chúng – đó là bản thân trình khởi động (xem phía dưới) và tập tin map (/boot/map); trong tập tin này có chỉ ra vị trí của nhân. Một tập tin quan trọng khác – tập tin cấu hình LILO; thường có tên /etc/lilo.conf; ˆ trình khởi động – đây là phần LILO được nạp vào bộ nhớ đầu tiên qua Int của BIOS; trình khởi động nạp nhân Linux hay sector khởi động của hệ điều hành khác. Trình khởi động gồm có hai phần. Phần thứ nhất được ghi vào sector khởi động và phục vụ để nạp phần thứ hai, có kích thước lớn hơn rất nhiều. Cả hai phần thường được ghi trên đĩa trong tập tin /boot/boot.b. Cần nhớ rằng, định dạng của sector khởi động tạo ra bởi LILO khác với định dạng MBR của DOS. Vì thế nếu ghi sector khởi động LILO vào MBR, thì các hệ điều hành đã cài của Microsoft sẽ ngừng khởi động (nếu như không có các biện pháp bổ sung). Sector khởi động của LILO có thể được thiết kế để sử dụng như sector khởi động của phân vùng, trong đó có chỗ cho bảng phân vùng. Sector khởi động của LILO trong khi cài đặt có thể đặt vào những chỗ sau: ˆ sector khởi động của đĩa mềm trong định dạng Linux (/dev/fd0, . . . ); ˆ MBR của đĩa cứng đầu tiên (/dev/hda, /dev/sda, . . . ); ˆ sector khởi động của phân vùng chính với hệ thống tập tin Linux trên đĩa cứng đầu tiên (/dev/hda1, /dev/hda2, . . . ); ˆ sector khởi động của phân vùng lôgíc trong phân vùng mở rộng đĩa cứng đầu tiên (/dev/hda5, . . . ). Sự thật là phần lớn chương trình dạng fdisk không đề ra khả năng khởi động khởi động từ phân vùng mở rộng và từ chối việc kích hoạt phân vùng này. Vì vậy trong thành phần LILO có chứa một chương trình đặc biệt (activate) cho phép vượt qua hạn chế này. Tuy nhiên chương trình fdisk của bản phân phối Linux hỗ trợ khả năng kích hoạt phân vùng mở rộng. Cần sử dụng tùy chọn -b hoặc biến BOOT. 26 Cài đặt HĐH Linux trên cùng máy tính với Windows Sector khởi động của LILO không thể đặt vào các chỗ sau: ˆ sector khởi động của đĩa mềm hay phân vùng chính, với định dạng hệ thống tập tin khác Linux; ˆ trong phân vùng swap của Linux; ˆ trên đĩa cứng thứ hai. Ngoài ra, cần nhớ rằng, LILO trong thời gian khởi động cần những tập tin sau: ˆ /boot/boot.b; ˆ /boot/map (tạo ra bởi lệnh /sbin/lilo); ˆ tất cả phiên bản nhân khởi động (nếu bạn đọc chọn phiên bản nhân khi khởi động); ˆ sector khởi động của các hệ điều hành khác mà bạn đọc muốn khởi động qua LILO; ˆ tập tin chứa các thông báo đưa ra khi khởi động (nếu được xác định). Như vậy, sector khởi động LILO cũng như những tập tin đã liệt kê (trong số đó có các tập tin bạn đọc sẽ cài đặt sau này) cần nằm trong phạm vi 1024 cylinder đầu tiên của đĩa cứng, bởi vì chúng cần được truy cập qua BIOS. Xem phần nói về hạn chế của BIOS ở trên. Bắt đầu từ phiên bản 21, LILO đưa ra màn hình trình đơn (thực đơn) cho phép chọn hệ thống để khởi động (trước đây cần nhấn phím Tab để gọi trình đơn này). 2.4.3 Các trình khởi động khác Ngoài GRUB và LILO để khởi động Linux có thể khởi động các trình khởi động khác. ˆ Nếu như trước khi cài đặt Linux đã có HĐH Windows NT/2000/XP, thì trình khởi động bạn đọc có thể sử dụng là OS Loader của NT. So sánh với LILO thì trình khởi động OS Loader có ít nhất hai ưu thế. Thứ nhất, tất cả cấu hình cũ không bị mất (chúng ta có thể chọn khởi động Windows hay Linux theo lựa chọn), và thứ hai, có thể cài đặt Linux lên đĩa mà LILO không thể khởi động, ví dụ, ổ đĩa thứ hai trên controller thứ hai (Secondary Slave). ˆ Nếu như trước khi cài đặt Linux bạn đọc chỉ có HĐH Windows 95 hay Windows 98 và không có Windows NT/2000 hay XP, thì OS Loader không được cài đặt. Và nếu như vì một lý do nào đó bạn đọc không muốn cài đặt LILO, thì có thể sử đụng chương trình khởi động loadlin.exe (thường đi kèm với bản phân phối Linux); 2.4 Lựa chọn trình khởi động 27 ˆ Thời gian gần đây trong thành phần bản phân phối Linux thường có chương trình khởi động GRUB. ˆ Trong thành phần OS/2 của công ty IBM có chương trình khởi động Boot Manager. Trong rất nhiều hướng dẫn người ta khuyên dùng chương trình này để tổi chức khởi động nhiều HĐH. ˆ Trong các nguồn thông tin khác nhau còn nhắc đến chương trình System Commander; ˆ Thêm một trình khởi động khác có trong thành phần gói PartitionMagic của công ty Power Quest. Chúng ta sẽ nói về chương trình này trong phần nhỏ tiếp theo. Ngoài ra tác giả còn thấy nói đến một loạt các trình khởi động khác (một số có thể tìm thấy trong thư mục /public/ftp/pub/Linux/system/boot/loaders trên trang ftp://metalab.unc.edu/. Nhưng vì tác giả không sử dụng những chương trình này, nên không thể nói cụ thể cách sử dụng chúng. Và tất cả những lời khuyên dùng sau của tác giả sẽ dựa trên việc sử dụng LILO, NT Loader và load lin.exe. Nếu như có ý muốn cài đặt chương trình khởi động khác, thì bạn đọc cần đọc hướng dẫn cài đặt và sử dụng của nó. 2.4.4 Các phương án khởi động Như vậy, theo ý kiến của tác giả có các phương án khởi động sau: ˆ Nếu trên máy chỉ có một hệ điều hành Linux duy nhất, hãy dùng GRUB. ˆ Nếu đã cài đặt Windows NT hay Windows 2000/XP, thì hãy sử dụng GRUB. ˆ Nếu có Windows 95 hay Windows 98 trên FAT16, và bạn đọc không muốn cài đặt chương trình khởi động nào khác, thì có thể sử dụng GRUB hoặc LILO, hoặc đầu tiên chạy DOS và sau đó khởi động Linux nhờ chương trình loadlin.exe (hay một chương trình tương tự, có vài chương trình như vậy, nhưng chúng ta sẽ không xét đến). ˆ Nếu đã cài đặt Windows 95 OSR2 hay Windows 98 trên FAT32, và bạn đọc không muốn cài đặt thêm chương trình khởi động, thì cần sử dụng loadlin.exe. Rất nhiều HOWTO khẳng định rằng không cần sử đụng LILO, nếu như phân vùng kích hoạt có định dạng FAT32, mặc dù tác giả không rõ nguyên nhân. Tuy nhiên thí nghiệm khởi động Linux qua NT Loader, cài đặt trên phân vùng FAT32, của tác giả đã kết thúc không thành công. Vì thế, trong trường hợp này tác giả đã phải sử dụng chương trình loadlin.exe. Chương trình này đã hoàn thành tốt nhiệm vụ, và tạo cho tác giả một ấn tượng tốt, vì thế tác giả khuyên bạn đọc sử dụng loadlin.exe để khởi động Linux. Trong những phần tiếp theo tác giả sẽ cho biết cách cài đặt Linux, sử dụng tất cả bốn phương án khởi động: qua trình khởi động NT Loader, trình khởi động GRUB, trình khởi động LILO và trình khởi động loadlin.exe. Tuy nhiên trước khi cài đặt trình khởi động cần chuẩn bị các phân vùng trên đĩa, hay ít nhất là nghĩ cách tổ chức chúng. 28 Cài đặt HĐH Linux trên cùng máy tính với Windows 2.5 Chuẩn bị các phân vùng trên đĩa 2.5.1 Lời khuyên khi tạo phân vùng Đưa ra lời khuyên ở đây không phải là việc dễ dàng, vì phân vùng đĩa phục thuộc rất nhiều vào ý thích và nhu cầu của chủ nhân đĩa. Nhưng cũng xin thử đưa ra vài đề nghị sau. Tác giả sẽ đặt tên đĩa và phân vùng theo “tiêu chuẩn” của Linux, tức là /dev/hda, /dev/hdb, v.v. . . đối với đĩa và /dev/hda1, /dev/hda2, v.v. . . – đối với các phân vùng. Việc phân chia đĩa thành các phân vùng là cần thiết, bởi vì Windows và Linux sử dụng các cách lưu trữ thông tin trên đĩa và sau đó đọc chúng từ đĩa khác nhau. Chính vì thế tốt hơn hết là dành cho mỗi hệ điều hành một (hoặc thậm chí một vài như chúng ta sẽ thấy ở dưới) phân vùng riêng. Đầu tiên chúng ta hãy xem xét một trường hợp đơn giản – dung lượng ổ đĩa của bạn đọc không vượt quá 8,4 Gbyte (nói chính xác hơn – số cylinder không vượt quá 1024). Trong trường hợp này mọi thứ đều đơn giản: bạn đọc chỉ việc chia đĩa làm sao để đủ chỗ cho hệ điều hành sẽ cài đặt. Có thể sử dụng dữ liệu cho biết kích thước đĩa nhỏ nhất cần thiết để cài đặt hệ điều hành với cấu hình cơ bản trong bảng 2.2. Bảng 2.2: Nhu cầu sử dụng không gian đĩa của HĐH Hệ điều hành Yêu cầu Windows 95 100 Mbyte Windows 98 200 Mbyte Windows NT 200 Mbyte Windows 2000 700 Mbyte Linux Red Hat 6.2 (Worksta tion với KDE) 700 Mbyte Tuy nhiên xin hãy nhớ rằng, không những phải tính kích thước các tập tin của bản thân hệ điều hành, mà còn phải tính cả kích thước của các chương trình bạn đọc dự tính chạy. Và còn phải dành một phần dự trữ không nhỏ cho các chương trình sẽ cài đặt sau này (không thể tránh khỏi!). Hãy tính rằng, 700 Mbyte dành cho Linux ở trong bảng nói trên chỉ dành cho các chương trình cài đặt cùng với Linux theo mặc định, trong số đó có, ví dụ, chương trình soạn thảo rất mạnh Lyx. Đối với Windows cũng tương tự như vậy. Theo kinh nghiệm của tác giả thì để làm việc với Windows 95/98, Windows NT và Linux các phân vùng với kích thước 800-1000 Mbyte là đủ (tất nhiên, nếu bạn đọc không cài đặt các gói chương trình lớn, như OpenOffice.Org), còn đối với Windows 200 thì cần phân vùng lớn hơn. Bây giờ chúng ta sẽ xem xét vấn đề chia các phân vùng cho Linux. Ở đây không thể chỉ chia một phân vùng. Thứ nhất, cần chia một phân vùng swap riêng biệt cho Linux. Khi xác định dung lượng của phân vùng swap Linux cần tính đến những yếu tố sau: ˆ Trong Linux, RAM và không gian swap hợp lại tạo thành bộ nhớ ảo chung. Ví dụ, nếu bạn đọc có 256 MByte RAM và 128 Mbyte không gian swap, thì sẽ có 384 Mbyte bộ nhớ ảo. 2.5 Chuẩn bị các phân vùng trên đĩa 29 ˆ Để làm việc với Linux cần ít nhất 16 Mbyte bộ nhớ ảo, vì thế nếu bạn đọc chỉ có 4 Mbyte RAM, thì cần phân vùng swap không nhỏ hơn 12 Mbyte. ˆ Kích thước của phân vùng swap có thể lớn bao nhiêu tùy thích, tuy nhiên không cần cấu hình quá nhiều nếu không cần thiết. Thông thường chỉ cần dùng swap khi máy ít bộ nhớ RAM hoặc chạy máy chủ với nhiều ứng dụng nặng. Trong tất cả mọi trường hợp tốt nhất tránh dùng swap vì nó chậm hơn RAM nhiều.3 ˆ Khi tính kích thước của không gian swapping, cần nhớ rằng kích thước quá lớn có thể là vô ích. Trên máy tính với 16 Mbyte RAM khi cài đặt Linux với cấu hình chuẩn và các chương trình ứng dụng chuẩn thì 48 Mbyte không gian swapping là đủ. Còn nếu cài đặt Linux với cấu hình nhỏ nhất, thì không cần đến không gian swap. Tất nhiên, kích thước chính xác của không gian swap phụ thuộc lớn vào chương trình sẽ được cài đặt. Nói chung, chỉ nên suy nghĩ về vấn đề dung lượng của phân vùng swap khi có một đĩa nhỏ và ít bộ nhớ RAM. Trong trường hợp ngược lại hãy phân chia để tổng số dung lượng của bộ nhớ ảo (gồm RAM và phân vùng swap) không nhỏ hơn 128 Mbyte. Còn nếu như bạn đọc có 128 Mbyte RAM hay nhiều hơn, thì phân vùng này có thể không cần thiết. Tất cả các phần còn lại của Linux và các chương trình hỗ trợ theo nguyên tắc có thể đặt vào một phân vùng. Tuy nhiên, việc đặt hệ thống tập tin Linux lên vài phân vùng riêng rẽ là có ý nghĩa. Ví dụ, có nhà chuyên gia khuyên nên dành cho hệ thống tập tin Linux ba phân vùng (nếu tính cả swap thì thành 4). Phân vùng thứ nhất (theo ý kiến cá nhân tác giả, 1 Gbyte là đủ) sẽ chứa hệ thống tập tin gốc (/). Phân vùng thứ hai dành cho thư mục /home. Còn phân vùng thứ ba được gắn vào thư mục /usr. Việc phân chia như vậy dựa trên những lý lẽ sau. Dù HĐH Linux có ổn định và đáng tin cậy đến đâu, thì thỉnh thoảng cũng cần cài đặt lại. Ví dụ, bạn đọc muốn cập nhật phiên bản mới của bản phân phối, hoặc vì ít kinh nghiệm sử dụng nên làm hỏng tập tin hệ thống quan trọng, hoặc đơn giản là muốn cài đặt một bản phân phối khác. Nếu như tất cả được cài đặt vào một phân vùng, thì khi cài đặt lại những dữ liệu đã làm ra và ghi nhớ trong thư mục cá nhân sẽ bị mất (nếu không có bản sao chép). Ngoài ra, sẽ bị mất cả những chương trình đã cài từ mã nguồn, hay cài bằng phương pháp khác. Phần lớn những gói chương trình này được cài vào thư mục /usr. Nếu dành cho thư mục này một phân vùng riêng và khi cài đặt không định dạng lại chúng, thì những chương trình nói trên sẽ được giữ lại và có thể sẽ làm việc (rất có thể cần vài cấu hình nhỏ) sau khi cài đặt lại hệ thống. Trong tiêu chuẩn về hệ thống tập tin của Linux FHS (cụ thể xin xem ở chương ??) cũng có lời khuyên về việc đặt thư mục /usr lên một phân vùng riêng. Theo tác giả thấy, những ý kiến nói trên đã đủ để bạn đọc tự tìm ra phương án phân chia ổ đĩa của mình, trong trường hợp chỉ có một ổ đĩa nhỏ. Bây giờ chúng ta xem xét trường hợp đĩa với số cylinder lớn hơn 1024. Từ những gì đã nói đến ở phần trước (hạn chế dung lượng đĩa cứng), cần đặt chương trình khởi động trong phạm vi 1024 cylinder đầu tiên. Nhân tiện, NT Loader không nhất thiết phải đặt vào phân vùng NTFS, cũng như không nhất 3Xin cám ơn bác Tony Lý về mục này 30 Cài đặt HĐH Linux trên cùng máy tính với Windows thiết phải đặt vào phân vùng chứa các tập tin khác của HĐH. Như đã nói ở trên, đối với Linux có thể đặt thư mục gốc cùng với thư mục con /boot vào các cylinder “thấp” (trong vòng 1024 đầu tiên), còn các thư mục khác – ở chỗ nào tùy thích. Như vậy trong trường hợp này, những đề nghị của tác giả cho ra bảng tổng kết sau: ˆ phần khởi động của tất cả các hệ thống Microsoft đặt vào phân vùng chính đầu tiên của đĩa, với định dạng FAT16 (DOS); ˆ phân vùng chính tiếp theo dành cho thư mục gốc (/), kích thước khoảng 1 Gbyte; ˆ phân vùng chính thứ ba dành cho swap của Linux (lời khuyên về kích thước của phân vùng này xem ở trên); ˆ phần còn lại của đĩa đặt thành phân vùng mở rộng; ˆ trong phân vùng mở rộng tạo các phân vùng lôgíc cho mỗi HĐH sẽ cài đặt: Windows 98, Windows NT/2000/XP, và đồng thời cho các hệ thống tập tin /home và /usr của HĐH Linux (trong /home sẽ đặt các tập tin riêng của người dùng, còn trong /usr – chương trình sẽ cài đặt). Tất nhiên, nếu như bạn đọc chỉ có Windows 95 với FAT16, thì có thể để Win dows trên phân vùng đầu tiên. Nếu như trên máy đã cài đặt Windows NT hay có FAT32, thì một phân vùng FAT16 cũng không thừa. Thứ nhất, kể cả trong trường hợp hệ thống có vấn đề, bạn đọc có thể khởi động từ đĩa mềm DOS (tạm thời khi chưa làm quen với Linux một cách “tường tận”) và thấy được rằng đĩa cứng làm việc bình thường. Thứ hai, hệ thống tập tin FAT16 được hỗ trợ trên mọi HĐH, trong đó có Linux, vì thế phân vùng này có thể phục vụ cho việc trao đổi tập tin giữa các hệ thống. Nhưng không nên để phân vùng này lớn, vì FAT16 sử dụng không gian đĩa rất không hợp lý. Chính vì vậy hãy dành cho phân vùng này khoảng 256 hoặc 512 Mbyte. Những lời khuyên này đưa ra với giả thiết rằng, bạn đọc chỉ có một đĩa cứng. Nếu như bạn đọc có 2, thì vẫn sử dụng được những lời khuyên này, chỉ có điều phân vùng swap tốt hơn đặt trên đĩa khác với đĩa dành cho Linux. Người ta nói rằng như vậy tăng tốc độ làm việc trong Linux (cũng dễ hiểu vì đầu đọc ít phải chạy hơn). 2.5.2 Chương trình để phân chia ổ đĩa Sau khi hoàn thành kết hoạch chia ổ đĩa, cần lựa chọn công cụ để đưa kế hoạch này thành hiện thực. Chương trình phân chia đĩa được biết đến nhiều nhất là fdisk; trên mọi hệ điều hành đều có phiên bản riêng của chương trình này. Và không cần gì hơn ngoài chương trình này, nếu như phân chia ổ đĩa trắng, không chứa bất ký dữ liệu nào. Nhưng chúng ta đang xem xét trường hợp đã có HĐH nào đó trên đĩa và cần phân chia ổ đĩa mà không làm mất thông tin. fdisk không thích hợp cho những mục đích như vậy. Trong thành phần các bản phân phối Red Hat và BlackCat (rất có thể trong các bản phân phối khác) có chương trình fips, phục vụ cho phân chia ổ đĩa. 2.6 Windows NT và Linux: khởi động qua NT OS Loader 31 Tuy nhiên, theo ý kiến của người dùng thì không nên sử dụng chương trình này. Vì thế lời khuyên của tác giả với bạn đọc, những người dùng Linux mới – nếu như muốn phân chia lại ổ đĩa mà không làm mất thông tin, thì hãy tìm chương trình Partition Magic của công ty Power Quest (http://www.powerquest.com) và sử dụng chương trình này. Thứ nhất, chương trình này cho phép phân chia lại ổ đĩa mà không làm mất thông tin (tức là, tất cả những cài đặt và cấu hình trước đó sẽ được ghi lại). Khi này, không chỉ tạo được phân vùng mới từ chỗ trống trên đĩa, mà còn có thể di chuyển các phân vùng đã có theo ý muốn. Thứ hai, chương trình này (thậm chí trong phiên bản dành cho DOS) cung cấp một giao diện đồ họa dễ sử dụng có hỗ trợ chuột, và mọi thao tác cũng như thay đổi đều thấy rõ ràng. Điều này rất quan trọng với người dùng mới. Khi tạo phân vùng cần để ý không cho ranh giới giữa các phân vùng cắt lẫn nhau. Tác giả cho rằng, những thông tin đã đưa đủ để bạn đọc lập kế hoạch và thực hiện việc phân chia ổ đĩa thành các phân vùng. Vì thế tiếp theo chúng ta sẽ xem xét các phương án cài đặt hai HĐH trên một máy tính. 2.6 Windows NT và Linux: khởi động qua NT OS Loader Trong phần này, khi nói về Windows NT xin ngầm hiểu cả Windows 2000 và NT, vì “quan hệ” của chúng đối với việc cài đặt Linux hoàn toàn giống nhau. Chúng ta giả thiết là Windows NT đã được cài vào phân vùng /dev/hda2 (nếu như bạn đọc nhớ, /dev/hda1 sẽ dành cho phân vùng FAT16). Nếu HĐH Windows NT đã được cài đặt, nghĩa là trình khởi động OS Loader cũng đã được cài đặt. Và như thế có thể sử dụng chương trình này để khởi động Linux. Tác giả hy vọng rằng bạn đọc đã sao lưu những thông tin có giá trị của mình. Các bước cài đặt có thể mô tả như sau: 1. Nếu như bạn đọc chưa cài đặt Linux bao giờ, thì trước khi bắt đầu cần chuẩn bị đĩa mềm khởi động và phục hồi Windows NT. Để tạo đĩa mềm khởi động chỉ cần định dạng lại đĩa mềm, rồi sao chép lên đó các tập tin ntldr, ntdetect.com và boot.ini từ thư mục gốc của ổ đĩa khởi động NT. Chương trình tạo đĩa phục hồi Windows 2000/XP có thể chạy từ trình đơn hệ thống (lệnh Backup trong Start/Program/Accessories). 2. Dùng chương trình Partition Magic để lấy một phần đĩa trống và từ đó tạo ra phân vùng với dạng ext2(3) (hệ thống tập tin Linux) và phân vùng swap. Cách tính kích thước của chúng đã nói ở trên. 3. Cài đặt Linux theo chỉ dẫn của bản phân phối. Trong khi cài đặt cần chú ý đến những điểm sau: ˆ thứ nhất, trong quá trình cài đặt nhất định phải tạo ra các đĩa mềm khởi động Linux. Tức là cần trả lời “Yes, make a BOOT DISK” (hay tương tự thế, tùy thuộc vào bản phân phối) khi được hỏi có tạo đĩa mềm khởi động hay không. Đĩa mềm này sẽ được dùng đến ở sau. Ngoài ra, có thể sử dụng đĩa mềm này để khởi động Linux. Đây cũng 32 Cài đặt HĐH Linux trên cùng máy tính với Windows là một phương án khởi động, và hơn nữa khác với đĩa mềm khởi động DOS, sau khi khởi động hệ thống không còn yêu cầu đĩa mềm nữa, có thể bỏ nó ra khỏi ổ, sử dụng ổ để đọc các đĩa mềm khác. Tuy nhiên cách khởi động này cũng có điều tiện, vì thế không nên sử dụng thường xuyên. Chỉ sử dụng trong trường hợp “bất đắc dĩ”. Đĩa mềm này còn cần thiết cho cấu hình để khởi động nhiều HĐH. ˆ thứ hai, khi cài đặt Linux cần cài LILO vào sector đầu tiên của phân vùng dành cho thư mục gốc (/) của Linux, chứ không phải vào sector khởi động chính của đĩa (MBR). Chúng ta giả thiết Linux được cài vào phân vùng /dev/hda3. Như vậy LILO sẽ được cài vào sector đầu tiên của /dev/hda3 Theo nguyên tắc, nếu như bạn đọc cài LILO vào MBR, thì không phải mọi thứ đã hỏng hết. Kết quả cuối cùng (khởi động qua NT Loader) vẫn có thể đạt được nhưng cần bỏ ra một chút công sức. Vấn đề ở chỗ, định dạng MBR tạo bởi LILO và Windows (DOS) khác nhau. Vì thế nếu bạn đọc cài LILO vào MBR, thì cầu phục hồi lại MBR của Windows. Tác giả cũng sẽ nói cách phục hồi, nhưng tốt hơn hết là bạn đọc cài LILO ngay lập tức vào sector đầu tiên của phân vùng đã cài Linux. 4. Sau khi cài đặt xong, khởi động Linux bằng đĩa mềm (nếu như bạn đọc cài LILO vào phân vùng của Linux và không động gì đến MBR, thì đây là khả năng duy nhất). 5. Sao chép sector khởi động của Linux vào một tập tin; tập tin này sẽ cần để trình khởi động Windows NT/2000 có thể khởi động Linux. Việc sao chép thực hiện như sau: đầu tiên gắn một đĩa mềm trắng (mới mua thì càng tốt), [root]# mount -t vfat /dev/fd0 /mnt/floppy chuyển vào thư mục /mnt/floppy [root]# cd /mnt/floppy và thực hiện câu lệnh [root]# dd if=/dev/hda3 of=/mnt/floppy/bootsect.lnx bs=512 count=1 để ghi nội dung sector khởi động của đĩa /dev/hda3 vào tập tin /mnt/floppy/bootsect.lnx4 6. Tiếp theo cần khởi động lại để vào Windows NT, bằng câu lệnh: [root]# shutdown -h now 4Ghi chú: nếu đĩa C: (/dev/hda1) có định dạng FAT, thì có thể tạo tập tin bootsect.lnx trong thư mục gốc của đĩa C:. Tác giả không biết (chưa thử) có thể khởi động không cần đĩa mềm không, nếu phân vùng chính đầu tiên có định dạng NTFS. Tuy nhiên ở đây cũng không có vấn đề gì, chỉ cần sao chép sector khởi động qua đĩa mềm như đang trình bày. Tạm thời nhân Linux còn chưa hỗ trợ tốt việc ghi lên phân vùng NTFS. 2.6 Windows NT và Linux: khởi động qua NT OS Loader 33 Vì MBR chưa có gì thay đổi, nên Windows NT sẽ khởi động. Trong NT cần sao chép tập tin bootsect.lnx vào thư mục gốc của đĩa C:, hay chính xác hơn là vào thư mục gốc của phân vùng mà từ đó khởi động Windows NT. Đây có thể là phân vùng FAT16 hay phân vùng NTFS. Đặc điểm để nhận ra phân vùng này là hai tập tin ntldr và boot.init chứa trong đó (những tập tin này có thể ẩn!). Tập tin bootsect.lnx có thể đặt thuộc tính chỉ đọc (read-only). 7. Sau đó tìm tập tin boot.ini và thêm vào dòng sau: C:\bootsect.lnx="LINUX" (tất nhiên, trong dấu ngoặc kép bạn đọc có thể đặt tên bất kỳ.) 8. Việc còn lại là khởi động lại máy tính một lần nữa, và trong trình đơn chọn hệ điều hành sẽ có LINUX. Nếu chọn LINUX, thì LILO sẽ được chạy và sau đó nó (LILO) sẽ nạp Linux. Còn bây giờ chúng ta sẽ xem xét trường hợp bạn đọc (do vô tình hay cố ý) cài đặt LILO vào bản ghi khởi động chính của đĩa (Master Boot Record, MBR). Trong trường hợp này bản ghi khởi động Windows NT (hay 2000) sẽ bị xóa, và việc khởi động Windows NT (bước thứ 6 ở trên) là không thể. Nếu như bạn đọc vẫn còn muốn sử dụng trình khởi động OS Loader của NT, chứ không muốn dùng LILO, thì những bước trên có thay đổi một chút: thay cho bước thứ 6 cần làm các thao tác sau. 1. Khởi động Windows NT từ đĩa mềm khởi động (đã tạo trước khi cài đặt Linux, nếu không có thì bạn đọc cần tìm một máy khác đang chạy Windows NT rồi tạo). Trong trình đơn (thực đơn) của trình khởi động cần chọn lệnh Recover, rồi chọn chế độ Command mode. Sau đó đăng nhập vào tài khoản nhà quản trị (administrator). 2. Phục hồi lại bản ghi khởi động chính của đĩa. Sử dụng câu lệnh fdisk /mbr. Tác giả dùng lệnh này thành công, mặc dù trong một số bài báo nói cách phục hồi MBR như vậy không phải lúc nào cũng làm việc. Trong Windows 2000 có các lệnh chuyên dùng fixboot và fixmbr (chạy từ console phục hồi hệ thống). Chạy hai lệnh này theo thứ tự đã chỉ ra. Sau đó Windows 2000 sẽ khởi động bình thường. 3. Khởi động lại máy tính từ đĩa mềm khởi động Linux và đăng nhập vào hệ thống với quyền người dùng root. 4. Nhập lệnh cd /etc và mở tập tin lilo.conf. Ở đầu tập tin này có liên kết đến phân vùng khởi động theo mặc định, ví dụ, /dev/hda. 5. Dùng bất kỳ trình soạn thảo nào, ví dụ, CoolEdit của Midnight Comman der, để thay thế giá trị này thành phân vùng đã cài Linux lên (chính xác hơn là thành phân vùng được gắn như gốc (/) của Linux). Nếu Linux được cài vào phân vùng /dev/hda3, thì cần ghi cái đó, tức là thay thế /dev/hda thành /dev/hda3. Nếu như bạn đọc không nhớ đã cài Linux vào đâu, thì hãy chạy câu lệnh mount và tìm kết quả tương tự như sau5: 5có nghĩa là tìm phân vùng đã gắn vào thư mục gốc /, trong ví dụ này là /dev/hda3 34 Cài đặt HĐH Linux trên cùng máy tính với Windows /dev/hda3 on / type reiserfs (rw) 6. Chạy lệnh /sbin/lilo để ghi trình khởi động vào phân vùng /dev/hda3 (cần chạy lệnh lilo không có tham số). Sẽ có cảnh báo về việc phân vùng không phải là đầu tiên trên đĩa. Đây chính là điều chúng ta cần, bản ghi khởi động của Windows được giữ nguyên vẹn. 7. Thực hiện các bước 6-8 như ở trên. Dễ dàng đoán ra rằng, “quy trình” phức tạp với hai lần khởi động lại chỉ để chuyển sector khởi động Linux từ MBR vào sector đầu tiên của phân vùng dành cho Linux, và phục hồi MBR của Windows. Quá trình cài đặt Linux kết thúc ở đây. Bạn đọc đã có thể chọn HĐH sẽ khởi động và điều khiển máy tính của mình. 2.7 Sử dụng trình khởi động GRUB6 Như đã nói trong phần lựa chọn chương trình khởi động, nếu trên máy đã cài Windows 98 với hệ thống tập tin FAT16, thì lựa chọn tốt hơn cho trình khởi động là chương trình có trong thành phần của mọi bản phân phối HĐH Linux – GRUB (GRand Unified Bootloader). 2.7.1 Cài đặt GRUB Cách dễ nhất để có thể cài đặt trình khởi động GRUB là chọn dùng trình khởi động này trong quá trình cài đặt hệ thống Linux của bạn. Trong những phiên bản mới của các bản phân phối Linux mới khi này có thể chọn cấu hình cho những hệ điều hành đã có trên máy. Một số bản phân phối, ví dụ Xandros còn tự động tìm thấy những hệ điều hành đã có này và thêm chúng vào tập tin cấu hình của GRUB. Nhờ đó sau khi cài đặt bạn có thể chọn khởi động Linux hoặc hệ điều hành (thường là Windows) đã có. Mặc dù việc tự động cấu hình này hết sức thuận tiện, nhưng sẽ có ích nếu bạn biết được cách cấu hình Linux để xử lý những lỗi có thể xảy ra và hơn thế nữa biết cách cấu hình để khởi động hệ điều hành mong muốn khi không có tự động cấu hình. Chúng ta sẽ xem xét cấu hình GRUB trong phần tiếp theo. 2.7.2 Cấu hình GRUB GRUB có một giao diện trình đơn để từ đó người dùng có thể chọn một mục (một hệ điều hành) bằng các phím mũi tên rồi nhấn để khởi động. Để dùng được trình đơn đó, bạn cần một tập tin cấu hình ‘menu.lst’ nằm trong thư mục khởi động /boot. Thông thường tập tin này được tạo ra khi cài đặt. Hãy xem ví dụ một tập tin như vậy dưới đây: # GRUB example configuration file on the teppi’s openSUSE system. # Modified by YaST2. Last modification on Sun Apr 2 22:22:11 MSD 2006 6Phần về GRUB này do người dịch viết 2.7 Sử dụng trình khởi động GRUB 35 color white/blue black/light-gray default 0 timeout 8 ###Don’t change this comment - YaST2 identifier: Original name:linux### title SUSE LINUX 9.3 kernel (hd0,0)/vmlinuz root=/dev/hda5 vga=0x31a selinux=0 splash=silent resume=/dev/hda7 showopts initrd (hd0,0)/initrd ###Don’t change this comment - YaST2 identifier: Original name: windows### title Windows map (hd0) (hd1) map (hd1) (hd0) rootnoverify (hd1,0) makeactive chainloader +1 ###Don’t change this comment - YaST2 identifier: Original name: xen### title XEN kernel (hd0,0)/xen.gz dom0_mem=196608 module (hd0,0)/vmlinuz-xen root=/dev/hda5 vga=0x31a selinux=0 splash=silent resume=/dev/hda7 showopts module (hd0,0)/initrd-xen ###Don’t change this comment - YaST2 identifier: Original name: floppy### title Floppy root (fd0) chainloader +1 Tác giả nghĩ rằng cần giải thích cụ thể hơn một chút về tập tin này. Có thể bạn đã đoán ra những dòng bắt đầu bằng ký tự ‘#’ là những dòng chú thích. Bạn có thể ghi bất kỳ câu gì mong muốn vào dòng này và không ảnh hưởng gì đến công việc của chương trình. Ngoài dòng chú thích GRUB cũng bỏ qua những dòng trống. Ở đầu tập tin là những thiết lập chung (global options), những tùy chọn có liên quan đến giao diện của trình đơn. Chúng được đặt trước các mục bắt đầu bằng ‘title’. Tùy chọn default chỉ ra hệ điều hành khởi động theo mặc định (nếu không động vào bàn phím khi khởi động). Số ‘0’ chỉ ra đó là hệ điều hành thứ nhất trong danh sách (tức là SuSE Linux 9.3). Hãy nhớ lại, trong GRUB việc đánh số được bắt đầu từ ‘0’ chứ không phải ‘1’. Tùy chọn timeout cho biết GRUB sẽ khởi động một cách tự động sau khoảng thời gian chỉ ra (tính theo giây) nếu không nhấn phím nào. Trong trường hợp này là sau 8 giây. Tùy chọn color dùng để chọn màu cho trình đơn (hãy thử nó!). Sau những thiết lập chung là phần thiết lập cho từng hệ điều hành cụ thể. Mỗi phần đều bắt đầu bằng lệnh ‘title’ theo sau là tên sẽ hiển thị trong trình đơn. Và vì lệnh này hiển thị tham số một cách nguyên vẹn, nên bạn có thể nhập bất kỳ thứ gì vào phía sau. Như bạn thấy trong tập tin cấu hình ở trên, phần đầu tiên là để khởi động “SUSE LINUX 9.3”, phần thứ hai – “Windows”, v.v. . . Khác với trường hợp LILO, sau khi thay đổi cấu GRUB không cần phải chạy bất kỳ lệnh nào để những thay đổi này có hiệu lực. Chúng sẽ được cập nhật một 36 Cài đặt HĐH Linux trên cùng máy tính với Windows cách tự động trong lần khởi động sau. Đây là một điểm mạnh của GRUB so với LILO. Tất nhiên đây không phải là tất cả những khả năng sử dụng của GRUB, nhưng đối với người dùng mới thì như vậy là đủ. Sau một thời gian làm việc với Linux và có đủ kinh nghiệm bạn sẽ biết cách tìm thêm thông tin về trình khởi động tuyệt vời này. 2.8 Sử dụng trình khởi động LILO 2.8.1 Cài đặt và cấu hình LILO Giống như trường hợp Windows NT, chúng ta sẽ đưa ra các bước cần thực hiện để có thể khởi động nhiều HĐH. 1. Trước khi cài đặt Linux hãy chuẩn bị đĩa mềm khởi động Windows. 2. Dùng chương trình Partition Magic để lấy phần không gian đĩa còn trống và trên đó tạo ra một phân vùng ext2(3) (hệ thống tập tin Linux) và một phân vùng swap. Cách chia ổ đĩa đã nói ở trên. Nếu dung lượng ổ đĩa cứng vượt quá 8,4 Gbyte thì hãy đọc kỹ các phần 2.3 và 2.5. 3. Cài đặt Linux theo chỉ dẫn đi kèm với bản phân phối. Cần nhớ rằng, nếu bạn muốn sử dụng trình khởi động LILO, thì trong quá trình cài dặt Linux cần chọn phương án cài LILO vào bản ghi khởi động chính (Master Boot Record). Tạo các đĩa mềm khởi động theo nguyên tắc là không bắt buộc, nhưng tác giả khuyên bạn đọc nên làm.7 4. Bước tiếp theo cần cấu hình LILO để có thể khởi động các HĐH theo lựa chọn. LILO được cấu hình bằng tập tin /etc/lilo.conf và câu lệnh /sbin/lilo. Câu lệnh này dùng để cài đặt (hay cài đặt lại) LILO. Chúng ta xem xét một ví dụ nhỏ của tập tin cấu hình LILO. Trong ví dụ này chúng ta sẽ coi như thiết bị /dev/hda1 là phân vùng với DOS/Windows, còn phân vùng /dev/hda2 chứa Linux. Trong trường hợp đó /etc/lilo.conf có dạng gần như sau: boot = /dev/hda2 compact delay = 50 # message = /boot/bootmesg.txt root = current image = /boot/vmlinuz-2.4.22 label = linux 7Ghi chú. Trình khởi động LILO không bắt buộc phải cài đặt vào bản ghi khởi động chính của đĩa, LILO có thể nằm ở bản ghi khởi động của phân vùng chính được kích hoạt và chứa thư mục gốc của Linux hoặc thậm chí trên phân vùng lôgíc trong phân vùng mở rộng. Trong trường hợp đó MBR cần phải có khả năng nạp LILO, ví dụ khi MBR là trình khởi động của MS-DOS hay Windows. Tuy nhiên tác giả chưa nhìn thấy sự cần thiết của ứng dụng này (nếu đã chọn LILO làm trình khởi động chính thì hãy sử dụng cho “trọn bộ”), vì thế chúng ta sẽ không xem xét đến. 2.8 Sử dụng trình khởi động LILO 37 read-only other = /dev/hda1 table = /dev/hda label = dos Vài lời giải thích cho ví dụ: Dòng boot cho biết thiết bị khởi động. Dòng compact bật chế độ nén tập tin map – tập tin chứa đặc tính của nhân được khởi động; tính năng (nén) này tăng tốc độ của khởi động đầu. Câu lệnh message dùng để đưa ra thông báo theo ý muốn khi khởi động. Bắt đầu từ dòng image là các phần nhỏ của tập tin cấu hình, mỗi phần tương ứng với một hệ điều hành sẽ khởi động theo lựa chọn của người dùng. Trong mỗi phần như vậy có một dòng label. Trên dòng này ghi tên cần nhập vào dấu nhắc LILO hay tên sẽ hiển thị trong trình đơn của LILO để có thể chọn HĐH muốn khởi động. Nếu như tên không được nhập sau khoảng thời gian chỉ trên dòng delay (tính theo phần mười giây – cần nhân với 0,1 giây), thì sẽ khởi động HĐH theo mặc định. Trong ví dụ này, sẽ khởi động Linux theo mặc định, vì phần cấu hình tương ứng với Linux nằm đầu tiên trong tập tin. Có thể chỉ ra hệ điều hành được khởi động theo mặc định khi thêm một dòng có dạng default=dos, tức là sử dụng tên đã đặt trên dòng label. Dòng table= cho biết tên thiết bị chứa bảng phân chia đĩa. LILO sẽ không đưa thông tin về phân chia đĩa cho hệ điều hành được khởi động nếu biến này không được đưa ra. (Một số hệ điều hành có công cụ khác để xác định là đã được khởi động từ phân vùng nào.) Đừng quên rằng, cần thực hiện câu lệnh /sbin/lilo, sau khi thay đổi chỉ dẫn đến bảng phân chia đĩa, tức là thay đổi biến table. Nếu đặt dòng (gọi là phần nhỏ thì tốt hơn) other = /dev/hda1 trong tập tin /etc/lilo.conf, thì trong thư mục gốc của đĩa /dev/hda1 (đĩa C: trong hệ thống thuật ngữ Microsoft) cần có trình khởi động phụ (không phải là chính). Trên một máy của tác giả ở đó nằm trình khởi động NT Loader (vì Windows NT được cài đặt trước Linux), và LILO khởi động thành công Windows NT. Chỉ cần đặt thời gian chờ khởi động trong tập tin boot.ini bằng không, để không thấy trình đơn khởi động của NT Loader. Tuy nhiên, nếu vì một lý do nào đó bạn muốn thấy trình đơn này thì giá trị timeout trong tập tin boot.ini cần đặt khác không (thời gian chờ được tính theo giây). Điều này có thể cần thiết khi muốn khởi động cả Windows 98 từ trình đơn của NT Loader (trong trường hợp này sẽ có 3 HĐH: Linux, Windows NT và Windows 98, trong trình đơn của LILO nếu chọn dos thì sẽ hiện ra trình đơn của NT Loader rồi từ đó chọn một trong hai HĐH Windows để khởi động). Nếu bạn đọc muốn khởi động Windows trực tiếp từ LILO, thì hãy thêm phần nhỏ sau vào /etc/lilo.conf: other = /boot/bootsect.dos label = win trong đó bootsect.dos lấy từ thư mục gốc của ổ đĩa chứa NT Loader. 38 Cài đặt HĐH Linux trên cùng máy tính với Windows 5. Sau khi sửa xong tập tin /etc/lilo.conf theo ý muốn, cần chạy câu lệnh /sbin/lilo để những thay đổi có hiệu lực. Câu lệnh này (trong tài liệu hướng dẫn gọi là map-installer) cài đặt trình khởi động phụ, mà sẽ được kích hoạt trong lần khởi động tiếp theo. Trước khi chạy /sbin/lilo để thay đổi bước khởi động, hãy thực hiện câu lệnh này với tham số -t. Khi có tham số này sẽ thực hiện tất cả các thủ tục cài đặt trình khởi động, trừ việc thay đổi tập tin map, bản ghi sector khởi động, và bảng phân chia ổ đĩa, tức là chỉ chạy thử cấu hình mới. Nếu cho thêm tùy chọn -v, thì bạn đọc sẽ được biết thêm thông tin chi tiết về những gì lệnh /sbin/lilo sẽ thực hiện. Khi /sbin/lilo ghi đè nội dung mới lên sector khởi dộng, thì nội dung cũ của sector này sẽ tự động được ghi nhớ vào một tập tin. Theo mặc định đó là tập tin /boot/boot.NNNN, trong đó NNNN tương ứng với số của thiết bị, ví dụ, 0300 – tương ứng /dev/hda, 0800 – /dev/sda, v.v. . . Nếu tập tin này đã có trên đĩa, thì nó không bị ghi đè lên. Tuy nhiên có thể đặt một tên khác đẻ ghi sector khởi động, không nhất thiết phải dùng /boot/boot.NNNN. Tập tin /boot/boot.NNNN có thể sử dụng để phục hồi nội dung cũ của sector khởi động, nếu không còn cách phục hồi nào khác đơn giản hơn. Câu lệnh để thực hiện có dạng: [root:~#] dd if=/boot/boot.0300 of=/dev/hda bs=446 count=1 hay [root:~#] dd if=/boot/boot.0800 of=/dev/hda bs=446 count=1 (bs=446 vì chỉ phục hồi chương trình khởi động, và không động gì đến bảng phân chia đĩa). Cũng có thể phục hồi MBR cũ khi cần thiết bằng câu lệnh /sbin/lilo với tùy chọn -u. Nhưng cần biết rằng, câu lệnh này chỉ làm việc đúng với điều kiện là thư mục LILO (tức là /boot) không thay đổi kể từ khi cài đặt. MBR của MS-DOS có thể được phục hồi bằng cách khởi động vào DOS từ đĩa mềm (CD) rồi chạy câu lệnh fdisk /mbr (xem trên). Lệnh này chỉ thay đổi mã chương trình khởi động nằm trong MBR, mà không thay đổi bảng phân chia đĩa. 6. Sau khi cài đặt lại trình khởi động cần khởi động lại máy tính và thử các phương án khởi động khác nhau để kiểm tra. Để kết thúc phần nói về LILO này chúng ta sẽ xem xét vài khó khăn có thể xuất hiện khi sử dụng LILO, và cách khắc phục (nếu có thể). Khi LILO được nạp, nó đưa ra màn hình từ “LILO”. Khi này mỗi chữ cái biểu thị sự kết thúc một hành động nào đó hay kết thúc một bước nạp LILO. Nếu khởi động bị bị ngưng giữa chừng, thì qua số chữ cái đưa ra có thể nhận định về nguyên nhân xuất hiện vấn đề. ˆ Không chữ cái nào hiện ra – không có phần nào của LILO được nạp. Hoặc LILO không được cài đặt, hoặc phân vùng chứa LILO chưa được kích hoạt. 2.8 Sử dụng trình khởi động LILO 39 ˆ L [mã lỗi] – trình khởi động chính đã được nạp và đã chạy (tức là đã nhận được quyền điều khiển), nhưng nó không thể nạp trình khởi động phụ. Mã lỗi hai ký tự cho biết nguyên nhân cụ thể của vấn đề (cách giải mã cần tìm trong tài liệu kỹ thuật của LILO). Thông thường thì vấn đề nảy sinh do ổ đĩa xấu (có khuyết tật) hay không đặt đúng cấu trúc hình học của đĩa. Nếu LILO không dừng lại ở đây, mà tiếp tục đưa ra một chuỗi vô tận các mã lỗi, thì vấn đề thường dễ giải quyết. ˆ LI – trình khởi động chính đã nạp được trình khởi động phụ, nhưng không chạy được nó. Có thể là lỗi đưa cấu trúc hình học của đĩa, hoặc tập tin boot/boot.b bị di chuyển mà người dùng quên không chạy /sbin/lilo. ˆ LIL — trình khởi động phụ đã được chạy, nhưng nó không thể nạp bảng mô tả từ tập tin map. Nguyên nhân thường do khuyết tật của ổ đĩa hoặc không đưa đúng cấu trúc hình học của đĩa. ˆ LIL? – trình khởi động phụ đã được nạp vào địa chỉ không đúng. Thông thường do lỗi đưa ra cấu trúc hình học của đĩa hoặc tập tin /boot/boot.b bị di chuyển mà người dùng quên không chạy /sbin/lilo. ˆ LIL- – bảng mô tả trong tập tin map bị phá hủy. Thông thường do lỗi đưa ra cấu trúc hình học của đĩa hoặc tập tin /boot/boot.b bị di chuyển mà người dùng quên không chạy /sbin/lilo. ˆ LILO – tất cả các phần của LILO được nạp thành công. 2.8.2 Cài đặt các hệ điều hành khác sau Linux Khi cài đặt MS-DOS và Windows 95/98, trình khởi động của chúng (không phụ thuộc vào ý muốn của bạn đọc) được ghi vào Master Boot Record (MBR), và dấu kích hoạt trong bảng phân vùng sẽ được chuyển sang phân vùng MS-DOS (Win dows 95/98). Mà trình khởi động MS-DOS và Windows 95/98 chỉ “biết” chuyển quyền điều khiển cho sector đầu tiên của phân vùng kích hoạt. Như thế, nếu như bạn đọc đầu tiên cài đặt Linux, và sau đó mới cài đặt Windows 95/98 hay MS-DOS, thì Linux sẽ không thể khởi động. Có thể phục hồi lại LILO bằng cách chạy lệnh /sbin/lilo (nếu LILO được cài vào MBR), hoặc kích hoạt phân vùng chứa LILO (nếu LILO được cài vào phân vùng chính). Khi có vấn đề sau khi cài đặt một hệ điều hành khác sau Linux, thường có thể giải quyết bằng cách khởi động vào Linux bằng đĩa mềm khởi động, sửa lại tập tin cấu hình LILO (thêm phần nhỏ cho HĐH mới), rồi chạy /sbin/lilo. 2.8.3 Chuyển thư mục /boot lên phân vùng DOS Những phiên bản nhân Linux mới nhất hỗ trợ khả năng đặt các tập tin cần thiết trên giai đoạn khởi động vào hệ thống tập tin MS-DOS (hay UMSDOS). Vì trong phần lớn các trường hợp phân vùng DOS chiếm các vùng đĩa ở đầu (không có hạn chế của BIOS), nên cho phép giải quyết nhiều vấn đề của ổ đĩa lớn, khi mà thư mục /boot không thể nằm trên phân vùng dành cho Linux. 40 Cài đặt HĐH Linux trên cùng máy tính với Windows Để thực hiện phương án khởi động này, cần phân vùng DOS ở chế độ đọc/ghi, tạo trong đó một thư mục (ví dụ, /dos/linux), và chuyển tất cả các tập tin từ thư mục /boot vào đó; thư mục /boot được chuyển thành liên kết tượng trưng đến thư mục /dos/linux; vị trí mới của thư mục /boot cần chỉ ra trong tập tin /etc/lilo.conf, và cuối cùng chạy lệnh /sbin/lilo. 2.9 Khởi động Linux từ MS-DOS bằng loadlin.exe Không chỉ các tập tin khởi động và nhân có thể nằm trong phân vùng DOS, mà cả tiến trình khởi động Linux nói chung có thể được tổ chức từ DOS. Khả năng này thực hiện nhờ chương trình đặc biệt loadlin.exe, do Hans Lermen (ler [email protected]) viết. Chương trình này thường có trên các đĩa của bản phân phối.8 Loadlin.exe cung cấp cách khởi động Linux từ ổ cứng an toàn nhất, khi có phân vùng kích hoạt là DOS hay Windows. Phương án khởi động này được khuyên sử dụng cho người dùng Linux mới. Phần lớn người dùng mới (và không chỉ họ) không đủ kiên nhẫn để đọc tài liệu rất hay nhưng rất dài (và lại viết trên tiếng Anh nữa) của LILO. Vì thế họ thường sử dụng LILO không đúng cách, và kết quả là không thể khởi động được bất kỳ hệ điều hành nào (tác giả cũng đã rơi vào trường hợp như vậy). Đối với những người dùng mới thì sẽ thuận tiện hơn khi sử dụng loadlin.exe để khởi động và bắt đầu tìm hiểu Linux. Tuy nhiên, “không vào hang cọp sao bắt được cọp”. Chương trình loadlin.exe không yêu cầu phải cài đặt, chỉ cần đặt chương trình – tập tin loadlin.exe và nhân (ảnh của nhân) lên một trong các đĩa mà DOS nhận ra. Có thể dùng chương trình này để khởi động Linux từ CD hoặc từ ổ đĩa trong mạng mà không cần sử dụng đĩa mềm khởi động. Khả năng này biến loadlin.exe thành một công cụ tuyệt vời để khởi động Linux khi có vấn đề với LILO. Phiên bản 1.6 của loadlin.exe làm việc với mọi cấu hình DOS và có rất ít hạn chế. Phiên bản này có thể sử dụng bộ nhớ mở rộng; có thể nạp các nhân lớn (các bzImage) và các ảnh đĩa ảo (initrd) trực tiếp vào vùng bộ nhớ nằm trên. Việc sử dụng loadlin.exe không có nghĩa là Linux làm việc dưới DOS, vì chương trình này hỗ trợ “khởi động lôgíc” của máy tính, và sau đó DOS được thay thế hoàn toàn bằng Linux. Nếu như bạn đọc muốn quay trở lại DOS, thì phải khởi động lại máy tính, ví dụ, bằng câu lệnh reboot. Như vậy, cần làm gì để có thể sử dụng chương trình loadlin.exe. ˆ Trên máy tính của bạn (tất nhiên với bộ xử lý 386 hoặc cao hơn) cần cài đặt DOS hay WINDOWS 95. ˆ Cần có ảnh nén của nhân Linux (zImage, bzImage)9. ˆ Chương trình loadlin.exe. Có thể tìm thấy trên đĩa phân phối ở dạng không nén hay trong gói LOADLIN16.TGZ. Gói nén này còn chứa hướng dẫn 8một số bản phân phối còn có gói cài đặt cho chương trình này, thông thường ghi tập tin loadlin.exe vào thư mục của người dùng root 9Ghi chú. zImage là định dạng nhị phân cũ của nhân, bzImage là định dạng mới hơn (số phiên bản nhân lớn hơn 1.3.73) có kích thước lên tới 1 Mbyte, do đó, nhân khi giải nén có kích thước lên tới 2 Mbyte. Tiếp theo chúng ta sẽ chỉ nói về các tập tin zImage, mặc dù bạn đọc có thể thay thế zImage thành bzImage 2.9 Khởi động Linux từ MS-DOS bằng loadlin.exe 41 sử dụng DOC\MANUAL.TXT, tập tin tham số ví dụ DOC\TEST.PAR, và hướng dẫn cách đưa các tham số DOC\PARAMS.DOC (đừng quên rằng chúng là những tập tin DOS). Nếu bạn chạy loadlin.exe không có tham số C:\LOADLIN> loadlin thì sẽ nhận được hướng dẫn sử dụng ngắn gọn. Thuận tiện hơn để đọc hướng dẫn này khi chạy chương trình với tham số more (giống trong Linux): C:\LOADLIN> loadlin | more Bây giờ chúng ta có thể xem xét các bước cài đặt Linux khi sử dụng loadlin.exe để khởi động. 1. Chia các phân vùng cho Linux (cách làm xem phần 2.5) 2. Cài đặt Linux vào phân vùng đã chia. LILO cần cài đặt vào sector đầu tiên của phân vùng Linux để không ghi đè lên MBR và không bị mất khả năng khởi động vào Windows. 3. Sau khi kết thúc phần cài đặt hãy khởi động Linux (nếu không có cách nào khác, hãy sử dụng đĩa mềm khởi động). Gắn phân vùng DOS (giả thiết là /dev/hda1, còn phân vùng Linux là /dev/hda3): [root]# mount -t vfat /dev/hda1 /mnt/C Tạo thư mục /mnt/C/loadlin và giải nén tập tin LOADLIN16.TGZ vào đó. Ngoài ra sao chép từ thư mục /boot vào thư mục đó cả tập tin chứa ảnh của nhân Linux. Có thể tìm tập tin chứa ảnh của nhân cần thiết nhờ tập tin /etc/lilo.conf: tìm trong tập tin cấu hình dòng “image=...” và bạn đọc sẽ thấy tên cần thiết ở phía bên phải dấu bằng. Ví dụ tên của tập tin này là vmlinuz-2.4.22. Sao chép tập tin vmlinuz-2.4.22 từ /boot vào /mnt/C/loadlin và đổi tên thành vmlinuz (việc đổi tên là không nhất thiết, và chỉ có ý nghĩa thuận tiện cho sử dụng): [root]# cp /boot/vmlinuz-2.4.22 /mnt/C/loadlin/vmlinuz 4. Bây giời khởi động lại máy tính vào DOS trực tiếp (nếu bạn đọc có Windows 95/98 thì cần nhấn phím khi khởi động để hiển thị trình đơn cho phép chọn DOS), hoặc qua hộp thoại lựa chọn khi nhấn lệnh tắt máy (shutdown) Windows 95/98. Sau khi vào DOS hãy chuyển sang thư mục C:\LOADLIN: CD \LOADLIN rồi thực hiện lệnh: C:\LOADLIN> LOADLIN vmlinuz /dev/hda3 ro vga=ask 42 Cài đặt HĐH Linux trên cùng máy tính với Windows hoặc, nếu bạn đọc muốn nạp nhân cùng với ổ đĩa RAM: C:\LOADLIN> LOADLIN vmlinuz /dev/ram rw initrd=diskimage Còn có thể ghi tất cả các tham số của lệnh loadlin.exe vào tập tin (ví dụ với tên params) và gọi câu lệnh đó ở dạng sau: C:\LOADLIN> LOADLIN @params Khả năng này đặc biệt có ích khi đưa nhiều tham số dòng lệnh và khi độ dài của dòng lệnh lớn hơn 127 ký tự. Mô tả đầy đủ tất cả các tham số của câu lệnh loadlin.exe có thể tìm thấy trong tập tin PARAMS.DOC hoặc Internet trên trang http://sunsite.unc.edu/mdw/HOWTO/BootPrompt-HOWTO. html và http://rsphy1.anu.edu/~gpg109/BootPrompt-HOWTO.html. Bây giờ bạn đọc có thể sử dụng cách này để khởi động Linux. Công việc duy nhất còn lại là làm sao để không phải gõ lệnh loadlin với tất cả các tham số sau mỗi lần khởi động lại. Có thể viết thêm lệnh gọi loadlin vào tập tin autoexec.bat hoặc tạo một tập tin lệnh (ví dụ, linux.bat), và khi chạy tập tin này, máy tính sẽ chuyển vào chế độ DOS trước, sau đó thì chạy Linux. Tác giả cho rằng những thông tin đã đưa ra ở trên đủ để tạo tập tin bat cần thiết. Cần nói thêm rằng, không được khởi động Linux từ giao diện đồ họa DOS/Windows và cần tắt một vài tùy chọn trong tập tin ẩn C:\MSDOS.SYS (đây là tập tin văn bản thông thường), bằng cách thêm vào hai dòng sau (nếu chưa có): BootGUI=0 Logo=0 Dòng đầu tiên tắt giao diện đồ họa, và DOS sẽ được khởi động thay cho Windows 95/98. (Để chạy giao diện đồ họa, cần nhập câu lệnh C:\> win). Dòng Logo=0 tắt việc hiển thị biểu tượng Windows (cửa sổ). Vấn đề ở chỗ, đối với một số cạc màn hình Linux sẽ đưa ra một màn hình trống rỗng sau khi khởi động, nếu như có hiển thị biểu tượng Windows. Chương 3 Khởi động Linux lần đầu Vạn sự khởi đầu nan – Trung Quốc Người dịch: Sau khi cài đặt rất có thể bạn đọc sẽ không biết bước tiếp theo phải làm gì. Bật máy tính lên, đợi hệ thống khởi động xong và ... ngồi nhìn. Phải làm gì để có thể tiếp tục làm việc với hệ thống Linux? Sau khi làm việc xong thì tắt máy thế nào? Có những chương trình nào nên biết? Trong khi làm việc có vấn đề nảy sinh thì tìm câu trả lời ở đâu? Trong chương này chúng ta sẽ tìm thấy câu trả lời cho những câu hỏi trên. 3.1 Khởi động HĐH Linux Như vậy là việc cài đặt Linux đã hoàn thành1. Nếu người dùng đã cài đặt GRUB làm trình khởi động, thì sau những dòng chữ BIOS thường đưa ra sẽ xuất hiện màn hình dạng như trong hình 3.1. Nếu không chạm vào bàn phím, thì trên màn hình sẽ xuất hiện rất nhiều thông báo mà tạm thời chúng ta sẽ không xem xét ý nghĩa của chúng2. Cuối cùng xuất hiện màn hình cho phép người dùng đăng nhập vào hệ thống. Nếu bạn đã chọn tự động chạy chế độ đồ hoạ thì hãy nhấn ++ để thấy màn hình đăng nhập như sau: ThinhQuyen login: Màn hình đăng nhập này xuất hiện trên máy của tác giả khi khởi động Debian Linux. Tất nhiên màn hình đăng nhập của bạn đọc sẽ khác. Nếu có đủ kiên nhẫn để đọc hết cuốn sách này, thì bạn sẽ biết cách thay đổi màn hình này, ví dụ đưa ra những câu chào dạng “Xin chào! Hôm nay là 02 tháng 09 năm 2006. Hãy nhập vào tên người dùng và mật khẩu”. Tuy nhiên bây giờ vẫn còn sớm để nói về vấn đề này. Nếu khởi động bằng đĩa mềm thì quá trình cũng tương tự nhưng chậm hơn một chút. Nếu Linux không phải là hệ điều hành (HĐH) duy nhất trên máy tính, thì trên màn hình khởi động GRUB sẽ xuất hiện danh sách các hệ điều hành tìm 1Người dịch: Thông tin trong phần này của bản gốc tiếng Nga đã hơi cũ và trình khởi động bản gốc sử dụng là LILO. Bản dịch đã cập nhật lại và sử dụng trình khởi động GRUB 2Trong những bản phân phối Linux mới, ví dụ SuSE Linux, có sử dụng màn hình flash. Do đó có thể bạn đọc sẽ không thấy những thông báo này. Trong trường hợp đó, hãy nhấn phím tương ứng để chuyển về màn hình khởi động bình thường. Phím này thường là . 44 Khởi động Linux lần đầu Hình 3.1: Màn hình khởi động của GRUB thấy. Có thể chọn HĐH muốn khởi động bằng các phím <↑> và <↓> rồi nhấn phím . Nếu đã chọn khởi động Linux thì cuối cùng người dùng phải thấy dòng login:, tức là dòng mời nhập vào tên đăng nhập. 3.2 Đăng nhập vào hệ thống Như bạn đã biết, khi hiện ra dòng mời này thì đầu tiên cần nhập vào tên người dùng, sau đó nhập vào mật khẩu khi có yêu cầu để vào hệ thống. Nếu đây là lần đăng nhập đầu tiên vào hệ thống ngay sau khi cài đặt, và trong khi cài đặt bạn quên tạo thêm người dùng, thì hãy nhập vào tên người dùng “root” (người dùng cao cấp). Đây là người dùng duy nhất luôn luôn có tài khoản được tạo ra trong quá trình cài đặt. Người dùng này là chủ sở hữu có toàn quyền đối với hệ thống bây giờ cũng như sau này, tức là có quyền truy cập không giới hạn đến các tài nguyên, có thể thêm, xóa những người dùng khác, dừng hệ thống v.v. . . Những thao tác không cẩn thận của người dùng này có thể dễ dàng dẫn đến những hậu quả khó lường, thậm chí làm hỏng hệ thống. Vì thế thường chỉ đăng nhập dưới tên người dùng này khi thực hiện các công việc quản trị hệ thống. Tuy nhiên chúng ta đang ở trong trường hợp này, vì thế hãy nhập “root” vào dòng login: rồi nhấn phím (). Hệ thống sẽ đưa ra câu hỏi mật khẩu: Password: Tất nhiên là bạn cần nhập vào mật khẩu tương ứng với người dùng đã đưa ra, ở đây là mật khẩu của root. Mật khẩu này là mật khẩu đã đưa ra cho người dùng root trong quá trình cài đặt. Sau khi nhập mật khẩu cũng nhấn . Nếu sau khi nhập vào tên người dùng rồi rất lâu sau không vào mật khẩu, thì hệ thống sẽ tự động quay trở lại dòng hỏi tên người dùng login:. Sau khi nhập 3.2 Đăng nhập vào hệ thống 45 đúng mật khẩu, bạn sẽ thấy dòng như sau: [root@ThinhQuyen /root]# Dòng này được gọi là dấu nhắc. Xuất hiện dấu nhắc có nghĩa là hệ thống đã sẵn sàng tiếp nhận và thực hiện câu lệnh của người dùng. Ở thời điểm này nó có nghĩa là bạn đã đăng nhập vào hệ thống một cách thành công. Trong MS-DOS và Windows(TM) màn hình đen và dấu nhắc hệ thống thường được gọi là chế độ dòng lệnh. Chúng ta sẽ gọi chế độ này là văn bản để phân biệt với chế độ đồ hoạ của hệ thống X Window. Trong ví dụ đưa ra dấu nhắc gồm tên người dùng (root), tên hệ thống (Thin hQuyen) và thư mục hiện thời (/root). Sau này bạn có thể thay đổi dạng của dấu nhắc này. Trong tất cả các ví dụ tiếp theo chúng ta sẽ sử dụng dấu nhắc chỉ gồm có tên người dùng. Trước khi đề nghị bạn đọc nhập vào câu lệnh đầu tiên, cần nói rằng trên bất kỳ hệ thống UNIX nào kiểu chữ cũng đều đóng vai trò quan trọng, tức là có phân biệt chữ hoa và chữ thường. Vì thế cần nhập vào tất cả các câu lệnh cũng như tham số của chúng như chỉ ra trong ví dụ, kể cả kiểu chữ. Câu lệnh đầu tiên chúng ta sẽ nhập vào là useradd. Sau tên của câu lệnh cần khoảng trắng và sau đó là tên người dùng, ví dụ, nhimlui: [root]# useradd nhimlui Ngay sau khi nhấn phím để chạy lệnh này, trên hệ thống sẽ biết rằng người dùng nhimlui tồn tại (chúng ta nói, “mở tài khoản cho người dùng nhimlui”). Tuy nhiên vẫn chưa thể vào hệ thống (thường nói, “đăng nhập”) dưới tên người dùng này. Để hệ thống cho phép người dùng mới nhimlui làm việc, cần phải “tạo” thêm cho người dùng này mật khẩu bằng câu lệnh: [root]# passwd nhimlui Sẽ xuất hiện dòng: Changing password for nhimlui. New Password: Hãy nhập vào mật khẩu. Sau khi nhập xong, cũng nhấn phím , hệ thống sẽ hỏi nhập mật khẩu một lần nữa để kiểm tra. Reenter New Password: Đừng ngạc nhiên, bạn sẽ không nhìn thấy mật khẩu vào vì hệ thống sẽ không hiển thị gì ra, kể cả dấu sao ‘*’ như thường thấy. Nếu bạn đã nhập đúng tất cả, thì sẽ xuất hiện thông báo thành công dạng: Password changed. 46 Khởi động Linux lần đầu và sẽ lại xuất hiện dấu nhắc của hệ thống. Nếu nhập vào mật khẩu không tốt (mật khẩu quá ngắn hoặc quá đơn giản), thì sẽ xuất hiện dòng cảnh báo (dạng Bad password: too short), nhưng hệ thống vẫn tiếp nhận mật khẩu và cho phép người dùng mới đăng nhập vào hệ thống. Như vậy là bạn đọc đã làm quen với hai câu lệnh đầu tiên của hệ thống Linux: useradd và passwd. Câu lệnh tiếp theo mà bất kỳ người dùng Linux nào cũng cần phải biết đó là câu lệnh man. man là hệ thống trợ giúp luôn luôn đi kèm với hệ thống Linux. Cần phải nhập vào câu lệnh này với một tham số – tên của câu lệnh khác hoặc từ khóa. Ví dụ: [root]# man passwd Kết quả là bạn sẽ nhận được một văn bản mô tả câu lệnh tương ứng hoặc thông tin về đề tài mà từ khoá đưa ra. Vì thông tin thường không thể nằm gọn trên một màn hình nên khi xem cần sử dụng các phím , , và phím trắng. Hãy nhấn phím ở bất kỳ thời điểm nào để thoát ra khỏi màn hình xem man và quay lại dòng nhập lệnh. Bây giờ xin bạn đọc hãy thử xem thông tin về hai câu lệnh đã đề cập đến ở trên – login và passwd. Chú ý là có thể xem thông tin về chính bản thân câu lệnh man. Hãy chạy lệnh: [root]# man man Rất tiếc theo như tác giả biết thì hiện thời các trang thông tin man còn chưa được dịch sang tiếng Việt. Do đó bạn sẽ nhận được những trang này bằng tiếng Anh. Nếu như bạn không có khả năng đọc tiếng Anh, thì hay kiên nhẫn đọc cuốn sách này hoặc một cuốn sách khác cùng đề tài. Bạn đọc còn có thể thử chạy thêm một vài câu lệnh nữa và theo dõi xem hệ thống làm gì. Ví dụ, hãy thử những câu lệnh liệt kê trong bảng 3.1 (hãy nhập chúng cùng với những tham số có trong bảng). Bảng 3.1: Những câu lệnh đơn giản của Linux Câu lệnh Mô tả ngắn gọn whoami Thông báo tên đăng nhập của bạn w hoặc who Cho biết những người dùng nào hiện đang làm việc trên hệ thống pwd Cho biết tên của thư mục hiện thời ls -l Hiển thị danh sách tập tin và thư mục con của thư mục hiện thời cd tên_thư_mục Chuyển thư mục hiện thời đến tên_thư_mục ps ax Hiển thị danh sách các tiến trình đang chạy Hãy xem mô tả về những câu lệnh này bằng man. Chúng ta sẽ không xem xét chi tiết danh sách tất cả những câu lệnh có thể gặp. Vì thứ nhất, người dùng sẽ dần dần làm quen với chúng trong quá trình đọc cuốn sách này và thực hành trên HĐH Linux của mình. Thứ hai, có thể đọc về những câu lệnh chính trong bất kỳ cuốn sách nào nói về UNIX. 3.3 Console, terminal ảo và shell 47 3.3 Console, terminal ảo và shell Như vậy là bạn đọc đã có kinh nghiệm làm việc đầu tiên ở chế độ văn bản (hay còn gọi là kênh giao tác “console”) của hệ thống Linux. Chúng ta sẽ còn gặp thường xuyên những khái niệm trình lệnh “terminal” và “console”, do đó tác giả giải thích kỹ hơn những khái niệm này. Khi hệ thống UNIX đầu tiên mới được tạo ra, máy tính còn rất to (mainframe) và người dùng làm việc trên những máy tính này qua một hệ thống những giao diện kế tiếp nhau dùng để kết nối các terminal ở xa. Terminal – thiết bị dùng để giao tiếp giữa người dùng và máy tính, thường gồm màn hình và bàn phím. Máy tính cá nhân của bạn đọc là máy tính thế hệ mới, do đó chắc sẽ không có terminal ở xa nào kết nối tới, nhưng vẫn có bàn phím và màn hình thực hiện vai trò terminal đối với người dùng. Ngoài ra thêm vào thành phần của terminal bây giờ còn có chuột. Mainframe có một terminal đặc biệt dành cho nhà quản trị (system adminis trator) hệ thống, được gọi là console. Console thường kết nối tới máy tính không qua giao diện kế tiếp nhau mà qua một ổ cắm riêng (đôi khi thiết bị đưa ra không phải là màn hình mà là một thiết bị in). Vì trên các hệ thống UNIX người ta thường tuân theo các truyền thống, do đó bàn phím và màn hình máy tính cá nhân ngày nay làm việc giống như console ngày xưa. Điểm mạnh của giải pháp này ở chỗ tất cả những chương trình cũ đã dùng để quản trị hệ thống UNIX có thể làm việc không có vấn đề gì trên dạng console mới này. Tuy nhiên, ngoài console Linux còn cho phép kết nối các terminal ở xa tới máy tính. Và hơn thế nữa còn cung cấp khả năng làm việc với một vài terminal ảo từ một console duy nhất. Hãy nhấn tổ hợp phím ++. Bạn đọc sẽ lại thấy dòng mời đăng nhập login:. Nhưng đây không phải là làm việc lại từ đầu với hệ thống mà bạn đọc chỉ chuyển sang một terminal ảo khác. Ở đây bạn đọc có thể đăng nhập dưới tên người dùng khác. Hãy thử vào hệ thống bằng tên người dùng vừa mới tạo ra (nhimlui). Sau đó hãy nhấn tổ hợp phím +< Alt>+. Bạn sẽ quay lại màn hình ban đầu. Theo mặc định, hầu hết các bản phân phối Linux lớn (Red Hat, SuSE, Debian,. . . ) mở ra 6 phiên làm việc song song (terminal ảo) như vậy khi khởi động. Như vậy rất thuận tiện cho sử dụng. Để chuyển giữa các terminal ảo chúng ta sử dụng các tổ hợp phím ++++. Cần nói thêm là khi làm việc ở chế độ văn bản (không phải đồ hoạ) thì cũng có thể sử dụng các tổ hợp phím ++ và thu được kết quả tương tự. Tuy nhiên nếu làm việc ở chế độ đồ hoạ thì không thể không dùng phím . Do đó, tốt hơn hết là làm quen ngay từ đầu với tổ hợp 3 phím. Nhân tiện cũng cần nói luôn, nếu trong quá trình làm việc bạn đọc không nhớ đang nằm trong terminal ảo nào thì hãy sử dụng câu lệnh tty. Lệnh này sẽ đưa ra tên của terminal ở dạng: /dev/tty2. Xin nói ngay lập tức nếu bạn muốn thoát khỏi một trong các terminal thì có thể thực hiện bằng tổ hợp phím +. Thao tác này không tắt máy và cũng không khởi động lại hệ thống. Đừng quên rằng Linux là HĐH nhiều tiến trình (multiproccess) và nhiều người dùng (multiuser). Một người dùng nào đó dừng công việc không có nghĩa là cần phải tắt máy, còn có những người dùng khác vẫn tiếp tục làm việc. Tổ hợp phím nói trên chỉ đơn giản là dừng phiên làm việc hiện thời của một người dùng, và hệ thống sẽ hiển thị lại trên terminal này 48 Khởi động Linux lần đầu dấu mời đăng nhập (login:) mà bạn đọc đã thấy. Cũng có thể dừng phiên làm việc bằng một trong hai câu lệnh logout hoặc exit. Bây giờ khi đã biết cách bằng đầu và kết thúc phiên làm việc trên hệ thống, xin bạn hãy thực hiện những lời khuyên ở trên, tức là vào hệ thống dưới tên người dùng bình thường (không có quyền cao “cấp” của người dùng root). Hãy đóng tất cả những phiên làm việc mà root mở ra, rồi vào hệ thống dưới tên người dùng mới tạo ra. Còn bây giờ cần nói vài dòng về hệ vỏ. Hệ vỏ hay shell (từ này thường không dịch mà để nguyên tiếng Anh) là chương trình thực hiện việc giao tiếp của hệ thống với người dùng. Chính shell nhận tất cả những câu lệnh mà người dùng nhập vào từ bàn phím và tổ chức việc thực hiện những câu lệnh này. vì thế shell còn có thể gọi là bộ xử lý lệnh (thuật ngữ quen thuộc đối với người dùng DOS). Nói một cách chặt chẽ thì câu “hệ thống hiển thị dấu nhắc” là không đúng, vì dấu nhắc này là do shell đưa ra để đợi người dùng nhập vào câu lệnh tiếp theo. Mỗi lần người dùng nào đó vào hệ thống, câu lệnh login sẽ chạy cho người dùng này một bộ xử lý lệnh – shell. Nếu bạn đọc đăng nhập vào hệ thống từ terminal thứ hai dưới tên người dùng nhimlui (hoặc dưới tên người dùng bạn đã chọn), thì hãy chú ý đến sự khác nhau trong dấu nhắc của hai người dùng root và nhimlui. Dấu nhắc của người dùng root có ký tự # ở cuối, dấu nhắc của tất cả những người dùng còn lại – ký tự $. Không chỉ duy nhất lệnh login có khả năng chạy shell. Bạn chỉ cần nhập vào lệnh bash (đây cũng là tên của chương trình hệ vỏ trên phần lớn các hệ thống Linux) và như vậy là đã chạy một shell mới. Khi thoát khỏi hệ vỏ mới này (bằng câu lệnh exit hoặc tổ hợp phím +), bạn sẽ quay lại hệ vỏ ban đầu (hệ vỏ mà từ đó bạn đã chạy lệnh bash). Hệ vỏ bash không chỉ là bộ xử lý lệnh mà còn là một ngôn ngữ lập trình mạnh. Trong bash có đầy đủ các câu lệnh tích hợp (nội bộ) và các toán tử, và ngoài ra còn có thể sử dụng các chương trình khác nằm trên đĩa làm câu lệnh. Có thể xem danh sách các câu lệnh tích hợp trong bash bằng lệnh help. Hãy thử lệnh này! Xem thông tin chi tiết về một lệnh nào đó cũng bằng lệnh help này với tham số là tên của lệnh, ví dụ: help cd. Vì hệ vỏ bash đóng một vai trò hết sức quan trọng trong Linux, nên tác giả sẽ dành riêng một chương của cuốn sách này để nói về nó. Tất nhiên là bạn có thể tìm thấy những thông tin tương tự trong bất kỳ cuốn sách nào về UNIX. Cũng cần lưu ý là đối với các hệ thống UNIX các nhà phát triển đã viết ra nhiều hệ vỏ khác thay thế cho bash. Cũng có thể sử dụng những hệ vỏ này trên Linux, nhưng theo mặc định sẽ chạy bash. Bây giờ chúng ta sẽ xem xét thêm một câu lệnh nữa mà bạn đọc cần biết. Máy tính của người dùng thông thường là máy cá nhân (personal computer hay nói gọn là PC) dù ở nhà hay ở cơ quan. Có nghĩa bạn đọc cũng là người dùng root của hệ thống. Nhưng như đã nói ở trên, đăng nhập dưới tên người dùng cao cấp này là không nên, vì mỗi thao tác không cẩn thận của người dùng này có thể dẫn đến những hậu quả không mong muốn. Khi đăng nhập dưới tên người dùng thông thường, ít nhất bạn đọc cũng không thể xóa hoặc làm hỏng các tập tin hệ thống (system files) do sự không cẩn thận của mình. Trong khi đó, có một loạt các thao tác, ví dụ gắn hệ thống tập tin, chỉ có người dùng cao cấp mới có thể thực hiện. Đừng khởi động lại máy tính mỗi lần như vậy! Câu lệnh su giúp đỡ giải quyết những trường hợp như vậy. Chỉ cần nhập câu lệnh su và shell hiện 3.4 Soạn thảo dòng lệnh. Lịch sử lệnh 49 thời (hay nói không đúng là “hệ thống”) sẽ chạy một shell mới mà khi vào trong đó bạn sẽ chạy tất cả các lệnh với quyền của root. Tất nhiên là để có quyền này bạn cần nhập mật khẩu của root vào dòng yêu cầu hiện ra (Password:). Sau khi thực hiện xong các công việc quản trị hệ thống, hãy thoát khỏi hệ vỏ và bạn sẽ trở thành người dùng bình thường với những quyền của mình. Bằng cách tương tự như vào hệ thống dưới tên root ở trên, còn có thể vào hệ thống dưới tên một người dùng bất kỳ mà bạn biết mật khẩu3(nói cách khác là “chạy một hệ vỏ shell mới dưới tên người dùng khác”). Nhưng cần chỉ ra tên của người dùng này trên dòng lệnh, ví dụ: [user]$ su nhimlui Câu lệnh su trước không kèm theo tên nào, theo mặc định sẽ đặt tên người dùng cao cấp root vào. Nhưng trong HĐH Linux còn có thêm một khả năng chuyển tạm thời vào tài khoản của người dùng root để thực hiện các chức năng quản trị. Hãy nhớ rằng Linux là hệ thống nhiều người dùng, trên hệ thống có thể làm việc cùng lúc nhiều người dùng. Vì thế có thể làm việc dưới tên người dùng root trên terminal ảo thứ nhất, còn trên terminal ảo thứ hai – dưới tên người dùng bình thường. Những công việc thường ngày (soạn thảo văn bản, đọc thư,. . . ) bạn có thể thực hiện bằng tài khoản bình thường, còn khi cần thực hiện các công việc quản trị, bạn sẽ dùng tài khoản người dùng cao cấp (root). Để thực hiện lựa chọn này bạn chỉ cần nhấn ++ và sẽ có ngay quyền của nhà quản trị. Sau khi làm xong những thao tác mà chỉ có người dùng cao cấp mới có thể làm, hãy quay lại tài khoản của người dùng bình thường ngay lập tức bằng tổ hợp phím ++. Như vậy bạn đọc sẽ không có nguy cơ làm hỏng hệ thống khi còn chưa có nhiều kinh nghiệm sử dụng Linux. 3.4 Soạn thảo dòng lệnh. Lịch sử lệnh Trong những phần trước tác giả đã đề nghị bạn đọc thực hiện một vài lệnh của HĐH Linux. Tác giả cho rằng nếu trong quá trình nhập lệnh có xảy ra lỗi thì bạn có thể đoán được cách sửa chúng. Nhưng dù sao cũng có ích nếu đưa ra danh sách ngắn gọn những câu lệnh (hay nói đúng hơn là phím và tổ hợp phím) dùng để soạn thảo dòng lệnh, cũng như gây ảnh hưởng đến cách làm việc của shell bằng bàn phím (bảng 3.2, chúng ta sẽ nói về chuột ở một phần riêng). Ghi chú: Nếu bạn làm việc trong chương trình Midnight Commander, thì có thể sẽ không thể sử dụng những phím như <→>, <←>, , , để làm các công việc như bảng trên, vì chúng được Midnight Commander dùng để di chuyển dòng chiếu sáng trong bảng4 hiện thời. Nhưng một số tổ hợp phím dùng với thì vẫn dùng được bình thường. Danh sách những câu lệnh (tổ hợp phím) có thể dùng không chỉ giới hạn trong phạm vi bảng 3.2, nhưng chúng ta chỉ xem xét những câu lệnh đơn giản và cần thiết trong lần làm quen đầu tiên với Linux này. Để có thêm thông tin hãy sử dụng câu lệnh man bash hoặc info bash. 3Người dùng root không cần phải biết mật khẩu để làm việc này. 4panel 50 Khởi động Linux lần đầu Bảng 3.2: Những phím soạn thảo dòng lệnh Phím Phản ứng của hệ thống <→>, + Di chuyển sang phải một ký tự (trong khuôn khổ những ký tự đã nhập cộng thêm một ký tự sẽ nhập) <←>, + Di chuyển sang trái một ký tự + Di chuyển sang phải một từ + Di chuyển sang trái một từ , + Di chuyển về đầu dòng lệnh , + Di chuyển về cuối dòng lệnh , + Xóa ký tự nằm tại vị trí con trỏ Xóa ký tự nằm bên trái con trỏ , + Bắt đầu thực hiện câu lệnh + Dọn màn hình và đưa dòng lệnh hiện thời lên dòng đầu tiên + Đổi chỗ hai ký tự: ký tự nằm tại vị trí con trỏ và ký tự nằm bên trái con trỏ, sau đó di chuyển con trỏ sang phải một ký tự + Đổi chỗ hai từ: từ nằm tại vị trí con trỏ và từ nằm bên trái con trỏ + Cắt phần dòng lệnh bắt đầu từ ký tự nằm tại vị trí con trỏ đến cuối dòng (phần dòng lệnh cắt ra được lưu trong bộ đệm và có thể đặt vào vị trí khác) + Cắt phần dòng lệnh bắt đầu từ ký tự nằm bên trái con trỏ đến đầu dòng (phần dòng lệnh cắt ra được lưu tron bộ đệm và có thể đặt vào vị trí khác) + Cắt phần dòng lệnh bắt đầu từ vị trí con trỏ đến cuối từ (nếu tại vị trí con trỏ là dấu cách thì cắt toàn bộ từ nằm bên phải nó) + Cắt phần dòng lệnh bắt đầu từ vị trí con trỏ đến đầu từ (nếu tại vị trí con trỏ là dấu cách thì cắt toàn bộ từ nằm bên trái nó) + Cắt phần dòng lệnh bắt đầu từ vị trí con trỏ đến dấu cách ở bên trái + Đặt (dán) đoạn dòng lệnh đã cắt cuối cùng vào vị trí con trỏ + Chuyển ký tự tại vị trí con trỏ thành viết hoa rồi di chuyển con trỏ tới dấu cách đầu tiên ở bên phải so với từ hiện thời + Chuyển tất cả các ký tự bắt đầu từ vị trí con trỏ thành viết HOA rồi di chuyển con trỏ tới dấu cách đầu tiên ở bên phải + Chuyển tất cả các ký tự bắt đầu từ vị trí con trỏ tới cuối từ thành viết thường rồi di chuyển con trỏ tới dấu cách đầu tiên ở bên phải + , + Những tổ hợp phím này cho phép xem các trang màn hình đã hiển thị. Số lượng những trang này phụ thuộc vào bộ nhớ của cạc màn hình. Có ích khi có câu lệnh nào đó đưa ra màn hình rất nhiều thông tin chạy nhanh qua màn hình, người dùng không kịp thấy chúng + Dừng thực hiện câu lệnh vừa chạy (mà vẫn đang chạy) + Thoát ra khỏi hệ vỏ bash 3.5 Ngừng làm việc với Linux 51 Xin lưu ý bạn đọc trong hệ vỏ bash có chương trình tích hợp giúp dễ dành nhập câu lệnh trên dòng lệnh. Gọi chương trình con này bằng một hoặc hai lần nhấn phím sau khi nhập một vài ký tự. Nếu những ký tự này là phần đầu của ít nhất một trong những câu lệnh mà bash biết, thì có hai khả năng xảy ra. Nếu chúng là phần đầu của duy nhất một câu lệnh, tức là bash chỉ tìm thấy có một câu lệnh này, thì hệ vỏ sẽ thêm phần còn lại của câu lệnh này vào dòng lệnh. Nếu bash tìm thấy nhiều câu lệnh có phần đầu này, thì sẽ hiển thị danh sách tất cả những phương án có thể chọn. Nhờ đó người dùng có khả năng nhập thêm một vài ký tự nữa làm giảm số phương án chọn xuống còn 1 rồi là dùng phím một lần nữa. Nếu số phương án chọn là rất nhiều (ví dụ nhấn phím hai lần khi dòng lệnh trống rỗng) thì bạn đọc sẽ nghe thấy tiếng bíp sau lần nhấn đầu tiên, và sau lần nhấn thứ hai sẽ xuất hiện một dòng dạng Display all 2627 possibilities? (y or n) (Hiển thị tất cả 2627 khả năng? cần chọn y – có hoặc n – không). Nếu nhấn hai lần phím ở sau tên của một câu lệnh và một khoảng trắng, thì hệ vỏ bash sẽ coi như bạn đang tìm tên tập tin để dùng làm tham số cho lệnh này, và bash sẽ đưa ra danh sách tập tin của thư mục hiện thời. Đây là tính năng trợ giúp của bash trong trường hợp người dùng quên tên tập tin trong khi làm việc căng thẳng. Cũng giống như trường hợp câu lệnh, nếu đã nhập vào một phần tên tập tin thì phần còn lại sẽ được tự động thêm vào. Tương tự như vậy có thể đoán phần còn lại của các biến môi trường5, chỉ cần sử dụng tổ hợp phím +<$> thay cho . Trong khi làm việc với hệ vỏ sẽ có ích nếu biết rằng, bash ghi nhớ một số câu lệnh (theo mặc định là 1000 lệnh, giá trị này được đặt trong biến HISTSIZE, xem chương 5) và cho phép gọi lại chúng bằng cách chọn từ danh sách. Đây được gọi là lịch sử lệnh. Có thể xem lịch sử lệnh bằng câu lệnh history. Ở đây bạn cần sử dụng các tổ hợp phím ++ để xem danh sách (có thể) rất dài này. Lịch sử lệnh được lưu trong tập tin xác định bởi biến HISTFILE (thường là $HOME/.bash_history). Để làm việc với lịch sử câu lệnh trong hệ vỏ bash người ta sử dụng những tổ hợp phím trong bảng 3.3. 3.5 Ngừng làm việc với Linux Mặc dù máy tính làm việc dưới sự điều khiển của HĐH Linux có thể để chạy suốt ngày đêm, nhưng phần lớn người dùng máy tính cá nhân đã quen với việc tắt máy sau khi làm việc xong. Khi làm việc với HĐH Linux không thể tắt máy bằng cách ngắt nguồn điện như đối với MS-DOS. Vì trong bất kỳ thời điểm nào trên hệ thống cũng có rất nhiều quá trình đang làm việc. Bạn có thể thấy điều này bằng cách thực hiện lệnh: [nhimlui]$ ps ax Thực hiện lại lệnh này một lần nữa để xem lại. Nhưng nguyên nhân quan trọng hơn là ở chỗ một số tiến trình này có thể đang làm việc với các tập tin, và hệ thống còn chưa ghi nhớ tất cả các thay đổi với những tập tin lên đĩa mà chỉ lưu 5environment variable 52 Khởi động Linux lần đầu Bảng 3.3: Tổ hợp phím điều khiển lịch sử lệnh Phím Phản ứng của hệ thống <↑> hoặc +

Chuyển tới (gọi vào dòng lệnh) câu lệnh trước trong danh sách (di chuyển ngược lại danh sách) <↓> hoặc + Chuyển tới câu lệnh tiếp theo trong danh sách (di chuyển theo danh sách) Chuyển tới câu lệnh đầu tiên trong danh sách lịch sử lệnh , Thực hiện (không cần nhấn câu lệnh thứ n trong danh sách , <->, Thực hiện câu lệnh thứ n tính từ cuối danh sách , dòng_ký_tự Thực hiện dòng lệnh, có phần đầu trùng với dòng_ký_tự. Việc tìm dòng lệnh cần thiết sẽ được thực hiện từ cuối tập tin lịch sử và dòng lệnh đầu tiên tìm thấy sẽ được thực hiện + Cũng giống như nhấn phím , sau đó hiển thị câu lệnh tiếp theo trong lịch sử lệnh tạm chúng trong bộ nhớ (cache). Nếu ngắt nguồn điện thì những thay đổi này sẽ không được lưu và sẽ bị mất, đôi khi có thể dẫn đến không khởi động được máy trong lần sau. Do đó cần biết dừng hệ thống một cách đúng đắn trước khi tắt máy. Công việc này do câu lệnh (chương trình) shutdown đảm nhiệm. Chỉ có người dùng root mới có thể thực hiện câu lệnh shutdown này6, do đó bạn cần đăng nhập vào hệ thống dưới tên người dùng này, hoặc dùng câu lệnh su để có đủ quyền tương ứng. Câu lệnh shutdown có cú pháp như sau: [root]# shutdown Ghi chú: Rất có thể khi chạy lệnh, bạn sẽ nhận được câu trả lời “bash: shutdown: command not found”. Điều đó có nghĩa là bash không biết tìm chương trình ở đây. Trong trường hợp đó bạn cần nhập vào đường dẫn đầy đủ đến chương trình, ở đây là /sbin/shutdown, vì tập tin chương trình của shutdown nằm tại /sbin. Thường sử dụng hai trong số các tùy chọn của chương trình shutdown: ˆ -h – dừng hoàn toàn hệ thống (halt, sẽ tắt máy) ˆ -r – khởi động lại hệ thống (reboot). Tham số thời_gian dùng để “hẹn giờ” thực hiện câu lệnh (không nhất thiết phải thực hiện câu lệnh ngay lập tức). Thời gian hẹn giờ được tính từ lúc nhấn phím . Ví dụ, nếu bạn muốn khởi động lại sau 5 phút thì hãy nhập vào câu lệnh: [root]# shutdown -r +5 Câu lệnh này có nghĩa là “dừng hệ thống sau 5 phút và khởi động lại sau khi hoàn thành công việc”. Đối với chúng ta thì tạm thời câu lệnh sau sẽ thích hợp hơn: 6Cũng có thể cấu hình để những người dùng khác thực hiện được shutdown, ví dụ qua sudo. 3.6 Trợ giúp khi dùng Linux 53 [root]# shutdown -h now Câu lệnh này sẽ tắt máy ngay lập tức. Tương đương với câu lệnh này là lệnh halt. Sau khi nhấn tổ hợp phím “nổi tiếng” ++ trên Linux sẽ thực hiện các hành động tương tự với lệnh [root]# shutdown -r now Bằng cách này cũng có thể tắt máy, nhưng cần ngắt nguồn điện trong khi hệ thống bắt đầu khởi động lại. 3.6 Trợ giúp khi dùng Linux Như vậy là bạn đọc đã kết thúc phiên làm việc đầu tiên với HĐH Linux và tôi mong rằng bạn chưa cần trợ giúp trong một tình huống nào đó. Tác giả cũng mong cuốn sách này sẽ thực hiện vai trò trợ giúp trong thời gian đầu tiên này, nhưng có thể nó không giải quyết được tất cả những vấn đề của bạn. Vì thế tác giả sẽ đưa ra ngay lập tức những nguồn thông tin khác. Nhưng tôi sẽ phải “đi trước” kể về cách nhận thông tin trợ giúp trong giao diện đồ hoạ (X Window). Tác giả coi cách giải quyết này là đúng vì người dùng cần biết trước cách thoát khỏi những trường hợp khó khăn. 3.6.1 Các nguồn thông tin trợ giúp Nếu rơi vào tình huống mà bạn không biết phải làm gì để có được kết quả mong muốn, thì tốt nhất hãy tìm trợ giúp ở ngay trong hệ thống. Các phiên bản Linux có hàng nghìn trang tài liệu ở dạng tập tin, do đó câu trả lời cho câu hỏi của bạn đã nằm trong lòng bàn tay. Có một vài nguồn độc lập chứa thông tin về hầu hết các mặt của hệ thống Linux: ˆ các trang trợ giúp man ˆ trợ giúp siêu văn bản info ˆ tài liệu đi kèm với phần mềm ˆ HOWTO và FAQ của dự án The Linux Document Project (http://www. tldp.org) ˆ câu lệnh locate Cần nói ngay lập tức là phần lớn thông tin từ những nguồn này bằng tiếng Anh. Các dự án dịch chúng sang tiếng Việt còn chưa được tổ chức hoặc còn chưa được hoàn chỉnh. Do đó chúng ta sẽ xem xét từng nguồn thông tin này một cách cụ thể hơn. 54 Khởi động Linux lần đầu 3.6.2 Các trang trợ giúp man Như đã nói ngắn gọn ở trên về câu lệnh man, bằng câu lệnh này người dùng trong hình huống khó khăn luôn luôn có thể tìm trợ giúp về bất kỳ câu lệnh nào của hệ thống, về định dạng tập tin, và về các gọi hệ thống (system call). Đây là cách nhận trợ giúp chính trong tất cả các hệ thống UNIX. Các trang trợ giúp man chia thành các phần sau: Bảng 3.4: Các phần chính của trợ giúp man Phần Nội dung 0 Các tập tin header (thường nằm trong /usr/include) 1 Chương trình hoặc câu lệnh của người dùng 8 Câu lệnh dùng để quản trị hệ thống 2 Gọi hệ thống (system call, hàm do nhân cung cấp) 3 Gọi thư viện (library call, chương trình con, hàm trong thư viện của ứng dụng) 4 Thiết bị (tập tin đặc biệt, thường nằm trong /dev) 5 Định dạng tập tin và quy ước, ví dụ /etc/passwd 6 Trò chơi 7 Khác (bao gồm các gói macro và quy ước, ví dụ man(7), groff(7) 9 Nhân (kernel routines) n các lệnh Tcl/Tk Thứ tự liệt kê ở đây không phải là sự nhầm lẫn. Vấn đề ở chỗ các tập tin chứa thông tin của trợ giúp man nằm trong các thư mục con của thư mục /usr/share/man và khi câu lệnh man tìm kiếm thông tin cần thiết, thì nó sẽ xem các thư mục con này theo thứ tự đã chỉ ra trong bảng 3.4. Nếu bạn chạy lệnh [user]$ man swapon thì sẽ nhận được trợ giúp về câu lệnh swapon nằm trong phần 8. Vì thế nếu muốn xem trợ giúp về gọi hệ thống swapon cần chạy lệnh [user]$ man 2 swapon để chỉ ra số thứ tự của phần trợ giúp cần tìm kiếm thông tin. Các trang man được xem bằng chương trình less (hoặc chương trình xác định bởi biến PAGER), do đó có khả năng xem thông tin theo từng màn hình và di chuyển màn hình này xuống dưới và lên trên và để di chuyển có thể sử dụng các phím như trong chương trình less. Những phím thường dùng nhất là: Nếu bạn không thích đọc từ màn hình mà cầm tay đọc, thì có thể in ra trang man tương ứng bằng lệnh [user]$ man tên_câu_lệnh | lpr hoặc nếu máy in là postscript thì dùng: [user]$ man -t tên_câu_lệnh | lpr 3.6 Trợ giúp khi dùng Linux 55 Bảng 3.5: Phím sử dụng để xem trang man Phím Chức năng Thoát khỏi chương trình Xem từng dòng Hiển thị màn hình thông tin tiếp theo Quay lại màn hình trước , dòng ký tự, Tìm kiếm dòng ký tự chỉ ra Lặp lại tìm kiếm vừa thực hiện. Tuy nhiên để có thể nhận được thông tin mong muốn thì còn cần phải biết chỗ tìm thông tin đó. Trong trường hợp này có thể dùng hai câu lệnh whatis và apropos. Câu lệnh whatis tìm kiếm từ khóa đưa ra trong cơ sở dữ liệu bao gồm danh sách các câu lệnh và mô tả ngắn gọn của chúng. Lệnh này chỉ đưa ra những trùng lặp chính xác với từ khóa tìm kiếm. Câu lệnh apropos thực hiện tìm kiếm theo các phần của từ khóa. Tương tự như lệnh apropos là câu lệnh man với tham số -k. Hãy thử chạy lệnh sau: [user]$ man -k net Cần phải nói luôn là để cho các câu lệnh man -k, whatis và apropos làm việc, thì đầu tiên cần tạo ra cơ sở dữ liệu về các câu lệnh có trên máy bằng cách chạy lệnh makewhatis. Trong trường hợp ngược lại khi tìm kiếm bạn sẽ nhận được thông báo “nothing appropriate”. Chỉ có người dùng root mới có quyền chạy câu lệnh makewhatis. Nếu bạn đọc để máy chạy cả đêm thì tốt nhất chạy câu lệnh này ở dạng công việc cho tiến trình cron7. Cuối cùng tác giả muốn nói rằng, các trang trợ giúp man không dành cho thời gian làm quen đầu tiên với Linux. Chúng dành cho những người dùng có kinh nghiệm cần có “sổ tay tra cứu” về định dạng, tuỳ chọn và cú pháp của lệnh trong quá trình làm việc để không phải nhớ một số lượng lớn những thông tin này trong đầu. 3.6.3 Câu lệnh info Câu lệnh info là dạng trợ giúp thay thế và tương đương với man. Để nhận thông tin về một câu lệnh nào đó, thì cũng giống như man, cần nhập vào info cùng với một tham số là tên của câu lệnh quan tâm. Ví dụ: [user]$ info man Thông tin màn bạn sẽ thấy trên màn hình trong phần lớn trường hợp sẽ khác với những gì mà câu lệnh man đưa ra. Và theo ý kiến của nhiều người dùng là về chiều hướng tốt hơn. Nhưng sự khác nhau cơ bản nhất ở chỗ info đưa ra thông tin dạng siêu văn bản (hypertext) giống như các trang web. Nhờ đó bạn có khả năng xem các phần khác nhau của trợ giúp mà không cần phải thoát ra khỏi chương trình xem này. Trong khi làm việc ở chế độ văn bản, bạn có thể 7cron là chương trình để chạy tự động các công việc theo thời gian đã định. 56 Khởi động Linux lần đầu chạy câu lệnh info trên một trong các terminal ảo (hãy nhớ đến các tổ hợp phím ++, ++ v.v. . . ) để có thể chuyển sang terminal ảo đó tìm trợ giúp khi cần thiết. Trong trường hợp bạn không biết tìm thông tin cần thiết ở đâu thì có thể chuyển sang các phần khác nhau bằng các siêu liên kết (hyperlink) mà info tạo ra. Những liên kết này được đánh dấu bằng ký tự sao (*), khác với cách đánh dấu liên kết trên các trang Web nhưng vẫn giữ nguyên được sự thuận lợi. Có thể di chuyển qua các liên kết bằng phím . Sau khi di chuyển đến liên kết mong muốn, hãy nhấn phím . Phím

đưa người dùng trở lại trang vừa xem, phím đưa đến trang tiếp theo, còn chuyển lên trên một bậc trong cấu trúc phân bậc của các trang tài liệu này. Ngoài ra, còn có thể chuyển theo liên kết bằng cách khác tương tự như hệ thống trình đơn. Đầu tiên cần nhấn phím , sau đó nhập vào dòng Menu item: ở cuối màn hình một vài ký tự đầu tiên của tên của phần trợ giúp cần thiết. Tên của những phần trợ giúp này được hiển thị trên màn hình. Số ký tự phải đủ sao cho chỉ tương ứng với một phần trợ giúp, nếu không thì chương trình sẽ yêu cầu nhập thêm vào. Thoát ra khỏi info bằng phím . 3.6.4 Câu lệnh help Như đã nhắc đến ở trên, hệ thống trợ giúp về các lệnh tích hợp của hệ vỏ bash là câu lệnh help. Nếu chạy lệnh help không có tham số thì sẽ nhận được danh sách của tất cả các lệnh tích hợp của bash. Nếu chạy help tên, trong đó tên là tên của một trong những câu lệnh nói trên, thì bạn sẽ nhận được giới thiệu ngắn gọn về cách sử dụng câu lệnh này. 3.6.5 Tài liệu đi kèm với bản phân phối và chương trình ứng dụng Nếu trong quá trình cài đặt không bỏ đi những gói tài liệu, thì sau khi kết thúc bạn sẽ tìm thấy trong thư mục /usr/share/doc (hoặc /usr/doc) các thư mục con HOWTO, FAQ,. . . Những thư mục này chứa tài liệu đầy đủ về hệ thống Linux nói chung cũng như những phần riêng rẽ của nó. Những tài liệu này có ở dạng văn bản ASCII và có thể xem chúng bằng các câu lệnh more tên hoặc less tên hoặc bằng chương trình xem có trong Midnight Commander. Phần lớn các chương trình ứng dụng có kèm theo tài liệu hướng dẫn cài đặt và sử dụng. Nếu cài đặt chương trình từ gói (package) dạng rpm (Fedora Core, SuSE, Mandriva,. . . ) thì tài liệu sẽ nằm trong thư mục con tương ứng của thư mục /usr/share/doc. Tên của những thư mục con này tương ứng với tên của chương trình và phiên bản của nó. Ví dụ, chương trình nhập tiếng Việt mà tôi đang dùng để gõ những dòng này xvnkb phiên bản 0.2.9 có thư mục con tương ứng xvnkb-0.2.9 nằm trong /usr/share/doc sau khi cài đặt. Đôi khi để tìm tập tin trợ giúp mong muốn bạn sẽ cần đến câu lệnh locate. Câu lệnh này trong một chừng mực nào đó tương tự với các lệnh whatis và apropos. Khi chạy locate nó sẽ tìm tất cả những tập tin có tên chứa từ khóa đưa ra. Ví dụ locate net sẽ tìm tất cả những tên tập tin có tên chứa “net”. Những tập tin này có rất nhiều trên máy. Trong từ khóa (mẫu) có thể sử dụng các ký tự thay thế *, ?, []. Tuy nhiên câu lệnh locate không tìm kiếm theo các 3.6 Trợ giúp khi dùng Linux 57 thư mục của hệ thống tập tin, mà theo cơ sở dữ liệu đặc biệt chứa tên các tập tin được tạo ra (và đôi khi cần cập nhật) bằng lệnh updatedb. Trong một số bản phân phối locate được thay thế bởi slocate (secure lo cate). slocate tự tạo cho mình cơ sở dữ liệu nói trên sau khi chạy với tham số tương ứng. 3.6.6 Câu lệnh xman Đây là chương trình cho phép xem các trang trợ giúp man khi làm việc ở giao diện đồ hoạ (GUI). Việc tìm kiếm và hiển thị các trang trợ giúp được thực hiện bằng cách nhấn các nút và trình đơn. Còn lại (theo thông tin hiển thị) xman cũng giống như man. 3.6.7 Câu lệnh helptool Sau khi chạy lệnh helptool sẽ hiện ra một cửa sổ đồ hoạ, có một ô nhập vào để người dùng đưa ra thuật ngữ đang quan tâm. Chương trình sẽ xem tất cả các tập tin tài liệu (bạn có thể cấu hình để chọn những tài liệu nào cần xem khi tìm kiếm). Sau khi hoàn thành tìm kiếm chương trình sẽ hiện ra danh sách những tập tin có chứa thuật ngữ này. Nếu nhấn chuột vào một tập tin trong danh sách thì sẽ hiện ra một cửa sổ khác nội dung của tập tin đã chọn. Khi này tập tin sẽ được hiển thị ở dạng lưu trên đĩa: trang info, trang man, v.v. . . 3.6.8 Sách và Internet Tất nhiên, học Linux dễ dàng và đơn giản nhất khi có một cuốn sách tốt. Trước tiên bạn cần đọc tài liệu hướng dẫn đi kèm với bản phân phối của mình. Các bản phân phối lớn như Debian, SuSE, Fedora,. . . đều đã có những tài liệu này (rất có thể đã được dịch sang tiếng Việt). Rất tiếc người dịch chưa đọc cuốn sách tiếng Việt nào về Linux do đó không thể giới thiệu với bạn đọc. Tất nhiên nếu bạn có kết nối Internet (bây giờ không còn quá xa xỉ) và một chút tiếng Anh thì có thể tìm được câu trả lời cho mọi câu hỏi của mình. Tôi xin đưa ra một số địa chỉ sau làm bước khởi đầu cho bạn đọc trong biển thông tin vô bờ bến này. Các trang tiếng Việt 1. http://vnoss.org – trang web dành cho người dùng mã nguồn mở (MNM) Việt Nam. Có nhiều thông tin về Linux, tài liệu về Linux, diễn đàn cho phép bạn đặt câu hỏi của mình. Trang web do bác Nguyễn Đại Quý đang sống và làm việc tại Bỉ quản lý. 2. http://vnoss.net – tin tức về Linux và MNM. 3. http://vnlinux.org – đây là trang web dành cho nhóm người dùng Linux Việt Nam (vietlug). Bạn sẽ tìm thấy nhiều thông tin có ích ở đây và có thể đăng ký tham gia nhóm thư vietlug để đặt câu hỏi. Trang này do anh Larry Nguyễn, một Việt Kiều ở Mỹ, quản lý. 58 Khởi động Linux lần đầu 4. http://vnoss.net/dokuwiki/doku.php?id=linux:tailieutiengviet – trên trang này tổng hợp tất cả những tài liệu tiếng Việt về Linux, rất có thể bạn sẽ tìm thấy tài liệu về đề tài mình cần tìm hiểu trên trang này. 5. http://kde-vi.org – trang web của nhóm dịch giao diện KDE sang tiếng Việt. Các trang tiếng Anh 1. http://www.linux.com 2. http://www.linux.org 3. http://www.linux.org.uk – Trang web Linux của Châu Âu. Do Allan Cox một trong các nhà phát triển Linux hỗ trợ. 4. http://www.tldp.org – Trang web chính chứa tài liệu về Linux. Rất nhiều tài liệu bao gồm HOWTO, FAQ, sách. . . 5. http://freshmeat.net/ – Thông báo hàng ngày về những chương trình ứng dụng mới ra dành cho Linux. Kho phần mềm khổng lồ cho Linux. 6. http://www.li.org – Tổ chức Linux International. 7. http://www.linuxstart.com 8. http://oreilly.linux.co – Ở đây bạn sẽ tìm thấy rất nhiều tài liệu. 9. http://www.linuxplanet.com 10. http://www.kde.org – Trang chủ của môi trường làm việc KDE. 11. http://www.gnu.org – Các ứng dụng dành cho Linux, trong đó nổi tiếng nhất là trình soạn thảo Emacs (GNU’s Not UNIX). 12. http://slashdot.org – Những tin tức mới nhất về công nghệ máy tính trong đó có Linux. Có các bài báo và lời bình của người đọc (không qua kiểm duyệt). 13. http://www.linuxtoday.com – Danh sách dài những tin tức, thông báo quảng cáo và các thông tin khác. Xem trang này bạn sẽ biết phần lớn những sự kiện trong thế giới Linux. 14. http://www.lwn.net – Tin tức hàng tuần về Linux. Thông tin chia thành từng hạng mục: thông tin chung, thương mại, thông tin về nhân Linux, công cụ phát triển chương trình mới, chương trình cho Linux, v.v. . . Nếu bạn muốn tin tưởng rằng Linux phát triển rất nhanh và muốn nhận trợ giúp của các công ty thương mại lớn thì nhất định phải thăm trang này. Tin tức trên tuần báo này được ban biên tập chú thích rất tốt. 15. http://www.linuxnewbie.org – Trang web tốt cho những người dùng mới. 3.6 Trợ giúp khi dùng Linux 59 16. http://www.linuxjournal.com – tạp chí Linux. Thường đăng những bài báo về nhiều đề tài. 17. http://www.linuxgazette.com – tờ báo Linux này sẽ thú vị đối với cả người dùng mới và người dùng có kinh nghiệm. 18. http://www.linuxfocus.org – Tạp chí phi thương mại toàn cầu. 19. http://www.linuxworld.com – Một trang web tốt có rất nhiều bài báo hay. 20. http://www.linux-mag.com – Linux Magazin, một tờ tạp chí rất thú vị. 21. http://www.penguinmagazine.com. Tất nhiên đây không phải là danh sách đầy đủ những trang web nói về Linux. Những trang nói trên chỉ là điểm khởi đầu để từ đó bạn sẽ tìm được những trang web khác trong biển thông tin Internet. Đi đến đâu là phụ thuộc vào ý muốn của bạn. Nếu có vấn đề trong lúc cài đặt, thì hãy hỏi dịch vụ khách hàng của phân phối đĩa. Nếu bạn mua đĩa của một công ty chuyên môn thì sẽ có địa chỉ liên lạc của dịch vụ này. Nếu bạn mua đĩa ghi lại hoặc tự ghi đĩa từ tập tin ISO nhận được qua Internet thì rất có thể lỗi cài đặt là do khi ghi đĩa gây ra. Hãy sử dụng hộp thư điện tử. Bạn nên đăng ký với một vài nhóm thư chung (mailing list) nào đó, ví dụ mailto:[email protected]. Cách đăng ký còn phụ thuộc vào từng nhóm thư (nói chính xác hơn là phụ thuộc vào máy chủ điều khiển nhóm thư này). Nhưng hiện nay thường có hai cách đăng ký: gửi thư đến một địa chỉ xác định để yêu cầu, đăng ký qua giao diện web. Thông tin này bạn có thể tìm thấy trên trang web giới thiệu về nhóm thư chung. Tuy nhiên bạn cần biết là để đọc được tất cả thư chung thì cần rất nhiều thời gian, và còn phải đọc rất nhiều thư của những người dùng mới khác (ví dụ “Console là gì?”), hoặc thậm chí có cả những lá thư “ngớ ngẩn” (ví dụ “Hôm nay dùng Debian thật vui”) và tất nhiên là phải đọc cả những thư trả lời cho những câu hỏi này của những ai biết một chút gì đó. Do đó nếu muốn bạn có thể xem kho lưu trữ những lá thư này bằng trình duyệt, rất có thể đã có câu trả lời cho câu hỏi của bạn ở đó. Và như vậy bạn không cần phải đăng ký cũng như viết thư vào nhóm thư chung nữa. Tất nhiên nếu không tìm thấy thì đừng ngại ngần đặt câu hỏi. Người dùng Linux hết sức vui lòng trả lời thư của bạn. Bảo đảm là bạn sẽ nhận được câu trả lời, nếu không hiểu thì còn có thể yêu cầu giải thích thêm. Khi đặt câu hỏi có liên quan đến hệ thống Linux của bạn, cần luôn luôn thêm vào thư của mình càng nhiều chi tiết càng tốt (nhưng đừng thêm thông tin thừa) bao gồm: tên của bản phân phối (Debian, SuSE, Fedora, hay một cái nào khác), phiên bản nhân, có vấn đề với phần cứng nào (phiên bản, dòng chữ ghi trên mạch điện tử), thông báo nào hiện ra khi có vấn đề. Đừng đòi hỏi người dùng khác gửi câu trả lời thẳng đến địa chỉ của bạn, “viết thư vào nhóm thư chung là tự thể hiện, viết thư điện tử cũng là sự hỗ trợ kỹ thuật. Viết thư thì miễn phí, nhưng sự hỗ trợ kỹ thuật thì không”. Xin hãy luôn nhớ điều đó! Chương 4 Làm quen với hệ thống tập tin ext3fs1 Bây giờ bạn đã biết cách khởi động và dừng hệ thống Linux, đã đến lúc làm quen với một trong những thành phần chính và quan trọng của Linux – đó là hệ thống tập tin. Hệ thống tập tin – là cấu trúc nhờ đó nhân của hệ điều hành có thể cung cấp cho người dùng và các tiến trình tài nguyên của hệ thống ở dạng bộ nhớ lâu dài trên các đĩa lưu2thông tin: đĩa cứng, đĩa từ, CD, DVD, v.v. . . Mỗi hệ thống tập tin, giống như một cái đĩa ăn, có hai mặt. Một mặt của nó luôn quay về phía người dùng (hay nói chính xác hơn là quay về phía ứng dụng), chúng ta tạm gọi nó là mặt trước. Từ phía mặt trước này người dùng thấy hệ thống tập tin là một cấu trúc lôgíc của các thư mục và tập tin. Mặt còn lại, mà người dùng không thấy, quay về phía chính bản thân đĩa lưu tạo thành một vùng bên trong của hệ thống tập tin đối với người dùng, chúng ta tạm gọi là mặt sau. Mặt này của hệ thống tập tin có cấu trúc không đơn giản chút nào. Vì ở đây thực hiện các cơ chế ghi tập tin lên các đĩa lưu khác nhau, thực hiện việc truy cập (chọn thông tin cần thiết) và nhiều thao tác khác. Trong chương hiện tại chúng ta sẽ xem xét mặt quay về phía người dùng của hệ thống tập tin. Mặt còn lại sẽ dành cho một chương sách ở sau. Cần nói thêm là chúng ta sẽ xem xét một hệ thống tập tin cụ thể ext3fs, hệ thống tập tin cơ bản của Linux đến thời điểm hiện nay. Còn có những hệ thống tập tin khác nhưng chúng ta sẽ đề cập đến chúng muộn hơn. 4.1 Tập tin và tên của chúng Máy tính chỉ là công cụ để làm việc với thông tin không hơn không kém. Mà thông tin trên mỗi HĐH được lưu ở dạng tập tin trên các đĩa lưu. Từ phía của HĐH thì tập tin là một chuỗi liên tục các byte với chiều dài xác định. Hệ điều hành không quan tâm đến định dạng bên trong của tập tin. Nhưng nó cần đặt cho tập tin một cái tên nào đó để người dùng (hay nói đúng hơn là chương trình ứng dụng) có thể làm việc với tập tin. Làm sao để người dùng có thể làm việc với tập tin đó là công việc của hệ thống tập tin, người dùng thường không cần quan tâm đến. Vì thế, đối với người dùng thì hệ thống tập tin là một cấu trúc lôgíc của các thư mục và tập tin. Tên tập tin trong Linux có thể dài 255 ký tự bao gồm bất kỳ ký tự nào trừ ký tự có mã bằng 0 và ký tự dấu gạch chéo (/). Tuy nhiên còn có nhiều ký tự nữa có 1Chương này do người dịch viết 2Một số tác giả thích dùng thuật ngữ “vật chứa” ở đây. 4.1 Tập tin và tên của chúng 61 ý nghĩa đặc biệt trong hệ vỏ shell và do đó không nên dùng để đặt tên tập tin. Đó là những ký tự sau: ! @ # $ & ~ % * ( ) [ ] { } ’ " \ : ; > < ‘ dấu cách Nếu tên tập tin chứa một trong những ký tự này (không khuyên dùng nhưng vẫn có thể) thì trước nó phải đặt một dấu gạch chéo ngược (\) (điều này vẫn đúng trong trường hợp có chính bản thân dấu gạch chéo ngược, tức là phải lặp lại dấu này hai lần). Ví dụ: [user]$ mkdir \\mot\&hai sẽ tạo thư mục \mot&hai. Còn có thể đặt tên tập tin hoặc thư mục với những ký tự nói trên vào dấu ngặc kép. Ví dụ, để tạo thư mục có tên “mot hai ba” chúng ta cần dùng câu lệnh sau: [user]$ mkdir "mot hai ba" vì câu lệnh [user]$ mkdir mot hai ba sẽ tạo ba thư mục: “mot”, “hai” và “ba”. Làm tương tự như vậy đối với những ký tự khác, tức là có thể thêm chúng vào tên tập tin (thư mục) nếu đưa tên vào trong dấu ngoặc kép hoặc dùng dấu gạch chéo ngược để bỏ đi ý nghĩa đặc biệt của chúng. Tuy nhiên tốt nhất là không sử dụng những ký tự này kể cả dấu cách trong tên tập tin và thư mục, bởi vì có thể gây ra vấn đề cho một số ứng dụng khi cần sử dụng những tập tin như vậy và cả khi di chuyển những tập tin đó lên hệ thống tập tin khác. Đối với dấu chấm thì không phải như vậy. Trong Linux người dùng thường đặt nhiều dấu chấm trong tên của tập tin, ví dụ xvnkb-0.2.9.tar.gz. Khi này khái niệm phần mở rộng tập tin (thường dùng trong DOS) không còn có ý nghĩa gì, mặc dù vẫn dùng phần cuối cùng của tên tập tin sau dấu chấm để làm ký hiệu về các dạng tập tin đặc biệt (.tar.gz dùng để ký hiệu các tập tin nén3). Trên Linux các tập tin chương trình và tập tin bình thường không phân biệt theo phần mở rộng của tên (trong DOS tập tin chương trình có phần mở rộng exe) mà theo các dấu hiệu khác, chúng ta sẽ đề cập đến ở sau. Dấu chấm có ý nghĩa đặc biệt trong tên tập tin. Nếu nó là dấu chấm đầu tiên trong tên, thì tập tin này sẽ là ẩn (thuộc tính hidden) đối với một số câu lệnh, ví dụ, lệnh ls không hiển thị những tập tin như vậy.4 Như đã nói ở chương trước trong Linux có phân biệt các ký tự viết hoa và viết thường. Điều này cũng đúng đối với tên tập tin. Vì thế l4u-0.9.2.tar.gz và L4U-0.9.2.tar.gz có thể nằm trong cùng một thư mục và là tên của các tập tin khác nhau. Điều này lúc đầu có thể gây khó khăn cho người dùng Windows nhưng sau khi quen thì bạn sẽ thấy nó thật sự có ích. Chúng ta đã quen với việc tập tin được xác định hoàn toàn theo tên của nó. Tuy nhiên nếu nhìn từ phía hệ điều hành và hệ thống tập tin thì không phải 3thường gọi theo tiếng lóng là tarball, quả bóng tar 4Nhưng lệnh ls -a sẽ hiển thị. Đọc thêm ls(1) để biết chi tiết. 62 Làm quen với hệ thống tập tin ext3fs như vậy. Chúng ta sẽ nói kỹ về mặt sau của hệ thống tập tin trong một số chương sách sắp tới, nhưng bây giờ cũng cần đề cập đến một chút về chỉ số “inode”. Vấn đề ở chỗ mỗi tập tin trong Linux có một “chỉ số ký hiệu” (index descriptor) tương ứng, hay còn gọi là “inode” (tạm thời chưa có thuật ngữ tiếng Việt chính xác nên xin để nguyên từ tiếng Anh). Chính inode lưu tất cả những thông tin cần thiết cho hệ thống tập tin về tập tin, bao gồm thông tin về vị trí của các phần của tập tin trên đĩa lưu, thông tin về dạng tập tin và nhiều thông tin khác. Các chỉ số inode nằm trong một bảng đặc biệt gọi là inode table. Bảng này được tạo ra trên đĩa lưu cùng lúc với hệ thống tập tin. Mỗi đĩa lưu dù là thật sự hay lôgíc thì đều có một bảng các chỉ số inode của riêng mình. Các inode trong bảng được đánh số theo thứ tự, và chính chỉ số này mới là tên thực sự của tập tin trên hệ thống. Chúng ta sẽ gọi chỉ số này là chỉ số của tập tin. Tuy nhiên đối với người dùng thì những tên như vậy thật sự không thuận tiện. Không phải ai cũng có khả năng nhớ đã ghi gì trong tập tin với số 12081982 (nói chính xác hơn là chỉ có một số rất ít người có khả năng này). Vì thế các tập tin còn được đặt thêm một tên thân thiện với người dùng và hơn thế nữa còn được nhóm vào các thư mục. Tác giả đưa ra những thông tin ở trên chỉ để nói rằng tên của bất kỳ tập tin nào trong Linux không phải gì khác mà chính là liên kết đến chỉ số inode của tập tin. Vì thế mỗi tập tin có thể có bao nhiêu tên tùy thích. Những tên này còn được gọi là liên kết “cứng” (hard link) (chúng ta sẽ làm quen kỹ hơn với khái niệm liên kết và cách tạo những liên kết này trong chương sau). Khi bạn đọc xóa một tập tin có nhiều tên (liên kết cứng) thì trên thực tế chỉ xóa đi một liên kết (mà bạn chỉ ra trên dòng lệnh xóa). Thậm chí cả khi bạn đọc đã xóa đi liên kết cuối cùng thì cũng không có nghĩa là đã xóa nội dung của tập tin: nếu tập tin đang được hệ thống hay một ứng dụng nào đó sử dụng, thì nó được lưu đến lúc hệ thống (ứng dụng) giải phóng nó. Để có thể thêm tên khác cho tập tin hoặc thư mục (tạo liên kết cứng), chúng ta sử dụng câu lệnh ln ở dạng sau: ln tên_đã_có tên_mới Ví dụ: [user]$ ln projects/l4u/l4u-0.9.2.pdf ~/l4u.pdf Ký tự ∼ có ý nghĩa đặc biệt, nó chỉ thư mục cá nhân (home directory) của người dùng, chúng ta sẽ nói kỹ hơn về ký tự này ngay sau đây. Bây giờ có thể dùng ~/l4u.pdf để thay cho đường dẫn dài hơn projects/l4u/l4u-0.9.2.pdf. Chi tiết về câu lệnh ln bạn có thể đọc trong trang man của nó. Có thể tìm ra số lượng liên kết cứng đến tập tin (tức là số lượng tên của tập tin) bằng lệnh ls với tham số -l5. Ngay phía sau quyền truy cập đến tập tin là một số cho biết số lượng những liên kết cứng này: [user]$ ls -l tổng 1280 -rw-r--r-- 1 teppi82 users 81409 2006-09-06 03:43 bash.tex drwxr-xr-x 2 teppi82 users 4096 2006-09-06 02:16 images -rw-r--r-- 2 teppi82 users 82686 2006-09-06 14:32 l4u-0.9.2.pdf -rw-r--r-- 1 teppi82 users 3069 2006-09-06 13:52 l4u.tex 5Nếu bạn dùng SuSE Linux thì có thể nhập vào lệnh ll. 4.2 Thư mục 63 (Danh sách bị cắt bớt vì không cần thiết). 4.2 Thư mục Nếu như cấu trúc tập tin không cho phép sử dụng gì khác ngoài tên tập tin (tức là tất cả các tập tin nằm trên một danh sách chung giống như các hạt cát trên bãi biển) thì thậm chí cả khi không có giới hạn về độ dài của tên, rất khó có thể tìm đến tập tin cần thiết. Hãy tưởng tượng bạn có một danh sách khoảng vài nghìn tập tin! Xin đừng nghi ngờ, một hệ thống Linux hoàn chỉnh sẽ có số lượng tập tin còn lớn hơn thế. Vì thế mà các tập tin được tổ chức vào các thư mục, các thư mục có thể nằm trong các thư mục khác, v.v. . . Kết quả là chúng ta thu được một cấu trúc thư mục có phân bậc bắt đầu từ một thư mục gốc. Mỗi thư mục (con) có thể chứa các tập tin riêng lẻ và các thư mục con của nó. Cấu trúc phân bậc của thư mục thường được minh hoạ bằng “cây thư mục”, trên đó mỗi thư mục đó là một nút của “cây”, còn tập tin – là các “lá”. Trên MS Windows hoặc DOS cấu trúc thư mục như vậy có trên mỗi ổ đĩa (tức là chúng ta có không phải một “cây” mà một “rừng” thư mục) và thư mục gốc của mỗi cấu trúc tập tin được đánh dấu bằng một chữ cái Latinh (và do đó đã có một số hạn chế). Trên Linux và UNIX nói chung chỉ có một cấu trúc thư mục duy nhất cho tất cả các đĩa lưu, và thư mục gốc duy nhất của cấu trúc này được ký hiệu bằng dấu gạch chéo “/”. Có thể đưa vào thư mục gốc này một số lượng không hạn chế các thư mục nằm trên các đĩa lưu khác nhau (thường nói là “gắn hệ thống tập tin” hoặc “gắn đĩa lưu”). Tên của thư mục cũng được đặt theo những quy định như đối với tên tập tin. Và nói chung ngoài cấu trúc bên trong của mình thì thư mục không khác gì so với những tập tin thông thường, ví dụ tập tin văn bản (text file). Tên đầy đủ của tập tin (hoặc còn gọi là “đường dẫn”6 đến tập tin) là danh sách tên của các thư mục bao gồm thư mục chứa tập tin đó và các thư mục mẹ, bắt đầu từ thư mục gốc “/” và kết thúc là bản thân tên của tập tin. Trong đường dẫn này tên của các thư mục con cách nhau bởi dấu gạch chéo “/” dùng để ký hiệu thư mục gốc như đã nói ở trên. Ví dụ /home/teppi82/projects/l4u/ext3fs.tex là tên đầy đủ của tập tin tôi đang nhập vào trên máy của mình. Hệ vỏ shell lưu giá trị của “thư mục hiện thời”, tức là thư mục mà người dùng đang làm việc trong đó. Có một câu lệnh cho biết tên của thư mục hiện thời, đó là lệnh pwd. Ghi chú: nếu nói một cách chính xác, thì thư mục hiện thời luôn đi liền với mỗi tiến trình đã chạy (trong đó có hệ vỏ shell), vì thế đôi khi chạy một chương trình nào đó trong shell có thể dẫn đến việc thay đổi thư mục hiện thời sau khi chương trình đó hoàn thành công việc. Ngoài thư mục hiện thời mỗi người dùng còn có một “thư mục nhà” (home directory, phương án dịch “thư mục cá nhân” được ưu tiên hơn, và chúng ta sẽ dùng thuật ngữ này trong cuốn sách l4u). Đó là thư mục trong đó người dùng có toàn quyền7: có thể tạo và xóa các tập tin, thay đổi quyền truy cập đến chúng, v.v. . . Trong cấu trúc thư mục của Linux những thư mục cá nhân của người dùng thường nằm trong thư mục /home và thường có tên trùng với tên đăng nhập của 6ở đây là đường dẫn tuyệt đối 7Nói chính xác hơn là: có toàn quyền đến khi nào root chưa thay đổi chúng :). 64 Làm quen với hệ thống tập tin ext3fs người dùng đó. Ví dụ: /home/nhimlui. Mỗi người dùng có thể làm việc với thư mục của mình bằng ký hiệu ~, tức là người dùng nhimlui có thể làm việc với thư mục /home/nhimlui/hinhanh bằng ~/hinhanh. Khi người dùng vào hệ thống, thư mục cá nhân sẽ trở thành thư mục hiện thời của người dùng này. Câu lệnh cd dùng để thay đổi thư mục hiện thời. Tham số của lệnh này là đường dẫn đầy đủ hoặc đường dẫn tương đối đến thư mục mà bạn muốn dùng làm hiện thời. Khái niệm đường dẫn đầy đủ (tuyệt đối) đã giải thích ở trên, bây giờ chúng ta sẽ nói rõ hơn về khái niệm đường dẫn tương đối. Đường dẫn tương đối đó là danh sách các thư mục cần phải đi qua trong cây thư mục để có thể chuyển từ thư mục hiện thời đến thư mục khác (chúng ta gọi nó là thư mục đích). Nếu thư mục đích nằm phía dưới trong cấu trúc thư mục, tức là nằm trong một thư mục con, hoặc “cháu”, “chắt” nào đó của thư mục hiện thời, thì đơn giản: chỉ cần chỉ ra thư mục con của thư mục hiện thời, sau đó thư mục con của thư mục con (thư mục “cháu”),. . . cho đến khi nào tới được thư mục đích. Nếu như thư mục đích nằm cao hơn trong cấu trúc thư mục, hoặc nằm hoàn toàn trên một “cành” khác của cây thư mục, thì phức tạp hơn một chút. Tất nhiên trong bất kỳ trường hợp nào cũng có thể sử dụng đường dẫn tuyệt đối, nhưng khi đó cần phải nhập vào một đường dẫn rất dài. Vấn đề này được giải quyết như sau: mỗi thư mục (trừ thư mục gốc) có duy nhất một thư mục mẹ trong cây thư mục. Trong mỗi thư mục có hai bản ghi đặc biệt. Một trong số chúng có ký hiệu là dấu chấm (‘.’) và chỉ đến chính bản thân thư mục này, còn bản ghi thứ hai có ký hiệu là hai dấu chấm đơn (‘..’), nó chỉ đến thư mục mẹ. Chính những dấu hai chấm này được dùng để ghi đường dẫn tương đối. Ví dụ, để dùng thư mục mẹ làm thư mục hiện thời, thì chỉ cần chạy lệnh: [user]$ cd .. Còn để chuyển “leo” lên hai bậc của cây thư mục, rồi từ đó hạ xuống thư mục vnoss/doc thì cần chạy lệnh: [user]$ cd ../../vnoss/doc Câu lệnh ls dùng để đưa ra màn hình danh sách các tập tin và thư mục con của thư mục hiện thời. Cần lưu ý là trên thực tến câu lệnh ls chỉ đưa ra nội dung của tập tin mô tả thư mục này, và không xảy ra bất kỳ nào thao tác làm việc với tập tin của thư mục. Như đã nói ở trên, mỗi thư mục chỉ là một tập tin bình thường, trong đó có liệt kê tất cả những tập tin và thư mục con của thư mục này. Tức là không có các hộp đặc biệt chứa các tập tin, chỉ có các danh sách tập tin thông thường xác định tập tin hiện thời thuộc về một thư mục nào đó. Nếu chạy câu lệnh ls không có tham số thì chúng ta chỉ thấy tên của các tập tin của thư mục hiện thời. Nếu muốn xem nội dung của một thư mục khác, thì cần phải đưa cho câu lệnh ls đường dẫn tuyệt đối hoặc tương đối đến thư mục đó. Ví dụ: [user]$ ls projects BanTin drupal-vn KDE-vi mrtg Xfce bashscripts fluxbox l4u others vim chem-tex gnomevi manvi SuSE vnlinux debian HocTap mc syslinux vnoss 4.3 Công dụng của các thư mục chính 65 Bản ghi về tập tin trong thư mục tương ứng ngoài tên còn có rất nhiều thông tin về tập tin này. Để thấy được những thông tin chi tiết đó, thì cần dùng các tham số mở rộng khác của câu lệnh ls. Nếu chạy câu lệnh ls với tham số -l thì không chỉ có tên tập tin mà sẽ hiển thị cả dữ liệu về quyền truy cập đến tập tin (chúng ta sẽ nói đến ở sau); số lượng liên kết cứng hay số lượng tên (nếu là thư mục thì ngay từ đầu đã có hai liên kết như vậy là . và .., do đó số này bằng số thư mục con công thêm 2); tên chủ sở hữu tập tin, tên nhóm sở hữu tập tin (xin được gọi tắt là “nhóm tập tin” mặc dù tối nghĩa); kích thước tập tin và thời gian sửa đổi cuối cùng. Một ví dụ minh họa khác: [user]$ ls -l tổng 1316 -rw-r--r-- 1 teppi82 users 81629 2006-09-08 22:11 bash.tex -rw-rw-r-- 1 teppi82 users 98135 2006-09-08 13:54 caidat.tex -rw-r--r-- 1 teppi82 users 783 2006-09-08 21:58 ChangeLog -rw-r--r-- 1 teppi82 users 20778 2006-09-09 02:48 ext3fs.tex -rw-r--r-- 1 teppi82 users 2013 2006-09-08 21:34 gioithieu.tex drwxr-xr-x 2 teppi82 users 4096 2006-09-08 14:25 images -rw-r--r-- 1 teppi82 users 3267 2006-09-08 23:13 l4u.tex Nếu đưa thêm tham số -i thì trong cột đầu tiên sẽ hiển thị chỉ số inode của tập tin. Khi dùng tham số -t việc sắp xếp được thực hiện không theo tên mà theo thời gian sửa đổi tập tin. Tham số -u dùng để hiển thị thời gian truy cập cuối cùng thay vào chỗ thời gian sửa đổi. Tham số -r đảo ngược lại trật tự của sắp xếp (cần phải sử dụng cùng với các tham số -l hoặc -t). Cần chú ý rằng có thể liệt kê các tham số một cách riêng rẽ như thế này: [user]$ ls -l -i - r hoặc gộp lại như thế này: [user]$ ls -lir Chúng ta dừng mô tả ngắn gọn về câu lệnh ls ở đây (chi tiết về lệnh này có thể xem trên các trang man hoặc info tương ứng) và chuyển sang xem xét các thư mục chính của cấu trúc tập tin trong Linux. 4.3 Công dụng của các thư mục chính Nếu như bạn đọc đã từng dùng Windows (ví dụ 2000 hay XP), thì biết rằng mặc dù người dùng có toàn quyền tổ chức cấu trúc thư mục, nhưng một số truyền thống vẫn được tuân theo. Ví dụ các tập tin hệ thống thường nằm trong thư mục C:\Windows, các chương trình thường được cài đặt vào C:\Program Files, v.v. . . Trong Linux cũng có một cấu trúc thư mục kiểu như vậy và thậm chí còn nghiêm ngặt hơn. Hơn nữa có một tiêu chuẩn xác định cấu trúc thư mục cho các HĐH dòng UNIX. Tiêu chuẩn này được gọi là Filesystem Hierarchy Standart (FHS). Nếu có mong muốn bạn có thể đọc toàn bộ tiêu chuẩn này tại địa chỉ 66 Làm quen với hệ thống tập tin ext3fs http://www.pathname.com/fhs/. Các bản phân phối Linux lớn đều tuân theo tiêu chuẩn này. Bảng 4.1 dưới đây đưa ra danh sách ngắn gọn những thư mục chính được tạo ra trong cấu trúc tập tin theo tiêu chuẩn nói trên. Ở cột bên trái liệt kê các thư mục con của thư mục gốc, còn cột thứ hai liệt kê một vài (không phải tất cả) thư mục con, còn cột thứ ba cuối cùng đưa ra mô tả ngắn gọn về công dụng của những thư mục này. Mô tả trong bảng này là hết sức ngắn gọn, chi tiết hơn bạn có thể đọc trong tiêu chuẩn FHS có trên http://www.pathname.com/fhs/. Bảng 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 /etc có 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 /etc không được lưu các tập tin chương trình (cần đặt chúng trong /bin hoặ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). 8do đó một số nhà quản trị không tự động gắn phân vùng /boot vào trong quá trình khởi động. 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. 68 Làm quen với hệ thống tập tin ext3fs 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 /usr là 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/X11 là 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). 70 Làm quen với hệ thống tập tin ext3fs 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ống uucp. /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à khối (trao đổi theo khối). Sự khác nhau giữa hai dạng này nằm ở cách đọc và ghi 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ệnh cd rồ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ảng 4.2 cho 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/hda1 tươ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/ttS0 tương ứng với COM1 trong DOS, /dev/ttS1 tươ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ệnh ls -l cho 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 In – First Out). Tập tin dạng này chủ yếu dùng để tổ chức trao đổi dữ liệu giữa