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 $PATH
ihtiyacın ./
var. Yani, bu dizinde ./foo
adı verilen çalıştırılabilir dosyayı çalıştırın foo
.
Sizde bulunan komutların tam yolunu bulmak için type
veya tuşunu kullanabilirsiniz .which
$PATH
alias
Sadece 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: ls
iç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 gcc
veya 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ı test
ya [
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, sl
ya 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.
PATH
ortam 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 ls
PATH ortam değişkeninizdeki dizinleri arar ( echo $PATH
görmek için) ve ls
bulduğ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 -lA
gö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/environment
Linux / 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
.something
Gizli 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_name
bir komut uygulamak için neden kullanıyoruz ?" Olarak yazılmıyor mu?