Saturday, January 31, 2015

Tìm hiểu về các loại Shell .

Shell thực sự là một công cụ đầy sức mạnh, sự linh hoặt của dòng lệnh là điều mang lại sức mạnh này. Những giữa chúng có những điểm gì khác và tại sao mỗi người lại thích dùng những shell khác nhau.
Công việc của Shell là gì?
Như các geeks linux đã biết, Shell là trình thông dịch lệnh mà bất cứ nền tảng hiện hành nào cũng có, và đặc biệt đối với những người dùng Linux, chúng ta có thể thấy được sức mạnh của Shell qua ứng dụng Terminal. Giao tiếp với máy tính bằng dòng lệnh rất thú vị. Nhất là khi nó lại được coi là giao diện người dùng cao cấp nhất.
 Nhiều người ví von Shell như một chiếc áo gi-lê vậy, chiếc gi-lê đứng sau một chiếc com-lê hào nhoáng. Thực tế thì trình dòng lệnh trong bất cứ HĐH nào cũng có những thói quen khác nhau bởi vì mỗi HĐH biên dịch dòng lệnh theo một cách khác nhau. Và sự khác nhau này trở thành vấn đề cho người dùng giữa Linux, OS X và Windows. Trước đó, vấn đề này còn xảy ra ko chỉ giữa các nền tảng mà còn giữa các máy tính khác nhau.
Tại sao lại có nhiều Shell như vậy?
Tổ tiên nổi bật nhất của các Shell hiện hành là Bourne – thường dược gọi là “sh” – được đặt tên theo tác giả của nó là Stephen Bourne (một nhân viên của AT&T).
 Nó đã trở thành Shell mặc cho Unix vì nó hỗ trợ các tính năng như xử lý đa luồng, sử dụng biến, vòng lặp, kiểm tra với điều kiện, thay thế câu lệnh (command-substitution http://en.wikipedia.org/wiki/Command_substitution) … 
Tại thời điểm này, việc lập trình luôn đi kèm với các dòng lệnh, một việc hiện nay đã bị loãng đi nhiều do các công cụ lập trình được hỗ trợ giao diện trực quan hơn. Người dùng tại thời điểm đó cũng không cần phải tùy chỉnh nhiều các chức năng như alisases (bí danh – cụm viết tắt cho một câu lệnh dài), command competion (tự hoàn thành câu lệnh)…
Kế đến là C shell (‘csh’), được phát triển bởi Bill Joy tại UCB và nó đã thực sự khiến mọi thứ đảo lộn (tất nhiên là theo hướng tích cực). ‘csh’ được thêm vào các chức năng tương tác giúp người dùng có thể các nhân hóa và điều khiển hệ thống của họ như alisases, quản lý tác vụ, lược sử (nhớ các dòng lệnh bạn đã dùng).
 Nó mô phỏng lại ngôn ngữ lập trình (NNLT) C, một ý tưởng hay vì Unix được viết trên C. Điều này đồng nghĩa với việc những người dùng của Bourne phải học C để có thể nhập các dòng lệnh. Tuy nhiên, qua quá trình sử dụng, ‘csh’ cũng lộ ra hàng tấn bugs có thể gây hại đến người dùng. Đối với ngôn ngữ kịch bản (script), người dùng thường chọn Bourne vì nó xử lý lệnh không tương tác tốt hơn csh. Nhưng với C thì Bourne dường như mắc kẹt.
Qua quá trình sử dụng, cộng đồng người dùng tự debug cho C shell và đỉnh cao nhất của quá trình đó đã cho ra đời một shell khác gọi là ‘tcsh’. Tu nhiên, một vấn đề phát sinh đó là các distro dựa trên Unix đều dùng ‘csh’ làm mặc định, và khi các tính năng không phải tiêu chuẩn được thêm vào, nó thực sự trở thành một mớ hỗn độn, mất đi tính toàn vẹn của một Shell. 
Để khắc phục điều này, David Korn, một nhân viên AT&T đã phát triển một shell riêng với tên gọi ‘ksh’ với nền tảng dựa trên ‘csh’ và được thêm các tính năng mà cộng đồng người dùng đã tạo ra và đống gói trọn gói. Thật không may mắn với đa số nguwoif dùng, ‘ksh’ không hề miễn phí.
Một động thái khác nhằm thay thế C shell độc quyền, đó là POSIX (Portable Operating System Interface for Unix) tạm dịch là giao diện HĐH nhỏ gọn cho Unix. Nó đã tạo ra thành công 1 chuẩn biên dịch lệnh và thậm chí bắt chước được rất nhiều tính năng mà Korn Shell đã có. 
Đồng thời, dự án GNU được tiến hành để tạo ra 1 HĐH miễn phí tương thích Unix và họ tự tạo cho mình một Shell riêng – Bourne Again shell (bash) nhưng lần này, nó được lai tạp bởi sh, csh, ksh và kết quả như chúng ta đã thấy, một Shell đầy những ưu điểm và tính năng của cha mẹ nó (sh, csh, ksh) mang lại, và vấn rất phổ biến trong các distro hiện hành.
Kenneth Almquist cũng tạo ra 1 bản Bourne shell nhái  – ‘ash’ – mà trở thành shell mặc định cho BSD, một nhánh của Unix (tương tự Linux hay OS X). Tuy nhiên, vì sự nhỏ gọn của nó, nó nhanh chóng trở nên phổ biến trong các hệ thống máy tính nhúng sử dụng Linux (Linux embed system) và một ví dụ điển hình đó là android. Nếu bạn đã từng root ROM android bằng BusyBox, chính nó sử dụng ‘ash’. Nhà phát triển Debian cũng tạo cho mình một nền tảng dựa trên ‘ash’ có tên ‘dash’.
Một trong những shell mới điển hình khác là ‘zsh’ được phát triển bởi Paul Falstad vào năm 1990. Nó là shell mang phong cách Bourne, dùng các tính năng của bash và các shell đi trước và thậm chí được thêm vào nhiều tính năng mới nữa. Nó có tính năng check lỗi chính tả, kiểm tra đăng nhập đăng xuất, tính năng hỗ trợ lập trình bytecode cho phép ký hiệu khoa học trong cú pháp, cho phép dấu chấm động số học. Một shell khác là Friendly Interactive Shell ‘fish’ được tạo ra với mục đích đơn giản hóa câu lệnh và làm cho chúng trở nên dễ nhớ.
Nên dùng gì?
Với quá nhiều lựa chọn như vậy có lẽ bạn băn khoăn không biết nên chọn cái nào. Tuy nhiên mọi thứ không quá khó như bạn nghĩ vì rất nhiều shell dựa trên Bourne shell và mọi khái niệm cơ bản giữa chúng sẽ giống nhau.
Bash là shell được sử dụng rộng rãi nhất hiện nay và là shell mặc định trên khá nhiều Linux distros. Nó rất mạnh mẽ và nhiều tính năng nhưng có thể bạn sẽ không cần động đến đa số những tính năng này trừ khi bạn là một lập trình viên nên bạn có thể hoàn toàn gắn bó vs bash.
Nếu bạn là người thích vọc vạch những hệ thống máy tính nhúng như việc cài Linux lên chiếc Nintendo haowcj nếu bạn thích Debian, ash/dash sẽ là lựa chọn không tồi. Tuy nhiên một lần nữa, do sự nhỏ gọn của nó nên một số tính năng sẽ bị thiếu.
Nếu bạn là một lập trình viên, cần hoạt động nhiều trên dòng lệnh, bạn sẽ cần đắn đo hơn một chút. Bash vẫn rất tốt, nhưng rất nhiều lập trình viên chọn cho mình zsh. Sự lựa chọn này tùy thuộc vào mức độ phức tạp của dự án và những chức năng bạn cần trong shell. Một số khác chọn cho mình tcsh bởi vì họ sử dụng C nhiều và điều này sẽ dễ dàng hơn với họ. Còn nếu bạn không phải là một lập trình viên, hãy nghiên cứu xem bạn cần gì từ shell, từ đó chọn cho mình 1 shell phù hợp.
Bạn có thể dễ dàng cài đặt / gỡ bỏ shell bằng cách dùng Software Center trên Ubuntu và các distro khác, hoặc có thể dùng package manager như Synaptic nếu bạn thích. Shel nằm ở /shell/…, và nếu bạn dùng những distro hiện địa, bạn chỉ cần gõ vào câu lệnh
chsh
Bạn sẽ được yêu cầu nhập mật khẩu, sau đó bạn có thể thay đổi đường dẫn theo ý bạn.
Trong ngoặc vuông sẽ là địa chỉ của shell mặc định, bạn chỉ việc gõ địa chỉ của shell mới.
Bạn có thể xem bảng so sánh các tính năng của shell tại đây.
Nếu bạn biết thêm những kiến thức về shell hay có ý kiến đóng góp, hãy chia sẻ với GeekLinux bên dưới nhé.

No comments:

Post a Comment