Cách sử dụng Bash shell trên Linux: Từ chạy lệnh đến tùy chỉnh

Nếu bạn đang làm việc trên hệ điều hành Linux, Bash shell là một công cụ không thể thiếu. Với khả năng thực hiện các lệnh đơn giản đến phức tạp và hỗ trợ tạo các script tự động hóa công việc, Bash mang lại nhiều lợi ích cho người dùng trong việc tối ưu hóa quy trình làm việc.

Đọc bài viết này để hiểu rõ hơn về:

  • Tổng quan về bash shell trong Linux
  • Cách chạy bash shell trên Linux
  • Các lệnh bash shell linux cơ bản
  • Một số cấu hình tùy chỉnh bash prompt

Tổng quan về bash shell trong Linux

Shell là một chương trình điều khiển dòng lệnh, đóng vai trò như một giao diện giữa người dùng và hệ điều hành. Tên gọi “shell” được bắt nguồn từ việc nó là lớp bên ngoài, bao bọc xung quanh hệ điều hành. Thông qua shell, người dùng có thể nhập các lệnh để yêu cầu hệ điều hành thực hiện những tác vụ như quản lý tệp tin, khởi chạy chương trình hoặc tương tác với các thành phần khác của hệ thống. Shell có thể hoạt động qua giao diện dòng lệnh (CLI), nơi người dùng nhập lệnh trực tiếp, hoặc qua giao diện đồ họa (GUI), tùy thuộc vào loại tác vụ và vai trò của máy tính. Mặc dù giao diện đồ họa có thể cung cấp một cách tiếp cận dễ dàng hơn cho người dùng, giao diện dòng lệnh vẫn được ưa chuộng vì tính mạnh mẽ và khả năng tự động hóa cao.

Shell Script là một tập hợp các lệnh shell được ghi lại trong một file văn bản, giúp tự động hóa các tác vụ hoặc xử lý dữ liệu mà không cần phải nhập lại lệnh từng bước. Một trong những lợi ích chính của shell script là khả năng tự động hóa các tác vụ phức tạp như sao lưu dữ liệu, cài đặt phần mềm hay kiểm tra tình trạng hệ thống.

Shell có nhiều loại Bourne shell (sh), C shell (csh), Korn shell (ksh),… nhưng phổ biến nhất là Bash (Bourne Again Shell) – một loại shell mạnh mẽ được phát triển từ Bourne Shell (sh) và trở thành shell mặc định trong hầu hết các bản phân phối Linux. Bash không chỉ cung cấp tính tương thích ngược với các lệnh và script của Bourne Shell mà còn bổ sung nhiều tính năng mạnh mẽ như tự động hoàn thành lệnh, lịch sử lệnh,… giúp người dùng có thể dễ dàng tương tác với hệ thống qua dòng lệnh.

Đọc thêm: Shell vs Bash: Phân biệt và lựa chọn công cụ phù hợp

Vì sao Bash là shell phổ biến nhất trên Linux?

Bash đã trở thành shell phổ biến nhất trên Linux và các hệ điều hành Unix-like nhờ vào những ưu điểm vượt trội như tiết kiệm thời gian khi làm việc, tối ưu hóa các tác vụ, giúp người dùng quản lý hệ thống hiệu quả hơn.

Cụ thể các ưu điểm chính của Bash shell trên Linux là:

  • Tính linh hoạt: Bash hỗ trợ nhiều cú pháp và tính năng mạnh mẽ, cho phép người dùng thực hiện các tác vụ đơn giản đến phức tạp, từ quản lý tệp đến điều khiển hệ thống. Cùng với việc hỗ trợ các công cụ mạnh mẽ như sed, awk, grep, Bash có thể xử lý văn bản và dữ liệu dễ dàng và hiệu quả.
  • Tự động hóa tác vụ: Bash cho phép người dùng viết các shell script để tự động hóa các tác vụ thường xuyên như sao lưu, kiểm tra tình trạng hệ thống, cài đặt phần mềm,… giúp giảm thiểu công việc lặp lại và tiết kiệm thời gian cho lập trình viên.
  • Lưu lịch sử lệnh và tự động hoàn thành: Bash cung cấp tính năng lưu lại lịch sử các lệnh đã thực thi, giúp người dùng có thể dễ dàng truy xuất lại các lệnh trước đó. Tính năng tự động hoàn thành lệnh bằng phím Tab giúp tăng tốc độ nhập lệnh, đặc biệt hữu ích khi làm việc với các thư mục hoặc tệp có tên dài.
  • Khả năng tùy chỉnh: Bash có thể dễ dàng tùy chỉnh thông qua các file cấu hình như .bashrc.bash_profile. Người dùng có thể thay đổi prompt, thêm các alias, hay thiết lập các biến môi trường theo nhu cầu công việc cá nhân.

