Tải bản đầy đủ (.doc) (157 trang)

Giáo trình sử dụng quản trị và lập trình UNIX LINUX

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (2.83 MB, 157 trang )

Lê Hồng Tiến Tổ Đào tạo
SỬ DỤNG, QUẢN TRỊ VÀ LẬP TRÌNH UNIX/LINUX iii
Đối tượng và cách dùng iii
Tóm tắt nội dung iv
Chương 1. Hệ điều hành UNIX iv
Chương 2. Lập trình Shell iv
Chương 3. Giao diện đồ hoạ iv
Chương 4. Lập trình hệ thống iv
Chương 5. Làm việc trên mạng IP iv
Chương 6. Làm quen và cài đặt Linux iv
Chương 7. Quản trị Linux v
Chương 8. Hỗ trợ giải quyết sự cố trong Linux v
Dành cho giảng viên v
Chú ý v
CHƯƠNG 1. HỆ ĐIỀU HÀNH UNIX 1
1.1 Dẫn nhập 1
1.1.1 Các họ UNIX phổ biến ở Việt Nam 1
1.1.2 Các tính chất chung 3
1.1.3 Phiên làm việc đầu tiên 5
1.2 Giao diện người sử dụng 7
1.2.1 Giao tiếp qua dòng lệnh 7
1.2.2 Giao tiếp qua cửa sổ đồ họa 9
1.3 Các tệp UNIX 12
1.3.1 Cấu trúc hệ thống tệp 12
1.3.2 Các thao tác cơ bản trên tệp bình thường 13
1.3.3 Các lệnh biên tập tệp bình thường 16
1.3.4 Cách sinh tên tệp 19
1.3.5 Quản trị luồng dữ liệu 21
1.3.6 Nội dung và kích thước tệp bình thường 24
1.3.7 Các bộ lọc riêng 25
1.3.8 Hiển thị tệp dưới các dạng khác nhau 29


1.3.9 Các quyền truy cập tệp bình thường 30
1.4 Các lệnh và chương trình 33
1.4.1 Cú pháp và việc thực hiện các lệnh 33
1.4.2 Thời gian thực hiện lệnh 36
1.4.3 Các tiến trình 38
1.4.4 Các "job" trong C Shell 43
1.5 Sử dụng các thiết bị ngoại vi 45
1.5.1 Quản trị in ấn 45
1.5.2 Quản trị các băng từ 48
1.5.3 Quản trị các đĩa rời 50
1.5.4 Chuyển đổi tệp 50
1.6 Các nhóm lệnh và tiện ích 52
Chương 2. Lập trình Shell 1
CHƯƠNG 1
CHƯƠNG 3. GIAO DIỆN ĐỒ HOẠ 1
3.1 RH Linux và X Window 1
3.1.1 Chuẩn bị phần cứng 1
3.1.2 XFree86 và RH Linux 9 1
3.1.3 Môi trường desktop và trình quản trị cửa sổ 2
3.1.4 Các tệp cấu hình XFree86 Server 3
3.1.5 Runlevels và XFree86 8
3.1.5 Fonts 10
3.1.6 Các tài nguyên khác 13
3.2 GNOME 13
3.2.1 Giới thiệu GNOME 14
3.2.2 Giao diện đồ hoạ 14
Sử dụng, quản trị và lập trình UNIX/Linux i
Lê Hồng Tiến Tổ Đào tạo
3.2.3 Nautilus 17
3.2.4 Cửa sổ Start Here 18

3.2.5 Cấu hình thời gian 19
3.2.6 Đĩa mềm và CD-ROMs 21
3.2.7 Trình duyệt Web 22
3.2.8 Trình Email 23
3.2.9 Các ứng dụng 23
3.2.10 Log-Out 26
3.3 KDE 26
3.3.1 Giới thiệu 26
3.3.2 Tài liệu hướng dẫn 26
3.3.3 Sử dụng Desktop 27
3.3.4 Quản trị tệp 31
3.3.5 Duyệt Web bằng Konqueror 32
3.3.6 Dùng Konqueror để xem ảnh 33
3.3.7 KMail 33
3.3.8 Tuỳ biến KDE 34
3.3.9 Đăng xuất khỏi KDE 34
CHƯƠNG 4. LẬP TRÌNH HỆ THỐNG 1
4.1 MÔ HÌNH PHÂN TẦNG TRONG UNIX 1
4.2. NGÔN NGỮ C VÀ HỆ THỐNG UNIX 2
4.2.1 Sơ lược về ngôn ngữ C 2
4.2.2 Hàm system 4
4.2.3 Các tham số hàm trong C 4
4.2.4 Những lệnh gọi hệ thống 6
4.2.5 Dò lỗi 7
4.2.6 Biến errno 7
4.2.7 Xuất/nhập ỏ mức thấp 8
4.2.8 Hàm xuất/nhập nguyên thuỷ 10
4.2.9 Những hàm nguyên thuỷ quản lý tiến trình 11
4.2.10 Những hàm nguyên thuỷ quản lý tệp 13
4.3 CÔNG CỤ PHÁT TRIỂN HỆ THỐNG 15

4.3.1 Trình biên dịch gcc 15
4.3.2 Trình soạn thảo mã nguồn 16
4.3.3 Trình gỡ lỗi gdb 16
4.3.4 Makefile 17
CHƯƠNG 6. LÀM QUEN LINUX 1
6.1 NHỮNG KHÁI NIỆM CHUNG 1
6.1.1 GNU và GPL 1
6.1.2 Lõi và hệ điều hành Linux 1
6.1.3 Những bản phát hành Linux chủ yếu 2
6.2 CHUẨN BỊ CÀI ĐẶT LINUX 3
6.2.1 Mua Linux của Red Hat 3
6.2.2 Nếu không mua của Red Hat 4
6.2.3 Tính tương thích phần cứng 4
6.2.4 Có đủ dung lượng đĩa không? 5
6.2.5 Có thể cài từ CD-ROM? 6
6.2.6 Chọn kiểu cài đặt phù hợp 10
6.2.7 Thông tin phần cứng và yêu cầu hệ thống 12
6.3 CÀI ĐẶT RED HAT LINUX 19
6.3.1 Giao diện đồ hoạ của trình cài đặt 19
6.3.2 Giao diện text của trình cài đặt 20
6.3.3 Tiến trình cài đặt 22
6.3.4 Chọn cách cài đặt 24
6.3.5 Cài đặt từ ổ đĩa CD-ROM 25
6.3.6 Cài đặt từ ổ đĩa cứng 26
6.3.7 Chuẩn bị cho việc cài đặt từ mạng 27
6.3.8 Cài đặt qua NFS 29
Sử dụng, quản trị và lập trình UNIX/Linux ii
Lê Hồng Tiến Tổ Đào tạo
6.3.9 Cài đặt qua FTP 30
6.3.10. Cài đặt qua HTTP 31

6.3.11. Hộp thoại Welcome 31
6.3.12. Lựa chọn ngôn ngữ 32
6.3.13. Chọn bàn phím 32
6.3.14 Chọn cấu hình chuột 33
6.3.15 Chọn nâng cấp hoặc cài đặt 35
6.3.16 Chọn kiểu cài đặt 36
Chương 7. Quản trị Linux với Webmin 1
1. Giới thiệu 1
2. Cấu trúc của Webmin 1
2.1 Module Webmin 1
2.2 Module hệ thống 2
2.3 Module server 2
2.4 Module mạng 2
2.5 Module phần cứng 3
2.6 Module bổ sung 3
3. Quản trị hệ thống Linux với Webmin 3
3.3.1 Cài đặt phần mềm webmin 3
3.1.2 Khởi động Webmin bằng lệnh 4
3.1.3 Định dạng Server 4
Chương 8. Hỗ trợ giải quyết sự cố trong Linux 8
Tài liệu tham khảo 1
SỬ DỤNG, QUẢN TRỊ VÀ LẬP TRÌNH UNIX/LINUX
Đối tượng và cách dùng
Tài liệu này nhằm phục vụ những người sử dụng, quản trị mạng và lập trình
trên các máy tính có cài hệ điều hành UNIX hoặc Linux. Nó được soạn trong
khuôn khổ đào tạo thuộc Đề án 112 như đề mục đã ghi rõ và cho một thời gian
tập huấn hạn chế khoảng 40-50 tiết, vì vậy độc giả ngoài phạm vi đó cần xem
thêm các tài liệu lý thuyết hoặc thực hành đồ sộ hơn và được xuất bản bằng
tiếng Việt hoặc tiếng Anh, một số có nêu tên ở các mục tham khảo. Độc giả
cũng nên liên tưởng đến các kiến thức và thao tác học được trên một vài hệ

