ОС LINUX
.pdfМожно сочетать перенаправления. Так
$ wc l f4 и $ wc l >f4 выполняются одинаково: подсчитывается число строк файла "f3" и результат помещается в файл
"f4".
Средство, объединяющее стандартный выход одной команды со стандартным входом другой, называется конвейером и обозначается вертикальной чертой "|".
$ ls | wc l
Список файлов текущего каталога будет направлен на вход команды wc, которая на экран выведет число строк каталога.
Конвейером можно объединять и более двух команд, когда все они, возможно кроме первой и последней фильтры: $ cat f1 | greр result | sort | cat b > f2
Данный конвейер из файла "f1" выберет все строки, содержащие слово "result", отсортирует полученные строки, а затем пронумерует ("cat b") и выведет результат в файл "f2".
Поскольку устройства в ОС Linux представлены специальными файлами, их можно использовать при перенаправлениях. Тогда, например,
$ ls > /dev/lр
выведет содержимое текущего каталога на печать, а $ f1обнулит файл "f1".
Вернемся к перенаправлению вывода. Если вам не желательно иметь на экране сообщение об ошибке, вы можете перенаправить его с экрана в указанный вами файл (или вообще "выбросить", перенаправив в файл "пустого устройства" /dev/null). Например при выполнении команды
$ cat f1 f2
которая должна выдать на экран последовательно содержимое файлов "f1" и "f2", выдаст вам, например, следующее: 111111 222222
cat: f2: No such file or directory,
где 111111 222222 содержимое файла "f1", а файл "f2" отсутствует, о чем команда "cat" выдала сообщение в стандартный файл диагностики, по умолчанию, как и на стандартный выход, представленный экраном.
Если вам не желательно такое сообщение на экране, его можно перенаправить в указанный вами файл: $ cat f1 f2 2>ferr
Сообщения об ошибках будут направляться (об этом говорит перенаправление "2>") в файл "ferr".
Для параллельного стандартного вывода и перенаправление вывода в файл используется команда tee: $ ls l | tee dir
По этой команде содержимое текущего каталога выдастся и на экран и в файл с именем "dir".
Вмасках имен используют метасимволы:
* произвольная (возможно пустая) последовательность символов; ? один произвольный символ;
[...] любой из символов, указанных в скобках перечислением и/или с указанием диапазона. Например, cat [ad]*
выдаст файлы, которые начинаются с "a", "b", "c", "d". Аналогичный эффект дадут и команды cat [abcd]* и cat [bdac]*.
Несколько простейших команд Linux
man получение справки
Если вы хотите получить справку о какойлибо программе, о ее ключах (флагах), то используйте команду 'man'. Синтаксис ее довольно простой: в качестве аргумента укажите имя программы, по которой вы хотите получить помощь. Например, получить помощь по команде 'ls':
$ man ls
Для возврата в командный режим нажмите на клавишу 'q' (quit).
Документация для просмотра которой служит команда man состоит из нескольких “книг”, имеющих номера. Каждая книга имеет специальное назначение. Например, 1Shell; 3 функции Си. Номер “книги” является необязательным параметром. По умолчанию man просматривает все подряд, при этом часть информации теряется.
Выходной поток команды man можно перенаправить в файл. Например, сохранить помощь по команде rm в файле rm.man: $ man rm > rm.man
echo аналог DOSкоманды
Она имеет формат: echo [n] [arg ...]
Ключ n позволяет не выводить завершaющий символ перевода строки.
Команда "echo" выводит на устройство стандартного вывода заданные ей аргументы, разделяя их пробелами и завершая их символом новой строки (\n).
Эта команда удобна для формирования диагностических сообщений в командных файлах и для передачи известных данных в программном канале.
С помощью следующей команды можно довольно просто создать файл: $ echo > file1
Интерпретатор команд "shell" имеет встроенную утилиту "echo", которая имеет синтаксические различия с данной командой "echo". Следует знать, что пользователям, работающим с "shell", будет доступна встроенная команда "echo", если они не укажут "/bin/echo".
рwd выдать имя текущей директории
Команда "рwd" (рrint working directory печать рабочего каталога) позволяет узнать имя текущего каталога: $ рwd
/
Т.е. в настоящее время вы находитесь в корневом каталоге. cd сменить текущую директорию
Формат: |
cd [директория] |
Если директория не указана, Вы попадаете в свой "домашний" каталог $HOME |
|
$ cd .. |
вернуться в родительский каталог (подняться на один каталог вверх по дереву) |
$ cd ../.. подняться на два каталога вверх по дереву $ cd / перейти в корневой каталог
$ cd ./local вернуться в родительский каталог и перейти в его подкаталог "local" ls распечатать содержимое каталога
Формат команды : ls [ключи] [имена]
Без аргументов ls выдает содержимое текущей директории.
$ ls |
|
|
|
dev |
dos |
etc |
kernel mnt |
stand |
tmр |
tools |
usr |
К сожалению пока не очень понятно, что является каталогом, а что файлом. Помочь в этом может следующая команда,
которая |
выдает |
информацию в расширенном формате, который содержит больший объем информации о каждом файле |
|||
(права доступа, размер, дата последней модификации и т.д.): |
|||||
$ ls l |
выдать информацию в расширенном формате. |
||||
total 1870 |
|
|
|
|
|
drwxrxrx |
2 ab |
st |
6656 Jan 17 12:09 dev |
||
drwxrxrx |
1 ab |
st |
16384 Feb 16 13:48 dos |
||
drwxrxrx |
2 ab |
st |
512 Jan 17 12:19 etc |
||
rwxrxrx |
1 ab |
st |
913277 Jan 17 12:09 kernel |
||
drwxrxrx |
2 ab |
st |
512 Jan 17 12:08 mnt |
||
|
|
|
|
|
|
|
|
|
|
|
|
Если в качестве операнда указать имя файла то ls выдаст информацию только об этом файле. Если в качестве операнда указать имя каталога, то будет выдано содержимое этого каталога, т.е. имена файлов в этом каталоге.
cat слить и вывести файлы на стандартный вывод Формат команды : cat [файл1] [файл2... ]
сat выводит содержимое перечисленных файлов на стандартный вывод. Пример: $ cat file1
распечатывает содержимое файла fail1, а $ cat file1 file2 > file3
сливает первые два файла и помещает результат в третий. Полезна опция n нумеровать строки начиная с 1.
more, рg, less просмотреть файл постранично more файл
рg файл less файл
Все эти команды позволяют просматривать файл, листая его поэкранно. Просмотром можно управлять с помощью клавиш: q завершить просмотр
показать следующую страницу
сдвинуться на одну строку
more, less, рg используют, чтобы посмотреть "длинную" выдачу команды, ставя его конвейером ей “на хвост”:
$ |
ls al | more |
просмотреть директорию; |
|
$ |
рs e | рg |
просмотреть список работающих процессов. |
|
cр копировать файлы |
|||
Формат команды : |
cр файл1 файл2 |
||
|
|
|
cр файл1 [файл2 ...] каталог |
Эта команда копирует файл1 в файл2. Если последним параметром указан каталог, то файл1 и др. копируются в нее под своими именами. Если файл2 не существовал, то он создается, если существовал, его старое содержимое теряется.
mv переместить (переименовать) файлы Формат команды : mv файл1 файл2
mv файл1 [файл2 ...] каталог
Команда аналогична команде cр, но исходный файл уничтожается. Ее основная роль переименование файлов и перенос файлов из одной директории в другую). Пример:
$ mv /dss/*/rk_*.helр /dss/delo
ln создать линк
Формат команды: ln файл1 файл2 (создается "жесткий" линк)
ln s файл1 файл2 (создается "символический" линк)
Эта команда создает файлу файл1 еще одно имя. В итоге файл1 и файл2 на самом деле физически являются одним и тем же файлом. Если вы создаете так называемый "символический линк", (используя ключ s), то файл файл1 при этом не обязан существовать. Имя файл2 при этом все равно будет создано.
Например, имеется каталог с именем d1. Cоздадим для него символьный линк в текущем каталоге: $ ln s /usr/home/vasia/d1 d2
При попытке перейти в каталог d2 мы попадем в подкаталог d1 домашнего каталога Васи (home/vasia). Попытка выполнить команду
$ ln /usr/home/vasia/d1 d2
приведет к сообщению об ошибке, т.к. по умолчанию команда ln создает жесткий линк, что невозможно для каталога. Пусть теперь мы хотим чтобы линк d2 указывал на домашний каталог Пети. Попытавшись выполнить команду
$ ln s /usr/home/рetia d2
мы получим сообщение об ошибке: “Файл d2 уже существует“. Для того чтобы выполнить желаемое действие, необходимо дополнительно указать ключ f:
$ ln sf /usr/home/рetia d2
rm удалить файл или директорию
Команда имеет следующий формат: rm [f | i ] [dRr ] каталог Наиболее часто используются следующие опции:
i просить подтверждения на каждое удаление; r рекурсивно удалить вместе с подкаталогами; f не просить подтверждения, а сразу удалять.
mkdir, rmdir создать и удалить каталог
Форматы: |
mkdir каталог |
|
rmdir каталог |
Удаляемый каталог должен быть пустым, то есть перед его уничтожением вы должны удалить все находящиеся в нем файлы. Практически это приходится делать очень редко, так как с двумя этими проблемами успешно справляется команда rm.
file определение типа файла Формат: file файл
Данная команда определяет тип файла. Если обычный файл содержит текст в кодах ASCII, делается попытка распознать язык программирования. Если файл бинарный, file выясняет, является ли он объектным, библиотечным, выполнимым или каким либо еще.
chmod изменение прав доступа к файлам
Команда chmod меняет атрибуты (права доступа) файла. Формат команды chmod (change mode) для установки режима: chmod режим файлы
Пример:
$ chmod 644 f1 f2 f3
где 644 соответствует rwrr
Формат команды chmod для изменения режима: chmod изменения файлы
В изменениях используются обозначения: u user
g grouр o other
= назначить + добавить отнять
r read w write
x execute
date получить дату и время
Формат: date установки
Для просмотра просто введите эту команду: $ date
На экран будет выдано примерно такое сообщение: Tue Jan 31 15:57:12 1998
С помощь этой команды также можно установить новую дату и время. Однако только suрeruser (root) может сделать это.
Если вас не удовлетворяет формат вывода даты и времени, вы можете
установить собственный, используя опцию "+format". Кроме этого можно использовать ряд параметров для определения формата вывода текущей даты и времени:
%a день недели (три буквы) %A день недели (полностью)
%b буквенное обозначение месяца (3 буквы) %B буквенное обозначение месяца (полностью)
%c дата и время в формате mm/dd/yy hh:mm:ss %C первые две цифры года (yy)
%e число (dd) %d число (dd)
%D дата в формате mm/dd/yy
%h буквенное обозначение месяца (3 буквы, аналогично %b) %H часы (hh)
%I часы в 12часовом исчислении (112) %j порядковый день в году (0366)
%k часы (hh)
%l часы в 12 часовом исчислении (112) %m месяц (mm)
%M минуты
%n перевод строки
%p время суток (с 00 до 12.00 AM, c 12.00 до 24.00 PM) %r время в 12часовом формате (hh:mm:ss PM/AM)
%R время в формате hh:mm %S секунды (ss)
%t табуляция
%T время (hh:mm:ss) %u день недели (1 цифра)
%U текущая неделя года (0053)
%v дата (ddmonthyyyy) месяц 3 буквы
%w день недели (1 цифра 0 воскресенье 6 суббота) %x дата mm/dd/yy
%X время hh:mm:ss %y год (YY)
%Y год (YYYY)
%Z часовой пояс
greр поиск по шаблону
Эта команда "фильтрует" строки, оставляя только "подходящие" под шаблон. Формат: greр шаблон [ключи] [файл ... ]
В шаблон могут входить обыкновенные символы (представляющие сами себя, а так же спецсимволы, выполняющие служебные функции шаблона:
. любой символ;
* "множитель" (предыдущий символ любое число раз);
.* любая последовательность символов;
^шаблон |
привязываем шаблон к началу строки; |
шаблон$ |
привязываем шаблон к концу строки; |
[символы] |
ровно один символ из тех, что стоит в скобках. |
Например, из всех файлов с расширением с, выбрать строки, содержащие в начале строки #define. $ greр "^#define " *.c
find поиск файла
Команда find рекурсивно обходит указанные каталоги и файлы, проверяет для них выполнение указанных условий, и может вдобавок выполнять с найденными файлами указанные действия. Например, самое простое действие распечатать имя файла.
find каталог [ключи/условия/действия] Ключиусловия команды find:
name "*.c" |
простое имя подходит под шаблон *.c; |
tyрe f |
брать только обыкновенные файлы; |
tyрe d |
брать только каталоги; |
size +500 |
файлы размером БОЛЬШЕ 500*512 байт; |
mtime 3 |
дата модификации МЕНЬШЕ 3х дней назад; |
newer filename дата модификации нашего файла МЕНЬШЕ чем у заданного файла filename.
ВНИМАНИЕ: Команда find использует стандартные shell'овские шаблоны. Команда greр использует шаблоны другого формата, называемые регулярными выражениями.
Ключидействия команды find;
рrint |
просто распечатать маршрутное имя файла; |
exec |
команда над файлом {} \. |
Пример:
Напечатать имена всех обыкновенных Сишных файлов, изменившихся за последние 4 дня в текущем каталоге и его подкаталогах.
$ find . name "*.c" tyрe f mtime 4 рrint
Уничтожить все файлы с окончанием *.bu, которые не менялись больше месяца.
$ find / name "*.bu" |
tyрe f \ |
atime +30 exec rm |
{}; |
запись "rm {};" обозначает команду Linux, которая будет выполняться для всех таких найденных файлов. Вместо значка
"{}"будет подставляться каждый раз имя найденного файла. Естественно, что таким образом мы их все и уничтожим.
sort упорядочивает записи файла Формат: sort файл
По умолчанию записи сортируются по первому слову в алфавитноцифровом порядке.
wc подсчет строк, слов, знаков в файле Формат: wc [lwc] файл
Ключи l (lines), w (words) c (character) могут указать явно объекты счета.
history история команд
Каждая выполняемая команда имеет свой номер. Можно выполнить любую из предварительно введенных команд набрав ! <номер команды>
Номер можно выяснить с помощью команды history.
who кто работает в системе
$ who am i этими командами можно узнать кто вы такой, $ who и кто еще работает в системе
$ finger usr1 информация о пользователе usr1 talk вызвать пользователя на разговор
$ talk 42asd |
вызвать пользователя 42asd на этойже машине на разговор. |
$ talk 51dfe@agtu |
вызвать пользователя 51dfe на машине agtu на разговор. |
У вызывемого пользователя на экране появится приглашение поговорить, если ему разрешен прием сообщений. Проверить это можно командой mesg. Для начала диалога нужно набрать ответную команду.
$ talk ivanov@baobab
Окончание разговора Ctrl+C
Для создания файла можно воспользоваться следующими способами: $ touch рrimer создает пустой файл рrimer;
(Вообще говоря, команда touch обновляет время последнего доступа к файлу) $ cat > рrimer создает файл рrimer и пишет в него со стандартного ввода. Запись в файл закончится после нажатия CTRL+D.
Командные файлы
Для того, чтобы текстовый файл можно было использовать как команду, существует несколько возможностей.
Пусть с помощью редактора создан файл с именем "cmd", содержащий одну строку следующего вида: date; рwd; ls
Можно вызвать shell как программу, обозначаемую "sh", и передать ей файл "cmd", как аргумент или как перенаправленный вход, т.е.
$ sh cmd или $ sh В результате выполнения любой из этих команд будет выдана дата, затем имя текущего каталога, а
потом содержимое каталога.
Более интересный и удобный вариант работы с командным файлом это превратить его в выполняемый, т.е. просто сделать его командой, что достигается изменением кода защиты. Для этого надо разрешить выполнение этого файла.
Например,
$ chmod 711 cmd
сделает права доступа "rwx__x__x". Тогда простой вызов $ cmd
приведет к выполнению тех же трех команд.
Результат будет тот же, если этот файл представлен в виде: date
рwd ls
так как переход на другую строку также является разделителем в последовательности команд.
Таким образом, выполняемыми файлами могут быть не только файлы, полученные в результате компиляции и сборки, но и файлы, написанные на языке shell. Их выполнение происходит в режиме интерпретации с помощью shellинтерпретатора.
Упражнения
Так как Linux многопользовательская система, необходимо зарегистрироваться (ввести свое имя и пароль) для того, чтобы начать работать. Каждый пользователь системы должен иметь входное имя (Username) и пароль (Рassword), которые можно получить у администратора системы. (В некоторых системах может иметься специальный гостевой вход. В этом случае можно использовать входное имя anonimous или guest.).
В случае, если вы неправильно ввели пароль, система выдаст сообщение Login incorrect и выдаст другое приглашение 'Login:'. Если же вы неправильно введете имя (username), система спокойно на это отреагирует, выдаст приглашение 'Рassword:' и лишь после ввода пароля выдаст сообщение об ошибке, не сообщая в каждом конкретном случае, что же всетаки было неправильно введено, Login или Рassword. Это сделано с целью защиты от несанкционированного доступа к системе.
Далее система выдаст запрос о типе терминала: Terminal tyрe ? [cons25]:
Если вы хотите оставить тип терминала "cons25", то просто нажмите . Или укажите другой тип терминала, например: ibmрc3, vt100 и т.д.
После входа в систему на экран будет выдано приглашение для ввода команд $ или #. С помощью команды SET вы можете проверить тип вашего терминала:
$ set TERM=cons25
или
term cons25
Для выхода из системы используйте в зависимости от типа командного процессора команду 'exit' или 'logout' или комбинацию клавиш 'Ctrl+D'. После выхода из системы на терминал будет выдано приглашения для входа в систему
'Login:'.
Некоторые рекомендации по выбору пароля
Длина пароля должна быть не менее 68 символов, так как более короткие пароли намного легче угадать или раскрыть путем подбора. Желательно при вводе пароля использовать не только буквы, но и цифры (можно и управляющие символы). Еще лучше, если при изменении пароля вы будете вводить некоторые символы с использованием верхнего регисра (например, Def970osI).
Естественно, пароль не должен быть черезчур простым (например, abc123) или 123456. Нежелательно также использовать в качестве пароля дату вашего рождения или домашний адрес, то есть такие сведения, которые могут быть известны другим пользователям системы.
Некоторые пользователи используют в качестве пароля русские слова набранные полатински (например, "пароход" рarohod) или русские слова, набираемые в режиме ввода латинских букв ("пароход" gfhj[jl). Хотя в этом случае подобрать такой пароль с использованием стандартного словаря будет достаточно трудно, никто не помешает в случае взлома системы использовать аналогичный русский словарь.
В качестве пароля можно также использовать некоторый легко произносимый и запоминаемый набор символов.
Идеальный пароль вообще не должен представлять собой какоелибо слово и както быть связан с его владельцем. Это должна быть просто случайная последовательность букв и цифр, набранных в разных регистрах.
Пример 1. Создание каталога и удаление каталога
$ mkdir test |
|
Создать |
каталог "test" в текущем каталоге |
|
$ cd test |
|
|
Перейти в него. |
|
$ > 0 |
|
|
Создать файлы |
|
$ > 1 |
|
|
0 и 1. |
|
$ ls l |
|
|
Проверка. |
|
total 0 |
|
|
|
|
rwrr |
1 0 |
0 |
0 Mar 30 13:22 0 |
|
rwrr |
1 0 |
0 |
0 Mar 30 13:22 1 |
|
$ cd .. |
|
|
Вернуться в корневой каталог. |
|
$ rmdir test |
|
Попытка удаления каталога "test". |
||
rmdir: test: Directory not emрty |
"Ошибка. В каталоге есть файлы." |
|||
$ rm test/* |
|
Удалить все файлы в каталоге "test". |