Các Lược Giảng Chuyên Sâu về Sử Dụng Văn Lệnh BASH trong Linux

Vietsciences-Làng Đậu   Võ Quang Nhân    23/09/2006

Những bài cùng tác giả

 

Loạt bài "Các Lược Giảng Chuyên Sâu về Sử Dụng Văn Lệnh BASH trong Linux" của tác giả Làng Đậu giữ bản quyền 2006. Người đọc chỉ được sử dụng cho mụch đích học tập hay giảng dạy cho cá nhân. Cấm mọi hình thức sao chép, đăng lại, hay in lại nhằm mục đích mua bán hay trục lợi mà không có sự cho phép chính thức của tác giả.  Mọi thông tin về việc phổ biến rộng rãi có tính quảng bá tài liệu này cho mục đích giáo dục xin liên lạc về vo_quang_nhan@yahoo.com

Bài 0

1. Dẫn Nhập:

Các bạn thân mến,


Unix/Linux là một  loại hệ điều hành đã có mặt từ rất sớm trong lịch sử của Khoa học Máy tính. Trong thời gian đầu của sự phát triển thì chưa có các dạng giao diện đồ hoạ phong phú cũng như thiết bị duy nhất để ra lệnh cho máy là bàn phím. Và do đó, hệ thống lệnh của hệ điều hành lọai này phát triển sâu và rộng khắp.  Việc ra lệnh trực tiếp đi xa hơn một bước là chúng được chứa dưới dạng một tập tin và như vậy hình thành các hệ thống có tên gọi là script hay "văn lệnh". Khi mà giao diện đồ hoạ đã bắt đầu phát triển có mặt thêm các thiết bị nhập dữ liệu mới hơn (như là chuột và máy quét) thì các Linux Guru (Chữ Guru là chữ du nhập từ tiếng Tây Tạng dùng để chỉ những người có khả năng và hiểu biết sâu sắc) bằng thói quen và cảm tình riêng với lối ra lệnh kiểu này, vẫn  tiếp tục phát triển các thế hệ mệnh lệnh có thể gọi trực tiếp từ một  đầu cuối giao diện (console). Xa hơn nưã, các nhà phát triển Linux/UNIX đã biến các lệnh hệ thống trở thành công cụ lập trình rất nhanh, nhẹ, và mạnh mẽ bằng cách sáng tạo ra các trình thông dịch có khả năng không thua kém với các trình biên dịch. Dó đó, ngày nay hầu như mọi thao tác từ việc khám đọc địa chỉ PCI của  các thiết bị  cho đến việc gửi thư điện tử hay các công việc quản lý máy vận hành theo thời khoá biểu đều có thể cài đặt hay cấu hình hoàn toàn không cần đến các giao diện đồ hoạ. Điều cần thiết là người dùng phải có kiến thức hiểu biết về các lệnh hệ thống cùng như cách thành lập và thi hành các văn lệnh

Vì tính phức tạp của các loại văn lệnh trong hệ thống Linux, chúng tôi chỉ ghi lại những điều chung nhất cũng như các kĩ năng quan trọng cho việc tận dụng khả năng của máy và chỉ đề cập đến những đặc tính cá biệt cho từng loại văn lệnh khi cần thiết.

Bài viết đươc phân bổ theo chức năng BASH, mỗi bài có thể cần đến từ 4-6 tiết kể cả thực hành để hiểu và nắm bắt được nội dung.

 

1.1 Yêu cầu từ phiá người đọc

 

