Bash

Bách khoa toàn thư mở Wikipedia
Buớc tưới chuyển hướng Bước tới tìm kiếm
Bash
Gnu-bash-logo.svg
Ảnh chụp một Bash session
Ảnh chụp một Bash session
Thiết kế bởiBrian Fox
Phát hành lần đầu8 tháng 6, 1989; 30 năm trước
Repository Sửa dữ liệu tại Wikidata
Viết bằngC
Hệ điều hành
Nền tảngGNU
Ngôn ngữ có sẵnĐa ngôn ngữ (gettext)
Thể loạiUnix shell, ngôn ngữ dòng lệnh
Giấy phépGPLv3+[5]
Websitewww.gnu.org/software/bash/

Bash là một Unix shell và ngôn ngữ dòng lệnh được viết bởi Brian Fox cho Dự án GNU như là một phần mềm thay thế miễn phí cho Bourne shell.[6][7] Được phát hành lần đầu tiên vào năm 1989,[8]nó đã được phân phối rộng rãi như là login shell mặc định cho hầu hết các bản phân phối LinuxmacOS. Một phiên bản cũng có sẵn cho Windows 10.[9] Nó cũng là user shell mặc định trong Solaris 11.[10]

Bash là một bộ xử lý dòng lệnh thường chạy trong cửa sổ văn bản nơi người dùng gõ các lệnh thực thi. Bash cũng có thể đọc và thực thi các lệnh từ một file, được gọi là shell script. Giống như tất cả Unix shell, nó hỗ trợ tên file toàn cục (khớp ký tự đại diện), piping, here documents, command substitution, biến, và cấu trúc điều khiển để kiểm tra điều kiện và vòng lặp. Các từ khóa, cú pháp và các tính năng cơ bản khác của ngôn ngữ đều được sao chép từ sh. Các tính năng khác, ví dụ, lịch sử, được sao chép từ csh và ksh. Bash là một shell tương thích POSIX, nhưng có một số phần mở rộng.

Tên của shell là viết tắt của Bourne-again shell, một cách chơi chữ với tên của Bourne shell mà nó thay thế[11] and on the common term "born again".[12][13]

Một lỗ hổng bảo mật trong Bash có từ phiên bản 1.03 (tháng 8/1989),[14] được đặt tên là Shellshock, được phát hiện vào đầu tháng 9 năm 2014 và nhanh chóng dẫn đến một loạt các cuộc tấn công trên Internet.[15][16][17] Các bản vá để sửa lỗi đã được cung cấp ngay sau khi lỗi được tìm thấy.

Vào tháng 6 năm 2019, Apple đã thông báo rằng macOS Catalina (10.15) sẽ sử dụng Zsh làm shell mặc định, thay thế Bash.[18][19]

Lịch sử[sửa | sửa mã nguồn]

Brian Fox bắt đầu lập trình Bash ngày 10/1/1988[20] sau khi Richard Stallman trở nên không hài lòng với sự thiếu tiến bộ của nhà phát triển trước đó.[6] Stallman và Free Software Foundation (FSF) xem một shell miễn phí có thể chạy các shell script hiện có nên mang tính chiến lược đối với một hệ thống hoàn toàn tự do được xây dựng từ mã BSD và GNU, đây là một trong số ít các dự án mà họ tự tài trợ, với Fox đảm nhận công việc của một nhân viên của FSF.[6][21] Fox phát hành bản beta của Bash, phiên bản .99 ngày 8/6/1989[8] và vẫn là người duy trì chính cho đến khoảng giữa năm 1992[22] and mid-1994,[23] khi ông ấy bị sa thải khỏi FSF[24] và trách nhiệm của ông đã được chuyển sang một người đóng góp sớm khác, Chet Ramey.[25][26][27]

Từ đó, Bash trở thành shell phổ biến nhất trong cộng đồng Linux, trở thành shell tương tác mặc định trên các bản phân phối khác nhau của hệ đièu hành này (mặc dù Almquist shell có thể là scripting shell mặc định) và trên macOS của Apple.[28][29][30] Bash cũng được port đến Microsoft Windows được phân phối cùng CygwinMinGW, tới DOS bởi dự án DJGPP, đến Novell NetWare và tới Android thông qua các ứng dụng mô phỏng thiết bị đầu cuối khác nhau.

