Việc lấy absolute path (đường dẫn tuyệt đối) của một file trong Linux là bước quan trọng để đảm bảo mọi thao tác với file luôn chính xác, không phụ thuộc vào thư mục làm việc hiện tại và tránh nhầm lẫn giữa các đường dẫn tương đối. Bài viết sẽ giới thiệu chi tiết các lệnh và kỹ thuật thông dụng để xử lý absolute path trong Linux, giúp việc viết script và quản trị hệ thống trở nên an toàn, ổn định hơn.
Những điểm chính
- Khái niệm Absolute Path: Hiểu rõ Absolute Path là đường dẫn mô tả vị trí file độc lập với thư mục làm việc hiện tại, giúp bạn nắm vững nền tảng để xác định chính xác vị trí tài nguyên.
- Khái niệm Relative Path: Hiểu rõ Relative Path là đường dẫn xác định vị trí file dựa trên thư mục hiện tại, giúp bạn linh hoạt di chuyển giữa các thư mục trong cùng một dự án.
- So sánh: Phân biệt rõ sự khác biệt giữa Absolute Path và Relative Path về độ dài, tính linh hoạt và khả năng bảo trì, giúp bạn lựa chọn đúng loại đường dẫn cho từng tình huống cụ thể.
- Lý do cần thiết: Biết được tại sao nên ưu tiên sử dụng đường dẫn tuyệt đối, giúp bạn tránh các lỗi phổ biến và tăng tính ổn định cho các tác vụ tự động hóa.
- Các cách lấy đường dẫn: Nắm vững 6 cách chính bằng các lệnh như readlink, realpath, find, giúp bạn lựa chọn công cụ phù hợp nhất cho từng tình huống cụ thể.
- So sánh các phương pháp: Phân biệt rõ ưu và nhược điểm của từng phương pháp, giúp bạn đưa ra lựa chọn tối ưu khi cần lấy đường dẫn tuyệt đối trong các kịch bản khác nhau.
- Câu hỏi thường gặp: Được giải đáp các thắc mắc về cách lấy đường dẫn tuyệt đối khi đang đứng trong thư mục chứa file và lý do nên ưu tiên sử dụng trong script, giúp củng cố kiến thức và làm rõ các vấn đề thực tế.
Absolute path là gì?
Absolute path (đường dẫn tuyệt đối) là một địa chỉ đầy đủ và duy nhất dùng để xác định chính xác vị trí của một tệp (file) hoặc thư mục (directory) trên hệ thống, bắt đầu từ thư mục gốc (/). Đường dẫn tuyệt đối luôn mở đầu bằng dấu gạch chéo / và không bị ảnh hưởng bởi thư mục hiện tại mà bạn đang đứng trong terminal.
Ví dụ: /home/user/document.txt là đường dẫn tuyệt đối đến file document.txt.

Relative path là gì?
Relative path (đường dẫn tương đối) là cách xác định vị trí file hoặc thư mục dựa trên thư mục làm việc hiện tại (pwd), thay vì bắt đầu từ thư mục gốc (/). Cách viết này giúp câu lệnh ngắn gọn và dễ sử dụng hơn, chẳng hạn dùng cd documents thay cho /home/user/documents. Đường dẫn tương đối thường kết hợp ký hiệu . (thư mục hiện tại) và .. (thư mục cha) để di chuyển giữa các thư mục.

