Материал: Аверянов Введение в оператсионные системы и основы программирования 2015

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

-rw-r--r—1 ………………………………………….

-rw-r--r-- 1 v100-1 v100 0 Окт 30 10:35 hck2.txt v100-1@beta:~ /hacker> cd crack/question/thieve >chmod u-r * --w-r--r-- 1 v100-1 v100 0 Окт 30 11:05 hacker1.txt

--w-r--r-- 1………………………………………..…. --w-r--r-- 1 v100-1 v100 0 Окт 30 10:35 hck2.txt

v100-1@beta:~ /hacker> cd crack/question/thieve >cat hck2.txt cat: hck2.txt: Отказано в доступе

v100-1@beta:~ /hacker> cd crack/question/thieve >

Опыты по изменению прав доступа можно проделать также с файлами, например из каталога ~/hacker/crack/question/thieve. Пра-

во на выполнение (атрибут x) актуально только для исполняемых программ, поэтому для текстовых файлов смысла не имеет. Отмена права на чтение (атрибут r) закрывает возможность работы с файлом не только для текстовых редакторов, но и для команд просмотра: cat и more и других утилит и приложений (пример 1.37).

Право на запись (атрибут w) связано с внесением изменений в текст или иное содержимое файла. Внесение таких изменений без применения текстового редактора возможно с использованием не деструктивного перенаправления стандартного вывода для команды cat (подробнее об этом в п. 1.3.4) – это дает возможность добавлять текст в конец файла (пример 1.38).

Пример 1.38. Добавление текста в конец файла v100-1@beta:~ /hacker/crack/question/thieve > chmod u+r * v100-1@beta:~ /hacker/crack/question/thieve > ls -l -rw-r--r-- 1 v100-1 v100 0 Окт 30 11:05 hacker1.txt -rw-r--r—1 ………………………………………….

-rw-r--r-- 1 v100-1 v100 0 Окт 30 10:35 hck2.txt

v100-1@beta:~ /hacker/crack/question/thieve > cat >> hacker1.txt

Новая строчка<Enter> <Ctrl + D>

v100-1@beta:~ /hacker/crack/question/thieve > cat hacker1.txt

Если в сервер вашей фирмы Вдруг забрался злобный хакер Еще одна строчка

v100-1@beta:~ /hacker/crack/question/thieve >

Запрет права записи (w-права) закрывает как возможность добавления текста в файл командой cat (пример 1.39), так вообще возможность внесения в файл любых изменений для всех без исключения утилит и приложений.

46

Пример 1.39. Право записифайла

v100-1@beta:~ /hacker/crack/question/thieve > chmod u+r *

v100-1@beta:~ /hacker/crack/question/thieve > ls -l -r--r--r-- 1 v100-1 v100 0 Окт 30 11:05 hacker1.txt -r--r--r—1 ………………………………………….

-r--r--r-- 1 v100-1 v100 0 Окт 30 10:35 hck2.txt

v100-1@beta:~ /hacker/crack/question/thieve > cat >> hacker1.txt -bash: hacker1.txt: Отказано в доступе

v100-1@beta:~ /hacker/crack/question/thieve >

1.3.4. Ввод/вывод и конвейеры

Неотъемлемой частью любой компьютерной программы, а тем более операционной системы является система ввода/вывода команд и данных. В UNIX стандартные процесс (команды и утилиты) работают со стандартными каналами обмена информацией:

стандартный ввод – stdin (standard input);

стандартный вывод – stdout (standard output);

стандартный вывод ошибок – stderr (standard error);

Врамках данного практикума будут рассмотрены только два из них: stdin и stdout. Первый связан с клавиатурой, а второй – с экраном монитора. Иллюстрацией может служить практически любая стандартная команда UNIX – команда вводится с клавиатуры, а результат ее работы выводится на экран.

Возникает вопрос: откуда, кроме клавиатуры, можно что-то вводить и куда, кроме экрана, что-то выводить? Ответ на оба эти вопроса один: эти «откуда» и «куда» есть не что иное, как файлы. Как правило, это текстовые файлы. Каналы stdin и stdout, по сути, являются текстовыми файлами для ввода/вывода по умолчанию. И это не удивительно, поскольку в UNIX по большому счету нет ничего, кроме учетных записей, процессов и файлов.

То, что вводится с клавиатуры, попадает в специализированный файл stdin, а на экран выводится содержимое файла stdout. Такая организация ввода/вывода позволяет легко заменять одни файлы другими. Для этого используются символы перенаправления:

> (знак «больше» – перенаправление из stdout в файл);

< (знак «меньше» – перенаправление в stdin из файла);

>> (двойное «больше» – недеструктивное перенаправление

stdout в файл).

47

Недеструктивное перенаправление вывода позволяет добавлять информацию в конец файла (см. пример 1.38), тогда как обычное (по сути, деструктивное) перенаправление уничтожает информацию и создает новый пустой файл. Таким образом, использование недеструктивного вывода позволяет, например, объединять текст нескольких файлов в одном без использования текстового редактора.