Tháng 9/2014, Stéphane Chazelas, một chuyên gia về Unix/Linux,[31] phát hiện một lỗi bảo mật trong chương trình. Lỗi này, lần đầu tiên được tiết lộ vào ngày 24 tháng 9, được đặt tên là Shellshock và gán các số CVE-2014-6271, CVE-2014-6277[32]CVE-2014-7169. Lỗi này được coi là nghiêm trọng, vì các tập lệnh CGI sử dụng Bash có thể dễ bị tấn công, cho phép thực thi mã tùy ý. Lỗi này có liên quan đến cách Bash định nghĩa hàm cho các lớp con thông qua các biến môi trường.[33]

Tính năng[sửa | sửa mã nguồn]

The Bash command syntax is a superset of the Bourne shell command syntax. Bash supports brace expansion, command line completion, basic debugging[34] and exception handling (using trap) among other features. Bash can execute the vast majority of Bourne shell scripts without modification, with the exception of Bourne shell scripts stumbling into fringe syntax behavior interpreted differently in Bash or attempting to run a system command matching a newer Bash builtin, etc. Bash command syntax includes ideas drawn from the Korn shell (ksh) and the C shell (csh) such as command line editing, command history, the directory stack, the $RANDOM and $PPID variables, and POSIX command substitution syntax $(…).

When a user presses the tab key within an interactive command-shell, Bash automatically uses command line completion, since beta version 2.04,[35] to match partly typed program names, filenames and variable names. The Bash command-line completion system is very flexible and customizable, and is often packaged with functions that complete arguments and filenames for specific programs and tasks.

Bash's syntax has many extensions lacking in the Bourne shell. Bash can perform integer calculations ("arithmetic evaluation") without spawning external processes. It uses the ((…)) command and the $((…)) variable syntax for this purpose. Its syntax simplifies I/O redirection. For example, it can redirect standard output (stdout) and standard error (stderr) at the same time using the &> operator. This is simpler to type than the Bourne shell equivalent 'command > file 2>&1'. Bash supports process substitution using the <(command) and >(command)syntax, which substitutes the output of (or input to) a command where a filename is normally used. (This is implemented through /proc/fd/ unnamed pipes on systems that support that, or via temporary named pipes where necessary).

Khi sử dụng từ khóafunction, các khai báo hàm của Bash không tương thích với các tập lệnh Bourne/Korn/POSIX (Korn shell có cùng một vấn đề khi sử dụng 'function'), nhưng Bash chấp nhận cú pháp khai báo hàm giống như Bourne shell và Korn shell, và phù hợp với POSIX. Do những điều này và những khác biệt khác, các tập lệnh Bash shell hiếm khi được chạy theo trình thông dịch Bourne shell và Korn shell trừ khi cố tình viết với tính tương thích đó, điều này trở nên ít phổ biến hơn khi Linux trở nên phổ biến hơn. Nhưng trong chế độ POSIX, Bash phù hợp với POSIX chặt chẽ hơn.[36]

Bash hỗ trợ here document. Từ phiên bản 2.05b Bash có thể chuyển hướng đầu vào tiêu chuẩn (stdin) từ một "here string" sử dụng toán tử <<<.

Bash 3.0 hỗ trợ khớp biểu thức chính quy trong quá trình bằng cách sử dụng cú pháp gợi nhớ đến Perl.[37][38]

Tháng 2/2009[39], Bash 4.0 đã giới thiệu các hỗ trợ cho các mảng kết hợp.[36][40] Các mảng kết hợp cho phép giả hỗ trợ cho các mảng đa chiều (được lập chỉ mục), theo cách tương tự như AWK. Bash 4.x chưa được tích hợp trong phiên bản MacOS mới hơn do hạn chế về giấy phép.[41]. Ví dụ mảng kết hợp:

$ declare -A aa        # khai báo một mảng kết hợp 'aa' được lập chỉ mục hai chiều
$ i=1; j=2             # khởi tạo một vài chỉ số
$ aa[$i,$j]=5          # liên kết giá trị "5" với khóa "$ i, $ j" (tức là "1,2")
$ echo ${aa[$i,$j]}    # in giá trị được lưu trữ tại khóa "$ i, $ j"
5

[42]

Chú thích[sửa | sửa mã nguồn]

  1. ^ “Bash FAQ, version 4.14”. Bản gốc lưu trữ ngày 1 tháng 9 năm 2018. Truy cập ngày 9 tháng 4 năm 2016. 
  2. ^ “Why does Apple ship bash 3.2?”. apple.stackexchange.com. 
  3. ^ “Missing source code - GPL compliance? · Issue #107 · Microsoft/WSL”. GitHub. 
  4. ^ “GNU Bash”. Softpedia. SoftNews. Truy cập ngày 9 tháng 4 năm 2016. 
  5. ^ GNU Project. “README file”. Bash is free software, distributed under the terms of the [GNU] General Public License as published by the Free Software Foundation, version 3 of the License (or any later version). 
  6. ^ a ă â Richard Stallman (forwarded with comments by Chet Ramey) (February 10, 1988). "GNU + BSD = ?". comp.unix.questions. (Google Groups). Được truy cập ngày March 22, 2011.
  7. ^ Hamilton, Naomi (30 tháng 5 năm 2008), “The A-Z of Programming Languages: BASH/Bourne-Again Shell”, Computerworld: 2, truy cập ngày 21 tháng 3 năm 2011, When Richard Stallman decided to create a full replacement for the then-encumbered Unix systems, he knew that he would eventually have to have replacements for all of the common utilities, especially the standard shell, and those replacements would have to have acceptable licensing. 
  8. ^ a ă Brian Fox (forwarded by Leonard H. Tower Jr.) (June 8, 1989). "Bash is in beta release!". gnu.announce. (Google Groups). Được truy cập ngày October 28, 2010.
  9. ^ “How to install Bash shell command-line tool on Windows 10”. 28 tháng 9 năm 2016. 
  10. ^ “User Environment Feature Changes”. Oracle. 
  11. ^ C Programming by Al Stevens, Dr. Dobb's Journal, July 1, 2001
  12. ^ Richard Stallman (12 tháng 11 năm 2010). “About the GNU Project”. Free Software Foundation. Bản gốc lưu trữ ngày 24 tháng 4 năm 2011. Truy cập ngày 13 tháng 3 năm 2011. "Bourne Again Shell" is a play on the name Bourne Shell, which was the usual shell on Unix. 
  13. ^ Gattol, Markus (13 tháng 3 năm 2011), Bourne-again Shell, Bản gốc lưu trữ ngày 9 tháng 3 năm 2011, truy cập ngày 13 tháng 3 năm 2011, The name is a pun on the name of the Bourne shell (sh), an early and important Unix shell written by Stephen Bourne and distributed with Version 7 Unix circa 1978, and the concept of being "born again".  Đã bỏ qua tham số không rõ |df= (trợ giúp)
  14. ^ Chazelas, Stephane (4 tháng 10 năm 2014). “oss-sec mailing list archives”. Seclists.org. Truy cập ngày 4 tháng 10 năm 2014. 
  15. ^ Leyden, John (24 tháng 9 năm 2014). “Patch Bash NOW: 'Shell Shock' bug blasts OS X, Linux systems wide open”. The Register. Truy cập ngày 25 tháng 9 năm 2014. 
  16. ^ Perlroth, Nicole (25 tháng 9 năm 2014). “Security Experts Expect ‘Shellshock’ Software Bug in Bash to Be Significant”. The New York Times. Truy cập ngày 25 tháng 9 năm 2014. 
  17. ^ Seltzer, Larry (29 tháng 9 năm 2014). “Shellshock makes Heartbleed look insignificant”. ZDNet. Bản gốc lưu trữ ngày 14 tháng 5 năm 2016. 
  18. ^ “Use zsh as the default shell on your Mac - Apple Support”. Truy cập ngày 1 tháng 7 năm 2019. 
  19. ^ Warren, Tom (4 tháng 6 năm 2019). “Apple replaces bash with zsh as the default shell in macOS Catalina”. The Verge. Truy cập ngày 13 tháng 6 năm 2019. 
  20. ^ Brian Fox (29 tháng 8 năm 1996), shell.c, Free Software Foundation, Birthdate: Sunday, January 10th, 1988. Initial author: Brian Fox 
  21. ^ Richard Stallman (3 tháng 10 năm 2010). “About the GNU Project”. Free Software Foundation. Bản gốc lưu trữ ngày 24 tháng 4 năm 2011. Truy cập ngày 21 tháng 3 năm 2011. Free Software Foundation employees have written and maintained a number of GNU software packages. Two notable ones are the C library and the shell. ... We funded development of these programs because the GNU Project was not just about tools or a development environment. Our goal was a complete operating system, and these programs were needed for that goal. 
  22. ^ len (g...@prep.ai.mit.edu) (April 20, 1993). "January 1993 GNU's Bulletin". gnu.announce. (Google Groups). Được truy cập ngày October 28, 2010.
  23. ^ Ramey, Chet (1 tháng 8 năm 1994). “Bash - the GNU shell (Reflections and Lessons Learned)”. Linux Journal. Bản gốc lưu trữ ngày 5 tháng 12 năm 2008. Truy cập ngày 13 tháng 11 năm 2008. 
  24. ^ Chet Ramey (31 tháng 10 năm 2010), Dates in your Computerworld interview, truy cập ngày 31 tháng 10 năm 2010 
  25. ^ Chet Ramey (June 12, 1989). "Bash 0.99 fixes & improvements". gnu.bash.bug. (Google Groups). Được truy cập ngày November 1, 2010.
  26. ^ Chet Ramey (July 24, 1989). "Some bash-1.02 fixes". gnu.bash.bug. (Google Groups). Được truy cập ngày October 30, 2010.
  27. ^ Brian Fox (March 2, 1990). "Availability of bash 1.05". gnu.bash.bug. (Google Groups). Được truy cập ngày October 30, 2010.
  28. ^ Foster-Johnson, Eric; Welch, John C.; Anderson, Micah (tháng 4 năm 2005). Beginning Shell Scripting. John Wiley & Sons, Inc. tr. 6. ISBN 978-0-7645-9791-6. Truy cập ngày 6 tháng 6 năm 2016. Bash is by far the most popular shell and forms the default shell on Linux and Mac OSX systems. 
  29. ^ Danesh, Arman; Jang, Michael (tháng 2 năm 2006). Mastering Linux. John Wiley & Sons, Inc. tr. 363. ISBN 978-0-7821-5277-7. Truy cập ngày 6 tháng 6 năm 2016. The Bourne Again Shell (bash) is the most common shell installed with Linux distributions. 
  30. ^ Bresnahan, Christine; Blum, Richard (tháng 4 năm 2015). CompTIA Linux+ Powered by Linux Professional Institute Study Guide: Exam LX0-103 and Exam LX0-104 (ấn bản 3). John Wiley & Sons, Inc. tr. 5. ISBN 978-1-119-02122-3. Truy cập ngày 6 tháng 6 năm 2016. In Linux, most users run bash because it is the most popular shell. 
  31. ^ Juliana, Cino (10 tháng 6 năm 2017). “Linux bash exit status and how to set exit status in bash - Techolac”. Truy cập ngày 21 tháng 6 năm 2019. 
  32. ^ “CVE-2014-6277”. cve.mitre.org. 
  33. ^ Huzaifa Sidhpurwala (24 tháng 9 năm 2014). “Bash specially-crafted environment variables code injection attack”. Red Hat. 
  34. ^ “Debugging Bash scripts”. tldp.org. 
  35. ^ “Working more productively with bash 2.x/3.x”. www.caliban.org. 
  36. ^ a ă “6.11 Bash POSIX Mode”, The GNU Bash Reference Manual, for Bash, Version 4.1, 23 tháng 12 năm 2009, Bản gốc lưu trữ ngày 3 tháng 12 năm 2010, truy cập ngày 26 tháng 10 năm 2010 
  37. ^ “Advanced Bash-Scripting Guide”. www.tldp.org. Section 37.2 (Bash, version 3). Truy cập ngày 5 tháng 3 năm 2017. 
  38. ^ The syntax matches that shown on the regex(7) man page.
  39. ^ “Bash, version 4”. tldp.org. 
  40. ^ "The shell provides associative array variables, with the appropriate support to create, delete, assign values to, and expand them." http://tiswww.case.edu/php/chet/bash/NEWS
  41. ^ “macos - Update bash to version 4.0 on OSX”. Ask Different. 
  42. ^ “Arrays (Bash Reference Manual)”. www.gnu.org. 

Bản mẫu:Unix shells