Lệnh source trong Linux là một công cụ quan trọng khi làm việc với shell, đặc biệt là khi bạn cần nạp lại cấu hình, thiết lập biến môi trường hoặc dùng chung hàm giữa nhiều script mà không muốn tạo thêm tiến trình mới. Trong bài viết này, mình sẽ cùng bạn tìm hiểu về cách sử dụng và những lưu ý khi dùng lệnh source chi tiết.
Những điểm chính
- Định nghĩa lệnh source trong Linux: Hiểu rõ
sourcelà lệnh dùng để thực thi các câu lệnh từ một file script ngay trong môi trường Shell hiện tại, không tạo tiến trình con. - Cú pháp lệnh source: Nắm vững các cách viết lệnh source tiêu chuẩn và cách sử dụng ký hiệu dấu chấm (.) rút gọn để thao tác nhanh chóng hơn.
- Các trường hợp sử dụng: Nắm được các ứng dụng thực tế của
source, từ việc cập nhật cấu hình, thiết lập biến môi trường đến việc module hóa mã nguồn. - Ví dụ áp dụng thực tế: Thành thạo cách sử dụng
sourcequa các ví dụ cụ thể như nạp lại file.bashrc, thiết lập biến môi trường và chia sẻ hàm giữa các script. - Phân biệt
sourcevà./script.sh: Hiểu rõ sự khác biệt cốt lõi về cơ chế thực thi, phạm vi biến và quyền hạn, giúp bạn chọn đúng phương pháp cho từng tác vụ. - Giải đáp thắc mắc: Có được câu trả lời cho các vấn đề nâng cao như khi nào bắt buộc phải dùng
source, rủi ro bảo mật và ảnh hưởng đến hiệu năng trong các script lớn.
Lệnh source trong Linux là gì?
Trong hệ điều hành Linux, source là lệnh tích hợp sẵn trong Shell được sử dụng để đọc và thực thi các câu lệnh từ một file script ngay trong môi trường Shell hiện tại. Điểm khác biệt cốt lõi của source so với việc chạy script thông thường là lệnh này không tạo ra một tiến trình con. Mọi biến hoặc hàm được thay đổi trong file đó sẽ được giữ lại và áp dụng ngay lập tức cho cửa sổ dòng lệnh bạn đang mở.

Cú pháp lệnh source
Bạn có thể sử dụng lệnh source theo hai cách (cả hai đều có tác dụng như nhau):
source filename [arguments]
# HOẶC
. filename [arguments]Trong đó:
- filename: Đường dẫn đến file chứa các lệnh script bạn muốn chạy.
- arguments (Tùy chọn): Các tham số truyền vào file script nếu cần.
Lưu ý
Có khoảng trắng giữa dấu chấm và tên file.
Các trường hợp sử dụng lệnh source trong Linux
Dưới đây là các trường hợp phổ biến nhất mà bạn cần dùng đến source:
- Cập nhật cấu hình nhanh: Lệnh source cho phép cập nhật nhanh chóng các thay đổi trong file cấu hình Shell mà không cần tốn thời gian đăng xuất hay khởi động lại máy.
- Quản lý biến môi trường: Sử dụng lệnh source giúp các biến được khai báo trong script tiếp tục tồn tại và có hiệu lực trong phiên làm việc hiện tại, thay vì bị hủy bỏ ngay khi script kết thúc như cách chạy thông thường.
- Kích hoạt môi trường ảo: Rất phổ biến với lập trình viên Python để kích hoạt môi trường làm việc riêng biệt (ví dụ: s
ource venv/bin/activate). - Import thư viện/hàm: Bạn có thể dùng lệnh source để nạp các biến hoặc hàm từ một file script này vào một file script khác để tái sử dụng code.

Ví dụ áp dụng lệnh source thực tế
Nạp lại file cấu hình .bashrc
Thông thường sau khi chỉnh sửa file .bashrc, bạn phải đăng xuất và đăng nhập lại để thay đổi có hiệu lực. Với lệnh source, bạn có thể áp dụng thay đổi ngay sau đó bằng lệnh dưới đây:
source ~/.bashrcSử dụng cú pháp dấu chấm .
Đây là cách viết tắt phổ biến, hoàn toàn tương đương với lệnh source nhưng ngắn gọn hơn. Bạn thực thi bằng lệnh dưới đây:
. ~/.bashrcThiết lập biến môi trường
Giả sử bạn có file setenv.sh với nội dung định nghĩa một biến như sau:
#!/bin/bash
export MY_NAME="vietnix"Sau đó, bạn chạy bằng source với cú pháp như sau:
source setenv.sh
echo $MY_NAMEKết quả là biến MY_NAME sẽ được in ra màn hình và tiếp tục tồn tại trong phiên làm việc này.

Lưu ý
Nếu bạn chạy bằng ./setenv.sh, biến MY_NAME sẽ bị hủy ngay khi script chạy xong vì biến này chỉ tồn tại trong Sub-shell.
Chia sẻ hàm giữa các script
Giả sử bạn có file functions.sh chứa hàm dùng chung như sau:
greet() {
echo "Hello from shared function!"
}Trong script chính hoặc trên terminal, bạn nạp file này vào bằng cú pháp sau:
source functions.sh
greetKết quả hiển thị như sau:

