Общие команды UNIX


В ЭТОЙ ГЛАВЕ

Пользовательские команды
Поиск команд
Как использовать команды
Администрирование
Команды управления процессами
Коммуникационные команды
Сравнение файлов
Команды манипулирования файлами
Команды манипулирования каталогами
Команды для получения информации о файлах
Команды, связанные с содержимым файлов
Команды поиска содержимого в файле
Печать
Планирование
Резервное копирование и упаковка файлов
Команды статуса
Обработка текста
Различные команды
Регулярные выражения
Выполнение команд
В UNIX есть "родные" для системы команды и команды, Которые может написать любой человек. В зависимости от конкретной версии UNIX и от оболочки, команды эти отличаются друг от друга. В настоящей главе обсуждаются команды, доступные в большинстве версий UNIX. Каждая команда может иметь несколько специальных аргументов и несколько флагов. Общий формат команды таков:

command [flags] [argumenti] [ argument2] ...

Флаги предваряются знаком переноса. Несколько флагов могут указываться вместе с одним знаком переноса. Например, следующие две команды эквивалентны:

ls -а -1

ls -al

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

Вес команды, когда выполняю юя успешно, возвращают нулевой код возврата. Однако, если команда не была успешной или лишь частично успешной, то она возвращает ненулевой код возврата. Коды возврата можно использовать как часть логики управления ошибками в сценариях оболочки.ПРЕДУПРЕЖДЕНИЕ

Хотя команды, Которые здесь описываются, присутствуют а большинстве систем UNIX, однако реакция команды на флаги, ассоциированных с каждой командой, может отличаться. Для выяснения подробностей о каждой команде и ее флагах воспользуйтесь командой man.





Пользовательские команды

В последующих разделах обсуждаются команды, связанные с регистрацией и отключением от системы. Пользовательские (user-related) команды применяются для входа в систему и выхода из нее. Они могут слегка отличаться в разных системах к системе, но те команды, Которые обсуждаются здесь, являются общими для большинства систем.

Login

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

login:

passwd:

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

Ниже следует пример успешного входа в систему:

***********'*********************************

* *

* You are now logged on to the hosti computer *

* *

*********************************************

Last unsuccessful login: Thu Nov 7 22:32:41 1996 on ttyl Last login: Fri Nov 8 01:17:04 1996 on ttyl /u/testuser:р

Во время входа в систему выполняется несколько сценариев оболочки. Имя файла сценария зависит от оболочки, с Которой работает пользователь. Например, оболочка Bourne выполняет файл .profile из начального каталога, оболочка Korn выполнят файл, на Который указывает переменная среды ENV.

Все команды, Которые должны быть выполнены перед входом пользователя в систему, необходимо ввести как часть файла запуска. Например, в зависимости от требований, можно установить, путь поиска, тип терминала и различные переменные среды или выполнить специальную программу. Далее идет пример файла .profile оболочки Korn для пользователя testuser Здесь устанавливается переменная PATH для включения каталогов, Которые пользователь testuser эксплуатирует наиболее часто, проверяется почта.

PATH=$PATH:/u/testuser:/u/testuser/exe:/u/testuser/script PATH=/usr2/cdirect/local:$РАТН export PATH

Вы можете вызвать команду login и из командной строки. Ввод регистрационного имени не обязателен. Если регистрационное имя не введено, то система запросит его после ввода пароля, если необходимо. Если регистрационное имя введено, то система запросит пароль.

Rlogin

Команда rlogin предназначена для того, чтобы переходить от компьютера к компьютеру в сети. Команда rlogin похожа на команду telnet, описанную ниже.

Для того чтобы получить доступ к удаленному хосту, следует удовлетворить два условия:

р Локальный хост включается в файл /etc/hosts.equiv удаленного хоста, локальный пользователь не является привилегированным и опция -1 User не указывается.

р Локальный хост и имя пользователя включаются в файл SHOME/.rhosts в бюджете удаленного пользователя.

Если для пользователя на удаленном хосте не задан пароль, то rlogin разрешит войти в систему без пароля, при условии, что перечисленные выше требования выполнены. Однако разрешать пользователям доступ без пароля не рекомендуется. Когда вы уходите с удаленного хоста, то возвращаетесь на локальный хост.

Примеры

Вот пример команды riogin, где регистрационное имя пользователя не указываются. За выполнением такой команды последует запрос пароля (если он необходим), а ввод правильного пароля предоставит возможность соединиться с удаленным хостом:

rlogin bох2

В данном случае идентификатор пользователя для удаленного хоста принимается таким же, как идентификатор пользователя на локальном хосте. Например, если testuser вошел в систему на box1, то UNIX будет предполагать, что вы пытаетесь ввести rlogin на Bох2 именно как testuser.

Однако, если ваше регистрационное имя пользователя на Bох2 отличается от имени на boxl, то вы можете использовать для команды rlogin другую опцию:

rlogin bох2 -1 testusernew В данной опции rlogin говорится, что имя пользователя, используемое для удаленного хоста, - testusernew.

telnet

Если вы находитесь в среде, где в сети работают сразу несколько компьютеров UNIX, то время от времени вам придется работать на разных машинах. Команда telnet предоставляет механизм подключения к другим компьютерам из текущей системы без выхода из текущей среды. Команда telnet похожа на команду riogin, описанную ранее.

Аргумент hostname команды telnet не обязателен. Если вы не используете имя хост-компьютера как часть команды, то появится подсказка telnet, обычно telnet>. В ответ на подсказку telnet> есть несколько подкоманд. НеКоторые из подкоманд описаны ниже:

р exit служит для закрытия текущего соединения и возврат к подсказке telnet>, если для подключения к удаленному хосту использовалась команда open. Однако, если telnet бьша выдана с аргументом host-name, то соединение закрывается и вы возвращаетесь туда, откуда вызвали команду telnet.

р display предназначена для отображения действующих аргументов.

р open применяется для открытия соединения с хостом. Аргументом может быть имя хоста или адрес. telnet выдаст сообщение об ошибке, если имя или адрес неверны.

р quit служит для выхода из telnet.

р set необходима для установки действующих аргументов.

р status вводится для вывода информации о статусе.

toggle применяется для переключения действующих аргументов (toggle ? - для подробностей).

р ? служит для вывода вспомогательной информации.

Примеры

Предположим, что вы работаете с двумя компьютерами в сети, boxl и Bох2. Если в настоящий момент вы подключены к boxl, то можете выполнить следующую команду для регистрации на Bох2:

telnet Bох2

В ответ на команду Bох2 отобразит экран регистрации, где можно ввести имя пользователя и пароль для Bох2. После выполнения работ на Bох2 можно вернуться на boxl.

Passwd

Как известно, при каждой попытке зарегистрироваться в компьютерной системе запрашивается регистрационное имя пользователя и пароль. Хотя пользователи могут и не иметь пароля, большинство пароль все-таки имеют.

Когда вы впервые получаете свое регистрационное имя на компьютере, то системный администратор или администратор по вопросам безопасности присвоят вам временный пароль, используя свои права привилегированного пользователя - root. При первой регистрации система попросит сменить пароль. Для всех последующих регистрации будет использоваться новый пароль.

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

Когда вы вводите команду passwd, то прежде всего запрашивается текущий пароль. Затем выдаются две подсказки на ввод нового пароля. Новый пароль должен быть введен одинаково дважды. Это гарантирует, что вы ошибочно не введете что-то такое, чего не желали вводить, и вследствие чего потом не сможете зарегистрироваться. Новый пароль должен отличаться от прежнего. При вводе пароля (и старого, и нового) UNIX его не отображает,

Когда бы вы не меняли пароль, новый пароль должен соответствовать правилам, определенным при инсталляции. Вот неКоторые ограничения:

Минимальное число алфавитных символов.
Максимальное число повторений одного и того же символа.
Минимальное число недель, Которые должны истечь перед изменением пароля.
Максимальное число недель действия пароля. Система подскажет, что необходимо сменить пароль, когда придет время.
НеКоторые системы UNIX в команде passwd имеют дополнительные флаги.

При выборе пароля следует быть внимательным. Не выбирайте пароли, Которые могут угадать другие. Далее следуют несколько ценных указаний для выбора пароля:

Избегайте использования имен собственных, таких как имя супруги, ребенка, названиегорода, места работы и т.п.
Избегайте использования строк символов с последующими числами, например xyz01.
Используйте прописные и строчные буквы вперемежку с числами. в Длина пароля должна быть не менее 7 символов.
Пароль никогда не следует записывать.
Вы должны уметь быстро его набирать.
Примеры

В оболочке Korn для получения информации finger можно выполнить следующую команду:

passwd -f Результат будет приблизительно таким:

testuser's current gecos:

"Sanjiv Guha, UNIX Programmer, X 9999" Change (yes) or (no)? >

exit

После входа в систему UNIX вы всегда попадаете в оболочку, такую как Bourne, С, Korn и другие. Зарегистрироваться можно и в других системах с помощью команд rlogin или telnet. Команда exit предос-гавляет возможность выйти из текущей оболочки.

Покинуть текущую оболочку можно, если набрать <Ctrl-d>. (Придержите клавишу <Ctrl> и нажмите <d>). Если в этот момент вы находитесь в командной строке, то будете отключены от системы.

Поиск команд

Когда вы набираете команду, то UNIX должна найти эту команду, прежде чем сможет ее выполнить. Для обнаружения команды, подлежащей выполнению, система использует концепцию пути поиска (search path). Путь поиска представляет собой упорядоченный список каталогов, в котором следует искать команды.

