Главная страница

Основы работы в командной строке Unix


Скачать 2.66 Mb.
НазваниеОсновы работы в командной строке Unix
Дата14.10.2022
Размер2.66 Mb.
Формат файлаdocx
Имя файлаSorokina_P33694_OPD1 .docx
ТипЛитература
#733635


Министерства науки и высшего образования Российской Федерации

федеральное государственное автономное образовательное учреждение высшего образования «Национальный исследовательский университет ИТМО»


Факультет программной инженерии и компьютерной техники

Отчёт по лабораторной работе на тему:

«Основы работы в командной строке 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 как корень дерева, следуя следующему изображению:





  1. Создать директорию lab0 и перейти в нее:

mkdir lab0
cd lab0

  1. Создать директорию braviary3 в директории lab0 и перейти в нее: mkdir braviary3
    cd braviary3

  2. Создать директории abomasnow, pupitar и файлы piplup, cranidos, tyrogue в директории braviary3 и вернуться в директорию lab0:

touch piplup

mkdir abomasnow
touch cranidos
touch tyrogue
mkdir pupitar
cd ..

  1. Создать директорию eevee1 в директории lab0 и перейти в нее:
    mkdir eevee1
    cd eevee1

  2. Создать директории snover, liepard, gloom в директории sandslash7 и вернуться в директорию lab0:
    mkdir snover
    mkdir liepard
    mkdir gloom
    cd ..

  3. Создать файлы feebas2, krokorok7, lanturn0 в директории lab0:

touch feebas2
touch krokorok7
touch lanturn0

  1. Создать директорию psyduck4 в директории lab0 и перейти в нее:
    mkdir psyduck4
    cd psyduck4

  2. Создать директории swablu, alakazam и файлы lilligant, gallade в директории psyduck4 и вернуться в директорию lab0:
    touch lilligant

touch gallade
mkdir swablu
mkdir alakazam
cd ..
\n – символ переноса строки

-e – ключ команды echo для распознавания символа переноса строки


  1. Записать в файл braviary3/piplup:
    echo 'Живет Beach Taiga Tundra' > braviary3/piplup

  2. Записать в файл 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

  3. Записать в файл braviary3/tyrogue:
    echo -e 'Живет Mountain\nUrban' > braviary3/tyrogue

  4. Записать в файл feebas2:
    echo -e 'Возможности Overland=1 Surface=9 Underwater=9 Jump=4\nPower=1 Intelligence=2 Fountain-0 Gilled=0' > feebas2

  5. Записать в файл krokorok7:
    echo -e 'weigth=73.6\nheight=39.0 atk=8 def=5' > krokorok7

  6. Записать в файл lanturn0:
    echo -e 'Возможности Overland=2 Surface=10\nUnderwater=12 Jump3=0 Power=2 Intelligence=4 Gilled=0\nGlow=0' > lanturn0

  7. Записать в файл 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

  8. Записать в файл 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 /lab0/feebas2 /lab0/braviary3/cranidosfeebas

Символическая ссылка – указатель на файл


  • 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 выполнить в соответствии с вариантом задания поиск и фильтрацию файлов, каталогов и содержащихся в них данных.

  1. Рекурсивно подсчитать количество строк содержимого файлов из директории 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

  1. Вывести рекурсивно список имен и атрибутов файлов в директории braviary3, список отсортировать по возрастанию даты модификации файла, подавить вывод ошибок доступа

find braviary3 -type f 2> /dev/null | xargs ls -ltr

xargs - берет данные из стандартного ввода или из файла, разбивает их в соответствии с указанными параметрами, а затем передает другой программе в качестве аргумента.

ls -l — выведет подробную информацию о файле (с атрибутами)

-t — выведет файлы упорядоченно согласно дате модификации

-r — инвертирует последовательность вывода (по возрастанию)

т.к у нас нет доступа к чтению директории braviary3, то ничего не выводится , но из-за подавления ошибок доступа ошибку мы тоже не видим.

