11 выведите из текущего каталога файлы имя которых содержит буквы b или i
Глава 15. Формирование списков имен файлов на основе шаблонов
Командная оболочка также ответственна за формирование списков имен файлов на основе шаблонов (или динамическую генерацию списков имен файлов). В данной главе даются пояснения относительно работы данного механизма.
Звездочка (*)
Звездочка * интерпретируется командной оболочкой как символ для генерации списка имен файлов, причем сам символ звездочки может преобразовываться в любую комбинацию символов (или даже в строку без символов). В том случае, если не задано пути к директории для формирования списка имен файлов, командная оболочка будет использовать имена файлов из текущей директории. Обратитесь к странице руководства glob(7) для получения дополнительной информации. (Данный вопрос также рассматривается в теме LPI 1.103.3.)Знак вопроса (?)
Аналогично звездочке, знак вопроса ? интерпретируется командной оболочкой как символ для генерации списка имен файлов, причем сам знак вопроса соответствует ровно одному символу имени файла.Квадратные скобки ([])
Открывающаяся квадратная скобка [ интерпретируется командной оболочкой как символ для генерации списка имен файлов, соответствующий любым из символов, находящихся между символом [ и первым следующим за ним символом ] . Порядок следования символов в списке между скобками не имеет значения. Каждая пара символов скобок заменяется ровно на один символ. Также с помощью символа восклицательного знака ! вы можете исключать символы из списка, расположенного между квадратными скобками. Кроме того, у вас имеется возможность создания комбинаций из описанных выше шаблонов .Диапазоны a-z и 0-9
Командная оболочка bash также распознает объявления диапазонов символов между квадратными скобками.Переменная окружения $LANG и квадратные скобки
В ходе работы с командной оболочкой не стоит забывать о влиянии на процесс генерации имен файлов значения переменной окружения LANG . Причина этого влияния заключается в том, что в некоторых языках строчные буквы включаются в диапазон прописных букв (и наоборот).В том случае, если в вашей системе устанавливается значение переменной окружения $LC_ALL , оно также должно быть сброшено для осуществления корректной генерации списков имен файлов.
Предотвращение формирования списков имен файлов на основе шаблонов
В примере ниже не должно быть ничего удивительного. При использовании команды echo * в пустой директории будет выведен символ * . А при использовании той же команды в директории с файлами будут выведены имена всех файлов. Формирование списков имен файлов на основе шаблонов может быть предотвращено путем помещения специальных символов в кавычки, а также экранирования этих символов таким образом, как показано в примере ниже.Практическое задание: формирование списков имен файлов на основе шаблонов
1. Создайте тестовую директорию и перейдите в нее.
(Имя последнего файла состоит из 6 символов, включая пробел).
3. Выведите список всех имен файлов (с помощью команды ls), которые начинаются с строки file.
4. Выведите список всех имен файлов (с помощью команды ls), которые начинаются с строки File.
5. Выведите список всех имен файлов (с помощью команды ls), которые начинаются с строки file и заканчиваются числовым символом.
6. Выведите список всех имен файлов (с помощью команды ls), которые начинаются с строки file и заканчиваются буквенным символом.
7. Выведите список всех имен файлов (с помощью команды ls), которые начинаются с строки File и имеют пятый числовой символ.
8. Выведите список всех имен файлов (с помощью команды ls), которые начинаются с строки File, имеют пятый числовой символ и никаких символов более.
9. Выведите список всех имен файлов (с помощью команды ls), которые начинаются с буквенного символа и заканчиваются числовым символом.
10. Выведите список всех имен файлов (с помощью команды ls), которые состоят ровно из пяти символов.
11. Выведите список всех имен файлов (с помощью команды ls), которые начинаются с символа f или F и оканчиваются символом 3 или A.
12. Выведите список всех имен файлов (с помощью команды ls), которые начинаются с символа f и оканчиваются числовым символом, причем вторым символом является символ i или R.
13. Выведите список всех имен файлов (с помощью команды ls), которые не начинаются с символа F.
14. Скопируйте значение переменной окружения $LANG в значение переменной окружения $MyLANG.
15. Продемонстрируйте влияние значения переменной окружения $LANG на вывод имен файлов с буквенными символами из диапазонов A-Z или a-z.
16. Вы получили информацию о том, что один из ваших серверов был взломан, причем взломщик, вероятнее всего, подменил бинарный файл с реализацией команды ls . Вы знаете о том, что использование команды echo не несет опасности. Можно ли заменить команду ls командой echo ? Как вы будете выводить список файлов в текущей директории с помощью команды echo ?
17. Существуют ли другие команды, помимо cd, предназначенные для изменения текущей директории?
Корректная процедура выполнения практического задания: формирование списков имен файлов на основе шаблонов
1. Создайте тестовую директорию и перейдите в нее.
(Имя последнего файла состоит из 6 символов, включая пробел).
3. Выведите список всех имен файлов (с помощью команды ls), которые начинаются с строки file.
4. Выведите список всех имен файлов (с помощью команды ls), которые начинаются с строки File.
5. Выведите список всех имен файлов (с помощью команды ls), которые начинаются с строки file и заканчиваются числовым символом.
6. Выведите список всех имен файлов (с помощью команды ls), которые начинаются с строки file и заканчиваются буквенным символом.
7. Выведите список всех имен файлов (с помощью команды ls), которые начинаются с строки File и имеют пятый числовой символ.
8. Выведите список всех имен файлов (с помощью команды ls), которые начинаются с строки File, имеют пятый числовой символ и никаких символов более.
9. Выведите список всех имен файлов (с помощью команды ls), которые начинаются с буквенного символа и заканчиваются числовым символом.
10. Выведите список всех имен файлов (с помощью команды ls), которые состоят ровно из пяти символов.
11. Выведите список всех имен файлов (с помощью команды ls), которые начинаются с символа f или F и оканчиваются символом 3 или A.
12. Выведите список всех имен файлов (с помощью команды ls), которые начинаются с символа f и оканчиваются числовым символом, причем вторым символом является символ i или R.
13. Выведите список всех имен файлов (с помощью команды ls), которые не начинаются с символа F.
14. Скопируйте значение переменной окружения $LANG в значение переменной окружения $MyLANG.
15. Продемонстрируйте влияние значения переменной окружения $LANG на вывод имен файлов с буквенными символами из диапазонов A-Z или a-z.
Обратитесь к примеру в книге.
16. Вы получили информацию о том, что один из ваших серверов был взломан, причем взломщик, вероятнее всего, подменил бинарный файл с реализацией команды ls . Вы знаете о том, что использование команды echo не несет опасности. Можно ли заменить команду ls командой echo ? Как вы будете выводить список файлов в текущей директории с помощью команды echo ?
17. Существуют ли другие команды, помимо cd, предназначенные для изменения текущей директории?
Команды, которые необходимо выполнить в терминале, будут обозначаться следующим образом:
Доллар в начала команды лишь говорит о том, что команду нужно выполнить от имени обычного пользователя, вводить символ доллара как часть команды не нужно. Если первый символ - решётка - это означает, что команду нужно ввести от имени системного администратора (root), что потребуется в некоторых последующих заданиях.
2. Введите команду whoami и нажмите Enter.
3. Нажмите стрелку вверх - появится история набранных команд.
4. Нажмите стрелку вниз, чтобы стереть команду с экрана.
5. Выполните команду с опечаткой: whoaim. Что произошло?
6. Используя историю команд измените команду whoaim на whoami и снова выполните её.
7. Выведите на экран текущие дату и время.
8. Используя команду echo выведите в терминал фразу "Hello World!":
В данном примере аргумент взят внутрь кавчек, таким образом, фраза "Hello World!" станет единым аргументов. Если ввести просто echo Hello World! - bash воспримет это как два самостоятельных агумента: Hello и World!, определяя их по пробелу.
9. Посмотрите историю своих команд.
10. Очистите окно терминала.
Перемещение по файловой системе
1. Установите, в каком каталоге вы сейчас находитесь.
2. Перейдите в корневой каталог (/).
3. Попробуйте перейти на каталог уровнем выше. Проверьте текущий каталог. Изменился ли текущий каталог? Почему?
4. Выведите список файлов текущего каталога.
5. Выведите список файлов каталога /var.
6. Вернитесь в домашний каталог.
7. Поднимитесь на один каталог вверх. Какой стал текущий каталог?
8. Выведите список файлов из текущего каталога.
9. Выведите список файлов из домашнего каталога так, чтобы можно было определить владельца файлов. Используйте справку по команде ls (команда man ls).
Работа с файловой системой
1. Перейдите в домашний каталог.
2. Создайте в домашнем каталоге подкаталог fruits.
3. Перейдите в каталог /. Находясь в каталоге /, создайте в домашнем каталоге подкаталог animals.
4. Создайте во временном каталоге (/tmp) пустой файл temp.
5. Перейдите в ранее созданный каталог fruits.
6. В текущем каталоге создайте пустые файлы apple, banana, pineaple, lion.
7. Находясь в каталоге fruits, в ранее созданном каталоге animals создайте пустые файлы cat.txt, dog.txt, elephant.txt.
8. Определите дату создания файла apple.
9. Выведите из текущего каталога (fruits) файлы, имя которых начинается на b.
10. Выведите из текущего каталога файлы, имя которых оканчивается на a.
11. Выведите из текущего каталога файлы, имя которых содержит буквы b или i.
12. Скопируйте файл /etc/passwd в домашний каталог:
13. Выведите содержимое файла /etc/issue на экран.
14. Скопируйте файл /etc/issue на файл apple так, чтобы заменить файл apple.
15. Выведите содержимое файла apple на экран. Оно должно совпадать с содержимым файла /etc/issue.
16. Переместите файл lion в каталог animals.
17. В имени файла pineaple есть опечатка. Переименуйте файл pineaple в pineapple.
18. Подсчитайте количество строк в файле /etc/passwd.
19. Создайте в домашнем каталоге символьную ссылку с именем passwd_link, указывающую на /etc/passwd.
20. Создайте в домашнем каталоге жёсткую ссылку с именем passwd_hard, указывающую на /etc/passwd.
21. Отследите изменение количества жёстких ссылок у файла /etc/passwd и сравните его с другими файлами.
22. Удалите файл fruits/apple
23. Попробуйте удалить каталог fruits:
Возникнет ошибка. Почему?
24. Создайте пустой каталог rmme и удалите его командой rmdir. Почему команда выполнилась без ошибок?
25. Удалите каталог fruits командой rm -fr.
rm -fr удаляет все каталоги с подкаталогами, не спрашивая и не помещая их в корзину. Этой командой надо пользоваться очень внимательно и только в крайних случаях, так как можно случайно удалить важные данные навсегда.
26. Выведите на экран содержимое файлов /etc/passwd и /varlog/messages одновременно, используя команду cat.
27. Скопируйте каталог /etc/init.d/ в домашний каталог:
Данная команда не выполнится, так как cp по умолчанию копирует файлы по одному. Чтобы скопировать каталог целиком, включая все подкаталоги, используйте команду:
Для начала сделаем поиск passwd в корневой директории root и всех поддиректориях. Эта команда проведет поиск во всех каталогах, куда Вам разрешен доступ; если Вы не имеете прав прочесть содержимое каталога, f ind сообщит, что поиск в данном каталоге Вам запрещен.
Теперь ограничим поиск самой корневой директорией root (level 1) и поддиректориями (level 2).
Теперь ограничим поиск корневой директорией и поддиректориями для уровня ниже (level 2, level 3)
Теперь ограничим поис файлов между уровнями level 2 и level 4
Поиск файлов с одновременным выполнением операций над ними
Найдём все файлы MyCProgram.c без учёта регистра букв и одновременно вычислим для каждого из них md5sum. Внутри фигурных скобок будут автоматически подставлять найденные файлы.
md5sum — программа, позволяющая вычислять значения хеш-сумм (контрольных сумм) файлов по алгоритму MD5. В обычном случае вычисленные хеши выводятся (можно сохранить в файле, для последующего использования). В других случаях, программа сверяет вычисленные значения со значениями, сохраненными в файле (это удобно для массовой проверки целостности файлов). Наиболее часто программа используется для проверки правильной загрузки файлов по сети.
Какие действия можно выполнять при поиске:
- -print Выводит полный путь с именем файла в стандартный вывод
- -ls Выводит полный листинг файла (эквивалентно команде ls -dils )
- -delete Удаляет файл
- -exec command Выполняет указанную команду. Все последующие аргументы до появления; считаются аргументами команды. Строка <> заменяется именем текущего файла
Вот пример, в котором используется действие -exec , которое перемещает все найденные файлы в каталог для резервного копирования. Здесь есть несколько вещей, которые нужно отметить. Обозначение <> будет заменено на полный путь найденного файла, а ; используется для обозначения окончания команды, следующей за -exec . Помните, что ; — это также специальный символ оболочки, и нужно поставить перед ним обратный слэш, чтобы оболочка его не обрабатывала.
Чтобы найти все файлы в каталоге /html/ с расширением .html, и вывести строки из этих файлов, содержащие слово organic, введите:
Чтобы ввести подтверждение выполнения команды для файла, найденного f ind , используйте ключ -ok вместо -exec . Чтобы удалить из Вашего домашнего каталога файлы, доступ к которым осуществлялся более года назад, с подтверждением для каждого файла, введите:
Поиск файлов, не являющихся тем, что указано в условии
Найдем файлы, имя которых не совпадает с MyCProgram.c (регистр букв не учитывается). При этом искать будем только в текущей директории (level 1)
Еще вариант использовать вместо -not обратный слеш с восклицательным знаком:
Найдем файлы в каталоге /bin, владельцем которых не является root:
Поиск файла по уникальному номеру inode
В информатике инодом (или индексным дескриптором) (произносится айнод или инод) называют структуру данных в традиционных файловых системах Unix, таких как UFS. Инод хранит основную информацию о постоянных файлах, каталогах или других объектах файловой системы. А слово node переводится как узел, узловая точка.
При создании файловой системы создаются также и структуры данных, содержащие информацию о файлах. Каждый файл имеет свой инод, идентифицируемый по номеру инода (часто называемый 'i-номером' или инодом), в файловой системе, в которой располагается сам файл.
Иноды хранят информацию о файлах, такую как принадлежность владельцу (пользователю и группе), режим доступа (чтение, запись, запуск на выполнение) и тип файла. Существует определенное числоинодов, которое указывает максимальное количество файлов, допускаемое определенной файловой системой. Обычно, при создании файловой системы примерно 1% ее выделяется под иноды.
Создадим два файла с одинаковыми именами, у второго файла в конце имени пробел. При листинге файлов визуально их никак нельзя отличить друг от друга.
Теперь с помощью опции –i покажем в листинге их номера inode, они различны:
При поиске файлов тоже можно использовать его номер inode, используя -inum . Найдём файл с inode=16187430 и переименуем его. При последующем листинге увидим, что изменилось имя одного файла с тем самым inode.
Можно пользоваться этой техникой при совершении действий над файлами с малоинформативными названиями. Например, файл f ile?.txt содержит спецсимвол — вопросительный знак, который обычно используется в поиске для указания, что на его месте может быть любо символ. Поэтому если вы попытаетесь удалить этот файл rm file?.txt , то удалятся все три файла, которые похожи на него по имени и содержат в позиции вопросительного знака цифры 1 и 2. Итак, у нас три файла:
Чтобы удалить файл с вопросительным знаком, покажем их inode:
И теперь удалим только файл с inode=804180
С другой стороны, пример надуман, потому что существует более простой способ удаления f ile?.txt
Внешние и внутренние команды
Цель работы: Знакомство с возможностями интерпретатора командной строки и командами MS Windows .
Ознакомиться с теоретическим материалом.
Выполнить задания.
Ответить на контрольные вопросы.
Запустить интерпретатор командной строки
Увеличить размер окна интерпретатора и задать цвет фона и цвет шрифта (рекомендуется синий фон и белый шрифт).
Создать список фамилий студентов группы. Отсортировать список в алфавитном порядке и сохранить его в новом файле.
Создать текстовый файл, содержащий справочные сведения по командам DIR, COPY и XCOPY.
Вывести содержимое указанного в таблице 1.1 каталога по указанному формату на экран и в файл.
Скопировать все имеющиеся в каталоге Windows растровые графические файлы в каталог WinGrafika на диске С:. Если диск С: недоступен, использовать любой другой доступный диск.
Скопировать все имеющиеся в каталоге Windows исполняемые файлы в каталог WinEx на диске С:. Если диск С: недоступен, использовать любой другой доступный диск.
Таблица 1.1
Имя каталога | Что выводить | Сортировать по | Атрибуты файлов и каталогов |
%Windows% | Файлы и подкаталоги | По дате | Скрытый |
После этого запуститься программа cmd, в окне консоли которой можно начать писать команды (Рисунок 1 .2).
Рисунок 1.1 – Запуск интерпретатора командной строки CMD
Рисунок 1.2 – Вид интерпретатора командной строки CMD
Увеличить размер окна интерпретатора и задать цвет фона и цвет шрифта (рекомендуется синий фон и белый шрифт).
Увеличим размер окна, задав ширину 100 и высоту 50 (Рисунок 1 .3).
Для изменения используемых цветов в CMD необходимо перейти на вкладку «Цвета». Так как удобнее использовать стандартную цветовую схему (серый текст на черном фоне), то в данные параметры не будем вносить никаких изменений (Рисунок 1 .4).
Рисунок 1.3 – Свойства интерпретатора командной строки CMD
Создать список фамилий студентов группы. Отсортировать список в алфавитном порядке и сохранить его в новом файле.
Рисунок 1.5 – Запись списка фамилий в файл
Полученный файл my.txt, содержит список введенных фамилий (Рисунок 1 .6).
Для сортировки списка фамилий воспользуемся командой SORT, вывод которой направим в новый файл «mysort.txt» (Рисунок 1 .7):
Sort C:\Users\korshevia\desktop\opsys\my.txt> C:\Users\korshevia\desktop\opsys\sortmy.txt
Рисунок 1.6 – Полученный список фамилий
Рисунок 1.7 – Сортировка списка фамилий
Полученный файл mysort.txt содержит список введенных фамилий, отсортированный в алфавитном порядке (Рисунок 1 .8).
Рисунок 1.8 – Содержимое файла mysort.txt
Создать текстовый файл, содержащий справочные сведения по командам DIR, COPY и XCOPY.
(DIR /? % COPY /? % XCOPY /?) > help.txt
Рисунок 1.9 – Запись справочных сведений в файл
Полученный файл help.txt содержит справочные сведения по командам DIR, COPY, XCOPY (Рисунок 1 .10).
Рисунок 1.10, Лист 1 – Справочные сведения по командам DIR, COPY и XCOPY
Вывести содержимое указанного в таблице 1.1 каталога по указанному формату на экран и в файл.
Для вывода информации о содержимом каталога воспользуемся командой: DIR C:\WINDOWS/O:D/A:H
При этом первым параметром служит переменная среды «windir», которая содержит путь к каталогу в котором находится ОС Windows. В качестве второго параметра укажем /A:H (отображение файлов с атрибутом скрытый). В качестве третьего параметра укажем /O:D (сортировка полученного списка по дате). В результате выполнения командного файла на консоль и в файл будет выведена информация о системных файлах в каталоге, где установлена ОС (рисунок 1.11).
Рисунок 1.11 – Результат выполнение командного файла
Скопировать все имеющиеся в каталоге Windows растровые графические файлы в каталог WinGrafika на диске С:. Если диск С: недоступен, использовать любой другой доступный диск.
COPY C:\WINDOWS\*.jpg C:\WinGrafika
Скопировать все имеющиеся в каталоге Windows исполняемые файлы в каталог WinEx на диске С:. Если диск С: недоступен, использовать любой другой доступный диск.
XCOPY C:\Windows\*.exe C:\WinEx\ /H
Рисунок 1.14 – Выполнение копирования исполняемых файлов
После выполнения копирования каталог WinEx будет содержать все исполняемые файлы из каталога Windows (рисунок 1.15).
Рисунок 1.15 – Содержимое каталога WinEx
Получение информации о конкретной команде.
Групповые символы (шаблоны) и их использование.
Условная обработка команд в Windows осуществляется с помощью символов && и || следующим образом. Двойной амперсанд && запускает команду, стоящую за ним в командной строке, только в том случае, если команда, стоящая перед амперсандами была выполнена успешно.
Два символа || осуществляют в командной строке обратное действие, т.е. запускают команду, стоящую за этими символами, только в том случае, если команда, идущая перед ними, не была успешно выполнена.
Условная обработка действует только на ближайшую команду.
Перенаправление ввода/вывода и конвейеризация команд.
Если при этом заданный для вывода файл уже существовал, то он перезаписывается, если не существовал — создается. Можно также не создавать файл заново, а дописывать информацию, выводимую командой, в конец существующего файла. Для этого команда перенаправления вывода должна быть задана так: команда >> имя_файла.
Читайте также: