O różnicach między command i utility.
Rozumienie potoczne
W wielu ogłoszeniach rekrutacyjnych można znaleźć wymóg sprawnego posługiwania się command-line, który to wymóg dotyczy głównie administratorów Linuksa, ale nie tylko. Wszyscy jakoś intuicyjnie rozumiemy ten termin i wiemy, że chodzi o wklepywanie czarodziejskich zaklęć w czarne okienko pozbawione jakiejkolwiek grafiki (chyba, że w Ascii-Art). Ale czy nie lepiej byłoby w końcu dokładnie wiedzieć co oznacza to całe command?
Słowo command jest najczęściej wymiennie stosowane na określenie dwóch różnych koncepcji w Linuksie, tj. na:
- program wykonywalny, taki jak grep (lub wbudowany w powłokę, taki jak cd). Przykładowe użycie: []Here are the top 10 Linux commands you should learn[/]
- Pełny tekst wysyłany do powłoki w celu wykonania, czyli cała linijka. Na przykład:
grep com /etc/hosts
czy Type a Linux command and press Enter.
To jednak nie jest prawidłowe podejście.
Command to coś innego niż utility
Standard POSIX używa pojęć command i utility i nie robi tego zamiennie. Polecenia takie jak grep czy cd są określane mianem utilities a command jest używane dla instrukcji (poleceń). Gdyby oba te wyrazy były przez wszystkich używane konsekwentnie (czytaj: gdybyśmy częściej czytali standardy), nie byłoby pomyłek.
Utility
Program wykonywalny, taki jak grep jest właśnie utility. Utility oznacza każdy program, z wyłączeniem specjalnych wbudowanych narzędzi dostarczanych jako część języka poleceń powłoki, który można wywołać podając w powłoce jego nazwę a to w celu wykonania określonego zadania lub powiązanego zestawu zadań.
W Posix czytamy, że The system may implement certain utilities as shell functions or built-in utilities, co następnie jest wytłumaczy bliżej. Dowiadujemy się więc że pojęcie to obejmuje zwykłe narzędzia, takie jak true, które są powszechnie używane jako polecenia wbudowane powłoki.
A więc takie specjalne, wbudowane narzędzia są oddzielone terminologicznie od narzędzi, które nie zostały szczegółowo określone. Takimi narzędziami są na przykład break, eval, set czy trap, które wpływają na stan wewnętrzny powłoki, ale nie ma tu już na przykład cd, które jest wbudowane w powłokę. Elementy składni powłoki, takie jak if czy while, w ogóle nie są narzędziami.
Command
Jest to pełny ciąg tekstowy wysłany do powłoki w celu wykonania czyli taka dyrektywa do powłoki, aby ta wykonała określone zadanie. [i]Commands zawierają proste polecenia, potoki i polecenia złożone, takie jak konstrukcje z if czy grupowanie poleceń ale słowo command nigdy nie odnosi się do samego narzędzia.
Oznacza to, że słowo command powinno być używane wyłącznie w kontekście powłoki (ponieważ powłoka z definicji jest interpreterem poleceń, stąd właśnie command-line), czy to w użyciu interaktywnym, czy w programowaniu skryptowym. Na przykład command stanowi exec 2>errs.out
albo każda jedna linijka napisanego przez Ciebie bashowego skryptu.