So sánh Absolute path với Relative path
| Tiêu chí | Relative path | Absolute path |
|---|---|---|
| Độ dài và cấu trúc | Thường ngắn, mô tả đường đi từ thư mục hiện tại đến file hoặc thư mục cần truy cập. | Thường dài hơn, bao gồm đầy đủ phần gốc hệ thống file hoặc tên miền |
| Tính tiện lợi và linh hoạt | Phù hợp khi các file, thư mục chỉ xoay quanh cùng một dự án, không phụ thuộc tên miền nên thuận tiện khi di chuyển, sắp xếp lại cấu trúc dự án. | Thích hợp khi cần trỏ đến tài nguyên cố định hoặc bên ngoài website, nhưng kém linh hoạt nếu thay đổi tên miền hoặc cấu trúc hệ thống. |
| Quản lý và bảo trì | Dễ bảo trì trong dự án lớn, không cần chỉnh sửa lại khi chuyển dự án sang máy chủ khác hoặc thay đổi cấu trúc thư mục nội bộ. | Khó bảo trì nếu tên miền hay cấu trúc thư mục thay đổi, vì phải rà soát và cập nhật lại từng đường dẫn tuyệt đối. |
Tại sao phải lấy đường dẫn tuyệt đối file Linux?
Trong Linux, việc dùng đường dẫn tuyệt đối giúp xác định chính xác vị trí file hoặc thư mục, không phụ thuộc vào thư mục làm việc hiện tại, từ đó tránh nhầm lẫn giữa các file trùng tên ở nhiều vị trí khác nhau. Đây là yếu tố quan trọng trong các tác vụ tự động hóa và script shell, vì absolute path đảm bảo lệnh luôn trỏ đúng tài nguyên cần xử lý, nâng cao tính ổn định và độ tin cậy cho toàn bộ quy trình làm việc.

Chuẩn bị môi trường thực hành xác định Absolute path trong Linux
Chuẩn bị môi trường thực hành giúp bạn dễ dàng theo dõi, thử lại và kiểm chứng từng ví dụ về đường dẫn trong Linux một cách trực quan.
Bước 1: Mở Terminal
Khởi động một cửa sổ Terminal mới để bắt đầu thao tác.
Bước 2: Thiết lập thư mục làm việc
mkdir my_linux_files
cd my_linux_filesLúc này, bạn đang đứng trong thư mục my_linux_files, thư mục này sẽ được dùng làm điểm xuất phát cho toàn bộ ví dụ bên dưới.
Bước 3: Tạo một file cơ bản
Tạo một file rỗng có tên file.txt. Sau khi thực hiện lệnh, hệ thống sẽ xác nhận rằng file đã được tạo thành công.

Bước 4: Tạo liên kết tượng trưng (Symbolic Link)
Liên kết tượng trưng (symlink) là khái niệm rất phổ biến trong Linux, mình sẽ tạo một symlink trỏ đến file.txt để quan sát cách các lệnh xử lý loại liên kết này.
ln -s file.txt symlink_to_file.txt
Sau bước này, bạn sẽ có hai đối tượng: file.txt và symlink_to_file.txt (liên kết trỏ tới file.txt).
Bước 5: Thiết lập cấu trúc thư mục lồng nhau
Để minh họa việc làm việc với các đường dẫn phức tạp hơn, mình sẽ tạo thêm một thư mục con và một file nằm bên trong thư mục đó.
mkdir sub_folder
touch sub_folder/another_file.log
Sau khi hoàn tất, cấu trúc thư mục hiện tại của bạn sẽ được tổ chức theo dạng lồng nhau rõ ràng.

Hướng dẫn cách lấy Absolute path một file trong Linux
Dưới đây là 6 phương pháp chính được sử dụng để xác định đường dẫn tuyệt đối của một file trong môi trường Linux:
Sử dụng lệnh readlink
Lệnh readlink là công cụ quan trọng để xác định đích đến thực của các liên kết tượng trưng và hiển thị đường dẫn chuẩn tắc của một file trong Linux. Điều này đặc biệt hữu ích khi cần giải quyết symlink về đường dẫn vật lý cuối cùng trước khi xử lý file hoặc thư mục. Cú pháp cơ bản:
readlink -f <tên_file>Trong đó, tùy chọn -f (canonicalize) yêu cầu readlink xử lý toàn bộ đường dẫn và trả về phiên bản đã được chuẩn hóa hoàn toàn. Khi sử dụng tùy chọn này, readlink sẽ theo dõi mọi liên kết tượng trưng trên đường đi, loại bỏ các thành phần . (thư mục hiện tại) và .. (thư mục cha), sau đó in ra đường dẫn tuyệt đối cuối cùng của file hoặc thư mục cần kiểm tra.
Minh họa thực tế:
- Đối với file gốc file.txt:

Kết quả sẽ là đường dẫn tuyệt đối tuyệt đối của file.txt.
- Đối với liên kết tượng trưng symlink_to_file.txt:

Kết quả cũng sẽ là đường dẫn tuyệt đối của file đích mà symlink trỏ tới. Điều này minh họa khả năng theo dõi các liên kết của readlink.
readlink -f là lựa chọn phù hợp khi bạn cần đường dẫn thực tế, không bị ảnh hưởng bởi các liên kết tượng trưng hoặc đường dẫn tương đối. readlink -f sẽ đảm bảo tính chính xác tuyệt đối về vị trí vật lý của tài nguyên.
Sử dụng lệnh realpath
Lệnh realpath được dùng để in ra đường dẫn tuyệt đối đã được chuẩn hóa (canonicalized absolute pathname), phù hợp cho các tình huống cần độ nhất quán cao về đường dẫn. Khi thực thi, realpath xử lý toàn bộ các thành phần . và .. cùng với các liên kết tượng trưng trên đường đi, từ đó tạo ra một đường dẫn rõ ràng, gọn gàng và không còn symlink hay thành phần dư thừa. Cú pháp cơ bản:
realpath <tên_file_hoặc_đường_dẫn>Minh họa thực tế:
- Đối với file gốc file.txt:

- Đối với liên kết tượng trưng symlink_to_file.txt:

Giống với readlink -f, kết quả bên trên cũng sẽ là đường dẫn tuyệt đối của file đích.
- Đối với file trong thư mục con:

realpath thường được xem là công cụ hiện đại và toàn diện hơn so với readlink -f khi dùng để chuẩn hóa đường dẫn, đặc biệt trên các phiên bản Linux mới. Công cụ này cung cấp một giải pháp “tất cả trong một”, giúp trả về đường dẫn tuyệt đối đầy đủ, rõ ràng và đã được xử lý chính xác.
Sử dụng lệnh dirname
Lệnh dirname có chức năng trích xuất phần thư mục (directory portion) từ một đường dẫn file hoặc thư mục được cung cấp, giúp tách riêng phần đường dẫn chứa file khỏi tên file cụ thể. Mặc dù lệnh này không trực tiếp trả về đường dẫn tuyệt đối của file, dirname vẫn là công cụ quan trọng trong việc phân tích cú pháp đường dẫn và thường được kết hợp với các lệnh khác để xây dựng đường dẫn tuyệt đối. Cú pháp cơ bản:
dirname <đường_dẫn_file_hoặc_thư_mục>Minh họa thực tế:
- Đối với tệp file.txt (nằm trong thư mục hiện tại):

Kết quả sẽ là ., biểu thị thư mục hiện hành.
- Đối với file trong thư mục con another_file.log:

Kết quả sẽ là: sub_folder.
- Khi áp dụng cho một đường dẫn tuyệt đối:

Kết quả: /home/user/documents.
dirname là công cụ cơ bản nhưng rất quan trọng trong nhóm lệnh phục vụ xử lý chuỗi đường dẫn trên Linux. Lệnh này đặc biệt hữu ích khi cần thao tác hoặc trích xuất phần thư mục từ một đường dẫn đã biết và thường được dùng kết hợp với các lệnh khác để xây dựng đường dẫn hoàn chỉnh.
Kết hợp các lệnh basename và dirname
Việc kết hợp basename và dirname cho phép phân tách một đường dẫn thành hai phần cơ bản: tên tệp và thư mục chứa tệp. Cách làm này có thể cần nhiều bước hơn, nhưng đổi lại mang đến khả năng kiểm soát chi tiết khi xây dựng lại đường dẫn tuyệt đối, đặc biệt phù hợp trong các script shell phức tạp:
- basename: Trích xuất tên tệp hoặc thư mục cuối cùng từ đường dẫn.
- dirname: Trích xuất phần thư mục của đường dẫn.
Minh họa thực tế:
- Trích xuất tên tệp của file.txt:

