Jawaban:
Di Linux, UNIX dan sistem operasi terkait, .
menunjukkan direktori saat ini. Karena Anda ingin menjalankan file di direktori Anda saat ini dan direktori itu tidak ada di Anda $PATH
, Anda perlu ./
bit untuk memberi tahu shell di mana executable berada. Jadi, ./foo
berarti menjalankan executable yang disebut foo
yang ada di direktori ini.
Anda dapat menggunakan type
atau which
untuk mendapatkan path lengkap dari semua perintah yang ditemukan di $PATH
.
alias
es yang bisa menghalangi, bukan hanya $PATH
.
.
terlebih dahulu maka itu akan menjadi masalah keamanan, Anda atau orang lain dapat menggantikan ls
misalnya (virus / trojen sederhana: membuat file zip dengan executable bernama ls
di dalamnya, ketika seseorang mencari melalui , mereka menjalankan executable ini, itu ...). Jika itu dicari .
terakhir maka Anda bisa menghabiskan waktu lama menjadi gila tidak tahu mengapa program Anda tidak bekerja (misalnya Anda membuat program yang disebut tes, alih-alih menjalankan program Anda, ia menjalankan program pengujian sistem. Yang tidak menghasilkan output).
export PATH="$PATH:."
untuk mengeksekusi perintah dalam direktori saat ini jika tidak ditemukan di tempat lain di PATH, Anda dapat menambahkan ini dalam file .bashrc Anda
Jawaban literalnya adalah seperti yang diberikan orang lain: karena direktori saat ini tidak ada di Anda $PATH
.
Tapi mengapa? Singkatnya, ini untuk keamanan. Jika Anda mencari di direktori home orang lain (atau / tmp), dan ketikkan saja gcc
atau ls
, Anda ingin tahu Anda menjalankan yang asli, bukan versi jahat yang ditulis teman iseng Anda yang menghapus semua file Anda. Contoh lain adalah test
atau [
, yang mungkin mengesampingkan perintah-perintah itu di skrip shell, jika shell Anda tidak memiliki itu sebagai built-in.
Memiliki .
sebagai entri terakhir di jalur Anda sedikit lebih aman, tetapi ada serangan lain yang memanfaatkannya. Yang mudah adalah dengan mengeksploitasi kesalahan ketik umum, seperti sl
atau ls-l
. Atau, temukan perintah umum yang kebetulan tidak diinstal pada sistem ini - vim
, misalnya, karena sysadmin berkemungkinan di atas rata-rata untuk mengetikkannya.
PATH
variabel lingkungan.
Jika maksud Anda, mengapa Anda perlu ./ pada awalnya - itu karena (tidak seperti di Windows), direktori saat ini bukan bagian dari jalur Anda secara default. Jika Anda menjalankan:
$ ls
shell Anda mencari ls
di direktori dalam variabel lingkungan PATH Anda ( echo $PATH
untuk melihatnya), dan menjalankan executable pertama yang disebutnya ls
. Jika Anda mengetik:
$ a.out
shell akan melakukan hal yang sama - tetapi mungkin tidak akan menemukan executable yang disebut a.out. Anda perlu memberi tahu shell di mana a.out berada - itu ada di direktori saat ini (.) Maka pathnya adalah ./a.out
.
Jika Anda bertanya mengapa ini disebut "a.out", itu hanya nama file output default untuk gcc. Anda dapat mengubahnya dengan arg baris perintah -o. Sebagai contoh:
$ gcc test.c -o test
$ ./test
touch .a.out; ls -lA
lihat ini.)
<dir>/<file>
jadi Anda pada dasarnya mengatakan mengeksekusi file dalam direktori saat ini, yang ditunjukkan oleh./test
Anda dapat mencoba menambahkan :.
ke variabel $ PATH Anda.
Coba ALT + F2 dan ketik: gksudo gedit /etc/environment
if menjalankan Linux / GTK (ini adalah apa yang Anda miliki jika menggunakan Ubuntu).
NAMUN, saya sangat menyarankan Anda untuk tidak melakukannya. Ini buruk, buruk, buruk.
Anda tahu, hal-hal semacam itu berfungsi seperti ini sejak tahun 1970. Ada alasan mengapa direktori saat ini tidak termasuk dalam $ PATH.
.
adalah direktori saat ini
.something
akan menjadi file tersembunyi (Ketik "ALT +" untuk membuatnya muncul di Nautilus, atau coba " ls -la
".
./someProgram.sh
adalah apa yang Anda ketik untuk MENJALANKAN someProgram.sh yang dapat dieksekusi di direktori saat ini.
.somethingElse
berarti Anda memiliki executable tersembunyi di direktori saat ini, yang merupakan ide yang buruk.
./command_name
untuk mengeksekusi perintah di linux?"