Раньше уже демонстрировалось перенаправление стандартного вывода stdout в файл при создании текстовых файлов командой cat. Для перенаправления потока данных из файла в stdin можно также использовать команду cat (продолжается работа с текущей дирек-

торией: ~ /hacker/crack/question/thieve). Поток stdin команды cat

связан с клавиатурой, однако через перенаправление его можно связать с файлом (пример 1.40). Поток stdout команды cat связан с экраном монитора, поэтому текст из файла выводится на экран.

Пример 1.40. Ассоциация файла с потоком stdin команды cat v100-1@beta: ~ /hacker/crack/question/thieve > cat < hacker1.txt

Если в сервер вашей фирмы Вдруг забрался злобный хакер

v100-1@beta: ~ /hacker/crack/question/thieve >

Связь команд UNIX через потоки данных стандартного ввода/вывода позволяет осуществлять состыковку команд через файлы stdin и stdout.

В качестве учебной задачи предлагается выполнить сортировку файлов ~ /hacker/crack/question/thieve в обратном алфавитном по-

рядке (от z до a). Прежде всего, необходимо проверить наличие файлов в каталоге, а затем получить список файлов, перенаправив stdout команды ls в новый текстовый файл, пусть это будет текстовый файл с именем file-list (пример 1.41). Просмотр текстового файла, как обычно, осуществляется командой cat.

Пример 1.41. Перенаправление stdout команды ls в файл v100-1@beta: ~ /hacker/crack/question/thieve > ls

hacker1.txt hacker2.txt hacker3.txt hacker4.txt hck2.txt v100-1@beta: ~ /hacker/crack/question/thieve > ls > file-list v100-1@beta: ~ /hacker/crack/question/thieve > cat file-list file-list

hacker1.txt

hacker2.txt

hacker3.txt

48

hacker4.txt

hck2.txt

v100-1@beta: ~ /hacker/crack/question/thieve >

Для сортировки текстового файла в алфавитном порядке используется команда sort, а для сортировки в обратном алфавитном порядке команда sort –r (пример 1.42).

Пример 1.42. Созданиефайла непосредственнов директории v100-1@beta: ~ /hacker/crack/question/thieve > sort –r file-list hck2.txt

hacker4.txt

hacker3.txt

hacker2.txt

hacker1.txt file-list

v100-1@beta: ~ /hacker/crack/question/thieve >

Построив состыкованную команду (pipelines) из ls и sort, можно обойтись без промежуточного файла, каковым, по сути, является file-list. Для записи стыковки команд используется символ «|» (вертикальная черта). Состыкованная команда (или конвейер) имеет более короткую и удобную запись, по сравнению с последовательно выполняемыми командами (пример 1.43).

Пример 1.43. Конвейер команд ls и sort v100-1@beta: ~ /hacker/crack/question/thieve >rm file-list v100-1@beta: ~ /hacker/crack/question/thieve >ls | sort -r hck2.txt

hacker4.txt

hacker3.txt

hacker2.txt

hacker1.txt file-list

v100-1@beta: ~ /hacker/crack/question/thieve >

Пример 1.44. Запись результата работы конвейерав файл v100-1@beta: ~ /hacker/crack/question/thieve >ls | sort –r > sort-list v100-1@beta: ~ /hacker/crack/question/thieve >cat sort-list

hck2.txt

hacker4.txt

hacker3.txt

hacker2.txt

hacker1.txt

49

file-list

v100-1@beta: ~ /hacker/crack/question/thieve >

При необходимости можно комбинировать конвейеры с перенаправлением ввода/вывода. Пример 1.44 показывает, что можно записать отсортированный конвейером список в какой-нибудь текстовый файл.

1.3.5. Поиск и обработка текстовых данных

Работая в UNIX, иногда бывает необходимость найти группу файлов или папок, удовлетворяющих определенным критериям, и выполнить с ними некоторые действия. Для этих целей в UNIX есть несколько команд и утилит, в рамках выполняемого практикума предлагается рассмотреть только одну из них – команду, а точнее утилиту grep.

Утилита grep – поиск текстовых файлов по фрагментам текста

Утилита grep выполняет поиск в текстовых файлах образца текста, и в зависимости от способа применения выдает информацию о файле, содержащем этот образец. Например, можно узнать, есть ли в директории /usr/share/liblab/proverbs/spirit/mind файлы, содержа-

щие текстовые фрагменты «show» и «shall». Выясняется, что есть файл /usr/share/liblab/proverbs/spirit/mind/philosph, содержащий тек-

стовый образец «shall», а файлов, содержащих «show», в этой директории не существует (пример 1.45). Команда grep выдает на экран полное имя файла и строки из него, в которых найдет искомый образец текста.

Пример 1.45. Поиск файла, содержащего образец текста v100-1@beta:~> grep shall /usr/share/liblab/proverbs/spirit/mind/* /usr/share/liblab/proverbs/spirit/mind/philosph: As you sow, you shall mow. v100-1@beta:~> grep show /usr/share/liblab/proverbs/spirit/mind/* v100-1@beta:~>

Для дальнейших манипуляций над найденным файлом потребуется форма команды grep, которая будет выдавать в качестве результата строку, содержащую только имя файла, в виде полного пути. Это команда grep –l (пример 1.46).

50

Источник: https://studfile.net/preview/16708824/