Linux & Shell - чи обов`язково Shell?


8

Загальне питання для новачків.

Навіщо нам потрібна оболонка в Linux? Як приклад, коли я набираю - find. -name xy * - Мені сказали, що оболонка приймає цей вхід і викликає команду find (переконайтесь, що підключення правильно інтерпретовано і все це). Не можна це зробити без концепції оболонки? ... якщо оболонка веде облік різних процесів, без цього не обійтися?

Крім того, чому я можу набрати> ls xy * і отримати належний висновок, коли мені потрібно втекти * з \ in find - find. -name xy \ * Чи оболонка робить розширення шаблону для однієї, а не для іншої виконується?

Дякую.

linux  bash  shell 

9
Використовувати Linux без оболонки - це як проїхати Ferrari 50 км / год через міський трафік. Вся забава просто піде.
vava

Відповіді:


23

Не можна обійтися без концепції оболонки?

Ну, ні. Вам потрібно щось, що інтерпретує ваші наміри і викликає відповідну програму. Ця річ називається оболонкою.

EDIT: Щоб уникнути плутанини, "shell" не означає "інтерфейс командного рядка". З http://en.wikipedia.org/wiki/Shell_(computing) :

"Оболонки операційної системи зазвичай підпадають під одну з двох категорій: командний рядок та графічний. Оболонки командного рядка надають операційній системі інтерфейс командного рядка (CLI), тоді як графічні оболонки забезпечують графічний інтерфейс користувача (GUI). категорія, головне призначення оболонки - викликати або «запускати» іншу програму, проте оболонки часто мають додаткові можливості, такі як перегляд вмісту каталогів ».

Що стосується вашого іншого запитання, оболонка виконує розширення підстановки для обох команд, але коли ви шукаєте файли за допомогою пошуку, яке ви хочете знайти, а не оболонки, розширення робити, оскільки ви хочете, щоб це було зроблено в місцях пошуку, шукає. в, а не в тому місці, від якого було викликано; отже, ви уникаєте *, щоб зупинити оболонку, яка розширює її, щоб знахідка змогла її побачити.


Ви кажете, що в Windows кнопка "Пуск" називається оболонкою? :-)

5
Це не звичайне використання, але графічні інтерфейси можуть бути оболонками (принаймні, якщо вони працюють поза ядром). Кнопка «Пуск» - лише функція GUI ...
dmckee --- кошеня колишнього модератора

Кнопка "Пуск" - це річ, "що інтерпретує ваші наміри та викликає відповідну програму". OTOH, оболонку Linux можна просто назвати функцією TUI (Text User Interface).

11
@Paul: Провідник, програма, яка забезпечує кнопку запуску, - це оболонка Windows. Насправді, це оболонка для Windows; його можна замінити.
самогонник

1
Так, кнопку запуску можна розглядати як оболонку. Проте не інтерактивна оболонка, а оболонка. Як правило, коли хтось каже "оболонка", вони мають на увазі інтерактивне підказку (наприклад, командний рядок у Windows - це традиційна оболонка)

5

Звичайно, ви можете зробити все через графічний інтерфейс. "Знайти файли Windows" (з XP і новіших версій) - це дещо еквівалент GUIsh команди, яку ви ввели.

Тепер, чому користувачі UNIX (та Linux) люблять оболонку? Тому що ви можете взяти вихід, подати його в іншу програму та отримати інший вихід. Наприклад:

find | grep burek

Це дві команди, findпричому grepодна подає іншу. findперераховує всі файли в поточних і всіх дочірніх папках, по одному на рядок, і grepдрукує лише ті рядки, які містять burek.

Зараз є й інші, більш складні речі, такі як:

ls -R | sort | uniq

ls -Rперераховує файли в поточних та дочірніх папках та sortсортує вихід. uniqто дає нам лише унікальні рядки.

Тепер, поки ви можете кодувати все це в графічному інтерфейсі, ви можете швидко робити такі складні речі за допомогою командного рядка, який звичайно не можна робити з графічним інтерфейсом, якщо ви не підете писати свій власний. У такому випадку швидше просто ввести його в командний рядок, чи не так?

Підсумок: Якщо ви запитаєте це, воно вам не потрібно. Командний рядок для вас як звичайного користувача марний. Однак командний рядок відмінно підходить для системних адміністраторів, розробників та тих, хто хоче швидко швидко повозитися зі своїм комп'ютером.


1

Так, ви можете запустити команду find без оболонки - хоч вам потрібна якась програма, щоб запустити її, і вам потрібна якась програма, щоб відобразити її вихід. Ви багато разів використовуєте функції оболонки, і цій команді знадобиться оболонка для інтерпретації намірів.

наприклад, трубопровід, перенаправлення та глобулювання є особливістю оболонки, і для інтерпретації знадобиться оболонка. "find. -name myfile" не використовує жодної функції оболонки, і може працювати без оболонки. "find. -name myfile | sort> output" використовує як конфігурування, так і перенаправлення, і вам потрібна оболонка для інтерпретації цього.

Що стосується втечі з xy *, то різниці мало, якщо це вхід для пошуку або вихід виводу, оболонка розширить його в будь-якому випадку.

Якщо в поточному каталозі є файл з назвою xyz

знайти. -name xy * насправді буде працювати як find. -ім'я xyz, яке, мабуть, не те, що ви хочете.

Якщо ви все-таки знайдете. -name xy * і в поточному каталозі немає файлу, що відповідає xy *, він буде працювати як find. -ім'я xy *.

Аналогічно, якщо у поточному каталозі немає файлу, що відповідає xy *, ls> xy * створить файл під назвою xy *. Якщо один файл відповідає - скажімо, xyz, це означатиме ls> xyz. Якщо декілька файлів відповідають xy *, то ls> xy * не вдасться.

Детальніше читайте на http://tldp.org/HOWTO/Bash-Prog-Intro-HOWTO.html


Де читати режим?
Томі

1

Нетривіальні ОС не запускають інтерпретатор командного рядка в ядрі.

Вони працюють як програма, і ця програма називаються оболонкою. Ситуація на графічних інтерфейсах, здається, неоднозначна, але принаймні деякі ОС також працюють за межами ядра.

Тепер немає абсолютно ніякої необхідності в оболонці для роботи , як в Unix оболонки, але робити треба інтерфейс.


1

Щоб відповісти на ваше друге питання ... оболонка намагатиметься розширити все, що тільки може, якщо тільки не зможе, якщо ви не завадите цьому. Уникнення знака * запобігає розширенню, що зазвичай необхідно для команди find.

Не відповідати на запитання питанням, як би ви дізналися, якщо команда ls перераховувала файли через розширення командного рядка або через те, що команда ls законно шукала список каталогів з файлової системи? Наприклад, я можу написати оболонку для циклу так:

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

чи як

for i in /home/mydir/*;

вони в результаті отримують той самий набір.


0
чому це те, що я можу набрати> ls xy * і отримати належний вихід
Мені потрібно втекти * із знаком \ in find - find. -імя xy \ * Є
оболонка, яка робить розширення підказки для одного, а не для
інший виконуваний файл?

Суть виходу "*" у виклику find - це запобігання оболонці робити розширення. Уникаючи цього, ви гарантуєте, що знахідка бачить аргументи: ".", "-Name", "xy *". Якщо ви не уникнули '*', знайдіть, побачив би ".", "-Name", "xya", "xyz" (припустимо, що оболонка розширює "xy *" до "xya xyz", що станеться, якщо єдиний Файли, що починаються з xy, - це xya та xyz). Отже, відповідь на ваше запитання - ні, оболонка не розширює "*" у вашій виклику знаходження, оскільки ви явно попросили її не уникати її.


0

Shell в Linux - це зручний і звичайний спосіб взаємодії з файловою системою в Linux та запуск команд з аргументами та щодо змінних оточуючих середовищ. Він надає безліч корисних функцій, наприклад, підключення виводу одного процесу до вводу іншого, перенаправлення потоків введення / виведення до / з файлів, FIFO тощо. Оболонка - це хороший спосіб легко поєднати кілька невеликих програм, кожна з яких виконуючи порівняно невелике завдання, забезпечити щось корисне. Деякі з цих програм (наприклад, find і ls) були розроблені для роботи з ними в оболонці.

Щоб зрозуміти розширення, просто пам’ятайте, що слово (обмежене пробілом послідовно-буквено-цифрові символи та -та деякі інші символи), якщо воно містить *або ?символи візерунка, не уникне і не поміститься в лапки ( ") або апострофи ', замінене рядом пробілів із обмеженим пробілом словами з іменами файлів, які відповідають шаблону. Якщо у вас було одне слово зірочкою, після розширення у вас буде нуль, одне або кілька слів, яке буде розглянуто bash як декілька аргументів. Ось конкретна конструкція lsкоманди: вона ідеально підходить цій схемі, коли вона використовується ls foo*для відображення всіх файлів, які починаються з "foo"! Вона розширюється на щось подібне

ls foobar boobaz

і ls просто друкує файли з аргументів, перевіряючи наявність та перехід на фіолдер тощо.

Але це здебільшого питання філософії. В інших системах все з’являється з кнопки «Пуск» та панелі завдань. Деякі користувачі з цим добре. Деякі намагаються встановити в такі системи оболонку, схожу на Linux. Це справа смаку, але для програмування простих сценаріїв, які мають справу з файлами, оболонка надзвичайно зручна.


0

Для інтерактивних команд оболонку можна замінити графічним інтерфейсом.

Але ключовим моментом оболонки є те, що це мова скриптів: ви можете створювати цілі програми, які виконуються в конкретних ситуаціях (завантаження, відкриття сесії, щодня, ...). Цю функцію неможливо замінити іншими інструментами.


І звичайно, ви можете запланувати сценарії оболонки за допомогоюcron
Wuffers

0

Звичайно, ви можете запустити Linux і ніколи не використовувати оболонку. Без коробки багато стандартних дистрибутивів Linux пропонують домашньому користувачеві саме те, що їм потрібно, якщо вони просто хочуть перевірити facebook, подивитися фотографії та надіслати електронну пошту.

У Linux є багато плюсів, але оболонка, мабуть, найкраща. Оболонка дозволяє перенаправлення вводу / виводу. Про це говорять люди, коли посилаються на труби ("|"). Наприклад:

Я хочу підключитися до списку машин та провести опис того, де існує обліковий запис користувача:

for host in `cat hostnames.txt1`; do
echo "Connecting to $host"
ssh $host "cat /etc/passwd | grep -i username"
done

У имені хоста.txt може бути 0 хостів, а може бути тисячі. Цей скрипт проскакує і зробить опитування, плюючи інформацію в stdout.

Сценарій може стати дуже креативним. Я можу використовувати символи "/ >>" для переадресації вводу / виводу з та у файли. Я міг би оглянути всі ці машини у вищезазначеному скрипті, вивести ім’я сервера з будь-якого, у якого є користувач, у файл, а потім дотримуватися іншого сценарію, який з'єднує та виконує певне завдання в обліковому записі користувача (блокування / розблокування / скидання pw / видалити / додати групу / тощо).

Дізнайтеся. До. Сценарій. =)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.