- Основы Linux от основателя Gentoo. Часть 1 (4/4): Glob-подстановки
- Использование джокеров
- Знакомство с джокерами
- Неподходящие шаблоны
- Синтаксис джокеров: * и ?
- Синтаксис джокера: []
- Предостережения о джокерах
- Примечание:
- Подведение итогов и ссылки на другие ресурсы
- Ссылки
- Об авторах
- Daniel Robbins
- Chris Houser
- Aron Griffis
- Основы Linux от основателя Gentoo. Часть 2 (5/5): Модули ядра
- Модули ядра
- Знакомьтесь, «uname»
- Подробнее о uname
- Релиз ядра
- Введение в модули ядра
- Модули ядра вкратце
- lsmod
- Список модулей
- Сторонние модули
- depmod и компания
- Как получить модули
- Использование depmod
- Расположение модулей ядра
- insmod vs. modprobe
- rmmod и modprobe в действии
- Ваши помощники modinfo и modules.conf
- Структура modules.conf
- Итоги и ресурсы
- Итоги
- Ресурсы
- Об авторах
- Daniel Robbins
- Chris Houser
- Aron Griffis
Основы Linux от основателя Gentoo. Часть 1 (4/4): Glob-подстановки
Заключительная часть перевода первой части замечательной серии учебных пособий. Предыдущие отрывки по ссылкам: начало, второй и третий.
В данном, четвертом, отрывке рассматривается использование джокеров (wild cards) *, [] и ? для подставления путей по шаблону. А также, подводятся итоги первой части. Enjoy! 😉
Использование джокеров
Знакомство с джокерами
В повседневном использовании Linux часто случается, когда вам нужно выполнить единичную операцию (например rm) на множестве объектов файловой системы за раз. В подобных ситуациях вписывать множество файлов в командную строку, зачастую, довольно обременительно:
Для решения этой проблемы, вы можете извлечь пользу из встроенной в Linux поддержки джокеров. Эта поддержка также называется «globbing» (по историческим причинам; в русском также известно как «универсализация файловых имен» — прим. пер.), позволяет указать множество файлов за раз, используя шаблон «дикой конкатенации». Bash и другие команды Linux интерпретируют этот шаблон просматривая диск в поисках файлов, которые ему удовлетворяют. Так, если у вас есть файлы file1 до file8 в текущей рабочей директории, то можете их удалить набрав:
Или если просто хотите удалить все файлы с именами начинающимися с file, включая сам файл по имени file, вы можете набрать:
Дикая конкатенация «*» совпадает с любым символом или набором символов, или даже с их отсутствием. Разумеется, glob-джокеры возможно использовать для гораздо большего, чем простое удаление файлов, как мы увидим в дальнейшем.
Неподходящие шаблоны
Если вам необходимо перечислить все объекты файловой системы в /etc, начинающиеся с «g», а также сам g, то можно ввести:
А сейчас о том, что случится если вы укажите шаблон, который не подходит ни под один объект файловой системы. В следующем примере мы попытались перебрать все файлы в /usr/bin, которые начинаются с «asdf» и оканчиваются на «jkl», потенциально включая и asdfjkl:
$ ls -d /usr/bin/asdf*jkl
ls: /usr/bin/asdf*jkl: No such file or directory
Вот что случится. Обычно, когда мы задаем шаблон, и если в него укладываются один или несколько файлов в подразумеваемой файловой системе, то bash заменяет наш шаблон на разделенный пробелами список всех подходящих объектов. Однако, когда с шаблоном нет совпадений, bash оставляет переданный аргумент с джокерами как есть. Так вот, затем ls не может найти файл /usr/bin/asdf*jkl и выдает нам ошибку. Основное правило тут такое: glob-шаблоны разворачиваются только если совпадают с объектами файловой системы. В противном случае, остаются не тронутыми и буквально передаются в вызов программы.
Синтаксис джокеров: * и ?
Так, мы уже посмотрели как работает globbing, теперь же стоит рассмотреть синтаксис джокеров. В качестве джокеров используются специальные символы:
* — совпадает с нулевым или большим количеством символов. Это значит: «тут может быть все что угодно, включая и ничего». Примеры:
- /etc/g* совпадает со всеми файлами в /etc, начинающимися с g и самим файлом g;
- /tmp/my*1 совпадает со всеми файлами в /tmp, которые начинаются с my и заканчиваются 1, включая файл my1.
? — равен любому одному символу. Примеры:
- myfile? совпадает с любым файлом, чье имя составляет myfile и следующим за этим какой-либо один символ;
- /tmp/notes?txt совпадет, например, с /tmp/notes.txt и /tmp/notes_txt, если они существуют.
Синтаксис джокера: []
Этот джокер похож на ?, но более точен. Чтобы его использовать, поместите любые символы, какие вам нужны, внутрь []. Полученное выражение будет удовлетворять любому одному из этих символов. Вы также можете воспользоваться «-«, для указания диапазона, и даже комбинации диапазонов. Примеры:
- myfile[12] совпадет с myfile1 и myfile2. Джокер сработает если хотя бы один из этих файлов существует в текущей директории;
- [Cc]hange[Ll]og совпадет с Changelog, ChangeLog, changeLog и changelog. Как можете заметить, использование скобочных джокеров очень удобно для указания вариантов с заглавными буквами;
- ls /etc/5* покажет все файлы в /etc, начинающиеся с десятичной цифры;
- ls /tmp/[A-Za-z]* отобразит все файлы в /tmp, которые начинаются с большой или маленькой латинской буквы.
Конструкция [!] эквивалентна конструкции [], за исключением того, что вместо совпадения с символами внутри скобок, она удовлетворяет любому символу, который НЕ перечислен между [! и ]. Пример:
- rm myfile[!9] удалит все файлы с названием myfile плюс один символ, кроме myfile9.
Предостережения о джокерах
Сейчас несколько предостережений, чтобы быть осторожными во время использования джокеров. Поскольку bash обрабатывает относящиеся к джокерам символы (?, [, ] и *) особым образом, вам надо особенно позаботиться, когда вы пишите аргумент для команды, содержащий эти символы. Например, если вы хотите создать файл, содержащий строку «[fo]*», то следующая команда может не дать желаемого результата:
$ echo [fo]* > /tmp/mynewfile.txt
Если шаблон [fo]* совпадет с какими-либо файлами в текущей рабочей директории, то вы обнаружите их имена внутри /tmp/mynewfile.txt, вместо ожидаемого [fo]*. Решение? Ну, одним из них будет огородить ваши символы в одиночные кавычки, которые сообщат bash не делать никаких раскрытий джокеров в них:
$ echo ‘[fo]*’ > /tmp/mynewfile.txt
Используя этот подход, ваш новый файл будет содержать [fo]* буквально, как и предполагалось. Также, вы можете использовать экранирующую обратную косую черту, чтобы сообщить bash, что [, ] и * должны интерпретироваться буквально, а не как джокеры:
$ echo \[fo\]\* > /tmp/mynewfile.txt
Оба подхода (одиночные кавычки и экранирующая обратная косая черта) работают с одинаковым эффектом. Поскольку мы заговорили про обработку обратной косой черты, то неплохо бы было сейчас прояснить, что на случай, если вы хотите указать \ буквально, можно либо также взять ее в одиночные кавычки, либо набрать \\ (это будет обращено в \).
Примечание:
Двойные кавычки работают также как и одиночные, но всё еще разрешают bash делать некоторую ограниченную обработку. Следовательно, одиночные кавычки — ваш лучший выбор, если вы действительно заинтересованны в буквальной передаче текста в команду. Получить больше информации о раскрытии джокеров можно набрав man 7 glob. Чтобы получить больше информации о кавычках в bash, наберите man 1 bash и прочитайте раздел под названием QUOTING. Если в ваши планы входит сдача экзаменов LPI, то рассматривайте это как свое домашнее задание. =)
Подведение итогов и ссылки на другие ресурсы
Поздравляем; Вы добрались до конца нашего обзора об основах Linux! Я надеюсь, что это помогло вам укрепить свои фундаментальные познания в Linux. Темы, которые вы здесь изучили, включая основы работы в bash, основные команды Linux, ссылки и джокеры — заложили фундамент для нашего следующего пособия об основах администрирования, в котором мы рассмотрим такие темы, как регулярные выражения, принадлежность и права доступа, управления аккаунтами пользователей, и многое другое.
Продолжая погружаться в эти учебные пособия, вы скоро достигните LPIC Level 1 сертификации от Linux Professional Institute. Говоря об этой сертификации, если это действительно то, в чем вы заинтересованы, мы рекомендуем вам изучить ресурсы из параграфа ниже, которые были внимательно подобраны к материалу освещенному в этом руководстве.
Ссылки
В серии статей «Bash в примерах», Дэниэль показывает как использовать программные конструкции bash для написания ваших собственных bash-скриптов. Эта серия (в основном 1 и 2 части) будет отличной подготовкой для LPIC Level 1:
- Bash в примерах, Часть 1: Основы программирования в Bourne-again shell — на английском, перевод на русский ожидается
- Bash в примерах, Часть 2: Ещё больше об основах программирования в bash — на английском, ждите перевода
- Bash в примерах, Часть 3: Рассматриваем систему ebuild-ов — на английском, перевод будет
Продолжение.
Об авторах
Daniel Robbins
Дэниэль Роббинс — основатель сообщества Gentoo и создатель операционной системы Gentoo Linux. Дэниэль проживает в Нью-Мехико со свой женой Мэри и двумя энергичными дочерьми. Он также основатель и глава Funtoo, написал множество технических статей для IBM developerWorks, Intel Developer Services и C/C++ Users Journal.
Chris Houser
Крис Хаусер был сторонником UNIX c 1994 года, когда присоединился к команде администраторов университета Тэйлора (Индиана, США), где получил степень бакалавра в компьютерных науках и математике. После он работал во множестве областей, включая веб-приложения, редактирование видео, драйвера для UNIX и криптографическую защиту. В настоящий момент работает в Sentry Data Systems. Крис также сделал вклад во множество свободных проектов, таких как Gentoo Linux и Clojure, стал соавтором книги The Joy of Clojure.
Aron Griffis
Эйрон Гриффис живет на территории Бостона, где провел последнее десятилетие работая в Hewlett-Packard над такими проектами, как сетевые UNIX-драйвера для Tru64, сертификация безопасности Linux, Xen и KVM виртуализация, и самое последнее — платформа HP ePrint. В свободное от программирования время Эйрон предпочитает размыщлять над проблемами программирования катаясь на своем велосипеде, жонглируя битами, или болея за бостонскую профессиональную бейсбольную команду «Красные Носки».
Источник
Основы Linux от основателя Gentoo. Часть 2 (5/5): Модули ядра
В заключительном отрывке второй части описаны основы управление модулями ядра Linux. Этот минимум неплохо знать всякому пользователю, однако, не стоит надеяться обнаружить в этом руководстве для начинающих информацию по сборке и конфигурированию модулей ядра.
Навигация по основам Linux от основателя Gentoo:
Часть I
- BASH: основы навигации (вступление)
- Управление файлами и директориями
- Ссылки, а также удаление файлов и директорий
- Glob-подстановки (итоги и ссылки)
Часть II
- Регулярные выражения (вступление)
- Назначения папок, поиск файлов
- Управление процессами
- Обработка текста и перенаправления
- Модули ядра (итоги и ссылки)
Часть III: 1, 2, 3, 4
Модули ядра
Знакомьтесь, «uname»
Команда uname дает множество интересной информации о вашей системе. Вот пример вывода на моей рабочей машине, после того, как я набрал uname -a, что говорит команде uname напечатать всю имеющуюся информацию:
$ uname -a
Linux inventor 2.4.20-gaming-r1 #1 Fri Apr 11 18:33:35 MDT 2003 i686 AMD Athlon(tm) XP 2100+ AuthenticAMD GNU/Linux
Подробнее о uname
Теперь, давайте посмотрим, какую же информацию о системе может дать uname
Интригующе! А что напечатает uname -a у вас?
Релиз ядра
А теперь небольшой трюк. Для начала выполните uname -r чтобы программа напечатала релиз ядра, которое работает в данный момент.
Теперь посмотрите в директорию /lib/modules и — опа! — Я уверен, что вы обнаружили каталог с точно таким же именем! OK, никакой магии, теперь самое время поговорить о значении каталогов в /lib/modules, а также объяснить, что такое модули ядра.
Ядро Linux это сердце того, что обычно называют «Linux» — это кусок кода, который напрямую взаимодействует с вашим железом и абстрагирует от него обычные программы. Благодаря ядру, вашему текстовому редактору не нужно беспокоиться на какой диск, SCSI или IDE, а может даже в RAM, он производит запись. Редактор просто записывает в файловую систему, а ядро заботится обо всем остальном.
Введение в модули ядра
Итак, что такое модули ядра? Они представляют собой часть ядра, которая сохраняется на диске в специальном формате. По вашей команде, они подгружаются в работающее ядро и добавляют в него новую функциональность.
Поскольку модули ядра загружаются по требованию, вы можете иметь ядро поддерживающее дополнительную функциональность, которая в обычном состоянии будет выключена и недоступна.
Но «раз в сто лет», эти модули окажутся очень полезными и смогут быть загружены — часто автоматически — для поддержки диковинной файловой системы или устройства, которое вы редко используете.
Модули ядра вкратце
В общем, модули ядра позволяют по требованию добавить возможностей в работающее ядро. Без модулей, вам бы пришлось компилировать новое ядро и перезагружаться для того, чтобы добавить поддержку чего-нибудь нового.
lsmod
Для просмотра загруженных модулей на вашей системе используйте команду lsmod:
Список модулей
Как видите, на моей системе загружено достаточно немного модулей. vmnet и vmmon модули, обеспечиваю необходимую функциональность для VMWare Workstation, которая позволяет мне запускать виртуальные машины в окне рабочего стола. Модуль nvidia выпущен NVIDIA corporation и позволяет использовать 3D-ускорение в Linux.
Дальше у меня есть набор модулей, которые используются для поддержки USB устройств ввода — mousedev, hid, usbmouse, input, usb-ohci, ehci-hcd и usbcore. Имеет смысл сконфигурировать ваше ядро для поддержки USB модулей. Почему? Потому что USB девайсы это «plug and play» (подключай и работай) девайсы и если у вас есть поддержка USB в модулях, вы можете спокойно пойти и купить новое USB устройство, подключить его, и ваша система автоматически загрузит соответствующие модули для этого устройства. Это удобный способ сделать что-то.
Сторонние модули
Завершают этот список модули: emu10k1, ac97_codec и sound, которые вместе обеспечиваю поддержку моей звуковой карты Audigy.
Следует отметить, некоторые из моих модулей доступны прямо в исходниках ядра. Например, все USB-модули были скомпилированы из стандартных исходных текстов ядра Linux. Однако, nvidia, emu10k1 и VMWare-модули были получены из других источников. Это подчеркивает другую важную особенность модулей ядра — возможность сторонних производителей добавлять необходимую функциональность в ядро и включать ее прямо в запущенное ядро. Без перезагрузки.
depmod и компания
В моей папке /lib/modules/2.4.20-gaming-r1/, есть несколько
файлов которые начинаются со строки «modules.»:
$ ls /lib/modules/2.4.20-gaming-r1/modules.*
/lib/modules/2.4.20-gaming-r1/modules.dep
/lib/modules/2.4.20-gaming-r1/modules.generic_string
/lib/modules/2.4.20-gaming-r1/modules.ieee1394map
/lib/modules/2.4.20-gaming-r1/modules.isapnpmap
/lib/modules/2.4.20-gaming-r1/modules.parportmap
/lib/modules/2.4.20-gaming-r1/modules.pcimap
/lib/modules/2.4.20-gaming-r1/modules.pnpbiosmap
/lib/modules/2.4.20-gaming-r1/modules.usbmap
Эти файлы содержат множество информации о различных зависимостях. В том числе, они содержат информацию о зависимостях для модулей — некоторые модули требуют загрузки других модулей перед тем как быть запущенными.
Как получить модули
Некоторые модули ядра разработаны для работы со специальными устройствами, как например emu10k1 — модуль для поддержки моей звуковой карты. Для этого типа модулей, приведенные выше файлы включают также информацию о PCI IDs и прочие идентификационные метки оборудования, которое они поддерживают. Эта информация может быть использована различными скриптами, например «hotplug» (который мы рассмотрим в следующих руководствах) для автоматического определения оборудования и загрузки соответствующих модулей.
Использование depmod
Информация о зависимостях может становиться не актуальной, особенно в случае установки новых модулей. Чтобы ее обновить, просто введите depmod -a. Программа depmod просканирует модули из вашей папки /lib/modules и обновит информацию о зависимостях. Она делает это сканируя модули в /lib/modules и проверяя так называемые «symbols» внутри модулей.
Расположение модулей ядра
Итак, как выглядят модули ядра? Для ядра 2.4, все файлы модулей обычно находятся в /lib/modules и имеют имя оканчивающееся на «.o» (для 2.6 «.ko» — прим. ред.). Чтобы увидеть все модули из /lib/modules, введите следующее:
# find /lib/modules -name ‘*.o’
/lib/modules/2.4.20-gaming-r1/misc/vmmon.o
/lib/modules/2.4.20-gaming-r1/misc/vmnet.o
/lib/modules/2.4.20-gaming-r1/video/nvidia.o
/lib/modules/2.4.20-gaming-r1/kernel/fs/fat/fat.o
/lib/modules/2.4.20-gaming-r1/kernel/fs/vfat/vfat.o
/lib/modules/2.4.20-gaming-r1/kernel/fs/minix/minix.o
[список обрезан для краткости]
insmod vs. modprobe
Итак, как же подгрузить модуль в работающее ядро? Один из вариантов, использовать команду
insmod и указать ей полный путь к модулю, который вы хотите загрузить:
Хотя, обычно модули загружают используя команду modprobe. Одна из приятных вещей, которую делает modprobe это автоматическая загрузка всех необходимых зависимостей для данного модуля. Кроме того, вам не нужно указывать полный путь и расширение загружаемого модуля.
rmmod и modprobe в действии
Давайте выгрузим наш модуль fat.o и загрузим его обратно используя modprobe:
Как видите, работа команды rmmod очень похожа на работу modprobe, но имеет противоположный эффект — она выгружает указанный модуль.
Ваши помощники modinfo и modules.conf
Можете воспользоваться командой modinfo, чтобы узнать пару интересных вещей о своих любимых модулях:
Также обратите внимание на файл /etc/modules.conf. Он содержит настройки для modprobe и позволяет изменять поведение modprobe. Например, указывать какие модули загруть до/после загрузки остальных, запускать скрипты до и после загрузки модуля, и многое другое.
Структура modules.conf
Синтаксис и функциональность modules.conf достаточно сложны, и мы не будем в них сейчас углубляться (наберите man modules.conf чтобы узнать все подробности), но есть несколько вещей, которые вы должны знать об этом файле.
Во-первых, многие дистрибутивы генерируют этот файл автоматически из набора файлов в других директориях, таких как /etc/modules.d/. Например, в Gentoo Linux есть такая папка, и запуск команды update-modules прочитает все файлы из /etc/modules.d/ и объединит их в новый /etc/modules.conf. Поэтому, сделав свои изменения в файлах из /etc/modules.d/ запустите update-modules, если вы используете Gentoo. В Debian, процедура очень похожа, за исключением того, что папка называется /etc/modutils/.
Для ядер версии 2.6 аналогичные по функциональности файл и папка из каталога etc называются modprobe.conf и modprobe.d соответственно. Синтаксис там упрощен, смотрите man modprobe.conf
— Примечание редактора.
Итоги и ресурсы
Итоги
Мои поздравления; вы дошли до конца этого учебника по основам администрирования Linux! Надеюсь он помог вам немного систематизировать ваши знания о Linux. Пожалуйста присоединяйтесь к нам в следующем руководстве раскрывающем более продвинутые аспекты администрирования, такие как права доступа, управление пользователями, файловую систему, монтирование и многое другое. В следующем руководстве мы будем опираться на фундамент, заложенный здесь. И помните, продолжая изучать эту серию руководств, вы уже совсем скоро будете готовы сдаче экзаменов на получение сертификата LPIC Level 1 от Linux Professional Institute.
Ресурсы
Говоря о сертификации LPIC, если вы действительно в ней заинтересованы, то я настоятельно рекомендую вам изучить следующие источники, которые были тщательно выбраны для расширения знаний полученных в этом руководстве.
В сети есть множество хороших руководств по регулярным выражениям. Вот парочка:
Можете прочитать стандарт иерархии файловой системы (Filesystem Hierarchy Standard) на http://www.pathname.com/fhs/.
В серии Bash в примерах (будет перевод), я покажу вам как использовать инструкции bash для написания ваших собственных скриптов. Это серия (особенно первая и вторая части) будет хорошей подготовкой к экзамену LPIC Level 1:
Вы можете узнать больше о sed в серии руководств Sed в примерах (будет переведено). Если вы планируете сдавать LPI экзамен, убедитесь что прочитали первые две части этой серии.
Чтобы узнать больше об awk, обратитесь к серии Awk в примерах (перевод будет).
Если вы не знакомы с редактором vi, Я настоятельно рекомендую вам посмотреть мое руководство Vi — the cheat sheet method. Этот учебник станет легким, но и стремительным введением в этот мощный текстовый редактор. Считайте, что это материал необходимый к прочтению, если вы не знаете как пользоваться vi.
Спасибо Dmitry Minsky (Dmitry.Minsky@gmail.com) за перевод.
Об авторах
Daniel Robbins
Дэниэль Роббинс — основатель сообщества Gentoo и создатель операционной системы Gentoo Linux. Дэниэль проживает в Нью-Мехико со свой женой Мэри и двумя энергичными дочерьми. Он также основатель и глава Funtoo, написал множество технических статей для IBM developerWorks, Intel Developer Services и C/C++ Users Journal.
Chris Houser
Крис Хаусер был сторонником UNIX c 1994 года, когда присоединился к команде администраторов университета Тэйлора (Индиана, США), где получил степень бакалавра в компьютерных науках и математике. После он работал во множестве областей, включая веб-приложения, редактирование видео, драйвера для UNIX и криптографическую защиту. В настоящий момент работает в Sentry Data Systems. Крис также сделал вклад во множество свободных проектов, таких как Gentoo Linux и Clojure, стал соавтором книги The Joy of Clojure.
Aron Griffis
Эйрон Гриффис живет на территории Бостона, где провел последнее десятилетие работая в Hewlett-Packard над такими проектами, как сетевые UNIX-драйвера для Tru64, сертификация безопасности Linux, Xen и KVM виртуализация, и самое последнее — платформа HP ePrint. В свободное от программирования время Эйрон предпочитает размыщлять над проблемами программирования катаясь на своем велосипеде, жонглируя битами, или болея за бостонскую профессиональную бейсбольную команду «Красные Носки».
Источник