điều hành khác (thường là Windows NT/2000) để dễ tiếp thu nhanh chóng
UNIX/Linux.
Các máy tính UNIX/Linux ở Việt Nam hiện nay chủ yếu tập trung trong các
lĩnh vực ngân hàng, tài chính, hàng không, điện lực, bưu điện, giáo dục, khoa
học Chúng có nhiều chủng loại và phiên bản hệ điều hành khác nhau (Apple
Mac OS X, Bull DPX, DEC Digital UNIX, HP/UX, IBM AIX, SCO Unix, SGI
UNIX, Sun Solaris, ) và còn được cập nhật lên đời nữa. Việc chọn một hệ
UNIX chung để huấn luyện cho tất cả những người sử dụng các máy nói trên là
rất khó. Tuy nhiên gần đây, hệ điều hành Linux đang được nói đến rất nhiều và
bắt đầu sử dụng ở nước ta. Linux có rất nhiều điểm giống các hệ UNIX vì là
dẫn xuất trực tiếp từ đó và kế thừa toàn bộ các phần mềm GNU. Mặt khác, các
cơ sở đào tạo cũng không có đủ giấy phép sử dụng các hệ UNIX thương phẩm,
Sử dụng, quản trị và lập trình UNIX/Linux iii
Lê Hồng Tiến Tổ Đào tạo
do vậy tài liệu này dự kiến sẽ dùng các máy vi tính cá nhân (PC) chạy dưới hệ
điều hành miễn phí Linux để làm phương tiện minh hoạ và thực hành.
Tóm tắt nội dung
Tài liệu này bao gồm 8 chương, đề cập những nội dung chính như sau:
Chương 1. Hệ điều hành UNIX
Chương 1 chủ yếu dành cho những người muốn làm quen các hệ điều hành
UNIX chính thống hoặc “thương mại”. Do yêu cầu giới hạn nên ở đây chỉ cố
gắng giới thiệu sơ lược nhưng cụ thể về các họ máy UNIX và đặc biệt về một
số họ phổ biến ở Việt Nam. Bên cạnh đó người đọc có thể sử dụng các hướng
dẫn và ví dụ để bắt đầu làm việc trên máy PC được cài Linux, nếu không có
một bản UNIX “thương mại”.
Chương 2. Lập trình Shell
Chương 2 đi sâu hơn vào thực tiễn sử dụng shell dành cho những người quản
trị mạng và lập trình viên UNIX hoặc Linux. Shell cung cấp một môi trường
diễn dịch lệnh với tương tác trực tiếp qua những dòng văn bản. Shell có một cú
pháp dễ làm chủ nhưng cho phép thực hiện hầu hết các công việc từ thông

thường đến phức tạp mà chưa cần phải sử dụng đến những ngôn ngữ biên dịch
như C và C++, v.v.
Chương 3. Giao diện đồ hoạ
Chương 3 chủ yếu dành cho những người mới sử dụng và lập trình trên các
máy UNIX/Linux, đặc biệt những ai đã từng quen với môi trường giao diện đồ
hoạ thân thiện của Mac OS và MS Windows, hoặc đơn giản chỉ không muốn
làm việc qua giao diện dòng lệnh.
Chương 4. Lập trình hệ thống
Trong chương 4, chúng ta sẽ tìm hiểu về khả năng phát triển UNIX dưới góc
độ lập trình hệ thống, chủ yếu trong ngôn ngữ C, nhằm hiểu rõ hơn về bản chất
của hệ điều hành UNIX cũng như cách sử dụng các công cụ cơ bản về lập trình
của môi trường hệ điều hành này.
Chương 5. Làm việc trên mạng IP
Chương 5 dành cho tất cả người sử dụng UNIX hoặc Linux trong môi trường
mạng cục bộ hoặc diện rộng, kể cả quản trị viên và lập trình viên. Chương này
chỉ giới thiệu vài nét sơ bộ và căn bản. Tuy nhiên độc giả có thể tìm hiểu các
chi tiết sâu hơn ở giáo trình về quản trị mạng.
Chương 6. Làm quen và cài đặt Linux
Chương 6 chủ yếu dành cho những người yêu thích thực hành và muốn tự tay
cài đặt lên máy vi tính cá nhân PC một phiên bản Linux theo yêu cầu của riêng
Sử dụng, quản trị và lập trình UNIX/Linux iv
Lê Hồng Tiến Tổ Đào tạo
mình. Để tạo điều kiện thực hành nhanh chóng và thu được các kinh nghiệm
bản thân, ở đây sẽ giới thiệu các phương pháp cài đặt khá đơn giản với phiên
bản Red Hat số 9 tuy còn mới nhưng đã tỏ ra ổn định.
Chương 7. Quản trị Linux
Chương 7 chủ yếu dành cho những người sử dụng và quản trị viên máy Linux
chạy dưới những phiên bản mới nhất, trong đó có thể cài một công cụ gọi là
Webmin, cho phép tiến hành các công việc quản trị qua giao diện Web chuẩn,
vừa nhất quán lại vừa đơn giản và thuận tiện.

Chương 8. Hỗ trợ giải quyết sự cố trong Linux
Chương 8 chủ yếu giúp cho những người sử dụng và quản trị viên Linux.
Trong quá trình cài đặt và sử dụng, máy tính nào cũng có thể gặp sự cố, không
ít thì nhiều, kể cả máy UNIX. Mặt khác chúng ta luôn luôn cần cải tiến, hiệu
chỉnh và cập nhật những máy này, đặc biệt khi làm việc trong một môi trường
mạng với nguy cơ đe doạ an ninh cao như Internet.
Dành cho giảng viên
Trong tài liệu này, các chương từ 1 đến 5 chủ yếu dành thời gian giới thiệu
những nền tảng lý thuyết của môn UNIX /Linux trong khuôn khổ đề án 112.
Dự kiến phần lý thuyết này cần giảng trong khoảng 16 tiết tức 40% tổng thời
lượng tập huấn.
Những chương khác nói về Linux sẽ chủ yếu được dùng làm tài liệu tham khảo
và thực hành (24 tiết tức 60% tổng thời lượng). Tuy nhiên còn tuỳ theo trình độ
của từng học viên mà giảng viên có thể gia giảm tỷ lệ trên.
Chú ý
- Để thuận tiện hơn cho những độc giả ít thạo tiếng Anh, tài liệu này cố gắng
dùng tối đa các thuật ngữ tin học bằng chữ Việt. Xin độc giả thứ lỗi nếu thấy ở
đôi chỗ chúng có thể khác với những gì mình đã quen sử dụng trước đây.
- Cũng bởi vì một số thuật ngữ có thể chưa thống nhất ở mức quốc gia, nên
chúng thường được giải thích từ lần sử dụng đầu tiên trong tài liệu này và có
chua bằng tiếng Anh, trừ những lần sau đó hoặc những trường hợp mà ý nghĩa
tin học của chúng giống như trong đời thường.
- Mặc dù một số phiên bản mới của các hệ điều hành đã chấp nhận mã Unicode
mà bộ mã Tiêu chuẩn Việt Nam TCVN 6909:2001 có tương thích, trong khi
thực hành ta vẫn nên dùng các tên chữ Việt không dấu với những ký tự ASCII
khả hiện (printable) để chắc chắn không bị máy tính hiểu sai, ví dụ tên có dấu
như "tệp1" sẽ thay bằng "tep1", v.v
Sử dụng, quản trị và lập trình UNIX/Linux v
Lê Hồng Tiến Tổ Đào tạo
CHƯƠNG 1. HỆ ĐIỀU HÀNH UNIX

1.1 Dẫn nhập
UNIX là một hệ điều hành mở, ra đời từ đầu thập niên 1970 trên các máy tính
mini họ DEC PDP. Nhưng phải hơn mười năm sau, nhờ sự đóng góp bền bỉ và
to lớn của hai giới khoa học - công nghiệp, UNIX mới trở nên thật sự tốt và có
thể thay thế được hầu hết các hệ điều hành cũ, kể cả của các máy lớn
(mainframe). Rất nhiều phần mềm ứng dụng trong các lĩnh vực kinh tế, giáo
dục, y tế, kỹ thuật, quốc phòng, v.v. đã được viết dưới UNIX và tạo ra một thị
trường mới. Không may, vì lợi nhuận ngắn hạn, một số công ty đã phát triển
UNIX chệch ý tưởng ban đầu, đưa ra nhiều bản phát hành “thương mại” chạy
trên các máy đắt tiền và đóng kín làm của riêng nên khó dùng chung và tự làm
cho sau này khó cạnh tranh với dòng Microsoft Windows NT/200x đẻ muộn.
Tuy vậy đến nay, phần lớn các bản phát hành UNIX đều thuộc hai dòng chính
thống là System V và BSD với rất nhiều điểm tương đồng hoặc hội tụ, cho nên
người sử dụng vẫn quen gọi gộp là UNIX. Cần nói tới một dòng các hệ điều
hành gọi là “như UNIX” (UNIX-like), thường được người dùng tự cài đặt trong
các máy vi tính hoặc thiết bị công nghiệp nhờ sự nhỏ gọn hoặc ổn định. Có thể
kể tên rất nhiều hệ điều hành như thế, ví dụ: Minix, Xenix, FreeBSD, QNX,
OS9, Linux, v.v Đặc biệt, ảnh hưởng của các bản “như UNIX” nhưng có
nguồn mở đang lan tràn rất nhanh trong các công ty, trường học, viện nghiên
cứu và qua Internet, vượt xa UNIX “thương mại”.
1.1.1 Các họ UNIX phổ biến ở Việt Nam
Cho đến nay, trong các loại UNIX du nhập nước ta, có thể những họ sau đây đã
vào sớm nhất hoặc nhiều nhất:
-Họ SCO UNIX, chủ yếu cài trên các máy tính kiểu PC (khoảng 1988);
-Họ Sun Solaris, cài trên các máy chủ hoặc trạm làm việc sử dụng các chip
thuộc nhóm Sparc (1992) và trên các máy tính kiểu PC (1995);
-Họ các hệ điều hành nguồn mở thuộc dòng “như UNIX”, cài trên các máy tính
kiểu PC và Mac (có lẽ bắt đầu vào nước ta từ 1994 bằng các bản miễn phí);
-Họ IBM AIX, cài trên các máy chủ hoặc trạm làm việc sử dụng các chip thuộc
nhóm PowerPC (1993).