Điều kiện tiên quyết để hiểu sâu tài liệu này là người đọc hiểu biết đầy đủ ít nhất một ngôn ngữ lập trình cơ bản.  Trong nhiều trường hợp ngôn ngữ C/C++ sẽ được  lấy ra để làm mốc so sánh.  Bài giảng này cũng đòi hỏi người đọc có một số hiểu biết sơ đẳng về sử dụng hệ điều hành Linux, và biết được cách sử dụng các đầu cuối (terminal) để viết mã cho Linux - Tốt nhất là đã được học qua một khoá huấn luyện ngắn hạn về quản lý hệ điều hành Linux.  Trong loạt bài này, đôi khi một số khái niệm hay thuật ngữ sẽ được đưa ra để minh định lại nội hàm của khái niệm đó nhằm chỉ rõ nghiã mà các bài viết này dùng và  nhằm tránh cho người đọc ngộ nhận hay nhầm lẫn với các khái niệm khác có thể có cùng  tên. Ngoài ra, những thuật ngữ cơ bản về tin học cũng cần người đọc biết sẵn.  Trong nhiều trường hợp khó khăn về thuật ngữ thì bài viết sẽ đưa vào từ gốc Anh ngữ trong lần đầu sử dụng và chúng được đặt trong ngoặc đơn cho người đọc tiện tra cứu thêm.  Các thí dụ có thể được thử lại bằng cách gõ thẳng thành một dòng lệnh hay viết chúng vào trong các tập tin và chạy bằng cách dùng câu lệnh bash <tên_tập_tin>  (Ở đây cần thay thế <tên_tập_tin> bởi tên thật của tập tin được thi hành)

Ngoài ra, để tiện cho người đọc tra cứu ở phần cuối của loạt bài sẽ có bảng từ vựng tham chiếu Anh-Việt trình bày tổng hợp các thuật ngữ Anh-Việt có dùng trong bài

Các chú thích riêng cho từng bài sẽ được đánh dấu bởi các kí tự (character)  và được ghi ra ở phần bị chú cuối mỗi bài (*)

Muốn cho việc hấp thu kiến thức có hiệu quả thì tất yếu là người đọc phải thực hiện việc viết mã nguồn, sửa lỗi và chạy chúng.  Tuỳ theo khả năng, kinh nghiệm riêng người đọc có thể có tiến bộ nhanh hay chậm. Để tránh các rủi ro khi thực hành, một phương cách tốt là người học chỉ nên thi hành các mã thử nghiệm trên một thư mục riêng và giảm tối đa việc truy cập các lệnh có tính cách phá hủy ra ngoài thư mục thử nghiệm.  Trong chừng mực nào đó, cần phải đi ra khỏi chỗ thử, thì phải rất cẩn thận vì mọi mệnh lệnh đều có thể gây hiệu ứng phụ của nó -- Một phương thức để bảo đảm phần nào an toàn cho  việc làm này là thực thi các thủ tục làm bản sao dự phòng (backup) của máy.

Ngược lại, nhiều mệnh lệnh BASH đòi hỏi người dùng phải có quyền truy cập của 'root' (tức là admin tối cao) và như vậy càng phải đắn đo hơn trước khi chạy các lệnh này. Dĩ nhiên,  một cách tuyệt đối an toàn là người dùng có riêng một máy được cài đặt Linux, và tiến hành tất cả các thử nghiệm trên đó mà không sợ hư hại.  Mỗi khi có trục trặc không sửa được thì chỉ việc ..."xoá bàn cờ chơi lại từ đầu" . Nghiã là, cài đặt mới lại toàn bộ hệ thống Linux

Vì BASH là một hệ thống trình dịch khá phức tạp nên người đọc cần có thêm các tài liệu tra cứu về cú pháp các câu lệnh. Một tài liệu trực tuyến khá đầy đủ là "Bash Reference Manual" (có ghi trong phần tài liệu tham khảo).  Tuy nhiên, trong hầu hết các trường hợp tra cứu lệnh hệ thống trong LINUX thì có thể thử gõ lệnh:  man <TÊN_LỆNH>  (hay info <TÊN_LỆNH>) trực tiếp lên cửa sổ dòng lệnh

 

1.2 Khái niệm về văn lệnh BASH

1.2.1 Văn Lệnh:

Văn lệnh (script) là một chương trình máy tính thường được lưu giữ trong dạng tập tin văn bản thông thường (text file) trong đó có chứa các lệnh có thể thực hiện được từ một ứng dụng hay một tiện ích.  Các câu lệnh này phải được trình bày đúng theo quy tắc cú pháp yêu cầu và sẽ được thực thi theo thứ tự trình bày đó khi máy thi hành tập tin.

