Apa perbedaan antara filename
dan ./filename
? Dalam keadaan apa salah satu lebih disukai dari yang lain?
Untuk datafile, itu tidak membuat perbedaan - kedua pernyataan akan mereferensikan file data di direktori Anda saat ini. (Misalnya, cat filename
dan cat ./filename
secara 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. ./filename
akan 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 filename
di 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.
Jika Anda menjalankan program, filename
katakan untuk menjalankan yang pertama ditemukan di Anda $PATH
dan 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 filename
atau do_something ./filename
kemudian mereka berarti hal yang sama.
Anda mengacu pada eksekusi perintah, bukan?
Ada variabel lingkungan PATH
yang berisi beberapa direktori sistem, dibatasi oleh titik koma. Ketika Anda mengetik command
sistem, 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 $PATH
dalam 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, ./filename
Anda 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
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.
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.