Các hệ điều hành UNIX cài đặt sẵn trên các máy cao cấp và hạng lớn vừa
(midrange) đã xuất hiện vài chục năm nay, nhưng thực tế chỉ được biết đến ở
Việt Nam từ những năm 1990, sau khi có chính sách mở cửa.
Có thể kể thêm nhiều họ UNIX khác đã đến nước ta, ví dụ: họ Apple Mac OS
X sử dụng nhóm chip Motorola PowerPC (1999), DEC Digital UNIX sử dụng
nhóm chip DEC Alpha (xuất hiện từ 1993, sau đó thuộc về Compaq và nay
chuyển sang chủ HP), HP UX sử dụng nhóm chip HP PARISC (1995), SGI sử
dụng nhóm chip R5000 và R10000 (1996), v.v
Sử dụng, quản trị và lập trình UNIX/Linux 1
Lê Hồng Tiến Tổ Đào tạo
Chú ý:
Cũng như nhóm chip Sun Sparc (MicroSparc, UltraSparc), mọi nhóm chip nói trên đều dùng công nghệ
RISC (hay “tập lệnh giảm thiểu”) có độ dài dữ liệu 32 hoặc 64 bit, khác với nhóm chip Motorola 68xxx
và Intel x86 thuộc loại CISC (“tập lệnh phức tạp”) có độ dài dữ liệu 16 hoặc 32 bit.
Những năm gần đây, để giảm giá, nhiều hãng sản xuất máy UNIX đã chuyển
sang sử dụng các chip CISC có bổ sung công nghệ RISC như Intel Pentium
(hoặc tương đương của AMD, Cyrix). Nhưng các máy chủ “nhỏ” dùng những
chip đó và chạy với dòng Microsoft Windows 200x, đặc biệt với dòng “như
UNIX” đang tăng nhanh hơn. Các máy UNIX “thương mại” bị giảm thị phần,
mặc dù sản lượng và trị giá tuyệt đối vẫn ổn định do phần lớn là máy đắt tiền
nhiều CPU. Theo thống kê, tốc độ tăng số lượng máy chủ toàn cầu năm 2001
là: Linux 30,1%, Windows 4,7% và Unix 3,6%. IDG dự báo năm 2005 sẽ có
hơn 12 triệu máy chủ Windows, hơn 10 triệu máy chủ Linux, gần 5 triệu máy
chủ với những hệ điều hành “như UNIX” khác và gần1 triệu máy chủ UNIX.
Sau đây chúng ta sẽ giới thiệu qua về một số họ UNIX đã phổ biến ở nước ta
và những ứng dụng tiêu biểu của chúng.
a. IBM AIX
AIX được bán kèm trên những máy cao cấp của IBM (chủ yếu thuộc dòng
RS/6000) và của Bull (dòng Escala). Cuối những năm 1990, những máy chủ
mạnh của dòng này đã có đến 8 CPU và 4 GB RAM, nhờ vậy có thể phục vụ

hàng nghìn máy trạm bằng những phần mềm ứng dụng lớn. IBM cũng bán
những phần mềm như thế chạy dưới AIX và cả Windows NT, ví dụ Websphere
(quản trị cổng điện tử), Tivoli Enterprise Console (quản trị mạng), DB2 (quản
trị cơ sở dữ liệu), Lotus Notes và Domino (quản trị dòng công việc và thư điện
tử) v.v Cho đến nay hình như chưa du nhập vào Việt Nam những cấu hình
mạnh nhất của các máy AIX.
b. Sun Solaris
Solaris hay SunOS thường được cài sẵn trên những máy cao cấp của các hãng
Sun, Fujitsu và ICL. Cũng như IBM, Sun vừa sản xuất máy UNIX vừa viết các
phần mềm ứng dụng, ví dụ Sun Net Manager (quản trị mạng), StarOffice (tin
học văn phòng) v.v Không ít sản phẩm Sun đã được một số đơn vị nhà nước,
công ty và ngân hàng ở Việt Nam sử dụng. Việc Sun gần đây cấp miễn phí một
bản Solaris và OpenOffice chạy trên các máy PC cũng có thể giúp cho UNIX
vào nước ta dễ hơn.
Trước kia Sun từng đứng đầu nhiều năm về UNIX “thương mại”, nhưng rồi vị
trí đó đã thuộc về IBM. Hiện nay cả hai hãng này đều ủng hộ Linux.
c. SCO UNIX
Cuối thập niên 1980, hãng trẻ SCO đã mở đầu bằng những phiên bản Xenix
“giống UNIX”, cài đặt trên những máy PC có cấu hình phần cứng và hiệu năng
rất khiêm tốn so với PC bây giờ. Ngay sau Xenix, SCO đã cho ra đời bản phát
hành UNIX 386 thật sự và cũng để cài đặt trên các máy PC.
Sử dụng, quản trị và lập trình UNIX/Linux 2
Lê Hồng Tiến Tổ Đào tạo
Chi phí mua SCO UNIX cộng với PC thấp hơn vài lần so với mua các máy của
Sun, IBM hoặc DEC, nhờ đó mà nhiều nhà tin học nước ta đã tận tay biết được
khá sớm UNIX là gì. Gần đây SCO mua lại OpenLinux của Caldera, một hãng
tách từ Novell, để hòng tham gia thị trường Linux đã trở nên sôi động cả về
máy chủ lẫn máy trạm. Lưu ý rằng nhiều phần mềm ứng dụng viết dưới SCO
UNIX có thể chạy trực tiếp dưới Linux.
d. Các hệ điều hành nguồn mở

Các hệ điều hành nguồn mở nói ở đây bao gồm một họ các bản phát hành miễn
phí của dòng “như UNIX”. Ngoài nguồn mở và cho sao chép miễn phí, chúng
có một ưu điểm nữa vì hầu như đã được phát triển trên nền tất cả các loại chip
thông dụng ngày nay, đặc biệt cho các máy vi tính cá nhân PC và Mac. Trong
họ này, phát triển nhanh nhất và phổ biến nhất qua Internet là Linux, nhờ sức
mạnh riêng và giấy phép chung GPL. Dù mới chỉ ra đời từ khoảng 10 năm
trước nhưng Linux đã vào Việt Nam rất sớm và gần đây bắt đầu được lãnh đạo
nước ta chú ý. Xin xem chi tiết về GPL và Linux ở các chương khác.
Các hệ điều hành NetBSD, FreeBSD, OpenBSD cũng được phân phối qua
Internet hoặc trực tiếp từ hãng BSD (lập ra bởi Đại học Berkeley, một cái nôi
của phong trào phần mềm nguồn mở). Giấy phép sử dụng chúng kém tự do hơn
GPL, mặt khác những sản phẩm BSD có tiếng là ổn định nhưng khó cài đặt nếu
không phải chuyên gia, vì vậy chậm thành công hơn Linux.
1.1.2 Các tính chất chung
a. Tính đa nhiệm
UNIX (và các dẫn xuất của nó) có khả năng đảm nhiệm nhiều tác vụ đan xen
nhau và cho người sử dụng cảm giác chúng được tiến hành một cách thật sự
song song, vì vậy gọi là có tính đa nhiệm (multitasking). Ví dụ ta có thể cho
chạy một bài toán cùng với hiển thị các thông báo lên màn hình và in một loạt
tệp ra máy in, đồng thời vẫn nghe nhạc v.v
b. Tính đa dụng
UNIX cho phép nhiều người sử dụng (user) cùng làm việc trên một máy tính
qua các terminal ảo hoặc thực, nghĩa là tại chỗ hoặc từ xa qua mạng. Ngược lại,
một người sử dụng cũng có thể đăng nhập vào nhiều máy trên mạng với những
tư cách khác nhau, nếu được quản trị viên cấp các trương khoản (account)
tương ứng. Do vậy mới nói là UNIX có tính đa dụng (multiuser).
c. Tính mở
Kiến trúc của UNIX (và các dẫn xuất của nó) dựa trên hai tư tưởng chủ đạo về
cấu trúc phân tầng (multilayer) và quan niệm hệ thống mở (open system), nhằm
giải quyết các quan hệ hoặc sự phát triển theo ba chiều, đồng thời vẫn giữ được

