Смекни!
smekni.com

Практическая работа по предмету UNIX (стр. 7 из 9)

здесь, очевидно, первый параметр - имя файла, который Вы перемещаете, а второй - имя существующего каталога, в который Вы перемещаете.

Выведите на экран список файлов и подкаталогов Вашего личного каталога и подкаталога secnew с помощью командной строки:

cd; ls -a . secnew

Заметьте, что файл .profile существует в Вашем личном каталоге, а в подкаталоге secnew такого файла нет. Команда

mv .profile secnew

переместит файл .profile в каталог secnew. А команда

ls -a . secnew

подтвердит выполнение команды mv.

Чтобы вернуть файл .profile в Ваш личный каталог, следует воспользоваться командой

mv secnew/.profile .

Увидеть результат позволит все та же команда

ls -a . secnew

С помощью команды mv можно переместить и несколько файлов, но опять же лишь в существующий каталог. Давайте переместим файлы hel и vrem из подкаталога secnew в Ваш личный каталог, для чего используем команду

mv secnew/hel secnew/vrem .

и проверим, что файлы перемещены

ls -a . secnew

Обратите внимание, что, если до перемещения файлов, в каталоге существуют файлы, имена которых совпадают с именами перемещаемых файлов, то после перемещения такие файлы будут уничтожены, и команда mv не предупредит Вас об этом.

Чтобы убедиться в вышесказанном введите следующие команды:

cd secnew; echo hi>hel

Вы создали файл hel в каталоге secnew.

ls . newcat; cat hel; cat newcat/hel

Вы вывели на экран списки файлов и подкаталогов каталогов secnew и newcat, а также содержимое файла hel каталога secnew и файла hel каталога newcat.

mv hel newcat; cat newcat/hel

Вы переместили файл hel из каталога secnew в каталог newcat и вывели на экран содержимое файла hel каталога newcat.

1. Перемещение каталогов.

Команда mv позволяет также перемещать каталоги со всеми их файлами и подкаталогами. В этом случае вместо имени перемещаемого файла указывается имя каталога. Для перемещения подкаталога newcat в подкаталог secnew используйте команду

mv newcat secnew

Чтобы увидеть результат, лучше воспользоваться следующей командой:

ls -aF secnew .

2. Использование шаблонов.

Для перемещения файлов разрешается использовать шаблоны. Попробуйте переместить все файлы подкаталога secnew в новый каталог. Сначала создайте каталог ctmv - в него Вы переместите файлы и проверьте, что каталог создан:

cd; mkdir ctmv; ls -F . secnew ctmv

А затем воспользуйтесь шаблоном *:

mv secnew/* ctmv

Команда

ls -F secnew ctmv

позволит увидеть изменения, произошедшие в каталогах secnew и ctmv.

3. Переименование файлов.

В формате MS Word 97

1. Работа с shell.

Интерпретатор shell - это наиболее важная программа для пользователей UNIX, быть может, за исключением текстового редактора. Она исполняет запросы на запуск программ и предоставляет дополнительные возможности использования имеющихся команд и даже написания собственных. С некоторыми свойствами shell Вы уже знакомы. Одно из них способность ссылаться сразу более чем на один файл, используя для этого специальные символы - шаблоны; другое - задание списка каталогов, в которых производится поиск команд для запуска по неполному имени, третье - возможность использования нескольких команд в одной командной строке. Сейчас Вы познакомитесь и с некоторыми другими возможностями интерпретатора shell.

1. Стандартный вход и стандартный выход.

Многие команды UNIX получают информацию с так называемого стандартного входа и посылают информацию на опять же так называемый стандартный выход. (Для них часто используются сокращения "stdin" и "stdout" соответственно). shell организует дело так, что стандартным входом служит клавиатура, а стандартным выходом - экран.

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

cat .profile .kermrc

на экран будет выведено содержимое файла .profile, а следом за ним содержимое файла .kermrc.

Но если команде cat не заданы имена файлов в качестве параметров, то она читает данные со стандартного входа (клавиатуры) и посылает их на стандартный выход (экран). Вот пример. Введите команду

cat -u

Затем напечатайте

Hello there.

На экране появится

Hello there.

Напечатайте

Bye.

Вы получите ответ:

Bye.

Как видите, каждая строка, которую Вы напечатали, немедленно выдается командой cat на экран. При вводе со стандартного входа команда считает, что ввод закончен тогда, когда Вы нажимаете клавиши CTRL-d. Эта комбинация клавиш посылает команде сигнал EOT (End-Of-Text - конец текста). Поэтому нажмите CTRL-d (должно появиться новое приглашение на ввод $) и давайте рассмотрим другой пример.

Воспользуемся новой для Вас командой sort. Это команда сортировки. Без указания аргументов она сортирует информацию, поступающую со стандартного входа, упорядочивая строки в лексикографическом порядке, и выдает результат на стандартный выход - экран.

Попробуйте так:

введите команду

sort

напечатайте с клавиатуры следующее (для перехода на новую строку используйте ENTER):

bananas

carrots

apples

Нажмите CTRL-d и Вы увидите измененный список.

apples

bananas

carrots

В конце появится новое приглашение на ввод команд $.

2. Перенаправление входа и выхода.

Теперь, предположим, что Вы хотите послать результат сортировки в файл, чтобы сохранить список планируемых покупок. shell дает возможность перенаправлять стандартный выход в файл, используя символ ">". Вот как это работает:

напечатайте команду sort и после символа > укажите имя файла, в который хотите сохранить результат выполнения команды (эта процедура должна быть Вам знакома - Вы уже создавали файлы подобным образом)

sort > shopping-list

Затем введите с клавиатуры список предполагаемых покупок (он попадет во входной поток команды, ведь по умолчанию входной поток - клавиатура):

bananas

carrots

apples

Снова нажмите CTRL-d.

Как Вы можете видеть, результат работы команды sort не отображается на экране (после нажатия клавиш CTRL-d сразу появляется новое приглашение), вместо этого он сохраняется в файле shopping-list (список покупок). Давайте проверим, действительно ли это так с помощью давно знакомой Вам команды cat:

cat shopping-list

Если Вы все сделали правильно, то содержимое файла shopping-list будет выглядеть следующим образом:

apples

bananas

carrots

Другой вариант - у Вас сохранен не отсортированный список в некотором файле. Один из способов его сортировки и сохранения такой - отсортировать файл с данным именем вместо получения содержимого файла со стандартного входа и перенаправить стандартный выход в файл.

Создайте файл pokupki, с помощью команды echo и перенаправления выходного потока:

echo " carrots

bananas

apples "> pokupki

для перевода строки используйте клавишу ENTER. ENTER не будет восприниматься как сигнал завершения ввода команды до тех пор, пока Вы не закроете кавычки. В начале каждой строки будет появляться повторное приглашение на ввод ">".

После того как Вы создали файл, отсортируйте его и сохраните указанным выше способом:

sort pokupki > shopping-list

С помощью команды cat проверьте выполнение введенной команды:

cat shopping-list

Результат должен быть аналогичным предыдущему:

apples

bananas

carrots

То же самое можно сделать и по-другому. Перенаправлен может быть не только стандартный выход, но также и стандартный вход. Для этого следует использовать символ "<". Введите, например, такую командную строку:

sort < pokupki

Команда sort выведет на экран (стандартный выход) отсортированные строки файла pokupki:

apples

bananas

carrots

Фактически sort<pokupki эквивалентно sort pokupki, но последний вариант позволяет продемонстрировать сказанное: sort<pokupki ведет себя так, словно читает данные файла pokupki со стандартного входа - клавиатуры (а не из заданного файла), в то время как на самом деле shell перенаправил данные файла в стандартный входной поток.

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

3. Использование конвейера.

Предыдущие примеры предполагали, что Вы ввели данные с клавиатуры своими собственными руками или извлекли их из файла. А что, если данные, которые Вы хотите отсортировать, являются выходными данными другой программы, например, такой как ls?

Попробуйте получить список файлов и подкаталогов Вашего личного каталога, отсортированный в порядке обратном к лексикографическому. Для подобной сортировки у команды sort существует опция -r. Но ее одной недостаточно - нужно использовать и возможности shell. Можно применить уже полученные Вами знания:

ls > file-list

Эта командная строка перенаправила выходной поток команды ls в файл file-list. При желании Вы можете убедиться в этом с помощью команд cat или more.

Вторая команда сортирует содержимое файла file-list в указанном порядке и выводит его на экран:

sort -r file-list

Такой способ не самый быстрый и требует создания временного файла для сохранения результата работы команды ls.

shell предоставляет и другой вариант - использование "конвейера" (pipeline). "Конвейер" - это замечательное свойство shell, которое позволяет связать последовательность команд в конвейер, где stdout первой команды посылается прямо на stdin второй команды и так далее.

В нашем примере необходимо направить стандартный выходной поток команды ls в стандартный входной поток команды sort. Символ "|" обозначает конвейер. Поэтому Вам достаточно ввести: