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, ./fooberarti menjalankan executable yang disebut fooyang ada di direktori ini.
Anda dapat menggunakan typeatau whichuntuk mendapatkan path lengkap dari semua perintah yang ditemukan di $PATH.
aliases yang bisa menghalangi, bukan hanya $PATH.
.terlebih dahulu maka itu akan menjadi masalah keamanan, Anda atau orang lain dapat menggantikan lsmisalnya (virus / trojen sederhana: membuat file zip dengan executable bernama lsdi 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 gccatau ls, Anda ingin tahu Anda menjalankan yang asli, bukan versi jahat yang ditulis teman iseng Anda yang menghapus semua file Anda. Contoh lain adalah testatau [, 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 slatau ls-l. Atau, temukan perintah umum yang kebetulan tidak diinstal pada sistem ini - vim, misalnya, karena sysadmin berkemungkinan di atas rata-rata untuk mengetikkannya.
PATHvariabel 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 lsdi direktori dalam variabel lingkungan PATH Anda ( echo $PATHuntuk 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 -lAlihat 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/environmentif 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
.somethingakan 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_nameuntuk mengeksekusi perintah di linux?"