По умолчанию пути поиска устанавливаются во время инсталляции и обычно включают стандартные каталоги, такие как /bin, /usr/bin и другие, специально указанные при инсталляции каталоги. Путь поиска для своей среды вы можете модифицировать следующими способами:

р Модифицируйте оператор PATH в файле .profile (оболочки Korn и Войте).

р Модифицируйте set path = (....) в файле .cshrc или .login (оболочка С).

Добавьте в начало пути каталог, Который содержит ваши команды или любые команды, Которые вы модифицировали. Они будут найдены первыми и выполнятся первыми. Убедитесь в том, что вы не дали модифицированным командам имена, принадлежащие "родным" командам UNIX.

Which

Данная команда используется для вьыснения того, есть ли указанная команда в пути поиска. Если она есть, то which сообщит, в каком каталоге содержится эта команда.

Примеры

Чтобы найти, в каком каталоге находится сама команда which, выполните следующее:

which which Система ответит следующим сообщением, означающем, что which находится в каталоге usr/bin.

usr/bin/which

whence

Команда whence более многословна по сравнению с командой which (имеется в виду оболочка Korn). В команде есть флаг -v, Который применяется для вывода результата в подробной форме. Для родной команды, Которой не был дан псевдоним, команда генерирует вывод, сходный с тем, что генерирует команда which.

Примеры

Для получения информации о команде which можно выполнить следующую команду:

whence which /usr/bin/which

Если указать флаг -v, то ответ будет дан в словесной форме

which is /usr/bin/which

Однако, если у вас есть команды с псевдонимами, то результат будет иным. Например, если вы назначили пп в качестве псевдонима для rm -i (команда remove с флагом подтверждения), то команда which гю сгенерирует вывод:

rm -i а

с флагом -v она сгенерирует вывод

rm is an alias for rm -i

where

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

Примеры

Если вы хотите узнать путь текущего каталога (предположим, что вы в каталоге /u/testuser),то команда where даст результат

boxl:/u/testuser

Как использовать команды

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

Man

Команда man используется для отображения страниц оперативного руководства UNIX, Которые включают команды, файлы, подпрограммы и т.д. Команде man следует указать имя искомого объекта. Если вы не знаете полного имени, то при указании имени объекта можно воспользоваться шаблонами UNIX. Используя команду man, можно узнать побольше и о ней самой.

Ниже перечислены несколько флагов и аргументов, Которые можно использовать с командой man:

р -k keyword предназначена для вывода перечня разделов руководства для данного ключевого слова.

Ш -f command служит для получения подробностей о команде. Прежде чем можно будет использовать данную опцию, привилегированный пользователь должен настроить файл /usr/man/whatis.

р -М path применяется для указания пути поиска для команды man.

Как часть команды можно указать имя раздела. Такое указание предоставит возможность искать заголовок в указанном разделе. Ниже следует перечень тех разделов, Которые можно указать:

1 - команды (Commands)
2 - обращения к системе (System calls)
3 - подпрограммы (Subroutines)
4 - форматы файлов (File formats)
5 - разное (Miscellaneous)
7 - специальные файлы (Special files)
8 - обслуживание (Maintenance)
Примеры

Если вы хотите найти сведения о команде find, то выполните следующую команду:

man find Для поиска ключевого слова filesystem выполните команду:

man -k filesystem

Администрирование

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

install

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


Для нового программного обеспечении код прав доступа по умолчанию устанавливается в 755 с владельцем группой bin Каталоги по умолчанию для поиска того, есть ли команда,- это /user/bin, /etc, и /user/lib в указанном порядке

Далее перечислены несколько флагов, Которые могут применяться с командой install:

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

