Realpath Linux là lệnh dùng để chuyển đường dẫn tương đối hoặc có symlink thành đường dẫn tuyệt đối, đã được chuẩn hóa đầy đủ. Trong bài viết dưới đây, mình sẽ cùng bạn tìm hiểu về chức năng, các tùy chọn phổ biến cũng như hướng dẫn bạn cách sử dụng lệnh realpath chi tiết, hiệu quả qua các ví dụ cụ thể.
Những điểm chính
- Khái niệm: Hiểu rõ khái niệm và chức năng của
realpathtrong việc chuyển đổi đường dẫn tương đối thành tuyệt đối. - Các tùy chọn phổ biến: Nắm được bảng tra cứu nhanh các tùy chọn quan trọng như
-s,-mvà--relative-tođể xử lý đường dẫn linh hoạt. - Các ví dụ sử dụng thực tế: Thành thạo các kịch bản áp dụng
realpath, từ xác định đường dẫn, truy vết symlink đến tích hợp trong script deploy và xử lý file hàng loạt. - Lưu ý khi sử dụng: Nắm được các lưu ý quan trọng để sử dụng
realpathhiệu quả, so sánh vớireadlink -fvà cách xử lý lỗi. - Câu hỏi thường gặp: Giải đáp các thắc mắc thường gặp liên quan đến
realpathtrong Linux.
Realpath Linux là gì?
Realpath là lệnh dùng để chuyển đổi đường dẫn tương đối thành đường dẫn tuyệt đối, đồng thời xử lý các liên kết tượng trưng và loại bỏ các ký tự tham chiếu thư mục (như . hoặc ..). Nếu đường dẫn trỏ tới file hoặc thư mục không tồn tại, lệnh realpath sẽ không trả về kết quả và trả lỗi.

