Apa perbedaan antara nama file dan ./filename di Linux

10

Apa perbedaan antara filenamedan ./filename? Dalam keadaan apa salah satu lebih disukai dari yang lain?

tepat waktu
sumber

Jawaban:

18

Untuk datafile, itu tidak membuat perbedaan - kedua pernyataan akan mereferensikan file data di direktori Anda saat ini. (Misalnya, cat filenamedan cat ./filenamesecara semantik identik.)

Ini cerita yang berbeda jika nama file yang dimaksud merujuk pada yang dapat dieksekusi , yaitu hal pertama (atau bahkan satu-satunya) yang Anda ketikkan pada baris perintah. ./filenameakan mencari yang dapat dieksekusi di direktori Anda saat ini, dan tidak di tempat lain. filename, di sisi lain, akan mengevaluasi variabel lingkungan PATH, dan mencari filenamedi setiap direktori yang tersimpan di dalamnya (yang mungkin atau mungkin tidak termasuk direktori Anda saat ini).

./filename(atau yang lain /path/to/filename) dengan demikian disukai ketika Anda ingin mengeksekusi executable tertentu , bukan yang pertama kali ditemukan di PATH Anda.

DevSolar
sumber
6

Jika Anda menjalankan program, filenamekatakan untuk menjalankan yang pertama ditemukan di Anda $PATHdan yang kedua mengatakan untuk menjalankan yang ada di direktori saat ini.

Jika Anda menggunakan nama file itu sebagai argumen untuk suatu program seperti pada do_something filenameatau do_something ./filenamekemudian mereka berarti hal yang sama.

Dijeda sampai pemberitahuan lebih lanjut.
sumber
5

Anda mengacu pada eksekusi perintah, bukan?

Ada variabel lingkungan PATHyang berisi beberapa direktori sistem, dibatasi oleh titik koma. Ketika Anda mengetik commandsistem, lihatlah di direktori-direktori ini dalam urutan yang ditentukan untuk menemukan file yang dapat dieksekusi bernama <command> Jika menemukannya, ia mencoba untuk mengeksekusinya. Anda dapat melihat PATH Anda melalui echo $PATHdalam bash. Sebagai contoh:

$ 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

Saat Anda mengetik, ./filenameAnda menentukan jalur yang tepat: direktori saat ini. Anda dapat melihat bahwa direktori saat ini jarang ada dalam $ PATH Anda (untuk alasan keamanan). Jadi jika Anda ingin mengeksekusi file dari direktori saat ini, Anda gunakan ./filename.

Untuk mengeksekusi file dengan path-nya (terutama jika tidak dalam $ PATH) Anda juga dapat mengetik <path>/file, seperti:

/ sbin / ifconfig

Ivan Petrushev
sumber
3

Keamanan yang dapat dieksekusi adalah alasan utama untuk perbedaan ini.

Anda tidak ingin . (direktori kerja saat ini atau PWD) di jalur Anda karena seseorang dapat melakukan trojan http://en.wikipedia.org/wiki/Trojan_horse_%28computing%29 sebuah executable penting seperti ps atau ls, di PWD Anda dan menipu Anda dengan menyajikan data buruk.

bitbucket
sumber
1

Tergantung pada keadaan apa Anda menggunakannya.

Sebagai argumen, mis. "Nama file program", maka terserah program, tetapi umumnya identik.

Sebagai nama program, misalnya "argumen nama file", maka "argumen nama file" akan mencari PATH untuk menemukan biner, sementara "./filename argumen" akan menggunakan program di direktori saat ini. Ini jelas berguna jika. tidak ada dalam PATH, tetapi juga berguna untuk menggunakan yang ini meskipun. ada di jalur, mungkin karena cocok dengan entri sebelumnya.

gorila
sumber