Như vậy, để một văn lệnh có thể thực thi thì đòi hỏi các điều kiện sau:

  • Trên máy có ứng dụng hay tiện ích "hiểu" được nội dung của văn lệnh

  • Bản thân nội dung của tập văn lệnh phải thoả mãn các cú pháp câu lệnh yêu cầu bởi ứng dụng hay tiện ích nêu trong điểm trên

  • Sự thực thi của các câu lệnh sẽ theo trật tự trình bày tuỳ theo người viết mã cho văn lệnh

Nhiều nơi đã dịch chữ "script" một cách không rõ nghĩa thành "kịch bản".  Trong các bài giảng, chúng tôi sẽ chỉ sử dụng từ văn lệnh hay script; nguời đọc có nhiệm vụ phải hiểu các từ đồng nghiã khác của nó.

Trong một hệ điều hành thường hỗ trợ bởi ít nhất một dạng văn lệnh thông qua một trình thông dịch. Thí dụ trong hệ thống Windows, thì có Windows Script Host sẽ hỗ trợ cho việc viết một văn lệnh đôi khi còn gọi là tập tin "batch" (*).

Trong Linux, khi nói đến script thì người ta thường nghĩ ngay đến các loại trình bao (shell) có khả năng đọc và thi hành trực tiếp các tập tin văn lệnh.  Trình bao là các trình thông dịch (interpreter) giữ nhiệm vụ đọc và thi hành các lệnh ghi trong tập tin văn lệnh. Mặt khác các hệ điều hành thường hỗ trợ một trình bao chuẩn để giữ vai trò mốt lớp vỏ ngoài  cung ứng một giao diện nhằm thực thi các chức năng và dịch vụ đươc yêu cầu trực tiếp từ người dùng.  Khi dùng với ý nghiã này thì shell có thể được dịch là "hệ vỏ".

 

1.2.2 BASH

BASH là một loại trình bao hay một trình thông dịch dùng cho các hệ điều hành có giấy phép GNU.  BASH là chữ viết tắc của cụm từ "Bourne-Again SHell", được sáng tạo bởi Stephen Bourne. (**)

Như vậy, một cách nôm na, văn lệnh BASH là các tập tin mã nguồn dùng để chạy được trong trình thông dịch BASH.  Bởi vì tính tương thích cao của BASH nên hầu như  mã nguồn nào viết trong "ngôn ngữ" của các loại trình bao Bourne, Korn, và C đều có thể chạy trong BASH (***)

