Yanıtlar:
Linux'ta UNIX ve ilgili işletim sistemleri .mevcut dizini belirtir. Geçerli dizinde bir dosyayı çalıştırmak istediğin ve o dizinde olmadığına göre , kabuğun çalıştırılabilir olduğunu söylemek için bite $PATHihtiyacın ./var. Yani, bu dizinde ./fooadı verilen çalıştırılabilir dosyayı çalıştırın foo.
Sizde bulunan komutların tam yolunu bulmak için typeveya tuşunu kullanabilirsiniz .which$PATH
aliasSadece yoluna girmeyen eserler de var $PATH.
.Önce aranırsa , bir güvenlik sorunu ortaya çıkar, lsörneğin siz veya başkası değiştirebilir (örneğin, basit bir virüs / trojen: lsiçinde arama yapan bir zip dosyası hazırlayabilirsiniz) , bu yürütülebilir dosyayı çalıştırıyorlar, ki…). İçeri arama yaparsa .son o zaman (bunun yerine sistem test programı çalıştırır programınızı çalışan, örneğin test adlı bir program yapmak. Hiçbir çıktı üretir hangisi) program neden çalışmadığını deli bilmeden gidiş uzun zaman geçirebilirsiniz.
export PATH="$PATH:."
Kelimenin tam anlamıyla cevabı, diğerlerinin verdiği gibi: çünkü geçerli dizin sizin değil $PATH.
Ama neden Kısacası, güvenlik için. Başkasının ana dizinine (veya / tmp) bakıyorsanız ve sadece yazın gccveya ls, gerçek olanı çalıştırdığınızı bilmek istiyorsanız, şaka sahibi arkadaşınızın tüm dosyalarınızı silen yazdığı kötü amaçlı bir sürümü değil. Başka bir örnek olacağını testya [da kabuk yerleşik ins sıra bu yoksa, kabuk komut bu komutları geçersiz olabilir.
Having .olarak son yolunuzda girişi biraz daha güvenli, ama bu faydalanmak diğer saldırılar vardır. Kolay olan, slya da gibi ortak yazım hatalarından yararlanmaktır ls-l. Veya, bu sisteme yüklenmemiş olan ortak bir komut bulun - vimörneğin, sysadmins bunu yazmak için ortalamanın üzerinde bir olasılık olduğundan.
PATHortam değişkeninde mutlak yollar var .
Yani, niçin ihtiyaç duyduğunuza ihtiyaç duyuyorsunuz? / Başlangıçta - bunun nedeni (Windows'taki aksine), geçerli dizinin varsayılan olarak yolunuzun bir parçası olmamasıdır. Eğer koşarsan:
$ ls
kabuğunuz lsPATH ortam değişkeninizdeki dizinleri arar ( echo $PATHgörmek için) ve lsbulduğu ilk çalıştırılabilir dosyayı çalıştırır . Eğer yazarsanız:
$ a.out
Kabuk da aynı şekilde yapacaktır - fakat muhtemelen a.out adında bir çalıştırılabilir dosya bulamaz. Kabuğa a.out'un nerede olduğunu - o anki dizinde (.) Var ve sonra yol ./a.out.
Neden "a.out" dendiğini soruyorsanız, bu sadece gcc için varsayılan çıktı dosya adıdır. -O komut satırı argümanıyla değiştirebilirsiniz. Örneğin:
$ gcc test.c -o test
$ ./test
touch .a.out; ls -lAgörmeye çalışın .)
<dir>/<file>bu nedenle temel olarak geçerli dizinde bir dosyayı çalıştırdığınızı söylüyorsunuz./test
:.$ PATH değişkeninize eklemeyi deneyebilirsiniz .
ALT + F2'yi deneyin ve şunu yazın: gksudo gedit /etc/environmentLinux / GTK kullanıyorsanız (Ubuntu kullanıyorsanız bu var).
Ancak, bunu yapmamanızı şiddetle tavsiye ederim. Kötü kötü kötü ve kötü.
Bilirsin, bu tür şeyler 1970’ten beri böyle çalışır. Geçerli dizinin $ PATH’de bulunmamasının bir nedeni vardır.
. geçerli dizin
.somethingGizli bir dosya (Nautilus'ta görünmelerini sağlamak için "ALT +" yazın veya " ls -la" deneyin .
./someProgram.sh Geçerli dizinde bir çalıştırılabilir someProgram.sh çalıştırmak için yazdığınız şeydir.
.somethingElse Geçerli dizinde gizli bir yürütülebilir dosyaya sahip olduğunuz anlamına gelir, ki bu kötü bir fikirdir.
./command_namebir komut uygulamak için neden kullanıyoruz ?" Olarak yazılmıyor mu?