tính riêng tư trong các “hộp đen”. Đây cũng là xu hướng càng ngày càng được
đón nhận khắp thế giới.
Sử dụng, quản trị và lập trình UNIX/Linux 3
Lê Hồng Tiến Tổ Đào tạo
Phân tầng là sắp xếp cấu trúc theo hai hướng lên-xuống, cố gắng sao cho mỗi
tầng trở thành một đơn thể chuyên trách hoạt động bằng cách cung cấp toàn bộ
dịch vụ cho cấp trên liền kề và sử dụng toàn bộ dịch vụ của cấp dưới liền kề.
Làm minh bạch như vậy nhằm để tránh sự trùng lặp chức năng và chồng chéo
quan hệ giữa các đơn thể. Nó cũng cho phép đơn giản hoá việc cải tiến hoặc
thay đổi bất kỳ thành phần nào của một hệ thống vốn lớn hơn (hoặc sẽ mở rộng
hơn) theo cách hầu như độc lập với các thành phần khác, nhờ vậy tăng hiệu
năng hoạt động và sự ổn định hoặc an ninh của hệ thống. Nếu như chuẩn hoá
được những dịch vụ nói trên và định dạng được dữ liệu đầu vào/đầu ra của từng
thành phần thì các phần mềm thực hiện đơn thể sẽ trở nên phổ quát và dễ dàng
dùng chung đối với mọi hệ thống có cấu trúc tương tự.
Thực tế hệ điều hành UNIX gồm có nhiều đơn thể phần mềm bao bọc nhau
như những lớp vỏ củ hành. Trong cùng là một lõi hay hạt nhân (kernel) có chức
năng quản trị phân phối các tài nguyên phần cứng như chip xử lý (CPU), các
cửa vào/ra dữ liệu và bộ nhớ v.v Lõi cung cấp các dịch vụ cơ bản nhất cho
tầng trên thông qua những yêu cầu hệ thống (system calls). Mỗi tầng trên có
một chức năng độc lập, ví dụ quản trị các tệp, diễn giải các chỉ thị của người
dùng, mở phiên làm việc, biên dịch chương trình v.v
Chính nhờ cấu trúc phân tầng mà các chương trình mã nguồn có thể dễ dàng
biên dịch lại và chạy được dưới các hệ điều hành khác nhau cài đặt trên các
phần cứng khác nhau. Ví dụ điển hình là các bộ trình biên dịch ngôn ngữ C và
Fortran nổi tiếng như gcc, g77, F2C, chạy trên hầu hết các họ máy sau đây:
Bull (Escala-T, -D-PowerPC, DPX/20-690, -150), DEC (8400, 3000, 2100A,
600, PWS500-Alpha), Dell (PowerEdge, 6100, OptiPlex, 4100 Pentium), HP
(K260-PA8000, 9000), SG Irix (PowerChallenge-R10000, Indigo-R4000,
Indigo-R10000, O2-R5000), IBM (RS-6000-595, -580, -560, -550, -370, -355,

-320, -F50, -R50, -43P), Sun (IPC, Sparcstation, Server Ultra 2, -Ultraparc),
v.v. cũng như trên các máy PC dưới mọi phiên bản của xBSD và Linux.
Quan niệm hệ thống mở xuất phát từ thực tế khi các hệ thống khác nhau có nhu
cầu trao đổi thông tin thì phải thống nhất về giao diện (mặt tiếp xúc) và giao
thức (quy trình kết nối) giữa chúng. Quan niệm này và cấu trúc phân tầng của
UNIX đặc biệt phù hợp cho các hệ thống tin học trong môi trường làm việc qua
mạng, nơi tất cả phải tuân theo một bộ tiêu chuẩn chung về giao diện và giao
thức. Xem thêm giáo trình về mạng, mô hình OSI và bộ giao thức TCP/IP.
d. So sánh UNIX và Windows
Những bản Windows 3.x, 9.x, XP và NT/2000 là những hệ điều hành của cùng
một hãng Microsoft. Chúng khá giống nhau về giao diện người dùng (cửa sổ đồ
hoạ và chuột), tuy nhiên lại khác nhau về cấu trúc hệ thống (dựa vào DOS hoặc
độc lập với DOS) và tổ chức xử lý dữ liệu (độ dài 16 hoặc 32 bit, bộ mã ký tự 8
bit hoặc 16 bit, tên tệp dài giới hạn hay tuỳ ý, v.v.). Mặc dù chỉ chạy trên họ
chip Intel x86 nhưng nhiều khi chúng không gọi nổi ứng dụng hoặc tiện ích của
nhau, lại không dùng được chương trình của các hệ điều hành khác, làm cho
việc dùng chung dữ liệu và phần mềm trở nên khó khăn.
Sử dụng, quản trị và lập trình UNIX/Linux 4
Lê Hồng Tiến Tổ Đào tạo
Những bản từ Windows 95 trở về trước chưa có tính đa nhiệm thực sự, còn
những bản Windows từ 98 trở về sau thì lại chiếm quá nhiều bộ nhớ và đĩa
cứng. Một mặt kém nữa là những hệ điều hành Microsoft có rất nhiều kẻ hở an
ninh, dễ dàng bị virus và các phần mềm tin tặc khác xâm nhập, thay đổi hoặc
lợi dụng thông tin, thậm chí phá hoại cả phần cứng v.v Chỉ những phiên bản
Server từ Windows NT/2000 trở lên mới thực sự có đủ chức năng làm máy chủ
quản trị mạng và có tính đa dụng như UNIX.
Trong khi đó những bản UNIX thường chạy ổn định, an toàn hơn và có thể sử
dụng được các ứng dụng hoặc tiện ích của nhau nếu có mã nguồn. Nói chung
chúng cũng có một số các lỗi và kẻ hở an ninh nhưng ít hơn Windows và
thường được sửa chữa nhanh. Đối với người lập trình, lợi thế nổi bật của UNIX

là ít nhất chúng cũng có sẵn các bộ trình biên dịch GNU và các phần mềm
nguồn mở khác.
1.1.3 Phiên làm việc đầu tiên
a. Terminal và quản trị viên
Trước khi làm việc, đầu tiên phải có một thiết bị terminal và nối nó qua cổng
COM hoặc qua mạng Ethernet với một máy chủ UNIX. Terminal bao gồm một
bàn phím để gõ chữ và một màn hình để hiện chữ, nhưng có thể thay nó bằng
một máy tính PC chạy dưới hệ điều hành DOS hoặc Windows v v. với một
chương trình mô phỏng terminal. Nếu ta có riêng một trạm làm việc UNIX thì
chỉ việc bật điện, thông thường đó cũng là một máy tính PC nhưng được cài
một hệ điều hành “như UNIX”, hoặc SCO UNIX, hoặc Sun Solaris v.v
Người quản trị mạng là một chuyên gia tin học có thể làm được tất cả những
việc chuẩn bị nói trên và cấp cho ta một trương khoản (account), bao gồm tên
đăng nhập và mật khẩu của ta.
b. Đăng nhập
Khi bắt đầu làm việc ở chế độ dòng lệnh văn bản (text) với một máy UNIX,
trên màn hình sẽ hiện ra dòng chữ mời gọi ta đăng nhập (login).
Ta mở đầu phiên làm việc bằng cách trả lời máy, cụ thể là gõ vào tên đăng
nhập của mình (username hay logname, phân biệt chữ hoa với chữ thường) và
kết thúc bằng nhấn phím<RETURN> (hoặc <Enter> trên PC):
login: tên đăng nhập<RETURN>
Máy sẽ hiển thị mời ta gõ vào mật khẩu của mình:
password:
Nếu ta gõ đúng mật khẩu thì đăng nhập thành công và dấu nhắc shell hiện ra.
c. Những người sử dụng
Người sử dụng tối cao (superuser) của một máy UNIX thường là quản trị viên
hoặc người có một trương khoản đặc biệt với tên đăng nhập duy nhất, gọi là
root.
Sử dụng, quản trị và lập trình UNIX/Linux 5
Lê Hồng Tiến Tổ Đào tạo

Người sử dụng bình thường (user) là ta và những người được quản trị viên cấp
cho các trương khoản bình thường.
Bản thân quản trị viên và các user, mỗi người có thể có vài trương khoản bình
thường để đăng nhập với các tên khác nhau khi muốn làm việc ở những tư cách
riêng, nhưng việc này nên hạn chế để tránh phải nhớ nhiều mật khẩu.
d. Mật khẩu
Mật khẩu là một chuỗi chữ, số và dấu bất kỳ, thường dài tối đa 8 ký tự (một số
máy UNIX cho phép mật khẩu dài đến 256 ký tự để chống bị phát hiện).
Mật khẩu là chìa khoá đăng nhập vào hệ thống, do đó ta cần chọn một mật
khẩu dễ nhớ nhưng sao cho người khác khó đoán ra để tăng cường sự an toàn.
Nếu một user quên mật khẩu của mình thì quản trị viên có thể giúp tìm lại hoặc
cấp mới bằng quyền hạn tối cao (nhưng nếu quên (!!?) mật khẩu root thì
superuser phải khởi động lại hoặc thậm chí cài đặt lại hệ điều hành và chọn mật
khẩu mới).
Mỗi lần nhập mật khẩu ta nhớ phân biệt chữ hoa với chữ thường như khi gõ tên
đăng nhập.
e. Dấu nhắc shell
Dấu nhắc shell xuất hiện trên màn hình để mời ta gõ câu lệnh mới, ngay sau
khi nhập mật khẩu đúng hoặc kết thúc lệnh cũ. Đó là một trong những ký tự
dưới đây:
# là dấu nhắc khi ta là root, dù shell nào đang chạy cũng vậy;
% là dấu nhắc khi shell đang chạy là C shell;
$ là dấu nhắc khi shell đang chạy là Bourne shell hoặc Korn shell;
> là dấu nhắc khi shell đang chạy là tcsh
(xem thêm mục nhỏ sau đây "Giao tiếp qua dòng lệnh").
Sử dụng, quản trị và lập trình UNIX/Linux 6
Lê Hồng Tiến Tổ Đào tạo
1.2 Giao diện người sử dụng
Mục này sẽ giới thiệu sơ bộ hai chế độ làm việc của người sử dụng UNIX, đó
là thông qua dòng lệnh và thông qua các cửa sổ đồ hoạ. Những người sử dụng

