Основы работы в командной строке Unix
Скачать 2.66 Mb.
|
/lab0/braviary3/cranidosfeebasМинистерства науки и высшего образования Российской Федерации федеральное государственное автономное образовательное учреждение высшего образования «Национальный исследовательский университет ИТМО» Факультет программной инженерии и компьютерной техники Отчёт по лабораторной работе на тему: «Основы работы в командной строке Unix» Вариант № 12704 Выполнила: Сорокина А.Д. Группа: P33694 Проверил: Белозубов А.В. г. Санкт-Петербург 2022 г. Оглавление Введение 2 Создание каталогов и файлов 2 Настройка прав доступа к файлам и каталогам 5 Работа с ссылками, копированием и объединением файлов 9 Команды поиска и фильтровки содержимого файлов и списков имен и атрибутов файлов 19 Удаление файлов, ссылок и директорий 23 24 Заключение 27 Литература 27 ВведениеВ данной работе познакомимся с основным набором команд UNIX для манипулирования файловой системой; с сортировкой строк и регулярными выражениями; с перенаправлением потоков вывода и подавлением ошибок. Целью данной лабораторной работы является изучение основных команд Unix и получение следующих навыков: создание директорий, файлов с текстами и ссылок назначение прав файлам и каталогам копирование, объединение файлов/директорий фильтровка выводимой информации удаление файлов и директорий Для выполнения лабораторной работы были использованы следующие инструменты: блокнот и cmd. Создание каталогов и файловСоздать приведенное в варианте дерево каталогов и файлов с содержимым. В качестве корня дерева использовать каталог lab0 своего домашнего каталога. Для создания и навигации по дереву использовать команды: mkdir, echo, cat, touch, ls, pwd, cd, more, cp, rm, rmdir, mv. Необходимо создать иерархическое дерево с каталогами и файлами, используя директорию lab0 как корень дерева, следуя следующему изображению: Создать директорию lab0 и перейти в нее: mkdir lab0 cd lab0 Создать директорию braviary3 в директории lab0 и перейти в нее: mkdir braviary3 cd braviary3 Создать директории abomasnow, pupitar и файлы piplup, cranidos, tyrogue в директории braviary3 и вернуться в директорию lab0: touch piplup mkdir abomasnow touch cranidos touch tyrogue mkdir pupitar cd .. Создать директорию eevee1 в директории lab0 и перейти в нее: mkdir eevee1 cd eevee1 Создать директории snover, liepard, gloom в директории sandslash7 и вернуться в директорию lab0: mkdir snover mkdir liepard mkdir gloom cd .. Создать файлы feebas2, krokorok7, lanturn0 в директории lab0: touch feebas2 touch krokorok7 touch lanturn0 Создать директорию psyduck4 в директории lab0 и перейти в нее: mkdir psyduck4 cd psyduck4 Создать директории swablu, alakazam и файлы lilligant, gallade в директории psyduck4 и вернуться в директорию lab0: touch lilligant touch gallade mkdir swablu mkdir alakazam cd .. \n – символ переноса строки -e – ключ команды echo для распознавания символа переноса строки Записать в файл braviary3/piplup: echo 'Живет Beach Taiga Tundra' > braviary3/piplup Записать в файл braviary3/cranidos: echo -e 'Ходы Ancientpower Dragon\nPulse Earth Power Endeavor Fire Punch Iron Head Iron Tail Mud-Slap\nRock Climb Snock Wave Sleep Talk Snore Spite Stealth Rock Superpower\nThunderpunch Uproar Zen Headbutt' > braviary3/cranidos Записать в файл braviary3/tyrogue: echo -e 'Живет Mountain\nUrban' > braviary3/tyrogue Записать в файл feebas2: echo -e 'Возможности Overland=1 Surface=9 Underwater=9 Jump=4\nPower=1 Intelligence=2 Fountain-0 Gilled=0' > feebas2 Записать в файл krokorok7: echo -e 'weigth=73.6\nheight=39.0 atk=8 def=5' > krokorok7 Записать в файл lanturn0: echo -e 'Возможности Overland=2 Surface=10\nUnderwater=12 Jump3=0 Power=2 Intelligence=4 Gilled=0\nGlow=0' > lanturn0 Записать в файл psyduck4/lilligant: echo -e 'Ходы After You Covet Giga Drain Growth≠ Heal Bell\nHelping Hand Leech Seed≠ Mega Drain≠ Role Play Seed bomb Sleep Talk\nSnore Synthesis≠ Worry Seed' > psyduck4/lilligant Записать в файл psyduck4/gallade: echo ' Тип покемона PSYCHIC FIGHTING' > psyduck4/gallade Результат: ls –lR Настройка прав доступа к файлам и каталогамУстановить согласно заданию права на файлы и каталоги при помощи команды chmod, используя различные способы указания прав. Первая тройка rwx – права владельца Вторая тройка rwx – права группы Третья тройка rwx – права остальных пользователей r – право на чтение w – право на запись x – право на исполнение - - - – если прав на действия нет rwx – если права есть u – права владельца g – права группы o – права остальных пользователей Мы находимся в директории lab0, следовательно: braviary3: права 307 chmod 307 braviary3 piplup: rw----r-- chmod 604 braviary3/piplup abomasnow: владелец должен читать директорию и переходить в нее; группа-владелец должна читать, записывать директорию и переходить в нее; остальные пользователи должны читать, записывать директорию и переходить в нее chmod 573 braviary3/abomasnow cranidos: владелец должен читать и записывать файл; группа-владелец должна не иметь никаких прав; остальные пользователи должны читать файл chmod 604 braviary3/cranidos tyrogue: владелец должен читать и записывать файл; группа-владелец должна записывать файл; остальные пользователи должны не иметь никаких прав chmod 620 braviary3/tyrogue pupitar: -wxrwxr-x chmod 375 braviary3/pupitar eevee1: владелец должен читать директорию и переходить в нее; группа-владелец должна читать, записывать директорию и переходить в нее; остальные пользователи должны читать, записывать директорию и переходить в нее chmod 577 eevee1 snover: владелец должен читать, записывать директорию и переходить в нее; группа-владелец должна читать, записывать директорию и переходить в нее; остальные пользователи должны читать, записывать директорию и переходить в нее chmod 777 eevee1/snover liepard: rwx-wxrw- chmod 736 eevee1/liepard gloom: r-x-wxrwx chmod 537 eevee1/gloom feebas2: ---r--rw- chmod 046 feebas2 krokorok7: владелец должен читать файл; группа-владелец должна читать файл; остальные пользователи должны читать файл chmod 444 krokorok7 lanturn0: права 664 chmod 664 lanturn0 psyduck4: права 315 chmod 315 psyduck4 lilligant: владелец должен не иметь никаких прав; группа-владелец должна читать файл; остальные пользователи должны читать и записывать файл chmod 046 psyduck4/lilligant gallade: ------r-- chmod 004 psyduck4/gallade swablu: владелец должен записывать директорию и переходить в нее; группа-владелец должна читать, записывать директорию и переходить в нее; остальные пользователи должны записывать директорию и переходить в нее chmod 373 psyduck4/swablu alakazam: права 511 chmod 511 psyduck4/alakazam Результат: ls -lR Работа с ссылками, копированием и объединением файловСкопировать часть дерева и создать ссылки внутри дерева согласно заданию при помощи команд cp и ln, а также команды cat и перенаправления ввода-вывода. Мы находимся в директории lab0, поэтому: cоздать символическую ссылку для файла feebas2 с именем lab0/braviary3/cranidosfeebas: Команда ln с ключом -s создает символическую ссылку. В данном случае на файл ln -s Символическая ссылка – указатель на файл cоздать жесткую ссылку для файла feebas2 с именем lab0/psyduck4/lilligantfeebas: Команда ln создает жесткую ссылку на файл ln feebas2 psyduck4/lilligantfeebas Жесткая ссылка – это точная копия файла. Жесткую ссылку нельзя создать на директорию объеденить содержимое файлов lab0/psyduck4/gallade, lab0/psyduck4/lilligant, в новый файл lab0/krokorok7_59: Команда cat позволяет объединять содержимое файлов в другой файл. Для этого нужно через пробел записать пути к файлам, содержимое которых нам нужно объединить, и использовать символ “>” cat psyduck4/gallade psyduck4/lilligant > krokorok7_59 Я не могу объединить содержимое данных файлов, потому что у gallade права 004, а у lilligant 046. У меня нет права на их чтение (r) скопировать рекурсивно директорию eevee1 в директорию lab0/eevee1/liepard: Команда cp -r позволяет рекурсивно скопировать директорию cp -r eevee1 eevee1/liepard создать символическую ссылку c именем Copy_93 на директорию braviary3 в каталоге lab0: Команда ln с ключом -s создает символическую ссылку. В данном случае на директорию ln -s braviary3 Copy_93 Символическая ссылка – указатель на файл скопировать файл lanturn0 в директорию lab0/psyduck4/alakazam: Команда cp позволяет скопировать ФАЙЛ, в отличие от команды cat, которая может скопировать только СОДЕРЖИМОЕ файла cp lanturn0 psyduck4/alakazam Я не могу скопировать файл lanturn0, потому что директория alakazam имеет доступ 511. У меня, как у владельца, нет права на чзапись (w) в эту директорию. скопировать содержимое файла lanturn0 в новый файл lab0/braviary3/cranidoslanturn Команда cat копирует содержимое файла в другой файл при помощи символа “>” cat lanturn0 > braviary3/cranidoslanturn Если нужно скопировать содержимое файла в конец другого файла, с командой cat используется символ “>>”. Команда cat с директориями не используется Результат: ls –lR Так как у меня, как у владельца, нет права на чтение (r) директорий braviary3 и psyduck4, не представляется возможным увидеть успешно созданный в них файл-копию cranidoslanturn, символическую и жесткую ссылки . Команды поиска и фильтровки содержимого файлов и списков имен и атрибутов файловИспользуя команды cat, wc, ls, head, tail, echo, sort, grep выполнить в соответствии с вариантом задания поиск и фильтрацию файлов, каталогов и содержащихся в них данных. Рекурсивно подсчитать количество строк содержимого файлов из директории lab0, имя которых заканчивается на 'r', результат записать в файл в директории /tmp, подавить вывод ошибок доступа lab1_4_1=$(mktemp) создаём временный файл (в директории /tmp), сохраняем его название в переменную find . -name "*r" -type f -exec cat {} + 2> /dev/null | wc -l > "${lab1_4_1}" find - производит поиск файлов и папок на основе заданных критериев и позволяет выполнять действия с результатами поиска. find . — ищем в текущей директории -name "*r" — ищем по шаблону в названии (* любой символ(лы), но на конце r) -type f — только файлы # -exec —передавать найденные объекты (в данном случае файлы) для дальнейших действий над ними. Данные будут подставляться на место {}. cat - cчитывает данные из файлов и выводит их содержимое чтобы подавить поток ошибок этот поток направляем в специальный "пустой файл" wc -l — подсчитаем кол-во строк того, что только что "вывели” и записываем всё во временный файл, который мы только что создали cat "${lab1_4_1}" Среди всех файлов нет таких, которые заканчиваются на r Вывести рекурсивно список имен и атрибутов файлов в директории braviary3, список отсортировать по возрастанию даты модификации файла, подавить вывод ошибок доступа find braviary3 -type f 2> /dev/null | xargs ls -ltr xargs - берет данные из стандартного ввода или из файла, разбивает их в соответствии с указанными параметрами, а затем передает другой программе в качестве аргумента. ls -l — выведет подробную информацию о файле (с атрибутами) -t — выведет файлы упорядоченно согласно дате модификации -r — инвертирует последовательность вывода (по возрастанию) т.к у нас нет доступа к чтению директории braviary3, то ничего не выводится , но из-за подавления ошибок доступа ошибку мы тоже не видим. Вот как это может выглядеть с правами доступа на чтение директории Рекурсивно вывести содержимое файлов с номерами строк из директории lab0, имя которых заканчивается на 'r', строки отсортировать по имени z->a, подавить вывод ошибок доступа find . -name "*r" -type f -exec cat -n {} + 2> /dev/null | sort -k2 -r cat -n - нумерует строки вывода ключ -k2 -надо сортировать не по номеру строки, а по самим значениям, а это второй столбик ключ -r - т.к. нам нужна сортировка от большего к меньшему (z->a) (reverse) Среди всех файлов нет таких, которые заканчиваются на r А если мы обратимся к существующему файлу (krokorok7) , к которому есть доступ на чтение, то можно увидеть такой вывод Вывести содержимое файлов: piplup, cranidos, tyrogue, lilligant с номерами строк, оставить только строки, содержащие "Sle", подавить вывод ошибок доступа cat -n braviary3/cranidos braviary3/tyrogue braviary3/piplup psyduck4/lilligant 2> /dev/null | grep Sle cat -n - вывести содержимое и пронумеровать строки grep - возможность вести поиск заданной строки нет прав доступа на чтение файлов из директорий braviary3 и psyduck4 так бы это выглядело, если бы был доступ на чтение директорий braviary3 и psyduck4 и файла lilligant Вывести два последних элемента рекурсивного списка имен и атрибутов файлов в директории lab0, содержащих строку "ve", список отсортировать по возрастанию даты модификации файла, подавить вывод ошибок доступа find . -type f -exec grep -l ve {} + 2> /dev/null | xargs ls -ltr | tail -n 2 ключом -l — grep отберёт только те файлы, где есть указанная строка ve полученные файлы выводим (как в паре заданий выше) атрибуты файлов и сортируем, т.к. нам нужны только два последних результата, берём их командой tail, указывая сколько строчек с конца нужно взять Подсчитать количество символов содержимого файлов в директории eevee1, результат записать в файл в директории /tmp, подавить вывод ошибок доступа lab1_4_6=$(mktemp) find eevee1 -type f -exec wc -c {} + 2> /dev/null | tail -n 1 | awk '{print $1}' > "${lab1_4_6}" cat "${lab1_4_6}" find eevee1 -type - ищем в директории eevee1 только файлы wc -c - считаем кол-во символов (выводит список файлов с кол-вом символом в каждом и в конце строчку total) берём только последнюю строчку (tail -n 1),там два столбца: цифра(сколько строк) и слово total через awk берём только первый столбец в директории eevee1 нет файлов Удаление файлов, ссылок и директорийВыполнить удаление файлов и каталогов при помощи команд rm и rmdir согласно варианту задания. Команда rm удаляет только файлы Команда rm с ключом –r может удалять и директории, и файлы Команда rmdir может удалять только директории Удалить файл feebas2 Файл feebas2 имеет права 046, поэтому чтобы удалить его, я задаю ему новые права : 746. Затем использую команду rm, чтобы его удалить. Использую команду ls –l, чтобы удостовериться, что файл успешно удален из директории lab0. Скриншот команды и результат ее выполнения: 2) Удалить файл lab0/braviary3/cranidos Задаю директории braviary3, которая имеет права 307, новые права 707 (даю себе право r) и использую команду ls –l, чтобы удостовериться, что файл успешно удален из директории braviary3. Скриншот команды и результат ее выполнения: 3) Удалить символические ссылки Copy_* Символическая ссылка с именем Copy_* у меня только одна. Использую команду rm, чтобы удалить ссылку Copy_93. Затем использую команду ls –l, чтобы удостовериться, что ссылка успешно удалена из директории lab0. Скриншот команды и результат ее выполнения: 4) Удалить жесткие ссылки lab0/psyduck4/lilligantfeeb* У директори рsyduck4 права доступа 315, поэтому чтобы удалить жествую ссылку в этой директории я задаю ей новые права 715.Жесткая ссылка с именем lilligantfeeb* у меня только одна. Использую команду rm, чтобы удалить ссылку lilligantfeebas. Затем использую команду ls –l, чтобы удостовериться, что ссылка успешно удалена из директории weavile8. Скриншот команды и результат ее выполнения: 5) Удалить директорию psyduck4 Так как в директории psyduck4 есть файлы и директория, для удобства устанавливаю себе права (rwx) на все, что хранится в этой директории, и даю себе все права (777) на саму директорию, чтобы удалить ее. Использую команду rm -r, чтобы удалить psyduck4. Затем использую команду ls –l, чтобы удостовериться, что директория успешно удалена из директории lab0. Скриншот команды и результат ее выполнения: 6) Удалить директорию lab0/braviary3/abomasnow Устанавливаю права доступа к директории braviary3 и к abomasnow 777.Использую команду rm -r, чтобы удалить директорию. Затем использую команду ls –l, чтобы удостовериться, что abomasnow успешно удалена из директории braviary3. Скриншот команды и результат ее выполнения: ЗаключениеВ ходе работы были изучены основные команды командной оболочки Unix, такие как mkdir, echo, cat, touch, ls, pwd, cd, more, cp, rm, rmdir, mv, chmod, cp, ln, wc, tail, grep, sort и их некоторые ключи. Было получено иерархическое дерево в корне lab0, в котором представлены каталоги и файлы, содержащие определенную информацию, с настроенными правами, ссылки на некоторые файлы/директории. Были осуществлены: фильтровка содержимого файлов, списков имен, атрибутов файлов и удаление файлов, директорий. Также в ходе выполнения лабораторной работы я отметила, что после установки прав на файлы и директории, последующие задания с некоторыми из них было выполнить невозможно. Так как у меня, как у владельца, не было необходимых прав для того или иного действия. Скорее всего, так было задумано составителями заданий, чтобы студенты ощутили на практике, что означает каждое из прав и какие могут быть сложности при дальнейшей работе, если неправильно или невнимательно установить те или иные права на файлы и директории. Литератураhttps://losst.ru/ https://www.opennet.ru/docs/RUS/unix_basic/ |