Giao trinh he dieu hanh linux va unix
- 214 trang
- file .pdf
www.nhipsongcongnghe.net
ĐẠI HỌC QUỐC GIA HÀ NỘI
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ
=====================================
HÀ QUANG THỤY
NGUYỄN TRÍ THÀNH
Giáo trình:
HỆ ĐIỀU HÀNH UNIX - LINUX
Dành cho sinh viên ngành Công nghệ thông tin,
Điện tử - Viễn thông, Toán tin ứng dụng
HÀ NỘI - 2004
MỤC LỤC
LỜI GIỚI THIỆU ..................................................................................................... 9
CHƯƠNG 1. GIỚI THIỆU CHUNG VỀ LINUX...................................................... 10
1.1. Giới thiệu về UNIX và Linux...................................................................................... 10
1.1.1. Xuất xứ, quá trình tiến hóa và một số đặc trưng của hệ điều hành UNIX ......... 10
1.1.2. Giới thiệu sơ bộ về Linux................................................................................... 13
1.2. Sơ bộ về các thành phần của Linux ........................................................................... 17
1.2.1. Sơ bộ về nhân ..................................................................................................... 18
1.2.2. Sơ bộ về shell ..................................................................................................... 18
1.3. Giới thiệu về sử dụng lệnh trong Linux..................................................................... 20
1.3.1. Các quy ước khi viết lệnh................................................................................... 22
1.3.3. Làm đơn giản thao tác gõ lệnh ........................................................................... 25
1.3.4. Tiếp nối dòng lệnh.............................................................................................. 29
1.4. Trang Man ................................................................................................................... 29
CHƯƠNG 2. THAO TÁC VỚI HỆ THỐNG ........................................................... 32
2.1. Quá trình khởi động Linux......................................................................................... 32
2.2. Thủ tục đăng nhập và các lệnh thoát khỏi hệ thống ................................................ 33
2.2.1. Đăng nhập........................................................................................................... 33
2.2.2. Ra khỏi hệ thống................................................................................................. 36
2.2.3. Khởi động lại hệ thống ....................................................................................... 38
2.2.4. Khởi động vào chế độ đồ hoạ ............................................................................. 38
2.3. Lệnh thay đổi mật khẩu .............................................................................................. 42
2.4. Lệnh xem, thiết đặt ngày, giờ hiện tại và xem lịch trên hệ thống ........................... 45
2.4.1 Lệnh xem, thiết đặt ngày, giờ .............................................................................. 45
2.4.2. Lệnh xem lịch .................................................................................................... 47
2.5. Xem thông tin hệ thống .............................................................................................. 48
2.6. Thay đổi nội dung dấu nhắc shell .............................................................................. 49
2.7. Lệnh gọi ngôn ngữ tính toán số học .......................................................................... 50
CHƯƠNG 3. HỆ THỐNG FILE ............................................................................. 53
3.1 Tổng quan về hệ thống file........................................................................................... 53
3.1.1. Một số khái niệm ................................................................................................ 53
3.1.2. Sơ bộ kiến trúc nội tại của hệ thống file............................................................. 57
3.1.3. Một số thuật toán làm việc với inode ................................................................. 63
3.1.4. Hỗ trợ nhiều hệ thống File.................................................................................. 66
3.1.5. Liên kết tượng trưng (lệnh ln) ............................................................................ 71
2
3.2 Quyền truy nhập thư mục và file ................................................................................ 72
3.2.1 Quyền truy nhập .................................................................................................. 72
3.2.2. Các lệnh cơ bản .................................................................................................. 75
3.3 Thao tác với thư mục.................................................................................................... 80
3.3.1 Một số thư mục đặc biệt ...................................................................................... 80
3.3.2 Các lệnh cơ bản về thư mục ................................................................................ 83
3.4. Các lệnh làm việc với file ............................................................................................ 87
3.4.1 Các kiểu file có trong Linux ................................................................................ 87
3.4.2. Các lệnh tạo file.................................................................................................. 88
3.4.3 Các lệnh thao tác trên file .................................................................................... 90
3.4.4 Các lệnh thao tác theo nội dung file .................................................................... 98
3.4.5 Các lệnh tìm file ................................................................................................ 106
3.5 Nén và sao lưu các file ................................................................................................ 115
3.5.1 Sao lưu các file (lệnh tar) .................................................................................. 115
3.5.2 Nén dữ liệu ....................................................................................................... 118
CHƯƠNG 4. QUẢN TRỊ QUÁ TRÌNH................................................................. 122
4.1 Quá trình trong UNIX................................................................................................ 122
4.1.1. Sơ bộ về quá trình............................................................................................. 122
4.1.2. Sơ bộ cấu trúc điều khiển của UNIX................................................................ 123
4.1.3. Các hệ thống con trong nhân ............................................................................ 125
4.1.4. Sơ bộ về điều khiển quá trình ........................................................................... 129
4.1.5. Trạng thái và chuyển dịch trạng thái ................................................................ 130
4.1.6. Sự ngưng hoạt động và hoạt động trở lại của quá trình.................................... 132
4.1.7. Sơ bộ về lệnh đối với quá trình ........................................................................ 132
4.2. Các lệnh cơ bản.......................................................................................................... 133
4.2.1. Lệnh fg và lệnh bg ............................................................................................ 133
4.2.2. Hiển thị các quá trình đang chạy với lệnh ps ................................................... 135
4.2.3. Hủy quá trình với lệnh kill ............................................................................... 137
4.2.4. Cho máy ngừng hoạt động một thời gian với lệnh sleep.................................. 139
4.2.5. Xem cây quá trình với lệnh pstree.................................................................... 139
4.2.6. Lệnh thiết đặt lại độ ưu tiên của quá trình nice và lệnh renice......................... 141
CHƯƠNG 5. QUẢN LÝ TÀI KHOẢN NGƯỜI DÙNG ......................................... 142
5.1 Tài khoản người dùng ................................................................................................ 142
5.2 Các lệnh cơ bản quản lý người dùng ........................................................................ 142
5.2.1 File /etc/passwd ................................................................................................ 143
5.2.2 Thêm người dùng với lệnh useradd................................................................... 143
5.2.3 Thay đổi thuộc tính người dùng ........................................................................ 146
5.2.4 Xóa bỏ một người dùng (lệnh userdel).............................................................. 147
3
5.3 Các lệnh cơ bản liên quan đến nhóm người dùng ................................................... 148
5.3.1 Nhóm người dùng và file /etc/group ................................................................. 148
5.3.2 Thêm nhóm người dùng .................................................................................... 149
5.3.3 Sửa đổi các thuộc tính của một nhóm người dùng (lệnh groupmod) ................ 149
5.3.4 Xóa một nhóm người dùng (lệnh groupdel) ...................................................... 150
5.4 Các lệnh cơ bản khác có liên quan đến người dùng ................................................ 150
5.4.1 Đăng nhập với tư cách một người dùng khác khi dùng lệnh su ....................... 150
5.4.2 Xác định người dùng đang đăng nhập (lệnh who) ............................................ 151
5.4.3 Xác định các quá trình đang được tiến hành (lệnh w)....................................... 153
CHƯƠNG 6. TRUYỀN THÔNG VÀ MẠNG UNIX-LINUX................................... 154
6.1. Lệnh truyền thông ..................................................................................................... 154
6.1.1. Lệnh write......................................................................................................... 154
6.1.2. Lệnh mail.......................................................................................................... 155
6.1.3. Lệnh talk ........................................................................................................... 156
6.2 Cấu hình Card giao tiếp mạng .................................................................................. 156
6.3. Các dịch vụ mạng ...................................................................................................... 159
6.3.1 Hệ thông tin mạng NIS...................................................................................... 159
6.4 Hệ thống file trên mạng ............................................................................................. 164
6.4.1 Cài đặt NFS ....................................................................................................... 165
6.4.2 Khởi động và dừng NFS.................................................................................... 166
6.4.3 Cấu hình NFS server và Client .......................................................................... 167
6.4.4 Sử dụng mount................................................................................................... 167
6.4.5 Unmount ............................................................................................................ 168
6.4.6 Mount tự động qua tệp cấu hình........................................................................ 168
CHƯƠNG 7. LẬP TRÌNH SHELL VÀ LẬP TRÌNH C TRÊN LINUX ................... 170
7.1. Cách thức pipes và các yếu tố cơ bản lập trình trên shell ..................................... 170
7.1.1. Cách thức pipes ................................................................................................ 170
7.1.2. Các yếu tố cơ bản để lập trình trong shell ........................................................ 171
7.2. Một số lệnh lập trình trên shell ................................................................................ 175
7.2.1. Sử dụng các toán tử bash .................................................................................. 175
7.2.2. Điều khiển luồng .............................................................................................. 179
7.2.3 Các toán tử định hướng vào ra........................................................................... 193
7.2.4. Hiện dòng văn bản............................................................................................ 194
7.2.5. Lệnh read độc dữ liệu cho biến người dùng ..................................................... 194
7.2.6. Lệnh set ............................................................................................................ 195
7.2.7. Tính toán trên các biến ..................................................................................... 196
7.2.8. Chương trình ví dụ............................................................................................ 196
4
7.3. Lập trình C trên UNIX ............................................................................................. 197
7.3.1. Trình biên dịch gcc ........................................................................................... 197
7.3.2. Công cụ GNU make ......................................................................................... 201
7.3.3. Làm việc với file............................................................................................... 203
7.3.4. Thư viện liên kết............................................................................................... 211
7.3.5 Các công cụ cho thư viện ................................................................................. 220
TÀI LIỆU THAM KHẢO ...................................................................................... 223
CHÚ THÍCH MỘT SỐ THUẬT NGỮ ................................................................... 224
PHỤ LỤC A. QUÁ TRÌNH CÀI ĐẶT REDHAT-LINUX ........................................ 227
AA. Cài đặt phiên bản RedHat 6.2 ................................................................................. 228
AA.1. Tạo đĩa mềm khởi động ................................................................................... 228
AA.2. Phân vùng lại ổ đĩa DOS/Windows hiện thời.................................................. 228
AA.3. Các bước cài đặt (bản RedHat 6.2 và khởi động từ CD-ROM)....................... 229
AA.4. Các hạn chế về phần cứng đối với Linux ........................................................ 239
PHỤ LỤC B. TRÌNH SOẠN THẢO VIM .............................................................. 242
B.1 Khởi động vim ............................................................................................................ 244
B.1.1 Mở chương trình soạn thảo vim........................................................................ 244
B.1.2. Tính năng mở nhiều cửa sổ.............................................................................. 245
B.1.3. Ghi và thoát trong vim ..................................................................................... 246
B.2. Di chuyển trỏ soạn thảo trong Vim ......................................................................... 247
B.2.1. Di chuyển trong văn bản .................................................................................. 247
B.2.2. Di chuyển theo các đối tượng văn bản............................................................. 248
B.2.3. Cuộn màn hình................................................................................................. 248
B.3. Các thao tác trong văn bản ...................................................................................... 249
B.3.1. Các lệnh chèn văn bản trong vim..................................................................... 249
B.3.2. Các lệnh xoá văn bản trong vim ...................................................................... 250
B.3.3. Các lệnh khôi phục văn bản trong vim ............................................................ 250
6.3.4. Các lệnh thay thế văn bản trong vim ................................................................ 250
B.3.5. Sao chép và di chuyển văn bản trong vim ....................................................... 252
B.3.6. Tìm kiếm và thay thế văn bản trong vim ......................................................... 253
B.3.7. Đánh dấu trong vim ......................................................................................... 254
B.3.8. Các phím sử dụng trong chế độ chèn............................................................... 255
B.3.9. Một số lệnh trong chế độ ảo............................................................................. 256
B.3.10. Các lệnh lặp ................................................................................................... 256
B.4. Các lệnh khác ............................................................................................................ 257
B.4.1. Cách thực hiện các lệnh bên trong Vim........................................................... 257
B.4.2. Các lệnh liên quan đến file............................................................................... 257
5
PHỤ LỤC C. MIDNIGHT COMMANDER ............................................................ 259
C.1. Giới thiệu về Midnight Commander (MC) ............................................................ 259
C.2. Khởi động MC .......................................................................................................... 259
C.3. Giao diện của MC ..................................................................................................... 259
C.4. Dùng chuột trong MC .............................................................................................. 260
C.5. Các thao tác bàn phím.............................................................................................. 261
C.6. Thực đơn thanh ngang (menu bar)......................................................................... 263
C.7. Các phím chức năng ................................................................................................. 266
C.8. Bộ soạn thảo của Midnight Commander................................................................ 267
PHỤ LỤC D. SAMBA.......................................................................................... 270
D.1 Cài đặt Samba ............................................................................................................ 270
D.2 Các thành phần của Samba ...................................................................................... 271
D.3 File cấu hình Samba .................................................................................................. 272
D.4 Các phần đặc biệt của file cấu hình Samba............................................................. 275
D.5 Quản lý người dùng trong Samba............................................................................ 282
D.6 Cách sử dụng Samba từ các máy trạm.................................................................... 284
D.6.1 Cách sử dụng từ các máy trạm là Linux ........................................................... 284
D.6.2 Cách sử dụng từ các máy trạm là Windows ..................................................... 287
6
LỜI GIỚI THIỆU
Trong hơn mười năm trở lại đây hệ điều hành Linux đã
7
CHƯƠNG 1. GIỚI THIỆU CHUNG VỀ LINUX
1.1. Giới thiệu về UNIX và Linux
1.1.1. Xuất xứ, quá trình tiến hóa và một số đặc trưng của hệ điều hành UNIX
Năm 1965, Viện công nghệ Massachusetts (MIT: Massachusetts Institute of
Technology) và Phòng thí nghiệm Bell của hãng AT&T thực hiện dự án xây dựng một hệ
điều hành có tên gọi là Multics (MULTiplexed Information and Computing Service) với
mục tiêu: tạo lập được một hệ điều hành phủ trên vùng lãnh thổ rộng (hoạt động trên tập
các máy tính được kết nối), đa người dùng, có năng lực cao về tính toán và lưu trữ. Dự án
nói trên thành công ở mức độ hết sức khiêm tốn và người ta đã biết đến một số khiếm
khuyết khó khắc phục của Multics.
Năm1969, Ken Thompson, một chuyên viên tại phòng thí nghiệm Bell, người đã tham
gia dự án Multics, cùng Dennics Richie viết lại hệ điều hành đa-bài toán trên máy PDP-7
với tên là UNICS (UNiplexed Information and Computing Service) từ một câu gọi đùa của
một đồng nghiệp. Trong hệ điều hành UNICS, một số khởi thảo đầu tiên về Hệ thống file
đã được Ken Thompson và Dennis Ritchie thực hiện. Đến năm 1970 hệ điều hành được viết
trên assembler cho máy PDP-11/20 và mang tên là UNIX.
Năm 1973, Riche và Thompson viết lại nhân của hệ điều hành UNIX trên ngôn ngữ C,
và hệ điều hành đã trở nên dễ dàng cài đặt tới các loại máy tính khác nhau; tính chất như
thế được gọi là tính khả chuyển (portable) của UNIX. Trước đó, khoảng năm 1971, hệ điều
hành được thể hiện trên ngôn ngữ B (mà dựa trên ngôn ngữ B, Ritche đã phát triển thành
ngôn ngữ C).
Hãng AT&T phổ biến chương trình nguồn UNIX tới các trường đại học, các công ty
thương mại và chính phủ với giá không đáng kể.
Năm 1982, hệ thống UNIX-3 là bản UNIX thương mại đầu tiên của AT&T.
Năm 1983, AT&T giới thiệu Hệ thống UNIX-4 phiên bản thứ nhất trong đó đã có trình
soạn thảo vi, thư viện quản lý màn hình được phát triển từ Đại học Tổng hợp California,
Berkley.
Giai đoạn 1985-1987, UNIX-5 phiên bản 2 và 3 tương ứng được đưa ra vào các năm
1985 và 1987. Trong giai đoạn này, có khoảng 100000 bản UNIX đã được phổ biến trên thế
giới, cài đặt từ máy vi tính đến các hệ thống lớn.
Đầu thập kỷ 1990. UNIX-5 phiên bản 4 được đưa ra như là một chuẩn của UNIX. Đây
là sự kết hợp của các bản sau:
AT&T UNIX-5 phiên bản 3,
Berkley Software Distribution (BSD),
XENIX của MicroSoft
SUN OS
Có thể tìm thấy các nội dung liên quan tới một số phiên bản mới của UNIX tại địa chỉ
website http://problem.rice.edu/.
Các nhóm nhà cung cấp khác nhau về UNIX đang hoạt động trong thời gian hiện nay
được kể đến như sau:
Unix International (viết tắt là UI). UI là một tổ chức gồm các nhà cung cấp
thực hiện việc chuyển nhượng hệ thống UNIX-5 và cung cấp bản AT&T theo các
8
nhu cầu và thông báo phát hành mới, chẳng hạn như điều chỉnh bản quyền. Giao
diện đồ họa người dùng là Open Look.
Open Software Foundation (OSF). OSF được hỗ trợ bởi IBM, DEC, HP ...
theo hướng phát triển một phiên bản của Unix nhằm tranh đua với hệ thống UNIX-5
phiên bản 4. Phiên bản này có tên là OSF/1 với giao diện đồ họa người dùng được
gọi là MOTIF.
Free SoftWare Foundation (FSF): một cộng đồng do Richard Stallman khởi
xướng năm 1984 chủ trương phát hành các phần mềm sử dụng tự do, trên cơ sở một
hệ điều hành thuộc loại UNIX.
Bảng sau đây liệt kê một số cài đặt UNIX khá phổ biến (thường thấy có chữ X ở cuối
tên gọi của Hệ điều hành):
Tên hệ Nhà cung cấp Nền phát triển
AIX International Business Machines AT&T System V
A/UX Apple Computer AT&T System V
Dynix Sequent BSD (Berkeley SoftWare Distribution)
HP-UX Hewlett-Packard BSD
Irix Silicon Graphics AT&T System V
Linux Free SoftWare Foundation
NextStep Next BSD
OSF/1 Digital Equipment Corporation BSD
SCO UNIX Santa Cruz Operation AT&T System V
Solaris Sun Microsystems AT&T System V
SunOS Sun Microsystems BSD UNIX
Ultrix Digital Equipment Corporation BSD UNIX
Unicos Cray AT&T System V
UnixWare Novell AT&T System V
XENIX MicroSoft AT&T System III-MS
Dưới đây liệt kê một số đặc trưng của hệ điều hành UNIX:
Hệ điều hành được viết trên ngôn ngữ bậc cao; bởi vậy, rất dễ đọc, dễ hiểu,
dễ thay đổi để cài đặt trên loại máy mới (tính dễ mang chuyển, như đã nói),
Có giao diện người dùng đơn giản đủ năng lực cung cấp các dịch vụ mà
người dùng mong muốn (so sánh với các hệ điều hành có từ trước đó thì giao diện
của UNIX là một tiến bộ vượt bậc),
Thỏa mãn nguyên tắc xây dựng các chương trình phức tạp từ những chương
trình đơn giản hơn: trước hết có các môđun cơ bản nhất của nhân sau đó phát triển
để có toàn bộ hệ điều hành,
Sử dụng duy nhất một hệ thống File có cấu trúc cho phép dễ dàng bảo quản
và sử dụng hiệu quả,
9
Sử dụng phổ biến một dạng đơn giản trình bày nội tại của File như một dòng
các byte cho phép dễ dàng khi viết các chương trình ứng dụng truy nhập, thao tác
với các dữ liệu trong File,
Có kết nối đơn giản với thiết bị ngoại vi: các file thiết bị đã được đặt sẵn
trong Hệ thống File tạo ra một kết nối đơn giản giữa chương trình người dùng với
các thiết bị ngoại vi,
Là hệ điều hành đa người dùng, đa quá trình, trong đó mỗi người dùng có
thể thực hiện các quá trình của mình một cách độc lập.
Mọi thao tác vào - ra của hệ điều hành được thực hiện trên hệ thống File:
mỗi thiết bị vào ra tương ứng với một file. Chương trình người dùng làm việc với
file đó mà không cần quan tâm cụ thể tên file đó được đặt cho thiết bị nào trong hệ
thống.
Che khuất cấu trúc máy đối với người dùng, đảm bảo tính độc lập tương đối
của chương trình đối với dữ liệu và phần cứng, tạo điều kiện thuận lợi hơn cho
người lập trình khi viết các chương trình chạy UNIX với các điều kiện phần cứng
hoàn toàn khác biệt nhau.
1.1.2. Giới thiệu sơ bộ về Linux
Linus Tovalds (một sinh viên Phần lan) đưa ra nhân (phiên bản đầu tiên) cho hệ điều hành
Linux vào tháng 8 năm 1991 trên cơ sở cải tiến một phiên bản UNIX có tên Minix do Giáo
sư Andrew S. Tanenbaum xây dựng và phổ biến. Nhân Linux tuy nhỏ song là tự đóng gói.
Kết hợp với các thành phần trong hệ thống GNU, hệ điều hành Linux đã được hình thành.
Và cũng từ thời điểm đó, theo tư tưởng GNU, hàng nghìn, hàng vạn chuyên gia trên toàn
thế giới (những người này hình thành nên cộng đồng Linux) đã tham gia vào quá trình phát
triển Linux và vì vậy Linux ngày càng đáp ứng nhu cầu của người dùng.
Dưới đây là một số mốc thời gian quan trọng trong quá trình hình thành và phát triển hệ
điều hành Linux.
Sau ba năm nhân Linux ra đời, đến ngày 14-3-1994, hệ điều hành Linux phiên bản
1.0 được phổ biến. Thành công lớn nhất của Linux 1.0 là nó đã hỗ trợ giao thức mạng
TCP/IP chuẩn UNIX, sánh với giao thức socket BSD- tương thích cho lập trình mạng.
Trình điều khiển thiết bị đã được bổ sung để chạy IP trên một mạng Ethernet hoặc trên
tuyến đơn hoặc qua modem. Hệ thống file trong Linux 1.0 đã vượt xa hệ thống file của
Minix thông thường, ngoài ra đã hỗ trợ điều khiển SCSI truy nhập đĩa tốc độ cao. Điều
khiển bộ nhớ ảo đã được mở rộng để hỗ trợ điều khiển trang cho các file swap và ánh xạ
bộ nhớ của file đặc quyền (chỉ có một ánh xạ bộ nhớ chỉ đọc được thi hành trong Linux
1.0).
Vào tháng 3-1995, nhân 1.2 được phổ biến. Điều đáng kể của Linux 1.2 so với
Linux 1.0 ở chỗ nó hỗ trợ một phạm vi rộng và phong phú phần cứng, bao gồm cả kiến
trúc tuyến phần cứng PCI mới. Nhân Linux 1.2 là nhân kết thúc dòng nhân Linux chỉ hỗ
trợ PC.
Một điều cần lưu ý về các đánh chỉ số các dòng nhân (hệ điều hành) Linux. Hệ thống
chỉ số được chia thành một số mức, chẳng hạn hai mức như 2.4 hoặc ba mức như 2.2.5.
Trong cách đánh chỉ số như vậy, quy ước rằng với các chỉ số từ mức thứ hai trở đi, nếu
là số chẵn thì dòng nhân đó đã khá ổn định và tương đối hoàn thiện, còn nếu là số lẻ thì
dòng nhân đó vẫn đang được phát triển tiếp.
1
0
Tháng 6-1996, nhân Linux 2.0 được phổ biến. Có hai đặc trưng nổi bật của Linux
2.0 là hỗ trợ kiến trúc phức hợp, bao gồm cả cổng Alpha 64-bit đầy đủ, và hỗ trợ kiến
trúc đa bộ xử lý. Phân phối nhân Linux 2.0 cũng thi hành được trên bộ xử lý Motorola
68000 và kiến trúc SPARC của SUN. Các thi hành của Linux dựa trên vi nhân GNU
Mach cũng chạy trên PC và PowerMac.
Tới năm 2000, nhân Linux 2.4 được phổ biến. Một trong đặc điểm được quan tâm
của nhân này là nó hỗ trợ mã ký tự Unicode 32 bít, rất thuận lợi cho việc xây dựng các
giải pháp toàn diện và triệt để đối với vấn đề ngôn ngữ tự nhiên trên phạm vi toàn thế
giới.
Vấn đề phân phối và giấy phép Linux
Về lý thuyết, mọi người có thể khởi tạo một hệ thống Linux bằng cách tiếp nhận bản mới
nhất các thành phần cần thiết từ các site ftp và biên dịch chúng. Trong thời kỳ đầu tiên,
người dùng Linux phải tiến hành toàn bộ các thao tác này và vì vậy công việc là khá vất vả.
Tuy nhiên, do có sự tham gia đông đảo của các cá nhân và nhóm phát triển Linux, đã tiến
hành thực hiện nhiều giải pháp nhằm làm cho công việc khởi tạo hệ thống đỡ vất vả. Một
trong những giải pháp điển hình nhất là cung cấp tập các gói chương trình đã tiền dịch,
chuẩn hóa.
Những tập hợp như vậy hay những bản phân phối là lớn hơn nhiều so với hệ thống Linux
cơ sở. Chúng thường bao gồm các tiện ích bổ sung cho khởi tạo hệ thống, các thư viện
quản lý, cũng như nhiều gói đã được tiền dịch, sẵn sàng khởi tạo của nhiều bộ công cụ
UNIX dùng chung, chẳng hạn như phục vụ tin, trình duyệt web, công cụ xử lý, soạn thảo
văn bản và thậm chí các trò chơi.
Cách thức phân phối ban đầu rất đơn giản song ngày càng được nâng cấp và hoàn thiện
bằng phương tiện quản lý gói tiên tiến. Các bản phân phối ngày nay bao gồm các cơ sở dữ
liệu tiến hóa gói, cho phép các gói dễ dàng được khởi tạo, nâng cấp và loại bỏ.
Nhà phân phối đầu tiên thực hiện theo phương châm này là Slakware, và chính họ là những
chuyển biến mạnh mẽ trong cộng đồng Linux đối với công việc quản lý gói khởi tạo Linux.
Tiện ích quản lý gói RPM (RedHat Package Manager) của công ty RedHat là một trong
những phương tiện điển hình.
Nhân Linux là phần mềm tự do được phân phối theo Giấy phép sở hữu công cộng phần
mềm GNU GPL.
Các thành phần tích hợp Hệ điều hành Linux
Linux sử dụng rất nhiều thành phần từ Dự án phần mềm tự do GNU, từ hệ điều hành BSD
của Đại học Berkeley và từ hệ thống X-Window của MIT.
Thư viện hệ thống chính của Linux được bắt nguồn từ Dự án GNU, sau đó được rất nhiều
người trong cộng đồng Linux phát triển tiếp, những phát triển tiếp theo như vậy chủ yếu
liên quan tới việc giải quyết các vấn đề như thiếu vắng địa chỉ (lỗi trang), thiếu hiệu quả và
gỡ rối. Một số thành phần khác của Dự án GNU, chẳng hạn như trình biên dịch GNU C
(gcc), vốn là chất lượng cao nên được sử dụng nguyên xy trong Linux.
Các tool quản lý mạng được bắt nguồn từ mã 4.3BSD song sau đó đã được cộng đồng
Linux phát triển, chẳng hạn như thư viện toán học đồng xử lý dấu chấm động Intel và các
trình điều khiển thiết bị phần cứng âm thanh PC. Các tool quản lý mạng này sau đó lại
được bổ sung vào hệ thống BSD.
1
1
Hệ thống Linux được duy trì gần như bởi một mạng lưới không chặt chẽ các nhà phát triển
phần mềm cộng tác với nhau qua Internet, mạng lưới này gồm các nhóm nhỏ và cá nhân
chịu trách nhiệm duy trì tính toàn vẹn của từng thành phần. Một lượng nhỏ các site phân
cấp ftp Internat công cộng đã đóng vai trò nhà kho theo chuẩn de facto để chứa các thành
phần này. Tài liệu Chuẩn phân cấp hệ thống file (File System Hierarchy Standard) được
cộng đồng Linux duy trì nhằm giữ tính tương thích xuyên qua sự khác biệt rất lớn giữa các
thành phần hệ thống.
Một số đặc điểm chính của Linux
Dưới đây trình bày một số đặc điểm chính của của hệ điều hành Linux hiện tại:
Linux tương thích với nhiều hệ điều hành như DOS, MicroSoft Windows ...:
Cho phép cài đặt Linux cùng với các hệ điều hành khác trên cùng một ổ cứng. Linux
có thể truy nhập đến các file của các hệ điều hành cùng một ổ đĩa. Linux cho phép chạy
mô phỏng các chương trình thuộc các hệ điều hành khác.
Do giữ được chuẩn của UNIX nên sự chuyển đổi giữa Linux và các hệ UNIX khác
là dễ dàng.
Linux là một hệ điều hành UNIX tiêu biểu với các đặc trưng là đa người dùng, đa
chương trình và đa xử lý.
Linux có giao diện đồ hoạ (GUI) thừa hưởng từ hệ thống X-Window. Linux hỗ trợ
nhiều giao thức mạng, bắt nguồn và phát triển từ dòng BSD. Thêm vào đó, Linux còn hỗ
trợ tính toán thời gian thực.
Linux khá mạnh và chạy rất nhanh ngay cả khi nhiều quá trình hoặc nhiều cửa sổ.
Linux được cài đặt trên nhiều chủng loại máy tính khác nhau như PC, Mini và việc
cài đặt khá thuận lợi. Tuy nhiên, hiện nay chưa xuất hiện Linux trên máy tính lớn
(mainframe).
Linux ngày càng được hỗ trợ bởi các phần mềm ứng dụng bổ sung như soạn thảo,
quản lý mạng, quản trị cơ sở dữ liệu, bảng tính ...
Linux hỗ trợ tốt cho tính toán song song và máy tính cụm (PC-cluster) là một hướng
nghiên cứu triển khai ứng dụng nhiều triển vọng hiện nay.
Là một hệ điều hành với mã nguồn mở, được phát triển qua cộng đồng nguồn mở
(bao gồm cả Free Software Foundation) nên Linux phát triển nhanh. Linux là một trong
một số ít các hệ điều hành được quan tâm nhiều nhất trên thế giới hiện nay.
Linux là một hệ điều hành hỗ trợ đa ngôn ngữ một cách toàn diện nhất. Do Linux
cho phép hỗ trợ các bộ mã chuẩn từ 16 bit trở lên (trong đó có các bộ mã ISO10646,
Unicode) cho nên việc bản địa hóa trên Linux là triệt để nhất trong các hệ điều hành.
Tuy nhiên cũng tồn tại một số khó khăn làm cho Linux chưa thực sự trở thành một hệ điều
hành phổ dụng, dưới đây là một số khó khăn điển hình:
Tuy đã có công cụ hỗ trợ cài đặt, tuy nhiên, việc cài đặt Linux còn tương đối phức
tạp và khó khăn. Khả năng tương thích của Linux với một số loại thiết bị phần cứng còn
thấp do chưa có các trình điều khiển cho nhiều thiết bị,
1
2
Phần mềm ứng dụng chạy trên nền Linux tuy đã phong phú song so với một số hệ
điều hành khác, đặc biệt là khi so sánh với MS Windows, thì vẫn còn có khoảng cách.
Với sự hỗ trợ của nhiều công ty tin học hàng đầu thế giới (IBM, SUN, HP ...) và sự tham
gia phát triển của hàng vạn chuyên gia trên toàn thế giới thuộc cộng đồng Linux, các khó
khăn của Linux chắc chắn sẽ nhanh chóng được khắc phục.
Chính vì lẽ đó đã hình thành một số nhà cung cấp Linux trên thế giới. Bảng dưới đây là
tên của một số nhà cung cấp Linux có tiếng nhất và địa chỉ website của họ.
Đáng chú ý nhất là Red Hat Linux (tại Mỹ) và Red Flag Linux (tại Trung Quốc). Red
Hat được coi là lâu đời và tin cậy, còn Red Flag là một công ty Linux của Trung quốc, có
quan hệ với cộng đồng Linux Việt nam và chúng ta có thể học hỏi một cách trực tiếp kinh
nghiệm cho quá trình đưa Linux vào Việt nam.
Tên công ty Địa chỉ website
Caldera OpenLinux www.caldera.com
Corel Linux www.corel.com
Debian GNU/Linux www.debian.com
Linux Mandrake www.mandrake.com
Red Hat Linux www.redhat.com
Red Flag Linux www.redflag-linux.com
Slackware Linux www.slackware.com
SuSE Linux www.suse.com
TurboLinux www.turbolinux.com
1.2. Sơ bộ về các thành phần của Linux
Hệ thống Linux, được thi hành như một hệ điều hành UNIX truyền thống, gồm shell và ba
thành phần (đã dạng mã chương trình) sau đây:
- Nhân hệ điều hành chịu trách nhiệm duy trì các đối tượng trừu tượng quan trọng của hệ
điều hành, bao gồm bộ nhớ ảo và quá trình. Các mô đun chương trình trong nhân được
đặc quyền trong hệ thống, bao gồm đặc quyền thường trực ở bộ nhớ trong.
- Thư viện hệ thống xác định một tập chuẩn các hàm để các ứng dụng tương tác với
nhân, và thi hành nhiều chức năng của hệ thống nhưng không cần có các đặc quyền của
mô đun thuộc nhân. Một hệ thống con điển hình được thi hành dựa trên thư viên hệ
thống là hệ thống file Linux.
- Tiện ích hệ thống là các chương trình thi hành các nhiệm vụ quản lý riêng rẽ, chuyên
biệt. Một số tiện ích hệ thống được gọi ra chỉ một lần để khởi động và cấu hình phương
tiện hệ thống, một số tiện ích khác, theo thuật ngữ UNIX được gọi là trình chạy ngầm
(daemon), có thể chạy một cách thường xuyên (thường theo chu kỳ), điều khiển các bài
toán như hưởng ứng các kết nối mạng mới đến, tiếp nhận yêu cầu logon, hoặc cập nhật
các file log.
Tiện ích (hay lệnh) có sẵn trong hệ điều hành (dưới đây tiện ích được coi là lệnh thường
trực). Nội dung chính yếu của tài liệu này giới thiệu chi tiết về một số lệnh thông dụng nhất
của Linux. Hệ thống file sẽ được giới thiệu trong chương 3. Trong các chương sau có đề
cập tới nhiều nội dung liên quan đến nhân và shell, song dưới đây là một số nét sơ bộ về
chúng.
1
3
1.2.1. Sơ bộ về nhân
Nhân (còn được gọi là hệ lõi) của Linux, là một bộ các môdun chương trình có vai trò
điều khiển các thành phần của máy tính, phân phối các tài nguyên cho người dùng (các quá
trình người dùng). Nhân chính là cầu nối giữa chương trình ứng dụng với phần cứng.
Người dùng sử dụng bàn phím gõ nội dung yêu cầu của mình và yêu cầu đó được nhân gửi
tới shell: Shell phân tích lệnh và gọi các chương trình tương ứng với lệnh để thực hiện.
Một trong những chức năng quan trọng nhất của nhân là giải quyết bài toán lập lịch, tức
là hệ thống cần phân chia CPU cho nhiều quá trình hiện thời cùng tồn tại. Đối với Linux, số
lượng quá trình có thể lên tới con số hàng nghìn. Với số lượng quá trình đồng thời nhiều
như vậy, các thuật toán lập lịch cần phải đủ hiệu quả: Linux thường lập lịch theo chế độ
Round Robin (RR) thực hiện việc luân chuyển CPU theo lượng tử thời gian.
Thành phần quan trọng thứ hai trong nhân là hệ thống các môđun chương trình (được
gọi là lời gọi hệ thống) làm việc với hệ thống file. Linux có hai cách thức làm việc với các
file: làm việc theo byte (kí tự) và làm việc theo khối. Một đặc điểm đáng chú ý là file trong
Linux có thể được nhiều người cùng truy nhập tới nên các lời gọi hệ thống làm việc với file
cần đảm bảo việc file được truy nhập theo quyền và được chia xẻ cho người dùng.
1.2.2. Sơ bộ về shell
Một số nội dung chi tiết về shell (còn được gọi là hệ vỏ) trong Linux được trình bày
trong chương "Lập trình trên shell". Những nội dung trình bày dưới đây cung cấp một cách
nhìn sơ bộ về shell và vai trò của nó trong hoạt động chung của hệ điều hành.
Người dùng mong muốn máy tính thực hiện một công việc nào đó thì cần gõ lệnh thể
hiện yêu cầu của mình để hệ thống đáp ứng yêu cầu đó. Shell là bộ dịch lệnh và hoạt động
như một kết nối trung gian giữa nhân với người dùng: Shell nhận dòng lệnh do người dùng
đưa vào; và từ dòng lệnh nói trên, nhân tách ra các bộ phận để nhận được một hay một số
lệnh tương ứng với các đoạn văn bản có trong dòng lệnh. Một lệnh bao gồm tên lệnh và
tham số: từ đầu tiên là tên lệnh, các từ tiếp theo (nếu có) là các tham số. Tiếp theo, shell sử
dụng nhân để khởi sinh một quá trình mới (khởi tạo quá trình) và sau đó, shell chờ đợi quá
trình con này tiến hành, hoàn thiện và kết thúc. Khi shell sẵn sàng tiếp nhận dòng lệnh của
người dùng, một dấu nhắc shell (còn gọi là dấu nhắc nhập lệnh) xuất hiện trên màn hình.
Linux có hai loại shell phổ biến là: C-shell (dấu nhắc %), Bourne-shell (dấu nhắc $) và
một số shell phát triển từ các shell nói trên (chẳng hạn, TCshell - tcsh với dấu nhắc ngầm
định > phát triển từ C-shell và GNU Bourne - bash với dấu nhắc bash # phát triển từ
Bourne-shell). Dấu mời phân biệt shell nói trên không phải hoàn toàn rõ ràng do Linux cho
phép người dùng thay đổi lại dấu nhắc shell nhờ việc thay giá trị các biến môi trường PS1
và PS2. Trong tài liệu này, chúng ta sử dụng kí hiệu "hàng rào #" để biểu thị dấu nhắc
shell.
C-shell có tên gọi như vậy là do cách viết lệnh và chương trình lệnh Linux tựa như
ngôn ngữ C. Bourne-shell mang tên tác giả của nó là Steven Bourne. Một số lệnh trong C-
shell (chẳng hạn lệnh alias) không còn có trong Bourne-shell và vì vậy để nhận biết hệ
thống đang làm việc với shell nào, chúng ta gõ lệnh:
# alias
Nếu một danh sách xuất hiện thì shell đang sử dụng là C-shell; ngược lại, nếu xuất hiện
thông báo "Command not found" thì shell đó là Bourne-shell.
Lệnh được chia thành 3 loại lệnh:
1
4
Lệnh thường trực (có sẵn của Linux). Tuyệt đại đa số lệnh được giới thiệu
trong tài liệu này là lệnh thường trực. Chúng bao gồm các lệnh được chứa sẵn trong
shell và các lệnh thường trực khác.
File chương trình ngôn ngữ máy: chẳng hạn, người dùng viết trình trên ngôn
ngữ C qua bộ dịch gcc (bao gồm cả trình kết nối link) để tạo ra một chương trình
trên ngôn ngữ máy.
File chương trình shell (Shell Scrip).
Khi kết thúc một dòng lệnh cần gõ phím ENTER để shell phân tích và thực hiện lệnh.
1.3. Giới thiệu về sử dụng lệnh trong Linux
Như đã giới thiệu ở phần trên, Linux là một hệ điều hành đa người dùng, đa nhiệm,
được phát triển bởi hàng nghìn chuyên gia Tin học trên toàn thế giới nên hệ thống lệnh
cũng ngày càng phong phú; đến thời điểm hiện nay Linux có khoảng hơn một nghìn lệnh.
Tuy nhiên chỉ có khoảng vài chục lệnh là thông dụng nhất đối với người dùng. Tài liệu
này cũng hạn chế giới thiệu khoảng vài chục lệnh đó. Chúng ta đừng e ngại về số lượng
lệnh được giới thiệu chỉ chiếm một phần nhỏ trong tập hợp lệnh bởi vì đây là những lệnh
thông dụng nhất và chúng cung cấp một phạm vi ứng dụng rộng lớn, đủ thỏa mãn yêu cầu
của chúng ta.
Cũng như đã nói ở trên, người dùng làm việc với máy tính thông qua việc sử dụng trạm
cuối: người dùng đưa yêu cầu của mình bằng cách gõ "lệnh" từ bàn phím và giao cho hệ
điều hành xử lý.
Khi cài đặt Linux lên máy tính cá nhân thì máy tính cá nhân vừa đóng vai trò trạm cuối,
vừa đóng vai trò máy tính xử lý.
Dạng tổng quát của lệnh Linux có thể được viết như sau:
# [] ¿
trong đó:
Tên lệnh là một dãy ký tự, không có dấu cách, biểu thị cho một lệnh của
Linux hay một chương trình. Người dùng cần hệ điều hành đáp ứng yêu cầu gì của
mình thì phải chọn đúng tên lệnh. Tên lệnh là bắt buộc phải có khi gõ lệnh.
Các tham số có thể có hoặc không có, được viết theo quy định của lệnh mà
chúng ta sử dụng, nhằm cung cấp thông tin về các đối tượng mà lệnh tác động tới. Ý
nghĩa của các dấu [, <, >, ] được giải thích ở phần quy tắc viết lệnh.
Các tham số được phân ra thành hai loại: tham số khóa (sau đây thường dùng là "tùy chọn")
và tham số vị trí. Tham số vị trí thường là tên file, thư mục và thường là các đối tượng chịu
sự tác động của lệnh. Khi gõ lệnh, tham số vị trí được thay bằng những đối tượng mà người
dùng cần hướng tác động tới. Tham số khóa chính là những tham số điều khiển hoạt động
của lệnh theo các trường hợp riêng. Trong Linux, tham số khóa thường bắt đầu bởi dấu trừ
"-" hoặc hai dấu trừ liên tiếp "--". Khi gõ lệnh, cũng giống như tên lệnh, tham số khóa phải
được viết chính xác như trình bày trong mô tả lệnh. Một lệnh có thể có một số hoặc rất
nhiều tham số khóa. Phụ thuộc vào yêu cầu cụ thể của mình, người dùng có thể chọn một
hoặc một số các tham số khóa khi gõ lệnh. Trong mô tả lệnh, thường xuất hiện thuật ngữ
tùy-chọn. Tùy chọn lệnh (thực chất là tham số khóa) cho phép điều chỉnh hoạt động của
lệnh trong Linux, làm cho lệnh có tính phổ dụng cao. Tuỳ chọn lệnh cho phép lệnh có thể
đáp ứng ý muốn của người dùng đối với hầu hết (tuy không phải lúc nào cũng vậy) các tình
huống đặt ra cho thao tác ứng với lệnh.
1
5
Ký hiệu "↵" biểu thị việc gõ phím hết dòng. Để kết thúc một yêu
cầu, người dùng nhất thiết phải gõ phím "↵".
Ví dụ, khi người dùng gõ lệnh xem thông tin về các file:
# ls -l g↵ ↵¿
trong lệnh này:
ls là tên lệnh thực hiện việc đưa danh sách các tên file/ thư mục con trong
một thư mục,
-l là tham số khóa, cho biết yêu cầu xem đầy đủ thông tin về các đối tượng
hiện ra. Chú ý, trong tham số khóa chữ cái (chữ "l") phải đi ngay sau dấu trừ "-".
Tương ứng với lệnh ls còn có các tham số khóa -a, -L, ... và chúng cũng là các tùy
chọn lệnh. Trong một số tham số khóa có nhiều chữ cái thay cho một dấu "-" là hai
dấu "--" ở đầu tham số. Ví dụ, như trường hợp tham số --file của lệnh date.
g* là tham số vị trí chỉ rõ người dùng cần xem thông tin về các file có tên
gọi bắt đầu là chữ cái "g".
Trong tài liệu này, quy ước rằng khi viết một lệnh (trong mô tả lệnh và gõ lệnh) thì
không cần phải viết dấu "↵" ở cuối dòng lệnh đó, song luôn ghi nhớ rằng phím ENTER
("↵") là bắt buộc khi gõ lệnh.
Lưu ý:
Linux (và UNIX nói chung) được xây dựng trên ngôn ngữ lập trình C, vì vậy
khi gõ lệnh phải phân biệt chữ thường với chữ hoa. Ngoại trừ một số ngoại lệ, trong
Linux chúng ta thấy phổ biến là:
Các tên lệnh là chữ thường,
Một số tham số có thể là chữ thường hoặc chữ hoa (ví dụ, trong lệnh date
về thời gian hệ thống thì hai tham số -r và -R có ý nghĩa hoàn toàn khác
nhau). Tên các biến môi trường cũng thường dùng chữ hoa.
Trong tài liệu này, tại những dòng văn bản diễn giải, sử dụng cách viết tên
lệnh, các tham số khóa bằng kiểu chữ không chân, đậm như date, -R, -r ...
Linux phân biệt siêu người dùng (tiếng Anh là superuser hoặc root, còn
được gọi là người quản trị hay người dùng tối cao hoặc siêu người dùng) với
người dùng thông thường. Trong tập hợp lệnh của Linux, có một số lệnh mà chỉ siêu
người dùng mới được phép sử dụng còn người dùng thông thường thì không được
phép (ví dụ như lệnh adduser thực hiện việc bổ sung thêm người dùng). Mặt khác
trong một số lệnh, với một số tham số khóa thì chỉ siêu người dùng được phép dùng,
còn với một số tham số khác thì mọi người dùng đều được phép (ví dụ như lệnh
passwd thay đổi mật khẩu người dùng).
Một dòng lệnh có thể có nhiều hơn một lệnh, trong đó lệnh sau được ngăn
cách bởi với lệnh đi ngay trước bằng dấu ";" hoặc dấu "|". Ví dụ về một số dòng lệnh
dạng này:
# ls -l; date
# head Filetext | sort >temp
Sau khi người dùng gõ xong dòng lệnh, shell tiếp nhận dòng lệnh này và
phân tích nội dung văn bản của lệnh. Nếu lệnh được gõ đúng thì nó được thực hiện;
ngược lại, trong trường hợp có sai sót khi gõ lệnh thì shell thông báo về sai sót và
1
6
dấu nhắc shell lại hiện ra để chờ lệnh tiếp theo của người dùng. Về phổ biến, nếu
như sau khi người dùng gõ lệnh, không thấy thông báo sai sót hiện ra thì có nghĩa
lệnh đã được thực hiện một cách bình thường.
Trước khi đi vào nội dung chi tiết các lệnh thông dụng, chúng ta xem xét về một số quy
định dùng trong mô tả lệnh được trình bày trong tài liệu này.
1.3.1. Các quy ước khi viết lệnh
Trong tài liệu này, các lệnh được trình bày theo một bộ quy tắc cú pháp nhất quán. Bộ
quy tắc này cho phép phân biệt trong mỗi lệnh các thành phần nào là bắt buộc phải có, các
thành phần nào có thể có hoặc không ... Dưới đây là nội dung của các quy tắc trong bộ quy
tắc đó.
Tên lệnh là bắt buộc, phải là từ đầu tiên trong bất kỳ lệnh nào, phải được gõ
đúng như khi mô tả lệnh.
Tên khái niệm được nằm trong cặp dấu ngoặc quan hệ (< và >) biểu thị cho
một lớp đối tượng và là tham số bắt buộc phải có. Khi gõ lệnh thì tên khái niệm (có
thể được coi là "tham số hình thức") phải được thay thế bằng một từ (thường là tên
file, tên thư mục ... và có thể được coi là "tham số thực sự") để chỉ đối tượng liên
quan đến thao tác của lệnh.
Ví dụ, mô tả cú pháp của lệnh more xem nội dung file là
# more
thì từ more là tên lệnh, còn là tham số trong đó file là tên khái niệm và là tham số
bắt buộc phải có. Lệnh này có tác động là hiện lên màn hình theo cách thức cuộn nội dung
của file với tên đã chỉ trong lệnh.
Để xem nội dung file có tên là temp, người dùng gõ lệnh:
# more temp
Như vậy, tên lệnh more được gõ đúng như mô tả cú pháp (cả nội dung và vị trí) còn
"file" đã được thay thế bằng từ "temp" là tên file mà người dùng muốn xem nội dung.
Các bộ phận nằm giữa cặp dấu ngoặc vuông [ và ] là có thể gõ hoặc không
gõ cũng được.
Ví dụ, cú pháp của lệnh halt là
# halt [tùy-chọn]
Với các tùy chọn là -w, -n, -d, -f, -i mã mỗi tùy chọn cho một cách thức hoạt động
khác nhau của lệnh halt. Lệnh halt có tác động chính là làm ngừng hoạt động của hệ điều
hành, tuy nhiên khi người dùng muốn có một cách hoạt động nào đó của lệnh này thì sẽ
chọn một (hoặc một số) tuỳ chọn lệnh tương ứng. Một số cách gõ lệnh halt của người dùng
như sau đây là đúng cú pháp:
# halt
# halt -w
# halt -n
# halt -f
Các giá trị có trong cặp | và | trong đó các bộ phận cách nhau bằng dấu sổ
đứng "|" cho biết cần chọn một và chỉ một trong các giá trị nằm giữa hai dấu ngoặc
đó.
1
7
Ví dụ, khi giới thiệu về tùy chọn lệnh của lệnh tail xem phần cuối nội dung của file,
chúng ta thấy:
-f, --follow[={tên | đặc tả}]
Như vậy, sau tham số khóa --follow, nếu xuất hiện thêm dấu bằng "="
thì phải có hoặc tên hoặc đặc tả. Đây là trường hợp các chọn lựa "loại trừ nhau".
Dấu ba chấm ... thể hiện việc lặp lại thành phần cú pháp đi ngay trước dấu
này, việc lặp lại đó có thể từ không đến nhiều lần (không kể chính thành phần cú
pháp đó). Cách thức này thường được dùng với các tham số như tên file.
Ví dụ, mô tả lệnh chown như sau:
chown [tùy-chọn][,[nhóm]]...
Như vậy trong lệnh chown có thể không có hoặc có một số tùy chọn lệnh và có từ một
đến nhiều tên file.
Các bộ phận trong mô tả lệnh, nếu không nằm trong các cặp dấu [ ], <>, { }
thì khi gõ lệnh thực sự phải gõ y đúng như khi mô tả (chú ý, quy tắc viết tên lệnh là
một trường hợp riêng của quy tắc này).
Việc kết hợp các dấu ngoặc với nhau cho phép tạo ra cách thức sử dụng quy
tắc tổ hợp các tham số trong lệnh. Ví dụ, lệnh more bình thường có cú pháp là:
# more
có nghĩa là thay bằng tên file cần xem nội dung, nếu kết hợp thêm dấu ngoặc vuông [
và ], tức là có dạng sau (chính là dạng tổng quát của lệnh more):
# more []
thì nói chung phải có trong lệnh more, tuy nhiên trong một số trường hợp có thể bỏ
qua tham số file.
Lưu ý:
Đối với nhiều lệnh, cho phép người dùng gõ tham số khóa kết hợp tương
ứng với tùy_chọn trong mô tả lệnh. Tham số khóa kết hợp được viết theo cách -
, trong đó xâu-kí-tự gồm các chữ cái trong tham số khóa. Ví dụ,
trong mô tả lệnh in lịch cal:
cal [tùy-chọn] [tháng [năm] ]
có ba tham số khóa là -m, -j, -y. Khi gõ lệnh có thể gõ một tổ hợp nào đó từ ba
tham số khóa này để được tình huống sử dụng lệnh theo ý muốn. Chẳng hạn,
nếu gõ lệnh
cal -mj 3
thì lệnh cal thực hiện theo điều khiển của hai tham số khóa -m (chọn Thứ Hai
là ngày đầu tuần, thay vì cho ngầm định là Chủ Nhật) và -j (hiển thị ngày trong
tháng dưới dạng số ngày trong năm kể từ đầu năm). Vì vậy, khi viết [tùy-chọn]
trong mô tả lệnh biểu thị cả việc sử dụng từng tùy chọn, nhiều tùy chọn hoặc kết
hợp các tuỳ chọn.
Trong một số lệnh, có hai tham số khóa cùng tương ứng với một tình huống
thực hiện lệnh, trong đó một tham số gồm một kí tự còn tham số kia lại là một từ.
Tham số dài một từ là tham số chuẩn của lệnh, còn tham số một kí tự là cách viết
ngắn gọn. Tham số chuẩn dùng được trong mọi Linux và khi gõ phải có đủ kí tự
trong từ.
1
8
Ví dụ, khi mô tả lệnh date có tùy chọn:
-d, --date=STRING
như vậy hai tham số -d và --date=STRING có cùng ý nghĩa.
Ngoài những quy ước trên đây, người dùng đừng quên một quy định cơ bản là cần phân
biệt chữ hoa với chữ thường khi gõ lệnh.
1.3.3. Làm đơn giản thao tác gõ lệnh
Việc sử dụng bàn phím để nhập lệnh tuy không phải là một công việc nặng nề, song
Linux còn cho phép người dùng sử dụng một số cách thức để thuận tiện hơn khi gõ lệnh.
Một số trong những cách thức đó là:
Sử dụng việc khôi phục dòng lệnh,
Sử dụng các phím đặc biệt,
Sử dụng các kí hiệu thay thế và phím,
Sử dụng thay thế alias,
Sử dụng chương trình lệnh.
Cách thức sử dụng chương trình lệnh (shell script) sẽ được giới thiệu chi tiết trong các
chương sau. Dưới đây, chúng ta xem xét cách thức sử dụng việc khôi phục dòng lệnh, phím
đặc biệt và kí hiệu thay thế.
Cơ chế khôi phục dòng lệnh
Linux cung cấp một cách thức đặc biệt là khả năng khôi phục lệnh. Tại dấu nhắc shell:
Người dùng sử dụng các phím mũi tên lên/xuống (↑/↓) trên bàn phím để nhận lại các dòng
lệnh đã được đưa vào trước đây tại dấu nhắc shell, chọn một trong các dòng lệnh đó và biên
tập lại nội dung dòng lệnh theo đúng yêu cầu mới của mình.
Ví dụ, người dùng vừa gõ xong dòng lệnh:
# ls -l tenfile*
sau đó muốn gõ lệnh ls -l tentaptin thì tại dấu nhắc của shell, người dùng sử dụng các
phím di chuyển lên (↑) hoặc xuống (↓) để nhận được:
# ls -l tenfile*
dùng các phím tắt để di chuyển, xoá kí tự (xem phần sau) để có được:
# ls -l ten
và gõ tiếp các kí tự "taptin" để nhận được:
# ls -l tentaptin
chính là kết quả mong muốn.
Trong trường hợp số lượng kí tự thay thế là rất ít so với số lượng kí tự của toàn dòng
lệnh thì hiệu quả của cách thức này rất cao.
Lưu ý:
Việc nhấn liên tiếp các phím di chuyển lên (↑) hoặc xuống (↓) cho phép
người dùng nhận được các dòng lệnh đã gõ từ trước mà không chỉ dòng lệnh mới
được gõ. Cách thức này tương tự với cách thức sử dụng tiện ích DOSKEY trong hệ
điều hành MS-DOS.
1
9
ĐẠI HỌC QUỐC GIA HÀ NỘI
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ
=====================================
HÀ QUANG THỤY
NGUYỄN TRÍ THÀNH
Giáo trình:
HỆ ĐIỀU HÀNH UNIX - LINUX
Dành cho sinh viên ngành Công nghệ thông tin,
Điện tử - Viễn thông, Toán tin ứng dụng
HÀ NỘI - 2004
MỤC LỤC
LỜI GIỚI THIỆU ..................................................................................................... 9
CHƯƠNG 1. GIỚI THIỆU CHUNG VỀ LINUX...................................................... 10
1.1. Giới thiệu về UNIX và Linux...................................................................................... 10
1.1.1. Xuất xứ, quá trình tiến hóa và một số đặc trưng của hệ điều hành UNIX ......... 10
1.1.2. Giới thiệu sơ bộ về Linux................................................................................... 13
1.2. Sơ bộ về các thành phần của Linux ........................................................................... 17
1.2.1. Sơ bộ về nhân ..................................................................................................... 18
1.2.2. Sơ bộ về shell ..................................................................................................... 18
1.3. Giới thiệu về sử dụng lệnh trong Linux..................................................................... 20
1.3.1. Các quy ước khi viết lệnh................................................................................... 22
1.3.3. Làm đơn giản thao tác gõ lệnh ........................................................................... 25
1.3.4. Tiếp nối dòng lệnh.............................................................................................. 29
1.4. Trang Man ................................................................................................................... 29
CHƯƠNG 2. THAO TÁC VỚI HỆ THỐNG ........................................................... 32
2.1. Quá trình khởi động Linux......................................................................................... 32
2.2. Thủ tục đăng nhập và các lệnh thoát khỏi hệ thống ................................................ 33
2.2.1. Đăng nhập........................................................................................................... 33
2.2.2. Ra khỏi hệ thống................................................................................................. 36
2.2.3. Khởi động lại hệ thống ....................................................................................... 38
2.2.4. Khởi động vào chế độ đồ hoạ ............................................................................. 38
2.3. Lệnh thay đổi mật khẩu .............................................................................................. 42
2.4. Lệnh xem, thiết đặt ngày, giờ hiện tại và xem lịch trên hệ thống ........................... 45
2.4.1 Lệnh xem, thiết đặt ngày, giờ .............................................................................. 45
2.4.2. Lệnh xem lịch .................................................................................................... 47
2.5. Xem thông tin hệ thống .............................................................................................. 48
2.6. Thay đổi nội dung dấu nhắc shell .............................................................................. 49
2.7. Lệnh gọi ngôn ngữ tính toán số học .......................................................................... 50
CHƯƠNG 3. HỆ THỐNG FILE ............................................................................. 53
3.1 Tổng quan về hệ thống file........................................................................................... 53
3.1.1. Một số khái niệm ................................................................................................ 53
3.1.2. Sơ bộ kiến trúc nội tại của hệ thống file............................................................. 57
3.1.3. Một số thuật toán làm việc với inode ................................................................. 63
3.1.4. Hỗ trợ nhiều hệ thống File.................................................................................. 66
3.1.5. Liên kết tượng trưng (lệnh ln) ............................................................................ 71
2
3.2 Quyền truy nhập thư mục và file ................................................................................ 72
3.2.1 Quyền truy nhập .................................................................................................. 72
3.2.2. Các lệnh cơ bản .................................................................................................. 75
3.3 Thao tác với thư mục.................................................................................................... 80
3.3.1 Một số thư mục đặc biệt ...................................................................................... 80
3.3.2 Các lệnh cơ bản về thư mục ................................................................................ 83
3.4. Các lệnh làm việc với file ............................................................................................ 87
3.4.1 Các kiểu file có trong Linux ................................................................................ 87
3.4.2. Các lệnh tạo file.................................................................................................. 88
3.4.3 Các lệnh thao tác trên file .................................................................................... 90
3.4.4 Các lệnh thao tác theo nội dung file .................................................................... 98
3.4.5 Các lệnh tìm file ................................................................................................ 106
3.5 Nén và sao lưu các file ................................................................................................ 115
3.5.1 Sao lưu các file (lệnh tar) .................................................................................. 115
3.5.2 Nén dữ liệu ....................................................................................................... 118
CHƯƠNG 4. QUẢN TRỊ QUÁ TRÌNH................................................................. 122
4.1 Quá trình trong UNIX................................................................................................ 122
4.1.1. Sơ bộ về quá trình............................................................................................. 122
4.1.2. Sơ bộ cấu trúc điều khiển của UNIX................................................................ 123
4.1.3. Các hệ thống con trong nhân ............................................................................ 125
4.1.4. Sơ bộ về điều khiển quá trình ........................................................................... 129
4.1.5. Trạng thái và chuyển dịch trạng thái ................................................................ 130
4.1.6. Sự ngưng hoạt động và hoạt động trở lại của quá trình.................................... 132
4.1.7. Sơ bộ về lệnh đối với quá trình ........................................................................ 132
4.2. Các lệnh cơ bản.......................................................................................................... 133
4.2.1. Lệnh fg và lệnh bg ............................................................................................ 133
4.2.2. Hiển thị các quá trình đang chạy với lệnh ps ................................................... 135
4.2.3. Hủy quá trình với lệnh kill ............................................................................... 137
4.2.4. Cho máy ngừng hoạt động một thời gian với lệnh sleep.................................. 139
4.2.5. Xem cây quá trình với lệnh pstree.................................................................... 139
4.2.6. Lệnh thiết đặt lại độ ưu tiên của quá trình nice và lệnh renice......................... 141
CHƯƠNG 5. QUẢN LÝ TÀI KHOẢN NGƯỜI DÙNG ......................................... 142
5.1 Tài khoản người dùng ................................................................................................ 142
5.2 Các lệnh cơ bản quản lý người dùng ........................................................................ 142
5.2.1 File /etc/passwd ................................................................................................ 143
5.2.2 Thêm người dùng với lệnh useradd................................................................... 143
5.2.3 Thay đổi thuộc tính người dùng ........................................................................ 146
5.2.4 Xóa bỏ một người dùng (lệnh userdel).............................................................. 147
3
5.3 Các lệnh cơ bản liên quan đến nhóm người dùng ................................................... 148
5.3.1 Nhóm người dùng và file /etc/group ................................................................. 148
5.3.2 Thêm nhóm người dùng .................................................................................... 149
5.3.3 Sửa đổi các thuộc tính của một nhóm người dùng (lệnh groupmod) ................ 149
5.3.4 Xóa một nhóm người dùng (lệnh groupdel) ...................................................... 150
5.4 Các lệnh cơ bản khác có liên quan đến người dùng ................................................ 150
5.4.1 Đăng nhập với tư cách một người dùng khác khi dùng lệnh su ....................... 150
5.4.2 Xác định người dùng đang đăng nhập (lệnh who) ............................................ 151
5.4.3 Xác định các quá trình đang được tiến hành (lệnh w)....................................... 153
CHƯƠNG 6. TRUYỀN THÔNG VÀ MẠNG UNIX-LINUX................................... 154
6.1. Lệnh truyền thông ..................................................................................................... 154
6.1.1. Lệnh write......................................................................................................... 154
6.1.2. Lệnh mail.......................................................................................................... 155
6.1.3. Lệnh talk ........................................................................................................... 156
6.2 Cấu hình Card giao tiếp mạng .................................................................................. 156
6.3. Các dịch vụ mạng ...................................................................................................... 159
6.3.1 Hệ thông tin mạng NIS...................................................................................... 159
6.4 Hệ thống file trên mạng ............................................................................................. 164
6.4.1 Cài đặt NFS ....................................................................................................... 165
6.4.2 Khởi động và dừng NFS.................................................................................... 166
6.4.3 Cấu hình NFS server và Client .......................................................................... 167
6.4.4 Sử dụng mount................................................................................................... 167
6.4.5 Unmount ............................................................................................................ 168
6.4.6 Mount tự động qua tệp cấu hình........................................................................ 168
CHƯƠNG 7. LẬP TRÌNH SHELL VÀ LẬP TRÌNH C TRÊN LINUX ................... 170
7.1. Cách thức pipes và các yếu tố cơ bản lập trình trên shell ..................................... 170
7.1.1. Cách thức pipes ................................................................................................ 170
7.1.2. Các yếu tố cơ bản để lập trình trong shell ........................................................ 171
7.2. Một số lệnh lập trình trên shell ................................................................................ 175
7.2.1. Sử dụng các toán tử bash .................................................................................. 175
7.2.2. Điều khiển luồng .............................................................................................. 179
7.2.3 Các toán tử định hướng vào ra........................................................................... 193
7.2.4. Hiện dòng văn bản............................................................................................ 194
7.2.5. Lệnh read độc dữ liệu cho biến người dùng ..................................................... 194
7.2.6. Lệnh set ............................................................................................................ 195
7.2.7. Tính toán trên các biến ..................................................................................... 196
7.2.8. Chương trình ví dụ............................................................................................ 196
4
7.3. Lập trình C trên UNIX ............................................................................................. 197
7.3.1. Trình biên dịch gcc ........................................................................................... 197
7.3.2. Công cụ GNU make ......................................................................................... 201
7.3.3. Làm việc với file............................................................................................... 203
7.3.4. Thư viện liên kết............................................................................................... 211
7.3.5 Các công cụ cho thư viện ................................................................................. 220
TÀI LIỆU THAM KHẢO ...................................................................................... 223
CHÚ THÍCH MỘT SỐ THUẬT NGỮ ................................................................... 224
PHỤ LỤC A. QUÁ TRÌNH CÀI ĐẶT REDHAT-LINUX ........................................ 227
AA. Cài đặt phiên bản RedHat 6.2 ................................................................................. 228
AA.1. Tạo đĩa mềm khởi động ................................................................................... 228
AA.2. Phân vùng lại ổ đĩa DOS/Windows hiện thời.................................................. 228
AA.3. Các bước cài đặt (bản RedHat 6.2 và khởi động từ CD-ROM)....................... 229
AA.4. Các hạn chế về phần cứng đối với Linux ........................................................ 239
PHỤ LỤC B. TRÌNH SOẠN THẢO VIM .............................................................. 242
B.1 Khởi động vim ............................................................................................................ 244
B.1.1 Mở chương trình soạn thảo vim........................................................................ 244
B.1.2. Tính năng mở nhiều cửa sổ.............................................................................. 245
B.1.3. Ghi và thoát trong vim ..................................................................................... 246
B.2. Di chuyển trỏ soạn thảo trong Vim ......................................................................... 247
B.2.1. Di chuyển trong văn bản .................................................................................. 247
B.2.2. Di chuyển theo các đối tượng văn bản............................................................. 248
B.2.3. Cuộn màn hình................................................................................................. 248
B.3. Các thao tác trong văn bản ...................................................................................... 249
B.3.1. Các lệnh chèn văn bản trong vim..................................................................... 249
B.3.2. Các lệnh xoá văn bản trong vim ...................................................................... 250
B.3.3. Các lệnh khôi phục văn bản trong vim ............................................................ 250
6.3.4. Các lệnh thay thế văn bản trong vim ................................................................ 250
B.3.5. Sao chép và di chuyển văn bản trong vim ....................................................... 252
B.3.6. Tìm kiếm và thay thế văn bản trong vim ......................................................... 253
B.3.7. Đánh dấu trong vim ......................................................................................... 254
B.3.8. Các phím sử dụng trong chế độ chèn............................................................... 255
B.3.9. Một số lệnh trong chế độ ảo............................................................................. 256
B.3.10. Các lệnh lặp ................................................................................................... 256
B.4. Các lệnh khác ............................................................................................................ 257
B.4.1. Cách thực hiện các lệnh bên trong Vim........................................................... 257
B.4.2. Các lệnh liên quan đến file............................................................................... 257
5
PHỤ LỤC C. MIDNIGHT COMMANDER ............................................................ 259
C.1. Giới thiệu về Midnight Commander (MC) ............................................................ 259
C.2. Khởi động MC .......................................................................................................... 259
C.3. Giao diện của MC ..................................................................................................... 259
C.4. Dùng chuột trong MC .............................................................................................. 260
C.5. Các thao tác bàn phím.............................................................................................. 261
C.6. Thực đơn thanh ngang (menu bar)......................................................................... 263
C.7. Các phím chức năng ................................................................................................. 266
C.8. Bộ soạn thảo của Midnight Commander................................................................ 267
PHỤ LỤC D. SAMBA.......................................................................................... 270
D.1 Cài đặt Samba ............................................................................................................ 270
D.2 Các thành phần của Samba ...................................................................................... 271
D.3 File cấu hình Samba .................................................................................................. 272
D.4 Các phần đặc biệt của file cấu hình Samba............................................................. 275
D.5 Quản lý người dùng trong Samba............................................................................ 282
D.6 Cách sử dụng Samba từ các máy trạm.................................................................... 284
D.6.1 Cách sử dụng từ các máy trạm là Linux ........................................................... 284
D.6.2 Cách sử dụng từ các máy trạm là Windows ..................................................... 287
6
LỜI GIỚI THIỆU
Trong hơn mười năm trở lại đây hệ điều hành Linux đã
7
CHƯƠNG 1. GIỚI THIỆU CHUNG VỀ LINUX
1.1. Giới thiệu về UNIX và Linux
1.1.1. Xuất xứ, quá trình tiến hóa và một số đặc trưng của hệ điều hành UNIX
Năm 1965, Viện công nghệ Massachusetts (MIT: Massachusetts Institute of
Technology) và Phòng thí nghiệm Bell của hãng AT&T thực hiện dự án xây dựng một hệ
điều hành có tên gọi là Multics (MULTiplexed Information and Computing Service) với
mục tiêu: tạo lập được một hệ điều hành phủ trên vùng lãnh thổ rộng (hoạt động trên tập
các máy tính được kết nối), đa người dùng, có năng lực cao về tính toán và lưu trữ. Dự án
nói trên thành công ở mức độ hết sức khiêm tốn và người ta đã biết đến một số khiếm
khuyết khó khắc phục của Multics.
Năm1969, Ken Thompson, một chuyên viên tại phòng thí nghiệm Bell, người đã tham
gia dự án Multics, cùng Dennics Richie viết lại hệ điều hành đa-bài toán trên máy PDP-7
với tên là UNICS (UNiplexed Information and Computing Service) từ một câu gọi đùa của
một đồng nghiệp. Trong hệ điều hành UNICS, một số khởi thảo đầu tiên về Hệ thống file
đã được Ken Thompson và Dennis Ritchie thực hiện. Đến năm 1970 hệ điều hành được viết
trên assembler cho máy PDP-11/20 và mang tên là UNIX.
Năm 1973, Riche và Thompson viết lại nhân của hệ điều hành UNIX trên ngôn ngữ C,
và hệ điều hành đã trở nên dễ dàng cài đặt tới các loại máy tính khác nhau; tính chất như
thế được gọi là tính khả chuyển (portable) của UNIX. Trước đó, khoảng năm 1971, hệ điều
hành được thể hiện trên ngôn ngữ B (mà dựa trên ngôn ngữ B, Ritche đã phát triển thành
ngôn ngữ C).
Hãng AT&T phổ biến chương trình nguồn UNIX tới các trường đại học, các công ty
thương mại và chính phủ với giá không đáng kể.
Năm 1982, hệ thống UNIX-3 là bản UNIX thương mại đầu tiên của AT&T.
Năm 1983, AT&T giới thiệu Hệ thống UNIX-4 phiên bản thứ nhất trong đó đã có trình
soạn thảo vi, thư viện quản lý màn hình được phát triển từ Đại học Tổng hợp California,
Berkley.
Giai đoạn 1985-1987, UNIX-5 phiên bản 2 và 3 tương ứng được đưa ra vào các năm
1985 và 1987. Trong giai đoạn này, có khoảng 100000 bản UNIX đã được phổ biến trên thế
giới, cài đặt từ máy vi tính đến các hệ thống lớn.
Đầu thập kỷ 1990. UNIX-5 phiên bản 4 được đưa ra như là một chuẩn của UNIX. Đây
là sự kết hợp của các bản sau:
AT&T UNIX-5 phiên bản 3,
Berkley Software Distribution (BSD),
XENIX của MicroSoft
SUN OS
Có thể tìm thấy các nội dung liên quan tới một số phiên bản mới của UNIX tại địa chỉ
website http://problem.rice.edu/.
Các nhóm nhà cung cấp khác nhau về UNIX đang hoạt động trong thời gian hiện nay
được kể đến như sau:
Unix International (viết tắt là UI). UI là một tổ chức gồm các nhà cung cấp
thực hiện việc chuyển nhượng hệ thống UNIX-5 và cung cấp bản AT&T theo các
8
nhu cầu và thông báo phát hành mới, chẳng hạn như điều chỉnh bản quyền. Giao
diện đồ họa người dùng là Open Look.
Open Software Foundation (OSF). OSF được hỗ trợ bởi IBM, DEC, HP ...
theo hướng phát triển một phiên bản của Unix nhằm tranh đua với hệ thống UNIX-5
phiên bản 4. Phiên bản này có tên là OSF/1 với giao diện đồ họa người dùng được
gọi là MOTIF.
Free SoftWare Foundation (FSF): một cộng đồng do Richard Stallman khởi
xướng năm 1984 chủ trương phát hành các phần mềm sử dụng tự do, trên cơ sở một
hệ điều hành thuộc loại UNIX.
Bảng sau đây liệt kê một số cài đặt UNIX khá phổ biến (thường thấy có chữ X ở cuối
tên gọi của Hệ điều hành):
Tên hệ Nhà cung cấp Nền phát triển
AIX International Business Machines AT&T System V
A/UX Apple Computer AT&T System V
Dynix Sequent BSD (Berkeley SoftWare Distribution)
HP-UX Hewlett-Packard BSD
Irix Silicon Graphics AT&T System V
Linux Free SoftWare Foundation
NextStep Next BSD
OSF/1 Digital Equipment Corporation BSD
SCO UNIX Santa Cruz Operation AT&T System V
Solaris Sun Microsystems AT&T System V
SunOS Sun Microsystems BSD UNIX
Ultrix Digital Equipment Corporation BSD UNIX
Unicos Cray AT&T System V
UnixWare Novell AT&T System V
XENIX MicroSoft AT&T System III-MS
Dưới đây liệt kê một số đặc trưng của hệ điều hành UNIX:
Hệ điều hành được viết trên ngôn ngữ bậc cao; bởi vậy, rất dễ đọc, dễ hiểu,
dễ thay đổi để cài đặt trên loại máy mới (tính dễ mang chuyển, như đã nói),
Có giao diện người dùng đơn giản đủ năng lực cung cấp các dịch vụ mà
người dùng mong muốn (so sánh với các hệ điều hành có từ trước đó thì giao diện
của UNIX là một tiến bộ vượt bậc),
Thỏa mãn nguyên tắc xây dựng các chương trình phức tạp từ những chương
trình đơn giản hơn: trước hết có các môđun cơ bản nhất của nhân sau đó phát triển
để có toàn bộ hệ điều hành,
Sử dụng duy nhất một hệ thống File có cấu trúc cho phép dễ dàng bảo quản
và sử dụng hiệu quả,
9
Sử dụng phổ biến một dạng đơn giản trình bày nội tại của File như một dòng
các byte cho phép dễ dàng khi viết các chương trình ứng dụng truy nhập, thao tác
với các dữ liệu trong File,
Có kết nối đơn giản với thiết bị ngoại vi: các file thiết bị đã được đặt sẵn
trong Hệ thống File tạo ra một kết nối đơn giản giữa chương trình người dùng với
các thiết bị ngoại vi,
Là hệ điều hành đa người dùng, đa quá trình, trong đó mỗi người dùng có
thể thực hiện các quá trình của mình một cách độc lập.
Mọi thao tác vào - ra của hệ điều hành được thực hiện trên hệ thống File:
mỗi thiết bị vào ra tương ứng với một file. Chương trình người dùng làm việc với
file đó mà không cần quan tâm cụ thể tên file đó được đặt cho thiết bị nào trong hệ
thống.
Che khuất cấu trúc máy đối với người dùng, đảm bảo tính độc lập tương đối
của chương trình đối với dữ liệu và phần cứng, tạo điều kiện thuận lợi hơn cho
người lập trình khi viết các chương trình chạy UNIX với các điều kiện phần cứng
hoàn toàn khác biệt nhau.
1.1.2. Giới thiệu sơ bộ về Linux
Linus Tovalds (một sinh viên Phần lan) đưa ra nhân (phiên bản đầu tiên) cho hệ điều hành
Linux vào tháng 8 năm 1991 trên cơ sở cải tiến một phiên bản UNIX có tên Minix do Giáo
sư Andrew S. Tanenbaum xây dựng và phổ biến. Nhân Linux tuy nhỏ song là tự đóng gói.
Kết hợp với các thành phần trong hệ thống GNU, hệ điều hành Linux đã được hình thành.
Và cũng từ thời điểm đó, theo tư tưởng GNU, hàng nghìn, hàng vạn chuyên gia trên toàn
thế giới (những người này hình thành nên cộng đồng Linux) đã tham gia vào quá trình phát
triển Linux và vì vậy Linux ngày càng đáp ứng nhu cầu của người dùng.
Dưới đây là một số mốc thời gian quan trọng trong quá trình hình thành và phát triển hệ
điều hành Linux.
Sau ba năm nhân Linux ra đời, đến ngày 14-3-1994, hệ điều hành Linux phiên bản
1.0 được phổ biến. Thành công lớn nhất của Linux 1.0 là nó đã hỗ trợ giao thức mạng
TCP/IP chuẩn UNIX, sánh với giao thức socket BSD- tương thích cho lập trình mạng.
Trình điều khiển thiết bị đã được bổ sung để chạy IP trên một mạng Ethernet hoặc trên
tuyến đơn hoặc qua modem. Hệ thống file trong Linux 1.0 đã vượt xa hệ thống file của
Minix thông thường, ngoài ra đã hỗ trợ điều khiển SCSI truy nhập đĩa tốc độ cao. Điều
khiển bộ nhớ ảo đã được mở rộng để hỗ trợ điều khiển trang cho các file swap và ánh xạ
bộ nhớ của file đặc quyền (chỉ có một ánh xạ bộ nhớ chỉ đọc được thi hành trong Linux
1.0).
Vào tháng 3-1995, nhân 1.2 được phổ biến. Điều đáng kể của Linux 1.2 so với
Linux 1.0 ở chỗ nó hỗ trợ một phạm vi rộng và phong phú phần cứng, bao gồm cả kiến
trúc tuyến phần cứng PCI mới. Nhân Linux 1.2 là nhân kết thúc dòng nhân Linux chỉ hỗ
trợ PC.
Một điều cần lưu ý về các đánh chỉ số các dòng nhân (hệ điều hành) Linux. Hệ thống
chỉ số được chia thành một số mức, chẳng hạn hai mức như 2.4 hoặc ba mức như 2.2.5.
Trong cách đánh chỉ số như vậy, quy ước rằng với các chỉ số từ mức thứ hai trở đi, nếu
là số chẵn thì dòng nhân đó đã khá ổn định và tương đối hoàn thiện, còn nếu là số lẻ thì
dòng nhân đó vẫn đang được phát triển tiếp.
1
0
Tháng 6-1996, nhân Linux 2.0 được phổ biến. Có hai đặc trưng nổi bật của Linux
2.0 là hỗ trợ kiến trúc phức hợp, bao gồm cả cổng Alpha 64-bit đầy đủ, và hỗ trợ kiến
trúc đa bộ xử lý. Phân phối nhân Linux 2.0 cũng thi hành được trên bộ xử lý Motorola
68000 và kiến trúc SPARC của SUN. Các thi hành của Linux dựa trên vi nhân GNU
Mach cũng chạy trên PC và PowerMac.
Tới năm 2000, nhân Linux 2.4 được phổ biến. Một trong đặc điểm được quan tâm
của nhân này là nó hỗ trợ mã ký tự Unicode 32 bít, rất thuận lợi cho việc xây dựng các
giải pháp toàn diện và triệt để đối với vấn đề ngôn ngữ tự nhiên trên phạm vi toàn thế
giới.
Vấn đề phân phối và giấy phép Linux
Về lý thuyết, mọi người có thể khởi tạo một hệ thống Linux bằng cách tiếp nhận bản mới
nhất các thành phần cần thiết từ các site ftp và biên dịch chúng. Trong thời kỳ đầu tiên,
người dùng Linux phải tiến hành toàn bộ các thao tác này và vì vậy công việc là khá vất vả.
Tuy nhiên, do có sự tham gia đông đảo của các cá nhân và nhóm phát triển Linux, đã tiến
hành thực hiện nhiều giải pháp nhằm làm cho công việc khởi tạo hệ thống đỡ vất vả. Một
trong những giải pháp điển hình nhất là cung cấp tập các gói chương trình đã tiền dịch,
chuẩn hóa.
Những tập hợp như vậy hay những bản phân phối là lớn hơn nhiều so với hệ thống Linux
cơ sở. Chúng thường bao gồm các tiện ích bổ sung cho khởi tạo hệ thống, các thư viện
quản lý, cũng như nhiều gói đã được tiền dịch, sẵn sàng khởi tạo của nhiều bộ công cụ
UNIX dùng chung, chẳng hạn như phục vụ tin, trình duyệt web, công cụ xử lý, soạn thảo
văn bản và thậm chí các trò chơi.
Cách thức phân phối ban đầu rất đơn giản song ngày càng được nâng cấp và hoàn thiện
bằng phương tiện quản lý gói tiên tiến. Các bản phân phối ngày nay bao gồm các cơ sở dữ
liệu tiến hóa gói, cho phép các gói dễ dàng được khởi tạo, nâng cấp và loại bỏ.
Nhà phân phối đầu tiên thực hiện theo phương châm này là Slakware, và chính họ là những
chuyển biến mạnh mẽ trong cộng đồng Linux đối với công việc quản lý gói khởi tạo Linux.
Tiện ích quản lý gói RPM (RedHat Package Manager) của công ty RedHat là một trong
những phương tiện điển hình.
Nhân Linux là phần mềm tự do được phân phối theo Giấy phép sở hữu công cộng phần
mềm GNU GPL.
Các thành phần tích hợp Hệ điều hành Linux
Linux sử dụng rất nhiều thành phần từ Dự án phần mềm tự do GNU, từ hệ điều hành BSD
của Đại học Berkeley và từ hệ thống X-Window của MIT.
Thư viện hệ thống chính của Linux được bắt nguồn từ Dự án GNU, sau đó được rất nhiều
người trong cộng đồng Linux phát triển tiếp, những phát triển tiếp theo như vậy chủ yếu
liên quan tới việc giải quyết các vấn đề như thiếu vắng địa chỉ (lỗi trang), thiếu hiệu quả và
gỡ rối. Một số thành phần khác của Dự án GNU, chẳng hạn như trình biên dịch GNU C
(gcc), vốn là chất lượng cao nên được sử dụng nguyên xy trong Linux.
Các tool quản lý mạng được bắt nguồn từ mã 4.3BSD song sau đó đã được cộng đồng
Linux phát triển, chẳng hạn như thư viện toán học đồng xử lý dấu chấm động Intel và các
trình điều khiển thiết bị phần cứng âm thanh PC. Các tool quản lý mạng này sau đó lại
được bổ sung vào hệ thống BSD.
1
1
Hệ thống Linux được duy trì gần như bởi một mạng lưới không chặt chẽ các nhà phát triển
phần mềm cộng tác với nhau qua Internet, mạng lưới này gồm các nhóm nhỏ và cá nhân
chịu trách nhiệm duy trì tính toàn vẹn của từng thành phần. Một lượng nhỏ các site phân
cấp ftp Internat công cộng đã đóng vai trò nhà kho theo chuẩn de facto để chứa các thành
phần này. Tài liệu Chuẩn phân cấp hệ thống file (File System Hierarchy Standard) được
cộng đồng Linux duy trì nhằm giữ tính tương thích xuyên qua sự khác biệt rất lớn giữa các
thành phần hệ thống.
Một số đặc điểm chính của Linux
Dưới đây trình bày một số đặc điểm chính của của hệ điều hành Linux hiện tại:
Linux tương thích với nhiều hệ điều hành như DOS, MicroSoft Windows ...:
Cho phép cài đặt Linux cùng với các hệ điều hành khác trên cùng một ổ cứng. Linux
có thể truy nhập đến các file của các hệ điều hành cùng một ổ đĩa. Linux cho phép chạy
mô phỏng các chương trình thuộc các hệ điều hành khác.
Do giữ được chuẩn của UNIX nên sự chuyển đổi giữa Linux và các hệ UNIX khác
là dễ dàng.
Linux là một hệ điều hành UNIX tiêu biểu với các đặc trưng là đa người dùng, đa
chương trình và đa xử lý.
Linux có giao diện đồ hoạ (GUI) thừa hưởng từ hệ thống X-Window. Linux hỗ trợ
nhiều giao thức mạng, bắt nguồn và phát triển từ dòng BSD. Thêm vào đó, Linux còn hỗ
trợ tính toán thời gian thực.
Linux khá mạnh và chạy rất nhanh ngay cả khi nhiều quá trình hoặc nhiều cửa sổ.
Linux được cài đặt trên nhiều chủng loại máy tính khác nhau như PC, Mini và việc
cài đặt khá thuận lợi. Tuy nhiên, hiện nay chưa xuất hiện Linux trên máy tính lớn
(mainframe).
Linux ngày càng được hỗ trợ bởi các phần mềm ứng dụng bổ sung như soạn thảo,
quản lý mạng, quản trị cơ sở dữ liệu, bảng tính ...
Linux hỗ trợ tốt cho tính toán song song và máy tính cụm (PC-cluster) là một hướng
nghiên cứu triển khai ứng dụng nhiều triển vọng hiện nay.
Là một hệ điều hành với mã nguồn mở, được phát triển qua cộng đồng nguồn mở
(bao gồm cả Free Software Foundation) nên Linux phát triển nhanh. Linux là một trong
một số ít các hệ điều hành được quan tâm nhiều nhất trên thế giới hiện nay.
Linux là một hệ điều hành hỗ trợ đa ngôn ngữ một cách toàn diện nhất. Do Linux
cho phép hỗ trợ các bộ mã chuẩn từ 16 bit trở lên (trong đó có các bộ mã ISO10646,
Unicode) cho nên việc bản địa hóa trên Linux là triệt để nhất trong các hệ điều hành.
Tuy nhiên cũng tồn tại một số khó khăn làm cho Linux chưa thực sự trở thành một hệ điều
hành phổ dụng, dưới đây là một số khó khăn điển hình:
Tuy đã có công cụ hỗ trợ cài đặt, tuy nhiên, việc cài đặt Linux còn tương đối phức
tạp và khó khăn. Khả năng tương thích của Linux với một số loại thiết bị phần cứng còn
thấp do chưa có các trình điều khiển cho nhiều thiết bị,
1
2
Phần mềm ứng dụng chạy trên nền Linux tuy đã phong phú song so với một số hệ
điều hành khác, đặc biệt là khi so sánh với MS Windows, thì vẫn còn có khoảng cách.
Với sự hỗ trợ của nhiều công ty tin học hàng đầu thế giới (IBM, SUN, HP ...) và sự tham
gia phát triển của hàng vạn chuyên gia trên toàn thế giới thuộc cộng đồng Linux, các khó
khăn của Linux chắc chắn sẽ nhanh chóng được khắc phục.
Chính vì lẽ đó đã hình thành một số nhà cung cấp Linux trên thế giới. Bảng dưới đây là
tên của một số nhà cung cấp Linux có tiếng nhất và địa chỉ website của họ.
Đáng chú ý nhất là Red Hat Linux (tại Mỹ) và Red Flag Linux (tại Trung Quốc). Red
Hat được coi là lâu đời và tin cậy, còn Red Flag là một công ty Linux của Trung quốc, có
quan hệ với cộng đồng Linux Việt nam và chúng ta có thể học hỏi một cách trực tiếp kinh
nghiệm cho quá trình đưa Linux vào Việt nam.
Tên công ty Địa chỉ website
Caldera OpenLinux www.caldera.com
Corel Linux www.corel.com
Debian GNU/Linux www.debian.com
Linux Mandrake www.mandrake.com
Red Hat Linux www.redhat.com
Red Flag Linux www.redflag-linux.com
Slackware Linux www.slackware.com
SuSE Linux www.suse.com
TurboLinux www.turbolinux.com
1.2. Sơ bộ về các thành phần của Linux
Hệ thống Linux, được thi hành như một hệ điều hành UNIX truyền thống, gồm shell và ba
thành phần (đã dạng mã chương trình) sau đây:
- Nhân hệ điều hành chịu trách nhiệm duy trì các đối tượng trừu tượng quan trọng của hệ
điều hành, bao gồm bộ nhớ ảo và quá trình. Các mô đun chương trình trong nhân được
đặc quyền trong hệ thống, bao gồm đặc quyền thường trực ở bộ nhớ trong.
- Thư viện hệ thống xác định một tập chuẩn các hàm để các ứng dụng tương tác với
nhân, và thi hành nhiều chức năng của hệ thống nhưng không cần có các đặc quyền của
mô đun thuộc nhân. Một hệ thống con điển hình được thi hành dựa trên thư viên hệ
thống là hệ thống file Linux.
- Tiện ích hệ thống là các chương trình thi hành các nhiệm vụ quản lý riêng rẽ, chuyên
biệt. Một số tiện ích hệ thống được gọi ra chỉ một lần để khởi động và cấu hình phương
tiện hệ thống, một số tiện ích khác, theo thuật ngữ UNIX được gọi là trình chạy ngầm
(daemon), có thể chạy một cách thường xuyên (thường theo chu kỳ), điều khiển các bài
toán như hưởng ứng các kết nối mạng mới đến, tiếp nhận yêu cầu logon, hoặc cập nhật
các file log.
Tiện ích (hay lệnh) có sẵn trong hệ điều hành (dưới đây tiện ích được coi là lệnh thường
trực). Nội dung chính yếu của tài liệu này giới thiệu chi tiết về một số lệnh thông dụng nhất
của Linux. Hệ thống file sẽ được giới thiệu trong chương 3. Trong các chương sau có đề
cập tới nhiều nội dung liên quan đến nhân và shell, song dưới đây là một số nét sơ bộ về
chúng.
1
3
1.2.1. Sơ bộ về nhân
Nhân (còn được gọi là hệ lõi) của Linux, là một bộ các môdun chương trình có vai trò
điều khiển các thành phần của máy tính, phân phối các tài nguyên cho người dùng (các quá
trình người dùng). Nhân chính là cầu nối giữa chương trình ứng dụng với phần cứng.
Người dùng sử dụng bàn phím gõ nội dung yêu cầu của mình và yêu cầu đó được nhân gửi
tới shell: Shell phân tích lệnh và gọi các chương trình tương ứng với lệnh để thực hiện.
Một trong những chức năng quan trọng nhất của nhân là giải quyết bài toán lập lịch, tức
là hệ thống cần phân chia CPU cho nhiều quá trình hiện thời cùng tồn tại. Đối với Linux, số
lượng quá trình có thể lên tới con số hàng nghìn. Với số lượng quá trình đồng thời nhiều
như vậy, các thuật toán lập lịch cần phải đủ hiệu quả: Linux thường lập lịch theo chế độ
Round Robin (RR) thực hiện việc luân chuyển CPU theo lượng tử thời gian.
Thành phần quan trọng thứ hai trong nhân là hệ thống các môđun chương trình (được
gọi là lời gọi hệ thống) làm việc với hệ thống file. Linux có hai cách thức làm việc với các
file: làm việc theo byte (kí tự) và làm việc theo khối. Một đặc điểm đáng chú ý là file trong
Linux có thể được nhiều người cùng truy nhập tới nên các lời gọi hệ thống làm việc với file
cần đảm bảo việc file được truy nhập theo quyền và được chia xẻ cho người dùng.
1.2.2. Sơ bộ về shell
Một số nội dung chi tiết về shell (còn được gọi là hệ vỏ) trong Linux được trình bày
trong chương "Lập trình trên shell". Những nội dung trình bày dưới đây cung cấp một cách
nhìn sơ bộ về shell và vai trò của nó trong hoạt động chung của hệ điều hành.
Người dùng mong muốn máy tính thực hiện một công việc nào đó thì cần gõ lệnh thể
hiện yêu cầu của mình để hệ thống đáp ứng yêu cầu đó. Shell là bộ dịch lệnh và hoạt động
như một kết nối trung gian giữa nhân với người dùng: Shell nhận dòng lệnh do người dùng
đưa vào; và từ dòng lệnh nói trên, nhân tách ra các bộ phận để nhận được một hay một số
lệnh tương ứng với các đoạn văn bản có trong dòng lệnh. Một lệnh bao gồm tên lệnh và
tham số: từ đầu tiên là tên lệnh, các từ tiếp theo (nếu có) là các tham số. Tiếp theo, shell sử
dụng nhân để khởi sinh một quá trình mới (khởi tạo quá trình) và sau đó, shell chờ đợi quá
trình con này tiến hành, hoàn thiện và kết thúc. Khi shell sẵn sàng tiếp nhận dòng lệnh của
người dùng, một dấu nhắc shell (còn gọi là dấu nhắc nhập lệnh) xuất hiện trên màn hình.
Linux có hai loại shell phổ biến là: C-shell (dấu nhắc %), Bourne-shell (dấu nhắc $) và
một số shell phát triển từ các shell nói trên (chẳng hạn, TCshell - tcsh với dấu nhắc ngầm
định > phát triển từ C-shell và GNU Bourne - bash với dấu nhắc bash # phát triển từ
Bourne-shell). Dấu mời phân biệt shell nói trên không phải hoàn toàn rõ ràng do Linux cho
phép người dùng thay đổi lại dấu nhắc shell nhờ việc thay giá trị các biến môi trường PS1
và PS2. Trong tài liệu này, chúng ta sử dụng kí hiệu "hàng rào #" để biểu thị dấu nhắc
shell.
C-shell có tên gọi như vậy là do cách viết lệnh và chương trình lệnh Linux tựa như
ngôn ngữ C. Bourne-shell mang tên tác giả của nó là Steven Bourne. Một số lệnh trong C-
shell (chẳng hạn lệnh alias) không còn có trong Bourne-shell và vì vậy để nhận biết hệ
thống đang làm việc với shell nào, chúng ta gõ lệnh:
# alias
Nếu một danh sách xuất hiện thì shell đang sử dụng là C-shell; ngược lại, nếu xuất hiện
thông báo "Command not found" thì shell đó là Bourne-shell.
Lệnh được chia thành 3 loại lệnh:
1
4
Lệnh thường trực (có sẵn của Linux). Tuyệt đại đa số lệnh được giới thiệu
trong tài liệu này là lệnh thường trực. Chúng bao gồm các lệnh được chứa sẵn trong
shell và các lệnh thường trực khác.
File chương trình ngôn ngữ máy: chẳng hạn, người dùng viết trình trên ngôn
ngữ C qua bộ dịch gcc (bao gồm cả trình kết nối link) để tạo ra một chương trình
trên ngôn ngữ máy.
File chương trình shell (Shell Scrip).
Khi kết thúc một dòng lệnh cần gõ phím ENTER để shell phân tích và thực hiện lệnh.
1.3. Giới thiệu về sử dụng lệnh trong Linux
Như đã giới thiệu ở phần trên, Linux là một hệ điều hành đa người dùng, đa nhiệm,
được phát triển bởi hàng nghìn chuyên gia Tin học trên toàn thế giới nên hệ thống lệnh
cũng ngày càng phong phú; đến thời điểm hiện nay Linux có khoảng hơn một nghìn lệnh.
Tuy nhiên chỉ có khoảng vài chục lệnh là thông dụng nhất đối với người dùng. Tài liệu
này cũng hạn chế giới thiệu khoảng vài chục lệnh đó. Chúng ta đừng e ngại về số lượng
lệnh được giới thiệu chỉ chiếm một phần nhỏ trong tập hợp lệnh bởi vì đây là những lệnh
thông dụng nhất và chúng cung cấp một phạm vi ứng dụng rộng lớn, đủ thỏa mãn yêu cầu
của chúng ta.
Cũng như đã nói ở trên, người dùng làm việc với máy tính thông qua việc sử dụng trạm
cuối: người dùng đưa yêu cầu của mình bằng cách gõ "lệnh" từ bàn phím và giao cho hệ
điều hành xử lý.
Khi cài đặt Linux lên máy tính cá nhân thì máy tính cá nhân vừa đóng vai trò trạm cuối,
vừa đóng vai trò máy tính xử lý.
Dạng tổng quát của lệnh Linux có thể được viết như sau:
#
trong đó:
Tên lệnh là một dãy ký tự, không có dấu cách, biểu thị cho một lệnh của
Linux hay một chương trình. Người dùng cần hệ điều hành đáp ứng yêu cầu gì của
mình thì phải chọn đúng tên lệnh. Tên lệnh là bắt buộc phải có khi gõ lệnh.
Các tham số có thể có hoặc không có, được viết theo quy định của lệnh mà
chúng ta sử dụng, nhằm cung cấp thông tin về các đối tượng mà lệnh tác động tới. Ý
nghĩa của các dấu [, <, >, ] được giải thích ở phần quy tắc viết lệnh.
Các tham số được phân ra thành hai loại: tham số khóa (sau đây thường dùng là "tùy chọn")
và tham số vị trí. Tham số vị trí thường là tên file, thư mục và thường là các đối tượng chịu
sự tác động của lệnh. Khi gõ lệnh, tham số vị trí được thay bằng những đối tượng mà người
dùng cần hướng tác động tới. Tham số khóa chính là những tham số điều khiển hoạt động
của lệnh theo các trường hợp riêng. Trong Linux, tham số khóa thường bắt đầu bởi dấu trừ
"-" hoặc hai dấu trừ liên tiếp "--". Khi gõ lệnh, cũng giống như tên lệnh, tham số khóa phải
được viết chính xác như trình bày trong mô tả lệnh. Một lệnh có thể có một số hoặc rất
nhiều tham số khóa. Phụ thuộc vào yêu cầu cụ thể của mình, người dùng có thể chọn một
hoặc một số các tham số khóa khi gõ lệnh. Trong mô tả lệnh, thường xuất hiện thuật ngữ
tùy-chọn. Tùy chọn lệnh (thực chất là tham số khóa) cho phép điều chỉnh hoạt động của
lệnh trong Linux, làm cho lệnh có tính phổ dụng cao. Tuỳ chọn lệnh cho phép lệnh có thể
đáp ứng ý muốn của người dùng đối với hầu hết (tuy không phải lúc nào cũng vậy) các tình
huống đặt ra cho thao tác ứng với lệnh.
1
5
Ký hiệu "↵" biểu thị việc gõ phím hết dòng
cầu, người dùng nhất thiết phải gõ phím "↵".
Ví dụ, khi người dùng gõ lệnh xem thông tin về các file:
# ls -l g↵ ↵¿
trong lệnh này:
ls là tên lệnh thực hiện việc đưa danh sách các tên file/ thư mục con trong
một thư mục,
-l là tham số khóa, cho biết yêu cầu xem đầy đủ thông tin về các đối tượng
hiện ra. Chú ý, trong tham số khóa chữ cái (chữ "l") phải đi ngay sau dấu trừ "-".
Tương ứng với lệnh ls còn có các tham số khóa -a, -L, ... và chúng cũng là các tùy
chọn lệnh. Trong một số tham số khóa có nhiều chữ cái thay cho một dấu "-" là hai
dấu "--" ở đầu tham số. Ví dụ, như trường hợp tham số --file của lệnh date.
g* là tham số vị trí chỉ rõ người dùng cần xem thông tin về các file có tên
gọi bắt đầu là chữ cái "g".
Trong tài liệu này, quy ước rằng khi viết một lệnh (trong mô tả lệnh và gõ lệnh) thì
không cần phải viết dấu "↵" ở cuối dòng lệnh đó, song luôn ghi nhớ rằng phím ENTER
("↵") là bắt buộc khi gõ lệnh.
Lưu ý:
Linux (và UNIX nói chung) được xây dựng trên ngôn ngữ lập trình C, vì vậy
khi gõ lệnh phải phân biệt chữ thường với chữ hoa. Ngoại trừ một số ngoại lệ, trong
Linux chúng ta thấy phổ biến là:
Các tên lệnh là chữ thường,
Một số tham số có thể là chữ thường hoặc chữ hoa (ví dụ, trong lệnh date
về thời gian hệ thống thì hai tham số -r và -R có ý nghĩa hoàn toàn khác
nhau). Tên các biến môi trường cũng thường dùng chữ hoa.
Trong tài liệu này, tại những dòng văn bản diễn giải, sử dụng cách viết tên
lệnh, các tham số khóa bằng kiểu chữ không chân, đậm như date, -R, -r ...
Linux phân biệt siêu người dùng (tiếng Anh là superuser hoặc root, còn
được gọi là người quản trị hay người dùng tối cao hoặc siêu người dùng) với
người dùng thông thường. Trong tập hợp lệnh của Linux, có một số lệnh mà chỉ siêu
người dùng mới được phép sử dụng còn người dùng thông thường thì không được
phép (ví dụ như lệnh adduser thực hiện việc bổ sung thêm người dùng). Mặt khác
trong một số lệnh, với một số tham số khóa thì chỉ siêu người dùng được phép dùng,
còn với một số tham số khác thì mọi người dùng đều được phép (ví dụ như lệnh
passwd thay đổi mật khẩu người dùng).
Một dòng lệnh có thể có nhiều hơn một lệnh, trong đó lệnh sau được ngăn
cách bởi với lệnh đi ngay trước bằng dấu ";" hoặc dấu "|". Ví dụ về một số dòng lệnh
dạng này:
# ls -l; date
# head Filetext | sort >temp
Sau khi người dùng gõ xong dòng lệnh, shell tiếp nhận dòng lệnh này và
phân tích nội dung văn bản của lệnh. Nếu lệnh được gõ đúng thì nó được thực hiện;
ngược lại, trong trường hợp có sai sót khi gõ lệnh thì shell thông báo về sai sót và
1
6
dấu nhắc shell lại hiện ra để chờ lệnh tiếp theo của người dùng. Về phổ biến, nếu
như sau khi người dùng gõ lệnh, không thấy thông báo sai sót hiện ra thì có nghĩa
lệnh đã được thực hiện một cách bình thường.
Trước khi đi vào nội dung chi tiết các lệnh thông dụng, chúng ta xem xét về một số quy
định dùng trong mô tả lệnh được trình bày trong tài liệu này.
1.3.1. Các quy ước khi viết lệnh
Trong tài liệu này, các lệnh được trình bày theo một bộ quy tắc cú pháp nhất quán. Bộ
quy tắc này cho phép phân biệt trong mỗi lệnh các thành phần nào là bắt buộc phải có, các
thành phần nào có thể có hoặc không ... Dưới đây là nội dung của các quy tắc trong bộ quy
tắc đó.
Tên lệnh là bắt buộc, phải là từ đầu tiên trong bất kỳ lệnh nào, phải được gõ
đúng như khi mô tả lệnh.
Tên khái niệm được nằm trong cặp dấu ngoặc quan hệ (< và >) biểu thị cho
một lớp đối tượng và là tham số bắt buộc phải có. Khi gõ lệnh thì tên khái niệm (có
thể được coi là "tham số hình thức") phải được thay thế bằng một từ (thường là tên
file, tên thư mục ... và có thể được coi là "tham số thực sự") để chỉ đối tượng liên
quan đến thao tác của lệnh.
Ví dụ, mô tả cú pháp của lệnh more xem nội dung file là
# more
thì từ more là tên lệnh, còn
bắt buộc phải có. Lệnh này có tác động là hiện lên màn hình theo cách thức cuộn nội dung
của file với tên đã chỉ trong lệnh.
Để xem nội dung file có tên là temp, người dùng gõ lệnh:
# more temp
Như vậy, tên lệnh more được gõ đúng như mô tả cú pháp (cả nội dung và vị trí) còn
"file" đã được thay thế bằng từ "temp" là tên file mà người dùng muốn xem nội dung.
Các bộ phận nằm giữa cặp dấu ngoặc vuông [ và ] là có thể gõ hoặc không
gõ cũng được.
Ví dụ, cú pháp của lệnh halt là
# halt [tùy-chọn]
Với các tùy chọn là -w, -n, -d, -f, -i mã mỗi tùy chọn cho một cách thức hoạt động
khác nhau của lệnh halt. Lệnh halt có tác động chính là làm ngừng hoạt động của hệ điều
hành, tuy nhiên khi người dùng muốn có một cách hoạt động nào đó của lệnh này thì sẽ
chọn một (hoặc một số) tuỳ chọn lệnh tương ứng. Một số cách gõ lệnh halt của người dùng
như sau đây là đúng cú pháp:
# halt
# halt -w
# halt -n
# halt -f
Các giá trị có trong cặp | và | trong đó các bộ phận cách nhau bằng dấu sổ
đứng "|" cho biết cần chọn một và chỉ một trong các giá trị nằm giữa hai dấu ngoặc
đó.
1
7
Ví dụ, khi giới thiệu về tùy chọn lệnh của lệnh tail xem phần cuối nội dung của file,
chúng ta thấy:
-f, --follow[={tên | đặc tả}]
Như vậy, sau tham số khóa --follow, nếu xuất hiện thêm dấu bằng "="
thì phải có hoặc tên hoặc đặc tả. Đây là trường hợp các chọn lựa "loại trừ nhau".
Dấu ba chấm ... thể hiện việc lặp lại thành phần cú pháp đi ngay trước dấu
này, việc lặp lại đó có thể từ không đến nhiều lần (không kể chính thành phần cú
pháp đó). Cách thức này thường được dùng với các tham số như tên file.
Ví dụ, mô tả lệnh chown như sau:
chown [tùy-chọn]
Như vậy trong lệnh chown có thể không có hoặc có một số tùy chọn lệnh và có từ một
đến nhiều tên file.
Các bộ phận trong mô tả lệnh, nếu không nằm trong các cặp dấu [ ], <>, { }
thì khi gõ lệnh thực sự phải gõ y đúng như khi mô tả (chú ý, quy tắc viết tên lệnh là
một trường hợp riêng của quy tắc này).
Việc kết hợp các dấu ngoặc với nhau cho phép tạo ra cách thức sử dụng quy
tắc tổ hợp các tham số trong lệnh. Ví dụ, lệnh more bình thường có cú pháp là:
# more
có nghĩa là thay
và ], tức là có dạng sau (chính là dạng tổng quát của lệnh more):
# more [
thì
qua tham số file.
Lưu ý:
Đối với nhiều lệnh, cho phép người dùng gõ tham số khóa kết hợp tương
ứng với tùy_chọn trong mô tả lệnh. Tham số khóa kết hợp được viết theo cách -
trong mô tả lệnh in lịch cal:
cal [tùy-chọn] [tháng [năm] ]
có ba tham số khóa là -m, -j, -y. Khi gõ lệnh có thể gõ một tổ hợp nào đó từ ba
tham số khóa này để được tình huống sử dụng lệnh theo ý muốn. Chẳng hạn,
nếu gõ lệnh
cal -mj 3
thì lệnh cal thực hiện theo điều khiển của hai tham số khóa -m (chọn Thứ Hai
là ngày đầu tuần, thay vì cho ngầm định là Chủ Nhật) và -j (hiển thị ngày trong
tháng dưới dạng số ngày trong năm kể từ đầu năm). Vì vậy, khi viết [tùy-chọn]
trong mô tả lệnh biểu thị cả việc sử dụng từng tùy chọn, nhiều tùy chọn hoặc kết
hợp các tuỳ chọn.
Trong một số lệnh, có hai tham số khóa cùng tương ứng với một tình huống
thực hiện lệnh, trong đó một tham số gồm một kí tự còn tham số kia lại là một từ.
Tham số dài một từ là tham số chuẩn của lệnh, còn tham số một kí tự là cách viết
ngắn gọn. Tham số chuẩn dùng được trong mọi Linux và khi gõ phải có đủ kí tự
trong từ.
1
8
Ví dụ, khi mô tả lệnh date có tùy chọn:
-d, --date=STRING
như vậy hai tham số -d và --date=STRING có cùng ý nghĩa.
Ngoài những quy ước trên đây, người dùng đừng quên một quy định cơ bản là cần phân
biệt chữ hoa với chữ thường khi gõ lệnh.
1.3.3. Làm đơn giản thao tác gõ lệnh
Việc sử dụng bàn phím để nhập lệnh tuy không phải là một công việc nặng nề, song
Linux còn cho phép người dùng sử dụng một số cách thức để thuận tiện hơn khi gõ lệnh.
Một số trong những cách thức đó là:
Sử dụng việc khôi phục dòng lệnh,
Sử dụng các phím đặc biệt,
Sử dụng các kí hiệu thay thế và phím
Sử dụng thay thế alias,
Sử dụng chương trình lệnh.
Cách thức sử dụng chương trình lệnh (shell script) sẽ được giới thiệu chi tiết trong các
chương sau. Dưới đây, chúng ta xem xét cách thức sử dụng việc khôi phục dòng lệnh, phím
đặc biệt và kí hiệu thay thế.
Cơ chế khôi phục dòng lệnh
Linux cung cấp một cách thức đặc biệt là khả năng khôi phục lệnh. Tại dấu nhắc shell:
Người dùng sử dụng các phím mũi tên lên/xuống (↑/↓) trên bàn phím để nhận lại các dòng
lệnh đã được đưa vào trước đây tại dấu nhắc shell, chọn một trong các dòng lệnh đó và biên
tập lại nội dung dòng lệnh theo đúng yêu cầu mới của mình.
Ví dụ, người dùng vừa gõ xong dòng lệnh:
# ls -l tenfile*
sau đó muốn gõ lệnh ls -l tentaptin thì tại dấu nhắc của shell, người dùng sử dụng các
phím di chuyển lên (↑) hoặc xuống (↓) để nhận được:
# ls -l tenfile*
dùng các phím tắt để di chuyển, xoá kí tự (xem phần sau) để có được:
# ls -l ten
và gõ tiếp các kí tự "taptin" để nhận được:
# ls -l tentaptin
chính là kết quả mong muốn.
Trong trường hợp số lượng kí tự thay thế là rất ít so với số lượng kí tự của toàn dòng
lệnh thì hiệu quả của cách thức này rất cao.
Lưu ý:
Việc nhấn liên tiếp các phím di chuyển lên (↑) hoặc xuống (↓) cho phép
người dùng nhận được các dòng lệnh đã gõ từ trước mà không chỉ dòng lệnh mới
được gõ. Cách thức này tương tự với cách thức sử dụng tiện ích DOSKEY trong hệ
điều hành MS-DOS.
1
9