Kích hoạt Python Virtual Environment
Đây là trường hợp sử dụng kinh điển nhất của các lập trình viên Python. Để kích hoạt môi trường ảo, bạn bắt buộc phải dùng source để thay đổi đường dẫn python trong shell hiện tại:
source venv/bin/activateSau khi kích hoạt, dấu nhắc lệnh thay đổi, xuất hiện (venv) ở đầu dòng để báo hiệu môi trường ảo đã được bật, ví dụ: (venv) user@linux:~$.
Lưu ý
Nếu bạn dùng ./venv/bin/activate, môi trường ảo sẽ chỉ bật lên trong một giây rồi tắt ngay lập tức.
Phân biệt source và ./script.sh
Hiểu rõ sự khác biệt giữa hai cách chạy này là rất quan trọng để tránh lỗi logic trong quản trị hệ thống.
| Đặc điểm | source script.sh | ./script.sh (hoặc bash script.sh) |
|---|---|---|
| Cơ chế thực thi | Chạy trong Shell hiện tại. | Tạo ra một Sub-shell mới để chạy. |
| Biến môi trường | Các biến/hàm được tạo ra sẽ được giữ lại sau khi script kết thúc. | Các biến/hàm sẽ bị hủy ngay khi script kết thúc. |
| Quyền hạn | Cần quyền đọc (Read – r). | Chỉ ảnh hưởng bên trong script đó. |
| Tác động môi trường | Ảnh hưởng trực tiếp đến terminal đang dùng. | Không ảnh hưởng đến môi trường của Shell cha. |
| Mục đích chính | Load cấu hình, kích hoạt môi trường, import hàm. | Chạy các chương trình, công cụ, script cài đặt độc lập. |
Ví dụ minh họa: Giả sử bạn có file test.sh chứa nội dung: export NAME=”Linux”
- Nếu chạy source test.sh: Sau đó bạn gõ
echo $NAME, kết quả sẽ hiện ra Linux. - Nếu chạy ./test.sh: Sau đó bạn gõ
echo $NAME, kết quả sẽ là trống rỗng (vì biến NAME đã biến mất cùng với sub-shell).
Câu hỏi thường gặp
Khi nào bắt buộc nên dùng source thay vì ./script.sh?
Khi script của bạn thay đổi biến môi trường và bạn cần những thay đổi đó tồn tại trong chính phiên shell hiện tại, bạn nên dùng source (hoặc dấu chấm .) thay vì chạy bằng ./script.sh. Nếu chạy bằng ./script.sh, script sẽ chạy trong một subshell riêng, nên mọi biến thiết lập bên trong sẽ mất đi ngay sau khi script kết thúc.
source có thể nhận tham số như khi chạy script bình thường không?
Câu trả lời là có, cú pháp đầy đủ là source filename arg1 arg2 …; các tham số này sẽ được gán vào các biến vị trí như “$1”, “$2” bên trong file giống như khi bạn thực thi script thông thường. Khác biệt là toàn bộ phần thân script và cả việc xử lý tham số sẽ diễn ra trong shell hiện tại, nên script có thể vừa đọc tham số, vừa sửa đổi môi trường của phiên làm việc đang mở.
Việc dùng source có rủi ro bảo mật gì cần lưu ý không?
Vì source thực thi nội dung file trực tiếp trong shell hiện tại, mọi lệnh độc hại trong file sẽ có toàn quyền trên phiên làm việc của bạn, bao gồm ghi đè alias, hàm, biến môi trường hoặc thay đổi PATH để trỏ tới các binary không an toàn. Do đó, bạn chỉ nên source các file cấu hình hoặc thư viện script từ nguồn tin cậy và đặt quyền truy cập hợp lý.
Sử dụng source trong script lớn có ảnh hưởng gì đến hiệu năng và khả năng bảo trì không?
Về hiệu năng, chi phí của source thường rất nhỏ vì không tạo tiến trình mới, nhưng nếu bạn source nhiều file nặng hoặc lồng nhau quá sâu trong vòng lặp, thời gian parse và thực thi có thể tăng đáng kể.
Về mặt bảo trì, việc chia nhỏ hàm và biến dùng chung vào các file thư viện rồi source ở những script cần dùng sẽ giúp cấu trúc dự án shell script rõ ràng hơn, miễn là bạn tổ chức đường dẫn, đặt tên file và tài liệu hóa nơi các hàm được định nghĩa một cách nhất quán.
Lệnh source trong Linux là công cụ giúp quản trị viên tương tác trực tiếp với môi trường Shell hiện hành, thường được người dùng sử dụng khi làm việc với các file cấu hình hoặc khi xây dựng các thư viện hàm dùng chung cho hệ thống automation script. Do đó, việc nắm vững cách sử dụng lệnh source giúp bạn kiểm soát dữ liệu và biến môi trường một cách chính xác và hiệu quả hơn.