giỏi thường quen giao tiếp qua dòng lệnh để có thể phát huy hết sức mạnh tổ
hợp từ các lệnh và tuỳ chọn của UNIX (xem tiếp mục nhỏ dưới đây và chương
“Lập trình shell”).
Dù bị mất một phần sức mạnh nói trên, những người sử dụng bình thường ngày
nay vẫn thích giao tiếp qua các cửa sổ đồ hoạ, bởi vì việc chọn bằng chuột
những mục ghi có sẵn trong thực đơn (như dưới MS Windows) chắc chắn vẫn
dễ hơn là tự tay gõ những lệnh và tuỳ chọn có vẻ phức tạp hay khó nhớ. Nhưng
xin nhớ rằng trong môi trường đồ hoạ ta vẫn có thể dùng chế độ dòng lệnh ở
một cửa sổ riêng (xem “Giao diện đồ hoạ").
1.2.1 Giao tiếp qua dòng lệnh
a. Khái niệm shell
Người sử dụng thường giao tiếp với UNIX qua dòng lệnh (command line) bằng
cách đưa vào các câu lệnh và nhận lại các thông báo hoặc kết quả cũng khá
giống như dưới DOS hoặc trong cửa sổ Start > run của Windows). Việc tạo
ra tương tác, diễn dịch và xử lý các chương trình shell script (gồm các lệnh và
dữ liệu viết trong cú pháp shell) là do một shell đảm nhiệm.
Lưu ý:
-Trước dấu nhắc shell ta có thể đặt một chuỗi ký tự thể hiện tên riêng, tên máy tính hoặc địa chỉ mạng
của mình, thậm chí tên của phiên bản UNIX, nhằm phân biệt các máy trong mạng, ví dụ:
Lan_Anh's Solaris %
hoặc:
localhost $
Khi thấy dấu nhắc shell ta chỉ việc đưa vào các ký tự văn bản thể hiện các câu
lệnh theo đúng cú pháp của shell. Việc đưa dữ liệu vào có thể tiến hành qua
bàn phím hoặc các tệp đã chuẩn bị trước.
b. Các loại shell chuẩn của UNIX
Trước khi làm việc với shell ta phải đăng nhập như đã nói ở mục nhỏ "Phiên
làm việc đầu tiên". Sau khi đăng nhập, UNIX đưa ta về một thư mục làm việc
đã đăng ký trước và cho chạy một chương trình shell cũng đã đăng ký.
Nhiều chương trình shell đã được viết ra để phù hợp với những mục đích sử

dụng khác nhau. Tuy nhiên mỗi phiên bản UNIX đều có sẵn một vài shell được
coi như tiêu chuẩn, bởi vì chúng được thừa nhận từ lâu và rất rộng rãi.
Trong các phiên bản UNIX nổi bật lên các shell tiêu chuẩn như Bourne, Korn,
C và tcsh shell. Bourne shell xuất hiện trước nhất và do đó không có một số
đặc trưng mới của các shell ra đời sau. Korn shell được phát triển từ Bourne
shell nên chúng khá giống nhau, kể từ dấu nhắc $. C shell có cú pháp rất phù
Sử dụng, quản trị và lập trình UNIX/Linux 7
Lê Hồng Tiến Tổ Đào tạo
hợp những người đã quen dùng ngôn ngữ C. Còn tcsh lại bổ sung nhiều tiện ích
và cú pháp linh hoạt hơn các shell đi trước.
c. Máy UNIX đang dùng là gì?
UNIX System V có lệnh uname cho phép hiển thị tên và số hiệu phiên bản của
họ UNIX đang dùng, cũng như tên của nút mạng và của máy tính đang dùng.
Muốn biết hết các thông tin đó thì dùng lệnh uname với tuỳ chọn -a như sau:
% uname -a
Ta có thể nhận được một thông báo đại để như:
Sun Solaris 2.26 Lan_Anh Sun UltraSparc
Tuy nhiên trong thực tiễn hãng sản xuất và người sử dụng chưa chắc đặt đủ hết
các tên như trên.
d. Chúng ta dùng shell nào?
Trong chương này ta sẽ sử dụng Bourne shell và C shell vì chúng là những loại
shell phổ biến nhất trong thế giới UNIX. Những nơi nào có sự khác nhau giữa
hai dòng UNIX System V và UNIX BSD cũng sẽ được lưu ý hoặc mô tả riêng.
Khi độc giả thực hành trên Linux với shell bash (rất giống Bourne shell) thì nếu
muốn cũng vẫn có thể thay đổi để dùng các shell trên.
e. Thay đổi shell làm việc
1- T p /etc/passwd ệ
Như đã nói, UNIX có nhiều shell khác nhau. Mỗi user có quyền chọn một shell
trong đó theo thói quen của mình để làm shell mặc định và đăng ký nó trong
tệp /etc/passwd. Nội dung của tệp này có thể xem bằng lệnh cat:

% cat /etc/passwd
Ta sẽ nhận được các thông tin đại để như sau:

pha:eø90e9cd47a0:321:787:pha:/home/pha:/bin/csh
bhh:58e14a0b377b:145:787:bhh:/home/bhh:/bin/csh
root:vx8543346ea015cf:0:0:root:/root:/bin/sh

Ví dụ trên cho thấy cả hai user Phan An (pha) và Bùi Huy Hà (bhh) đăng ký
dùng C shell (/bin/csh), trong khi superuser đăng ký dùng Bourne shell
(/bin/sh). Những giá trị đó được khai báo trong biến "SHELL" của Bourne shell
hoặc trong biến "shell" của C shell và ta có thể đọc chúng bằng lệnh echo:
$ echo $SHELL
/bin/sh
hoặc:
pha % echo $shell
/bin/csh
Trong thực tiễn, phần lớn user dùng thạo một shell thôi, do đó chỉ nên thay đổi
shell mặc định khi thật sự cần thiết. User trước khi mở phiên làm việc phải nhờ
Sử dụng, quản trị và lập trình UNIX/Linux 8
Lê Hồng Tiến Tổ Đào tạo
superuser sửa trực tiếp tệp /etc/passwd để thay đổi shell đăng nhập. Nếu bhh
không muốn nhờ superuser thì dùng lệnh sau để chuyển sang dùng C shell:
bhh % password -s
Changing login shell for bhh on solaris 3
Old shell: /bin/csh
New shell: /bin/sh
2- Trong phiên làm vi c ệ
Nhưng bất kỳ lúc nào trong phiên làm việc, ta vẫn có thể gọi một shell khác có
tính năng phù hợp hơn đối với yêu cầu mới, ví dụ:
pha % sh

pha $
Hoặc ngược lại:
bhh $ ^D
bhh %
Tất nhiên trong phiên làm việc tiếp theo thì shell đăng nhập vẫn phải lấy giá trị
mặc định từ tệp /etc/passwd.
Chú ý:
-Gọi shell như trên là tạo ra một tiến trình mới (xem mục "Tiến trình").
-Nếu không muốn tạo tiến trình mới thì dùng lệnh % exec sh hoặc % exec sh
-^D sẽ xoá tiến trình cuối cùng vừa được tạo ra, nếu gõ nhiều có thể làm ta kết thúc phiên làm việc.
-Có thể thay ^D bằng lệnh exit
1.2.2 Giao tiếp qua cửa sổ đồ họa
Trong UNIX môi trường hỗ trợ giao tiếp đồ họa với user là X Window.
Chương trình thực hiện X Window là một phần mềm miễn phí thuộc bản quyền
của Viện Công nghệ Massachusetts (MIT) và phiên bản ổn định quen thuộc từ
lâu là X11. Ngày nay các phiên bản X hỗ trợ cho các phần cứng khác nhau, có
thể chạy dưới nhiều hệ điều hành và trên nền các chip khác nhau.
Nói chung đối với người sử dụng máy UNIX thì X Window là một sự lựa chọn
tốt thay thế cho giao tiếp qua dòng lệnh, ngoại trừ việc nó chiếm khá nhiều tài
nguyên phần cứng. Với sự phổ biến mạnh mẽ của các máy tính cá nhân, đã có
hai dự án xây dựng thành công trên nền X những giao diện đồ họa, thân thiện
như của Mac OS và MS Windows, đó là GNOME và KDE (xem kỹ hơn ở
chương "Giao diện đồ hoạ").
a. Giới thiệu X Window
X Window System hay hệ thống X là một môi trường cửa sổ đồ hoạ có khả năng
hỗ trợ nhiều ứng dụng trên các máy UNIX. Một phiên bản mã nguồn mở của X
là XFree86™ hiện đang làm cơ sở cho các bản phát hành Linux đã được phát
triển trên các máy PC dùng họ chip x86 của Intel.
Từ lâu nhiều nhà tin học đã muốn tạo ra một hệ thống cửa sổ duy nhất nhằm
giảm bớt khó khăn khi dùng giao diện qua dòng lệnh trên các máy chủ và máy