р -{ directory служит для установки файлов в указанный каталог, даже если программа в данном каталоге уже существует. Если файл новый, то ему присваиваются владелец, группа и код прав доступа по умолчанию.

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

р -О owner применяется для назначения владельцем инсталлируемых файлов указанного пользователя, а не пользователя bin по умолчанию.

р -о служит для сохранения текущей версии с префиксом OLD, то есть, если имя файла sample, то файл сохранится под именем OLDsample.

р -i если вы хотите просматривать не каталоги, определенные в Path по умолчанию, а каталоги, указанные в командной строке.

р -n directory используется, если вы хотите установить файлы в указанный каталог и если файлы не найдены в каталогах, заданных в пути.

Примеры

Для установки файла sample_program в каталог /usr/bin (каталог по умолчанию), выполните следующую команду:

install sample_program

Предполагая, что sample_program уже существует в каталоге /u/testuser/exe, можете установить новую версию, выполнив следующую команду:

install -f /u/testuser/exe samle__program

Для сохранения старой версии sample_program и установки новой версии в каталог /u/testuser/exe, нужно выполнить следующую команду:

install -f /u/testuser/exe -о sample__program

shutdown

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

Ниже идет список флагов, Которые можно использовать с командой shutdown:

-h полностью останавливает операционную систему.
-i используется для интерактивных сообщений, адресованным пользователям.
-k устанавливается во избежание останова системы. Команда только имитирует останов.
-т переводит систему в режим обслуживания (однопользовательский), чтобы системный администратор или инженер-электронщик смогли выполнить профилактику системы, в том числе установку нового аппаратного и программного обеспечения или запланированную поддержку существующего аппаратного и программного обеспечения.
Возможно указать время повторного запуска, либо дату и время, либо указать относительное время. В таком случае система посылает сообщение пользователям об ожидаемом останове и запланированном времени нового запуска.

ulimit

Команда ulimit имеется в оболочках Korn и Bourne и используется для установки ограничений на определенные ресурсы для каждого процесса. В оболочке С команде ulimit соответствует команда limit. Существует два типа ограничений:

р Жесткие ограничения - это те, что определены для базовых системных ресурсов. Их можно модифицировать, только обладая полномочиями привилегированного пользователя.

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

Ниже перечислены флаги, Которые используются с командой ulimit:

-а для показа мягких ограничений
-На для показа жестких ограничений
-с size для установки coredumpsize в блоках
-t size для установки времени ЦПУ в секундах
-f size для установки максимального размера файла в блоках
-d size для установки максимального размера блока в килобайтах
-s size для установки максимального размера стека в килобайтах
-m size для установки максимального размера памяти в килобайтах
Примеры

Для получения текущих значений жестких ограничений выполните следующую команду:

ulimit -На

time(seconds) unlimited file(blocks) 4097151 data(kbytes) unlimited stack(kbytes) unlimited memory(kbytes) unlimited coredump(blocks) unlimited

Для получения текущих значений мягких ограничений выполните следующую команду:

ulimit -a

time(seconds) unlimited file(blocks) 4097151 data(kbytes) 2048576 stack(kbytes) 82768 memory(kbytes) 909600 coredump(blocks) 102400

Помните, что вы можете модифицировать мягкие ограничения, установленные системным администратором. Например, если хотите изменить на 60 секунд приведенное выше ограничение на время ЦПУ для процесса, то выполните следующую команду:

ulimit -t 60

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

umask

команда umask используется системным администратором для установки значения кода прав доступа по умолчанию, Которое будет присваиваться каждому файлу, созданному пользователем. Вы, как пользователь, можете модифицировать данное значение по умолчанию.

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

р бит чтения (0 или 1)

р бит записи (0 или 1)

р бит выполнения (0 или 1)

Используя двоичную арифметику, значение кода прав доступа можно варьировать от 0 (все биты имеют нулевое значение) до 7 (все биты имеют значение 1).

Следует быть внимательным при интерпретации значения, ассоциированного с umask. Значение umask можно использовать для порождения значения кода прав доступа по умолчанию, вычитая его из 777. То есть, если значение umask равно 022, то значение кода прав доступ будет 777 - 022 = 755 (чтение, запись, выполнение - только для владельца; чтение и выполнение -- для группы; чтение и выполнение - для всех остальных).

Примеры

Для получения значения по умолчанию umask выполните следующую команду:

umask

Для установки значения кода прав доступа, скажем, в 751 следует установить umask в 026 (777 - 751). Реальная команда будет такой:

umask 026

Команды управления процессами

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

Процессы можно разделить на следующие большие группы:

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

р Пакетные процессы не запускаются с терминалов. Они направляются в очередь заданий для последовательного выполнения.

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

В UNIX каждый процесс имеет несколько связанных с ним атрибутов. Ниже приведен список нескольких таких атрибутов:

Идентификатор процесса (Process ID) представляет собой уникальное число, присваиваемое каждому процессу.
Реальный идентификатор пользователя (Real User ID) представляет собой идентификатор того пользователя, Который инициализировал процесс.
Эффективный идентификатор пользователя (Effective User ID) представляет собой идентификатор пользователя, связанного с процессом. Он определяет доступ процесса к системным ресурсам. При нормальных обстоятельствах Real User ID и Effective User ID - это одно и то же. Но эффективный идентификатор пользователя может отличаться от реального идентификатора пользователя. Для этого устанавливается флаг Set User ID выполняемой программы. Установка делается тогда, когда вы хотите, чтобы программа выполнялась с особыми привилегиями, но привилегии пользователя оставались бы прежними.
Реальный идентификатор группы (Real Group ID) представляет собой идентификатор группы пользователя, Который инициализировал процесс.
Эффективный идентификатор группы (Effective Group ID) представляет собой идентификатор группы, Который определяет права доступа. Эффективный идентификатор группы похож на эффективный идентификатор пользователя.
Приоритет (Nice Number) представляет собой число, связанное с процессом, и характеризующее его важность по отношению к другим процессам, выполняющимся в системе.

kill

Команда kill используется для посылки сигналов выполняющемуся процессу. Чтобы процессу можно было послать сигнал с помощью данной команды, он не должен находиться в интерактивном режиме.

По умолчанию действие команды состоит в прекращении процесса. Однако возможно, что процесс запрограммирован на прием такого сигнала. Тогда процесс будет обрабатывать сигнал в соответствии с заложенной в него программой. Вы можете убивать только процессы, Которые инициированы вами. Привилегированный пользователь может убить любой процесс в системе.

Флаги, связанные с командой kill, таковы:

-1 предназначен для получения списка всех номеров сигналов и их названий, Которые поддерживаются системой.
-signal number представляет собой номер сигнала, посылаемого процессу. Вместо номера можно также использовать название сигнала. Самый сильный сигнал, Который можно послать процессу, - это 9 или kill.
Аргументом команды kill является идентификатор процесса (Process ID) (PID). Для уничтожения нескольких процессов допустимо указать более одного PID. PID принимает одно из следующих значений:

PID, больший нуля, - для уничтожения указанных процессов.
PID, равный нулю, - для уничтожения всех процессов, у Которых группа ID процесса соответствует группе ID процесса пользователя, запустившего команду kill.
PID, равный -1, - для уничтожения всех процессов с эффективным User ID пользователя, запустившего команду kill.
PID, равный отрицательному числу, но не -1, - для уничтожения процессов, PID Которых равен абсолютному значению указанного числа.
Примеры

Если вы выполняете команду в фоновом режиме и думаете, что она зациклилась, то можете ее снять. Например, если номер процесса 2060, то выполните следующую команду:

kill 2060

Если, по какой-либо причине, команда не убьет процесс, то используйте более сильныйвариант:

kill -kill 2060 (то же самое, что kill -9 2060)

Если вы хотите убить все принадлежащие вам процессы, то выполните следующую команду:

kill -kill 0

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

nice

Как вы уже видели, с каждым процессом связан относительный приоритет. Относительный приоритет управляет ресурсами, вьщеляемыми процессу операционной системой. Команда nice предоставляет возможность модифицировать приоритет одного или нескольких процессов так, чтобы у неКоторых процессов были более высокие приоритеты, а у других - более низкие. Однако увеличивать приоритет может только тот, кто обладает правами root.

Отрицательное число означает более высокий приоритет, чем положительное. Значения приоритета обычно находятся в диапазоне от -20 до 20.

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

Как правило, команду nice применяют для понижения приоритета фоновых или пакетных процессов, с выполнением Которых вы можете подождать.

Примеры

Если вы хотите искать в фоновом режиме, т.е. с низким приоритетом, все исходные файлы С в текущем каталоге или подкаталогах, то выполните следующую команду:

nice find . -name *.c -print &

Команда установит процесс в приоритет nice по умолчанию, например в 10. Для выполнения процесса с еще более низким приоритетом выполните следующую команду:

nice 16 find . -name *.c -print & Выполнение следующей команды дает такой же результат:

nice -n 16 find . -name *.c -print &

ps

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

При выполнении команды ps без флагов и аргументов она выводит список всех процессов (если они есть), инициированных с текущего терминала.

Далее следует список нескольких флагов, Которые определяют, какие процессы будут перечислены командой ps:

-А для вывода информации обо всех процессах, выполняющихся в системе
-е для подробностях о всех процессах, за исключением процессов ядра
-к для перечисления всех процессов ядра UNIX
-р list для вывода сведений обо всех процессах, указанных в списке
-t list для вывода сведений обо всех процессах, инициированных терминалами, указанными в списке
-U list (-u list) для вывода сведений обо всех процессах, инициированных пользователями, указанными в списке
а для вывода сведений обо всех процессах, Которые имеют ассоциированные с ними терминалы в g для вывода сведений обо всех процессах
х для вывода сведений обо всех процессах, Которые не имеют ассоциированных терминалов.
Ниже идет перечень нескольких флагов команды ps, Которые определяют, какие сведения отображаются для каждого перечисляемого процесса:

-1 для генерации списка в расширенной форме
-f для генерации полного листинга
-F format для генерации форматированного вывода
ПРИМЕЧАНИЕ

Некоторым флагам, используемым в команде ps, не предшествует знак переноса (-).



Если флаги не используются, то выводятся следующие сведения:

Идентификатор процесса.
Идентификатор терминала, связанного с процессом. Перенос (-) отображается, если связанного терминала нет.
Время ЦПУ, потребляемое процессом.
Команда, выполняющаяся как часть процесса
С помощью команд форматирования можно получить следующую информацию:

Идентификатор пользователя, инициировавшего процесс.
Идентификатор процесса.
Идентификатор родительского процесса.
Использование ЦПУ процессом.
Время начала процесса. Если процесс начался в тот же день, то отображается время, в противном случае выводится только дата.
Идентификатор терминала, связанного с процессом. Перенос (-) выводится, если терминала, связанного с процессом, нет.
Время ЦПУ, потребляемое процессом.
Команды, обрабатывающиеся как часть процесса.
Примеры

Для вывода списка процессов, инициированных текущим пользователем с текущего терминала выполните следующую команду:

ps

Вот вывод команды:

PID TTY TIME CMD 66874 2 0:00 -ksh 71438 2 0:00 ps

Здесь отображены два процесса. Один - оболочка (Korn), второй процесс принадлежит самой команде ps. Если вам нужно знать больше подробностей, выполните следующую команду:

ps -f

Команда сгенерирует следующий вывод:

USER PID PPID С STIME TTY TIME CMD

testuser 66874 1 1 22:52:26 2 0:00 -ksh

testuser 480076 66874 6 00:21:33 2 0:00 ps -f

Если вы хотите видеть все процессы, выполняющиеся на терминале tty2, то выполните следующую команду:

ps -f -t tty2

В результате получится

USER PID PPID С STIME TTY TIME CMD

testuser 66874 1 1 22:52:26 2 0:00 -ksh

testuser 703277 66874 6 00:24:17 2 0:00 ps -f -t tty2

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

ps -t

Для поиска всех процессов, выполняемых вашим другом с регистрационным именем friend, выполните команду:

ps -f -ufriend

jobs

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

Оболочка С и неКоторые версии оболочек Korn и Войте предлагают команду jobs. Команду jobs можно использовать для поиска сведений об активных заданиях. После того, как у вас появился идентификатор задания, можно приступать к элементарному управлению заданием.

Для указания того, что вы работаете с номером задания, а не с номером процесса, используется знак процента (%).

Примеры

Если задание номер 5 необходимо перевести из фонового режима в режим переднего плана, то выполните следующую команду:

fg %5

Если использовать 5 вместо %5, то UNIX интерпретирует 5 как идентификатор процесса 5. Если у вас есть задание под названием sample job, выполняющееся в фоновом режиме, то выполните команду

jobs и получите подробные сведения о задании. Вывод будет выглядеть примерно так:

[1] + Running nohup sample_job > sampie_log &

Если задействовать опцию -1, то будет отображен и номер процесса:

[1] + 270384 Running nohup sample_job > sample_log &

Для воздействия на задание не нужно знать его номер. Для идентификации задания можно использовать имя задания с предварительным знаком процента (%). Здесь можно использовать и обычные символы замещения.

В предыдущем примере для идентификации задания можно использовать sample job. UNIX также разрешает использовать %? для идентификации уникальной части имени задания. В данном примере это может быть %?job (пожалуйста, обратите внимание на то, что был использован символ , поскольку ? имеет в UNIX особое значение. Указание перед символом приказывает UNIX не интерпретировать данный символ как управляющий).

Чтобы удалить задание sample job, используете команду

kill % sample_job

Однако вы должны быть уверены, что это единственное задание с таким именем. Для того чтобы убить все задания с именем задания, оканчивающимся на job, следует выполнить команду:

kill %?job

wait

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

Примеры

Если вы хотите узнать, закончился ли процесс 15060, то выполните следующую команду:

wait 15060

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

nohup

При выполнении процессов под управлением UNIX, процессы могут выполняться как в фоновом режиме, так и в интерактивном. Если терминал занят выполняющимся интерактивным процессом, то в этой ситуации использовать его до завершения задания нельзя. Перевести процесс переднего плана в фон можно следующим образом:

Ctrl~z

bg

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

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

nohup sample_script &

Знак & (амперсанд) приказывает UNIX выполнить команду в фоновом режиме. Если опустить &, то команда выполнится в режиме переднего плана. В последнем случае все сообщения будут перенаправлены в nohup.out текущего каталога. Если файл nohup.out уже существует, то вывод будет добавлен в его конец. Если права доступа файла nohup.out установлены так, что вы не можете писать в данный файл, то UNIX создаст файл или добавит в конец существующего файла nohup.out в вашем начальном каталоге. Может случиться так, что ни один из данных файлов не будет доступен. Например, может не хватать дискового пространства. В такой ситуации UNIX не будет инициировать команду nohup.

Команда nohup предоставляет возможность перенаправлять вывод в любой файл вместо файла nohup.out по умолчанию. Для этого используются обычный механизм перенаправления UNIX.

Когда команда nohup инициируется в фоне (использованием знака & в конце командной строки), то UNIX отобразит идентификатор процесса, связанного с командой. Идентификатор впоследствии можно использовать в таких командах, как ps для отображения состояния выполнения.

Примеры

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

nohup grep sample__string * & UNIX ответит сообщением:

[2] 160788 Sending output to nohup.out (посылаю вывод в nohup.out)

В первой строке отображен идентификатор процесса, а во второй строке - информационное сообщение о том, что вывод перенаправлен в файл по умолчанию - nohup.out. Позднее файл nohup.out можно будет просмотреть и увидеть результаты выполнения команды grep. Если бы в предьщущем примере вы захотели перенаправить вывод в файл под названием mygrep.out, то следовало ввести следующую команду:

nohup grep sample_string * > mygrep.out &

В данном случае UNIX отобразит только идентификатор процесса:

[2] 160788

С помощью команды nohup можно также выполнить сценарии оболочки, Которые содержат множество команд. Например, если необходимо выполнить сценарий под названием my__script из текущего каталога, то выполните такую команду:

nohup my_script > my_script.out &

ПРЕДУПРЕЖДЕНИЕ

Следует быть внимательным и не перенаправить вывод сценария, Который вы хотите выполнить, в сам файл сценария.



sleep

Если необходимо подождать какой-то период времени, прежде чем команда начнет выполняться, то используйте команду sleep. Команда sleep применяется тогда, когда вы хотите, например, проверять наличие файла каждые 15 минут. Аргумент указывается в секундах.

Примеры

Если вы хотите, чтобы между командами проходило 5 минут, то выполните

sleep 300

Вот часть небольшого сценария оболочки, Который дважды напоминает вам о необходимости идти домой с 5-ти минутным перерывом между напоминаниями. (Сценарий не завершен.)

echo "Time to go home"

sleep 300

echo "Final call to go home ....."

Коммуникационные команды

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

cu

Команда сu позволяет подключиться к другому хосту, прямо или опосредованно. То есть, если в текущий момент времени вы работаете на host1 и используете си для подключения к host2, то с host2 можете подключиться к host3 так, что вы будете прямо подключены к host2 и опосредованно - к host3.

Ниже приведен список флагов, Которые можно использовать с командой сu:

-d для вывода диагностических сообщений.
-lLine для указания устройства, Которое будет применяться для обмена информацией. По умолчанию UNIX использует первое доступное устройство. Данный флаг можно задействовать для переопределения значений по умолчанию.
-n для подтверждения телефонного номера. Если применяется данный флаг, то си запрашивает у вас телефонный номер, а не просто принимает его как часть командной строки.
-sSpeed для указания скорости линии, Которая будет использоваться для обмена информацией между хостами. Скорость линии указывается в бод и может быть 300, 1200, 2400 и т.д. UNIX, в большинстве случаев, умеет по умолчанию выбрать подходящую скорость для линии.
-Tseconds для указания параметра тайм-аута. Данное время указывает, сколько времени UNIX будет пытаться подключиться к удаленному хосту.
С командой cu можно указать следующие аргументы:

р System Name - это имя системы, к Которой вы хотите подключиться. Данное имя должно определяться в файле /etc/uucp/Systems. Кроме того, в указанном файле определяются такие параметры, как телефонный номер, скорость линии и неКоторые другие, использующиеся для подключения к удаленному хосту. Если вы используете аргумент System Name, то следует использовать и опции -1 и -s.

р Telephone Number - это телефонный номер, Который используется для подключения к удаленному хосту. Номер может быть местным или междугородным.

После создания соединения си выполняет два процесса: процесс передачи считывает данные из стандартного ввода и, исключая строки, начинающиеся с ~ (тильды), передает данные удаленной системе;

процесс приема получает данные от удаленной системы и передает их в стандартный вывод, исключая строки, начинающиеся с ~ (тильды).

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

Далее следует список неКоторых подкоманд (тильду (~) следует предварять наклонной чертой (), чтобы UNIX не рассматривал тильду как управляющий символ):

~. служит для отключения от удаленного хоста.
~! активизирует интерактивную оболочку на локальном компьютере. Вы можете переключаться между интерактивными оболочками локальных и удаленных хостов, используя ~! и Ctrl-d. To есть, ~! помещает вас в оболочку локального хоста, а Ctrl-d возвращает на удаленный хост.
~!Command предназначена для выполнения Command на локальном хосте.
~%cd directory применяется для изменения каталога на локальном хосте на указанный каталог.
~%put From [ To ] служит для копирования файла с локальной системы на удаленную систему без изменения имени файла. Процесс передачи файла отображается как последовательные простые цифры, каждая из Которых соответствует блоку, переданному между хостами. Используя данную подкоманду, можно передавать только текстовые файлы (ASCII).
~%take From [To] используется для копирования файла с удаленной системы в файл на локальной системе. Если переменная То не указана, то удаленный файл копируется на локальную систему под своим именем. Прохождение процесса переноса файла отображается как последовательные десятичные цифры для каждого блока, переданного между хостами. Данной подкомандой можно передать только текстовые файлы (ASCII).
~$Command для выполнения на локальной системе, команда указывается переменной Command, a ее вывод пересылается удаленную систему для выполнения.
Примеры

Если вы знаете имя удаленного хоста и это имя определено в файле /etc/uucp/System, то можете использовать его для доступа на удаленный хост. Например, если имя удаленного хоста remote2, то выполните следующую команду:

cu remote2

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

cu -з 2400 -1 ttyl

После того как вы соединились с удаленным хостом, можно выполнять любую из подкоманд. Если вы желаете перейти в каталог /u/testuser на локальном хосте, то выполните команду:

~%cd /u/testuser

Если есть файл под названием local_file из каталога /u/testuser на локальном хосте, Который нужно скопировать в текущий каталог на удаленном хосте с тем же самым именем, то выполните следующую команду:

~%put /u/testuser/local_file

Если вы хотите модифицировать имя файла local_file в каталоге /u/testuser при копировании на remore_file в каталоге /u/testuser/destdir на удаленном хосте, выполните следующую команду:

~%put /u/testuser/local_file /u/testuser/testdir/remote file

Противоположную операцию можно проделать, используя подкоманду take. Например, если вы хотите скопировать файл /u/testuser/remote_file с удаленного хоста в файл под названием /u/testuser/local^file на локальном хосте, то выполните следующую команду:

~'%take /u/testuser/remote_file /u/testuser/local_file

Для выполнения команды Is на локальной системе выполните следующую команду:

~!ls

ftp

Команда ftp используется для передачи файлов между двумя хостами. Данная команда предоставляет возможность перемещать файлы с удаленного хоста на локальный или с локального хоста на удаленный. Команда ftp допускает только простые формы передачи файлов. То есть, вы не сможете скопировать файлы из каталогов рекурсивно, используя единичную команду ftp. Вместо этого каждый файл или каталог придется пересылать отдельно. Следует также знать, что команда ftp может использоваться для переноса файлов между разными типами систем. Однако при таком перемещении системно-зависимые атрибуты файлов могут не сохраниться.

При работе с командой ftp для регистрации на удаленном хосте необходимо использовать пароль. Но можно зарегистрироваться и без пароля, если начальный каталог содержит файл .netrc, а файл .netrc содержит макрос, необходимый для регистрации на удаленном хосте.

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

После успешного входа в систему команда ftp выводит подсказку ftp>. В ответ на подсказку ftp> для передачи файлов можно использовать целый ряд подкоманд.

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

ftp box2

то будет запрошено имя пользователя и пароль. Ниже перечислены несколько флагов, Которые можно использовать с командой ftp:

-i используется, если вы не хотите получать подсказку с именами файлов при пересылке одной командой нескольких файлов.
-d необходим для получения отладочной информации.
-n служит для предотвращения автоматической регистрации при наличии файла .netrc.
-v отображает на терминале сообщения с удаленного хоста.
Выйдя на подсказку ftp>, можно использовать несколько подкоманд, а именно:

! для вызова интерактивной оболочки на локальном хосте. По выбору можно использовать команду с аргументами, указав команду и аргументы после восклицательного знака.
? для отображения списка доступных подкоманд. По выбору подкоманду можно указать после вопросительного знака и получить специфическую для подкоманды информацию.
type для установки режима переноса файла. Действительными режимами являются: ASCII для текстовых файлов, binary для двоичных файлов, либо не требующих какой-либо трансляции, и режим EBCDIC для пересьыки файлов в коде EBCDIC.
cd для перехода в начальный каталог на удаленном хосте. Если после cd указано имя каталога, то текущий каталог на удаленном хосте изменяется на указанный каталог.
pwd для вывода имени текущего рабочего каталога на удаленном хосте.
ls для вывода списка файлов текущего каталога на удаленном хосте. Если не указан каталог, то печатаются файлы и каталоги из начального каталога. Список файлов можно направить в файл на локальном хосте, указав локальное имя файла.
mkdir directory для создания нового каталога под текущим каталогом удаленного хоста.
dir для генерации списка файлов. Похожа на команду Is, но выдает подробный листинг.
rmdir directory для удаления указанного каталога на удаленном хосте, при условии, что удаляемый каталог пуст.
rename oldname newname для переименования файла из oldname в петате на удаленном хосте.
delete filename для удаления указанного файла на удаленном хосте.
get filename для передачи файла с удаленного хоста на локальный хост. Имя файла при этом не изменяется. По выбору можно указать файл local filename, в Который будет скопирован файл с удаленного хоста.
mget для передачи множества файлов с удаленного хоста на локальный хост. Имя файла можно указать, используя символы шаблонов. Если установлена опция prompt, то будет запрашиваться подтверждение на передачу каждого файла. Если опция prompt не установлена, то все файлы копируются без подтверждения.
put filename для передачи файла с локального хоста на удаленный хост. Имя файла не изменяется. По выбору можно указать local filename, в Который будет скопирован файл с удаленного хоста.
mput для передачи множества файлов с локального хоста на удаленный хост. Имя файла можно указать, используя символы шаблонов. Если установлена опция prompt, то будет запрошено подтверждение на передачу каждого файла. Если опция prompt не установлена, то все файлы копируются без подтверждения.
mdelete для удаления множества файлов посредством указания символов шаблона.
append filename для добавления локального файла в конец файла на удаленном хосте. По выбору можно указать имя файла на удаленном хосте для добавления в конец указанного файла. Если файл на удаленном хосте не указывается, то по умолчанию используется локальное имя файла.
open для открытия соединения с удаленным хостом посредством указания имени удаленного хоста.
close для закрытия существующего соединения с удаленным хостом.
bye или quit для выхода из сеанса ftp.
led для перехода в начальный каталог на локальном хосте. Если каталог указан, то текущий каталог на локальном хосте изменяется на указанный.
Примеры

Для открытия сеанса ftp на удаленном хосте с именем otherhost выполните команду:

ftp otherhost или

ftp

ftp> open otherhost

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

Connected to otherhost.

220 otherhost FTP server (Version 4.14 Fri Oct 10 13:39:22 CDT 1994) ready.

Name (otherhost:testuser): testuser

331 Password required for testuser.

Password:

230 User testuser logged in.

После появления подсказки ftp> можно выполнять подкоманды ftp. Если вы хотите определить, в каком каталоге вы находитесь на удаленном хосте, выполните следующую подкоманду:

ftp> pwd

257 "/home/testdir" is current directory.

Для копирования файла под названием testfile с otherhost на локальный хост выполните подкоманду get Ниже приведена подкоманда и соответствующий вывод:

ftp> get testfile

200 PORT command successful.

150 Opening data connection for testfile (73 bytes) .

226 Transfer complete.

80 bytes received in 0.02583 seconds (3.025 Kbytes/s)

Аналогично, для копирования файла под названием testfile с локального хоста на удаленный хост otherhost, используйте подкоманду put. Ниже приведена сама подкоманда и ответ на нее.

ftp> put testfile

200 PORT command successful.

150 Opening data connection for testfile.

226 Transter complete. 142 bytes sent in 0.02954 seconds (4.695 Kbytes/s)

Далее следует последовательность подкоманд. Здесь мы пытаемся скопировать файл под названием testfile в двоичном режиме из каталога /u/testuser на локальном хосте в каталог под названием /u/testuser/testdir на удаленном хосте otherhost.

ftp otherhost

Connected to otherhost.

220 otherhost FTP server (Version 4.14 Fri Aug 5 13:39:22 CDT 1994) ready.

Name (otherhost:testuser): testuser

331 Password required for testuser.

Password:

230 User testuser logged in.

ftp> led /u/testuser

Local directory now /u/testuser

ftp> cd /u/testuser/testdir

250 CWD command successful.

ftp> binary

200 Type set to I.

ftp> put testfile

200 PORT command successful.

150 Opening data connection for testfile.

226 Transfer complete.

46197 bytes sent in 0.03237 seconds (1394 Kbytes/s)

ftp> quit

221 Goodbye.

Ниже приведены дополнительные примеры копирования нескольких файлов, просмотра файлов и удаления нескольких файлов:

ftp otherhost

Connected to otherhost.

220 otherhost FTP server (Version 4.14 Fri Aug 5 13:39:22 CDT 1994) ready.

Name (otherhost:testuser): testuser

331 Password required for testuser.

Password:

230 User testuser logged in.

ftp> mput file*

mput filel? у

200 PORT command successful.

150 Opening data connection for filel.

226 Transfer complete.

46197 bytes sent in 0.03323 seconds (1358 Kbytes/s)

mput file2? у

200 PORT command successful.

150 Opening data connection for file2.

226 Transfer complete.

44045 bytes sent in 0.01257 seconds (3422 Kbytes/s)

mput file3? у

200 PORT command successful.

150 Opening data connection for file3.

226 Transfer complete.

41817 bytes sent in 0.01172 seconds (3485 Kbytes/s)

Is -1

200 PORT command successful.

150 Opening data connection for /bin/Is.

total 176

-rw-r--- 1 testuser author 1115 Dec 15 11:34 filel

-rw-r--- 1 testuser author 43018 Dec 15 11:34 file2

-rw-r--- 1 testuser author 40840 Dec 15 11:34 file3

226 Transfer complete.

mdel file*

mdel filel? у

250 DELE command successful.

mdel file2? у

250 DELE command successful.

mdel file3? у

250 DELE command successful.

mailx

В UNIX посылать почту другим пользователям и принимать почту от других пользователей можно с помощью команды mailx. Команда mailx имеет подкоманды для удобства сохранения, удаления и ответа на сообщения. Данная команда помогает также комбинировать и редактировать сообщения, прежде чем посылать их одному или нескольким пользователям.

Почтовая система в UNIX использует почтовые ящики для приема почты, редназначенной тому или иному пользователю. Каждый пользователь имеет системный почтовый ящик, в Котором собирается и ожидает пользователя вся его почта. Пользователь может читать, сохранять и удалять почту. После прочтения пользователь может переместить почту во вторичный или персональный почтовый ящик. По умолчанию вторичный почтовый ящик называется mbox. Mbox обычно находится в начальном каталоге пользователя. Однако можно указать имя файла, используемого как вторичный почтовый ящик. Все сообщения, сохраненные в почтовом ящике mbox, находятся там до тех пор, пока не будут перенесены во вторичные почтовые ящики, Которые иногда называют папками. Папки можно использовать для организации хранения почты. Например, папки можно организовать по темам и все материалы, касающиеся определенной темы, сохранять в одной папке.

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

Ниже приведен список нескольких флагов, Которые используются в команде mailx:

-d для вывода отладочной информации.
-f для вывода списка сообщений в почтовом ящике по умолчанию mbox. По выбору можно указать имя папки, в Которой ваша почта сохранялась прежде.
-s subject для ассоциирования предмета с почтой.
-v для отображения подробной информации.
С каждым письмом связана определенная информация. Ниже следует перечень такой информации:

- status указывает состояние почтового сообщения. Далее приведен список различныхсостояний почтовых отправлений:

М указывает на то, что сообщение будет храниться в персональном почтовом ящике.
> указывает на текущее сообщение.
N указывает, что сообщение является новым.
Р указывает, что сообщение будет сохранено в системном почтовом ящике.
R указывает, что вы читали сообщение.
U указывает на непрочитанное сообщение. Непрочитанное сообщение - это то сообщение, Которое было новым при предыдущем вызове mailx, но так и не было прочитано.
* означает, что сообщение сохранено или записано в файл или папку.
Отсутствие флага состояния указывает на то, что сообщение прочитано, но не удалено и не сохранено.
number указывает на цифровой идентификатор сообщения, по Которому можно ссьшаться на сообщение.
sender указывает пользователя, Который послал сообщение.
date указывает дату, когда почта была принята в почтовый ящик.
size указывает размер сообщения в строках и байтах.
subject указывает на тему сообщения, если отправитель связывает сообщение с какой-либо темой. Данное поле может быть и незаполненным, в зависимости от того, заполнял ли его отправитель.
Ниже приведен перечень подкоманд, Которые можно использовать при наличии подсказки mail> :

q для применения почтовых команд, вводившихся в данном сеансе.
х для выхода.
!команда для запуска оболочки, выполнения команды и возврата в почтовый ящик.
cd для перехода в начальный каталог. Можно также указать имя каталога для перехода в указанный каталог.
t для вывода на экран текущего сообщения. Можно также указать список сообщений для отображения сообщений из списка.
n для вывода следующего сообщения.
f для вывода заголовков текущего сообщения. Можно также указать список сообщений и отобразить заголовки всех сообщений из списка.
е для редактирования текущего сообщения. Можно также указать номер сообщения, которое будет модифицироваться.
d для удаления сообщений. Можно указать список сообщений для удаления сообщений по списку.
u для восстановления удаленных сообщений.
s file для добавления в конец файла текущего сообщения, включая заголовок. Между s и file можно указать список сообщений для добавления указанных сообщений в конец файла.
w file для добавления в конец файла текущего сообщения, за исключением заголовка сообщения. Между w и file можно указать список для добавления указанных сообщений в файл.
рге для сохранения сообщений в системном почтовом ящике. Можно указать список сообщений, Которые будут сохранены в системном почтовом ящике.
m addresslist для создания или посылки нового сообщения по адресам из списка адресов.
r для отправки ответа получателям и отправителям сообщений. Можно указать список сообщений для посылки ответа получателям и отправителям сообщений из списка.
R для отправки ответа только отправителям сообщений на текущее сообщение. Можно указать список сообщений для посылки ответа отправителям сообщений из списка.
а для отображения списка псевдонимов и их адресов.
Примеры

Сама команда шаПх вызывается для того, чтобы перейти на подсказку mail^> и выполнять подкоманды. "[опасть на подсказку mail> можно только тогда, когда вам пришла почта. В противном случае будет выда-ю сообщение, похожее на "You have no mail" (Для вас почты нет). Если почта есть, то на экране отобра-еится что-нибудь вроде:

mailx

Mail [5.2 UCB] Type ? for help. "/usr/spool/mail/testuser": 1 message 1 new >N 1 testuser Sat Nov 16 22:49 285/9644

&

Если теперь выйти из команды mailx, применив подкоманду quit, Которую можно сократить до q, то ючта сохранится в вашем персональном почтовом ящике (файле mbox начального каталога).

Теперь для просмотра почты используйте команду mailx -f, Которая выльется в следующий диалог:

mailx -f

Mail [5.2 UCB] Type ? for help.

"/u/testuser/mbox": 1 message

> 1 testuser Sat Nov 23 00:11 162/5175

&

При работе с командой mailx для сохранения почты в папке выполните следующую подкоманду:

& save I /u/testuser/folderl/filel

Команда создаст filel из первого сообщения в каталоге /u/testuser/folderl.

Если теперь вызвать команду mailx, чтобы прочесть файл /u/testuser/folderl/filel, на экране появится гтедующий диалог:

mailx -f /u/testuser/folderl

Mail [5.2 UCB] Type ? for help.

"/u/testuser/folderl": 1 message

> 1 testuser Sat Nov 23 00:11 162/5175

&

Как только вы попали в mailx, можете исполнять подкоманду м для создания и пересылки почты дру-im пользователям:

& m friendl

Subject: Testing mailx command

This is test of the mailx command

Here we are trying to send a mail to user friendl with cc to friend2

Cc: friend2

&

Создание тела почтового сообщения завершается вводом комбинации клавиш Ctrl-d. С помощью подко-анды m можно посьыать почту многим пользователям.

talk

Используя команду talk, можно общаться с другим подключенным пользователем в реальном времени. При помощи команды talk можно общаться с пользователями как локального, так и удаленных хостов.

Команда talk принимает один обязательный аргумент - имя пользователя или имя пользователя и имя хоста. Можно использовать второй аргумент, указывающий TTY, к Которому подключен пользователь.

Пользователь на удаленном хосте может указываться в одном из следующих форматов:

username@host
host!username
host.username
host:username
Когда вы выполняете команду talk, то она открывает два окна (одно - для отправки, другое - для приема сообщений) и ждет ответа от другого пользователя.

Примеры

Если для обмена информацией с пользователем friend выполнить команду

talk friend

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

[Waiting for your Party to respond] (Ожидание ответа противоположной стороны)

Экран будет разделен на две половины: одна - для приема сообщений, другая - для их отправки. Если указанный пользователь не вошел в систему, то вы получите сообщение, подобное следующему: "Your Party is not logged on".

В то же время пользователь friend получит следующие сообщения:

Message from Talk_Daemon@hostl at 0:46 ... talk: connection requested by testuser@hostl. talk: respond with: talk testuser@hostl [Waiting for your Party to respond]

Для начала обмена информацией пользователь friend должен ответить командой talk testuser@hostl

Для прекращения сеанса нажмите Ctrl-C.

vacation

Если вы хотите уведомить отправителя почты о том, что уходите в отпуск, то воспользуйтесь командой vacation. Посьшаемое сообщение можно настроить предварительно, если создать его в файле под названием рvacation.msg в начальном каталоге. Если файл не существует, система пошлет сообщение по умолчанию. По умолчанию система посылает сообщение один раз в неделю тому пользователю, Который прислал вам почту.

Команда vacation используется для перенаправления сообщений, Которые вы принимаете в течение отпуска, другим пользователям. Для этого задействуется файл .forward в начальном каталоге. Включите в него имена всех тех пользователей, Которым должны перенаправляться сообщения. Запись в файле рforward имеет следующий формат:

testuser, "|/usr/bin/vacation testuser"

Команда vacation позволяет также сохранять имена пользователей, Которые посьглают вам сообщения во время вашего отпуска. Имена пользователей хранятся в файлах .vacation.dir и .vacation.pag в начальном каталоге.

Команда vacation имеет только один флаг, а именно:

р -i для инициализации файлов .vacation.dir и .vacation.pag перед началом отпуска.

Наличие в начальном каталоге файла .forward используется системой для идентификации того обстоятельства, что вы ушли в отпуск. Поэтому после возвращения следует удалить или переименовать файл .forward.

Перед тем как уйти в отпуск, используйте следующую команду для инициализации файлов .vacation.dir и .vacation.pag в своем начальном каталоге:

vacation -i

После этого необходимо создать файлы .forward и .vacation.msg.

write

Команда write используется для осуществления обмена информацией с другими пользователями на локальном или удаленном хостах, как это делалось с помощью команды talk. Для того чтобы обмениваться информацией с другим пользователем, должны соблюдаться следующие условия:

Пользователь должен войти в систему. Пользователь не должен использовать команду mesg для запрета на обмен сообщениями.

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

Далее следует список нескольких флагов, Которые работают с командой write:

-h Handle, Reply для ответа на сообщение, посылаемое утилитой или сценарием оболочки, используйте write с опцией reply. Handle - это число, генерируемое системой. Ответ (Reply) может быть ok, cancel или query.
-nHost служит для указания удаленного хоста, если вы хотите общаться с пользователем удаленного хоста. Возможно также указать пользователя удаленного хоста как username@host.
-q для вывода сообщений (с дескрипторами), ожидающих ответа от пользователей на хосте и отображения ожидающих сообщений.
Примеры

Если вы хотите обменяться информацией с пользователем friend, то выполните следующую команду:

write friend Если пользователь friend не вошел в систему, то вы получите сообщение следующего типа:

friend is not logged on.

Если пользователь friend использовал команду mesg для запрещения на обмен информацией, то вы получите сообщение:

write: permission denied

Если же команда write выполнилась успешно, пользователь получит сообщение, подобное следующему:

Message from testuser on mainhost(pts/3) [Fri Nov 22 19:48:30 1996] ...

Вы можете использовать оператор перенаправления ввода UNIX для пересылки длинных сообщений из файла, Который называется, например, long_message:

write friend < long_message

Для начала обмена информацией другой пользователь также должен использовать команду write следующим образом:

write testuser

Если вы хотите обмениваться информацией с пользователем friend на удаленном хосте otherhost, выполните любую из следующих команд:

write friend@otherhost ИЛИ

write -n otherhost friend

Сравнение файлов

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

сmp

Команда сmp сравнивает содержимое двух файлов и генерирует вывод в стандартный вывод. Возможно, чтобы одним из сравниваемых файлов был стандартный ввод, но не оба. Вы можете использовать "-" (знак переноса) для указания на то, что данный файл является стандартным вводом. Действие знака "-" прекращается нажатием Ctrl-D. Команду cmp следует применять для нетекстовых файлов с целью выяснения их идентичности. Для текстовых файлов используйте команду diff, Которая обсуждается ниже. Далее представлен вывод, сгенерированный командой cmp:

Никакого вывода, если файлы идентичны
Отображение номера байта и строки первой позиции, в Которой обнаружена разница.
Флаги, Которые можно использовать с командой cmp таковы:

-1 для каждого отличия отображаются номер байта в десятичном виде и отличающиеся байты - в восьмеричном.
в -s служит для вывода только возвращаемого значения, без генерации какого-либо вывода. Значение возвращаемого значения : 0 - для идентичных файлов, 1 - для разных файлов и 2 - если команда сюр не смогла сравнить файлы.
Примеры

Если надо сравнить новую версию исполняемого модуля со старой версией, выполните следующую команду:

cmp new_progl old_progl

Если файлы идентичны, никакой вывод не генерируется, если же они разные, то будет сгенерировано следующее:

new_Jprogl old_J?rogl differ: byte6, line 1

Флаг -s используется тогда, когда команда cmp задействована в сценарии оболочки для определения, являются ли два файла идентичными. Ниже приведен фрагмент сценария оболочки, Который использует флаг -s:

ret_code= * cmp -s new_J3rogl old_J?rogl * if [ [ $ret_code "eq 0 ] ] then

echo "Files are identical ..." else

echo "Files are different ..." fi

Если файлы идентичны, но один из файлов имеет лишние записи в конце, использование флага -1 сгенерирует следующий вывод:

cmp -I new_progl old_progl


12 63 cmp: EOF on new__progl
comm

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

По умолчанию генерируется в стандартный вывод в три колонки:

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

-1 для подавления вывода первой колонки.
-2 для подавления вывода второй колонки.
-3 для подавления вывода третьей колонки.
Примеры

Предположим, что есть два файла: filel и file2. Содержимое файлов отображается с помощью команды more:

more filel line 1

line 2

line 3

line 5

line 6

line 7

line 8

line 9


more file2

line 1

line 2

line 3

line 4

line 5

line 6

line 7

line 9


Если сравнить два файла, fflel и file2, то получите следующий вывод:

comm filel file2

line 1

line 2

line 3

line 4

line 5

line 6

line 7

line 8

line 9

Вывод показывает, что filel содержит одну строку, Которой нет в file2 (в колонке 1).file2 содержит одну строку, Которой нет в filel (в колонке 2). И есть семь строк, Которые существуют в обоих файлах.

Если вам интересна только разница, то колонку 3 можно не отображать:

comm -3 filel file2

line 4 line 8

Если вас интересуют только идентичные строки, то опустите колонки 1 и 2 :

comm -12 filel file2 line 1

line 2

line 3

line 5

line 6

line 7

line 9


diff

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

Группе выводимых строк команды diff предшествует информационная строка, содержащая следующее:

Отличающиеся строки из первого файла. Это может быть единственный номер строки или номера строк, разделенные запятыми, означающие строки в данном диапазоне.
Код действия, действительными значениями для Которого являются: а (для добавленных строк), с (для модифицированных строк) и d (для удаленных строк).
Отличающиеся строки из второго файла. Это может быть единственный номер строки или номера строк, разделенные запятыми, означающие строки в данном диапазоне.
Команда diff генерирует команды редактора ed. Команды cd можно применить к первому файлу, в результате чего второй файл станет идентичен первому.

Командой diff генерируется три формы вывода. Они таковы:

Number1aNumber2, Number3, что означает необходимость добавления строк с Nuinber2 по Number3 из второго файла в первый файл после строки Numberl. Такое добавление сделает файлы идентичными. За данной формой следуют действительные строки из второго файла, перед Которыми идет знак > (больше, чем).
NumberldNumbcr2, что означает необходимость удаления строк с Nuinberi по Nuinber2 из первого файла. После этого файлы станут идентичными. За данной формой следуют действительные строки из первого файла, перед Которыми идет знак < (меньше, чем).
Numberi, Numbmer2cNumber3,Number4, что означает необходимость модифицировать строки с Numberi по Number2 в первом файле строками с Numbers no Number4 второго файла. Такая модификация сделает файлы идентичными. За данной формой следуют действительные строки из первого файла, каждая из Которых отмечена знаком < (меньше, чем), и затем следуют действительные строки из второго файла, каждая из Которых отмечена знаком > (больше, чем).
Ниже приводится список флагов, используемых в команде diff:

-b для гарантии, что несколько пробелов или символов табуляции подряд будут рассматриваться как один. Однако символы пробелов или табуляции в начале строки обрабатываются как есть.
-с LINE для генерации вывода в формате, отличающемся от формата по умолчанию. Параметр LINE не обязателен. Прежде всего вывод идентифицирует сравниваемые файлы по дате и времени создания. Каждая модифицированная группа строк отделяется строкой со * (звездочка), далее следуют строки из первого файла и строки из второго файла. Строки, удаленные из первого файла, отмечаются знаком переноса (-). Строки, добавленные ко второму файлу, отмечаются знаком плюс (+). Строки, Которые существуют в обоих файлах, но различны, отмечаются восклицательным знаком (!). Изменения, Которые лежат в пределах указанного контекста, группируются вместе как вывод.
-D String для создания слитой версии первого и второго файлов в стандартном выводе. Включено управление препроцессора С так, чтобы компиляция результатов без определения String была эквивалентна компиляции первого файла, тогда как определение String приводит к компиляции второго файла.
-е для генерации вывода, Который может быть вводом в редактор ed, для порождения второго файла из первого.
-f для генерации вывода, противоположного тому, что порождается флагом -е.
-i для сравнения двух файлов без учета регистра букв.
-l для генерации форматированного вывода. В конце вывода добавляется также сводная информация.
-n для генерации вывода, в порядке обратном тому, что получается при использовании флага -е. Дополнительно генерируются счетчики удаленных и добавленных строк.
-r для выполнения команды diff над всеми идентично поименованными подкаталогами указанного каталога.
-s для генерации вывода и получения списка идентичных файлов и разницы между идентично именованными файлами. Флаг генерирует также список файлов, Которые имеются в наличии только в одном из каталогов.
-S FILE для игнорирования файлов. Данная опция используется при сравнении каталогов, Которые содержат меньше файлов, чем указано FILE.
-t для сохранения исходной идентификации строк. Идентификация строк в выводе модифицируется с помощью знаков > (больше, чем) или < (меньше, чем).
-w для игнорирования всех пробелов и символов табуляции. То есть, при сравнении обрабатывать их одинаково.
Примеры

Предположим, что у нас есть два файла, filel и file2. Содержимое файлов показано с помощью команды more:

more filel

This is the first line

This is the second line

This is the fourth line

This is the fifth line

This is the sixth line

This is the seventh line

This is the eighth line

This is the NINTH line

more file2

This is the first line

This is the second line

This is the third line

This is the fourth line

This is the sixth line

This is the seventh line

This is the eighth line

This is the ninth line

Простейшая форма команды diff, выданной для filel и file2, сгенерирует следующий вывод:

diff filel file2

2а3

> This is the third line

4d4

< This is the fifth line

6,8c6,8

< This is the seventh line < This is the eighth line < This is the NINTH line

> This is the seventh line > This is the eighth line > This is the ninth line

Смысл вывода: необходимо добавить This is third line к filel, удалить This is fifth line из filel и модифицировать строки 6 и 7 в This is seventh line и This is the eight line в filel для того, чтобы сделать filel идентичным file2.

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

diff -b filel file2

2а3

> This is the third line

4d4

< This is the fifth line

8c8

< This is the NINTH line

> This is the ninth line

Как видите, строки 6 и 7 теперь не отображаются, поскольку они отличаются только лишними символами пробела и табуляции.

Используя флаги -С или -с, данные можно отобразить в специальном формате, как в следующих командах:

diff -С 0 filel file2

*** filel Thu Nov 28 22:15:23 1996

*- file2 Thu Nov 28 18:05:59 1996

***************

*** 2 ****

+ This is the third line

***************

*** 4 ****

* This is the fifth line

***************

*** 6,8 ****

! This is the seventh line ! This is the eighth line ! This is the NINTH line

*- 6/8 --

! This is the seventh line ' This is the eighth line ! This is the ninth line -

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

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

diff -е filel file2 6,8с

This is the seventh line

This is the eighth line

This is the ninth line

4d 2a

This is the third line

Данный вывод может затем послужить вводом для команды ed, примененной к filel, чтобы сделать его идентичным П1е2. Такой прием можно использовать для сохранения базовой версии и внесения последовательных изменений таким образом, чтобы любую версию можно было получить, применяя изменения к базовой версии. Вот пример того, как можно сделать filel идентичным file2, используя флаг -е.

Перенаправьте вывод команды diff в файл под названием diffbut, как в следующей команде:

diff -е filel file2 > diffout

Если выполнить для diffout команду more, то получится следующий вывод:

more diffout б,8с

This is the seventh line This is the eighth line This is the ninth line

4d 2a

This is the third line

Теперь добавьте в конец diffout дополнительную команду. Это команда ~ w для редактора ed, Которая обеспечит запись вывода назад в файл, к Которому команда применена. Если вы еще раз выполните команду more для файла diffout, то увидите в конце дополнительную строку:

more diffout

6,8с

This is the seventh line

This is the eighth line

This is the ninth line

4d 2a

This is the third line

Для обновления filel и наблюдения за результатами используйте команду:

ed - filel < diffout more filell

This is the first line

This is the second line

This is the third line

This is the fourth line

This is the sixth line

This is the seventh line

This is the eighth line

This is the ninth line

Если вы не хотите обновлять исходный файл, то используйте команду 1,$р вместо w. В результате будет сгенерирован вывод в стандартный вывод. Вывод также можно перенаправить в файл, как в следующей команде:

ed - filel < diffout > filel.new

Для генерации вывода в порядке обратном тому, Который указан -е, выполните предыдущую команду с флагом -f:

а2 This is the third line

d4

c6 8

This is the seventh line This is the eighth line

This is the ninth line

Если вам все равно, записан ли файл строчными или прописными буквами, то для отключения реакции на различия в регистре в команде diff используйте флаг -i, как в следующей команде:

diff -i filel file2 2а3

> This is the third line

4d4

<This is the fifth line

6,7c6,7

< This is the seventh line

< This is the eighth line

> This is the seventh line > This is the eighth

Обратите внимание на то, что строки This is the ninth line in filel и This is the ninth line in file2 оцениваются как равные. Причина такой оценки - в использовании флага -i.

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

diff -n filel file2

а2 1

This is the third line

d4 1

d6 3

a8 3

This is the seventh line

This is the eighth line

This is the ninth line

Информация в приведенных выше строках относится к filel. Она говорит о том, что одна строка вставлена после строки 1, затем идет строка для вставки, одна строка удалена из строки 4, три строки удалены в строке 6 и 3 строки вставлены после строки 8, за Которой следуют строки для вставки.

С тем чтобы игнорировать все символы табуляции и пробелы, используйте флаг -w. Разница между флагами

-b и -w заключается в том, что -Ь игнорирует все пробелы и символы табуляции, за исключением стоящих в начале строки, тогда как -w игнорирует все. Ниже приведен пример с флагом -w:

diff -w filel file2

2а3

> This is the third line

4d4

< This is the fifth line

8c8

< This is the NINTH line

> This is the ninth line

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

testdirl и testdir2

Теперь давайте посмотрим, какие файлы есть в данных каталогах:

ls -R test*

testdirl:

filel file2 file3 file4 file5 file6 testdir3

testdirl/testdir3:

filea fileb filec filed filee

testdir2:

file2 file4 file5 file? file8 testdir3

testdir2/testdir3:

fileb filed filee filef fileg

Простейшая форма команды diff без каких-либо флагов сравнивает два каталога и выводит следующий результат:

diff testdirl testdir2

Only in testdirl: filel

Only in testdirl: file3

Only in testdirl: file6

Only in testdir2: file?

Only in testdir2: file8

Common subdirectories: testdirl/testdir3 and testdir2/testdir3

В приведенном примере команда diff не переходит в подкаталог testdir3 в каталогах testdirl и testdir2.

Если вы хотите, чтобы команда diff обрабатывала и подкаталоги, входящие в testdirl и testdir2, используйте флаг -r, как в следующей команде:

diff -r testdirl testdir2

Only in testdirl: filel

Only in testdirl: file3

Only in testdirl: file6

Only in testdir2: file?

Only in testdir2: file8

Only in testdirl/testdir3: filea

Only in testdirl/testdir3: filec

Only in testdir2/testdir3: filef

Only in testdir2/testdir3: fileg

Если необходим список всех файлов в идентичных каталогах, используйте флаг -s, как в следующей команде:

diff -rs testdirl testdir2

Only in testdirl: filel

Files testdirl/file2 and testdir2/file2 are identical

Only in testdirl: file3

Files testdirl/file4 and testdir2/file4 are identical

Files testdirl/file5 and testdir2/file5 are identical

Only in testdirl: file6

Only in testdir2: file7

Only in testdir2: file8

Only in testdirl/testdir3: filea

Files testdirl/testdir3/fileb and testdir2/testdir3/fileb are identical

Only in testdirl/testdir3: filec

Files testdirl/testdir3/filed and testdir2/testdir3/filed are identical

Files testdirl/testdir3/filee and testdir2/testdir3/filee are identical

Only in testdir2/testdir3: filef

Only in testdir2/testdir3: fiieg

Если вы не хотите обрабатывать все файлы, чьи имена предшествуют указанному имени файла (в данном случае file2), то используйте флаг -S, как в следующей команде:

diff -r -S file2 testdirl testdir2

Only in testdirl: file3

Only in testdirl: file6

Only in testdir2: file7

Only in testdir2: file8

Only in testdirl/testdir3: filea

Only in testdirl/testdir3: filec

Only in testdir2/testdir3: filef

Only in testdir2/testdir3: fileg

diff3

Команда diff сравнивает два файла. Если необходимо сравнить сразу три файла, используйте команду diff3. Команда diff3 пишет вывод в стандартный вывод. Результат содержит следующие примечания, идентифицирующие разницу:

===== означает, что все три файла разные.
======1 означает, что отличается первый файл.
======2 означает, что отличается второй файл.
======3 означает, что отличается третий файл.
Ниже идет перечень флагов, Которые можно использовать с командой diff3:

-3 для порождения сценария редактирования, содержащего строки разницы из третьего файла.
-Е, -X для порождения сценария редактирования, где сценарий вставляет перекрывающиеся строки из обоих файлов, отмечая их строками рвМр и рвНр.
-е для создания сценария редактирования, Который может быть вводом в команду ed для обновления первого файла разницей, Которая существует между вторым и третьим файлами (то есть, изменений, Которые обычно были бы обозначены ==== и ====3).
-х для порождения сценария редактирования для вставки только тех изменений, которые помечены ===
Формат генерируемого вывода следующий:

р File ID:Numberl означает, что строки добавляются после Numberi в файл File ID. File ID может быть 1, 2 или 3, в зависимости от того файла, на Который вдет ссылка. Затем идут добавляемые строки.

р File ID:Numberl[,Number2]c означает, что будут модифицированы строки в диапазоне от Numberi до Number!. Далее следуют модифицируемые строки.

Примеры

Давайте предположим, что есть три файла: filel, file2 и file3. Содержимое данных файлов показано ниже с помощью команды more:

more filel

This is the first line in first file

This is the second line

This is the third line

This is the fourth line

This is the fifth line

This is the sixth line

This is the seventh line

This is the eighth line

This is the ninth line

more file2

This is the first line

This is the second line

This is the third line

This is the 3.5th line

This is the fourth line

This is the sixth line in second file

This is the seventh line

This is the eighth line

This is the ninth line

This is the sixth line in third file This is the seventh line This is the eighth line This is the ninth line This is the tenth line This is the eleventh line

Теперь выполните для данных трех файлов команду diff3 без каких-либо флагов, как в команде ниже:

Первая группа строк, начинающаяся с ===l, показывает, что строка 1 из filel отличается от строки 1 filе2 и filе3. Строки, начинающиеся с ===2, показывают, что строка 4 в fi1е2 должна быть вставлена после строки 3 file1 и file3 для того, чтобы сделать их идентичными. Строки, начинающиеся с =====, показывают, что строки 5 и 6 filel, строка 6 file2 и строка 5 filc3 разные. Строки, начинающиеся с =====3, показывают, что строки 9, 10 file3 следует вставить после строки 9 filel и file2, чтобы сделать их идентичными.

Если вы заинтересованы только в поиске отличий в file3, то используйте флаг -3 как в следующей команде:

diff3 -3 filel file2 file3 9а

This is the tenth line This is the eleventh line

w

q

Пример говорит о том, что есть две строки, 9 и 10, Которые присутствуют в file3, но не в filel или file2. Если вы хотите применить изменения между file2 и file3 к filel, то используйте флаг -е для создания сценария редактирования, как в следующей команде:

diff3 -е filel file2 file3 9а

This is the tenth line

This is the eleventh line

5,6c

This is the sixth line in third file

w

q

Данный вывод значит, что в file3 есть две лишние строки после строки 9 и строка 6 file2 заменена строкой 5 в file3. Однако если вас интересуют изменения, используйте флаг -х, как в следующей команде:

diff3 ~х filel file3 file2

5,6с

This is the sixth line in second file

dircmp

Если необходимо сравнить содержимое двух каталогов, используйте команду dircmp. Данная команда сравнивает имена файлов в каждом каталоге и генерирует список имен файлов, Которые существуют только в одном из каталогов и список имен файлов, Которые существуют в обоих каталогах; сообщается, идентичны они или нет.

С командой dircmp используются следующие флаги:

-d для генерации списка файлов, Которые существуют в одном из каталогов, списка файлов, Которые существуют в обоих каталогах, пометки, являются ли файлы одинаковыми или разными. Далее следует вывод команды diff о парах файлов, отличающихся друг от друга.
-s для генерации списка файлов, Которые существуют в обеих каталогах, за Которым следует список разных файлов.
Примеры

Предположим, что в текущем каталоге есть два каталога, testdirl и testdir2. Список файлов в каталогах таков:

ls testdirl

filel file2 file3 file4 file5 file6

ls testdir2

file2 file3 file5 file6 file? fileB

Если вы хотите провести самое простое сравнение двух каталогов, то выполните следующую команду:

dircmp testdirl testdir2

Fri Nov 29 22:51:34 1996 testdirl only and testdir2 only Page 1

./filel ./file?

./file4 ,/file8

Fri Nov 29 22:51:34 1996 Comparison of testdirl and testdir2 Page 1

directory

different ,/file2

same ,/file3

same ./file5

same ./file6

Первая часть приведенного выше отчета показывает файлы, имеющиеся только в testdirl, слева, а только в testdir2 - справа. Вторая часть показывает сравнение каталогов и того, какие файлы являются идентичными, а какие - разными. Если вам требуются более подробные сведения о разнице файлов в каталогах, то используйте флаг -d, как в следующей команде:

testdir -d testdirl testdir2 Fri Nov 29 22:56:01 1996 testdirl only and testdir2 only Page 1

./filel ./file? ./file4 ./fileB

Fri Nov 29 22:56:01 1996 Comparison of testdirl and testdir2 Page 1

directory

different ,/file2 same ,/file3 same ./file5 same ./file6

Fri Nov 29 22:56:01 1996 diff of ./file2 in testdirl and testdir2 Page 1

1cl < This file is in testdirl

> This file is in testdir2

Если нужен только список файлов, являющихся уникальными для каждого каталога, и список отличающихся файлов, то используйте флаг "s, как в следующей команде:

dircmp -s testdirl testdir2 Fri Nov 29 23:39:59 1996 testdirl only and testdir2 only Page 1

./filel ./file? ./file4 ./file8

Fri Nov 29 23:39:59 1996 Comparison of testdirl and testdir2 Page 1 different ./file2

Если требуется подавить вывод списка идентичных файлов, но оставить список отличающихся файлов : указанием разницы между ними, выполните команду dircmp с флагами -s и -d.

sdiff

Команда sdiff сравнивает два файла и отображает вывод в стандартный вывод в формате side-by-side. Ниже рассказывается о деталях формата отображения:

Если две строки идентичны, то отображается каждая строка из обоих файлов с серией пробелов между ними
Если строка существует только в первом файле, то в конце строки отображается знак < (меньше)
Если строка существует только во втором файле, то в начале строки отображается знак > (больше)
Если строки в обоих файлах разные, то между строками отображается знак | (вертикальная черта)
Далее перечислены флаги, Которые работают с командой sdiff:

-s если вы не хотите отображать идентичные строки
-w number для установки ширины отображения в number
-l для отображения только строк первого файла, если строки из второго файла идентичны
-о file для создания слитого файла из первого и второго файлов, в зависимости от количества подкоманд, Которые вы можете указать
Примеры

Предположим, что существуют два файла, filel и П1е2, содержимое Которых распечатано ниже с помощью команды more:

more filel

This is the first line in first file

This is the second line

This is the third line

This is the fourth line

This is the fifth line

This is the sixth line

This is the seventh line

This is the eighth line

This is the ninth line

more file2

This is the first line

This is the second line

This is the third line

This is the 3,5th line

This is the fourth line

This is the sixth line in second file

This is the seventh line

This is the eighth line

This is the ninth line

Если выполнить команду sdiff над двумя файлами, filel и file2, то получится следующий результат:

sdiff filel file2

This is the first line in first file | This is the first line

This is the second line This is the second line

This is the third line This is the third line

>This is the 3.5th line

This is the fourth line This is the fourth line

This is the fifth line | This is the sixth line in second file

This is the sixth line <

This is the seventh line This is the seventh line

This is the eighth line This is the eighth line

This is the ninth line This is the ninth line

Если вы не хотите отображать идентичные строки, используйте флаг -s, как в следующей команде:

sdiff -s filel file2

This is the first line in first file | This is the first line

>This is the 3.5th line

This is the fifth line | This is the sixth line in second file

This is the sixth line

<

Флаг -l применяется для отображения строки из первого файла, если строки идентичны, как в следующей команде:

sdiff -1 filel file2

This is the first line in first file | This is the first line

This is the second line

This is the third line

>This is the 3.5th line

This is the fourth line

This is the fifth line | This is the sixth line in second file

This is the sixth line <

This is the seventh line

This is the eighth line

This is the ninth line

Обновлено: 12.03.2015