Khác với nhiều loại văn lệnh như là DOS Batch, Visual Basic, HTML; các loại văn lệnh trong Linux, trong đó có BASH và các văn lệnh mà nó tương thích,  đều đặt nặng vấn đề viết hoa hay không.  Nghiã là, một biến tên "myVar" sẽ mặc định khác với biến có tên là "MyVar" hay "myvar".  Đồng thời, ngoại trừ các loại biến toàn cục và các cài đặt đặc biệt, các câu hệnh hỗ trợ về lập trình trong các loại văn lệnh Linux đều không viết hoa (Tuy vậy, các tập tin văn lệnh mà người lập trình tạo ra có thể dùng bất kì tên hợp lệ nào. Nghiã việc đặt tên cho các văn lệnh viết hoa hay không tùy thuộc vào người tạo ra nó.

 

1.3 Các loại văn lệnh cơ bản và vai trò của chúng trong Linux

Khác với Windows, Linux là hệ điều hành hỗ trợ mạnh mẽ cách viết chương trình dạng văn lệnh.

1.3.1 Đối với người dùng: 

Hiểu và sử dụng rành mạch văn lệnh người dùng có thể:

  • Tham gia viết mã phát triển một số phần mềm đơn giản cho Linux từ việc viết một văn lệnh đơn giản dạng "autorun" cho các CDROM trong Linux cho đến việc thay đổi các thao tác cho người quản lý (admin) hay viết các chương trình có ý nghiã riêng.

  • Hiểu và điều chỉnh được các phần cơ bản của văn lệnh khởi động (boot script)

  • Có thể tự tìm hiểu các đề án của Linux chẳng hạn như các đề án tự tạo các CDROM hay thanh USB tự khởi động được (bootable CD/ USB stick)

  • Làm nền tảng cơ bản để học và hiểu xa hơn về Linux như là việc tạo quản lí các gói rpm (-- viết tắt  từ chữ Redhat Package Manager), tạo các tập tin kiến tạo (Makefile) dùng trong việc thiết kế các bộ điều vận.

1.3.2 Đối với Hệ Điều Hành Linux: 

Văn lệnh giữ vai trò chủ chốt trong hầu hết các hoạt động của của hệ điều hành như là:

  • Chạy các văn lệnh khởi động

  • Cung ứng một bộ lệnh  hệ thống đầy đủ từ việc quản lý các tập tin, in ấn, email, nối mạng, xử lí văn bản cho đến việc đọc các cấu trúc thấp của máy tính như là tìm biết các PCI ID của các thiết bị. Tải (load) và dở bỏ (unload) các bộ điều vận (device driver), hay làm ra các tập tin kiến tạo (Makefile), các tập tin tài nguyên (resource file *rc) và các Daemon (****)

  •  Ngoài ra, hầu như tất cả các thao tác mà người dùng có thể gọi trong hệ thống giao diện đồ hoạ đều có thể gọi thẳng từ dạng lệnh hệ thống nên các thao tác này đều có thể được mã hoá và được điều khiển thi hành trưc tiếp dưới dạng một tập tin văn lệnnh

1.2.3 Các loại văn lệnh cơ bản trong Linux: 

Trong Linux có nhiêu loại văn lệnh có thể sử dụng nhưng quan trong nhất là BASH kế đến loại trinh dịch có tính năng mạnh được nhiều lập trinh viên yêu thích là Korn.  Những trình thông dịch lớn khác là TC và C.

1.3 Mụch đích của loạt bài

Các bài viết không ngoài mục dích truyền thụ lại các kĩ năng cơ bản cho người học và sử dụng Linux. Với kiến thức cơ bản này người đọc và hiểu có thể sử dụng cho công việc hàng ngày như thực tập viết các chương trình văn lệnh và có thể khởi sự phát triển các mã ban đầu cho Linux. Vì là lược giảng nên nội dung chỉ nhằm chỉ ra các sử dụng căn bản hay kiến thức cốt lõi quan trọng cho người đọc. Việc thấm sâu và sử dụng thành thực còn tùy theo sự kiên trì thực hành và căn cơ của từng người.

1.4 Cách Trình bày

Ngoại trừ bài 0 này, các bài khác đều bao gồm hai phần chính: Phần nội dung bài giảng đào sâu về mặt kiến thức, cú pháp, tính năng, và các thí dụ.  Phần thứ hai quan trọng không kém là phần phụ lục (Tên gọi "phụ" ở đây không còn nguyên nghiã như bản thân chữ này nữa -- hãy xem chữ này có vai trò tương tự như chữ phụ trong cụm "phụ nữ ngàynay" vậy :-) ) nhằm bổ sung kiến thức cơ bản về hệ thống kiến trúc, hoạt động, tính năng và các mệnh lệnh của Linux. Đối với các bạn đã quen với việc quản lý hệ thống Linux thì có thể chỉ cần lướt qua để ôn lại trong khi nếu là người mới thì tốt nhất là nên đọc hết các phần này. Việc đánh số thứ tự cho các chương cũng theo đó mà thay đổi. Ngoài ra, phần phụ lục sẽ được đánh số theo thứ tự riêng và luôn bắt đầu bằng chữ cái A

Việc trình bày theo dạng "bổ ngang" của các phụ lục nhằm đáp ứng theo trình tự tìm hiểu sâu dần kiến thức liên quan đến hệ điều hành Linux và có thể ảnh hưởng áp dụng trực tiếp vào hiểu biết  chính trong việc viết mã cho script. Các phụ lục này sẽ không cần thiết nếu người đọc đã sử dụng rành mạch các lệnh hệ thống của Linux cũng như hiểu rõ cấu trúc hoạt động của nó.

