Linux i Shell - czy Shell jest koniecznością?

8

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.


źródło
9
Korzystanie z Linuksa bez powłoki jest jak jazda Ferrari 50 km / h przez ruch miejski. Cała zabawa po prostu zniknie.
vava

Odpowiedzi:

23

Czy nie można tego zrobić bez koncepcji powłoki?

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) :

„Powłoki systemu operacyjnego ogólnie należą do jednej z dwóch kategorii: wiersza polecenia i grafiki. Powłoki wiersza polecenia zapewniają interfejs wiersza polecenia (CLI) dla systemu operacyjnego, podczas gdy powłoki graficzne zapewniają graficzny interfejs użytkownika (GUI). W obu kategoria głównym celem powłoki jest wywołanie lub „uruchomienie” innego programu, jednak powłoki często mają dodatkowe możliwości, takie jak przeglądanie zawartości katalogów. ”

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ć.

księżycowy cień
źródło
więc mówisz, że w systemie Windows przycisk Start nazywa się powłoką? :-)
5
Nie jest to powszechne użycie, ale GUI to prawdopodobnie powłoki (przynajmniej jeśli działają poza jądrem). Przycisk Start jest tylko funkcją GUI ...
dmckee --- były moderator kotek
Przycisk Start jest zdecydowanie rzeczą, która „interpretuje twoje zamiary i wywołuje odpowiedni program”. OTOH, powłokę Linuksa można nazwać po prostu funkcją TUI (Text User Interface).
11
@Paul: Explorer, program, który udostępnia przycisk Start, jest powłoką systemu Windows. W rzeczywistości jest to powłoka systemu Windows; można go wymienić.
moonshadow
1
Tak, przycisk Start może być postrzegany jako powłoka. Nie jest to jednak interaktywna powłoka, ale powłoka. Zazwyczaj jednak, gdy ktoś mówi „powłoka”, oznacza interaktywny monit (na przykład wiersz poleceń w systemie Windows jest tradycyjną powłoką)
5

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:

find | grep burek

Są to dwa polecenia findi grepjeden karmi drugi. findwyświetla listę wszystkich plików w bieżącym i wszystkich folderach podrzędnych, po jednym w wierszu, i grepdrukuje tylko te wiersze, które zawierają burek.

Teraz są inne, bardziej złożone rzeczy, takie jak:

ls -R | sort | uniq

ls -Rwyświetla listę plików w bieżących i podrzędnych folderach oraz sortsortuje dane wyjściowe. uniqdaje 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.

Ivan Vučica
źródło
1

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

nos
źródło
Tryb odczytu gdzie?
Thomi,
1

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.

dmckee --- były kot moderator
źródło
1

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:

for i in $(ls /home/mydir);

lub jak

for i in /home/mydir/*;

kończą się tym samym zestawem.

KFro
źródło
0
dlaczego mogę wpisać> ls xy * i uzyskać właściwe wyjście
Muszę uciec * z \ in find - find. -name xy \ * Jest
powłoka robi rozszerzenie dzikiej karty dla jednego, a nie dla
inny plik wykonywalny?

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ł.

William Pursell
źródło
0

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 konstrukcja lspolecenia: idealnie pasuje do tego schematu, gdy jest używany ls foo*do wyświetlania wszystkich plików zaczynających się na „foo”! Jest rozwinięty do czegoś podobnego

ls foobar boobaz

i 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.

P Shved
źródło
0

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.

mouviciel
źródło
I oczywiście możesz zaplanować skrypty powłoki za pomocącron
Wuffers
0

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. =)

HayekSplosives
źródło