Giáo trình gồm có nội dung 1. Hệ điều hành UNIX 2. Lập trình Shell 3. Giao diện đồ họa 4. Lập trình hệ thống 5. Làm quen với Linux 6. Quản trị Linux 7. Hỗ trợ giải quyết sự cố Linux 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.
Trang 1SỬ 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 iii
Chương 1 Hệ điều hành UNIX iii
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 iv
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 28
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 49
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
Trang 23.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 17
6.3.1 Giao diện đồ hoạ của trình cài đặt 18
6.3.2 Giao diện text của trình cài đặt 18
6.3.3 Tiến trình cài đặt 21
6.3.4 Chọn cách cài đặt 23
6.3.5 Cài đặt từ ổ đĩa CD-ROM 24
6.3.6 Cài đặt từ ổ đĩa cứng 25
6.3.7 Chuẩn bị cho việc cài đặt từ mạng 26
6.3.8 Cài đặt qua NFS 28
Trang 36.3.9 Cài đặt qua FTP 29
6.3.10 Cài đặt qua HTTP 30
6.3.11 Hộp thoại Welcome 30
6.3.12 Lựa chọn ngôn ngữ 31
6.3.13 Chọn bàn phím 31
6.3.14 Chọn cấu hình chuột 32
6.3.15 Chọn nâng cấp hoặc cài đặt 34
6.3.16 Chọn kiểu cài đặt 35
Chương 7 Quản trị Linux 1
Chương 8 Hỗ trợ giải quyết sự cố trong Linux 1
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,
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ố
Trang 4gắ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ướngdẫ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ảntrị mạng và lập trình viên UNIX hoặc Linux Shell cung cấp một môi trườngdiễ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ôngthườ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ịchnhư 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ácmá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ốnlà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ấtcủ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ìnhcủ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ườngmạ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àychỉ 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ácchi 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ự taycà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êngmình Để tạo điều kiện thực hành nhanh chóng và thu được các kinh nghiệmbả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ênbả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 Linuxchạ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
Trang 5Chươ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ệuchỉ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ườngmạ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ệunhữ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ờilượ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ắngdù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ênchú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ĩatin 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 khithự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ự ASCIIkhả hiện (printable) để chắc chắn không bị máy tính hiểu sai, ví dụ tên có dấunhư "tệp1" sẽ thay bằng "tep1", v.v
Trang 6CHƯƠNG 1 HỆ ĐIỀU HÀNH UNIX
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êncứ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 chipthuộ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ínhkiể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ộcnhó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ụngnhóm chip DEC Alpha (xuất hiện từ 1993, sau đó thuộc về Compaq và naychuyể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
Trang 7Chú ý:
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ểnsang 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ữngchip đó 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ềnnhiều CPU Theo thống kê, tốc độ tăng số lượng máy chủ toàn cầu năm 2001là: 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áychủ 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ạnhcủa dòng này đã có đến 8 CPU và 4 GB RAM, nhờ vậy có thể phục vụ hàngnghìn máy trạm bằng những phần mềm ứng dụng lớn IBM cũng bán nhữngphần mềm như thế chạy dưới AIX và cả Windows NT, ví dụ Websphere (quảntrị 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ạnhnhấ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ãngSun, Fujitsu và ICL Cũng như IBM, Sun vừa sản xuất máy UNIX vừa viết cácphần mềm ứng dụng, ví dụ Sun Net Manager (quản trị mạng), StarOffice (tinhọ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ộtbản Solaris và OpenOffice chạy trên các máy PC cũng có thể giúp cho UNIXvà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ăngrất khiêm tốn so với PC bây giờ Ngay sau Xenix, SCO đã cho ra đời bản pháthành UNIX 386 thật sự và cũng để cài đặt trên các máy PC
Trang 8Chi 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ủaSun, IBM hoặc DEC, nhờ đó mà nhiều nhà tin học nước ta đã tận tay biết đượckhá sớm UNIX là gì Gần đây SCO mua lại OpenLinux của Caldera, một hãngtá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 SCOUNIX có thể chạy trực tiếp dưới Linux.
Các hệ điều hành NetBSD, FreeBSD, OpenBSD cũng được phân phối quaInternet hoặc trực tiếp từ hãng BSD (lập ra bởi Đại học Berkeley, một cái nôicủ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ơnGPL, mặt khác những sản phẩm BSD có tiếng là ổn định nhưng khó cài đặt nếukhô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 xennhau 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ể chochạ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ạttệ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ínhqua 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ằmgiải quyết các quan hệ hoặc sự phát triển theo ba chiều, đồng thời vẫn giữ đượctí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
Trang 9Phâ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ỗitầ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éoquan hệ giữa các đơn thể Nó cũng cho phép đơn giản hoá việc cải tiến hoặcthay đổ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ộnghơ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ệună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ừngthà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àngdù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ứcnăng quản trị phân phối các tài nguyên phần cứng như chip xử lý (CPU), cáccử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 chotầ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ườidù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àngbiê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ácphầ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ó nhucầu trao đổi thông tin thì phải thống nhất về giao diện (mặt tiếp xúc) và giaothứ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ủaUNIX đặc biệt phù hợp cho các hệ thống tin học trong môi trường làm việc quamạng, nơi tất cả phải tuân theo một bộ tiêu chuẩn chung về giao diện và giaothứ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ùngmộ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ự 8bit 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ủanhau, lại không dùng được chương trình của các hệ điều hành khác, làm choviệc dùng chung dữ liệu và phần mềm trở nên khó khăn
Trang 10Những bản từ Windows 95 trở về trước chưa có tính đa nhiệm thực sự, cònnhững bản Windows từ 98 trở về sau thì lại chiếm quá nhiều bộ nhớ và đĩacứ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ở anninh, dễ dàng bị virus và các phần mềm tin tặc khác xâm nhập, thay đổi hoặclợ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ảnServer 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 chungchú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ềmnguồ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ổngCOM hoặc qua mạng Ethernet với một máy chủ UNIX Terminal bao gồm mộtbàn phím để gõ chữ và một màn hình để hiện chữ, nhưng có thể thay nó bằngmột máy tính PC chạy dưới hệ điều hành DOS hoặc Windows v v với mộtchươ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àimộ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ữngviệ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
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:
Trang 11Người sử dụng bình thường (user) là ta và những người được quản trị viên cấpcho 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ìnhthường để đăng nhập với các tên khác nhau khi muốn làm việc ở những tư cáchriêng, nhưng việc này nên hạn chế để tránh phải nhớ nhiều mật khẩu
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 khinhậ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")
Trang 121.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ụnggiỏ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àynay vẫn thích giao tiếp qua các cửa sổ đồ hoạ, bởi vì việc chọn bằng chuộtnhữ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ưngxin 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ằngcá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
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ênlà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 đượccoi 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ừ Bourneshell nên chúng khá giống nhau, kể từ dấu nhắc $ C shell có cú pháp rất phù
Trang 13hợ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ếtcá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ạishell phổ biến nhất trong thế giới UNIX Những nơi nào có sự khác nhau giữahai 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ếumuố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 shelltrong đó theo thói quen của mình để làm shell mặc định và đăng ký nó trongtệp /etc/passwd Nội dung của tệp này có thể xem bằng lệnh cat:
Trang 14superuser sửa trực tiếp tệp /etc/passwd để thay đổi shell đăng nhập Nếu bhhkhô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ụ:
-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ềncủ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ọntốt thay thế cho giao tiếp qua dòng lệnh, ngoại trừ việc nó chiếm khá nhiều tàinguyê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ệnnhư 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áttriể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ằmgiả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áytrạm làm việc dưới UNIX Năm 1987, họ thành lập một tổ chức mang tên XConsortium để khuếch trương và chuẩn hoá hệ thống X Window
Trang 15X 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 choclient 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ácdị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ứngnhư 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 ramộ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ữngchươ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
A B
Mạng
Trang 16cơ sở dữ liệu hay bất kỳ điều gì cần thiết để hỗ trợ X và cung ứng giao diệnngười dùng.
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ốigiữ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 ứngdụ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ênmộ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 quantrọng Ta có thể dùng server từ xa để chạy những công việc chiếm nhiều thờigian 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 thaotác này để hiển thị đồ hoạ cho người dùng XFree86 mang đến cho người dùngnhữ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 Windowcũng hỗ trợ khả năng đa tiến trình của UNIX/Linux Mỗi cửa sổ do X Windowhiể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, takhô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ớinhữ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áctrạ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áthuy tính liên tác (interoperability), vốn là nền tảng của các hệ mở
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
Trang 171.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 Độcgiả 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ệnhquan 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ôngtin nhị phân, ví dụ nội dung của một đơn thể chương trình khả thi hoặc mộtchuỗi các con số thể hiện dưới dạng nhị phân v.v
% file a.out<RETURN>
linked executableUNIX 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ảituân theo các quy ước chung như sau:
Trang 181 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
2- Tuỳ chọn "-i" của lệnh mv
% mv –i old_name new_nameNế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ôngthì gõ một ký tự khác
Trang 193- Tuỳ chọn "-" của lệnh mv
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ên3Nhữ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ủamộ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ácchừ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ệpNế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:
Trang 20% cmp tệp1 tệp2
tệp1 tệp2 differ: char 11, line 2
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ả
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:
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
Trang 21-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.
-Các ký tự = = = ở dòng đầu có nghĩa là 3 tệp khác nhau
% cat tệp1 tệp2 tệp3b) Tuỳ chọn "-n" trong UNIX BSD cho phép hiện thêm số thứ tự của các dòng
dụ sau hiện tuần tự 6 dòng đầu của mỗi tệp:
% head –6 tệpp tệpq tệplc) Lệnh head, không có tuỳ chọn, áp dụng cho 1 tệp, sẽ hiển thị 10 dòng đầutiên của tệp đó:
% head tệp1
Trang 22d) Lệnh head, không có tuỳ chọn, áp dụng cho nhiều tệp, sẽ hiện tuần tự 10dòng đầu của mỗi tệp nhưng không ghép chúng như lệnh cat:
Trang 23f) Hiển thị kể từ dòng có chứa chuỗi ký tự "CHAIN" của tệp_long:
Trang 24a 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ệp3Lệ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ệncho 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
Trang 25dị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ỗngthì ta nhận được thông báo sau:
No match.
Nói chung siêu ký tự là những ký tự đặc biệt có một ý nghĩa riêng nào đó choshell và chỉ cho shell Nhưng có những ký tự khác không thuộc loại sinh têntệp, ví dụ các dấu chỉnh hướng như > và < Dưới UNIX còn có những ký tự đặcbiệ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ụ:
% cat fibh fich filh
5- Siêu ký tự dấu "!"
Trang 26Siê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]htương đương với:
% rm fiAh fich fioh
c Liên kết các siêu ký tự
Ta có thể liên kết các siêu ký tự trong cùng một biểu thức dòng lệnh, ví dụ tamuốn hiện lên màn hình những tệp có tên như mtệp.000, ntệp.x12, ytệp.doc,v.v (nếu những tệp đó tồn tại trong thư mục hiện hành):
% cat ?tệp.[M–Z]*
Hoặc nếu ta muốn xoá mọi tệp có tên kiểu như #tên_tệp# và tên_tệp~ thì gõ:
% rm [#] * [#] *[~]
d Trung hoà các siêu ký tự
Trung hoà nghĩa là làm cho shell không phải hiểu các ý nghĩa đặc biệt nói trêncủa các siêu ký tự nữa, bằng dấu chéo ngược và dấu nháy đơn
1- Bằng ký tự dấu chéo ngược
Ví dụ có thể tạo ra một tệp có tên "tệp*":
% cat > tệp\*
Không nên tạo ra một cái tên dễ nhầm như thế, vậy ta có thể xoá nó luôn:
% rm tệp\*
2- Bằng ký tự dấu nháy đơn
Có thể trung hoà các siêu ký tự trong tên tệp, 2 ví dụ trên tương đương với:
1.3.5 Quản trị luồng dữ liệu
a Các vào/ra chuẩn của UNIX
UNIX cũng như nhiều hệ điều hành khác có 3 kênh vào/ra chuẩn ở terminal(/dev/tty) đó là nhập chuẩn từ bàn phím, còn xuất chuẩn và lỗi chuẩn thì đưa ramàn hình Những kênh này là nơi các luồng dữ liệu của một chương trình đangthi hành (ví dụ: shell) sẽ tự động vào/ra khi được coi như mặc định
Trang 27Xuất chuẩn 1 stdout Màn hình /dev/tty
b Các luồng dữ liệu của shell
Shell khi cần thiết sẽ phải thông báo lỗi và hiển thị nó lên màn hình, như trong
ví dụ sau nếu tệp kiki không tồn tại:
% cat kiki kiki: No such file or directoryChú ý:
Tệp nhập chuẩn được ký hiệu là dấu gạch nối "-", ví dụ:
% cat – Sau lệnh này ta gõ vào các dữ liệu từ bàn phím và kết thúc cũng bằng ký tự điều khiển:
^D
c Chỉnh hướng các luồng dữ liệu
Nếu không muốn dùng những tệp vào/ra chuẩn, ta có thể theo ý mình chỉnhhướng các luồng dữ liệu vào/ra với những tệp khác
1- Chỉnh hướng ra tệp mới
Ta sử dụng siêu ký tự ">" để tạo ra một tệp mới, ví dụ lệnh sau sẽ ghi danhsách các tệp trong thư mục hiện hành vào tệp1:
% ls > tệp1
Trang 28Nếu tệp1 đã có sẵn thì nó sẽ bị mất nội dung cũ Chỉnh hướng như vậy dễ córủi ro nên C shell cho phép lập một biến để bảo vệ như sau:
% set noclobber
Ví dụ sau tạo ra một tệp mới, có cùng nội dung như prog.c :
% cat prog.c > tệp_2ngoài quyền truy cập được thừa kế khác nhau trên tệp mới, lệnh sau cũng tươngđương như trên:
% cp prog.c tệp_2Lệnh sau sao đơn thể khả thi a.out vào một tệp đĩa result:
% ls > /dev/lpDưới UNIX ta có thể chỉnh hướng ra /dev/null để huỷ dữ liệu như ném chúngvào một cái giếng vô đáy:
% cat < /dev/tty > tệp2
% cat > tệp2
5- Chỉnh hướng thông báo lỗi
Trang 29+Trong Bourne shell:
Ta gõ " 2> " để tạo ra một tệp mới hoặc ghi thông báo lỗi lên một tệp cũ cùng tên (2 là kênh lỗi chuẩn):
% rm tệp 2> tệp_error
Ta gõ " 2>> " để tạo ra một tệp mới hoặc ghi thông báo lỗi vào cuối một tệp cũ cùng tên:
% cat tệp_ strange 2>> tệp_oldGhi chú:
Trong Bourne shell < và << tức là 0< và 0<<, còn > và >> tức là 1> và 1>>.
+Trong C shell:
Trong C shell không có ký hiệu riêng để chỉnh hướng báo lỗi, chỉ có >& và
>>& để chỉnh hướng nó cùng với luồng dữ liệu thông thường, ví dụ:
% rm tệp_strange >& tệp_errorNếu muốn tách thông báo lỗi ra khỏi luồng dữ liệu thông thường ta phải dùngcác dấu ngoặc đơn, ví dụ:
% (cat tệp_strange > tệp_data) >& tệp_errorTrong trường hợp sau, nếu "tệp1" tồn tại thì "tệp_data" sẽ nhận nội dung của
nó, nếu "tệp1" không tồn tại thì "tệp_data" sẽ nhận thông báo lỗi về lý do đó:
% (cat tệp >> tệp_ data) >>& tệp_error
d Các ống nối
Các ống nối (pipe) là một kỹ thuật shell dùng để nối các luồng dữ liệu của một
số tiến trình (tức một số chương trình đang tiến hành)
Giả sử luồng dữ liệu ra của lệnh ls lớn hơn một trang màn hình và ta muốnquản lý chúng (hiển thị từng đoạn) bằng more hay pg Trực quan thì phải dùngtệp_annex để làm việc trên trong 2 bước:
% ls > tệp_annex
% more tệp_annexNhưng ta có thể gộp thành một bước với pipe, hiển thị bằng siêu ký tự "|":
% ls | moreTất nhiên có thể liên lạc nhiều tiến trình với nhau bằng các pipe, ví dụ:
command_1 | command_2 | command_3Trong đó command_1 phải có đầu ra, command_2 là bộ lọc và command_3phải có đầu vào
Gọi là ống nối vì mỗi pipe nối hai luồng dữ liệu của 2 lệnh liền kề qua một ốngtrung gian, thể hiện bằng bộ nhớ đệm BUFER; command_j bắt đầu chạy khiBUFFER vừa đầy, dù rằng command_i chưa kết thúc, cách làm việc này gọi làkhông đồng bộ:
command_i ==> BUFER ==> command_j
1.3.6 Nội dung và kích thước tệp bình thường
a Đếm số dòng, từ và ký tự
+Lệnh wc
Trang 30Lệnh sẽ đếm và hiển thị số dòng, số từ và số ký tự (kể cả ký tự điều khiển) củamột tệp, nếu chỉ đếm một thứ thì dùng tuỳ chọn -l, -w, hoặc -c:
pack: tệp2: no saving – file unchangedNén tệp nhị phân thường ít khi bị báo lỗi:
% pack a.out pack: a.out: 82.4% CompressionTệp nén này không khả thi, nếu ta cho chạy nó:
% a.out.zLệnh sẽ gửi thông báo sau:
a.out.z: Exec định dạng error
2- Lệnh unpack
Lệnh sau sẽ giải nén cho tệp a.out.z để nhận lại được tệp khả thi a.out:
% unpack a.out.z unpack: a.out: unpacked
% split tệp
Trang 31tự ở chuỗi_2, kết quả hiện ra màn hình:
% tr chuỗi_1 chuỗi_2 <RETURN>
Ví dụ:
% tr abcd xyztMỗi dữ liệu gõ vào nếu là một trong 4 ký tự a, b, c, d sẽ được thay bằng ký tựtương ứng vị trí trong chuỗi x, y, z, t
lx zrxvxtte
2- Biểu thức trong lệnh tr
Mỗi chuỗi ký tự "chuỗi_1" và "chuỗi_2" sẽ được thể hiện bằng:
-một chuỗi ký tự ASCII bất kỳ, nếu có ký tự đặc biệt thì phải cho vào cặp dấu nháy đơn, ví dụ:
tr ‘$%^&’ uiol -một khoảng ký tự hiển thị tuỳ theo cách riêng của mỗi dòng UNIX:
i-q cho UNIX BSD
[i-q] cho UNIX System V
Ví dụ trong UNIX BSD:
% tr ‘a–z’ ‘A–Z’ < tệp > tệp_hoa
Ví dụ trong UNIX System V:
% tr ‘[a–z]’ ‘[A–Z]’ < tệp > tệp_hoa
3- Các tuỳ chọn của lệnh tr
–d Xoá những dữ liệu gõ vào và giống các ký tự thuộc chuỗi_1
–s Nếu trong dữ liệu ra có 1 chuỗi ký tự giống nhau và tương ứng với 1 ký tự của chuỗi_2 thì chúng sẽ bị gộp làm 1 ký tự ở dữ liệu ra.
Khi dùng tuỳ chọn -d ta thấy chuỗi_2 không can thiệp gì, nếu ta muốn sao tệp1 vào tệp2 nhưng bỏ hết dấu phảy thì phải gõ:
% tr –d ‘,’ > tệp2 < tệp1
4- Nếu hai chuỗi không dài bằng nhau
Nếu "chuỗi_1" và "chuỗi_2" không dài bằng nhau thì những ký tự thừa ra sẽkhông tham dự vào việc chuyển dịch
Trang 32b Lệnh fgrep
1- Dạng thứ nhất của fgrep
Hiển thị mọi dòng của tệp có tên "tệp" nếu chúng chứa "chuỗi":
% fgrep chuỗi tệp1
2- Dạng thứ hai của fgrep
Có thể có trong đối số 0, 1 hoặc nhiều tệp, nếu không có tệp thì là:
% fgrep chuỗi
3- Dạng thứ ba của fgrep
Chỉnh hướng ra đến một tệp:
% fgrep chuỗi tệp > tệp_output
Ví dụ sau thử xem thiết bị ngoại vi dvd có phải được khai báo là một tệp đặcbiệt hay không:
% ls /dev | fgrep dvd dvdrom
dvdramVậy dvd đúng là một tệp đặc biệt
Ví dụ tiếp tìm xem có máy in nào được nối hay không:
% ls /dev | fgrep lp
Ta không nhận được thông báo gì, vậy thì không có lp nào
4- Về "chuỗi" trong lệnh fgrep
"Chuỗi" chứa những ký tự ASCII khả hiện, nếu có các ký tự đặc biệt thì cả
"chuỗi" phải được đặt trong một cặp dấu nháy đơn hoặc kép:
% fgrep ‘^rsT$’ tệp > tệp_output
4- Các tuỳ chọn của fgrep
- n các dòng kết quả sẽ được đánh số theo tệp gốc:
% fgrep –n chain tệp > tệp_output
-v kết quả là những dòng không chứa "chuỗi"
-i không phân biệt chữ hoa với chữ thường
-c chỉ hiển thị số lượng dòng kết quả
-f "chuỗi" được đặt trong một tệp:
% fgrep –f tệp_chain tệp_data
Ví dụ sau thử tìm xem lan_anh có đang làm việc không:
% who | fgrep lan_anh
c Lệnh grep
1- Dạng tổng quát của grep
Trang 33% grep chuỗi tệp_input > tệp_outputLệnh grep hoạt động như fgrep, ngoài việc "chuỗi" phải là loại biểu thức hợpquy (regular) và mọi tuỳ chọn của fgrep đều áp dụng cho grep, trừ -f.
2- Biểu thức regular của grep
Biểu thức hợp quy là một chuỗi ký tự bao gồm cả các ký tự đặc biệt và được xử
lý theo cách riêng của lệnh grep
Lưu ý rằng lệnh tự xử lý các ký tự đặc biệt trong biểu thức hợp quy chứ khôngnhờ shell như trong trường hợp có các siêu ký tự Trong UNIX có nhiều biểuthức hợp quy khá giống nhau và được thích nghi với một lệnh hoặc một tiện íchriêng, ví dụ với các trình soạn thảo ed, ex, sed và lệnh egrep
3- Các ký tự đặc biệt đối với grep
Các ký tự đặc biệt đối với grep có nghĩa khác các siêu ký tự và chủ yếu chúngbao gồm những dấu sau:
^: dấu mũ không phải là phím điều khiển <Ctrl> như trong ^D, nếu ở đầu một biểu thức regular thì những ký tự đi sau ^ sẽ coi như ở đầu dòng của "tệp":
% grep ‘^in ra’ tệp > tệp_output
ví dụ trên sẽ hiển thị những dòng có chuỗi ký tự "in ra" ở đầu dòng.
$: nếu ở cuối một biểu thức regular thì những ký tự đi trước $ sẽ coi như ở cuối dòng:
% grep ‘end$’ tệp
ví dụ trên sẽ hiển thị những dòng kết thúc bằng chuỗi ký tự "end".
*: dấu sao thể hiện một chuỗi n ký tự (n là 0 hoặc nguyên dương) giống y ký tự đi trước *:
% grep ‘ II*T’ tệp
ví dụ trên sẽ hiển thị những dòng chứa các chuỗi ký tự toàn I rồi đến T.
.: dấu chấm thể hiện một ký tự ASCII bất kỳ, trừ <RETURN>:
% grep ‘ *’ tệp
ví dụ trên sẽ hiển thị mọi dòng của "tệp", kể cả dòng trống.
[ ]: thể hiện một ký tự ASCII trong cặp ngoặc vuông, nhưng cần đặt giữa cặp dấu nháy như: [^xyzt]
-: dấu trừ giữa hai ký tự ASCII bên trong cặp ngoặc vuông, ví dụ [b-y], thể hiện một ký tự có trong khoảng đó, nhưng cũng cần đặt giữa cặp dấu nháy như '[b-y]'.
\: dấu chéo ngược sẽ bỏ ý nghĩa đặc biệt của ký tự đi sau nó và trả lại ý nghĩa gốc.
Lưu ý rằng một biểu thức như [^xyzt] thể hiện một ký tự không phải là x, y, z, t
1- Dạng tổng quát của egrep
Dạng tổng quát của egrep cũng giống như của các lệnh fgrep và grep:
% egrep chuỗi tệp > tệp_output
Trang 342- Biểu thức regular của egrep
Biểu thức regular của egrep cũng giống như của grep với một chút bổ sung:
+: dấu cộng thể hiện một chuỗi n ký tự (n là nguyên dương) giống y ký tự đi trước nó.
?: dấu hỏi thể hiện 0 hoặc 1 lần xuất hiện của ký tự trước đó.
a | b: a hoặc b sẽ được chấp nhận để tìm kiếm.
3- Các tuỳ chọn của egrep
Các tuỳ chọn của egrep cũng giống như của fgrep, kể cả -f vốn không đượcgrep chấp nhận
4- Bài tập
% egrep ‘ [A–Za–z ] +’ file1
% egrep ‘ C | Peterbourg’ file1
1.3.8 Hiển thị tệp dưới các dạng khác nhau
Lệnh od (octal dump) dùng để hiển thị một tệp dưới nhiều dạng khác nhau theotuỳ chọn
a Hiển thị tệp văn bản
1- Tuỳ chọn -c
Lệnh od với tuỳ chọn -c sẽ hiển thị một tệp văn bản dưới dạng ASCII:
% od –c tệp_textTrong đó các ký tự điều khiển ASCII sẽ hiển thị theo quy ước riêng như củangôn ngữ C, sau đây là bảng tên của chúng theo C và theo ASCII:
% od –cb tệp
b Hiển thị tệp nhị phân
1- Tuỳ chọn -d
Trang 35Lệnh od với tuỳ chọn -d sẽ hiển thị mỗi từ máy (machine word) của một tệp nhịphân dưới dạng thập phân.
1.3.9 Các quyền truy cập tệp bình thường
a Khái niệm quyền truy cập
1- Quyền truy cập tổng quát
Dưới UNIX có 3 loại quyền truy cập một tệp bình thường, đó là:
2 Quyền truy cập riêng
Ngoài 3 quyền truy cập tổng quát rwx nói trên, cả hai dòng UNIX BSD vàSystem V còn có những quyền truy cập riêng ở các chế độ s, S và t
Các chế độ "s" và "S" (supervision) cho phép truy cập một cách có kiểm soátvào những tệp vốn được bảo vệ (ví dụ /etc/passwd)
Chế độ "t" (terminate but stay) cho phép một chương trình (nhất là các tiện ích,
ví dụ một trình soạn thảo văn bản) được ở lại trong bộ nhớ hoặc vùng hoánchuyển (swap) ngay cả sau khi thực hiện xong
Trang 36b Hưởng các quyền truy cập
UNIX phân biệt những người sử dụng nó thành hai lớp người được hưởng cácquyền truy cập khác nhau đối với mỗi tệp tồn tại trong hệ thống:
- người sử dụng tối cao (superuser),
- người sử dụng bình thường (user)
1- Người sử dụng tối cao
Superuser được hưởng mọi thứ quyền truy cập đối với mỗi tệp đang tồn tại, dù
là của mình hay của những người sử dụng bình thường khác Superuser có thểbất cứ lúc nào đọc, ghi, xoá mọi tệp của hệ thống và cho thi hành mọi đơn thểkhả thi trong đó
2- Người sử dụng bình thường
Những user bình thường bao gồm 3 loại khác nhau:
+Chủ sở hữu của tệp (hay chủ tệp): chính là người tạo ra tệp đó (cần nói ngay
vì dưới đây ta sẽ thấy rằng có thể thay đổi tên của chủ tệp ngay sau khi tạo ratệp) Người tạo ra tệp tức:
-(nói chung) là người đã mở phiên làm việc với tên đăng nhập và mật khẩu cótrong trương khoản,
-(nói riêng) là người đã lấy quyền điều khiển bằng lệnh "su"
+Các thành viên cùng nhóm với chủ tệp (hay user cùng nhóm): nếu đã có khaibáo về một nhóm user nhất định thì những user cùng nhóm này sẽ có nhữngquyền truy cập riêng của nhóm đối với mỗi tệp (có thể khác những quyền củachủ tệp đó)
+Những người sử dụng khác (user khác): là những user có đăng ký trong tệp/etc/passwd nhưng khác chủ tệp, khác những user cùng nhóm và khácsuperuser
c Hiển thị các quyền truy cập
+Ta chỉ việc dùng lệnh ls với tuỳ chọn -l để hiển thị các quyền truy cập đối vớimọi tệp của thư mục hiện hành:
% ls –l<RETURN>
Ta sẽ nhận được nhiều thông tin hơn thế, ví dụ:
total 3
-rwxrwxr–x 1 lan_anh 23456 May 22 23:01 a.out
-rwxr r 2 lan_anh 22909 Apr 20 15:00 b.exe
Trang 37cùng nhóm và cho những user khác Mỗi loại quyền truy cập được thể hiện bằng một trong ba chữ cái, bao gồm: r (read, quyền đọc), w (write, quyền ghi) và x (execute, quyền thi hành), viết theo thứ tự rwx
kể từ trường thứ hai Nếu không có quyền nào thì thay chữ cái ấy bằng dấu gạch nối.
Trong thí dụ trên, các ký tự thể hiện quyền hạn ở dòng thứ ba là -rwxr r Như vậy có nghĩa rằng b.exe là tệp bình thường, chủ tệp có quyền đọc, ghi và thi hành nó, các user cùng nhóm và mọi user khác có quyền đọc, nhưng không được ghi và thi hành nó
Trang 381.4 Các lệnh và chương trình
Mục này sẽ giới thiệu các khái niệm cơ bản liên quan đến các lệnh và chươngtrình trong UNIX Cần nắm vững thực chất các lệnh chỉ là những trường hợpđặc biệt của chương trình và bản thân chương trình ở đây có ý nghĩa rất rộng,bao gồm từ chương trình hệ thống cho đến chương trình của người sử dụng.Trong UNIX một lệnh là:
-một tệp nhị phân khả thi (ví dụ được biên dịch từ một chương trình viết bằngngôn ngữ C); hoặc
-một tệp văn bản viết theo cú pháp của shell
Lệnh ngoại trú là một tệp khả thi có thể tìm ra vị trí bằng lệnh find Shell phảitạo ra một tiến trình con để xử lý nó
Lệnh nội trú (shell buil-in) không tồn tại như một tệp độc lập và do vậy khôngthể tìm ra vị trí bằng lệnh find Nó nằm sẵn ngay trong shell và coi như từ khoácủa shell, không cần phải tạo ra một tiến trình con để xử lý nó
Muốn biết một lệnh xxx là kiểu gì, ta gõ lệnh như sau:
Ta hãy kiểm tra cú pháp của một lệnh theo các quy tắc của Shell
Một lệnh được viết dưới dạng đơn giản nhất bao gồm một tên lệnh tiếp sau dấunhắc của Shell Ví dụ:
% cd
Giữa dấu nhắc và tên lệnh có thể có khoảng trống bởi gõ một hay nhiều phím
<SPACE> hoặc <TAB> Ví dụ:
% pwd
Tiếp theo tên lệnh, ta có thể điền các đối số (argument) như: các tuỳ chọn, têntệp, chuỗi ký tự v.v nhưng giữa chúng phải có khoảng trống
Giữa một dấu chỉnh hướng và một đối số thì không có khoảng trống
Một lệnh có thể được viết trên nhiều dòng với điều kiện đặt dấu \ trước khi bấmphím xuống dòng <Enter> hoặc <RETURN> Ví dụ:
% rm tệp1 tệp2 \
tệp3
Trang 39Thực ra dấu “\” chỉ có nhiệm vụ che ký tự <RETURN> đi sau nó Chính xáchơn, tổ hợp bao gồm dấu “\” và <RETURN> sẽ được thay thế bằng ký tự
$ cat tệp #lệnh này chỉ là của Bourne Shell
% (cat tệp1; cat tệp2; cat tệp3) > kết quả
sẽ tương đương với 3 lệnh sau:
% cat tệp1 > kết quả
% cat tệp2 >> kết quả
% cat tệp3 >> kết quả
b Cách Shell diễn dịch một dòng lệnh
Shell diễn dịch theo những quy tắc chính xác và theo một thứ tự xác định sẵn
1- Đọc một đầu vào chuẩn
Shell sẽ đọc đầu vào từ tệp chuẩn stdin (bàn phím) cho đến khi gặp một ký tựkết thúc dòng lệnh, tức là một trong ba ký tự sau:
-một ký tự <new line> (không bị che bởi “\”)
-một ký tự “;”
-một ký tự “&”
2- Xem xét việc chỉnh hướng
Shell sẽ chỉnh hướng (redirection) nếu gặp các dấu “>”, hoặc “<”, tức là sẽ thaythế các tệp đầu vào chuẩn stdin hoặc tệp đầu ra chuẩn stdout bằng các tệp đượcquy định tuỳ theo những dấu đó
3- Thay thế các biến
Khi xuất hiện một tên biến sau ký tự $, Shell sẽ thay thế biến đó bằng giá trịcủa nó Ví dụ:
Trang 40Trong Shell C, ta thiết lập (tức định nghĩa) và khởi tạo một biến có tên var bằnglệnh:
% set var = thứ năm
Trong Bourne Shell, ta sẽ có cùng kết quả như trên với lệnh:
% var=thứ năm # nhớ viết liền các chữ với dấu "="
Ta có thể sử dụng giá trị này của biến var trong lệnh sau:
5- Phân biệt các đối số của lệnh
Shell sẽ phân biệt các đối số bằng các khoảng trống hoặc các ký tự <tab> chengiữa các đối số
Chỉ riêng trong Bourne Shell, một biến được xác định trước tên là IFS sẽ thểhiện tất cả các dấu phân cách có thể được chấp nhận
6- Thứ tự xử lý
Shell sẽ xử lý trước các ký tự đặc biệt của lệnh, sau đó mới sinh ra các tên tệp
c Diễn dịch các ký tự đặc biệt
1- Các biểu thức thông thường
Đó là trong trường hợp riêng của các lệnh grep, egrep, sed, các ký tự đặc biệt
sẽ trực tiếp liên quan đến chính các lệnh này
Đối với các lệnh đó, các ký tự đặc biệt của các biểu thức thông thường sẽ đượcdiễn dịch theo những quy tắc đã đưa ra ở mục “Xử lý các tệp”