Вот как это может выглядеть с правами доступа на чтение директории

  1. Рекурсивно вывести содержимое файлов с номерами строк из директории 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) , к которому есть доступ на чтение, то можно увидеть такой вывод

  1. Вывести содержимое файлов: 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

  1. Вывести два последних элемента рекурсивного списка имен и атрибутов файлов в директории lab0, содержащих строку "ve", список отсортировать по возрастанию даты модификации файла, подавить вывод ошибок доступа

find . -type f -exec grep -l ve {} + 2> /dev/null | xargs ls -ltr | tail -n 2

ключом -l — grep отберёт только те файлы, где есть указанная строка ve

полученные файлы выводим (как в паре заданий выше) атрибуты файлов и сортируем, т.к. нам нужны только два последних результата, берём их командой tail, указывая сколько строчек с конца нужно взять

  1. Подсчитать количество символов содержимого файлов в директории 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 может удалять только директории

  1. Удалить файл feebas2

Файл feebas2 имеет права 046, поэтому чтобы удалить его, я задаю ему новые права : 746. Затем использую команду rm, чтобы его удалить. Использую команду lsl, чтобы удостовериться, что файл успешно удален из директории lab0.

Скриншот команды и результат ее выполнения:








2) Удалить файл lab0/braviary3/cranidos

Задаю директории braviary3, которая имеет права 307, новые права 707 (даю себе право r) и использую команду lsl, чтобы удостовериться, что файл успешно удален из директории braviary3.

Скриншот команды и результат ее выполнения:


3) Удалить символические ссылки Copy_*

Символическая ссылка с именем Copy_* у меня только одна. Использую команду rm, чтобы удалить ссылку Copy_93. Затем использую команду lsl, чтобы удостовериться, что ссылка успешно удалена из директории lab0.

Скриншот команды и результат ее выполнения:



4) Удалить жесткие ссылки lab0/psyduck4/lilligantfeeb*

У директори рsyduck4 права доступа 315, поэтому чтобы удалить жествую ссылку в этой директории я задаю ей новые права 715.Жесткая ссылка с именем lilligantfeeb* у меня только одна. Использую команду rm, чтобы удалить ссылку lilligantfeebas. Затем использую команду lsl, чтобы удостовериться, что ссылка успешно удалена из директории weavile8.

Скриншот команды и результат ее выполнения:



5) Удалить директорию psyduck4

Так как в директории psyduck4 есть файлы и директория, для удобства устанавливаю себе права (rwx) на все, что хранится в этой директории, и даю себе все права (777) на саму директорию, чтобы удалить ее. Использую команду rm -r, чтобы удалить psyduck4. Затем использую команду lsl, чтобы удостовериться, что директория успешно удалена из директории lab0.

Скриншот команды и результат ее выполнения:



6) Удалить директорию lab0/braviary3/abomasnow

Устанавливаю права доступа к директории braviary3 и к abomasnow 777.Использую команду rm -r, чтобы удалить директорию. Затем использую команду lsl, чтобы удостовериться, что abomasnow успешно удалена из директории braviary3.

Скриншот команды и результат ее выполнения:



Заключение


В ходе работы были изучены основные команды командной оболочки Unix, такие как mkdir, echo, cat, touch, ls, pwd, cd, more, cp, rm, rmdir, mv, chmod, cp, ln, wc, tail, grep, sort и их некоторые ключи. Было получено иерархическое дерево в корне lab0, в котором представлены каталоги и файлы, содержащие определенную информацию, с настроенными правами, ссылки на некоторые файлы/директории. Были осуществлены: фильтровка содержимого файлов, списков имен, атрибутов файлов и удаление файлов, директорий.

Также в ходе выполнения лабораторной работы я отметила, что после установки прав на файлы и директории, последующие задания с некоторыми из них было выполнить невозможно. Так как у меня, как у владельца, не было необходимых прав для того или иного действия. Скорее всего, так было задумано составителями заданий, чтобы студенты ощутили на практике, что означает каждое из прав и какие могут быть сложности при дальнейшей работе, если неправильно или невнимательно установить те или иные права на файлы и директории.

Литература




  1. https://losst.ru/

  2. https://www.opennet.ru/docs/RUS/unix_basic/


написать администратору сайта