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