File .sh là script shell dùng để tự động hóa các lệnh và tác vụ trong hệ điều hành Linux thông qua dòng lệnh. Việc chạy file .sh giúp bạn tiết kiệm thời gian, giảm thao tác lặp lại và hạn chế lỗi khi thực thi nhiều lệnh thủ công. Trong bài viết này, mình sẽ hướng dẫn bạn cách chạy file .sh trong Linux đơn giản, dễ hiểu, phù hợp cho người mới bắt đầu.
Những điểm chính
- Định nghĩa file .sh: Hiểu rõ file
.shlà một file văn bản chứa các lệnh để tự động hóa tác vụ trên Linux. - Định nghĩa lệnh chmod: Nắm vững khái niệm, các loại quyền và cách sử dụng
chmodở chế độ số học để quản lý quyền truy cập. - Cách kiểm tra quyền truy cập: Biết cách sử dụng
ls -lđể kiểm tra xem một file đã có quyền thực thi hay chưa. - Hướng dẫn cấp quyền thực thi: Thành thạo 3 cách cấp quyền
executebằngchmod, từ việc cấp cho chủ sở hữu, tất cả người dùng, đến việc sử dụng mã số. - Cách chạy file .sh: Nắm được phương pháp chạy file
.shsau khi đã cấp quyền. - Chạy file .sh khi không có quyền thực thi: Biết cách chạy trực tiếp file
.shbằng cách gọi trình thông dịch mà không cần cấp quyền. - Ví dụ khác về lệnh chmod: Khám phá thêm các ví dụ để cấp hoặc gỡ quyền một cách linh hoạt, bao gồm cả quyền
777và cảnh báo bảo mật. - Những lưu ý quan trọng: Nắm được các lưu ý quan trọng để chạy file
.shmột cách an toàn và hiệu quả, từ việc kiểm duyệt mã nguồn đến sử dụng đường dẫn tuyệt đối. - Câu hỏi thường gặp: Giải đáp các thắc mắc liên quan đến việc chạy file .sh trong Linux.
File .sh là gì?
Trong môi trường Linux, các file có phần mở rộng .sh (Shell Script) là những file văn bản thuần túy, trong đó chứa tập hợp các lệnh hệ thống được sắp xếp theo trình tự để tự động hóa thao tác, thay vì phải nhập từng lệnh thủ công qua dòng lệnh. Người dùng có thể dễ dàng tạo hoặc chỉnh sửa file .sh bằng bất kỳ trình soạn thảo văn bản nào như vi, nano hoặc gedit.
Một đặc điểm nhận diện quan trọng của Shell Script là dòng đầu tiên thường xuất hiện ký tự shebang (#!) đi kèm đường dẫn tuyệt đối tới trình thông dịch sẽ thực thi kịch bản đó. Ví dụ, #!/bin/bash chỉ định script sẽ chạy bởi Bash shell, trong khi #!/bin/sh quy định sử dụng SH shell. Đây là tiêu chuẩn cần thiết để hệ thống xác định đúng môi trường thực thi cho mỗi file shell script.

Lệnh chmod là gì?
Lệnh chmod (change mode) là một tiện ích dòng lệnh cơ bản trong các hệ điều hành tương tự UNIX như Linux. Chức năng chính của chmod là thay đổi hoặc thiết lập các quyền truy cập cho file và thư mục, quyết định ai có thể đọc, ghi hoặc thực thi.

1. Ba loại quyền cơ bản
Hệ thống quyền của Linux được xây dựng dựa trên ba hành động cơ bản, áp dụng cho ba loại người dùng khác nhau: owner (chủ sở hữu file), group (nhóm sở hữu file) và others (tất cả những người dùng khác):
- Read (r): Cho phép người dùng xem nội dung của một file hoặc liệt kê các file bên trong một thư mục.
- Write (w): Cho phép người dùng sửa đổi, thêm, xóa nội dung của file hoặc tạo/xóa file trong một thư mục.
- Execute (x): Cho phép người dùng chạy một file như một chương trình hoặc script. Đối với thư mục, quyền này cho phép người dùng
cdvào thư mục đó.
2. Minh họa sử dụng chế độ số học (Octal Mode)
Dưới đây là các toán tử trong chmod:
| Toán tử | Ý nghĩa |
| + | Thêm quyền |
| – | Gỡ quyền |
| = | Gán chính xác quyền như xoá trước, đặt lại,… |
Ngoài cách dùng ký hiệu (+x, -w), chmod còn hỗ trợ một chế độ mạnh mẽ hơn là sử dụng các chữ số bát phân. Trong chế độ này, mỗi quyền được gán một giá trị số:
- Read (r) = 4
- Write (w) = 2
- Execute (x) = 1
Một lệnh chmod hoàn chỉnh ở chế độ số học sẽ có dạng chmod [số_cho_owner][số_cho_group][số_cho_others] [tên_tệp].
| Vai trò | Quyền | Giá trị Octal |
|---|---|---|
| Owner | Đọc, ghi, thực thi (rwx) | 7 |
| Group | Đọc, thực thi (r-x) | 5 |
| Others | Đọc, thực thi (r-x) | 5 |
3. Các cấu hình quyền phổ biến cho Script
Dưới đây là các cấu hình phân quyền được dùng phổ biến, giúp đảm bảo script chạy được, giữ mức độ an toàn và riêng tư phù hợp với từng tình huống sử dụng:
chmod 755 ten_script.sh: Đây là cấu hình phổ biến và an toàn nhất, cấp cho chủ sở hữu toàn quyền (đọc, ghi, thực thi), trong khi nhóm và những người dùng khác chỉ có thể đọc và thực thi script. Quyền hiển thị sẽ là-rwxr-xr-x.chmod 775 ten_script.sh: Cấu hình này hữu ích khi bạn làm việc trong một nhóm phát triển. Cả chủ sở hữu và các thành viên trong nhóm đều có quyền chỉnh sửa và chạy script. Quyền hiển thị sẽ là-rwxrwxr-x.chmod 700 ten_script.sh: Cấu hình này mang tính riêng tư cao nhất, chỉ cho phép duy nhất chủ sở hữu có thể đọc, ghi và thực thi script. Quyền hiển thị sẽ là-rwx------.

Cách kiểm tra quyền truy cập của file
Trước khi chạy script, bạn hãy kiểm tra quyền truy cập với lệnh ls -l:
$ ls -l script.shKết quả có dạng như sau:

Nếu không có x trong quyền (ví dụ như: -rwxr-xr–), thì file không thể thực thi trực tiếp.
Hướng dẫn cấp quyền thực thi bằng chmod
Cách 1: Cấp quyền thực thi cho chủ sở hữu
Bạn chạy lệnh sau để cấp quyền thực thi cho chủ sở hữu của file script.sh. Cụ thể, sau khi thực hiện lệnh này, người sở hữu file có thể trực tiếp chạy file script trên hệ thống Linux.
$ chmod u+x script.shTrong đó:
- u: Viết tắt của “user”, tức là chủ sở hữu file.
- +x: Bổ sung quyền thực thi (execute).
- script.sh: Tên file script cần thay đổi quyền.
Kết quả của lệnh này là chủ sở hữu file script.sh sẽ có thêm quyền thực thi file, có thể thực hiện lệnh ./script.sh để chạy script ngay trên terminal.

Cách 2: Cấp quyền thực thi cho tất cả đối tượng
Lệnh dưới đây có chức năng cấp quyền thực thi cho tất cả các đối tượng như: Chủ sở hữu (user), nhóm (group) và những người dùng khác (others). Sau khi chạy lệnh này, bất kỳ ai trên hệ thống đều có thể khởi chạy file script.sh từ terminal:
$ chmod +x script.shLệnh này giúp file script.sh chuyển sang trạng thái “có thể thực thi” với mọi đối tượng. Đây là cách mở rộng quyền truy cập, thuận tiện cho môi trường nhiều người dùng, nhưng bạn cần cân nhắc với các file quan trọng hoặc nhạy cảm về bảo mật.

Cách 3: Cấp quyền cụ thể bằng mã số
Bạn chạy lệnh sau để cấp quyền truy cập cho file script.sh bằng mã số.
$ chmod 755 script.shÝ nghĩa 755:
- 7: user = read + write + execute.
- 5: group = read + execute.
- 5: others = read + execute.
Lệnh này thiết lập quyền truy cập cho file script.sh sao cho chủ sở hữu có đầy đủ quyền (đọc, ghi, thực thi), còn nhóm sở hữu và mọi người dùng khác chỉ có thể đọc và thực thi file, không thể chỉnh sửa nội dung file. Đây là thiết lập phổ biến dành cho các script hệ thống, đảm bảo tính bảo mật và khả năng sử dụng chung.

Cách chạy file sh trong Linux
Sau khi đã thiết lập quyền thực thi cho file script, bạn có thể khởi chạy script bằng lệnh dưới đây trong terminal:
$ ./script.shKết quả hiển thị như sau:

Lưu ý
Cách chạy file sh trong Linux khi không có quyền thực thi
Trong trường hợp file script.sh chưa có quyền thực thi, bạn vẫn có thể chạy script đó bằng cách sử dụng trình thông dịch Bash mà không cần thiết lập quyền thực thi. Cú pháp thực hiện như sau:
$ bash script.shKhi sử dụng lệnh này, Bash sẽ trực tiếp đọc và thực thi nội dung bên trong file script mà không kiểm tra quyền thực thi của file. Kết quả hiển thị như sau:

Để chạy một file Python script trong Linux, bạn sử dụng lệnh sau:
$ python3 script.pyKết quả hiển thị sau khi bạn chạy lệnh:

Đối với file script viết bằng Perl, thực hiện lệnh sau để chạy:
$ perl script.plKết quả hiển thị lệnh này như sau:

Cả hai lệnh này đều trực tiếp gọi trình thông dịch tương ứng (Python hoặc Perl), không yêu cầu quyền thực thi của file script, chỉ cần file có quyền đọc cho user hiện tại. Đây là phương pháp phổ biến để kiểm tra và chạy nhanh các script trên hệ thống Linux.
Một số ví dụ khác về lệnh chmod trên Linux
1. Cấp quyền thực thi chỉ cho nhóm sở hữu (group): Lệnh này giúp nhóm sở hữu file script.sh có thêm quyền thực thi, còn các đối tượng khác thì không thay đổi quyền:
$ chmod g+x script.sh2. Gỡ quyền thực thi cho tất cả mọi đối tượng: Lệnh này sẽ loại bỏ quyền thực thi khỏi file script.sh, khiến bất kỳ ai cũng không thể chạy trực tiếp file này cho đến khi quyền được cấp lại:
$ chmod -x script.sh3. Cấp quyền đọc, ghi, thực thi cho tất cả (user, group, others): Lệnh này cho phép chủ sở hữu, nhóm và tất cả người dùng khác đều được đọc, ghi và thực thi file script.sh:
$ chmod 777 script.shLưu ý
Những lưu ý quan trọng khi chạy file .sh trong Linux
Dưới đây là một số lưu ý quan trọng giúp bạn chạy shell script một cách an toàn, hạn chế lỗi hệ thống và các rủi ro bảo mật:
- Kiểm duyệt nội dung mã nguồn: Bạn cần đọc và hiểu nội dung script trước khi chạy, đặc biệt với các script tải từ Internet, điều này giúp ngăn chặn các lệnh độc hại tiềm ẩn như
rm -rf /hoặc mã tải malware. - Cấp quyền thực thi chính xác: Hệ thống Linux mặc định không cho phép chạy file text nên bạn cần cấp quyền thực thi bằng lệnh
chmod +x ten_file.shtrước khi khởi chạy bằng phương thức./ten_file.sh. - Cẩn trọng khi sử dụng quyền Root: Bạn hạn chế tối đa việc chạy script với lệnh
sudotrừ khi thực sự cần thiết và hiểu rõ script đó tác động gì đến file hệ thống, nhằm tránh rủi ro phá hỏng cấu hình server. - Xử lý lỗi định dạng dòng: File
.shđược soạn thảo trên Windows thường dính lỗi ký tự xuống dòngCRLFkhiến Linux không hiểu và báo lỗi\r: command not found), khi đó bạn cần chuyển đổi sang chuẩn UnixLFbằng lệnhdos2unix ten_file.shhoặcsed. - Sử dụng đường dẫn tuyệt đối (Absolute Path): Khi thiết lập script chạy tự động như trong Cronjob, bạn nên sử dụng đường dẫn tuyệt đối thay vì đường dẫn tương đối, vì môi trường chạy ngầm thường không cùng thư mục hiện hành với người dùng.
- Chế độ debug và kiểm soát lỗi: Khi chạy thử nghiệm, bạn nên sử dụng lệnh
bash -x ten_file.shđể xem chi tiết từng bước thực thi, đồng thời cân nhắc thêmset -evào đầu script để chương trình tự động dừng ngay lập tức khi gặp bất kỳ lỗi nào.

