Общий вопрос новичка.
Зачем нам нужна оболочка в Linux? Как пример, когда я печатаю - найди. -name xy * - Мне сказали, что оболочка принимает этот ввод и вызывает команду find (убедившись, что подстановочный знак правильно интерпретирован и все такое). Разве это не может быть сделано без концепции оболочки? ... если оболочка отслеживает различные процессы, не может ли это быть сделано без нее?
Кроме того, почему я могу набрать> ls xy * и получить правильный вывод, в то время как мне нужно экранировать * с помощью \ in find - find. -name xy \ * Shell выполняет расширение подстановочного знака для одного, а не для другого исполняемого файла?
Спасибо.
Ответы:
Ну нет. Вам нужно что-то, что интерпретирует ваше намерение и вызывает соответствующую программу. Эта вещь называется оболочкой.
РЕДАКТИРОВАТЬ: во избежание путаницы, «оболочка» не означает «интерфейс командной строки». С http://en.wikipedia.org/wiki/Shell_(computing) :
Что касается вашего другого вопроса, оболочка выполняет расширение с подстановочными знаками для обеих команд, но когда вы ищете файлы с помощью команды find, вы хотите найти, а не оболочку, чтобы выполнить расширение, поскольку вы хотите, чтобы это было сделано в местах, которые ищет в, а не в том месте, откуда он был вызван; следовательно, вы избегаете *, чтобы прекратить расширение оболочки, так что find может увидеть это.
источник
Конечно, вы можете делать все через графический интерфейс. Windows 'Find Files (из XP и более ранних версий) является чем-то вроде GUIsh-эквивалента введенной вами команды.
Теперь, почему пользователям UNIX (и Linux) нравится shell? Потому что вы можете взять вывод, передать его в другую программу и получить другой вывод. Например:
Это две команды,
find
иgrep
одна подпитывает другую.find
выводит список всех файлов в текущей и всех дочерних папках, по одной на строку, иgrep
выводит только те строки, которые в них содержатсяburek
.Теперь есть и другие, более сложные вещи, такие как:
ls -R
выводит список файлов в текущей и дочерней папках иsort
сортирует выходные данные.uniq
тогда дает нам только уникальные линии.Теперь, хотя вы можете кодировать все это в GUI, вы можете быстро делать такие сложные вещи с помощью командной строки, что вы не можете обычно делать с GUI, если вы не напишите свой собственный. В этом случае быстрее просто набрать его в командной строке, не так ли?
Итог: если вы спросите это, вам это не нужно. Командная строка бесполезна для вас как обычного пользователя. Тем не менее, командная строка отлично подходит системным администраторам, разработчикам и тем, кто хочет быстро и быстро возиться со своим компьютером.
источник
Да, вы можете запустить команду 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
источник
Нетривиальные ОС не запускают интерпретатор командной строки в ядре.
Они работают как программа, и эта программа называются оболочкой. Ситуация на графических интерфейсах выглядит смешанной, но, по крайней мере, некоторые ОС работают и вне ядра.
Теперь нет абсолютно никакой необходимости в оболочке для работы , как в Unix оболочки, но делать нужно интерфейс.
источник
Чтобы ответить на ваш второй вопрос ... оболочка будет пытаться расширить все, что может, когда только сможет, если только вы не предотвратите это. Экранирование * предотвращает расширение, которое обычно необходимо для команды поиска.
Чтобы не отвечать на вопрос вопросом, как вы узнали бы, была ли команда ls перечислять файлы из-за расширения командной строки или потому что команда ls законно искала список каталогов из файловой системы? Например, я мог бы написать оболочку для цикла следующим образом:
или как
в итоге они приводят к одному и тому же набору.
источник
Смысл экранирования '*' в вызове find состоит в том, чтобы предотвратить расширение оболочки оболочкой. Экранируя его, вы гарантируете, что find видит аргументы: ".", "-Name", "xy *". Если вы не экранировали '*', команда find увидела бы ".", "-Name", "xya", "xyz" (при условии, что оболочка расширяет "xy *" до "xya xyz", что произойдет, если только файлы, начинающиеся с xy - это xya и xyz). Таким образом, ответ на ваш вопрос - нет, оболочка не расширяет «*» в вашем вызове find, потому что вы явно просили его не экранировать.
источник
Shell в Linux - это удобный и общепринятый способ взаимодействия с файловой системой в Linux и запуска команд с аргументами и относительно переменных среды. Он предоставляет множество полезных функций, например, связывает вывод одного процесса со входом другого, перенаправляет потоки ввода / вывода в / из файлов, FIFO и т. Д. Оболочка - это хороший способ легко объединить несколько небольших программ, каждая из которых делать относительно небольшую задачу, чтобы обеспечить что-то полезное. Некоторые из этих программ (например, find и ls) были разработаны для работы с ними в оболочке.
Чтобы понять расширение, просто помните, что слово (ограниченная пробелом последовательность буквенно-цифровых символов и
-
, и некоторых других символов), если оно содержит символы*
или?
символы шаблона, не экранируется и не помещается в кавычки ("
) или апострофы'
, заменяется серией разделенных пробелами слов с именами файлов, которые соответствуют шаблону. Таким образом, если бы у вас было одно слово со звездочкой, после раскрытия у вас будет ноль, одно или несколько слов, которые будут рассматриваться bash как несколько аргументов. Вот особый дизайнls
команды: она идеально подходит для этой схемы, когда используетсяls foo*
для отображения всех файлов, начинающихся с «foo»! Это расширяется в нечто вродеи ls просто печатает файлы из аргументов, проверяя их существование и обращаясь к файлам и т. д.
Но это в основном вопрос философии. В других системах все появляется из кнопки «Пуск» и панели задач. Некоторым пользователям это нравится. Некоторые пытаются установить подобную Linux оболочку в такие системы. Это дело вкуса, но для программирования простых скриптов, которые работают с файлами, оболочка чрезвычайно удобна.
источник
Для интерактивных команд оболочка может быть заменена на GUI.
Но ключевым моментом оболочки является то, что это язык сценариев: вы можете создавать целые программы, которые выполняются в определенных ситуациях (загрузка, открытие сеанса, каждый день, ...). Эта функция не может быть заменена другими инструментами.
источник
cron
Конечно, вы можете запустить Linux и никогда не использовать оболочку. Многие стандартные дистрибутивы Linux предлагают домашнему пользователю именно то, что ему нужно, если он просто хочет проверить Facebook, посмотреть фотографии и отправить электронную почту.
У Linux много плюсов, но оболочка, вероятно, лучшая. Оболочка допускает перенаправление ввода / вывода. Это то, о чем говорят люди, когда ссылаются на каналы («|»). Например:
Я хочу подключиться к списку машин и провести опрос о том, где существует учетная запись пользователя:
for host in `cat hostnames.txt1`; do
echo "Connecting to $host"
ssh $host "cat /etc/passwd | grep -i username"
done
В hostnames.txt может быть 0 хостов или тысячи. Этот скрипт пропустит и проведет опрос, выплевывая информацию на стандартный вывод.
Сценарии могут стать очень креативными. Я могу использовать символы "/ >>" для перенаправления ввода / вывода из и в файлы. Я мог бы просмотреть все эти машины в приведенном выше сценарии, вывести имя сервера с любого, у которого есть пользователь, в файл, а затем выполнить другой сценарий, который подключается и выполняет некоторую задачу для учетной записи пользователя (блокировка / разблокировка / сброс pw / удалить / добавить группу / и т.д.).
Учить. Для. Сценарий. знак равно
источник