Cách chạy Bash Shell trên Linux

Bash là một trong những shell phổ biến nhất trên Linux và thường được cài sẵn trong các bản phân phối Linux. Tuy nhiên, trong một số trường hợp, bạn có thể cần phải thay đổi hoặc kiểm tra shell hiện tại của mình. 

Kiểm tra xem Bash có phải là shell mặc định không

Trước hết, bạn cần kiểm tra xem Bash có phải là shell mặc định trong hệ thống của mình không với lệnh sau:

echo $SHELL

Lệnh này sẽ in ra đường dẫn đến shell hiện tại mà bạn đang sử dụng. Nếu kết quả trả về là /bin/bash hoặc tương tự, thì bạn đang sử dụng Bash shell. Ví dụ:

$ echo $SHELL

/bin/bash

Cài đặt Bash (nếu chưa được cài đặt)

Trên hệ thống dựa trên Debian/Ubuntu:

sudo apt-get update

sudo apt-get install bash

Trên hệ thống dựa trên Red Hat/Fedora:

sudo dnf install bash

Trên hệ thống dựa trên Arch Linux:

sudo pacman -S bash

Chạy Bash từ Terminal

Nếu bạn đang sử dụng một shell khác (ví dụ, sh hoặc zsh), bạn có thể dễ dàng chuyển sang Bash bằng cách gõ lệnh sau trong terminal:

bash

Sau khi nhập lệnh này, bạn sẽ thấy prompt của terminal thay đổi để phản ánh việc chuyển sang Bash. Ví dụ:

$ bash

user@linux:~$

Khi đã chuyển sang Bash, bạn có thể bắt đầu thực thi các lệnh Bash ngay lập tức.

Cách thay đổi shell mặc định thành Bash

Nếu Bash không phải là shell mặc định của bạn và bạn muốn thay đổi shell mặc định thành Bash, bạn có thể sử dụng lệnh chsh (change shell) với cú pháp như sau:

chsh -s /bin/bash

Lệnh này sẽ thay đổi shell mặc định thành Bash và sẽ yêu cầu bạn nhập mật khẩu của mình rồi sau đó đăng xuất và đăng nhập lại để thay đổi có hiệu lực.

Tạo và chạy một Bash Script

Bash không chỉ là một shell mà còn hỗ trợ lập trình shell thông qua các script. Bạn có thể tạo một file script và chạy nó trên Bash. Ví dụ, để tạo một script đơn giản:

Bước 1: Mở một trình soạn thảo văn bản (ví dụ, nano hoặc vim) để tạo file:

nano hello.sh

Bước 2: Thêm nội dung sau vào file script:

#!/bin/bash

echo "Hello, World!"

Lưu và đóng file (Ctrl + X để lưu trong nano).

Dòng đầu tiên #!/bin/bash được gọi là shebang, cho hệ thống biết script này nên được thực thi bằng Bash.

Bước 3: Để chạy script, bạn cần cấp quyền thực thi cho file với lệnh:

chmod +x hello.sh

Bước 4: Sau đó, bạn có thể chạy script này bằng lệnh:

./hello.sh

Kết quả sẽ là:

Hello, World!

Tổng hợp các lệnh Bash shell linux cơ bản

cat

Mô tả: Đọc và hiển thị nội dung của tệp.

Cú pháp:

cat [options] [file_names]

Tùy chọn:

  • -b: Đánh số các dòng không trống.
  • -n: Đánh số tất cả các dòng.
  • -s: Xóa các dòng trống liên tiếp.
  • -v: Hiển thị các ký tự không in được (ngoại trừ tab và ký tự xuống dòng).

Ví dụ:

In toàn bộ nội dung của tệp file.txt:

cat file.txt

Hiển thị nội dung của tệp và đánh số tất cả các dòng:

cat -n file.txt

cd

Mô tả: Thay đổi thư mục làm việc.

Cú pháp:

cd [directory_path]

Ví dụ:

Chuyển đến thư mục projects:

cd projects

Chuyển đến thư mục projects trong thư mục người dùng:

cd ~/projects

Trở về thư mục home:

cd ~

Trở về thư mục trước đó:

cd -

head

Mô tả: Hiển thị 10 dòng đầu tiên của tệp (mặc định).

Cú pháp:

head [options] [file_name(s)]

