Mengapa kita menggunakan ./filename
untuk mengeksekusi file di linux?
Mengapa tidak memasukkan saja seperti perintah lain gcc
, ls
dll ...
command-line
executable
Renjith G
sumber
sumber
./command_name
untuk mengeksekusi perintah di linux?"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 disebutfoo
yang ada di direktori ini.Anda dapat menggunakan
type
atauwhich
untuk mendapatkan path lengkap dari semua perintah yang ditemukan di$PATH
.sumber
alias
es yang bisa menghalangi, bukan hanya$PATH
..
terlebih dahulu maka itu akan menjadi masalah keamanan, Anda atau orang lain dapat menggantikanls
misalnya (virus / trojen sederhana: membuat file zip dengan executable bernamals
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 AndaJawaban 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
atauls
, Anda ingin tahu Anda menjalankan yang asli, bukan versi jahat yang ditulis teman iseng Anda yang menghapus semua file Anda. Contoh lain adalahtest
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, sepertisl
atauls-l
. Atau, temukan perintah umum yang kebetulan tidak diinstal pada sistem ini -vim
, misalnya, karena sysadmin berkemungkinan di atas rata-rata untuk mengetikkannya.sumber
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:
shell Anda mencari
ls
di direktori dalam variabel lingkungan PATH Anda (echo $PATH
untuk melihatnya), dan menjalankan executable pertama yang disebutnyals
. Jika Anda mengetik: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:
sumber
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.sumber