Komut mu program mı?


19

Ben arasındaki farkı yukarı bakıyordu adduserve useraddve bir açıklama olduğunu useraddiken bir komuttur adduserbir perl script. Perl betiğinin ne olduğunu anlıyorum, ama anlamadığım şey commandtam olarak ne olduğudur.

Hep komutlar gibi düşünülmektedir ls, ln, cdbasitçe bir şey yapmak ne olursa olsun dilinde yazılmış tüm basit programlar vb vardır. Bu "basit programlar" ile perl betiği arasındaki fark nedir?

Tabii ki bir (perl) komut dosyası derlenmiş değil ama çalışma zamanında yorumlanmış biliyorum, ama sanırım tek fark bu değil mi?


1
bu durumda derlenen ve yorumlanan konulara çok fazla odaklanmayın. yorumlanmış bir kabuğa sahip olabilirsiniz (neden birini sormak isteyebilirsiniz). bunun yerine, bir komut eylemi kodunun kabuğun kaynak kodunun statik bir parçası olduğu gerçeğine odaklanırken, bir komut dosyasının harici olduğu, var olduğu veya biraz farklı iki sistemde tam olarak aynı şekilde davrandığı varsayılmamalıdır. tüm bağımlılıklarının bile karşılanması gerekmez. komut dosyaları daha esnektir ve bu nedenle genel olarak daha az güvenilirdir, oysa bir komut kabuğun çalışacağı her yerde çalışır.
Frank Thomas

Basit bir deyişle: komut , yürütülebilen bir ikili program iken çalıştırılabilen herhangi bir şeydir .
Pithikos

Yanıtlar:


32

Basit bir ifadeyle, komut bir bilgisayar tarafından gerçekleştirilecek bir talimattır (veya bir talimatlar kümesidir).

Bağımsız komutlar

Gibi temel Unix hizmeti ls, lnvb (genellikle) C dilinde yazılmış ve tek başına yürütülebilir olduğu derlenen programlar yürütülecek bir yorumlayıcı gerektirmez; genellikle belirli kütüphane dosyalarının sisteme yüklenmesini gerektirir , ancak bu başka bir sorunun cevabıdır.

Senaryo

Bir komut dosyası, komutların bir toplamıdır ve aslında, komut dosyalarının kendileri bir komut olarak kabul edilir.

Bir Perl komut Perl tabloların bir dizisidir ve gerektirir perlyürütülebilir (tek başına ve derlenmiş) programı Perl tabloların yorumlanması.

Bazen büyük ve karmaşık yorumlayıcı komut dosyaları (Perl, Python ve Ruby gibi dillerde) yorumlanmış programlar olarak da adlandırılırken, komut dosyası terimi daha kısa ve daha basit komut dosyaları için ayrılmıştır.

Bir kabuk komut , diğer komutlar dizisi (komut herhangi bir tür) ve bir UNIX komut yorumlamak gibi Bash olarak kabuk gerektirir. Bash man sayfasından:

Bash, standart girdiden veya bir dosyadan okunan komutları yürüten sh uyumlu bir komut dili yorumlayıcısıdır.

Kabuk Yerleşik

Kabuklar genellikle ne bağımsız programlar ne de komut dosyaları olan yerleşik komutlara sahiptir. Bunun yerine, kabuğun kendisinin bir parçasıdırlar ve doğrudan kabuk tarafından çalıştırılırlar. cdböyle bir yerleşik komutun bir örneğidir.

Bazı durumlarda, kabuk yerleşik olarak ve tek başına komutlar olarak var olan komutlar vardır, örneğin echokomut.

$ type -a echo
echo is a shell builtin
echo is /usr/bin/echo

echo tek başına komut tam yolu sağlanarak yürütülebilirken kendi başına kabuk yerleşik yürütür.

Yankı yerleşik sürümünü çalıştırın:

$ echo --version
--version

Tek başına echoprogramı çalıştırın :