Tùy chọn:

  • -n N: Hiển thị N dòng đầu tiên của tệp.
  • -q: Không hiển thị tiêu đề của tệp khi có nhiều tệp.
  • -v: Luôn hiển thị tiêu đề của tệp.

Ví dụ:

Hiển thị 7 dòng đầu tiên của tệp file.txt:

head -n 7 file.txt

ls

Mô tả: Liệt kê các tệp và thư mục trong thư mục hiện tại hoặc thư mục chỉ định.

Cú pháp:

ls [options] [directory_path]

Tùy chọn:

  • -a: Liệt kê tất cả các tệp, bao gồm các tệp ẩn (bắt đầu bằng dấu chấm).
  • -l: Hiển thị chi tiết thông tin của các tệp, như quyền truy cập, kích thước, thời gian sửa đổi, …
  • -G: Hiển thị kết quả có màu sắc (nếu hệ thống hỗ trợ).
  • -r: Hiển thị theo thứ tự ngược.
  • -t: Sắp xếp theo thời gian sửa đổi.

Ví dụ:

Liệt kê tất cả các tệp và thư mục trong thư mục hiện tại:

ls

Liệt kê tất cả các tệp, bao gồm tệp ẩn:

ls -a

Liệt kê thông tin chi tiết của các tệp trong thư mục:

ls -l

Liệt kê chi tiết với kích thước đọc được:

ls -lh

man

Mô tả: Hiển thị tài liệu hướng dẫn sử dụng của một lệnh.

Cú pháp:

man [options] [command]

Tùy chọn:

  • -f: In mô tả ngắn về lệnh.
  • -a: Hiển thị tất cả các trang tài liệu liên quan đến lệnh.

Ví dụ:

Hiển thị mô tả ngắn của lệnh ls:

man -f ls

mv

Mô tả: Di chuyển tệp hoặc thư mục từ vị trí này đến vị trí khác.

Cú pháp:

mv [options] source target

Tùy chọn:

  • -f: Di chuyển mà không yêu cầu xác nhận, thay thế các tệp đích nếu đã tồn tại.
  • -i: Yêu cầu xác nhận trước khi thay thế tệp đích nếu có.
  • -v: Hiển thị thông tin về quá trình di chuyển.

Ví dụ:

Di chuyển tệp file1.txt đến thư mục /home/user/:

mv file1.txt /home/user/

Đổi tên file1.txt thành file2.txt:

mv file1.txt file2.txt

Các cấu hình tùy chỉnh cho Bash

Tùy chỉnh Bash Prompt

Bash prompt là giao diện mà bạn nhìn thấy khi mở terminal trong hệ điều hành Linux hoặc Unix. Nó hiển thị thông tin về hệ thống của bạn và cho phép bạn nhập các lệnh vào để tương tác với hệ điều hành. Đặc biệt, Bash prompt có thể được tùy chỉnh để hiển thị các thông tin khác nhau và thay đổi màu sắc hoặc cấu trúc để dễ sử dụng hơn.

Mặc định của Bash prompt

PS1='\u@\h:\w\$ '

Trong đó:

  • \u: Tên người dùng
  • \h: Tên máy tính
  • \w: Thư mục hiện tại
  • \$: Dấu nhắc lệnh, $ cho người dùng bình thường và # cho root

Thêm màu sắc cho Bash Prompt

Ta có thể thêm màu sắc cho prompt để dễ dàng nhận diện. Ví dụ, để đổi màu cho tên người dùng và thư mục hiện tại với cú pháp sau:

PS1='\[\033[01;32m\]\u@\h \[\033[01;34m\]\w\[\033[00m\] \$ '

