Unix konuşma kabuk komut dosyası ve yürütülebilir bir dosya arasındaki fark nedir?


Yanıtlar:


12

Yürütülebilir bir dosya, yürütülebilir bit kümesine sahip olan ve programın gerçek çalışmasında hatalar olsa bile herhangi bir dosyayı ifade eder.

Bir kabuk komut dosyası özeldir tipi kullanarak bir kabuk tarafından yorumlanması amaçlanmıştır yürütülebilir #!tercüman belirtmek için yönergesi.


12

Bir komut hangi bir dosyadır:

  • insan tarafından okunabilir (en azından makul eğitimli bir insana, yani dosya yazdırılabilir karakterlerden oluşur); ve
  • bir tercüman tarafından bir programın davranışını açıklayan talimatlar olarak anlaşılır .

Bir kabuk komut dosyası olan tercüman bir bir script kabuk . Unix dünyasında “kabuk”, Bourne kabuğuna benzeyen mermi ailesini ifade eder ; modern bu kabuklar (kül, bash, ksh, zsh,…) POSIX kabuk standardına uygundur. Daha genel olarak, “kabuk” kelimesi csh, tcsh, balık, vb. Gibi diğer komut yorumlayıcılarını içerebilir.


Bir yürütülebilir çalıştırılabilir herhangi dosyasıdır. Etkili bir şekilde yürütülebilir olması için bir dosyanın iki özelliğinin olması gerekir:

  • Kullanıcının yürütme iznine sahip olması gerekir. Bu komutla görülebilir ls -l: xkarakter izin sütununda bulunmalıdır.
  • Dosyanın formatı, sistemin yürütülebilir olarak tanıdığı bir format olmalıdır. Yürütülebilir biçimler birkaç kategoriye ayrılabilir:

    • İşletim sisteminin ikili yürütülebilir düzenine göre düzenlenmiş makine kodundan oluşan yerel yürütülebilir dosyalar. Çoğu modern unix sistemi , yerel yürütülebilir dosyaları için ELF formatını kullanır .
    • Kodlar. Yürütülebilir bir komut dosyası, iki karakterden oluşan ve bir dosya yolundan oluşan bir shebang satırıyla başlayan #!bir dosyadır. Böyle bir dosyayı yürütmek için çekirdek yorumlayıcı programını yürütür ve komut dosyasının yolunu bağımsız değişken olarak iletir.
    • Sisteme bağlı olarak muhtemelen diğer formatlar. Örneğin, Linux binfmt_misc özelliği aracılığıyla rasgele dosya formatları kaydedebilir . Bu, Java bayt kodu dosyalarının kayıtlı bir JVM aracılığıyla yürütülmesini , Windows yürütülebilir dosyalarının Wine aracılığıyla yürütülmesini sağlar .

Yürütülebilir olmanın sisteme bağlı olduğunu unutmayın. Örneğin, bir amd64 Linux ikili dosyası, bir amd64 Linux sisteminde yürütülebilir ancak 32 bit sistemde çalıştırılamaz. Android için bir ikili dosya normal bir Linux kurulumunda çalıştırılamaz. Bir Windows yürütülebilir dosyası yalnızca Wine varsa Linux'ta yürütülebilir. İle başlayan bir komut dosyası #!/usr/local/bin/rubyyalnızca adresinde bir program varsa yürütülebilir /usr/local/bin/ruby.


Kabuk betiği genellikle yürütülebilir. Ancak, yürütme izniniz yoksa, çalıştırılamaz olabilir. Yine de açık bir şekilde tercümana ileterek yorumlamasını sağlayabilirsiniz (örn. bash /path/to/script) - “yorumlansın” “uygula” demenin süslü bir yoludur.


2

Kabuk-komut dosyası:

Kabuk betiği, bir kabuk tarafından yorumlanacak bir komut dizisidir (Genellikle sh veya sh uyumlu bir kabuk, bazen başka bir kabuk).

Komut dosyası adı ".sh" veya ".bash" veya ".csh" vb. İle sonlandırılabilir, ancak bu zorunlu DEĞİLDİR (başlatılması gereken kabuğa ilişkin bir ipucu verir).

Anlaşılır olması için şunu söyleyeceğim: komut dosyası adının scriptve başlatılması gereken kabuğun olduğunu bash.

Kabukta başlatmanın tipik bir yolu şöyle olur: bash /absolute/path/to/the/scriptveya bash ./relative/path/to/the/script. Bu şekilde, çalıştırılabilir bitin ayarlanmasına gerek yoktur, çünkü yalnızca bash tarafından okunur ve içeriği çalıştırır.

Aynı yapabilirsiniz ayrıca ayarlanmalıdır + x (çalıştırılabilir) ile mevcut kabuk oturumu doğrudan başlatmak için izin vermek: / mutlak / / yol / / script (veya ./relative/path/to/the/script). Dikkat: varsayılan olarak, bu şekilde başlatıldığında, yazdığınız kabuk veya bir posix kabuğu aracılığıyla (davranış işletim sistemine bağlıdır) başlatılır , bu nedenle çalıştırılması gereken kabuk olmayabilir. Bu yüzden komut dosyasının ilk satırı olarak belirtebilirsiniz (ve belirtmelisiniz): #! / Path / to / good / shell, işletim sisteminize bu komut dosyasının gerçekten / path / to / good / shell tarafından başlatılması gerektiğini belirtir.

yürütülebilir:

Yürütülebilir dosya tarafından başlatılması gereken kullanıcı (lar) / grup (lar) için "x" biti ayarlanmış bir dosyadır. Genellikle bir "ikili" veya bir komut dosyası olabilir.

İpucu: file /some/filesize dosyanın içeriği hakkında daha fazla bilgi verebilir. Deneyin file /usr/bin/bashveya file /etc/profilebazı örnekleri görmek için.


Mevcut kabuğunuz tarafından çalıştırılan karmaşık olmayan komut dosyalarıyla ilgili ifadeniz yanlış. Davranış işletim sistemine bağlıdır. Genellikle bir POSIX kabuğu veya oturum açma kabuğunuz kullanılır.
jlliagre

Bu hassasiyet için teşekkürler. Yorumunuzu eklemek için cevabımı düzenleyeceğim.
Olivier Dulac
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.