Câu hỏi thường gặp
Có thể cấp quyền thực thi cho nhiều file cùng lúc bằng chmod không?
Hoàn toàn có thể. Bạn dùng cú pháp sau để cấp quyền thực thi cho toàn bộ các file có đuôi .sh trong thư mục hiện tại:
chmod +x file1.sh file2.sh file3.sh
Hoặc
chmod 755 *.sh
Nếu quên thêm shebang (#!) vào đầu file .sh thì có chạy được không?
File vẫn sẽ chạy khi bạn gọi bằng Bash hoặc SH, tuy nhiên nếu gọi trực tiếp bằng ./ten_file.sh, hệ thống sẽ dựa vào thiết lập mặc định của môi trường (thường là sh), có thể dẫn đến lỗi cú pháp nếu script viết cho Bash. Vì vậy, luôn nên khai báo đúng shebang đầu file.
Có phải mọi file text đều có thể cấp quyền thực thi và chạy như shell script?
Không, chỉ những file text có nội dung hợp lệ của ngôn ngữ shell hoặc ngôn ngữ script với shebang đầu file mới thực sự chạy được khi có quyền thực thi. Các file text khác dù được cấp quyền vẫn không thể hoạt động như một chương trình.
Chạy script bằng quyền root có rủi ro gì?
Rủi ro rất cao vì script thực thi với toàn quyền hệ thống, có thể xóa, thay đổi hoặc thao tác ở mọi nơi. Bạn chỉ nên dùng sudo khi thực sự cần và đã kiểm duyệt kỹ nội dung script, tránh bị chiếm quyền hệ thống hoặc phá hỏng dữ liệu.
Có cần phải cấp quyền thực thi lại cho file .sh mỗi lần mình chỉnh sửa nội dung không?
Không cần. Quyền thực thi của file không bị ảnh hưởng khi nội dung được sửa đổi, trừ khi bạn thay đổi quyền bằng lệnh chmod mới.
Chạy file .sh trong Linux không hề phức tạp nếu bạn nắm đúng quy trình và hiểu rõ ý nghĩa của từng lệnh. Thông qua bài viết này, mình đã cùng bạn đi qua các bước cơ bản từ cấp quyền thực thi, chạy script bằng terminal cho đến một số lưu ý quan trọng giúp hạn chế lỗi và rủi ro bảo mật. Khi đã quen, bạn có thể tận dụng shell script để tự động hóa nhiều tác vụ, tiết kiệm thời gian và làm việc hiệu quả hơn trên môi trường Linux. Cảm ơn bạn đã theo dõi!