$ /usr/bin/echo --version
echo (GNU coreutils) 8.23
Packaged by Cygwin (8.23-4)
Copyright (C) 2014 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Not: Yukarıdaki özellikler bir Unix ortamını belirtir, ancak aynı ilkeler bir Windows ortamı için de geçerlidir.


Pencerelerde bahsettiğiniz yankı yalnızca Cygwin'i yüklerseniz. Windows'ta echo. * İfadesini bulamazsınız, çünkü bu tamamen bir CMD kabuk komutudur (powershell'deki echo yazma nesnesine
Jim B

@JimB Bu doğru. Ne demek istediğimi netleştirmek için son satırı düzenledim. Tesadüfen, bu hafta sadece PowerShell'i öğrenmeye başladım (çok şükür .bat, uzun yıllar dosyalarla çalışmak zorunda kalmadım ).
Anthony G - Monica için adalet

2

Yerleşik bir komut kabuğun bir parçasıdır. Kabuk tarafından bir program yürütülür.

Yerleşik komutlar kabuğun içinde bulunur. Yerleşik komutun adı basit bir komutun ilk sözcüğü olarak kullanıldığında (bkz. Basit Komutlar ), kabuk komutu başka bir program çağırmadan doğrudan yürütür. Yerleşik komutlar, ayrı yardımcı programlarla elde edilmesi imkansız veya uygunsuz işlevsellik uygulamak için gereklidir.

http://www.gnu.org/software/bash/manual/bashref.html#Shell-Builtin-Commands


Ancak useraddyerleşik bir kabuk değil. Web sitesi "yerleşik komut" değil, "komut" dedi. Bu açıklama bu soru ile nasıl ilişkilidir?
Barmar

1

Komut, bir uygulamaya veya sisteme bir şey yapmasını söylemenin bir yolu anlamına gelir.

Bir uygulama genellikle GUI'den gelen birçok farklı komutu kabul eder stdin, ancak UNIX soketi veya adlandırılmış yöneltme, bir tür web API'si, RPC bağlantısı veya başka bir özel protokol gibi başka yöntemler de mümkündür.

Yalnızca tek bir şey yapan ve genellikle GUI'siz olan bir uygulamaya komut da denebilir, çünkü bu uygulamaya gerçekten yalnızca "anlamlı bir" komut verebilirsiniz ". Küçük programlar lsbu şekilde çalışır ve neden komut denir.

Ancak Photoshop'u bir komut olarak adlandırmazsınız, ancak kesinlikle GUI aracılığıyla onun içinde komutlar verirsiniz.

Ancak bu terim, farklı insanlar için farklı şeyler ifade edebilir. Örneğinizde, komut , doğrudan çalıştırılan bir yürütülebilir dosyayı, komut dosyası yorumlayıcısının çalışmasını gerektiren bir dosyayı açıklamak için kullanılıyor. Bu fark önemli olabilir, çünkü bir Perl betiği /usr/bin/perlçalıştırırken, aslında çalışan ikili dosyadır (bu yüzden uzun süredir çalışan bir Perl betiğini öldürmek istiyorsanız, aradığınız şey budur ps). Ancak, kabukların çoğunda kabuğun kendisine komut olan ve harici bir yürütülebilir dosyanın çalışmasına neden olmayan "yerleşik" komutlar bulunur. Örneğin, cdtek bashbaşına ele alınır ve buna /sbin/cdbenzer veya çağrılamaz .


İlginç bir bakış açısı. Bunu görüntülemekte olduğunuz soyutlama düzeyinde, ona bir 'çağırma' veya 'jest' demeye, hatta android terminolojisine bir 'niyet' demeye cazip geliyorum. Derlenmiş ve yorumlanmış bir kriter yapma fikrini beğenip beğenmediğimi bilmiyorum dedi. Örneğin Powershell karma olarak yorumlanır (, Net), ancak kabuk olarak kod tabanında komutları vardır. ancak harici derlenmiş (makine kodu) yürütülebilir dosyaların komut dosyalarından farklı olması ve komutlar hakkında iyi bir noktaya değinmiş olursunuz. Dediğim gibi ilginç bir bakış açısı.
Frank Thomas
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.