trạm làm việc dưới UNIX. Năm 1987, họ thành lập một tổ chức mang tên X
Consortium để khuếch trương và chuẩn hoá hệ thống X Window.
Sử dụng, quản trị và lập trình UNIX/Linux 9
Lê Hồng Tiến Tổ Đào tạo
X Window thực chất là một tập hợp các thành phần kết hợp với nhau, bao gồm:
- Hệ thống cung cấp dịch vụ cửa sổ X Window
- Giao thức liên lạc qua mạng X Net Protocol.
- Thư viện các hàm đồ hoạ cơ bản mang tên Xlib
b. Nguyên lý hoạt động
X Window sử dụng kiến trúc client/server với hai trình điều khiển, một cho
client và một cho server. Hai trình này có thể đặt trên hai máy tính khác nhau,
hoặc trên cùng một máy tính. Các thành phần đó gọi là X client và X server.
Trong X Window, quan hệ client/server không có nghĩa là server cung cấp các
dịch vụ còn client thì sử dụng các dịch vụ đó. X server thu nhận các kết nối từ
các ứng dụng X client qua mạng hoặc tại chỗ. Server liên lạc với các phần cứng
như bìa màn hình, màn hình, bàn phím và chuột. Các ứng dụng X client tạo ra
một giao diện đồ hoạ cho người sử dụng (GUI - graphical user interface) và
chuyển các yêu cầu của người sử dụng tới X server.
Minh hoạ 1: Mô hình X Window
1- X server
X server là một chương trình chạy trên máy tính nối mạng (trạm mạng), nó
quản lý màn hình, bàn phím và chuột. X server nhận các yêu cầu của những
chương trình ứng dụng client qua các nối kết liên lạc (communication link) để
tạo ra các cửa sổ làm việc, thay đổi kích thước, di dời các cửa sổ đó, hay để vẽ
nên các đường và các hình trong những cửa sổ vừa tạo ra.
X Server còn gửi trả lại cho ứng dụng client biết các sự kiện đã xảy ra, các dữ
liệu nhập từ bàn phím, con chuột và sự thay đổi trạng thái của các cửa sổ.
X Server có thể quản lý được đồng thời nhiều kết nối với X Client, có nghĩa là
ta có thể chạy đồng thời nhiều ứng dụng với nhiều cửa sổ được mở ra.
2- X Client

Với X Window, X Client là chương trình ứng dụng. X Client chứa các mã thực
hiện những lệnh mà người dùng yêu cầu: gửi thư điện tử, tính lương, quản trị
cơ sở dữ liệu hay bất kỳ điều gì cần thiết để hỗ trợ X và cung ứng giao diện
người dùng.
Sử dụng, quản trị và lập trình UNIX/Linux 10
Ứng dụng B Ứng dụng A
X Server
Màn hình
Bàn phím
Chuột
A
B
Mạng
Lê Hồng Tiến Tổ Đào tạo
Minh hoạ 2: Quan hệ Client/Server trong X Window
Một X Client có thể làm việc với màn hình bất kỳ và tiếp tục chừng nào kết nối
giữa chúng còn tồn tại. Ta cũng không cần phải biên dịch nối kết lại các ứng
dụng X Client, vì chúng được viết để có thể hoạt động với các thế hệ màn hình
đời sau.
Một ứng dụng X Window có thể chạy với server trên cùng một máy hoặc trên
một máy khác và như thế gọi là network transparency. Nhờ vậy đối với một
ứng dụng X Window, việc chạy trên máy cục bộ hay máy từ xa là không quan
trọng. Ta có thể dùng server từ xa để chạy những công việc chiếm nhiều thời
gian và dành client tại chỗ để chạy các chương trình khác.
3- Vào/ra d li uữ ệ
Hệ thống cửa sổ cơ bản cung cấp cho X Window nhiều khả năng thao tác đồ
hoạ kiểu bitmap. Bản thân X Window và các ứng dụng của mình dùng các thao
tác này để hiển thị đồ hoạ cho người dùng. XFree86 mang đến cho người dùng
những cửa sổ và đồ hoạ tức thời, văn bản chữ đẹp, hình ảnh và đồ hoạ bitmap
độ phân giải cao. Trong khi hầu hết những hệ X Window trước đây chỉ có nền

đơn sắc, X Window và XFree86 hiện nay hỗ trợ rất nhiều dải màu. X Window
cũng hỗ trợ khả năng đa tiến trình của UNIX/Linux. Mỗi cửa sổ do X Window
hiển thị có thể là một chương trình riêng lẻ đang chạy với UNIX/Linux.
Những hệ sử dụng X Window thường dùng một hình thức thiết bị trỏ nào đó,
mà thường là con chuột. XFree86 cũng cần có con chuột hoặc một thiết bị trỏ
như quả cầu xoay để phỏng tạo con chuột. Không có dạng thiết bị này, ta
không thể sử dụng XFree86 với Linux. X Window chuyển tín hiệu của thiết bị
trỏ và bàn phím thành một sự kiện (event). Phản hồi của X Window đối với
những sự kiện đó chính là việc thi hành lệnh.
4- Kh n ng c a các GUIả ă ủ
X Consortium đã không đưa ra những tiêu chuẩn về giao diện người dùng,
không ai nói GUI nào là tốt nhất, bởi vì việc dùng GUI rất tuỳ thuộc vào các sở
thích cá nhân. X Consortium muốn làm cho X Window trở thành chuẩn của các
trạm làm việc UNIX. Đó là một trong nhiều lý do giải thích tại sao X Window
được cung cấp miễn phí trên Internet. Được sử dụng miễn phí, X Window phát
huy tính liên tác (interoperability), vốn là nền tảng của các hệ mở.
Sử dụng, quản trị và lập trình UNIX/Linux 11
X Client X Server
Màn hình
Bàn phím
Con chuột
Bộ đệm video
Font chữ
Cửa sổ
Yêu cầu đồ hoạ
Sự kiện
Lê Hồng Tiến Tổ Đào tạo
1.3 Các tệp UNIX
Mục này sẽ mô tả cấu trúc hệ thống tệp với những thành phần chủ yếu và
những thao tác cơ bản trên các tệp bình thường của hệ điều hành UNIX. Độc

giả cần nắm được một số khái niệm về các kiểu tệp và cách sử dụng những
lệnh quan trọng liên quan đến chúng.
1.3.1 Cấu trúc hệ thống tệp
a. Tổ chức thông tin trong tệp
Trong UNIX nội dung của mỗi tệp chỉ là một chuỗi các byte không có cấu trúc
gì đặc biệt. Các byte này tương ứng hoặc với các ký tự ASCII, hoặc các thông
tin nhị phân, ví dụ nội dung của một đơn thể chương trình khả thi hoặc một
chuỗi các con số thể hiện dưới dạng nhị phân v.v
b. Các kiểu tệp UNIX
Có 3 kiểu tệp cần phân biệt:
1- T p bình th ngệ ườ
Các tệp này thường là tệp văn bản hoặc tệp lệnh shell hoặc tệp dữ liệu thuần
tuý mà ta đã làm quen từ đầu chương đến bây giờ
2- Các t p th m cệ ư ụ
Thư mục là một tệp chứa các thông tin về những tệp có quan hệ trực tiếp với
thư mục đó và sẽ được giới thiệu ở một mục nhỏ riêng sau đây.
3- Các t p c bi tệ đặ ệ
Đó là những tệp có quan hệ trực tiếp với các thiết bị ngoại vi và sẽ được giới
thiệu ở một mục nhỏ riêng sau đây.
Có một lệnh giúp ta biết kiểu của một tệp là gì. Ví dụ nếu "prog.c" là tên một
tệp mà ta xây dựng trước kia và chứa mã nguồn trong ngôn ngữ C:
% file prog.c<RETURN>
prog.c: c program text
UNIX cho biết rõ ràng "prog.c" là một tệp văn bản chứa chương trình trong
ngôn ngữ C. Nếu ta xem tiếp tệp khả thi "a.out" sinh ra từ quá trình biên dịch
các liên kết bằng trình cc:
% file a.out<RETURN>
linked executable
UNIX lại cho biết rõ ràng "a.out" là một đơn thể khả thi đã kết nối.
c. Tên của các tệp