Trên vài hệ thống như AIX, MSYS2 hoặc môi trường tối giản, realpath có thể chưa được cài sẵn và bạn sẽ cần phải cài thêm gói phần mềm tương ứng thì mới có thể dùng được. Cú pháp của lệnh realpath như sau:
realpath <file_or_dir>Trong đó, <file_or_dir> là đường dẫn đến một file hoặc thư mục, có thể là tương đối hoặc tuyệt đối.
Giả sử bạn đang ở trong một thư mục bất kỳ và muốn lấy đường dẫn đầy đủ của file script, hãy thực hiện lệnh sau:
realpath ./myscript.shKết quả đầu ra sẽ là:
/home/user/myscript.shNhư vậy, dù đầu vào là đường dẫn tương đối (./myscript.sh), realpath luôn trả về full path bắt đầu từ root (/).
Các tùy chọn của lệnh realpath trong Linux
Cú pháp tổng quát của lệnh realpath như sau:
realpath [OPTION]... FILE...Lệnh realpath cung cấp các tùy chọn như:
| Tùy chọn | Mô tả | Ví dụ |
|---|---|---|
| -s, –strip | Không kiểm tra sự tồn tại của file, chỉ xử lý chuỗi ký tự. | realpath -s missing.txt |
| -m, –canonicalize-missing | Trả về đường dẫn tuyệt đối ngay cả khi file/thư mục đó không tồn tại. | realpath -m ./nofile.txt |
| –relative-to=DIR | Hiển thị đường dẫn tương đối tính từ thư mục đích. | realpath --relative-to=/home/user ./myscript.sh |
| –zero | Kết thúc dòng bằng ký tự NULL hay vì xuống dòng, tối ưu cho xargs. | realpath --zero ./*.txt |
5 ví dụ sử dụng thực tế của realpath
1. Xác định đường dẫn tuyệt đối
Để xác định được chính xác đường dẫn tuyệt đối, bạn thực thi lệnh sau đây:
realpath ./myscript.sh
Sau đó, hệ thống sẽ trả về đường dẫn đầy đủ dạng /home/user/myscript.sh, luôn bắt đầu từ /, giúp bạn biết chính xác vị trí file script và không bị phụ thuộc vào thư mục hiện tại mà bạn đang cd vào lúc chạy lệnh.
2. Truy vết file gốc từ Symbolic Link
Khi bạn có một symlink và cần biết chính xác Symbolic đang trỏ đến đâu để debug cấu hình, hãy thực thi lệnh sau:
ln -s /etc/nginx/nginx.conf ~/nginx.conf
realpath ~/nginx.confKết quả hiển thị sẽ cho bạn biết chính xác file cấu hình gốc nằm ở đâu.

3. Dùng trong script deploy
Trong các script CI/CD, việc sử dụng đường dẫn tương đối có thể gây lỗi nếu thư mục thực thi thay đổi. Do đó, bạn nên sử dụng realpath để chuẩn hoá và cố định đường dẫn tuyệt đối ngay từ đầu, giúp script luôn truy cập đúng tài nguyên bất kể đang được chạy từ ngữ cảnh nào:
# Lấy đường dẫn tuyệt đối của ./app để link luôn chính xác
APP_PATH=$(realpath ./app)
# Tạo/ghi đè symlink /var/www/current trỏ tới app
ln -sfn $APP_PATH /var/www/currentSau lệnh APP_PATH=$(realpath ./app), biến $APP_PATH sẽ chứa đường dẫn tuyệt đối. Khi tạo symlink /var/www/current, hệ thống sẽ luôn trỏ chính xác đến thư mục build này, bất kể bạn đang đứng ở thư mục nào khi chạy lệnh.

4. Xử lý file hàng loạt
Khi xóa hoặc xử lý danh sách file có chứa khoảng trắng hoặc ký tự đặc biệt, bạn có thể kết hợp realpath với tùy chọn --zero với cú pháp lệnh như sau:
ls *.txt | xargs realpath --zero | xargs -0 rmLúc này, lệnh realpath --zero sẽ chuyển đổi tên file sang đường dẫn tuyệt đối và ngăn cách bằng ký tự NULL. Sau đó, xargs -0 rm sẽ nhận đầu vào NULL-terminated để xóa chính xác file, tránh lỗi do khoảng trắng trong tên file.

5. Hiển thị path relative
realpath –relative-to giúp chuyển một đường dẫn tuyệt đối thành đường dẫn tương đối so với một thư mục gốc mà bạn chỉ định. Tính năng này hữu ích khi bạn cần giữ nguyên cấu trúc thư mục tương đối để đóng gói hoặc deploy sang môi trường khác:
realpath --relative-to=/home/user ./project/file.txtKết quả sẽ được hiển thị như sau:

Lưu ý khi sử dụng lệnh realpath
- So sánh với
readlink -f: Trước đây,readlink -fthường được sử dụng để giải quyết đường dẫn theo cách tương tự realpath. Tuy nhiên,realpathlà công cụ hiện đại, chuẩn hóa hơn và được khuyên dùng trên các hệ thống Linux mới. Nếu script cần chạy trên các hệ thống cũ, bạn có thể cân nhắc sẻ dụngreadlink -flàm phương án dự phòng. - Xử lý lỗi: Bạn hãy sử dụng
realpathở đầu script để chuẩn hóa các biến đường dẫn đầu vào, giúp tránh lỗi “No such file or directory” khi script thực hiện lệnhcdhoặc di chuyển file. - Kiểm tra file tồn tại: Nếu bạn chỉ muốn lấy đường dẫn tuyệt đối mà không quan tâm file đó có thực sự tồn tại trên ổ cứng hay không, hãy dùng cờ
-m.

Câu hỏi thường gặp
Sự khác biệt giữa realpath và readlink -f là gì?
Về chức năng cơ bản, realpath và readlink -f đều trả về đường dẫn tuyệt đối. Tuy nhiên:
– realpath: Là công cụ hiện đại, chuẩn hóa, hỗ trợ nhiều tính năng mạnh mẽ hơn như —relative-to hay xử lý file hàng loạt với --zero, thường được khuyến nghị sử dụng trên các hệ thống Linux mới.
– readlink -f: Là cách làm cũ trên một số hệ thống hư macOS/BSD, hành vi của readlink có thể khác biệt so với Linux, dẫn đến script thiếu tính tương thích.
Tôi muốn lấy đường dẫn tuyệt đối cho một file log chưa được tạo ra, nhưng realpath báo lỗi thì phải xử lý như thế nào?
Mặc định realpath sẽ kiểm tra sự tồn tại của file. Để bỏ qua bước kiểm tra này, bạn hãy thêm cờ (flag) -m với cú pháp lệnh như sau:realpath -m ./logs/future.logKết quả sẽ trả về full path ngay cả khi thư mục logs hoặc file future.log chưa tồn tại trên ổ đĩa.
realpath có xử lý được tên file chứa khoảng trắng không?
Có, nhưng bạn cần cẩn thận khi truyền kết quả sang lệnh khác. Để an toàn tuyệt đối khi xử lý file có khoảng trắng hoặc ký tự đặc biệt, bạn hãy dùng cờ –zero kết hợp với xargs -0.
Ví dụ: ls *.txt | xargs realpath --zero | xargs -0 rm
Cờ –zero dùng ký tự NULL để ngắt dòng thay vì ký tự xuống dòng, giúp hệ thống hiểu đúng tên file có dấu cách là một file duy nhất.
realpath đóng vai trò quan trọng trong việc đảm bảo tính chính xác của đường dẫn file trong hệ thống Linux. Việc thành thạo realpath kết hợp với xargs và ln sẽ giúp quy trình quản trị và deploy của bạn trở nên chuyên nghiệp và ít lỗi hơn. Chúc bạn thao tác với lệnh realpath thành công và hẹn gặp lại bạn trong các bài viết tiếp theo. Cảm ơn bạn đã theo dõi bài viết!