Những lưu ý quan trọng sẽ được tô màu để nhấn mạnh sự lưu ý của độc giả.  Ngược lại, các câu viết bông đùa không chứa nhiều kiến thức trọng tâm lại có thể có màu xám lợt hơn màu mực in thường.

Hệ thống sắp xếp  phân lớp theo thứ tự bằng cách đánh số. Các phân mục con sẽ được đánh số thứ tự và ngăn cách với số thứ tự của phân mục lớn hơn bởi dấu . (chấm)

Để giảm mức độ trừu tuợng cho người đọc, việc trình bày các cú pháp tổng quát sẽ hoàn toàn được thay thế bởi các thí dụ cụ thể.  Các thí dụ này đã được kiểm nghiệm trước khi đưa vào bài và viết bằng font courier New, nhưng dĩ nhiên, có thể khó tránh khỏi các lỗi typo.  Để có thể đọc cú pháp các lệnh BASH đề nghị người đọc tự tìm hiểu qua các tài liệu tra cứu hay dùng lệnh man

Ngoài ra, cần lưu ý các định danh (identifier) được viết trong ngoặc nhọn màu xám < > chỉ là các tên giả định để cho để hiểu khi thực hành cần được thay thế bởi các tên đúng tương ứng với tính chất của biểu thức đòi hỏi

1.5 Các tài liệu bổ sung

Đối với các bạn nào muốn đọc thêm các tài liệu để có kiến thức cơ bản về cách viết văn lệnh BASH cũng như là một số kiến thức về quản trị hệ thống Linux (và để hiểu rõ các mã thí dụ hay các câu lệnh (command/instruction) viết trong bài có thể tự xem thêm một số bài viết sau.)

Ngoài ra, trong Tài Liệu tham khảo ở cuối loạt bài cũng có các tài liệu nhưng đòi hỏi người đọc ở mức cao hơn.  Tuy nhiên, đối với các bạn đã biết ít nhiều về sử dụng mệnh lệnh trong Linux thì  không cần phải đọc qua các văn bản sơ bản trên.

Tra cứu về các mệnh lệnh của BASH có thể tìm thấy ở GNU.org:  "Bash Reference Manual"

1.6 Bài đọc thêm bằng Anh ngữ

http://www.talug.org/events/20030709/cmdline_history.html : lịch sử dòng lệnh

http://en.wikipedia.org/wiki/Stephen_Bourne :Tiểu sử Stephen Bourne

https://netfiles.uiuc.edu/rhasan/linux/ :Lịch sử Linux


Chú thích

(*) Chữ Batch đôi khi được dịch nghiã là "lô" nhưng nghiã chính xác hơn là "khối xử lý" hay "nhóm các quá trình"
(**) Xem thêm The History of the Shell  từ Trang nhà của RedHat
(***) Có một số trường hợp không tương thích mã giữa BASH và các trình bao khác đặc biệt là một vài tính năng mạnh về lập trình (như trường hợp dùng lệnh "print") có trong Korn nhưng không được hỗ trợ trong BASH
(****) Chữ daemon, được một số nơi dịch là "trình nền". Nó là các chương trình thường được viết bằng nhiều loại ngôn ngữ (mà tập tin khởi động của "trình nền" này là các văn lệnh với tên thường có kết thúc bằng kí tự "d" được lưu bên trong /et/c/init.d). Các chương trình này thường  được tải thường trực trong bộ nhớ và được gọi ra dùng khi có yêu cầu. Chúng tương đương voi các service  (dịch vụ) của hệ điều hành windows. Một điều khác là người dùng có thể gọi lệnh để hạ nó xuống khỏi bộ nhớ hay tải nó lên ( bằng cách gọi một trong các lệnh:
 <TÊN_DAEMON> stop, <TÊN_DAEMON> start, hay <TÊN_DAEMON> restart)

 

© http://vietsciences.free.fr  , http://vietsciences.org  và http://vietsciences2.free.fr  Làng Đậu Võ Quang  Nhân