Tên ở đây không phân biệt là của các tệp kiểu gì như đã nói trên, nhưng phải
tuân theo các quy ước chung như sau:
Sử dụng, quản trị và lập trình UNIX/Linux 12
Lê Hồng Tiến Tổ Đào tạo
1. Tên của các tệp là một chuỗi các ký tự khả hiện của ASCII.
2. Các chữ viết hoa được phân biệt khác các chữ viết thường.
3. Ký tự đầu tiên phải khác những ký tự sau đây để shell khỏi nhầm lẫn:
+ – =
4. Nói chung phải tránh dùng các ký tự đặc biệt (sẽ nói sau).
5. Tên tệp UNIX System V dài tối đa 14 ký tự.
6. Tên tệp UNIX BSD dài tối đa 255 ký tự.
1.3.2 Các thao tác cơ bản trên tệp bình thường
a. Sao chép các tệp bình thường
1- L nh cpệ
Có thể tạo ra bản sao "tệp1_sao" từ "tệp1" bằng lệnh cp (copy):
% cp tệp1 tệp1_sao
2. cp trong UNIX BSD
Trong UNIX BSD ta có thể dùng tuỳ chọn -i để tránh việc xoá nhầm như sau:
% cp –i tệp1 tệp1_sao
bởi vì nếu đã có sẵn "tệp1_sao" thì UNIX BSD sẽ hỏi:
overwrite tệp1_sao?
(có ghi đè lên "tệp1_sao" không?). Nếu ta đồng ý thì trả lời "y", còn nếu không
thì gõ bất kỳ một ký tự khác "y".
b. Thay đổi tên cho tệp bình thường
1- L nh mvệ
Lệnh mv (move) cho phép ta đổi tên cũ "old_name" của một tệp thành tên mới
"new_name", ví dụ:
% mv old_name new_name
Trong đó bắt buộc tên "old_name" phải có sẵn mặc dù sau đó nó sẽ bị mất.
Nhưng nếu tên "new_name" đã có sẵn thì nó sẽ bị mất và nếu nó không có kết

nối thì nội dung của tệp "old_name" sẽ bị mất.
2- Tu ch n "-i" c a l nh mvỳ ọ ủ ệ
% mv –i old_name new_name
Nếu tên "new_name" đã có sẵn thì máy sẽ yêu cầu ta khẳng định:
remove new_name
(có xoá new_name không?). Nếu ta đồng ý xoá thì trả lời "y", còn nếu không
thì gõ một ký tự khác.
3- Tu ch n "-" c a l nh mvỳ ọ ủ ệ
Sử dụng, quản trị và lập trình UNIX/Linux 13
Lê Hồng Tiến Tổ Đào tạo
Tuỳ chọn này cho phép đổi tên của một tệp bắt đầu bằng ký tự "-". Một tên như
trong ví dụ sau (-e) thì sẽ không bị shell hiểu nhầm là một tuỳ chọn:
% mv – –e ne_ne
c. Tạo kết nối cho tệp bình thường
Lệnh ln (link) tạo ra một kết nối cho một tệp bình thường đã sẵn có, ví dụ:
% ln tệp1 syn_tệp1
Ta có thể tạo ra bao nhiêu kết nối cho một tệp bình thường cũng được.
d. Xoá bỏ tên một tệp bình thường
1- Lệnh rm cho phép ta xoá bỏ một (hay nhiều) tên của (các) tệp, ví dụ:
% rm tên1 tên2 tên3
Những tên này có thể là kết nối của nhau. Nếu ta xoá hết mọi tên và kết nối của
một tệp thì nó mới bị mất hẳn vì không biết gọi nó bằng gì nữa, nói cách khác
chừng nào còn một tên thì tệp vẫn chưa bị mất.
2- Tuỳ chọn "-i" của lệnh rm yêu cầu ta phải khẳng định việc xoá tên dù nó có
các kết nối:
% rm –i tên_tệp
Nếu ta đồng ý xoá thì trả lời "y", còn nếu không thì gõ một ký tự khác.
3- Tuỳ chọn "-" của lệnh rm cho phép ta xoá tên của một tệp bắt đầu bằng ký tự
"-". Một tên như trong ví dụ sau (-o) thì sẽ không bị shell hiểu nhầm là một tuỳ
chọn:

% rm – –o
e. Liệt kê các tên tệp bình thường
Ta dùng lệnh ls để liệt kê các tên tệp bình thường như sau:
% ls
Trong danh sách liệt kê như vậy sẽ không có các tệp có tên bắt đầu bằng dấu
chấm ".", mặc dù tên đó hợp lệ. Muốn hiện chúng thì dùng tuỳ chọn -a (all):
% ls –a
f. So sánh các tệp
Để minh hoạ các ví dụ sắp tới ta dùng 3 tệp có tên tệp1, tệp2 và tệp3:
tệp1 tệp2 tệp3
AAAAAA AAAAAA AAAAAA
BBBBBB BBBXYZ BBBYYZ
CCCCCC CCCCCC CMCCC
Mỗi tệp trên cùng chứa 3 dòng có nội dung khá giống nhau.
1- L nh cmpệ
Lệnh cmp so sánh 2 tệp có tên ở đối số và sẽ cho kết quả ở vị trí mà hai tệp bắt
đầu khác nhau, ví dụ:
% cmp tệp1 tệp2
tệp1 tệp2 differ: char 11, line 2
Sử dụng, quản trị và lập trình UNIX/Linux 14
Lê Hồng Tiến Tổ Đào tạo
Vị trí đó được hiển thị bằng các số thứ tự của ký tự (char) và dòng (line) tính
đến nơi bắt đầu có sự khác nhau.
Chú ý:
-Trong số thứ tự của ký tự có tính cả ký tự điều khiển, ví dụ <RETURN>
-Nếu tệp1 giống tệp2 thì lệnh cmp sẽ không hiển thị gì cả
-Nếu dùng tuỳ chọn "-l":
% cmp –1 tệp1 tệp2
thì ta sẽ nhận được số (thập phân) của từng cặp ký tự khác nhau, cùng với giá trị bát phân (octal) của
từng cặp đó:

11 102 130
12 102 131
13 102 132
Nhớ rằng 102 là giá trị bát phân của ký tự B, và 130, 131, 132 là của X, Y, Z.
-Nếu ta dùng tuỳ chọn "-s":
% cmp –s tệp1 tệp2
thì màn hình sẽ không hiển thị gì cả, dù các tệp có giống nhau hay không, nhưng lệnh cmp sẽ trả lại
một giá trị: 0 nếu 2 tệp giống nhau, 1 nếu 2 tệp khác nhau, 2 nếu 1 trong 2 tệp không tồn tại. Nhớ rằng
giá trị trả lại này nằm trong một biến định sẵn là "status" của C shell và "?" của Bourne shell, không
phụ thuộc vào việc có dùng tuỳ chọn của cmp hay không.
Trong ví dụ trên ta lấy được giá trị trả lại bằng lệnh echo, trong C shell:
% echo $status
1
hoặc trong Bourne shell:
$ echo $?
1
Trong lập trình shell ta sẽ thường dùng đến các giá trị trả lại (xem chương 2 "Lập trình shell").
2- L nh commệ
+Lệnh comm nói chung chỉ áp dụng vào các tệp sắp xếp theo trật tự tăng dần
các dòng, theo mã ASCII, ví dụ với tệp1 và tệp2 đã nói trên:
% comn tệp1 tệp2
Ta sẽ nhận được:
AAAAAA
BBBBBB
BBBXYZ
CCCCCC
- Cột 1 gồm một hay nhiều dòng chỉ có trong tệp1 mà không có trong tệp2
- Cột 2 gồm một hay nhiều dòng chỉ có trong tệp2 mà không có trong tệp1
- Cột 3 gồm một hay nhiều dòng có trong cả tệp1 và tệp2
+Các tuỳ chọn của lệnh comm:

-tuỳ chọn "-" cho phép thay 1 trong 2 tệp bằng những gì gõ ở bàn phím (kết thúc bằng ^D):
% comn – tệp1
- tuỳ chọn "-1" sẽ xoá bỏ việc soạn thảo từ cột 1:
% comn –1 tệp1 tệp2
- tuỳ chọn "-12" sẽ xoá bỏ việc soạn thảo từ cột 1 và cột 2, v.v
Ví dụ lệnh sau sẽ yêu cầu gõ vào một tệp từ bàn phím và không hiển thị gì:
% comn –123 – tệp2
3- L nh diffệ
% diff tệp1 tệp2
Ta sẽ nhận được:
2c2
Sử dụng, quản trị và lập trình UNIX/Linux 15
Lê Hồng Tiến Tổ Đào tạo
< BBBBBB
–––
BBBXYZ
Lưu ý:
-2c2 nghĩa là cần thay dòng 2 của tệp này bằng dòng 2 của tệp kia để cho 2 tệp giống hệt nhau
-Sau đấy hiện lên 2 dòng đã nói để soạn thảo lại chúng.
4- L nh diff3ệ
% diff3 tệp1 tệp2 tệp3
Ta sẽ nhận được:
===
1:2,3c
BBBBBB
CCCCCC
2:2,3c
BBBXYZ
CCCCCC
3:2,3c

