<Предыдущая | Содержание: | Следующая>
rm: удалить каталог `архив'? y
Мы обсудим, как сделать эту опцию используемой по умолчанию, в главе 7, где обсуждается настройка среды вашей оболочки.
3.3.3. Поиск файлов
3.3.3.1. Использование функций оболочки
В примере с перемещением файлов мы уже видели, как оболочка может манипулировать несколькими файлами одновременно. В этом примере оболочка автоматически определяет, что имеет в виду пользователь, с помощью требований, заключенных в квадратные скобки «[» и «]». Оболочка может заменять диапазоны цифр, а также символы верхнего или нижнего регистра. Он также заменяет любое количество символов звездочкой и только один символ вопросительным знаком.
Одновременно можно использовать всевозможные замены; оболочка очень логична в этом отношении. Например, в оболочке Bash нет проблем с такими выражениями, как ls имя_каталога/*/*/*[2-3].
В других оболочках звездочка обычно используется для минимизации усилий при наборе текста: люди будут вводить cd реж* вместо cd каталог. Однако в Bash в этом нет необходимости, поскольку в оболочке GNU есть функция, называемая завершением имени файла. Это означает, что вы можете ввести первые несколько символов команды (где угодно) или файла (в текущем каталоге), и, если путаница невозможна, оболочка поймет, что вы имеете в виду. Например
в каталоге, содержащем много файлов, вы можете проверить, есть ли файлы, начинающиеся с буквы А, просто набрав ls A и нажмите Tab клавишу дважды, вместо того, чтобы нажимать Enter. Если существует только один файл, начинающийся с «А», этот файл будет показан как аргумент ls (или любую команду оболочки, если на то пошло) немедленно.
3.3.3.2. Который
Очень простой способ поиска файлов — использование , которые Команда для поиска нужного файла в каталогах, перечисленных в пути поиска пользователя. Разумеется, поскольку путь поиска содержит только пути к каталогам, содержащим исполняемые программы, , которые не работает для обычных файлов. , которые Команда полезна при устранении неполадок «Команда не найдена». В примере ниже пользователь Тина не могу использовать акрорид программе, в то время как у ее коллеги нет никаких проблем в той же системе. Проблема аналогична PATH проблема в предыдущей части: коллега Тины говорит ей, что он может увидеть нужную программу в
/opt/acroread/bin, но этого каталога нет в ее пути:
тина:~> который находится наверху
/usr/bin/который: нет акрочтения в (/bin:/usr/bin:/usr/bin/X11)
тина:~> который находится наверху
/usr/bin/который: нет акрочтения в (/bin:/usr/bin:/usr/bin/X11)
Проблему можно решить, указав полный путь к запускаемой команде или повторно экспортировав содержимое файла.
Переменная PATH:
тина:~> экспортировать PATH=$PATH:/opt/acroread/bin
тина:~> echo $ PATH
/bin:/usr/bin:/usr/bin/X11:/opt/acroread/bin
тина:~> экспортировать PATH=$PATH:/opt/acroread/bin
тина:~> echo $ PATH
/bin:/usr/bin:/usr/bin/X11:/opt/acroread/bin
Посмотрите на график , которые команда также проверяет, является ли команда псевдонимом для другой команды:
Геррит:~> который -a ls
ls имеет псевдоним `ls -F --color=auto' ls равен /bin/ls
Геррит:~> который -a ls
ls имеет псевдоним `ls -F --color=auto' ls равен /bin/ls
Если это не работает в вашей системе, используйте команду псевдоним команда:
Тилле@www:~/mail$ псевдоним лс
псевдоним ls='ls --color'
Тилле@www:~/mail$ псевдоним лс
псевдоним ls='ls --color'
3.3.3.3. Найдите и найдите
Это настоящие инструменты, используемые при поиске других путей, помимо тех, которые указаны в пути поиска. найдите Инструмент, известный из UNIX, очень мощный, что может быть причиной несколько более сложного синтаксиса. ГНУ найдите, однако, имеет дело с синтаксическими проблемами. Эта команда не только позволяет выполнять поиск по именам файлов, но также может принимать размер файла, дату последнего изменения и другие свойства файла в качестве критериев поиска. Чаще всего используется для поиска имен файлов:
найдите -имя
Это можно интерпретировать как «Просмотреть все файлы и подкаталоги, содержащиеся по заданному пути, и вывести имена файлов, содержащие строку поиска в их имени» (а не в их содержимом).
Еще одно применение найдите предназначен для поиска файлов определенного размера, как в примере ниже, где пользователь Питер
хочет найти в текущем каталоге или одном из его подкаталогов все файлы размером более 5 МБ:
Питер:~> находить . -размер +5000 тыс.
Psychotic_chaos.mp3
Питер:~> находить . -размер +5000 тыс.
Psychotic_chaos.mp3
Если вы покопаетесь в man-страницах, вы увидите это. найдите также может выполнять операции с найденными файлами. Типичным примером является удаление файлов. Лучше сначала протестировать без -Exec вариант, что выбраны правильные файлы, после этого команду можно повторно запустить для удаления выбранных файлов. Ниже мы ищем файлы, заканчивающиеся на .tmp:
Питер:~> находить . -name "*.tmp" -exec rm {} \;
Питер:~>
Питер:~> находить . -name "*.tmp" -exec rm {} \;
Питер:~>
Оптимизируйте!
Эта команда вызовет rm столько раз, сколько будет найден файл, отвечающий требованиям. В худшем случае это может произойти тысячи или миллионы раз. Это довольно большая нагрузка на вашу систему.
Более реалистичным способом работы было бы использование вертикальной черты (|) и xargs инструмент с rm в качестве аргумента. Таким образом, rm Команда вызывается только тогда, когда командная строка заполнена, а не для каждого файла. Дополнительную информацию об использовании перенаправления ввода-вывода для облегчения повседневных задач см. в главе 5.
Позже (в 1999 году, согласно man-страницам, после 20 лет найдите), разместить был развит. Эта программа проще в использовании, но более ограничена, чем найдите, поскольку его выходные данные основаны на базе данных индексов файлов, которая обновляется только один раз в день. С другой стороны, поиск в разместить база данных использует меньше ресурсов, чем найдите и поэтому показывает результаты практически мгновенно.
Большинство дистрибутивов Linux используют размещать в наши дни улучшенная безопасность находит современную версию разместить это не позволяет пользователям получать данные, которые они не имеют права читать. Файлы в кореньДомашний каталог пользователя является таким примером, но обычно он недоступен для публики. Пользователь, который хочет найти кого-то, кто знает об оболочке C, может ввести команду разместить .cshrc, чтобы отобразить всех пользователей, у которых есть настроенный файл конфигурации для оболочки C. Предположим, что пользователи корень и Дженни запускаете оболочку C, то только файл
/home/Дженни/.cshrc будет отображаться, а не тот, что в кореньдомашний каталог. В большинстве систем
locate — это символическая ссылка на программу slocate:
Билли: ~> ls -l /usr/bin/найти
lrwxrwxrwx 1 корневой slocate 7 28 октября 14:18 /usr/bin/locate -> slocate*
Билли: ~> ls -l /usr/bin/найти
lrwxrwxrwx 1 корневой slocate 7 28 октября 14:18 /usr/bin/locate -> slocate*
Информация о пользователе Тина мог бы использовать разместить чтобы найти нужное ей приложение:
тина:~> найти акрорид
/usr/share/icons/hicolor/16x16/apps/acroread.png
/usr/share/icons/hicolor/32x32/apps/acroread.png
/usr/share/icons/locolor/16x16/apps/acroread.png
/usr/share/icons/locolor/32x32/apps/acroread.png
/usr/local/bin/acroread
/usr/local/Acrobat4/Reader/intellinux/bin/acroread
/usr/local/Acrobat4/bin/acroread
тина:~> найти акрорид
/usr/share/icons/hicolor/16x16/apps/acroread.png
/usr/share/icons/hicolor/32x32/apps/acroread.png
/usr/share/icons/locolor/16x16/apps/acroread.png
/usr/share/icons/locolor/32x32/apps/acroread.png
/usr/local/bin/acroread
/usr/local/Acrobat4/Reader/intellinux/bin/acroread
/usr/local/Acrobat4/bin/acroread
Каталоги, которые не содержат имени бункер не могут содержать программу — они не содержат исполняемых файлов. Осталось три возможности. Файл в / USR / местные / бен единственный Тина хотелось бы: это ссылка на сценарий оболочки, который запускает реальную программу:
тина:~> файл /usr/local/bin/acroread
/usr/local/bin/acroread: символическая ссылка на ../Acrobat4/bin/acroread
тина:~> файл /usr/local/Acrobat4/bin/acroread
/usr/local/Acrobat4/bin/acroread: текст исполняемого сценария оболочки Bourne
тина:~> файл /usr/local/Acrobat4/Reader/intellinux/bin/acroread
/usr/local/Acrobat4/Reader/intellinux/bin/acroread: 32-битный исполняемый файл ELF LSB, Intel 80386, версия 1, динамически связанный (использует
тина:~> файл /usr/local/bin/acroread
/usr/local/bin/acroread: символическая ссылка на ../Acrobat4/bin/acroread
тина:~> файл /usr/local/Acrobat4/bin/acroread
/usr/local/Acrobat4/bin/acroread: текст исполняемого сценария оболочки Bourne
тина:~> файл /usr/local/Acrobat4/Reader/intellinux/bin/acroread
/usr/local/Acrobat4/Reader/intellinux/bin/acroread: 32-битный исполняемый файл ELF LSB, Intel 80386, версия 1, динамически связанный (использует
общие библиотеки), раздетый Чтобы сделать путь как можно короче и системе не приходилось искать слишком долго каждый раз, когда пользователь хочет выполнить команду, мы добавляем / USR / местные / бен к пути, а не к другим каталогам, которые
содержат только двоичные файлы одной конкретной программы, тогда как / USR / местные / бен содержит другие полезные
программы тоже.
И снова описание всех возможностей найдите и разместить можно найти на информационных страницах.
3.3.3.4. Команда grep
3.3.3.4.1. Общая фильтрация строк
Простая, но мощная программа, GREP используется для фильтрации входных строк и возврата определенных шаблонов на выход. Существуют буквально тысячи заявок на GREP программа. В примере ниже Джерри использования GREP посмотреть, как он это сделал найдите:
Джерри:~> grep -a найти .bash_history
находить . -имя пользователя информация человек найти
найти ../-имя common.cfg
Джерри:~> grep -a найти .bash_history
находить . -имя пользователя информация человек найти
найти ../-имя common.cfg
История поиска
Также в этих случаях полезна функция поиска в колотить, активируется нажатием Ctrl+R сразу, как в примере, где мы хотим проверить, как мы это сделали в последний раз найдите еще раз:
Томас ~> ^R
(обратный поиск)`найти': найти `/home/thomas` -name *.xml
Томас ~> ^R
(обратный поиск)`найти': найти `/home/thomas` -name *.xml
Введите строку поиска в строке поиска. Чем больше символов вы вводите, тем более ограниченным становится поиск. При этом считывается история команд для этого сеанса оболочки (которая записывается в
.bash_history в вашем домашнем каталоге при выходе из этого сеанса). Отображается самое последнее вхождение вашей строки поиска. Если вы хотите просмотреть предыдущие команды, содержащие ту же строку, введите Ctrl+R .
См. информационные страницы на колотить больше.
Во всех UNIX-системах, если у них есть хоть капля приличия, есть онлайн-словарь. Так же и Линукс. Словарь представляет собой список известных слов в файле с именем слова, находится в / USR / доля / дикт. Чтобы быстро проверить правильность написания слова, не нужно графическое приложение:
Уильям:~> grep пингвин /usr/share/dict/words
Уильям:~> grep пингвин /usr/share/dict/words
пингвин пингвины
Уильям:~> grep пингвин /usr/share/dict/words
Уильям:~> grep пингвин /usr/share/dict/words
пингвин пингвины
Словарь и список слов
Некоторые дистрибутивы предлагают ДИКТ команда, которая предлагает больше возможностей, чем просто поиск слов в списке.
Кто является владельцем домашнего каталога рядом с моим? Эй, вот его номер телефона!
Лиза:~> grep gdbruyne /etc/passwd
gdbruyne:x:981:981:Гай Дебрюйн, тел. 203234:/home/gdbruyne:/bin/bash
Лиза:~> grep gdbruyne /etc/passwd
gdbruyne:x:981:981:Гай Дебрюйн, тел. 203234:/home/gdbruyne:/bin/bash
И еще раз, какой адрес электронной почты был у Арно?
серж:~/mail> grep -я знаю *
отправленное письмо: Кому:[электронная почта защищена]>
отправленное письмо: понедельник, 24 декабря 2001 г., [электронная почта защищена] писал:
серж:~/mail> grep -я знаю *
отправленное письмо: Кому:[электронная почта защищена]>
отправленное письмо: понедельник, 24 декабря 2001 г., [электронная почта защищена] писал:
find иlocate часто используются в сочетании с grep для определения некоторых серьезных запросов. Дополнительную информацию см. в главе 5 о перенаправлении ввода-вывода.
3.3.3.4.2. Специальные символы
Символы, имеющие особое значение для оболочки, должны быть спасся. Escape-символом в Bash является обратная косая черта, как и в большинстве оболочек; это лишает особого значения следующего символа. Оболочке известно несколько специальных символов, среди наиболее распространенных /, ., ? и *. Полный список можно найти на информационных страницах и в документации вашей оболочки.
Например, предположим, что вы хотите отобразить файл «*» вместо всех файлов в каталоге, вам придется использовать