Trong đó:

  • \[\033[01;32m\]: Đổi màu xanh cho tên người dùng.
  • \[\033[01;34m\]: Đổi màu xanh dương cho thư mục hiện tại.
  • \[\033[00m\]: Đặt lại về màu mặc định

Hiển thị thời gian trong Bash Prompt

Nếu muốn xem thời gian mỗi khi nhập lệnh, bạn có thể thêm thời gian vào prompt với cú pháp như sau:

PS1='\u@\h:\w \t\$ '

Trong đó:

  • \t: Hiển thị thời gian hiện tại.

Các ký tự đặc biệt khác trong Prompt

  • \d: Ngày hiện tại (định dạng “Thứ Tháng Ngày”)
  • \A: Thời gian hiện tại (định dạng 24 giờ HH)
  • \j: Số lượng tiến trình đang chạy trong phiên terminal hiện tại
  • \!: Số hiệu lệnh trong lịch sử
  • \#: Số lệnh của phiên shell hiện tại

Tùy chỉnh các Alias

Alias cho phép bạn tạo các lệnh tắt thay vì phải nhập lệnh dài mỗi lần, giúp tiết kiệm thời gian và tăng hiệu quả công việc.

Cú pháp tạo alias:

alias tên_lệnh_tắt='lệnh_đầy_đủ'

Ví dụ để tạo alias:

# Di chuyển nhanh vào thư mục

alias projects='cd ~/projects'

# Liệt kê chi tiết các file và thư mục

alias ll='ls -l'

# Kiểm tra trạng thái Git

alias gs='git status'

# Cập nhật hệ thống 

alias update='sudo apt update && sudo apt upgrade'

Cấu hình môi trường shell 

Các biến môi trường (environment variables) giúp Bash biết cách thực thi các lệnh và chương trình. Một số biến môi trường thông dụng bao gồm:

$PATH

Biến này chứa danh sách các thư mục mà Bash tìm kiếm khi thực thi lệnh. Bạn có thể thêm thư mục vào $PATH để Bash biết nơi tìm các lệnh tùy chỉnh của bạn. Ví dụ để thêm /my/custom/path vào cuối danh sách các thư mục trong biến $PATH ta dùng cú pháp:

export PATH=$PATH:/my/custom/path
  • $HOME: Biến này lưu trữ thư mục nhà của người dùng. Bạn có thể thay đổi biến này nếu cần thiết.
  • $USER: Tên người dùng hiện tại
  • $SHELL: Shell đang sử dụng
  • $HISTSIZE: Số lượng lệnh lưu trong lịch sử

Thêm thư mục vào $PATH

export PATH=$PATH:/my/custom/path

Xem giá trị biến môi trường

echo $TÊN_BIẾN

Liệt kê tất cả biến môi trường

env

Cấu hình tự động hóa và sử dụng tập tin .bashrc

Tập tin .bashrc là một trong những tập tin cấu hình quan trọng trong môi trường Bash shell trên hệ thống Linux. Khi bạn mở một terminal mới, hệ thống sẽ tự động tải các thiết lập từ tập tin này. Đây là nơi bạn có thể cấu hình các lệnh và môi trường của shell để tự động hóa các tác vụ và tùy chỉnh lại môi trường làm việc của mình mỗi khi mở terminal.

Thêm Aliases (biệt danh)

Aliases là cách để tạo các tên ngắn gọn cho các lệnh dài hoặc thường xuyên sử dụng, giúp tiết kiệm thời gian và công sức. Ví dụ, thay vì gõ một lệnh dài mỗi lần, bạn có thể tạo alias để chỉ cần gõ một từ ngắn.

Ví dụ cấu hình alias trong .bashrc:

Mở tập tin .bashrc trong trình soạn thảo (ví dụ: nano ~/.bashrc), sau đó thêm vào các alias sau:

alias ll='ls -l'  # Hiển thị thư mục với thông tin chi tiết

alias gs='git status'  # Xem trạng thái của git

alias update='sudo apt update && sudo apt upgrade'  # Cập nhật hệ thống

Sau khi thêm alias, bạn cần áp dụng thay đổi bằng cách chạy lệnh:

source ~/.bashrc

Bây giờ, thay vì gõ ls -l, bạn chỉ cần gõ ll.

Thêm biến môi trường tùy chỉnh

Bạn có thể sử dụng .bashrc để định nghĩa các biến môi trường mà sẽ được sử dụng trong suốt phiên làm việc trong terminal.

Giả sử bạn muốn thêm thư mục tùy chỉnh vào biến PATH để có thể chạy lệnh từ đó mà không cần nhập đường dẫn đầy đủ:

export PATH=$PATH:/home/username/my_custom_bin

Sau khi lưu và tải lại .bashrc, bạn sẽ có thể chạy các lệnh trong thư mục my_custom_bin mà không cần chỉ định đầy đủ đường dẫn.

Cấu hình Prompt (Dấu nhắc lệnh)

Một tính năng mạnh mẽ khác của .bashrc là khả năng thay đổi prompt (dấu nhắc lệnh) để làm cho terminal trở nên dễ sử dụng và đẹp mắt hơn. Bạn có thể tùy chỉnh màu sắc và thông tin hiển thị trong dấu nhắc lệnh.

Ví dụ:

PS1="\[\e[32m\]\u@\h:\w\$ \[\e[0m\]"  # Thay đổi màu chữ và hiển thị tên người dùng, máy tính và thư mục hiện tại

Trong đó:

  • \u: Tên người dùng
  • \h: Tên máy tính
  • \w: Thư mục làm việc hiện tại
  • Mã màu [32m thay đổi màu chữ sang màu xanh lá cây.

Sau khi lưu và tải lại .bashrc, bạn sẽ thấy dấu nhắc lệnh hiển thị với màu sắc mới.

Thêm các lệnh tự động chạy khi mở Terminal

Tập tin .bashrc cũng có thể chứa các lệnh tự động chạy mỗi khi bạn mở terminal. Điều này giúp bạn thiết lập môi trường ngay khi bắt đầu làm việc, chẳng hạn như kích hoạt một dịch vụ, chạy các kiểm tra hoặc sao lưu hệ thống, hay thiết lập lại các biến môi trường.

Ví dụ: Tự động chạy lệnh khi mở terminal:

# Kiểm tra và thông báo nếu có bản cập nhật hệ thống

if [ $(apt list --upgradable 2>/dev/null | grep -c upgradable) -gt 0 ]; then

  echo "Có bản cập nhật mới!"

fi

Với lệnh trên hệ thống sẽ kiểm tra xem có bản cập nhật nào chưa được cài đặt và hiển thị thông báo mỗi khi bạn mở terminal.

Các câu hỏi thường gặp về cách chạy Bash shell trên Linux

Bash shell có phải là shell duy nhất có thể chạy trên Linux không?

Không, Bash shell không phải là shell duy nhất có thể chạy trên Linux. Mặc dù Bash là shell phổ biến nhất trên Linux, nhưng hệ thống Linux còn hỗ trợ nhiều shell khác, bao gồm:

  • Zsh: Shell có nhiều tính năng nâng cao, hỗ trợ hoàn thành lệnh mạnh mẽ và nhiều plugin hữu ích.
  • Fish: Shell dễ sử dụng với tính năng tự động hoàn thành lệnh và hiển thị cú pháp màu sắc.
  • Ksh (Korn Shell): Shell mạnh mẽ với khả năng xử lý các tập lệnh phức tạp.
  • Tcsh: Shell kế thừa từ C Shell, với các cải tiến như tự động hoàn thành và xử lý lịch sử lệnh.

Tuy nhiên, Bash vẫn là lựa chọn mặc định và phổ biến nhất vì tính ổn định và dễ sử dụng.

Bash có thể tương thích với các ngôn ngữ lập trình khác không?

Có, Bash có thể tương thích và kết hợp với nhiều ngôn ngữ lập trình khác nhau. Bạn có thể sử dụng Bash scripts để gọi và thực thi các chương trình viết bằng các ngôn ngữ khác như Python, Ruby, Perl, C và nhiều ngôn ngữ khác. Bash cũng cho phép sử dụng các công cụ và thư viện từ các ngôn ngữ khác trong script của mình thông qua việc gọi các lệnh hệ thống hoặc sử dụng các API ngoại vi.

Làm sao để debug một Bash script?

Việc debug một Bash script có thể được thực hiện thông qua một số phương pháp và công cụ hỗ trợ.

Dưới đây là một số cách đơn giản để debug:

  • Sử dụng set -x để theo dõi lệnh thực thi: Thêm dòng lệnh set -x vào đầu script để Bash hiển thị chi tiết từng lệnh được thực thi trong quá trình chạy script.
  • Sử dụng set -v để hiển thị mã nguồn: set -v sẽ hiển thị nội dung của các lệnh khi script đang chạy, giúp bạn hiểu rõ hơn về hành động của script.
  • Kiểm tra mã thoát (exit status): Sử dụng $? để kiểm tra mã thoát của lệnh cuối cùng. Một mã thoát khác 0 có thể chỉ ra lỗi.
  • Sử dụng trap để xử lý tín hiệu lỗi: trap giúp bạn xử lý các lỗi hoặc dừng script khi gặp lỗi, cũng như làm sạch các tài nguyên khi script kết thúc.
  • In giá trị biến để kiểm tra: Thêm các câu lệnh echo để in giá trị của các biến tại các bước trong script, giúp bạn dễ dàng phát hiện vấn đề.

Tổng kết

Tóm lại, Bash shell không chỉ là công cụ giúp người dùng tương tác với hệ thống Linux mà còn hỗ trợ tự động hóa, tùy chỉnh và tối ưu hóa quy trình làm việc. Việc hiểu rõ các lệnh cơ bản và cách cấu hình Bash sẽ giúp bạn tiết kiệm thời gian và nâng cao hiệu quả công việc. 

ITviec hy vọng bài viết trên đã cung cấp cho bạn những kiến thức hữu ích và giúp bạn hiểu rõ hơn về cách sử dụng Bash shell hiệu quả trên Linux.