BBBXYZ
CMCCCC
Lưu ý:
-Các ký tự = = = ở dòng đầu có nghĩa là 3 tệp khác nhau
-Giả sử đó là = = 2 thì chỉ có tệp2 khác các tệp kia v.v
1.3.3 Các lệnh biên tập tệp bình thường
a. Các lệnh biên tập đơn giản
1- L nh catệ
a) Lệnh cat sẽ hiển thị một hay nhiều tệp với cách diễu hành (trôi tuần tự) các
dòng trên màn hình, nếu có nhiều tệp thì chúng sẽ được ghép tiếp vào nhau để
diễu hành:
% cat tệp1 tệp2 tệp3
b) Tuỳ chọn "-n" trong UNIX BSD cho phép hiện thêm số thứ tự của các dòng
% cat –n tệp1 tệp2
2- L nh headệ
a) Lệnh head trong UNIX BSD sẽ hiển thị n dòng đầu tiên của một tệp với tuỳ
chọn "-n":
% head –8 tệp
b) Lệnh head áp dụng cho nhiều tệp, nhưng không ghép chúng như lệnh cat, ví
dụ sau hiện tuần tự 6 dòng đầu của mỗi tệp:
% head –6 tệpp tệpq tệpl
c) Lệnh head, không có tuỳ chọn, áp dụng cho 1 tệp, sẽ hiển thị 10 dòng đầu
tiên của tệp đó:
% head tệp1
d) Lệnh head, không có tuỳ chọn, áp dụng cho nhiều tệp, sẽ hiện tuần tự 10
dòng đầu của mỗi tệp nhưng không ghép chúng như lệnh cat:
Sử dụng, quản trị và lập trình UNIX/Linux 16
Lê Hồng Tiến Tổ Đào tạo
% head tệp1 tệp2<RETURN>
==> tệp1 <==

AAAAAA
BBBBBB
CCCCCC
==> tệp2 <==
AAAAAA
BBBXYZ
CCCCCC
3- L nh tailệ
a) Lệnh tail chỉ có một đối số, với tuỳ chọn "-n" nó sẽ hiển thị n dòng cuối:
% tail –8 tệp
b) Với tuỳ chọn "+n" nó sẽ hiển thị cả tệp kể từ dòng n:
% tail +8 tệp
c) Không có tuỳ chọn nó sẽ hiển thị 10 dòng cuối:
% tail tệp
d) Thêm tuỳ chọn "-r" nó sẽ đảo ngược trật tự các dòng khi soạn thảo:
% tail –r tệp
hoặc sẽ đảo ngược trật tự 10 dòng cuối:
% rail –10r tệp
e) Với tuỳ chọn "-c" nó sẽ đếm theo ký tự, ví dụ để soạn 10 ký tự cuối cùng của
tệp1 (kể cả các ký tự điều khiển như <RETURN>):
% tail –10c tệp1<RETURN>
BB
CCCCCC
f) Với tuỳ chọn "-b" nó sẽ đếm theo block (1024 ký tự), ví dụ sau sẽ hiện 3
block cuối của tệp:
% tail –3b tệp
b. Biên tập với quản lý màn hình
1- L nh pgệ
a) Hiển thị trang màn hình đầu tiên của tệp_long hoặc vài tệp:
% pg tệp_long

b) Hiển thị 10 dòng đầu tiên của tệp_long:
% pg –10 tệp_long
c) Xoá màn hình trước rồi đặt con chạy ở đầu trang:
% pg –c tệp_long
d) Hiển thị trong chế độ màn hình âm bản:
% pg –s tệp_long
e) Hiển thị kể từ dòng thứ n của tệp_long, ví dụ dòng 9:
% pg +9 tệp_long
f) Hiển thị kể từ dòng có chứa chuỗi ký tự "CHAIN" của tệp_long:
% pg +/CHAIN/ tệp_long
g) Di chuyển từng dòng một về trước:
Sử dụng, quản trị và lập trình UNIX/Linux 17
Lê Hồng Tiến Tổ Đào tạo
l
h) Di chuyển từng trang một về trước:
<RETURN>
i) Di chuyển n trang về trước, ví dụ 6 trang:
6
j) Di chuyển từng trang một về sau:
–1
k) Di chuyển n trang về sau, ví dụ 8 trang:
–8
l) Di chuyển nửa trang về trước:
d
m) Di chuyển nửa trang về sau:
–d
n) Di chuyển đến chuỗi ký tự CHAIN đầu tiên về trước:
/CHAIN/
o) Di chuyển đến chuỗi ký tự CHAIN thứ n về trước, ví dụ thứ 12:
12/CHAIN/

p) Di chuyển đến chuỗi ký tự CHAIN đầu tiên về sau:
?CHAIN?
q) Di chuyển đến chuỗi ký tự CHAIN thứ n về sau, ví dụ thứ 4:
4?CHAIN?
r) Di chuyển đến cuối tệp:
$
s) Hiển thị danh sách các lệnh:
h
t) Ra khỏi lệnh pg trước khi đến cuối tệp:
q
hoặc:
Q
2- L nh moreệ
a) Lệnh more áp dụng với 1 hoặc nhiều tệp:
% more tệp
% more tệp1 tệp2 tệp3
b) Ví dụ muốn hiện 12 dòng của tệp:
% more –12 tệp
c) Với tuỳ chọn "-d" phía dưới màn hình sẽ hiện thêm thông tin về tỷ lệ % của
tệp đã đạt được:
% more –d tệp
d) Để đạt được dòng thứ n ngay từ khi mở đầu, ví dụ thứ 12:
% more +12 tệp
e) Để đạt được chuỗi "CHAIN" thứ nhất ngay từ khi mở đầu:
% more +/CHAIN tệp
Sử dụng, quản trị và lập trình UNIX/Linux 18
Lê Hồng Tiến Tổ Đào tạo
f) Di chuyển từng dòng về phía trước:
<RETURN>
g) Di chuyển từng cửa sổ về phía trước:

<SPACE>
hoặc:
z
h) Di chuyển n dòng + 1 cửa sổ về phía trước, ví dụ n=15:
15s
i) Di chuyển n cửa sổ + 1 cửa sổ về phía trước, ví dụ n=3:
3f
j) Lùi một cửa sổ về phía sau:
b
k) Di chuyển về phía trước kể từ chuỗi "CHAIN" thứ nhất:
/CHAIN
l) Di chuyển về phía trước kể từ chuỗi "CHAIN" thứ n, ví dụ n=3:
3/CHAIN
m) Làm "tươi" lại màn hình:
^L
n) Nhắc lại một lệnh
.
o) Để biết số thứ tự của dòng hiện hành:
:
p) Đưa cửa sổ trở lại n dòng (sau khi đã nhảy cách n dòng), ví dụ n=10:
10<RETURN>
q)Hiện danh sách các lệnh:
h
r) Ra khỏi lệnh more:
q
hoặc:
Q
1.3.4 Cách sinh tên tệp
a. Nguyên lý sinh tên tệp
Hãy lấy ví dụ một lệnh có nhiều đối số đã từng giới thiệu ở trên:

% rm tệp1 tệp2 tệp3
Lệnh này có thể viết dưới dạng cô đọng như sau:
% rm tệp?
Ký tự dấu hỏi "?" ở đây được gọi là một siêu ký tự sinh tên tệp vì nó đại diện
cho cả một nhóm ký tự. Chính shell quy định ý nghĩa của các siêu ký tự và diễn
dịch chúng. Nếu toàn bộ thông tin sinh ra bởi các siêu ký tự sinh tên tệp là rỗng
thì ta nhận được thông báo sau:
No match.
Sử dụng, quản trị và lập trình UNIX/Linux 19
Lê Hồng Tiến Tổ Đào tạo
Nói chung siêu ký tự là những ký tự đặc biệt có một ý nghĩa riêng nào đó cho
shell và chỉ cho shell. Nhưng có những ký tự khác không thuộc loại sinh tên
tệp, ví dụ các dấu chỉnh hướng như > và <. Dưới UNIX còn có những ký tự đặc
biệt khác, cũng có ý nghĩa riêng nhưng không phải cho shell mà chỉ cho một số
lệnh nào đó, ví dụ grep.
b. Các siêu ký tự sinh tên tệp
Các siêu ký tự sinh tên tệp (wildcards) là những ký tự sau:
' ? * [ ] – !
(trong đó ký tự "!" chỉ có nghĩa với Bourne shell).
1- Siêu ký t d u h i "?"ự ấ ỏ
Ký tự dấu hỏi sinh ra (thay cho) bất kỳ ký tự nào khác, ví dụ lệnh sau:
% rm fi?e
sẽ có thể tương đương với lệnh:
% rm file fine fire
2- Siêu ký t d u sao "*"ự ấ
Siêu ký tự dấu sao "*" sẽ sinh ra 0, 1 hoặc nhiều ký tự bất kỳ, ví dụ lệnh:
% cat tệp*
sẽ có thể tương đương với lệnh:
% cat tệp tệp1 tệp_in tệp_out
3- C p siêu ký t d u ngo c vuông "ặ ự ấ ặ [" và "]"

Ta thường gặp cặp dấu ngoặc vuông "[" và "]" trong tên tệp. Ví dụ:
% rm sa[cnN]h
Từ các ký tự ở trong cặp dấu ngoặc vuông, tức cnN, một ký tự bất kỳ sẽ được
chọn, do đó lệnh trên tương đương với:
% rm sach sanh saNh
(nếu những tệp đó tồn tại trong thư mục hiện hành).
4- Siêu ký t d u "-"ự ấ
Từ ký tự đầu đến ký tự sau trong cặp dấu ngoặc vuông, một ký tự bất kỳ sẽ
được chọn, ví dụ:
% cat fi[b–m]h
tương đương với:
% cat fibh fich filh
5- Siêu ký t d u "!"ự ấ
Siêu ký tự "!" chỉ có nghĩa với Bourne shell là phải lấy một ký tự khác những
ký tự trong cặp dấu ngoặc vuông sau nó, ví dụ:
% rm fi[!fgtk]h
tương đương với:
Sử dụng, quản trị và lập trình UNIX/Linux 20

×