Đôi nét về chương trình Shell trong Linux


Khi làm việc với Linux, chương trình thân thiết với bạn nhất là Shell. Bài viết này sẽ giới thiệu ngắn gọn về Shell: nó là gì, chức năng của nó, có bao nhiêu loại shell…

Shell là 1 chương trình cung cấp giao diện người dùng dưới dạng văn bản (text). Chức năng chính của Shell là đọc và thông dịch các lệnh được gõ vào trong màn hình console (chế độ hiển thị tất cả thông tin nhập xuất dưới dạng văn bản) hoặc cửa sổ terminal nằm trên Desktop của GUI (terminal giống như mở cửa sổ cmd trong Windows). Sau đó Shell thực thi lệnh và có thể đưa kết quả dạng văn bản tới đầu ra chuẩn – thường là màn hình.

Giao diện terminal

Giao diện console

Thuật ngữ Shell xuất phát từ nghĩa đen của nó: Shell là 1 lớp bên ngoài của hệ điều hành. Shell là giao diện giữa người dùng và thành phần Kernel bên trong của hệ điều hành.

Ngay khi user đăng nhập vào hệ thống, user đã sử dụng 1 Shell nào đó. Shell là phương thức cơ bản mà user có thể tương tác với hệ thống, và Shell giấu đi các chi tiết phức tạp bên dưới của hệ điều hành mà người dùng không thấy được.

Ví dụ, muốn xem nội dung của thư mục /home bạn đơn giản chỉ cần gõ ls /home trong cửa sổ dòng lệnh của Shell. Sau đó, Shell sẽ thực hiện tuần tự các thao tác sau:

phân tích cú pháp lệnh -> thông dịch yêu cầu của lệnh -> truyền thông điệp tới kernel -> nhận kết quả trả về kernel và hiển thị ra màn hình nội dung của thư mục /home cho bạn.

Các bước Shell thực thi diễn ra trong nháy mắt và hoàn toàn vô hình đối với người dùng!

Bạn có để ý là trước mỗi câu lệnh luôn có 1 chuỗi ký tự cố định không? Đó gọi là shell prompt (hay command prompt – dấu nhắc lệnh). Shell prompt là 1 ký tự hoặc 1 tập ký tự luôn đứng tại điểm bắt đầu của bất kỳ dòng lệnh nào, nó ám chỉ rằng Shell đã sẵn sàng nhận lệnh từ người dùng. Shell prompt thường kết thúc với ký tự $ cho người dùng thông thường và ký tự # cho tài khoản root.

Dung lượng của Shell khá nhỏ nhưng lại là chương trình đầy phức tạp và mạnh mẽ được sử dụng cho nhiều mục đích:

– Thực thi chương trình. Ví dụ, bạn gõ vào terminal của Ubuntu từ firefox, Shell sẽ khởi động trình duyệt Web Firefox cho bạn.

– Nhận lệnh, thực thi lệnh và trả về kết quả của lệnh.

– Chuyển tiếp (redirection): dữ liệu đầu ra của lệnh này sẽ là thông tin đầu vào cho lệnh kia. Ví dụ:

find . -name “rc.conf” -exec chmod o+r ‘{}’ \;

Lệnh này sẽ tìm trong thư mục hiện hành và các thư mục con của nó tất cả các file có tên rc.conf, sau đó các file này được gán quyền đọc cho nhóm Others

– Điều khiền môi trường người dùng, cho phép bạn chuyển đổi Shell, chỉnh sửa Shell Prompt.
– Hỗ trợ shell script thường dùng để lập trình cho việc tự động hóa thực hiện các tác vụ

.…

Trên các hệ thống sử dụng giao diện đồ họa (GUI), nhiều người dùng hiếm khi tương tác trực tiếp với Shell. Tuy nhiên, các GUI đơn thuần chỉ là front-ends cho Shell tức là GUI sẽ chịu trách nhiệm lấy dữ liệu người dùng đưa vào và xử lý chúng sao cho phần back-ends là Shell hiểu và sử dụng được. Shell lệnh thì thường mạnh mẽ, giàu tính năng và mềm dẻo hơn GUI, hầu hết người dùng chuyên nghiệp trên *nix đều ưa thích thực hiện các tác vụ hệ thống dùng Shell hơn GUI.


Có khá nhiều Shell được phát triển cho hệ điều hành *nix. Chúng có 1 số điểm khác biệt về câu lệnh, cú pháp, tùy chọn, chức năng nhưng vẫn mang nhiều đặc tính chung về cơ chế hoạt động. Mọi hệ thống *nix có ít nhất 1 Shell được tích hợp sẵn. Dưới đây là 1 số Shell phổ biến:

sh (the Bourne Shell) là Shell cho Unix đầu tiên và vẫn còn được sử dụng rộng rãi cho tới ngày nay. Sh được viết bởi Stephen Bourne tại Bell Labs vào năm 1974, sh thì đơn giản, dung lượng nhỏ, ít tính năng nhất so với các Shell ra đời sau này.

Sh thiếu hẳn các tính năng cần thiết như:

+ Tự động hoàn thành tên file, câu lệnh. Tức là, bạn chỉ cần gõ vào ký tự đầu của file, tên lệnh và nhấn phím Tab thì Shell đưa ra 1 số tên file, câu lệnh bắt đầu bằng ký tự đó.

+ Lưu lại các câu lệnh đã gõ vào bộ nhớ (history) và cho phép duyệt, chỉnh sửa hoặc sử dụng lại các câu lệnh này.

bash (Bourne-again shell) là Shell mặc định trên các bản phân phối Linux. Bash được cải tiến từ sh, nó hỗ trợ nhiều câu lệnh hơn. Bash vẫn xử lý tốt các lệnh mà sh hỗ trợ, nhưng ngược lại thì không phải lúc nào cũng đúng. Ngoài ra, bash rất trực quan và mềm dẻo, thích hợp cho cả newbie và người dùng chuyên nghiệp. Bash được viết bởi Brian Fox and Chet Ramey cho dự án GNU (mục đích của GNU là phát triển 1 hệ điều hành hoàn toàn miễn phí, toàn diện, hiệu năng cao và tương thích với Unix).

ash (the Almquist shell) là 1 bản sao của sh, viết bởi Kenneth Almquist vào năm 1989. Ash không có nhiều tính năng bổ sung như các Shell khác nhưng lại thích hợp cho các hệ thống có bộ nhớ nhỏ, đặc biệt là các hệ thống nhúng.

csh (the C shell) có cú pháp khá giống với ngôn ngữ C, nên thích hợp cho các lập trình viên. Csh được tạo bởi Bill Joy, ông chính là tác giả của trình soạn thảo văn bản vi nổi tiếng và sau này là đồng sáng lập Sun Microsystems.

…Và còn nhiều Shell khác như: tcsh, zsh…

–manthang

One comment

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s