Đầu ra lệnh cho basename $(realpath file.txt): file.txt.
- Xây dựng đường dẫn tuyệt đối bằng script shell: Hãy cùng xây dựng một script shell đơn giản có tên file_path.sh để minh họa cách kết hợp hai lệnh này nhằm tự động hóa việc lấy đường dẫn tuyệt đối. Script sử dụng dirname để xác định thư mục chứa tệp, chuyển vào thư mục đó rồi dùng pwd -P lấy đường dẫn tuyệt đối, sau cùng ghép với phần tên tệp từ basename. Đầu tiên bạn cần sử dụng lệnh:
#!/bin/bash
echo "$(cd "$(dirname "$1")" && pwd -P)/$(basename "$1")"- Lưu nội dung trên vào tệp file_path.sh, sau đó cấp quyền thực thi:
chmod +x file_path.sh- Khi chạy script với file.txt làm đối số:
./file_path.sh file.txt
Lệnh sẽ trả về đường dẫn tuyệt đối tuyệt đối đến file.txt. Đây là một kỹ thuật phổ biến để chuyển đổi một đường dẫn tương đối thành đường dẫn tuyệt đối bên trong script.
Phương pháp này tuy không gọn như realpath hay readlink -f khi chỉ cần xử lý một tác vụ đơn lẻ, nhưng lại có tính linh hoạt rất cao. Đây là nền tảng cho nhiều tác vụ xử lý chuỗi đường dẫn phức tạp trong script shell, giúp nhà phát triển thao tác chính xác trên từng thành phần của đường dẫn khi cần tùy biến sâu.
Sử dụng lệnh find
Lệnh find hỗ trợ tìm kiếm tệp trong cây thư mục dựa trên nhiều tiêu chí khác nhau và có thể dùng để in ra đường dẫn tuyệt đối của các file khớp điều kiện. Cú pháp cơ bản:
find <thư_mục_bắt_đầu> -name "<tên_file>" -printTrong đó, tùy chọn -print đảm bảo mỗi tệp được tìm thấy sẽ được in ra với đường dẫn tuyệt đối trên đầu ra chuẩn.
Minh họa thực tế:
- Tìm tệp file.txt trong thư mục hiện tại ($PWD) và các thư mục con:

- Tìm tệp another_file.log trong thư mục hiện tại và các thư mục con:

- Để đảm bảo đường dẫn tuyệt đối và loại bỏ tiền tố ./, bạn hãy kết hợp với realpath:

Việc sử dụng print0 và xargs -0 là một kỹ thuật mạnh mẽ để xử lý an toàn các tên tệp chứa khoảng trắng hoặc ký tự đặc biệt.
find là lựa chọn phù hợp khi cần tìm kiếm file trong một cấu trúc thư mục lớn và đồng thời lấy về đường dẫn tuyệt đối của tệp đó. Sức mạnh của lệnh này thể hiện ở khả năng lọc và tìm kiếm theo nhiều điều kiện phức tạp, vượt xa việc chỉ dừng ở khâu chỉ định tên tệp thông thường.
Sử dụng lệnh ls
Lệnh ls là một trong những công cụ cơ bản dùng để liệt kê nội dung thư mục trong Linux. Mặc dù không phải lựa chọn chuyên biệt để lấy đường dẫn tuyệt đối của một file cụ thể, lệnh này vẫn có thể hỗ trợ xác định đường dẫn của các mục trong thư mục hiện tại khi kết hợp với pwd (in thư mục làm việc hiện tại). Cú pháp cơ bản:
ls -l <đường_dẫn_tệp>Tùy chọn -l hiển thị danh sách chi tiết với nhiều thông tin bổ sung về file và khi sử dụng cùng một đường dẫn tuyệt đối, đầu ra sẽ bao gồm tuyệt đối đường dẫn đến file đó.
Minh họa thực tế:
- Lấy đường dẫn tuyệt đối của file.txt:

