Ls gibi sistem komutları nasıl oluşturulur?


19

* Nix ile ilgili bazı şüphelerim var.

  • Ben ise yürütülebilir dosyanın hangi tip bilmiyorum lso .ksh veya sistem çalıştırılabilir başka türlü Eğer öyleyse, bu ne olduğu .sh olup olmadığını veya?

  • lskomutun kaynak kodunun neye benzediğini görmeye çalıştığımda , okunamayan bir şey gösteriyor, bu yöntem okunamayan dosyalar türlerini oluşturmak için kullanıyor ve dosyalarımı bu dosyalara benzer hale getirebilir miyim ls?



4
Yukarıdaki URL ile bir dup'den daha alakalı olduğunu düşünüyorum.
slm

Yanıtlar:


31

fileKomutu ve komutu kullanarak Unix'teki yürütülebilir dosyanın niteliğini belirleyebilirsiniz type.

tip

typeBir yürütülebilir dosyanın diskteki konumunu şu şekilde belirlemek için kullanırsınız :

$ type -a ls
ls is /usr/bin/ls
ls is /bin/ls

Şimdi biliyorum ki lsburada benim sistemimde 2 yerde bulunuyor: /usr/bin/ls& /bin/ls. Bu yürütülebilir dosyaları bakarak aynı olduklarını görebilirsiniz:

$ ls -l /usr/bin/ls /bin/ls
-rwxr-xr-x. 1 root root 120232 Jan 20 05:11 /bin/ls
-rwxr-xr-x. 1 root root 120232 Jan 20 05:11 /usr/bin/ls

NOT:cmp veya ile boyutlarının ötesinde aynı olduklarını onaylayabilirsiniz diff.

fark ile
$ diff -s /usr/bin/ls /bin/ls
Files /usr/bin/ls and /bin/ls are identical
cmp ile
$ cmp /usr/bin/ls /bin/ls
$ 

Dosya kullanma

Onları filekomutu kullanarak sorgularsam :

$ file /usr/bin/ls /bin/ls
/usr/bin/ls: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=0x303f40e1c9349c4ec83e1f99c511640d48e3670f, stripped
/bin/ls:     ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=0x303f40e1c9349c4ec83e1f99c511640d48e3670f, stripped

Yani bunlar C / C ++ 'dan derlenen gerçek fiziksel programlar olacaktır. Kabuk betikleri olsaydı, tipik olarak şu şekilde olurdu file:

$ file somescript.bash 
somescript.bash: POSIX shell script, ASCII text executable

ELF nedir?

ELF bir dosya biçimidir , gccC / C ++ gibi programları derlemek için kullanılan bir derleyicinin çıktısıdır ls.

Bilgi işlemde, Yürütülebilir ve Bağlanabilir Biçim (eski adıyla Genişletilebilir Bağlantı Biçimi olarak adlandırılan ELF) yürütülebilir dosyalar, nesne kodu, paylaşılan kütüphaneler ve çekirdek dökümler için ortak bir standart dosya biçimidir.

Genellikle dosya adında şu uzantılardan birine sahip olur: yok, .o, .so, .elf, .prx, .puff, .bin


@lgeorget - Unix.stackexchange.com/questions/85249/… . Genellikle kullanmak typeiçin cazip olduğunuz herhangi bir yerde kullanmak en iyisidir whichveya whereis.
slm

3
Ek olarak, GNU araçları için kaynak kodu serbestçe kullanılabilir, aramanızı gnu.org/software
glenn jackman

Aynı test için, sadece dosya boyutlarını ve zamanlarını kontrol etmek değil, md5sumya da gibi bir şey kullanmalısınız sha1sum.
Bob

@Bob - Aynı dosyaların Q ile ilgisi yoktu, bu yüzden basit bir yöntem gösterdim. Dosyaları karşılaştırmak için ikili dosyaları karşılaştırmak için kullanılan cmp gibi daha uygun bir araç kullanmış olurdum. Ayrıca hangi paket tarafından sağlandıklarını görmek, ilgili olup olmadıklarını gösterir. İkisi de bir parçası coreutils-8.21-13.fc19.x86_64ve 20 yıllık Red Hat sürümleriyle aynı olduklarını biliyorum.
slm

@Bob - dosyaları karşılaştırma hakkındaki güncellemelere bakın.
slm

9

İkili bir yürütülebilir dosyadır (sistemin çoğu gibi makine kodunda derlenmiştir). Kabuk betikleri, mevcut malzemelerden hızlı ve esnek bir şekilde çözümler oluşturmak için parçaları birleştirmek için "tutkal" gibidir. Bu * nix'in gücü.

Sadece derlenmiş yürütülebilir dosyaya değil, kaynak koduna (c, bazen c ++, * nix'teki en yaygın dillerdir) ihtiyacınız vardır. Açık kaynak olduğundan, her şey için kodu çevrimiçi depolardan alabilirsiniz (çekirdek yardımcı programlar genellikle gnu projesinden). Ancak, git veya diğer sürüm izleme sistemlerini nasıl kullanacağınızı bilmiyorsanız biraz zor.

Yardımcı olursa, ls.c dosyası şöyledir: http://git.savannah.gnu.org/cgit/coreutils.git/tree/src/ls.c


Oh ve ikili uygulamaların nasıl oluşturulacağı sorusunu açıklığa kavuşturmak için: sayısız programlama dili arasından seçim yapın (geleneksel olarak bağımsız bir yürütülebilir dosya üretmeyen python, java, javascript, ... gibi yorumlanan veya yarı yorumlanan bir çift hariç) ikili dosya). Ardından bu dili kullanmayı ve nasıl derleneceğini öğrenin.
orion
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.