-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