Całkowite pytanie dla początkujących.
Dlaczego potrzebujemy powłoki w systemie Linux? Jako przykład, gdy piszę - znajdź. -name xy * - Powiedziano mi, że powłoka przyjmuje te dane wejściowe i wywołuje polecenie find (upewniając się, że symbol wieloznaczny jest poprawnie interpretowany i tak dalej). Czy nie można tego zrobić bez koncepcji powłoki? ... jeśli powłoka śledzi różne procesy, nie można tego zrobić bez niej?
Ponadto, dlaczego mogę wpisać> ls xy * i uzyskać właściwe wyjście, podczas gdy muszę uciec * z \ in find - find. -name xy \ * Czy powłoka wykonuje rozszerzenie dzikiej karty dla jednego, a nie dla drugiego pliku wykonywalnego?
Dziękuję Ci.
Odpowiedzi:
Więc nie. Potrzebujesz czegoś, co interpretuje twoje zamiary i wywołuje odpowiedni program. Ta rzecz nazywa się powłoką.
EDYCJA: Aby uniknąć pomyłek, „powłoka” nie oznacza „interfejsu wiersza poleceń”. Ze strony http://en.wikipedia.org/wiki/Shell_(computing) :
Jeśli chodzi o twoje inne pytanie, powłoka wykonuje interpretację symboli zastępczych dla obu poleceń, ale gdy szukasz plików przy użyciu funkcji Znajdź, chcesz znaleźć, a nie powłoki, aby wykonać ekspansję, ponieważ chcesz, aby to zrobić w poszukiwaniu lokalizacji w, a nie w miejscu, z którego został wywołany; dlatego uciekasz przed *, aby zatrzymać rozszerzanie się powłoki, aby find mógł to zobaczyć.
źródło
Możesz oczywiście zrobić wszystko za pomocą GUI. Windows „Znajdź pliki (z XP i wcześniejszych) jest nieco graficznym odpowiednikiem polecenia, które wpisałeś.
Dlaczego użytkownicy UNIX (i Linux) lubią powłoki? Ponieważ możesz pobrać dane wyjściowe, podać je do innego programu i uzyskać inne dane wyjściowe. Na przykład:
Są to dwa polecenia
find
igrep
jeden karmi drugi.find
wyświetla listę wszystkich plików w bieżącym i wszystkich folderach podrzędnych, po jednym w wierszu, igrep
drukuje tylko te wiersze, które zawierająburek
.Teraz są inne, bardziej złożone rzeczy, takie jak:
ls -R
wyświetla listę plików w bieżących i podrzędnych folderach orazsort
sortuje dane wyjściowe.uniq
daje nam tylko unikalne linie.Teraz, mimo że możesz to wszystko zakodować w GUI, możesz szybko robić tak skomplikowane rzeczy za pomocą wiersza poleceń, których zwykle nie możesz zrobić za pomocą GUI, chyba że napiszesz własny. W takim przypadku szybsze jest wpisanie go w wierszu polecenia, prawda?
Konkluzja: Jeśli o to poprosisz, nie potrzebujesz tego. Wiersz poleceń jest bezużyteczny dla Ciebie jako zwykłego użytkownika. Wiersz poleceń jest jednak świetny dla sysadminów, programistów i tych, którzy chcą szybko i szybko bawić się komputerem.
źródło
Tak, możesz uruchomić komendę find bez powłoki - potrzebujesz jednak jakiegoś programu, aby go uruchomić i potrzebujesz programu do wyświetlenia jego wyniku. Wiele razy używasz funkcji powłoki, a to polecenie będzie wymagało powłoki, aby zinterpretować zamiar.
np. potokowanie, przekierowanie i globowanie jest cechą powłoki i będzie wymagała powłoki do interpretacji. „find. -name myfile” nie korzysta z żadnej funkcji powłoki i można ją uruchomić bez powłoki. „find. -name mój_plik | sort> wyjście” używa zarówno potokowania, jak i przekierowania i potrzebujesz powłoki, aby to zinterpretować.
Jeśli chodzi o ucieczkę od xy *, nie ma różnicy, czy to wejście do znalezienia, czy wyjście z redukcji, powłoka rozszerzy ją w obu kierunkach.
Jeśli w bieżącym katalogu znajduje się plik o nazwie xyz
odnaleźć . -name xy * faktycznie będzie działać jako find. -name xyz, co prawdopodobnie nie jest tym, czego chcesz.
Jeśli znajdziesz. -name xy * i w bieżącym katalogu nie ma pliku pasującego do xy *, zostanie on uruchomiony jako find. -nazwa xy *.
Podobnie, jeśli w bieżącym katalogu nie ma pliku pasującego do xy *, ls> xy * utworzy plik o nazwie xy *. Jeśli pasuje jeden plik - powiedzmy xyz, będzie to oznaczać ls> xyz. Jeśli jest kilka plików pasujących do xy *, wtedy ls> xy * nie powiedzie się.
Czytaj więcej http://tldp.org/HOWTO/Bash-Prog-Intro-HOWTO.html
źródło
Nietrywialne systemy operacyjne nie uruchamiają interpretera wiersza poleceń w jądrze.
Działają jako program, a program ten nazywa się powłoką. Sytuacja na GUI wydaje się być mieszana, ale przynajmniej niektóre systemy operacyjne uruchamiają thoes poza jądrem.
Teraz nie ma absolutnie żadnej potrzeby powłoki pracować jak Unix shell, ale trzeba zrobić, potrzebny jest interfejs.
źródło
Aby odpowiedzieć na twoje drugie pytanie ... powłoka będzie próbowała rozszerzyć wszystko, co może, o ile to możliwe, chyba że temu zapobiegniesz. Klawisz Escape * zapobiega rozszerzeniu, które zwykle jest konieczne dla polecenia find.
Aby nie odpowiadać na pytanie pytaniem, skąd miałbyś wiedzieć, czy polecenie ls wyświetlało listę plików z powodu rozszerzenia wiersza polecenia lub ponieważ polecenie ls zgodnie z prawem szukało katalogu z systemu plików? Na przykład, mógłbym napisać powłokę dla pętli w następujący sposób:
lub jak
kończą się tym samym zestawem.
źródło
Punktem ucieczki „*” w wywołaniu find jest uniemożliwienie powłoce wykonania ekspansji. Unikając tego, upewniasz się, że find widzi argumenty: „.”, „-Name”, „xy *”. Jeśli nie uniknąłeś znaku „*”, find zobaczyłby „.”, „-Name”, „xya”, „xyz” (zakładając, że powłoka rozwija „xy *” do „xya xyz”, co nastąpi, jeśli tylko pliki, które rozpoczynają xy to xya i xyz). Tak więc odpowiedź na twoje pytanie brzmi „nie”, powłoka nie rozwija znaku „*” w wywołaniu funkcji find, ponieważ wyraźnie poprosiłeś go, aby nie uciekł.
źródło
Powłoka w systemie Linux to wygodny i konwencjonalny sposób interakcji z systemem plików w systemie Linux i uruchamiania poleceń z argumentami i w odniesieniu do zmiennych środowiskowych. Zapewnia wiele użytecznych funkcji, na przykład łączenie wyjścia jednego procesu z wejściem drugiego, przekierowywanie strumieni wejścia / wyjścia do / z plików, FIFO itp. Powłoka jest dobrym sposobem na łatwe połączenie kilku małych programów, z których każdy wykonując stosunkowo małe zadanie, aby zapewnić coś pożytecznego. Niektóre z tych programów (takie jak find i ls) zostały zaprojektowane do pracy z nimi w powłoce.
Aby zrozumieć ekspansję, pamiętaj tylko, że słowo (sekwencja znaków aplanumerycznych
-
i niektóre inne symbole), jeśli zawiera znaki*
lub?
znaki, nie jest uciekane ani umieszczane w cudzysłowie ("
) lub apostrofach'
, jest zastępowane serią słów rozdzielanych spacjami o nazwach plików pasujących do wzorca. Więc jeśli miałeś jedno słowo z gwiazdką, po rozwinięciu będziesz mieć zero, jedno lub kilka słów, które będą traktowane przez bash jako kilka argumentów. Oto konkretna konstrukcjals
polecenia: idealnie pasuje do tego schematu, gdy jest używanyls foo*
do wyświetlania wszystkich plików zaczynających się na „foo”! Jest rozwinięty do czegoś podobnegoi po prostu drukuje pliki z argumentów, sprawdzając istnienie i przechodząc do folderów itp.
Ale to głównie kwestia filozofii. W innych systemach wszystko wyłania się z przycisku „Start” i paska zadań. Niektórzy użytkownicy są w porządku. Niektórzy próbują zainstalować powłokę podobną do systemu Linux w takich systemach. To kwestia gustu, ale do programowania prostych skryptów, które zajmują się plikami, powłoka jest niezwykle wygodna.
źródło
W przypadku poleceń interaktywnych powłokę można zastąpić GUI.
Ale kluczowym punktem powłoki jest to, że jest to język skryptowy: możesz tworzyć całe programy, które są uruchamiane w określonych sytuacjach (rozruch, otwieranie sesji, codziennie, ...). Tej funkcji nie można zastąpić innymi narzędziami.
źródło
cron
Oczywiście możesz uruchomić Linuksa i nigdy nie używać powłoki. Po wyjęciu z pudełka wiele standardowych dystrybucji Linuksa oferuje użytkownikom domowym dokładnie to, czego potrzebują, jeśli chcą tylko sprawdzić na Facebooku, obejrzeć zdjęcia i wysłać e-mail.
Linux ma wiele zalet, ale powłoka jest prawdopodobnie najlepsza. Powłoka pozwala na przekierowanie I / O. O tym mówią ludzie, gdy odnoszą się do potoków („|”). Na przykład:
Chcę połączyć się z listą komputerów i przeprowadzić ankietę dotyczącą tego, gdzie istnieje konto użytkownika:
for host in `cat hostnames.txt1`; do
echo "Connecting to $host"
ssh $host "cat /etc/passwd | grep -i username"
done
W hostnames.txt może być 0 hostów lub mogą być tysiące. Ten skrypt prześlizgnie się i przeprowadzi ankietę, wypluwając informacje na standardowe wyjście.
Skrypty mogą stać się bardzo kreatywne. Mogę używać znaków „/ >>” do przekierowywania wejścia / wyjścia zi do plików. Mógłbym zbadać wszystkie te maszyny w powyższym skrypcie, wypisać nazwę serwera z dowolnego, który ma użytkownika do pliku, a następnie wykonać kolejny skrypt, który łączy się i wykonuje pewne zadania na koncie użytkownika (blokada / odblokowanie / reset pw / usuń / dodaj grupę / etc).
Uczyć się. Do. Scenariusz. =)
źródło