Sự khác biệt giữa tên tệp và ./filename trong Linux


Câu trả lời:


18

Đối với các tệp dữ liệu, nó không tạo ra sự khác biệt - cả hai câu lệnh sẽ tham chiếu tệp dữ liệu trong thư mục hiện tại của bạn. (Ví dụ, cat filenamecat ./filenamegiống hệt nhau về mặt ngữ nghĩa.)

Đó là một câu chuyện khác nếu tên tệp trong câu hỏi đề cập đến một tệp thực thi , nghĩa là thứ đầu tiên (hoặc thậm chí duy nhất) bạn nhập vào dòng lệnh. ./filenamesẽ tìm kiếm tệp thực thi trong thư mục hiện tại của bạn và không ở đâu khác. filenamemặt khác, sẽ đánh giá biến môi trường PATHvà tìm kiếm filenametrong mọi thư mục được lưu trữ trong đó (có thể bao gồm hoặc không bao gồm thư mục hiện tại của bạn).

./filename(hoặc bất kỳ thứ gì khác /path/to/filename) vì thế được ưu tiên khi bạn muốn thực thi một tệp thực thi cụ thể , chứ không phải cái đầu tiên được tìm thấy trong PATH của bạn.


6

Nếu bạn đang chạy một chương trình, hãy filenamenói chạy chương trình đầu tiên được tìm thấy trong chương trình của bạn $PATHvà chương trình thứ hai nói sẽ chạy chương trình trong thư mục hiện tại.

Nếu bạn đang sử dụng tên tệp đó làm đối số cho một chương trình như trong do_something filenamehoặc do_something ./filenamesau đó chúng có nghĩa tương tự.


5

Bạn đang đề cập đến thực thi lệnh, phải không?

Có một biến môi trường PATHcó chứa một số thư mục hệ thống, được phân định bằng dấu chấm phẩy. Khi bạn gõ commandhệ thống sẽ tìm trong các thư mục này theo thứ tự chúng được chỉ định để tìm tệp thực thi có tên <lệnh> Nếu tìm thấy nó, nó sẽ cố gắng thực thi nó. Bạn có thể thấy PATH của bạn thông qua echo $PATHbash. Ví dụ:

$ echo $ PATH
/ sbin: / bin: / usr / sbin: / usr / bin: / usr / games: / usr / local / sbin: / usr / local / bin: / home / ivanatora / bin: / usr / local / kde4 / bin: / usr / local / kde4 / bin

Khi bạn nhập, ./filenamebạn đang chỉ định đường dẫn chính xác: thư mục hiện tại. Bạn có thể thấy rằng thư mục hiện tại hiếm khi nằm trong $ PATH của bạn (vì lý do bảo mật). Vì vậy, nếu bạn muốn thực thi một tập tin từ thư mục hiện tại, bạn sử dụng ./filename.

Để thực thi một tệp theo đường dẫn của nó (đặc biệt nếu nó không nằm trong $ PATH), bạn cũng có thể nhập <path>/file, như:

/ sbin / ifconfig


3

Bảo mật thực thi là lý do chính cho sự khác biệt này.

Bạn không muốn . (hiện tại thư mục làm việc hoặc PWD) trong đường dẫn của bạn vì ai đó có thể trojan http://en.wikipedia.org/wiki/Trojan_horse_%28computing%29 một thực thi quan trọng như ps hoặc ls, trong PWD của bạn và đánh lừa bạn bằng cách trình bày dữ liệu xấu.


1

Nó phụ thuộc vào hoàn cảnh bạn đang sử dụng nó như thế nào.

Như một đối số, ví dụ "tên tệp chương trình", sau đó tùy thuộc vào chương trình, nhưng nhìn chung chúng giống hệt nhau.

Là một tên chương trình, ví dụ "đối số tên tệp", sau đó "đối số tên tệp" sẽ tìm kiếm PATH để tìm nhị phân, trong khi "./filename đối số" sẽ sử dụng chương trình trong thư mục hiện tại. Điều này rõ ràng là hữu ích nếu. không phải trong PATH, nhưng nó cũng hữu ích khi sử dụng cái này ngay cả khi. là trong đường dẫn, có lẽ bởi vì nó phù hợp với một mục trước đó.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.