Lưu ý
Đầu ra hiển thị lần lượt các thông tin về quyền truy cập, chủ sở hữu, nhóm, kích thước, thời điểm chỉnh sửa cuối cùng và sau cùng là đường dẫn tuyệt đối tới tệp.
Mặc dù ls không phải công cụ chuyên dùng để truy vấn đường dẫn tuyệt đối một cách độc lập, lệnh này vẫn giữ vai trò quan trọng khi cần kiểm tra sự tồn tại và các thuộc tính của tệp tại một đường dẫn xác định. Khi kết hợp cùng pwd để lấy thư mục làm việc hiện tại, người dùng có thể tự xây dựng đường dẫn tuyệt đối một cách thủ công, phục vụ hiệu quả cho các thao tác kiểm tra nhanh.
So sánh các cách lấy Absolute path trong Linux
| Lệnh | Ưu điểm | Nhược điểm | Ứng dụng tiêu biểu |
|---|---|---|---|
| readlink -f | Giải quyết triệt để symlink, chuẩn hóa đường dẫn, cú pháp đơn giản, hiệu quả cao. | Có thể không xuất hiện trên mọi môi trường Linux tối thiểu, dù vẫn rất phổ biến trong thực tế. | Xác định vị trí tệp gốc của symlink, chuẩn hóa đường dẫn đầu vào từ người dùng hoặc script. |
| realpath | Chuẩn hóa đường dẫn hoàn chỉnh, loại bỏ . .. và xử lý symlink, cú pháp dễ đọc. | Có thể cần cài đặt bổ sung trên một số hệ thống Linux phiên bản cũ. | Thay thế readlink -f trong kịch bản hiện đại, đảm bảo đường dẫn nhất quán trong hệ thống tự động. |
| dirname | Lệnh cơ bản, phổ biến, trích xuất chính xác phần thư mục từ đường dẫn. | Không trả về trực tiếp đường dẫn tuyệt đối của tệp, thường cần kết hợp với lệnh khác. | Phân tích cú pháp đường dẫn trong script, xây dựng đường dẫn đến thư mục cha. |
| basename + dirname | Kiểm soát chi tiết từng thành phần đường dẫn, linh hoạt khi viết script. | Cấu trúc phức tạp hơn cho tác vụ đơn giản, dễ phát sinh lỗi nếu không xử lý tốt khoảng trắng. | Xây dựng đường dẫn động, thao tác riêng lẻ với tên tệp và phần thư mục. |
| find | Tìm kiếm tệp mạnh trong cây thư mục lớn theo nhiều tiêu chí khác nhau. | Có thể chậm trên hệ thống tệp dung lượng lớn, đầu ra thường cần xử lý thêm để lọc đường dẫn tuyệt đối. | Định vị tệp chưa rõ vị trí và xử lý hàng loạt dựa trên điều kiện tìm kiếm. |
| ls | Có mặt trên hầu hết hệ thống Linux, hỗ trợ xem nhanh thông tin và thuộc tính tệp. | Không phải công cụ chuyên biệt để truy vấn đường dẫn tuyệt đối, đầu ra chứa nhiều thông tin phụ. | Kiểm tra nhanh vị trí và thuộc tính của tệp đã biết, xác minh đường dẫn trong thư mục hiện hành. |
Câu hỏi thường gặp
Làm sao lấy Absolute path khi đang đứng trong thư mục chứa file?
Bạn có thể dùng pwd để lấy đường dẫn thư mục hiện tại rồi ghép với tên file, ví dụ: echo “$(pwd)/file.txt” sẽ in ra absolute path của file.txt trong thư mục đang làm việc.
Có cách nào Absolute path mà không cần quan tâm đang ở thư mục nào?
Một cách phổ biến là dùng script dạng echo “$(cd “$(dirname “$1″)” && pwd -P)/$(basename “$1″)” và truyền đường dẫn tương đối vào, script sẽ trả về absolute path chính xác của file.
Tại sao khi viết shell script nên ưu tiên dùng đường dẫn tuyệt đối file?
Absolute path giúp lệnh trong script luôn trỏ đúng tệp cần xử lý, tránh phụ thuộc vào thư mục hiện tại hoặc cách script được gọi, nhờ đó giảm lỗi và làm cho script dễ tái sử dụng hơn.
Qua các ví dụ với readlink, realpath, dirname, basename, find và ls, có thể thấy việc lấy absolute path file Linux là bước quan trọng để xử lý file một cách an toàn và nhất quán. Khi luôn làm việc với absolute path, quy trình tự động hóa và script shell trở nên ổn định hơn, giảm sai sót do nhầm lẫn thư mục làm việc hoặc đường dẫn tương đối.




