00. Клавиши переключения между консолями и графическим режимом
1 2 3 4 5 6 |
<Ctrl>+<Alt>+<Fn> (n от 1 до 6) Переключение из графического режима в консоль с номером n <Alt>+<Fn> (n от 1 до 6) Переключение между консолями <Alt>+<F7> Переключение из консоли в графический режим Решетка (#) означает, что команда должна быть выполнена от имени пользователя root. Если перед командой ничего не указано или же указан символ доллара ($), команду можно выполнить от имени обычного пользователя. |
01. Команды poweroff, halt, reboot, shutdown
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
Для выхода из консоли (чтобы ею никто не воспользовался во время вашего отсутствия) предусмотрена команда logout, она же команда exit. Для перезагрузки компьютера существует команда reboot. Кроме нее вы можете использовать еще две команды — halt и poweroff: - команда halt завершает работу системы, но не выключает питание. Вы увидите сообщение System is halted, свидетельствующее о возможности выключения питания. Эта команда предназначена для старых компьютеров, не поддерживающих расширенное управление питанием - команда poweroff завершает работу системы и выключает ее питание. Самая "продвинутая" команда — shutdown — позволяет завершить работу и перезагрузить систему в назначенное время. Предположим, что вы хотите уйти пораньше, но компьютер нужно выключить ровно в 19:30 (вдруг некоторые пользователи задержались на работе, а вы выключите сервер, — некрасиво получится). Вот тут-то вам и поможет команда shutdown: # shutdown -h 19:30 [сообщение] Сообщение [сообщение] можно и не указывать, все равно Windows-пользователи его не увидят. Если нужно завершить работу системы прямо сейчас, вместо времени укажите now: # shutdown -h now Для перезагрузки системы есть опция –r: # shutdown -r now |
01. Оболочка csh
1 2 3 4 5 6 7 8 9 10 |
Оболочка csh (C Shell) по умолчанию используется в FreeBSD. Разработка csh началась еще в первых версиях BSD (Linux будет создан лет через 15). Тогда в институте Беркли начали создавать новую оболочку (csh), потому что не захотели мириться с ограничениями sh. Внутренний синтаксис csh очень напоминает язык программирования C, поэтому он должен был понравиться программистам (а в то время все пользователи компьютеров являлись программистами). Хотя сами программисты отмечали, что синтаксис не очень удобен, даже несмотря на то, что он похож на C. По сравнению с sh, у csh есть множество преимуществ: она умеет управлять заданиями, хранит историю ранее введенных команд, а также у csh есть сценарии, которые выполняются при входе пользователя (запуске оболочки) и при выходе пользователя (когда пользователь вводит команду exit). В то время у sh не было таких сценариев, которые оказались очень удобными. С точки зрения обычного использования оболочки (а не программирования) csh тоже была на высоте. В последних версиях FreeBSD и Linux вместо csh используется ее усовершенствованная версия — tcsh, а файл /bin/csh — это просто ссылка на /bin/tcsh. |
02. Оболочка ksh
1 2 3 4 5 6 7 8 9 10 11 12 |
Не хочется делать экскурс в историю UNIX, но пару слов сказать все же придется. Изначально система UNIX появилась в лабораториях компании AT&T, позже возникли версии UNIX института Беркли (операционная система называлась BSD). Так уж сложилось исторически, что AT&T и институт Беркли постоянно конкурировали между собой. Как только в Беркли разработали оболочку csh, в AT&T принялись создавать собственную оболочку, которая получила название ksh (Korn Shell) — по имени разработчика Дэвида Корна (David Korn). Оболочка ksh по функциям похожа на csh: есть поддержка управления заданиями, история команд, позволяет назначать командам псевдонимы, а также создавать конфигурационные файлы для под оболочек. Несмотря на то что оболочка была разработана в 1986 году, она до сих пор используется в некоторых версиях UNIX по умолчанию, а также устанавливается по умолчанию во всех дистрибутивах Linux (но не используется по умолчанию). Правда, изначально ksh — это коммерческий продукт, поэтому в FreeBSD и Linux используется не ksh, а ее бесплатная версия — pdksh, но для краткости исполнимый файл называется ksh. Начинающим пользователям ksh не понравится (лучше использовать bash) — она слишком неудобна в использовании, зато у нее довольно развитый синтаксис внутреннего языка, что придется по вкусу программистам. |
03. Оболочка bash
1 2 3 4 5 6 7 8 9 |
Командный интерпретатор bash (Bourne Again Shell) был разработан фондом свободного программного обеспечения (Free Software Foundation, FSF). За основу была взята оболочка sh. Оболочка стала очень популярной и сейчас используется по умолчанию во всех дистрибутивах Linux. Оболочка bash может использоваться также и для запуска сценариев sh, поэтому sh во многих системах уже не устанавливается, а файл /bin/sh — это ссылка на /bin/bash. С точки зрения пользователей bash намного удобнее, чем ksh. Вы можете легко редактировать командную строку, просматривать историю команд, создавать псевдонимы команд, создавать переменные окружения и использовать их в собственных сценариях. Как и в csh, в bash есть сценарии, которые вызываются при запуске оболочки и при выходе из нее. Синтаксис bash довольно прост, поэтому бóльшая часть сценариев, разрабатываемых в Linux, пишется именно на bash. |
04. Оболочка zsh
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
Оболочки bash и tcsh (современная версия csh) будут рассмотрены в части III, оболочка ksh используется редко. Поэтому сейчас мы поближе познакомимся с оболочкой zsh, которая становится все более популярной. До знакомства с zsh я считал самой удобной оболочку bash. Однако это не так. Что же удобного в zsh? Во-первых, навигация. В bash для перехода в каталог /dir/subdir1/subdir2 нужно ввести команду: cd /dir/subdir1/subdir2 Можно использовать авто дополнение bash — вводить начальные символы каталога и нажимать клавишу <Tab>. Это будет выглядеть примерно так: cd /dir/sub [Tab]/subdi [Tab] В zsh можно ввести: /d/s/s Затем нажать клавишу <Tab> — вы перейдете в нужный каталог. Например, для перехода в /etc/sysconfig/network, нужно ввести /e/s/n и нажать клавишу <Tab>. Кстати, команда cd уже не нужна. Еще один трюк. Предположим, у нас есть каталог files, а в нем — каталоги f1 и f2. Внутри каждого каталога f* есть каталоги source и last. То есть структура каталогов будет примерно такой: /files/f1/sources/last /files/f2/sources/last Пусть мы находимся в каталоге /files/f1/sources/last, для перехода в каталог /files/f2/sources/last введите команду: cd 1 2 Но одной лишь навигацией возможности zsh не ограничиваются. Можно, например, использовать вот такое перенаправление: < /var/log/messages Оболочка запустит программу, указанную в переменной $PAGER. В большинстве случаев это аналогично команде: cat /var/log/messages | less Все возможности zsh в этой главе мы рассматривать не будем — их намного больше, чем вам кажется. Если вы заинтересовались, то прочитайте следующие страницы: http://opennet.ru/base/dev/zsh_intro.txt.html http://habrahabr.ru/blogs/linux/82537/ |
05. Оболочка tcsh
1 2 3 4 5 6 7 |
Оболочка tcsh является модифицированной версией csh. Буква t в названии означает TENEX: изначально оболочка была разработана для операционной системы TENEX (использовалась в далеком прошлом на компьютерах DEC PDP-10). В tcsh усовершенствована функция редактирования командной строки, есть авто завершение команд (как в bash). Кроме того, tcsh может распознавать потенциально опасные команды. Если вы от имени root попытаетесь удалить все файлы, оболочка потребует подтверждения. Оболочка tcsh очень удобна в использовании, но ее синтаксис сценариев сложнее, чем у bash. Однако в части III мы все же рассмотрим разработку сценариев на tcsh, чтобы вы смогли оценить сложность создания разработки сценариев на bash и на tcsh |
06. Оболочка ash
1 2 3 4 5 6 |
Almquist shell (ash) — самая простая командная оболочка. Это самая маленькая оболочка, доступная для UNIX (у нее самые низкие требования к дисковому пространству). У ash всего 24 встроенных команды и 10 опций командной строки. Обычно ash используется при загрузке Linux в однопользовательском режиме (или в режиме восстановления). Оболочка ash совместима с sh, с ее помощью можно проверить сценарии на совместимость с традиционным синтаксисом sh. А в операционной системе NetBSD оболочка ash используется вместо /bin/sh |
07. Выбор оболочки
1 2 3 4 5 6 7 8 9 10 |
Какую оболочку выбрать? Первым делом нужно оценить простоту работы в ней. Ведь вы будете использовать эту оболочку каждый день, поэтому данный фактор должен быть на первом месте. Затем нужно оценить простоту синтаксиса оболочки. Конечно, это только в том случае, если вы планируете разрабатывать собственные сценарии. Также не следует забывать, что вы можете использовать одну оболочку, а разрабатывать сценарии — на языке другой оболочки. Например, в повседневной работе вы можете использовать zsh, а разрабатывать сценарии на языке bash. Довольно удобны в использовании оболочки bash, tcsh и zsh. Скорее всего, вы выберете одну из них. А вот для программирования будете использовать или bash, или tcsh (синтаксис zsh не очень понятен) |
08. Базовые команды Linux
1 2 3 4 5 6 |
Все команды Linux можно условно разделить на несколько групп: - команды общего назначения — эти команды могут понадобиться в любой момент как при работе в консоли, так и при написании собственных сценариев - команды для работы с файлами и каталогами - команды обработки текста - команды для работы с сетью и Интернетом — выйти в Интернет в Linux можно даже без запуска графического интерфейса - команды системного администратора — любой системный администратор просто обязан знать командыs |
09. Команда arch: сведения об архитектуре компьютера
1 2 3 4 |
Данная команда поможет узнать тип аппаратной платформы, например: i386, i586, i686 и др. Пример использования: $ arch i686 |
10. Команда banner: текстовый баннер
1 2 3 4 5 6 7 |
Команда banner выводит строку (максимальная длина — 10 символов), рисуя буквы символом звездочки (*). Данную команду можно использовать в своих сценариях для вывода названия сценария. Пример использования: $ banner HellowWorld 4 В Ubuntu по умолчанию команда banner недоступна, для ее добавления нужно установить пакет sysvbanner. |
11. Команда chsh: изменение командного интерпретатора
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
Команда chsh позволяет изменить командный интерпретатор, вывести список установленных интерпретаторов, а также установить командный интерпретатор по умолчанию. Синтаксис вызова программы: $ chsh [параметры] интерпретатор В качестве параметров вы можете передать: -L — выводит список установленных командных интерпретаторов (список хранится в файле /etc/shells) -s — устанавливает командный интерпретатор по умолчанию. Примеры использования команды: $ chsh zsh $ chsh -s zsh Первая команда изменяет текущий интерпретатор команд на оболочку zsh. Как только пользователь выйдет из системы и снова зайдет, будет запущен его интерпретатор по умолчанию (который установлен в файле /etc/passwd). Вторая команда устанавливает командный интерпретатор по умолчанию для текущего пользователя. |
12. Команды cksum и md5sum: вычисление контрольной суммы файла
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
Команда cksum вычисляет контрольную сумму (CRC, cyclic redundancy code) указанных файлов. Формат вызова: $ cksum файлы Пример: $ cksum file1.txt file2.txt Для проверки подлинности некоторых файлов, передаваемых через Интернет, используется алгоритм MD5 (точнее, контрольный код, вычисленный с применением этого алгоритма). Разработчик программы выкладывает в Интернете пакет с этой программой и на своем сайте публикует контрольный код. Вы скачиваете пакет и вычисляете его контрольный код. Если коды отличаются, то файл при передаче был поврежден (или это другая версия пакета, которая, возможно, была подложена злоумышленником с целью ввода вражеского кода в вашу систему). Использовать программу нужно так: $ md5sum file.txt |
13. Команда clear: очистка экрана
1 2 3 4 |
Команда clear очищает экран при работе в консоли (терминале). Пример использования: $ clear |
14. Команда date: вывод даты и времени
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 |
Команда date относится как к командам общего назначения, так и к командам системного администратора. Обычным пользователям разрешено только просматривать дату и время в заданном формате, а пользователь с правами root может еще и устанавливать дату и время. Команда date (без параметров) просто выводит текущую дату и время. Но вы можете уточнить формат вывода даты и времени так: $ date +формат Строка формат может состоять из модификаторов, указанных в таблице. Модификатор Описание %% Знак % %a Сокращенное название дня недели (например, Вск) %A Полное название дня недели (например, Вторник) %b Сокращенное название месяца (например, Мар) %B Местное полное название месяца (например, Март) %c Дата и время (в формате, заданном в настройках системы) %C Век %d День месяца (с предшествующим нулем, например, 07) %D Дата (в формате %m/%d/%y) %F Полная дата (в формате %Y-%m-%d) %g Последние две цифры года, соответствующего номеру недели в году согласно ISO 8601 %G Год, соответствующий номеру недели в году согласно ISO 8601 %H Час (00..23) %I Час (01..12) %j Номер дня в году %k Час (0..23) %l Час (1..12) %m Месяц (01..12) %M Минута (00..59) %n Вставляет разрыв строки %r 12-часовое время (например, 12:12:07 PM) %R 24-часовой формат часов и минут %s Число секунд, прошедших с 1970-01-01 00:00:00 UTC (это так называемый timestamp) %S Секунда %t Вставляет символ табуляции %T Время (в формате %H:%M:%S) %U Номер недели в году (неделя начинается с воскресенья) %V Номер недели в году (неделя начинается с понедельника) %w День недели (0..6, где 0 — воскресенье) %y Последние две цифры года (00..99) %Y Год (все четыре цифры, например, 2010) %z Часовой пояс в формате +ччмм (например, +0200) %:z Часовой пояс в формате +чч:мм (например, +02:00) %Z Алфавитное сокращение часового пояса (например, EST) |
15. Команда echo: вывод сообщения
1 2 3 4 5 |
Команда echo выводит текстовую строку, указанную в качестве аргумента, например: $ echo "Hello, world!" Hello, world! Обычно данная команда используется в сценариях командного интерпретатора для вывода сообщений на экран. |
16. Команда exit: выход из системы
1 2 |
Для завершения сеанса работы в системе (при условии, что вы работаете в консоли) нужно использовать команду exit. Если не завершить сеанс работы, кто угодно сможет работать в системе под вашим именем (понятно, что во время вашего отсутствия за компьютером). |
17. Команда env: установка переменных окружения
1 2 3 4 5 6 7 8 |
Команда env служит для установки переменных окружения во время выполнения команды, например ее можно использовать для установки переменной EDITOR, которая содержит команду текстового редактора по умолчанию. Формат вызова команды: $ env переменная=значение команда Пример: # env EDITOR=nano edquota -u user |
18. Команды man и info: вывод справки
1 2 3 4 5 6 |
Команда man используется для получения справки о любой команде системы. Например, команда man ls отобразит справку об использовании команды ls, которая выводит содержимое каталога. О том, как правильно использовать саму справочную систему, вам расскажет команда man man. Команда info — это альтернативная справочная система. Если вы не нашли нужной информации с помощью команды man, попробуйте использовать команду info. |
19. Команда printenv: вывод значения переменной окружения
1 2 3 |
Команда env используется для установки значений переменной окружения, а команда printenv позволяет просмотреть текущее значение переменной окружения, например: $ printenv EDITOR |
20. Команда reset: сброс терминала
1 2 3 |
Полезна при некоторых проблемах с терминалом (консолью). Команда reset производит сброс терминала и его начальную инициализацию, что позволяет восстановить параметры по умолчанию без выхода и входа в систему. Нужно отметить, что данную команду вы будете выполнять очень редко. |
21. Команда sleep: пора спать
1 2 3 4 5 6 7 8 |
Команда sleep приостанавливает дальнейшее выполнение команд на указанное время. Ее полезно использовать в собственных сценариях, когда нужно приостановить выполнение сценария, чтобы пользователь успел прочитать сообщение. Когда мы будем разрабатывать собственные сценарии, то станем часто пользоваться этой командой. Формат вызова: $ sleep число По умолчанию число — это количество секунд; если после числа указан суффикс m, h, d, то считается, что число — это количество минут, часов и дней соответственно. |
22. Команда startx: запуск графического интерфейса X.Org
1 2 3 4 5 |
Linux может стартовать на разных уровнях запуска. На пятом уровне запуска графический интерфейс X.Org (бывшее название — X Window) запускается автоматически (если он вообще был установлен). На третьем же уровне запуск графического интерфейса не производится. Если он вам тем не менее нужен, то его можно запустить с помощью команды startx. Никаких параметров не требуется. |
23. Команда tee: перенаправление ввода
1 2 3 4 5 6 7 8 9 10 11 12 13 |
Перенаправляет стандартный ввод в два файла. Если задан только один файл, то в этот файл и на стандартный вывод. По умолчанию файлы, если существуют, перезаписываются. Чтобы файлы не были перезаписаны, указывается параметр -a. Пример: $ tee output.1 output.2 ПРИМЕЧАНИЕ Напомню, что стандартным вводом считается клавиатура, а стандартным выводом консоль. Суть команды в том, что она записывает ввод пользователя в два файла. Если задан только один файл, то ввод пользователя отправляется в этот файл и на консоль. |
24. Команда true: успешное завершение
1 2 |
Данная команда ничего не делает, но всегда возвращает код 0, что соответствует успешному завершению. Часто используется при написании сценариев. |
25. Команда yes: возвращает y
1 2 3 4 |
Команда пригодится при написании сценариев. Она возвращает символ y (или строку, переданную ей в качестве параметра) и символ новой строки — как будто пользователь ввел y и нажал клавишу <Enter>. Пример использования этой команды: # yes | apt-get install mc |
26. Команда uname: название и версия дистрибутива Linux
1 2 3 4 5 6 7 8 9 10 11 |
Команда uname очень полезна, т. к. позволяет получить много интересной информации о вашем дистрибутиве. Рассмотрим наиболее частые варианты вызова uname: uname - название ядра системы uname –s - то же, что и просто uname uname –v - версия ядра uname –r - релиз ядра uname –o - тип операционной системы uname –a - вся возможная информация uname — универсальная команда, и она имеется на всех UNIX-системах (Linux, openBSD, FreeBSD, Solaris и т. д.). |
27. Конвертирование кодировок, звуковых и графических файлов
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
При работе с ПК иногда приходится конвертировать файлы из одного формата в другой. (Примеров подобного конвертирования можно привести сотни) Текст: Команда iconv используется для преобразования текстовых документов из одной кодировки в другую: $ iconv $ iconv -f cp1251 -t UTF-8 -o file.txt > file_utf8.txt Первая команда выводит список поддерживаемых кодировок. Вторая — конвертирует файл file.txt из кодировки cp1251 в кодировку UTF-8, результат записывается в файл file_utf8.txt. Картинки: Для конвертирования различных графических форматов используется программа convert (чтобы она была доступна, нужно установить пакет imagemagic). Программа convert — это очень мощный и гибкий инструмент. Учтите, что в этой книге рассмотрены далеко не все его возможности. Вот несколько примеров преобразования графических файлов из одного формата в другой: $ convert picture.png picture.bmp ; из PNG в BMP $ convert icon.gif icon.jpg ; из GIF в JPEG $ i=png; for fn in *.$i; do convert "$fn" "${fn/.$i/.bmp}"; done Преобразуем все PNG-файлы в *.png.bmp, при этом размер результирующих изображений будет равен 50% от оригинала: $ convert -resize 1024x768 big.jpg small.jpg i=png; for fn in *.$i; do convert -resize 50% "$fn" "${fn/.$i/.bmp}"; done Также можно использовать опцию -rotate для поворота изображения, в нашем случае мы поворачиваем изображение на 270 : $ convert -rotate 270 fokta.jpg fotka-rotate.jpg Хотите добавить информацию об авторских правах? Это тоже можно сделать с помощью этой команды: $ convert -fill black -pointsize 36 -font arial -draw text 20.70 "Copyright (с)2011 Vasil Pupkin." f1.jpg f1c.jpg При желании можно легко преобразовать PDF в JPEG постранично: $ convert file.pdf file-%03d.jpg И, наоборот, преобразовать JPEG-изображения в PDF: $ convert *.jpg file.pdf Аудио: Представим, что у нас есть диск AudioCD и его нужно "сграбить" на жесткий диск. Для этого можно использовать команду cdparanoia: $ cdparanoia -B После этого треки аудиодиска будут сохранены на жестком диске в текущем каталоге в виде WAV-файлов. Но они просто огромны! Поэтому следует преобразовать их в формат MP3 или OGG. Это можно сделать следующими командами: # lame -b 256 in.wav out.mp3 # oggenc in.wav -b 256 out.ogg |
28. Файловые системы / FS
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
Linux поддерживает много различных файловых систем. Начинающий пользователь просто теряется, когда видит такое многообразие выбора, ведь в качестве корневой файловой системы доступны: ext2, ext3, ext4, XFS, ReiserFS, JFS. "Родной" файловой системой Linux является журналируемая файловая системаext4, но вы можете выбрать предыдущую версию — ext3 или даже ext2. Linux также до сих пор поддерживает файловую систему ext — самую первую файловую систему Linux, но при установке системы вы не можете выбрать ext. Поддержка ext добавлена в ядро только на тот случай, если вам попадется носитель информации, отформатированный в этой файловой системе. ПРИМЕЧАНИЕ Linux до сих пор поддерживает файловую систему ext, но она считается устаревшей, и рекомендуется воздержаться от ее использования. Основное отличие ext3 от ext2 — наличие журнала, что делает файловую систему менее чувствительной к всевозможным сбоям. Новая версия — ext4 — построена на базе ext3, но изменений гораздо больше, чем просто наличие журнала. Файловые системы ext2 и ext3 совместимы. По сути, ext3 — та же ext2, только с журналом. Раздел ext3 могут читать программы (например, Total Commander и Ext2Fsd в Windows), рассчитанные на ext2. В свою очередь, ext4 — это усовершенствованная версия ext3. В современных дистрибутивах по умолчанию задана файловая система ext4(для redhat/centos это ufs), при необходимости можно выбрать другие файловые системы. - Файловая система XFS была разработана компанией Silicon Graphics в 2001 году. Основная особенность данной системы — высокая производительность (до 7 Гбайт/с). XFS может работать с блоками размером от 512 байтов до 64 Кбайт. Ясно, что если у вас много маленьких файлов, то в целях экономии места можно установить самый маленький размер блока. А если вы работаете с файлами большого размера (например, мультимедиа), то нужно выбрать самый большой размер блока — так файловая система обеспечит максимальную производительность (конечно, если "железо" позволяет). Учитывая высокую производительность этой файловой системы, ее нет смысла устанавливать на домашнем компьютере, поскольку все ее преимущества будут сведены на нет. А вот если вы будете работать с файлами очень большого размера, XFS проявит себя с лучшей стороны. - Файловая система ReiserFS считается самой экономной, поскольку позволяет хранить несколько файлов в одном блоке (другие файловые системы могут хранить в одном блоке только один файл или одну его часть). Например, если размер блока равен 4 Кбайт, а файл занимает всего 512 байт (а таких файлов очень много в разных каталогах), то 3,5 Кбайт просто не будут использоваться. А вот ReiserFS позволяет задействовать буквально каждый байт вашего жесткого диска! Но у этой файловой системы есть два больших недостатка: она неустойчива к сбоям, и ее производительность сильно снижается при фрагментации. Поэтому, если вы выбираете данную файловую систему, покупайте UPS (источник бесперебойного питания) и почаще дефрагментируйте жесткий диск. - Файловая система JFS (разработка IBM) сначала появилась в операционной системе AIX, а потом была модифицирована под Linux. Основные достоинства этой файловой системы — надежность и высокая производительность (выше, чем у XFS). Но у нее маленький размер блока (от 512 байтов до 4 Кбайт). Следовательно, она хороша на сервере баз данных, но не при работе с данными мультимедиа, поскольку блок в 4 Кбайт для работы, например, с видео в реальном времени будет маловат. Выбор файловой системы: - для рабочей станции и сервера общего назначения оптимальными файловыми системами являются ext3/ext4 или ReiserFS (в крайнем случае) - на сервере баз данных можно использовать JFS — в этом случае (особенно, если база данных огромная) будет наблюдаться определенный прирост производительности - файловая система XFS — это удел станции мультимедиа, на обычной рабочей станции или обычном сервере ее использовать не следует Файловые системы Windows: FAT32 - нет журнала NTFS - есть журнал |
29. Имена файлов в Linux
1 2 3 4 5 6 7 8 9 10 11 |
По сравнению с Windows в Linux несколько другие правила построения имен файлов, вам придется с этим смириться. Начнем с того, что в Linux нет такого понятия, как расширение имени файла. В Windows, например, для файла Document1.doc именем файла является фрагмент Document1, а doc — это расширение. В Linux Document1.doc — это имя файла, никакого расширения нет. Максимальная длина имени файла — 254 символа(зависит от ФС в ext4 уже пофигу). Имя может содержать любые символы (в том числе и кириллицу), кроме / \ ? < > * " |. Также вам придется привыкнуть к тому, что система Linux чувствительна к регистру в имени файла: FILE.txt и FiLe.Txt — это два разных файла. Разделение элементов пути осуществляется символом / (прямой слэш), а не \ (обратный слэш), как в Windows. |
30. Файлы и устройства
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
Вот самые распространенные примеры файлов устройств: /dev/sdx — файл жесткого диска или USB-накопителя /dev/sdxN — файл устройства раздела на жестком диске, N — это номер раздела /dev/mouse — файл устройства мыши /dev/modem — файл устройства модема (на самом деле является ссылкой на файл устройства ttySn) /dev/ttySn — файл последовательного порта, n — номер порта (ttyS0 соответствует COM1, ttyS1 — COM2 и т. д.). ПРИМЕЧАНИЕ В современных дистрибутивах имена вида /dev/hdx уже не используются В свою очередь, файлы устройств бывают двух типов: блочные и символьные. Обмен информации с блочными устройствами, например с жестким диском, осуществляется блоками информации, а с символьными — отдельными символами. Пример символьного устройства — последовательный порт. ls -l /dev/ttyACM0 crw-rw---- 1 root uucp 166, 0 Jun 7 18:13 /dev/ttyACM0 ls /dev/nvme0n1 -l brw-rw---- 1 root disk 259, 0 May 29 10:57 /dev/nvme0n1 |
31. Стандартные каталоги Linux
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
В зависимости от дистрибутива, в корневом каталоге могут находиться дополнительные каталоги или не быть. / — корневой каталог /bin — содержит стандартные программы Linux (cat, cp, ls, login и т. д.) /boot — каталог загрузчика, содержит образы ядра и Initrd (RAM-диска инициализации), может содержать конфигурационные и вспомогательные файлы загрузчика /dev — содержит файлы устройств /etc — содержит конфигурационные файлы системы /home — содержит домашние каталоги пользователей /lib — библиотеки и модули /lost+found — восстановленные после некорректного размонтирования файловой системы файлы и каталоги /media — в современных дистрибутивах содержит точки монтирования сменных носителей (CD-, DVD-, USB-накопителей) /misc — может содержать все, что угодно, равно как и каталог /opt /mnt — обычно содержит точки монтирования /proc — каталог псевдофайловой системы procfs, предоставляющей информацию о процессах /root — каталог суперпользователя root /sbin — каталог системных утилит, выполнять которые имеет право пользователь root /tmp — каталог для временных файлов /usr — содержит пользовательские программы, документацию, исходные коды программ и ядра /var — постоянно изменяющиеся данные системы, например очереди системы печати, почтовые ящики, протоколы, замки и т. д. |
32. Работа с файлами
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
touch <файл> Создание пустого файла cat <файл> Просмотр текстового файла tac <файл> Вывод содержимого текстового файла в обратном порядке, т. е. сначала выводится последняя строка, потом предпоследняя и т. д. cp <файл1> <файл2> Копирование файла <файл1> в файл <файл2>. Если <файл2> существует, программа попросит разрешение на его перезапись mv <файл1> <файл2> Перемещение файла <файл1> в файл <файл2>. Эту же команду можно использовать и для переименования файла rm <файл> Удаление файла locate <файл> Быстрый поиск файла which <программа> Вывод каталога, в котором находится программа, если она вообще установлена. Поиск производится в каталогах, указанных в переменной окружения PATH (это путь поиска программ) less <файл> Используется для удобного просмотра файла с возможностью скроллинга (постраничной прокрутки) Пример: touch file.txt echo "some text" > file.txt cat file.txt cp file.txt file-copy.txt cat file-copy.txt rm file.txt cat file.txt mv file-copy.txt file.txt cat file.txt Первая команда "touch" создает в текущем каталоге файл "file.txt". Вторая команда "echo" записывает строку some text в этот же файл. Обратите внимание на символ ">" — это символ перенаправления ввода/вывода Третья команда "cat" выводит содержимое файла — в файле записанная нами строка "some text". Четвертая команда "cp" копирует файл "file.txt" в файл с именем "filecopy.txt". После этого мы опять используем команду "cat", чтобы вывести содержимое файла "file-copy.txt", — надо же убедиться, что файл действительно скопировался. Шестая команда "rm" удаляет файл "file.txt". При удалении система спрашивает, хотите ли вы удалить файл. Если хотите удалить, то нужно нажать клавишу <Y>, а если нет, то <N>. Точно ли файл удален? Убедимся в этом: введите команду "cat file.txt". Система нам сообщает, что нет такого файла. Восьмая команда "mv" переименовывает файл "file-copy.txt" в файл "file.txt". Последняя команда выводит исходный файл file.txt. |
33. Работа с каталогами
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
mkdir <каталог> Создание каталога cd <каталог> Изменение каталога ls <каталог> Вывод содержимого каталога rmdir <каталог> Удаление пустого каталога rm -r <каталог> Рекурсивное удаление каталога При указании имени каталога можно использовать следующие символы: . — означает текущий каталог. Если вы введете команду cat ./file, то она вы ведет файл file, который находится в текущем каталоге .. — родительский каталог. Например, команда cd .. переведет вас на один уровень вверх по дереву файловой системы ~ — домашний каталог пользователя (об этом мы поговорим позже) Пример: mkdir directory cd directory touch file1.txt touch file2.txt ls cd .. ls directory rm directory rmdir directory rm -r directory |
34. Команда ln: создание ссылок
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
В Linux допускается, чтобы один и тот же файл существовал в системе под разными именами. Для этого используются ссылки. Ссылки бывают двух типов: жесткие и символические. Жесткие ссылки жестко привязываются к файлу — вы не можете удалить файл, пока на него указывает хотя бы одна жесткая ссылка. А вот если на файл указывают символические ссылки, его удалению ничто не помешает. Жесткие ссылки не могут указывать на файл, который находится за пределами файловой системы. Предположим, у вас два Linux-раздела: один корневой, а второй используется для домашних файлов пользователей и монтируется к каталогу /home корневой файловой системы. Так вот, вы не можете создать в корневой файловой системе ссылку, которая ссылается на файл в файловой системе, под монтированной к каталогу /home. Это очень важная особенность жестких ссылок. Если вам нужно создать ссылку на файл, который находится за пределами файловой системы, вам следует использовать символические ссылки. Для создания ссылок предназначена команда ln: ln file.txt link1 ln -s file.txt link2 Первая команда создает жесткую ссылку link1, указывающую на текстовый файл file.txt. Вторая команда создает символическую ссылку link2, которая ссылается на этот же текстовый файл file.txt. Модифицируя ссылку (все равно какую — link1 или link2), вы автоматически изменяете исходный файл — file.txt. Особого внимания заслуживает операция удаления. По идее, если вы удаляете ссылку link2, файл file.txt также должен быть удален, но не тут-то было — вы не можете его удалить до тех пор, пока на него указывает хоть одна жесткая ссылка. При удалении ссылки link2 просто будет удалена символическая ссылка, но жесткая ссылка и сам файл останутся. Если же вы удалите ссылку link1, будет удален и файл file.txt, поскольку на него больше не указывает ни одна жесткая ссылка. |
35. Команда chmod: права доступа к файлам и каталогам
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
Чтобы просмотреть текущие права доступа, введите команду: ls -l <имя файла/каталога> Рассмотрим фрагмент строки "-r--r-----" который описывает права доступа: - первый символ — это признак каталога. Сейчас перед нами файл. Если бы это был каталог, то первый символ был бы символом d (от англ. directory) - последующие три символа (r--) определяют права доступа владельца файла или каталога. Первый символ — это чтение, второй — запись, третий — выполнение. Как можно видеть, владельцу разрешено только чтение этого файла, запись и выполнение запрещены, поскольку в правах доступа режимы w и x не определены - следующие три символа (r--) задают права доступа для членов группы владельца. Права такие же, как и у владельца: можно читать файл, но нельзя изменять или запускать - последние три символа (---) задают права доступа для прочих пользователей. Прочие пользователи не имеют права ни читать, ни изменять, ни выполнять файл. При попытке получить доступ к файлу они увидят сообщение Access denied. Права доступа задаются командой chmod. Существуют два способа указания прав доступа: символьный (когда указываются символы, задающие право доступа, — r, w, x) и абсолютный. Возьмем отдельный набор прав, например для владельца: rw- Чтение разрешено — мысленно записываем 1, запись разрешена — запоминаем еще 1, а вот выполнение запрещено, поэтому запоминаем 0. Получается число 110. Если из двоичной системы перевести число 110 в восьмеричную, получится число 6. Двоичная система Восьмеричная система 000 0 001 1 010 2 011 3 100 4 101 5 110 6 111 7 Для новичков я бы рекомендовал вот такой вот порядок запоминания rwx 421 4 - чтение - r 2 - запись - w 1 - выполнение - x chmod 640 <имя_файла> Наиболее популярные права доступа: 644 — владельцу можно читать и изменять файл, остальным пользователям — только читать 666 — читать и изменять файл можно всем пользователям; 777 — всем можно читать, изменять и выполнять файл. Иногда символьный метод оказывается проще. Например, у нас есть файл script, который нужно сделать исполнимым, для этого можно применить команду: chmod +x script Для того чтобы снять право выполнения, указывается параметр -x: chmod -x script Подробнее о символьном методе вы сможете прочитать в руководстве по команде chmod (выполнив команду man chmod). |
36. Команда chown: смена владельца файла
1 2 3 4 5 |
Если вы хотите "подарить" кому-то файл, т. е. сделать какого-то пользователя владельцем файла, то вам нужно применить команду chown: chown пользователь файл ПРИМЕЧАНИЕ Возможно, что после изменения владельца файла вы сами не сможете получить к нему доступ, ведь владельцем будете уже не вы. |
37. Специальные права доступа (SUID и SGID)
1 2 3 4 5 6 7 8 9 10 11 |
Мы рассмотрели обычные права доступа к файлам, но в Linux есть еще так называемые специальные права доступа: SUID (Set User ID root) и SGID (Set Group ID root). Данные права доступа позволяют обычным пользователям запускать программы, требующие для своего запуска привилегий пользователя root. Например, демон pppd требует привилегий root, но чтобы каждый раз при установке PPP-соединения (модемное, ADSL-соединение) не входить в систему под именем root, достаточно установить специальные права доступа для демона pppd. Делается это так: chmod u+s /usr/sbin/pppd Однако не нужно увлекаться такими решениями, поскольку каждая программа, для которой установлен бит SUID, является потенциальной "дырой" в безопасности вашей системы. Для выполнения программ, требующих прав root, намного рациональнее использовать программы sudo и su (описание которых можно получить по командам man sudo и man su). |
38. Команда chattr: атрибуты файла, запрет изменения файла
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
С помощью команды chattr можно изменить атрибуты файла. Параметр + устанавливает атрибут, а параметр — атрибут снимает. Например: # chattr +i /boot/grub/menu.lst Данная команда устанавливает атрибут i, запрещающий любое изменение, переименование и удаление файла. Установить этот атрибут, равно как и снять его, имеет право только суперпользователь или процесс с возможностью CAP_LINUX_IMMUTABLE. Чтобы изменить файл, нужно очистить атрибут с помощью команды: # chattr -i /boot/grub/menu.lst Если установить атрибут j, то все данные, прежде чем они будут записаны непосредственно в файл, будут сохранены в журнал ext3. Данный атрибут имеет смысл, только если файловая система смонтирована с опциями data=ordered или data=writeback. Когда файловая система смонтирована с опцией data=journal, этот атрибут не имеет значения, поскольку все данные файла и так уже журналируются. Когда для файла установлен атрибут A (прописная буква), тогда не происходит обновление записи atime (в ней хранится время доступа к файлу). Это позволяет избежать лишних дисковых операций ввода/вывода, что полезно для медленных компьютеров. Если для файла установлен атрибут a, в файл можно только добавлять данные. Этот атрибут имеет право установить (или очистить) суперпользователь или процесс с возможностью CAP_LINUX_IMMUTABLE. Атрибут c заставляет систему упаковывать (сжимать) содержимое файла, что позволяет сэкономить место на диске. При чтении из этого файла возвращаются несжатые данные. При записи в файл информация автоматически сжимается и записывается на диск в уже сжатом виде. Когда изменяется каталог с установленным атрибутом D, изменения сразу же записываются на диск. Эквивалентно применению опции монтирования dirsync. Если для файла установлен атрибут d, для него не будет выполнено резервное копирование программой dump. Для файла с установленным атрибутом j его данные перед записью в файл сохраняются в журнале файловой системы ext3/ext4. Это происходит только, если файловая система смонтирована с опциями data=ordered или data=writeback. Если файловая система смонтирована с опцией data=journal, все данные уже и так журналируются и атрибут j никак на это не влияет. Этот атрибут имеет право установить(или очистить) суперпользователь или процесс с возможностью CAP_LINUX_IMMUTABLE. При изменении файла с установленным атрибутом S его данные синхронно записываются на диск. Аналогично опции монтирования sync к подмножеству файлов. Когда удаляется файл с установленным атрибутом s, система выполняет обнуление его блоков и запись их обратно на диск. При удалении файла с атрибутом u его содержимое сохраняется на диске, что позволяет впоследствии легко восстановить этот файл. Атрибуты X и Z используются экспериментальными заплатками сжатия для служебных целей. Установить любой атрибут можно командой chattr, а просмотреть — командой lsattr. Об остальных атрибутах вы сможете прочитать в справочной системе: man chattr |
39. Команды mount и umount
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 |
Как уже было отмечено, для Linux нет разницы между устройством и файлом. Все устройства системы представлены в корневой файловой системе как обычные файлы. Например, /dev/fd0 — это ваш дисковод для гибких дисков, /dev/hda (/dev/sda) — жесткий диск. Файлы устройств хранятся в каталоге /dev. mount [опции] <устройство> <точка монтирования> Точка монтирования — это каталог, через который будет осуществляться доступ к монтируемой файловой системе. mount /dev/cdrom /mnt/cdrom mount /dev/sdb /mnt/cdrom mount /dev/cdrom /mnt/cdrom mount /dev/dvd /mnt/cdrom mount /dev/fd0 /mnt/floppy mount /dev/fd1 /mnt/floppy mount /dev/sdb1 /mnt/usbdisk Нужно отметить, что CD/DVD-приводы, а также USB-накопители монтируются автоматически (к каталогу /media/<ID накопителя>), поэтому все, что было сказано о монтировании таких носителей, — исключительно для общего развития Для размонтирования файловой системы применяется команда umount: # umount <устройство или точка монтирования> umount /mnt/cdrom Опции монтирования файловых систем У команды mount довольно много опций, но на практике наиболее часто используются только некоторые из них: -t, -r, -w, -a. Параметр -t позволяет задать тип файловой системы. Обычно программа сама определяет файловую систему, но иногда это у нее не получается. Тогда мы должны ей помочь. Формат использования этого параметра следующий mount -t <файловая система> <устройство> <точка монтирования> Например: mount -t iso9660 /dev/hdc /mnt/cdrom Вот опции для указания наиболее популярных монтируемых файловых систем: ext2 или ext3 — файловая система Linux iso9660 — указывается при монтировании CD-ROM vfat — FAT, FAT32 (поддерживается Windows 9x, ME, XP) ntfs — NT File System (поддерживается Windows NT, XP), будет использована стандартная поддержка NTFS, при которой NTFS-раздел доступен только для чтения ntfs-3g — будет использован модуль ntfs-3g, входящий в большинство современных дистрибутивов. Данный модуль позволяет производить запись информации на NTFS-разделы. Параметр -r монтирует указанную файловую систему в режиме "только чтение". Параметр -w монтирует файловую систему в режиме "чтение/запись". Данный параметр используется по умолчанию для файловых систем, поддерживающих запись (например, NTFS по умолчанию запись не поддерживает, как и файловые системы CD/DVD-дисков). Параметр –a используется для монтирования всех файловых систем, указанных в файле /etc/fstab (кроме тех, для которых указано noauto — такие файловые системы нужно монтировать вручную). При загрузке системы вызывается команда mount с параметром -a. mount -a - часто используется для проверки правильной правки файла "/etc/fstab" (добавили nfs) без перезагрузки системы. Если вы не можете смонтировать NTFS-раздел с помощью опции ntfs-3g, то, вероятнее всего, он был неправильно размонтирован (например, работа Windows не была завершена корректно). В этом случае для монтирования раздела нужно использовать опцию –o force, например: sudo mount -t ntfs-3g /dev/sdb1 /media/usb -o force Если вы не хотите при каждой загрузке монтировать постоянные файловые системы (например, ваши Windows-разделы), то вам нужно прописать их в файле /etc/fstab формат файла fstab: устройство точка_монтирования тип_ФС опции флаг_РК флаг_проверки Здесь: тип_ФС — это тип файловой системы, а флаг_РК — флаг резервного копирования. Если он установлен (1), то программа dump заархивирует данную файловую систему при создании резервной копии. Если не установлен (0), то резервная копия этой файловой системы создаваться не будет. Флаг проверки устанавливает, будет ли данная файловая система проверяться на наличие ошибок программой fsck. Проверка производится в двух случаях: - если файловая система размонтирована некорректно; - если достигнуто максимальное число операций монтирования для этой файловой системы. С появлением системы инициализации systemd файл /etc/fstab стал далеко не единственным источником автоматического монтирования файловых систем. Он все еще поддерживается, и все, что здесь сказано об fstab, верно, но systemd позволяет монтировать файловые системы другим способом. Опции монтирования файловой системы в файле /etc/fstab auto Файловая система должна монтироваться автоматически при загрузке. Опция используется по умолчанию, поэтому ее указывать не обязательно noauto Файловая система не монтируется при загрузке системы (при выполнении команды mount -a), но ее можно смонтировать вручную с помощью все той же команды mount defaults Используется стандартный набор опций, установленных по умолчанию exec Разрешает запуск выполняемых файлов для данной файловой системы. Эта опция используется по умолчанию noexec Запрещает запуск выполняемых файлов для данной файловой системы ro Монтирование в режиме "только чтение" rw Монтирование в режиме "чтение/запись". Используется по умолчанию для файловых систем, поддерживающих запись user Данную файловую систему разрешается монтировать/размонтировать обычному пользователю (не root) nouser Файловую систему может монтировать только пользователь root. Используется по умолчанию umask Определяет маску прав доступа при создании файлов. Для файловых систем, не Linux-подобных, маску нужно установить так: umask=0 utf8 Применяется только на дистрибутивах, которые используют кодировку UTF-8 в качестве кодировки локали. В старых дистрибутивах (где используется KOI8-R) для корректного отображения русских имен файлов на Windows-разделах нужно задать параметры iocharset=koi8-u,codepage=866 |
40. Переход на ext4
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
ВНИМАНИЕ! На момент ввода этой команды устройство должно быть размонтировано. Если нужно преобразовать в ext4 корневую файловую систему, то данную команду следует вводить с LiveCD, поддерживающего ext4. Если вы при установке системы выбрали файловую систему ext3, то перейти на ext4 можно без потери данных и в любой удобный для вас момент. Откройте терминал и введите команду: sudo tune2fs -O extents,uninit_bg,dir_index /dev/имя_устройства После этого проверим файловую систему: sudo fsck -pf /dev/имя_устройства Затем смонтируем файловую систему так: mount -t ext4 /dev/имя_устройства /точка_монтирования mount -t ext4 /dev/disk/by-uuid/UUID-устройства /точка_монтирования Если раздел автоматически монтируется через /etc/fstab, не забудьте исправить файловую систему на ext4: UUID=UUID-раздела /точка ext4 defaults,errors=remount-ro,relatime 0 1 Монтирование каталога к каталогу В Linux можно подмонтировать каталог к каталогу, а не только каталог к устройству. Делается это с помощью все той же команды mount, запущенной с параметром --bind: mount --bind исходный_каталог каталог_назначения |
41. Команда chroot: смена корневой файловой системы
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
Предположим, мы установили Windows после установки Linux, и программа установки Windows перезаписала начальный загрузчик. Теперь Windows загружается, а Linux — нет. Что делать? Нужно загрузиться с LiveCD и выполнить команду: chroot <раздел, содержащий корневую файловую систему> Например, если Linux был установлен в раздел /dev/sda5, то нужно ввести команду: chroot /dev/sda5 Данная команда сменит корневую файловую систему, т. е. вы загрузите ядро Linux с LiveCD, а затем сделаете подмену корневой файловой системы. Вам останется только ввести команду записи загрузчика (например, lilo) для восстановления начального загрузчика. Например livecd SGD: 1) Загружаемся с Super Grub Disk 2) Выбираем авто поиск системы на разделах 3) Грузимся в нашу систему 4) Чиним загрузчик из под нашей системы update-grub - обновление меню загрузчика grub-install /dev/sda - установка загрузчика на диск /dec/sda |
42. Команды поиска файлов
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
Синтаксис команды следующий: find список_поиска выражение Мощность программы find заключается в множестве самых разных параметров поиска, которые не так легко запомнить — их просто много. К тому же find может выполнять команды для найденных файлов. Например, вы можете найти временные файлы и сразу удалить их. Найти файлы с именем a.out (точнее, в имени которых содержится строка "a.out"), поиск начать с корневого каталога (/): find / -name a.out Найти файлы по маске *.txt: find / -name '*.txt' Найти файлы нулевого размера, поиск начать с текущего каталога (.): find . -size 0c Хотя для поиска пустых файлов намного проще использовать параметр -empty: find . -empty Найти файлы, размер которых от 100 до 150 Мбайт, поиск производить в домашнем каталоге и всех его подкаталогах: find ~ -size +100M -size -150M |
43. Команды kill, killall, xkill и ps
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
Формат ее вызова следующий: kill [параметры] PID ps –ax | grep <имя> Например: ps –ax | grep firefox kill PID pkill firefox "Убить" процесс можно по-разному. "Убийство" процесса на самом деле сопровождается посылкой процессу определенного системного сигнала. Наиболее распространенные сигналы, используемые для завершения процесса: HUP (1) — полезен для программ-демонов. Получив этот сигнал, демон (служба) обязан перезапуститься (или перечитать файл конфигурации). Обычная программа, получив такой сигнал, завершается INT (2) — прерывание, именно этот сигнал посылается, когда вы нажимаете комбинацию клавиш <Ctrl>+<C>; KILL (9) — аварийное завершение процесса, программа не может игнорировать этот сигнал или как-то его обработать; TERM (15) — "мягкое" завершение программы (именно этот сигнал посылается программой kill по умолчанию). Программа, получив этот сигнал, должна корректно завершиться, например, освободить все занятые ресурсы, сохранить все данные. Обычно такой сигнал равносилен нормальному выходу из программы. В случае с "сильно" зависшими процессами толку от этого сигнала мало, нужно использовать KILL STOP (19) — приостанавливает выполнение процесса, этот сигнал нельзя обработать или игнорировать CONT (18) — возобновляет выполнение процесса Чтобы полностью "убить" процесс, нужно передать ему сигнал 9 (KILL): # kill -9 <PID> Кроме команды kill пользователи, предпочитающие графический интерфейс, могут применять программу xkill, позволяющую "убить" графическую программу. Введите команду xkill, указатель мыши изменится на череп, который нужно навести на окно зависшей программы и щелкнуть мышью. Обычно используется вот так вот: Жмем кнопки alt+f2 Печатаем xkill Кликаем мышкой в зависшие окно htop PID Идентификатор процесса USER Имя пользователя, запустившего процесс PR Приоритет процесса NI Значение nice VIRT Виртуальная память, использованная процессом (в килобайтах) RES Размер процесса, не перемещенный в область подкачки (в килобайтах) Этот размер равен размерам сегментов кода и данных, т. е. RES = CODE + DATA S Состояние процесса R — выполняется S — "спит" (режим ожидания), в этом состоянии процесс выгружен из оперативной памяти в область подкачки D — "непрерываемый сон" (uninterruptible sleep), из такого состояния процесс может вывести только прямым сигналом от оборудования T — процесс в состоянии трассировки или остановлен Z ("зомби") — специальное состояние процесса, когда сам процесс уже завершен, но его структура еще осталась в памяти %CPU Занимаемое процессом процессорное время %MEM Использование памяти процессом TIME+ Процессорное время, израсходованное с момента запуска процесса COMMAND Команда, которая использовалась для запуска процесса (обычно имя исполнимого файла процесса) |
44. Команды nice и renice: изменение приоритета процесса
1 2 3 4 5 6 7 8 9 10 |
Предположим, что вы работаете с видео и вам нужно перекодировать файл из одного видеоформата в другой. Конвертирование видео занимает много процессорного времени, а хотелось бы все сделать как можно быстрее и уйти раньше домой. Тогда вам поможет программа nice — она позволяет запустить любую программу с указанным приоритетом. Ясно — чем выше приоритет, тем быстрее будет выполняться программа. Формат вызова команды следующий: nice -n <приоритет> команда аргументы Максимальный приоритет задается числом −20, а минимальный — числом 19. Приоритет по умолчанию равен 10. Если процесс уже запущен, тогда для изменения его приоритета можно использовать команду renice: renice –n <приоритет> -p PID |
45. Команда fuser: кто открыл ресурс?
1 2 3 4 5 6 7 8 9 10 11 |
Иногда очень полезно знать, какая программа использует тот или иной порт или файл (каталог). В Windows для этого нужно устанавливать дополнительные программы сторонних разработчиков, в Linux применяется штатная команда fuser. Рассмотрим примеры ее использования: fuser -va 22/tcp fuser -va /home/user/report.doc sudo fuser -k -TERM -m /home/user/report.doc Первая команда показывает PID процесса, использующего порт 22. Вторая демонстрирует, какой процесс имеет доступ к файлу /home/user/report.doc. А третья команда завершает все процессы (отправляет им сигнал TERM), которые используют файл /home/user/report.doc. |
46. Команда cmp: сравнение двух файлов
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
Команда cmp используется для сравнения двух файлов. Если файлы идентичны, то cmp вообще никак не реагирует. А вот если файлы отличаются, то cmp выводит номер строки и номер символа в строке, откуда начинается различие. Команда cmp более универсальна, поскольку она может использоваться как для сравнения текстовых, так и двоичных файлов. А вот команда diff и ее аналоги умеют сравнивать только текстовые файлы. Формат вызова команды следующий: cmp [параметры] файл1 файл2 Параметры: -c Вывод отличающихся символов -i n Игнорировать первые n символов -l Вывод позиций всех отличий, а не только первого -s Не выводить информацию на экран, при этом код возврата будет следующим: 0 — файлы одинаковые 1 — файлы отличаются 2 — ошибка при открытии одного из файлов |
47. Команда column: разбивка текста на столбцы
1 2 3 4 5 6 7 8 9 10 11 |
Команда column используется для разбивки текста на несколько столбцов. Текст может быть прочитан как из файла, так и со стандартного ввода, если файл не указан. Формат вызова команды: column [параметры] [файл] Параметры: -c n Задает количество столбцов (число n) -s символ Указанный символ будет использоваться в качестве разделителя столбцов -t Текст будет форматироваться как таблицы. По умолчанию разделителем полей считается пробел, но с помощью параметра -s можно задать другой разделитель -x Сначала будут заполняться столбцы, а потом строки |
48. Команда comm: еще одна команда для сравнения файлов
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
Команда comm сравнивает содержимое двух файлов, которые были перед этим отсортированы командой sort. Вывод программы располагается в три столбца. В первом выводятся строки из файла1, во втором — из файла2, а в третьем — строки, которые имеются в обоих файлах. Формат вызова программы следующий: comm [параметры] файл1 файл2 Параметры: -1 Не выводить первый столбец -2 Не выводить второй столбец -3 Не выводить третий столбец -12 Будет выведен только третий столбец -13 Будет выведен только второй столбец -23 Вывод только первого столбца |
49. Команда diff: сравнение файлов
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
Команда используется для сравнения двух файлов. Формат вызова программы diff: diff [параметры] файл1 файл2 В выводе программы отличающиеся строки помечаются символами ">" и "<": - строка из первого файла помечается символом "<" - строка из второго файла — символом ">" Параметры: -a Сравнение всех файлов, в том числе бинарных -b Программа будет игнорировать пробельные символы в конце строки -B Игнорирует пустые строки -e Применяется для создания сценария для редактора ed, который будет использоваться для превращения первого файла во второй -w Игнорирует пробельные символы -y Вывод в два столбца -r Используется для сравнения файлов в подкаталогах. Вместо первого файла указывается первый каталог, вместо второго файла — соответственно второй каталог |
50. Команда diff3: сравнение трех файлов
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
Похожа на команду diff, только используется для сравнения трех файлов. Формат вызова команды таков: diff3 [параметры] файл1 файл2 файл3 Программа выводит следующую информацию: ==== — все три файла разные ===1 — первый файл отличается от второго и третьего ===2 — второй файл отличается от первого и третьего ===3 — третий файл отличается от первого и второго Параметры: -a Сравнивать файлы как текстовые, даже если они являются бинарными -A Создание сценария для редактора ed, который показывает в квадратных скобках все отличия между файлами -e Создает сценарий для ed, который помещает все отличия между файлами файл2 и файл3 в файл файл1 (будьте осторожны!) -i Добавить команды w (сохранить файл) и q (выйти) в конец сценария ed -x Создание сценария редактора ed, который помещает отличия между файлами в файл файл1 -X То же, что и -x, но отличия выделяются -3 Создает сценарии d, который помещает все различия между файлами файл1 и файл3 в файл1 |
51. Команда egrep: расширенный текстовый фильтр
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
Производит поиск строки в одном или нескольких файлах. Команда egrep похожа на команду grep (которая будет описана позже), но считается более быстрой и более функциональной. Если файлы не заданы, то программа читает текст из стандартного ввода. Формат вызова программы: egrep [параметры] строка файлы Параметры: -A n Вывод n строк после строки, в которой есть искомая строка -B n Вывод n строк перед строкой, содержащей искомую строку -b Выводит для каждой строки файла, где есть искомая строка, ее положение в файле -c Выводит количество совпадений, но не выводит сами совпадения -C Выводит две строки до и две строки после строки, которая содержит искомую строку -e строка Используйте данный параметр, если искомая строка начинается с символа "-" -f файл Производит поиск искомых строк, которые имеются в указанном файле -h Выводит строки, содержащие искомую строку, но не выводит имена содержащих их файлов -i Игнорировать регистр букв -n Выводит номера строк (и сами строки), содержащих искомую строку -s Не выводить сообщения об ошибке, если некоторые файлы не могут быть открыты -w Поиск совпадения целого слова с искомой строкой -x Поиск совпадения целой строки с искомой строкой Пример использования: egrep "ppp [11]" * Данная команда ищет строку, заключенную в кавычки во всех файлах в текущем каталоге. |
52. Команда expand: замена символов табуляции пробелами
1 2 3 4 |
Команда expand заменяет в указанных файлах символы табуляции на соответствующее количество пробелов. Команде можно передать лишь один параметр -i, означающий, что замена должна быть только в начале строки. Формат вызова команды: expand [-i] файлы |
53. Команда fmt
1 2 3 4 5 6 7 8 9 10 |
Команда fmt форматирует текст, выравнивает его по правой границе и удаляет символы новой строки. Синтаксис вызова команды: fmt [параметры] файлы Парамаетры: -c Не форматировать первые две строки -p префикс Форматировать только строки, начинающиеся с указанного префикса -s Не объединять строки -t Начинать параграф с красной строки -w n Задает максимальную длину строки в n символов (по умолчанию 72) |
54. Команда fold
1 2 3 4 5 6 7 8 |
Выравнивает текст по правому краю. Производит разрыв строк, если это необходимо. Максимальная длина строки — 80 символов. Установить другую длину строки можно с помощью параметра -w, как и в случае с командой fmt. Кроме того, можно указать параметр -s, разрешающий разрыв строки только на пробеле. Формат вызова команды: fold [параметры] файлы |
55. Команды head и tail: вывод начала и хвоста файла
1 2 3 4 5 6 |
Команда head выводит первые десять строк файла, а tail — последние десять. Количество строк может регулироваться с помощью параметра -n. Пример использования: head -n 10 /var/log/messages tail -n 15 /var/log/messages |
56. Команда sort: сортировка файлов
1 2 3 4 5 6 7 8 9 10 11 |
Сортирует все указанные файлы, результат сортировки всех указанных файлов отправляется на стандартный вывод. Синтаксис вызова команды: sort [параметр]... [файлы] Параметры: -b Пробелы в начале сортируемых полей или начале ключей будут игнорироваться -d При сортировке будут игнорироваться все символы, кроме букв, цифр и пробельных символов -f Игнорировать регистр букв -r Сортировка в обратном порядке -o файл Вывод результатов сортировки в файл -t символ Использование указанного символа в качестве разделителя полей |
57. Команда split: разбиение файлов на несколько частей
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
Используется для разделения файлов на части. По умолчанию создаются части размером в 1000 строк. Изменить размер можно, указав количество строк, например: split -500 файл1 В данном случае файл будет разбит на части по 500 строк в каждой (кроме, возможно, последней части, где может быть меньше строк). Команду можно также использовать для разделения файлов на части по размеру информации, а не по количеству строк, например с помощью параметра -b можно указать количество символов в каждой части. Примеры вызова команды: split -b100b файл split -b100k файл split -b100m файл Первая команда разделит файл на части по 100 байтов каждая, вторая — на части по 100 Кбайт каждая, третья — по 100 Мбайт каждая. |
58. Команда unexpand: замена пробелов символами табуляции
1 2 3 4 5 |
Заменяет последовательные пробелы символами табуляции. По умолчанию 8 пробелов заменяются одним символом табуляции. Количество пробелов можно задать с помощью параметра -t n (где n — количество пробелов). Синтаксис вызова: unexpand [параметры] файл |
59. Команда wc: подсчет слов в файле
1 2 3 4 5 6 7 8 9 10 |
Команда wc используется: для подсчета слов в текстовом файле: wc /var/log/messages для подсчета количества строк (если задан параметр -l): wc -l /var/log/messages для подсчета количества символов (параметр -c): wc -c /var/log/messages. |
60. маршрутизация
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 |
netstat -rn route -n Destination Адрес сети назначения Gateway Шлюз по умолчанию Genmask Маска сети назначения Flags Поле Flags содержит флаги маршрута: U — маршрут активен H — маршрут относится не к сети, а к хосту G — данная машина является шлюзом, поэтому при обращении к ней нужно заменить MAC-адрес машины получателя на MAC-адрес шлюза (если MAC-адрес получателя почему-то известен) D — динамический маршрут, установлен демоном маршрутизации M — маршрут, модифицированный демоном маршрутизации C — запись кэширована ! — запрещенный маршрут Metric Метрика маршрута, т. е. расстояние к цели в хопах (переходах). Один хоп (переход) означает один маршрутизатор Ref Количество ссылок на маршрут. Не учитывается ядром Linux, но в других операционных системах, например, в FreeBSD, вы можете столкнуться с этим полем Use Содержит количество пакетов, прошедших по этому маршруту Iface Используемый интерфейс MSS Максимальный размер сегмента (Maximum Segment Size) для TCP-соединений по этому маршруту Window Размер окна по умолчанию для TCP-соединений по этому маршруту irtt Протокол TCP гарантирует надежную доставку данных между компьютерами. Для такой гарантии используется повторная отправка пакетов, если они были потеряны. При этом ведется счет времени: сколько нужно ждать, пока пакет дойдет до назначения и придет подтверждение о получении пакета. Если время вышло, а подтверждение так и не было получено, то пакет отправляется еще раз. Это время и называется roundtrip time (время "путешествия туда-обратно"). Параметр irtt — это начальное время rtt. В большинстве случаев подходит значение по умолчанию, но для некоторых медленных сетей, например, для сетей пакетного радио, значение по умолчанию слишком короткое, что вызывает ненужные повторы. Параметр irtt можно увеличить командой route. По умолчанию его значение — 0 команда задает шлюз по умолчанию для интерфейса eth0: # route add default gw 192.168.181.2 eth0 Команда route за один вызов может добавить или удалить только один маршрут. Другими словами, вы не можете сразу добавить или удалить несколько маршрутов. Формат вызова команды route следующий: route [операция] [тип] адресат gw шлюз [метрика] [dev интерфейс] Параметр операция может принимать два значения: add (добавить маршрут) и del (удалить маршрут). Параметр тип необязательный, он задает тип маршрута: -net (маршрут к сети), -host (маршрут к узлу) или default (маршрут по умолчанию). Параметр адресат содержит адрес сети (если задается маршрут к сети), адрес узла (при добавлении маршрута к сети) или вообще не указывается, если задается маршрут по умолчанию. Параметр шлюз задает IP-адрес (или доменное имя) шлюза. Последние два параметра — метрика и dev необязательны. Параметр метрика задает максимальное число переходов (через маршрутизаторы) на пути к адресату. В Linux он необязательный, в отличие от других ОС. Последний параметр имеет смысл указывать, если в системе установлено несколько сетевых интерфейсов и нужно задать, через какой именно сетевой интерфейс следует отправить пакеты по указанному маршруту. Команда удаления маршрута выглядит так: route del адрес В других UNIX-системах есть параметр -f, удаляющий все маршруты (route -f), но в Linux такого параметра нет. Следовательно, для очистки всей таблицы маршрутизации вам нужно будет ввести серию команд route del. Изменять таблицу маршрутизации нужно только, зарегистрировавшись на компьютере локально. При удаленной регистрации (например, по ssh) легко ошибочно удалить маршрут, по которому вы "вошли в систему". О последствиях такого действия, думаю, говорить не нужно. Примеры: route add -net 192.76.16.0 netmask 255.255.255.0 dev eth0 Эта команды добавляет маршрут к сети 192.76.16.0 через устройство eth0. Шлюз не указан, просто все пакеты, адресованные сети 192.76.16.0, будут отправлены на интерфейс eth0. route add -net 192.16.16.0 netmask 255.255.255.0 gw 192.76.16.1 Эта команда добавляет маршрут к сети 192.16.16.0 через маршрутизатор 192.76.16.1. Сетевой интерфейс задавать не обязательно, но можно и указать при особом желании. route add default gw gate1 Эта команда добавляет маршрут по умолчанию. Все пакеты будут отправлены компьютеру с именем gate1. Обратите внимание: мы указываем доменное имя узла вместо IP-адреса. route add -net 10.1.0.0 netmask 255.0.0.0 reject Эта команда добавляет запрещающий маршрут. Отправка пакетов по этому маршруту (в сеть 10.1.0.0) запрещена. |
61. Команда pppoeconf: настройка DSL-соединения
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
DSL (Digital Subscriber Line) — цифровая абонентская линия, позволяющая производить двунаправленный обмен данными по телефонной линии. Существует несколько вариантов DSL-линий: ADSL, VDSL, SDSL, RADSL. Наиболее распространены ADSL-линии. ADSL (Asymmetric DSL) — асимметрическая цифровая линия. Для передачи данных используется витая пара телефонной сети. Скорость передачи данных зависит от расстояния, например 1,5 Мбит/с при расстоянии в 5—6 км. Но обычно скорость ограничивается провайдером и зависит от тарифного плана. Самый доступный тарифный план подразумевает скорость передачи данных 128 Кбит/с. Раньше были соединения и на скорости 64 Кбит/с, но сейчас уже таких нет. Сегодня обычным домашним пользователям доступны соединения со скоростью передачи данных от 1 до 20 Мбит/с. В Debian/Ubuntu/Denix для настройки DSL-соединения используется удобная программа pppoeconf, запустить ее можно так: sudo pppoeconf Согласно спецификации PPPoE существуют две стадии: стадия поиска и стадия сессии. На первой стадии производится отправка специальных пакетов PADI (PPPoE Active Discovery Initiation), которые позволяют найти активные концентраторы доступа PPPoE. Стадия сессии — это само соединение и передача информации. После того как концентратор доступа будет найден, программа предложит вам создать резервную копию файла /etc/ppp/peers/dsl-provider, поскольку именно этот файл будет изменен в процессе настройки соединения. Если вы до этого не настраивали DSL-соединение, то в этом файле ничего не будет, поэтому можете даже не предпринимать никаких действий. Далее программа предложит установить популярные опции соединения (noauth и defaultroute): не стоит от них отказываться, поскольку их использует большинство провайдеров. Следующие два шага — ввод имени пользователя и пароля, которые применяются для аутентификации на сервере провайдера. После этого программа предложит вам добавить полученные от провайдера IP-адреса DNS-серверов в файл /etc/resolv.conf. Следующий вопрос — хотите ли вы устанавливать соединение при загрузке системы? А после этого программа спросит вас, хотите ли вы установить соединение немедленно. Для включения/отключения DSL-соединения используются следующие команды: sudo pon dsl-provider sudo poff dsl-provider |
62. Команда pppconfig: настройка модемного (PPP) соединения
1 2 3 4 5 |
Кроме команды pppoeconf в дистрибутивах Debian/Ubuntu/Denix есть команда pppconfig, которая настраивает модемное PPP-соединение. Она напоминает программу pppoeconf — вам нужно запустить ее и следовать инструкциям мастера настройки соединения. Ничего сложного. Запускать программу нужно так: sudo pppoeconf |
63. Команда wvdial: настройка PPP-соединения
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 |
Программа wvdial также используется для создания PPP-соединения, но, чтобы не рассматривать две программы для создания таких соединений, мы обсудим ее для настройки GPRS/EDGE-соединения — это более актуально в наши дни, нежели модемное соединение. Вам нужно раздобыть настройки GPRS вашего оператора. Проще всего найти компьютер, подключенный к Интернету, и зайти на сайт оператора. В большинстве случаев там все описано. Если нет, то придется звонить в службу поддержки оператора и записывать параметры под диктовку. Для подключения к Интернету мы будем использовать программу wvdial — это значительно проще, чем создавать собственные скрипты для демона pppd. Данная программа обычно входит в состав дистрибутива, но не устанавливается по умолчанию. Поэтому ее нужно установить: rpm -ihv wvdial* sudo apt-get install wvdial yum install wvdial конфиг: /etc/wvdial.conf ---------------- [Dialer Defaults] # Порт, к которому подключен телефон Modem = /dev/ttyS0 # если телефон подключен к COM-порту # Modem = /dev/ircomm0 # инфракрасный порт # Modem = /dev/ttyUSB0 # телефон подключен по USB # Modem = /dev/ttyACM0 # телефон подключен по USB (см. примечание) # Скорость Baud = 115200 # можно не изменять # Стандартная строка инициализации модема Init1 = ATZ # Строка инициализации GPRS Init2 = AT+CGDCONT=1,"IP","AP" # Не изменяйте эти параметры # Для контрактных абонентов некоторых операторов опцию ISDN нужно # установить в 1 ISDN = 0 Modem Type = Analog Modem Carrier Check = no # Номер, по которому осуществляется соединение Phone = *99# # Имя пользователя и пароль Username = логин Password = пароль ---------------- ПРИМЕЧАНИЕ Некоторые телефоны, подключаемые к компьютеру по USB, определяются в Linux как устройства /dev/ttyACMn (где n — номер). Следовательно, если не выходит подключиться с использованием устройства /dev/ttyUSB0, тогда следует попробовать использовать устройство /dev/ttyACMn. Давайте разберемся, что нужно изменить вам "под себя". Во-первых, имя модема. В данном случае используется первый последовательный порт (ttyS0). Если вы подключаетесь с помощью USB-кабеля, то нужно указать другое имя устройства, например ttyUSB0. Во-вторых, необходимо указать точку доступа своего оператора (AP) — эту информацию надо получить у него. Например, для МТС точка доступа будет такой: internet.mts.ru. Затем следует изменить телефон доступа. Он зависит не только от оператора, но и от модели самого телефона, например: *99# — для телефонов Nokia, Ericsson, Motorola, SonyEricsson, Sendo *99***1# — для телефонов Siemens, Alcatel, Handspring, LG, Panasonic, Mitsubishi, Sagem *99**1*1# — для Samsung. Комбинация логина и пароля зависит от вашего оператора — например, для МТС нужно указать имя пользователя mts и такой же пароль (тоже mts). Уточните эти параметры у своего оператора. |
64. Текстовые браузеры
1 2 3 |
Если графический режим недоступен (например, на сервере), а по сети побродить хочется, можно использовать текстовый браузер lynx. В некоторых дистрибутивах вместо lynx используются браузеры links и elinks, но суть остается той же — просмотр страниц Интернета в текстовом режиме. В современных дистрибутивах текстовые браузеры не устанавливаются по умолчанию, поэтому их нужно установить отдельно. |
65. Команда ftp: FTP-клиент
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
Для открытия соединения с любым FTP-сервером введите команду: ftp <имя или адрес FTP-сервера> Можно просто ввести команду ftp, а в ответ на приглашение ftp> ввести команду: open <имя или адрес FTP-сервера> Подключившись к серверу, вы можете ввести команду help, чтобы просмотреть список доступных команд. Для получения справки по той или иной команде введите help <имя_команды>. Наиболее популярные команды: ls Вывести содержимое каталога get Загрузить файл с сервера put Загрузить файл на сервер mget Получить несколько файлов с сервера. Допускается использование масокфайлов, например *.rpm mput Загрузить несколько файлов на сервер cd Изменить каталог mkdir Создать каталог rmdir Удалить пустой каталог delete Удалить файл |
66. Команда wget: загрузка файлов
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
Программа wget — это лучший текстовый менеджер закачки файлов. Программа поддерживает протоколы HTTP, HTTPS и FTP. Использовать ее нужно так: wget [параметры] URL Некоторые параметры: --background Перейти в фоновый режим после запуска --quiet Тихий режим, сообщения wget не выводятся --input-file=file Считать URL из файла file, файл не обязательно должен быть в формате HTML. Если вы указали URL в файле и в командной строке, то сначала будут загружены URL из командной строки, апотом из файла --force-html Обязательно считать файл, указанный в предыдущем параметре, HTML-файлом --tries=number Устанавливает количество попыток загрузки URL --no-clobber Если при загрузке файла оборвалось соединение, то этот параметр позволит продолжить загрузку с места обрыва --continue Возобновление загрузки файла, например, если прервалась связь. Этот параметр нужно использовать, если вы забыли укаать параметр --no-clobber, а связь прервалась и вам нужно докачать файл, а не начинать его загрузку заново --wait=seconds Задает паузу в секундах между загрузками и повторами, что позволяет снизить нагрузку на сервер --quota=quota Задает максимальный размер загружаемых файлов (в байтах, килобайтах (после числа указывается k) и мегабайтах (после числа — m)). Квота не работает при загрузке одного файла, поскольку даже если квота превышена, то текущий файл загружаетсядо конца (если есть физически место на диске) --http-user=user Задают имя пользователя при HTTP-аутентификации, тип аутентификации устанавливается автоматически программой --http-passwd=pass Задают пароль при HTTP-аутентификации, тип аутентификации устанавливается автоматически программой --proxy-user=user Задают имя пользователя прокси-сервера --proxy-passwd=pass Задают пароль прокси-сервера --passive-ftp Пассивный режим FTP, обычно используется при наличии брандмауэра --recursive Включить рекурсивную загрузку, которая используется для рекурсивной загрузки сайтов --level=depth Максимальная длина рекурсивной загрузки (по умолчанию5 уровней) Примеры использования: wget --recursive http://site.ru wget http://site.ru/1.zip wget -r -l 10 -k http://example.org/ Скопировать весь сайт целиком wget --user=login --password=password ftp://ftp.example.org/some_file.iso - использование имени пользователя и пароля на FTP/HTTP wget --continue --recursive --level=1 http://www.vereskmed.ru/music/album_1/ - Ну вот для примера простая команда для скачивания всего первого альбома wget ftp://login:password@ftp.example.org/some_file.iso - использование имени пользователя и пароля на FTP/HTTP wget ftp://myftpserver/имя.abc wget -c ftp://myftpserver/имя.abc wget -t 20 --retry-connrefused http://mydownloadserver/имя.iso wget -p -k -E -H http://mysite.com/site.html wget -r -l 4 -p -E -k http://mysite.com |
67. Сеть. Конфигурационные файлы.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 |
В большинстве случаев сеть в Linux настраивается с помощью графических конфигураторов, а в консоли администратор может разве что протестировать настройки. Но когда-то сеть настраивалась только вручную — путем конфигурационных файлов. Да и конфигураторы — это не технология НЛО, а просто графическая оболочка, редактирующая те же самые конфигурационные файлы. Может, вы и не будете никогда редактировать эти файлы вручную, но просто обязаны знать, где и что хранится. /etc/aliases База данных почтовых псевдонимов. Формат этого файла очень прост: псевдоним пользователь /etc/aliases.db Системой на самом деле используется не файл /etc/aliases, а файл /etc/aliases.db, который создается программой newaliases по содержимому файла /etc/aliases. Поэтому после редактирования этого файла не забудьте выполнить от имени root команду newaliases /etc/hosts.conf Содержит параметры разрешения доменных имен. Например, директива order hosts,bind означает, что сначала поиск IP-адреса по доменному имени будет произведен в файле /etc/hosts, а затем лишь будет выполнено обращение к DNS-серверу, заданному в файле /etc/resolv.conf. Директива multi on означает, что одному доменному имени могут соответствовать несколько IP-адресов /etc/hosts В этом файле можно прописать IP-адреса и имена узлов локальной сети, но обычно здесь указывается только IP-адрес узла localhost (127.0.0.1), потому что сейчас даже в небольшой локальной сети устанавливается собственный DNS-сервер /etc/hosts.allow Содержит IP-адреса узлов, которым разрешен доступ к сервисам данного узла /etc/hosts.deny Содержит IP-адреса узлов, которым запрещен доступ к сервисам данного узла /etc/hostname В Debian/Ubuntu содержит имя узла /etc/iftab Содержит таблицу интерфейсов, т. е. соответствие имен интерфейсов и их MAC-адресов /etc/motd Файл задает сообщение дня (Message of the day). Данный файл используется многими сетевыми сервисами (например, FTP- и SSH-серверами), которые при регистрации пользователя могут выводить сообщение из этого файла /etc/network/interfaces В Debian и Ubuntu применяется для ручной настройки сетевых интерфейсов (не с помощью NetworkManager). Вообще принято настраивать сетевые интерфейсы с помощью NetworkManager, но некоторые администраторы предпочитают отключать его и настраивать сетевые интерфейсы вручную — по старинке /etc/rc.config В старых версиях SUSE (не openSUSE) содержит имя компьютера, IP-адрес интерфейса и другую сетевую информацию /etc/resolv.conf Задает IP-адреса серверов DNS. Формат файла прост: nameserver IP-адрес Всего можно указать четыре DNS-сервера. В Ubuntu этот файл автоматически перезаписывается при установке соединения с Интернетом — сюда записываются адреса DNS-серверов, полученных от провайдера, что не совсем хорошо, особенно, когда вы настроили собственный DNS-сервер и желаете его использовать. Тут два пути: Остановить Network-Manager и удалить симлинк /etc/resolv.conf, создать файл /etc/resolv.conf и настроить его. (при обновлении что то может поломается) Или настроить "/etc/systemd/resolved.conf" (достаточно надежный метотд) /etc/route.conf В старых версиях SUSE данный файл содержит описание статических маршрутов, в том числе и маршрут по умолчанию /etc/services База данных сервисов, задающая соответствие символьного имени сервиса (например, pop3) и номера порта (110/tcp, tcp —это наименование протокола) /etc/sysconfig/network Параметры сетевого интерфейса в Fedora, Red Hat и других дистрибутивах, основанных на Fedora/Red Hat, например, ASPLinux, Mandriva /etc/sysconfig/static-routes Статические маршруты в Fedora/CentOS/ASPLinux /etc/sysconfig/network/routes Статические маршруты в современных версиях openSUSE /etc/sysconfig/network-scripts/ifcfg-имя Параметры конкретного сетевого интерфейса, например, параметры интерфейса eth0 хранятся в файле /etc/sysconfig/network-scripts/ifcfg-eth0 Параметры конкретного сетевого интерфейса, например, параметры интерфейса eth0 хранятся в файле (дистрибутив Fedora) /etc/sysconfig/network/ifcfg-имя Параметры конкретного сетевого интерфейса (имя — имя сетевого интерфейса). Дистрибутив openSUSE /etc/xinetd.conf Файл конфигурации суперсервера xinetd, предназначенного для запуска сетевых сервисов, которые не работают в автономном режиме /etc/NetworkManager/system-connections/ В дистрибутивах, использующих NetworkManager, в этом каталоге хранятся настройки соединений: в отдельных файлах — по одному для каждого соединения. При этом название файла соответствует названию соединения, введенному при настройке |
68. Команда mii-tool
1 2 3 4 5 6 7 8 9 10 11 12 |
Современные сетевые адаптеры поддерживают несколько скоростей передачи данных: 10, 100 и 1000 Мбит/с, а также два режима передачи данных: полудуплексный и полнодуплексный. Для просмотра параметров сетевого интерфейса выполните команду: mii-tool -v eth0 Для установки режима используется опция -force: mii-tool -force=режим интерфейс Например: mii-too -force=10baseT-FD eth0 |
69. Сетевой сканер nmap
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
Программа nmap предназначена для сканирования как отдельных узлов, так и целых сетей с любым количеством узлов, определения состояния узлов сканируемой сети, а также открытых портов на этих узлах. Сетевой сканер nmap использует множество самых разных методов сканирования — UDP, TCP connect, TCP SYN, ICMP (ping) и т. д. Результат работы сканера — список отсканированных портов удаленного узла с указанием номера и состояния порта, используемого протокола, а также названия службы, использующей этот порт. У порта может быть три состояния: открыт, фильтруемый, не фильтруемый. Первое состояние означает, что удаленная машина прослушивает данный порт. Второе состояние сигнализирует, что брандмауэр блокирует доступ к этому порту и nmap не может определить его состояние. Третье состояние означает, что порт просто закрыт. Примеры использования nmap nmap параметры цель Цель — это узел или список узлов для сканирования. Предположим, что мы хотим знать, какая операционная система запущена на удаленном узле. Для этого нужно запустить nmap с опцией -O: nmap -O узел Сканер позволяет просканировать сразу несколько узлов. Для этого их адреса нужно указать так: nmap 192.168.1.1-100 В приведенном примере будут просканированы узлы от 192.168.1.1 до 192.168.1.100. Можно также указать имена узлов через пробел, например, так: nmap host1 host2 Чтобы просканировать узел на предмет открытых портов, укажите просто его адрес, никаких опций указывать не нужно, например: nmap 192.168.1.2 Как уже отмечалось ранее, nmap позволяет также узнать список запущенных служб, для этого нужно использовать опцию -sV: nmap -sV 192.168.1.2 Еще один интересный тип сканирования — кто онлайн? Сканер позволяет просканировать сеть и определить доступные узлы. Для этого используется опция -sP: nmap -sP 192.168.1.1-254 |
70. информация о пользователях
1 2 3 4 5 6 7 8 9 10 11 |
users - выводит информацию о пользователях, подключенных к системе в данный момент. w — список пользователей, подключенных к системе; виртуальный терминал, с которого работает пользователь время входа в систему для каждого пользователя, статистику использования системы (IDLE — время простоя, JCPU — использование процессора), выполняемые каждым пользователем задачи who — список пользователей, подключенных к системе; время и дату входа каждого пользователя whoami — имя пользователя, который ввел команду ftpwho - похожа на команду who, но выводит только пользователей FTP-сервера, подключенных в данный момент к серверу |
71. Мониторинг работы системы
1 2 3 4 5 6 7 8 9 10 |
htop — расширенная версия top mpstat — расширенная статистика использования ресурсов системы в процентах. Программа не устанавливается по умолчанию, нужно установить пакет sysstat Прервать выполнение программы можно нажатием комбинации клавиш <Ctrl>+<C> vmstat — расширенная статистика использования виртуальной памяти. Прервать выполнение программы можно нажатием комбинации клавиш <Ctrl>+<C> iostat — статистика использования прерываний |
72. Планировщик at
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
Иногда нужно просто выполнить конкретные команды в определенное время (однократно), поэтому редактировать для этого таблицу crontab не совсем уместно. Такую задачу можно решить более рационально. Убедитесь, что у вас установлен и запущен демон atd. После этого введите команду: at <время> [дата] Затем просто вводите команды, которые вы хотите выполнить в указанное время. Для завершения ввода нажмите комбинацию клавиш <Ctrl>+<D>. Время указывается в AM/PM-формате — например, если вам нужно выполнить команды в 14:00, то вы должны ввести команду: at 2pm. Команды atq и atrm Просмотреть очередь заданий можно командой atq, а удалить какое-либо задание — командой atrm. В целях повышения безопасности в файл /etc/at.deny можно добавить команды, которые запрещены для выполнения планировщиком at. |
73. Планировщик crond
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
В Linux есть специальный демон crond, позволяющий выполнять программы по расписанию. Откройте конфигурационный файл демона crond — /etc/crontab ---------------------------------------------------------- SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root HOME=/ # run-parts 01 * * * * root nice -n 19 run-parts --report /etc/cron.hourly 02 4 * * * root nice -n 19 run-parts --report /etc/cron.daily 22 4 * * 0 root nice -n 19 run-parts --report /etc/cron.weekly 42 4 1 * * root nice -n 19 run-parts --report /etc/cron.monthly ---------------------------------------------------------- Но самое главное — не эти параметры, а сама таблица расписаний, занимающая в нашем случае последние четыре строки листинга. Согласно этой таблице, каждый час будут выполняться программы из каталога /etc/cron.hourly, каждый день — из каталога /etc/cron.daily, каждую неделю — из каталога /etc/cron.weekly и раз в месяц — из каталога /etc/cron.monthly. Но иногда нужно создать более гибкое расписание. Например, мы хотим, чтобы одна программа выполнялась в 7:00, а другая в 7:20. Тут простым добавлением сценария в каталог /etc/cron.daily уже не отделаешься. Чтобы создать такое расписание, вам придется изучить формат записей таблицы расписаний: минуты (0−59) часы (0−23) день (1−31) месяц (1−12) день_недели (0−6, 0 — Вс) команда Чтобы реализовать наше расписание, следует добавить в файл /etc/crontab такие строки: 0 7 * * * /usr/bin/command1 arguments 20 7 * * * /usr/bin/command2 arguments Первая команда будет запускаться каждый день в 7 часов утра, а вторая — тоже каждый день, но в 7:20. |
74. Команды free и df: информация о системных ресурсах
1 2 |
Команда free выводит информацию об использовании оперативной и виртуальной памяти, а df — об использовании дискового пространства. |
75. Команда ssh: удаленный вход в систему
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
Восстав любого дистрибутива Linux входят: SSH-сервер (программа, которая и обеспечивает удаленный доступ к компьютеру, на котором она установлена) и SSH-клиент (программа, позволяющая подключаться к SSH-серверу). Для установки SSH-сервера нужно установить пакет openssh (это разновидность SSH-сервера), а для установки SSH-клиента — пакет openssh-clients. Работать с SSH-клиентом очень просто. Для подключения к удаленному компьютеру введите команду: В качестве адреса можно указать как IP-адрес, так и доменное имя компьютера. ssh [опции] <адрес_удаленного_компьютера> ssh -l user 10.0.0.1 ssh user@host ssh user@10.0.0.1 Параметры: -c blowfish|3des|des Применяется для выбора алгоритма шифрования при условии, что используется первая версия протокола SSH (об этом позже). Можно указать blowfish, des или 3des -c шифр Задает список шифров, разделенных запятыми в порядке предпочтения. Опция используется для второй версии SSH. Можно указать blowfish, twofish, arcfour, cast, des и 3des -f Переводит ssh в фоновый режим после аутентификации пользователя. Рекомендуется использовать для запуска программы X11. Например: ssh –f server xterm -l имя_пользователя Указывает имя пользователя, с правами которого нужно зарегистрироваться на удаленном компьютере. Опцию использовать не обязательно, поскольку удаленный компьютер и так запросит имя пользователя и пароль -p порт Определяет порт SSH-сервера (по умолчанию используется порт 22) -q "Тихий режим". Будут отображаться только сообщения о фатальных ошибках. Все прочие предупреждающие сообщения в стандартный выходной поток выводиться не будут -x Отключает перенаправление X11 -X Задействовать перенаправление X11. Полезна при запуске X11-программ -1 Использовать только первую версию протокола SSH -2 Использовать только вторую версию протокола SSH. Вторая версия протокола более безопасна, поэтому при настройке SSH-сервера нужно применять именно ее |
76. Устройства и драйверы
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
uname –a — получить версию ядра, при установке настоящих Linux-драйверов (а не Windows-драйверов через ndiswrapper) нужно, чтобы модуль (так в Linux называются драйверы) был откомпилирован для соответствующей версии ядра dmidecode — показывает информацию о BIOS компьютера lsdev — информация об установленных устройствах (нужно установить пакет procinfo) lshal — выводит параметры всех устройств lspci, lsusb, lshw — помогают идентифицировать ваше устройство, выводят соответственно список PCI-устройств, список USB-устройств и список оборудования компьютера lsmod — выводит список загруженных модулей (драйверов устройств) dmesg - лог загрузки ядра dmesg -f - наблюдение за логом ядра (в этот момент удобно втыкать usb устройства например) dmesg | less — просмотреть сообщения ядра Следующие команды пригодятся для настройки сетевых интерфейсов, в том числе и беспроводных: iwconfig — просмотреть информацию обо всех беспроводных интерфейсах iwlist scan — найти беспроводные сети; sudo dhclient wlan0 — обновить IP-адрес и другие сетевые параметры интерфейса wlan0 (имя может быть другим), предварительно получив их от DHCP сервера route — просмотреть и изменить таблицу маршрутизации sudo /etc/init.d/networking restart — перезапустить сеть sudo killall NetworkManager — остановить NetworkManager iwevent — просмотреть события беспроводной сети sudo /etc/init.d/dbus restart — перезапустить все сетевые демоны. Рассмотрим еще несколько программ. Программа badblocks позволяет проверить жесткий диск на наличие сбойных блоков. Проверка выполняется очень просто: badblocks -v <имя_устройства> Например: # badblocks -v /dev/hda Параметр -v включает подробный режим работы, о каждом действии программа badblocks будет выводить отчет. Желательно выполнять программу в однопользовательском режиме, чтобы ее работе ничто не мешало. Для тестирования оперативной памяти предназначена программа memtest86, которая работает по-особому. После ее установки создается специальный загрузочный образ, а для запуска программы вы должны перезапустить компьютер и выбрать этот образ из меню загрузчика. Но обо всем по порядку. Установите пакет memtest86. Вслед за этим выполните команду memtest-setup, которая настроит загрузочный модуль. Вот теперь начинается самое интересное. Перезагрузите систему и выберите из меню загрузчика только что созданную программой memtest-setup запись. Запустится программа memtest86, которая сразу начнет тестировать вашу оперативную память и, если произойдет ошибка, непременно сообщит вам об этом. С помощью программы hdparm можно выполнить тонкую настройку винчестера, что иногда позволяет существенно повысить его производительность. Раньше, скажем, ~10 лет , об этой программе много говорили, поскольку разработчики дистрибутивов устанавливали отказоустойчивые параметры винчестера, при которых он работал очень медленно. Тестирование производительности жесткого диска выполняется командой: # hdparm -t /dev/sda Установка скорости 4x для привода CDROM: # hdparm –E 4 /dev/sr0 hddtemp Выводит температуру винчестера (нужно заметить, что эта программа работает далеко не со всеми жесткими дисками) smartmontools Мониторинг SMART-устройств. Как правило, это жесткие диски с возможностью самодиагностики. Такой диск сам "скажет", сколько ему осталось, чтобы его отказ не стал для вас неприятной неожиданностью bonnie Тестирование производительности винчестера cpuburn Тестирование процессора. Выполняет так называемый стресс-тест процессора. Суть его заключается в том, что программа загружает ваш процессор на все 100% и продолжает работу в таком режиме. При наличии неполадок в системе, например нагрева процессора из-за плохой вентиляции, это обязательно проявится во время стресс-теста в виде сбоя screentest Тестирование/настройка монитора |
77. Конфигурационный файл GRUB2
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
Команды grub-mkconfig и update-grub файл GRUB2 — /boot/grub/grub.cfg. Этот конфигурационный файл не редактируется вручную, поскольку для его создания используется утилита /usr/sbin/grub-mkconfig, которая генерирует этот конфигурационный файл на основе шаблонов, хранящихся в каталоге /etc/grub.d, и настроек из файла /etc/default/grub. В кавычках после menuentry находится описание элемента меню — можете заменить этот текст на все, что вам нравится. Далее следуют команды GRUB2. Напри-мер, команда insmod ext2 загружает модуль ext2. Это не модуль ядра Linux! Это модуль GRUB2 — файл ext2.mod, находящийся в каталоге /boot/grub. Команда set root устанавливает загрузочное устройство. Формат имени устройства такой же, как в случае с GRUB2. ВНИМАНИЕ! Мы знаем, что даже ATA-диски в новых дистрибутивах имеют имена вида /dev/sda*. Но команда set root загрузчика GRUB2 содержит имя hd. Это не опечатка! Это внутреннее имя устройства GRUB, а не имя системного устройства. После служебного слова linux задаются ядро (файл ядра) и параметры, которые будут переданы ядру. Служебное слово initrd указывает на файл initrd. Теперь рассмотрим файл /etc/default/grub, содержащий параметры GRUB2. Поскольку этот файл вы будете редактировать чаще, чем grub.cfg. --------------------------------------------------------------- # Если вы измените этот файл, введите команду 'update-grub' # для обновления вашего файла /boot/grub/grub.cfg. # Элемент по умолчанию, нумерация начинается с 0 GRUB_DEFAULT=0 # Чтобы увидеть меню GRUB, нужно или закомментировать следующую # опцию, или установить значение больше 0, но в этом случае # нужно изменить значение GRUB_HIDDEN_TIMEOUT_QUIET на false GRUB_HIDDEN_TIMEOUT=0 GRUB_HIDDEN_TIMEOUT_QUIET=true # Тайм-аут (в секундах) GRUB_TIMEOUT="10" # Название дистрибутива — вывод команды lsb_release или просто Debian GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian` # Параметры ядра по умолчанию GRUB_CMDLINE_LINUX_DEFAULT="quiet splash" GRUB_CMDLINE_LINUX="" # Раскомментируйте для отключения графического терминала # (только для grub-pc) #GRUB_TERMINAL=console # Разрешение графического терминала #GRUB_GFXMODE=640x480 # Раскомментируйте следующую опцию, если вы не хотите передавать # параметр "root=UUID=xxx" ядру Linux #GRUB_DISABLE_LINUX_UUID=true # Раскомментируйте, если нужно отключить генерацию элемента меню # режима восстановления #GRUB_DISABLE_LINUX_RECOVERY="true" --------------------------------------------------------------- После изменения файла /etc/default/grub не забудьте запустить команду update-grub для обновления вашего /boot/grub/grub.cfg. |
78. Системы инициализации Linux
1 2 3 4 5 6 7 8 9 10 |
Для работы с виртуальным диском используется технология initrd (INITial RamDisk). Файл образа виртуального диска находится в каталоге /boot и называется initrd-<версия ядра>. В процессе запуска ядра монтируется корневая файловая система и запускается программа init, которая и выполняет дальнейшую инициализацию системы. Программа init — часть init, самой надежной и распространенной системы инициализации Linux, которая используется многими дистрибутивами Кроме системы инициализации init существуют и другие системы, в частности: initng, upstart и systemd: система initng позволяет существенно ускорить запуск Linux, но, к сожалению, она так и осталась экспериментальной и не прижилась в дистрибутивах Linux. Ни в один из современных дистрибутивов она не включена, поэтому ее мы рассматривать не будем система upstart была специально разработана для дистрибутива Ubuntu, но ее при желании можно установить в любом дистрибутиве система systemd — современная система инициализации, заменившая init в последних версиях дистрибутивов Fedora, openSUSE, Mandriva и некоторых других |
79. Система инициализации init
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 |
Итак, программа init читает конфигурационный файл /etc/inittab и запускает другие процессы, согласно инструкциям этого файла Файл /etc/inittab ----------------- id:5:initdefault: # Инициализация системы si::sysinit:/etc/rc.d/rc.sysinit l0:0:wait:/etc/rc.d/rc 0 l1:1:wait:/etc/rc.d/rc 1 l2:2:wait:/etc/rc.d/rc 2 l3:3:wait:/etc/rc.d/rc 3 l4:4:wait:/etc/rc.d/rc 4 l5:5:wait:/etc/rc.d/rc 5 l6:6:wait:/etc/rc.d/rc 6 # Что делать при нажатии Ctrl-Alt-Delete ca::ctrlaltdel:/sbin/shutdown -t3 -r now # От UPS была получена команда, что пропало питание. # Немного ждем и выключаем компьютер pf::powerfail:/sbin/shutdown -f -h +2 "Power Failure; System Shutting Down" # От UPS получена команда, что питание возобновилось # Отменяем shutdown pr:12345:powerokwait:/sbin/shutdown -c "Power Restored; Shutdown Cancelled" # Запуск gettys 1:2345:respawn:/sbin/mingetty tty1 2:2345:respawn:/sbin/mingetty tty2 3:2345:respawn:/sbin/mingetty tty3 4:2345:respawn:/sbin/mingetty tty4 5:2345:respawn:/sbin/mingetty tty5 6:2345:respawn:/sbin/mingetty tty6 # Однопользовательский режим ~~:S:wait:/bin/sh ----------------- Одна из главных инструкций файла /etc/inittab выглядит так: id:<число>:initdefault: Эта инструкция задает уровень запуска по умолчанию. Уровень запуска определяет, какие действия будут выполнены программой init (какие процессы будут запущены). Всего предусмотрено шесть уровней запуска: 0 — останов системы (ясно, что в качестве уровня по умолчанию этот уровень быть не может) 1 — однопользовательский режим (в него можно перейти сразу при загрузке, передав ядру параметр single) 2 — многопользовательский режим без поддержки сети 3 — многопользовательский режим с поддержкой сети 4 — не используется 5 — многопользовательский графический режим с загрузкой X11 и поддержкой сети 6 — перезагрузка системы В большинстве случаев в качестве уровня запуска по умолчанию устанавливается 3 или 5 Команда init Перейти на тот или иной уровень можно и после загрузки системы. Для этого используется команда: /sbin/init <уровень_запуска> "Вычислив" уровень запуска, init поочередно запускает сценарии из каталога /etc/rc.d/rcX.d, где X — это номер уровня запуска. Если зайти в один из этих каталогов, например в /etc/rc.d/rc3.d, то можно увидеть ссылки формата: S<номер><имя> Параметр <номер> определяет порядок запуска сценария (например, S10network запустится раньше, чем S11internet), а параметр <имя> задает имя сценария. Сами сценарии находятся в каталоге /etc/rc.d/init.d. Ссылки, начинающиеся на символ S, — это ссылки запуска (от англ. start), при запуске соответствующих сценариев им будет передан аргумент start. Например, если init обнаружила в /etc/rc.d/rc3.d файл S10network, то она выполнит команду: /etc/rc.d/init.d/network start Если имя ссылки начинается на букву K (от англ. kill), то это ссылка останова сервиса, например K01service. Данная ссылка указывает на команду: /etc/rc.d/init.d/service stop Вы можете запустить любой сценарий из каталога init.d непосредственно, передав ему параметры start (запуск), stop (останов) и др. (зависит от сервиса). Команда service А можете воспользоваться командой service: service <имя_сервиса> <start|stop|...> Здесь <имя_сервиса> — это имя файла в каталоге /etc/rc.d/init.d. В openSUSE имеется удобная команда: rc<имя_сервиса> <start|restart|stop> Так, для запуска Apache можно использовать команду: rcapache start |
80. Система инициализации systemd
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 |
Система systemd построена на концепции модулей (units). У каждого модуля есть свое имя и тип. Например, модуль типа nscd.service управляет сервисом (демоном) nscd. Основными типами модулей являются: service (сервис) — демоны, которые можно запустить, перезапустить, остановить. Для совместимости с SysV (пока еще не все привыкли к systemd) в системе есть возможность чтения традиционных сценариев управления демонами. Как обычно, они находятся в каталоге /etc/init.d. Ради справедливости нужно отметить, что в openSUSE 12.1 содержимое каталога init.d такое же, как и было раньше (при использовании init), поэтому сразу и не заметишь, что используется новая система инициализации. А вот в Fedora 16 сценариев в init.d гораздо меньше и сразу видно — что-то тут не так socket (сокет) — реализует сокет, расположенный в файловой системе или Интернете. Поддерживаются сокеты AF_INET, AF_INET6, AF_UNIX. У каждого сокета есть связанный с ним сервис. Например, при попытке установки соединения с сокетом nscd.socket будет запущен сервис nscd.service. Вам это ничего не напоминает? А я вспоминаю старый суперсервер inetd и его более новую версию xinetd — они работали именно так device (устройство) — реализует устройство в дереве устройств. Если устройство описано через правила udev, то его можно представить в systemd как модуль типа device mount (точка монтирования) — реализует точку монтирования в файловой системе. Демон systemd контролирует все точки монтирования, их подключение и отключение. Теперь файл /etc/fstab не главный, а используется как дополнительный источник информации о точках монтирования, хотя вы по-прежнему можете описывать в нем ваши точки монтирования automount (автоматическая точка монтирования) — реализует автоматическое монтирование файловой системы. Такой модуль имеет соответствующий ему модуль типа mount, который будет запущен, как только файловая система станет доступной target (цель) — служит для логической группировки модулей других типов. Этот тип модуля очень важен, но в то же время он ничего не делает, а просто группирует другие модули. В systemd больше нет уровней запуска (которые были в init), вместо них используются цели. Например, цель multi-user.target описывает, какие сервисы (точнее, модули, а не только сервисы) должны быть запущены в многопользовательском режиме. По сути, цель multi-user.target аналогична 3-му уровню запуска snapshot (снимок) — также ничего не делает, а только ссылается на другие модули. Снимки используются в двух случаях. Первый случай — временный перевод системы в какое-то состояние, например, в однопользовательский режим, и последующий возврат из этого состояния. Второй — поддержка режима suspend. Многие демоны не могут правильно переходить в этот режим. Во многих случаях их лучше остановить и запустить заново, после того как система проснется. Основные особенности systemd Перечислим основные особенности systemd: - позволяет контролировать для каждого процесса: среду исполнения, ограничение ресурсов, рабочий каталог, корневой каталог, umask, параметр nice, ID пользователя и группы и многое другое - синтаксис файлов конфигурации systemd очень похож на синтаксис файлов .desktop и поэтому будет знаком многим Linux-пользователям совместимость со сценариями SysV (правда, не могу пока сказать — временная или постоянная). Если есть старая (например, /etc/init.d/avahi) и новая (/etc/systemd/system/avahi.service) конфигурации, то используется новая - для удобства и обратной совместимости поддерживается и обрабатывается файл /etc/fstab; - совместимость с /dev/initctl. На практике это означает, что многие системные команды вроде poweroff, shutdown будут работать с новой системой systemd - система init использовала для инициализации множества shell-скриптов, которые для большей эффективности были переписаны на языке C и помещены непосредственно в /sbin/systemd. Монтирование виртуальных файловых систем, установка имени узла — все это и многое другое делается теперь без shell-сценариев - состояние сервиса может контролироваться через D-Bus (системе upstart такое и не снится). Конечно, это далеко не все особенности systemd, но остальные знать и не обязательно. Начнем с файла /etc/inittab, который в случае с systemd представляет собой обычный текстовый файл. Теперь это просто набор комментариев, никак не влияющий на поведение системы Файл /etc/inittab ----------------- # inittab is no longer used when using systemd. # # ADDING CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM. # # Ctrl-Alt-Delete is handled by /etc/systemd/system/ctrl-alt-del.target # # systemd uses 'targets' instead of runlevels. By default, # there are two main targets: # # multi-user.target: analogous to runlevel 3 # graphical.target: analogous to runlevel 5 # # To set a default target, run: # # ln -s /lib/systemd/system/<target name>.target # /etc/systemd/system/default.target # ----------------- Первые две строки здесь сообщают, что этот файл больше не используется systemd, и добавление в него конфигурации никак не повлияет на систему. Далее (строка 3) сообщается, что реакция на комбинацию клавиш <Ctrl>++<Alt>+<Delete> содержится в файле /etc/systemd/system/ctrl-alt-del.target. Но по умолчанию этого файла нет, а нажатие комбинации <Ctrl>+<Alt>+<Delete> обрабатывается на уровне GNOME3 и теперь трактуется как выход из системы, а не перезагрузка. Что делать, если вы хотите отказаться от комбинации <Ctrl>++<Alt>+<Delete> вообще? Откройте Параметры системы, запустите апплет Клавиатура, перейдите на вкладку Комбинации клавиш и затем в группу Система. Вы увидите описание действия (Выйти из системы) и соответствующую ему комбинацию клавиш. Чтобы запретить реакцию на эту комбинацию клавиш, щелкните по действию и нажмите клавишу <Пробел>. Желаете вернуть старое поведение системы, чтобы она перезагружалась при нажатии <Ctrl>+<Alt>+<Delete>? Создайте файл /etc/systemd/system/ctrl-alt-del.target, точнее не файл, а ссылку. Ссылаться она должна на файл /lib/systemd/system/reboot.target: ln -s /lib/systemd/system/reboot.target /etc/systemd/system/ctrl-altdel.target Вернемся к файлу inittab. Там сказано (строка 4), что вместо уровней запуска systemd использует цели. Существуют две основных цели: multi-user.target, аналогичная уровню выполнения 3, или же ц graphical.target, аналогичная 5-му уровню запуска. Чтобы установить цель по умолчанию, нужно создать ссылку: ln -s /lib/systemd/system/имя_цели.target /etc/systemd/system/default.target По умолчанию default.target ссылается на /lib/systemd/system/runlevel5.target. В свою очередь, runlevel5.target — это просто ссылка на graphical.target. Исследуем systemd дальше. Зайдите в каталог /etc/systemd/system. В нем вы найдете ряд каталогов вида <имя цели>.wants. В этих каталогах имеются ссылки на другие модули системы systemd. Все они ссылаются на файлы в /lib/systemd/system. Зайдите в каталог multi-user.target.wants. В нем вы найдете список ссылок на файлы NetworkManager.service, abrt-ccpp.service, atd-service и т. д. Вам это ничего не напоминает? Похоже на содержимое 3-го уровня запуска. Как видите, никаких сложностей. Далее предлагаю продолжить знакомство с системой самостоятельно. Там все очень просто, даже проще, чем вы думаете. /lib/systemd/system/graphical.target ------------------------------------ [Unit] Description=Graphical Interface Requires=multi-user.target After=multi-user.target Conflicts=rescue.target AllowIsolate=yes [Install] Alias=default.target ------------------------------------ Рассмотрим самые важные параметры этого файла: - параметр Requires указывает, что данная цель требует выполнения цели multiuser. target (заменяет 3-й уровень запуска) - данная цель должна быть выполнена после multi-user.target (параметр After) - параметр Conflicts указывает на цель (или цели — в этом случае они перечисляются через пробел), с которой конфликтует данная цель. Теперь откройте цель multi-user.target и посмотрите, от какой цели зависит она. Вы обнаружите, что она зависит от basic.target, которая, в свою очередь, зависит от других целей. Просмотрите файлы целей — файл за файлом. Так вы существенно глубже сможете понять новую систему инициализации. |
81. Команды системного администратора
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
Многие администраторы привыкли использовать команды service и chkconfig. Они по-прежнему работают в мире systemd Команда init Команда systemd Описание service s start systemctl start s.service Разовый запуск сер-виса s service s stop systemctl stop s.service Остановить сервис s service s restart systemctl restart s.service Перезапуск сервиса s system s status systemctl status s.service Статус сервиса s ls /etc/rc.d/init.d ls /lib/systemd/system/*.service Получение списка служб /etc/systemd/system/*.service chkconfig s on systemctl enable s.service Включает запуск сервиса после перезагрузки (сервис s будет загружаться автоматически) chkconfig s off systemctl disable s.service Отключает автоматический запуск сервиса s chkconfig s systemctl is-enabled s.servive Проверяем, запускается ли s автоматически chkconfig s --list ls /etc/systemd/system/*.wants/s.service Выводит список целей(уровней запуска), на которых сервис будет запускаться автоматически |
82. Пользователь root
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
Пользователь root обладает максимальными полномочиями в системе. Система полностью подвластна этому пользователю. Любая команда будет безоговорочно выполнена системой. Поэтому работать под именем пользователя root нужно с осторожностью. Всегда думайте над тем, что собираетесь сделать. Если вы дадите команду на удаление корневой файловой системы, система ее выполнит. Если же вы попытаетесь выполнить определенную команду, зарегистрировавшись под именем обычного пользователя, система сообщит вам, что у вас нет полномочий. Представим, что кто-то решил пошутить и выложил в Интернете (записал на диск или прислал по электронной почте — не важно) вредоносную программу. Если вы ее запустите от имени пользователя root, система может быть уничтожена. Запуск этой же программы от имени обычного пользователя ничего страшного не произведет — система просто откажется ее выполнять. Или же все может быть намного проще — вы ошибочно введете команду, которая разрушит вашу систему. Или просто отойдете ненадолго от своего компьютера, а тут сразу же появится доброжелатель, — имея полномочия пользователя root, уничтожить систему можно одной командой. Именно поэтому практически во всех современных дистрибутивах вход как root запрещен. Отсюда можно сделать следующие выводы: - старайтесь реже работать пользователем root - всегда думайте, какие программы вы запускаете под именем root - если программа, полученная из постороннего источника, требует root-полномочий, это должно насторожить - создайте обычного пользователя (даже если вы сами являетесь единственным пользователем компьютера) и рутинные операции (с документами, использование Интернета и т. д.) производите от имени этого пользователя - если полномочия root все же нужны, совсем необязательно заходить в систему под этим пользователем, достаточно запустить терминал и выполнить команду su. После этого в терминале можно выполнять команды с правами root. Если вы закроете терминал, то больше не сможете работать с правами root. Очень удобно — ведь обычно права root нужны для одной-двух операций (например, выполнить команду установки программы или создать/удалить пользователя). |
83. sudo \ su \ gksudo \ gksu \ Как работать без root.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 |
Некоторые операции, например установка программного обеспечения, изменение конфигурационных файлов, требуют полномочий root. Чтобы их временно получить, нужно использовать команды sudo или su (эти команды, скорее всего, выбудете запускать в терминале). Команда sudo позволяет запустить любую команду с привилегиями root. Использовать ее нужно так: sudo <команда, которую нужно выполнить с правами root> Например, вам необходимо изменить файл /etc/apt/sources.list. Для этого используется команда: sudo nano /etc/apt/sources.list ПОЯСНЕНИЕ Программа nano — это текстовый редактор, мы ему передаем один параметр — имя файла, который нужно открыть. Если ввести эту же команду, но без sudo (просто nano /etc/apt/sources.list), текстовый редактор тоже запустится и откроет файл, но сохранить изменения вы не сможете, поскольку у вас не хватит полномочий. Программа sudo перед выполнением указанной вами команды запросит у вас пароль: sudo nano /etc/apt/sources.list Password: Вы должны ввести свой пользовательский пароль — тот, который применяете для входа в систему, но не пароль пользователя root (кстати, мы его и не знаем). ПРИМЕЧАНИЕ Использовать команду sudo имеют право не все пользователи, а только те, которые внесены в файл /etc/sudoers. Администратор системы (пользователь root) может редактировать этот файл с помощью команды visudo. Если у вас дистрибутив, который запрещает вход под учетной записью root (следовательно, у вас нет возможности отредактировать файл sudoers), то в файл sudoers вносятся пользователи, которых вы добавили при установке системы. su Команда su позволяет получить доступ к консоли root любому пользователю (даже если пользователь не внесен в файл /etc/sudoers) при условии, что он знает пароль root. Понятно, что в большинстве случаев этим пользователем будет сам пользователь root — не будете же вы всем пользователям доверять свой пароль? Поэтому команда su предназначена в первую очередь для администратора системы, а sudo — для остальных пользователей, которым иногда нужны права root (чтобы они меньше отвлекали администратора от своей работы). Использовать команду su просто: После этого нужно ввести пароль пользователя root, и вы сможете работать в консоли как обычно. Использовать su удобнее, чем sudo, потому что вам не нужно вводить su перед каждой командой, которая должна быть выполнена с правами root. Чтобы закрыть сессию su, нужно или ввести команду exit или просто закрыть окно терминала. В случае если вы запускаете какую-нибудь графическую программу, нуждающуюся в привилегиях root, вы увидите окно с требованием ввести свой пароль. gksu Если вы в терминале хотите запустить графическую программу с правами root (например, gedit), желательно использовать не программу sudo, а программу gksudo или gksu (для Ubuntu) и kdesu (для Kubuntu). Графические приложения с правами root проще запускать, используя главное меню. Но не все приложения есть в главном меню, или не все приложения вызываются с правами root — например, в главном меню есть команда вызова текстового редактора, но нет команды для вызова текстового редактора с правами root. Поэтому намного проще нажать клавиатурную комбинацию <Alt>+<F2> и в открывшемся диалоговом окне Выполнить программу ввести команду в соответствующее поле gksu <команда> Ввод серии команд sudo Вам надоело каждый раз вводить sudo в начале команд? Тогда выполните команду: sudo –i Данная команда запустит оболочку root, т. е. вы сможете вводить любые команды, и они будут выполнены с правами root. Обратите внимание, что изменится приглашение командной строки. До этого приглашение имело вид $, означающий, что вы работаете от имени обычного пользователя, а после выполнения программы приглашение изменилось на # — это верный признак того, что каждая введенная команда будет выполнена с правами root. Опция -i позволяет так же удобно вводить команды, как если бы вы использовали команду sudo. Преимущества и недостатки sudo К преимуществам sudo можно отнести следующее: - вам не нужно помнить несколько паролей (т. е. ваш пароль и пароль пользователя root) — вы помните только свой пароль и вводите его, когда нужно - с помощью sudo вы можете выполнять практически те же действия, что и под именем root, но перед каждым действием у вас будет запрошен пароль, что позволит еще раз подумать о правильности своих действий - каждая команда, введенная с помощью sudo, записывается в журнал /var/log/auth.log, поэтому в случае чего вы хотя бы будете знать, что случилось, прочитав этот журнал. У вас также будет храниться история введенных команд с полномочиями root, в то время как при работе под именем root никакой журнал не ведется - предположим, некто захотел взломать вашу систему. Этот некто не знает, какие учетные записи есть в вашем компьютере, зато уверен, что учетная запись root есть всегда. Знает он также, что, завладев паролем к этой учетной записи, можно получить неограниченный доступ к системе. Но не к вашей системе — у вас учетная запись root отключена! - вы можете разрешать и запрещать другим пользователям использовать полномочия root (позже мы разберемся, как это сделать), не предоставляя пароль root, т. е. практически нет риска скомпрометировать учетную запись root (впрочем, риск есть всегда, ведь при неправильно настроенной системе можно легко изменить пароль root с помощью команды sudo). У sudo есть и недостатки. - Неудобно использовать перенаправление ввода/вывода, например команда sudo ls /etc > /root/somefile работать не будет, вместо нее нужно использовать команду: sudo bash -c "ls /etc > /root/somefile" Длинновато, правда? - Имеются и неудобства, связанные с технологией NSS. К счастью, она используется не очень часто, поэтому основной недостаток sudo будет связан только с перенаправлением ввода/вывода. |
84. Создание, удаление и модификация пользователей стандартными средствами
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
Для добавления нового пользователя выполните следующие команды (от имени root): # adduser <имя пользователя> # passwd <имя пользователя> Первая команда (adduser) добавляет пользователя, а вторая (passwd) изменяет его пароль. Ясно, что и в первом, и во втором случае вы должны указать одно и то же имя пользователя. ПРИМЕЧАНИЕ В некоторых дистрибутивах вместо команды adduser используется команда useradd, а команды adduser вообще не существует. В дистрибутивах, например в Ubuntu и Debian, сценарий adduser не только добавляет пользователя, но позволяет указать дополнительную информацию о пользователе и сразу же задать его пароль. В дистрибутивах (например, в openSUSE) вместо команды adduser используется команда useradd. Программы adduser и useradd обычно находятся в каталоге /usr/sbin. Команду passwd может использовать не только администратор, но и сам пользователь для изменения собственного пароля. Обратите внимание: если пароль слишком прост для подбора, программа passwd выдаст соответствующее предупреждение — BAD PASSWORD и сообщит, чем же наш пароль плох (в нашем случае в основе пароля лежит словарное слово, что делает пароль легким для подбора). |
85. Команда usermod
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
Для модифицирования учетной записи пользователя можно применять команду usermod. Формат вызова команды следующий: usermod [параметры] LOGIN -a, --append Добавляет пользователя в дополнительную группу. Используется только с параметром -G -c, --commentКОММЕНТАРИЙ Изменяет комментарий пользователя. Комментарий удобнее изменять с помощью команды chfn -d, --homeКАТАЛОГ Изменяет домашний каталог пользователя -e, --expiredateДАТА Устанавливает дату отключения учетной записи. Дата устанавливается в формате ГГГГ-ММ-ДД -f, --inactiveДНИ Устанавливает число дней после даты отключения учетной записи, на протяжении которых можно изменить пароль. Если число дней равно 0, то учетная запись блокируется сразу после устаревания пароля -g, --gidГРУППА Задает идентификатор (число, GID) начальной группы пользователя -G, --groupsГ1[,Г2,...[,ГN]]] Задает список дополнительных групп, в которые будет входить пользователь. Список групп задается через запятую без дополнительных пробелов. Если пользователь уже является членом группы, которой нет в списке, он будет удален из этой группы. Поведение программы можно изменить, добавив параметр -a, в этом случае пользователь просто будет добавлен в дополнительные группы, а если он уже являлся членом других групп, которых нет в списке, то он не будет удален из них -l, --loginНОВОЕ_ИМЯ Изменяет имя пользователя -L, --lock Заблокировать пароль пользователя. Не используйте этот параметр вместе с параметрами -p или -U. Параметр -L блокирует только вход по паролю, но есть и другие способы аутентификации, поэтому если вам нужно полностью заблокировать учетную запись, используйте параметр -e -o, --non-unique При использовании с параметром -u позволяет задавать не уникальный идентификатор пользователя -p, --passwordПАРОЛЬ Задает новый пароль пользователя. Нужно указать не сам пароль, а его хэш. Поэтому для смены пароля проще использовать команду passwd -s, --shellОБОЛОЧКА Задает новую оболочку пользователя -u, --uidUID Задает идентификатор пользователя. Идентификатор должен быть уникальным, если не задан параметр -o. Идентификаторы 0—999 зарезервированы для системных учетных записей -U, --unlock Разблокировать пароль пользователя Примеры: usermod -c "User FTP" -g system -d /ftp/user1 -s /bin/nologin user1 - изменить атрибуты пользователя usermod -L test - заблокировать пользователя test usermod -u test - разблокировать пользователя test usermod -d /server1/home/aborg/ -m aborg - перемещает домашний каталог пользователя со всем содержимым. Сначала указывается новый каталог, а затем имя пользователя usermod -s /bin/false foober - можно лишить пользователя доступа к командному процессору и все же лучше всего придерживаться варианта с passwd -l и -u usermod -I aborg anitab - сменить имя usermod -u 1200 anitab - сменить UID Самый частый кейс это добавление пользователя в группы: usermod -a -G tty pi - добавляем пользователя pi группу tty usermod -a -G dialout pi - добавляем пользователя pi группу dialout usermod -aG kvm user_name usermod -aG libvirtd user_name |
86. Команда userdel
1 2 |
Для удаления пользователя используется команда userdel: # userdel <имя пользователя> |
87. Подробно о создании пользователей
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
Давайте разберемся, что же происходит при создании новой учетной записи пользователя. Во-первых, создается запись в файле /etc/passwd. Формат записи следующий: имя_пользователя:пароль:UID:GID:полное_имя:домашний_каталог:оболочка Рассмотрим фрагмент этого файла (две строки): root:x:0:0:root:/root:/bin/bash usver:x:500:500:Usver:/home/usver:/bin/bash Здесь: - первое поле — это логин пользователя, который он вводит для регистрации в системе. Пароль в современных системах в этом файле не указывается, а второе поле осталось просто для совместимости со старыми системами. Пароли хранятся в файле /etc/shadow - третье и четвертое поля — это UID (User ID) и GID (Group ID) — идентификаторы пользователя и группы соответственно. Идентификатор пользователя root всегда равен 0, как и идентификатор группы root. Список групп вы найдете в файле /etc/groups - пятое поле — это настоящее имя пользователя. Может быть не заполнено, а может содержать фамилию, имя и отчество пользователя — все зависит от педантичности администратора системы, т. е. от вас. Если вы работаете за компьютером в гордом одиночестве, то, думаю, свою фамилию вы не забудете. А вот если ваш компьютер — сервер сети, тогда просто необходимо указать Ф. И. О. каждого пользователя, а то когда придет время обратиться к пользователю по имени, вы его знать не будете (попробуйте запомнить 500 фамилий и имен!) - шестое поле содержит имя домашнего каталога. Обычно это каталог /home/<имя_пользователя> - последнее поле — это имя командного интерпретатора, который будет обрабатывать введенные вами команды, когда вы зарегистрируетесь в консоли. В целях безопасности пароли были перенесены в файл /etc/shadow (доступен для чтения/записи только пользователю root), где они и хранятся в закодированном виде (используется алгоритм MD5 или — в некоторых системах — Blowfish). Узнать, с помощью какого алгоритма зашифрован пароль, очень просто: посмотрите на шифр — если он короткий и не начинается с символа $, то применен алгоритм DES (самый слабый и ненадежный — как правило, используется в старых дистрибутивах). Если же шифр начинается с символов $1$, то это MD5, а если в начале шифра имеются символы $2a$, то это Blowfish. Во-вторых, при создании пользователя создается каталог /home/<имя пользователя>, в который копируется содержимое каталога /etc/skel. Каталог /etc/skel содержит "джентльменский набор" — файлы конфигурации по умолчанию, которые должны быть в любом пользовательском каталоге. Название каталога skel (от англ.skeleton) полностью оправдывает себя — он действительно содержит "скелет" домашнего каталога пользователя. ПРИМЕЧАНИЕ Файл /etc/passwd можно редактировать с помощью обычного текстового редактора. То есть вы можете очень легко, не прибегая к помощи ни графического конфигуратора, ни команды usermod, изменить параметры учетной записи любого пользователя, например, задать для него другую оболочку или прописать его настоящую фамилию. Однако нужно быть осторожным при изменении домашнего каталога пользователя! Если вы это сделали, то, чтобы у пользователя не возникло проблем с правами доступа для нового каталога, нужно выполнить команду: chown –R <пользователь> <каталог> |
88. Группы пользователей
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
Иногда пользователей объединяют в группы. Группы позволяют более эффективно управлять правами пользователей. Например, у нас есть три пользователя: igor, pavel, alex, которые должны совместно работать над проектом. Их достаточно объединить в одну группу — тогда пользователи будут иметь доступ к домашним каталогам друг друга (по умолчанию один пользователь не имеет доступ к домашнему каталогу другого пользователя, поскольку пользователи находятся в разных группах). Создать группу, а также поместить пользователя в группу позволяют графические конфигураторы. Вы можете использовать их — они очень удобные, но если вы хотите стать настоящим линуксоидом, то должны знать, что доступные в системе группы указываются в файле /etc/group. Добавить новую группу в систему можно с помощью команды groupadd, но, как правило, удобнее добавить в текстовом редакторе еще одну запись в файл /etc/group, а изменить группу пользователя еще проще — для этого достаточно отредактировать файл /etc/passwd. Самый частый кейс это добавление пользователя в группы: usermod -a -G tty pi - добавляем пользователя pi группу tty usermod -a -G dialout pi - добавляем пользователя pi группу dialout usermod -aG kvm user_name usermod -aG libvirtd user_name |
89. Команды квотирования
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 |
Квотирование — это механизм ограничения дискового пространства пользователей. Linux — многопользовательская система, поэтому без ограничения дискового пространства вам не обойтись. Когда вы используете компьютер в гордом одиночестве, то все дисковое пространство доступно вам и только вам. А вот когда пользователей несколько, нужно ограничить доступное пространство, чтобы один из пользователей не "узурпировал" все место на диске. Как именно вы будете ограничивать дисковое пространство, решать только вам. Можно поделить дисковое пространство поровну между пользователями, можно одним пользователям отдать больше места, а другим — меньше. На домашнем компьютере квотирование вряд ли понадобится, а на сервере, как правило, для каталога /home отводится отдельный раздел жесткого диска. Поэтомуmбудем считать, что у нас есть отдельный раздел, который монтируется к каталогу /home. Перед настройкой квот нужно установить пакет quota. Больше ничего устанавливать не нужно. Чтобы пользователи не потеряли свои данные, перезагрузитесь в однопользовательский режим (параметр ядра single). Вот теперь можно приступать к редактированию квот. Первым делом разрешим устанавливать квоты на разделе, который содержит файлы пользователей. Откройте /etc/fstab: nano /etc/fstab Далее добавьте параметр usrquota к списку параметров раздела: /dev/sda5 /home ext4 defaults,usrquota 0 2 Затем перемонтируем /home, т. к. мы только что изменили его параметры: mount -o remount /home Механизм квотирования требует создания файлов aquota.user и aquota.group, но поскольку мы не будем устанавливать квоты для групп, а только для пользователей, то создадим только файл aquota.user: touch /home/aquota.user chmod 600 /home/aquota.user После этого введите команду: quotacheck -vagum !!! Поскольку мы создали файл aquota.user вручную, то вы увидите сообщение об ошибке, но это только в первый раз — далее все будет нормально. Теперь отредактируем квоты для пользователя user: edquota -u user Будет запущен текстовый редактор по умолчанию, и вы увидите следующий текст: ---------------------------------------------------------------------------- Disk quotas for user user (uid 1001): Filesystem blocks soft hard inodes soft hard /dev/sda5 16 0 0 5 0 0 ---------------------------------------------------------------------------- Разберемся, что есть что: - blocks — место в блоках, используемое пользователем (1 блок = 1 Кбайт) - soft — максимальное дисковое пространство (в блоках по 1 Кбайт), которое может занимать пользователь. Если вы включите период отсрочки (grace period), то пользователь получит только лишь сообщение о превышении квоты - hard — жесткое ограничение, эту квоту пользователь превысить не может, даже если включен период отсрочки. Предположим, что вы хотите "отдать" пользователю 500 Мбайт. В качестве жесткой квоты можно установить значение 500 Мбайт (или 500 000 блоков), а в качестве "мягкой" квоты установить значение 495 Мбайт (495 000 блоков). Когда пользователь превысит 495 Мбайт, он получит сообщение о превышении квоты, а вот если будет превышена жесткая квота, то пользователь больше не сможет сохранять файлы в своем домашнем каталоге - inodes — число используемых пользователем файлов Настройка периода отсрочки: edquota -t Вы должны вместо 7days вписать свой период отсрочки, при этом используйте названия единиц измерения времени на английском: - seconds — секунды - minutes — минуты - hours — часы - days — дни - weeks — недели - months — месяцы Например: - 24hours — 24 часа - 2days — 2 дня - 1weeks — 1 неделя Для просмотра квот применяется команда repquota, например: repquota /home |
90. Команда dmesg: вывод сообщений ядра
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 |
wiki: http://ru.wikipedia.org/wiki/PAE http://ru.wikipedia.org/wiki/NX_bit http://ru.wikipedia.org/wiki/MTRR При загрузке Linux выводятся сообщения ядра: информационные (об имеющемся оборудовании, о поддерживаемых протоколах и технологиях и т. д.) и диагностические (например, об ошибках). Однако современные компьютеры настолько быстры, что вы просто не успеете заметить их появление на экране. Не беда, все сообщения всегда можно прочитать после загрузки системы с помощью команды: dmesg | less Порядок загрузки ядра: NX protection - функция запрета исполнения вредоносного кода Современные процессоры поддерживают функцию NX-защиты (NX — сокращение от No eXecute). Это защита областей памяти, которая используется для предотвращения распространения вирусов, "троянских коней" и других вредоносных программ. Довольно часто вредоносные программы нарочно вызывают переполнение буфера, после чего записывают свой код в область данных и передают ему управление. Функция NX-защиты как раз предотвращает развитие данного сценария на аппаратном уровне. Если ваше ядро и процессор поддерживают NX-бит, то вы увидите примерно такое сообщение: Using x86 segment limits to approximate NX protection DMI (Direct Media Interface) - это изобретение Intel и представляет собой шину соединения южного и северного мостов материнской платы. По сути, DMI должно относиться только к процессорам Intel, но и работает для процессора AMD. Ядро полностью выводит модель материнской платы вместе с версией BIOS MTRR - информация о диапазонных регистрах памяти SMP — Symmetrical MultiProcessing \ MP — MultiProcessing SMP MP-таблица Это означает, что либо у нас двухпроцессорный компьютер, либо у нашего компьютера двухъядерный процессор. ЧИСЛО HIGHMEM available ЧИСЛО LOWMEM available Ядро сообщает объем оперативной памяти. Складываем, округляем результат. Kernel command line: Сообщает откуда было запущенно ядро Пример ядро загрузилось с диска: Kernel command line: BOOT_IMAGE=/vmlinuz-linux root=UUID=94ddc883-2a31-47f6-9924-cc32e5a27859 rw rootfstype=ext4 loglevel=3 quiet Пример система была запущена с LiveCD: Kernel command line: initrd=initrd0.img root=live:CDLABEL=Live.iso rootfstype=auto ro liveimg quiet rhgb rd.luks=0 rd.md=0 rd.dm=0 xdriver=vesa nomodeset BOOT_IMAGE=vmlinuz0 Параметр ro говорит ядру о необходимости смонтировать корневую файловую систему в режиме "только чтение" (в процессе загрузки она будет перемонтирована в режим "чтение/запись", rw). Корневая файловая система задается меткой LABEL. Параметр quiet вообще выключает сообщения, выводимые ядром, т. е. если ядру передан данный параметр, сообщений ядра при загрузке системы вы вообще не увидите. Зато их можно потом получить командой dmesg или просто просмотреть файл /var/log/dmesg. Initializing CPU#0 - инициализация первого процессора, точнее, первого ядра процессора Memory: - подробная информация об использовании памяти virtual kernel memory layout - информацию о выделении виртуальной памяти ядра Detected ЧИСЛО MHz processor. - частота процессора tsc: Detected - частота процессора BogoMIPS Ядро вычисляет производительность процессора в так называемых BogoMIPS . Здесь MIPS — аббревиатура от Millions of Instructions Per Second, а Bogo — происходит от bogus (фальшивый, поддельный). Префикс Bogo ставит под сомнение актуальность вычисленной ядром величины, поэтому Линус Торвальдс (кстати, BogoMIPS — это его изобретение) и назвал ее фальшивой. Security Framework initialized Система контроля доступа SELinux, которая может быть либо выключена, либо работать в одном из двух режимов: принудительном (permissive) или режиме предупреждений. Еще через несколько строк вы увидите полное наименование процессора CPU0: Потом будет выведена дата и время загрузки А затем — строки, относящиеся к инициализации шины PCI, распределению PCI-ресурсов Послу будут жесткие диски \ ssd \ nvme \ sdrom \ ata \ scasi \ sd input: - Подключенные мыши \ клавиатуры \ микрофоны \ колонки \ звук \ видео \ наушники и т.д. input: USB Optical Mouse as input: Logitech Wireless Mouse input: PC Speaker input: Logitech USB Receiver input: HDA Intel PCH HDMI/DP input: HDA Intel PCH Mic input: HDA Intel PCH Headphone i8042: PNP: PS/2 Controller input: AT Translated Set 2 keyboard Linux video capture interface: - веб-камера r8169 Gigabit Ethernet driver - сетевая карта В конце управление передается системе инициализации Linux. |
91. Параметры ядра
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 |
Параметры ядра позволяют управлять поведением ядра. Как уже говорилось, мы можем передать параметры ядру непосредственно при загрузке, используя меню загрузчика, или же прописать параметры ядра в файлах конфигурации загрузчика. Первый случай подходит для "одноразового" использования того или иного параметра, а второй — если параметр нужен для корректной работы системы. Поэтому, чтобы не указывать его каждый раз при загрузке Linux, намного проще прописать его в файле конфигурации загрузчика. Если вы используете GRUB/GRUB2, то передать параметры ядру можно так: сначала надо выбрать образ (метку), а затем нажать клавишу <e>. Появится строка, в которой вы можете отредактировать параметры ядра. Чтобы передать ядру Linux параметры, вы должны ввести их в следующем фор- мате: метка параметры Например: Linux noapic root=устройство Позволяет указать корневую файловую систему. Например, root=/dev/sda5 rootdelay=N Ждать N секунд перед монтированием корневой файловой системы rootflags=флаги Задает флаги корневой файловой системы rootfstype=тип Задает тип корневой файловой системы. Полезен, если не удалось определить автоматически rootwait Ожидание корневой файловой системы. Ядро будет ждать, пока не появится устройство с корневой ФС. Полезно, когда корневая файловая система расположена на съемном носителе, например на флешке ro Монтирует корневую файловую систему в режиме "только чтение". Используется по умолчанию. После проверки файловой системы программой fsck корневая файловая система перемонтируется в режим rw rw Монтирует корневую файловую систему в режиме "чтение/запись". При использовании этого параметра нельзя запускать программы типа fsck. Перед запуском fsck нужно перемонтировать корневую файловую систему в режиме ro mem= Определяет объем памяти, установленной в компьютере. Иногда ядро неправильно определяет объем оперативной памяти. Вы можете помочь ему в этом, указав параметр mem. Только указывать его нужно правильно, например: mem=768M После числа обязательно должна следовать буква М, иначе ядро "подумает", что объем оперативной памяти 768 байтов. В современных дистрибутивах дела с памятью обстоят лучше. Скорее всего, параметр mem указывать вы не будете, но есть шанс столкнуться с иной неприятной ситуацией. Компьютерная индустрия не стоит на месте, и вы можете купить компьютер с оперативной памятью более 4 Гбайт, а потом обнаружить, что ваш дистрибутив видит только первые 4 Гбайт. В этом случае вам нужно перекомпилировать ядро с поддержкой PAE (Physical Address Extension) или же установить ядро, изначально поддерживающее PAE. init= Позволяет задать программу инициализации. По умолчанию используется программа /sbin/init, но вы можете задать другую программу reboot= Позволяет задать тип перезагрузки компьютера. Возможные значения: cold и warm, т. е. "холодная" или "горячая" перезагрузка single Однопользовательский режим для администрирования системы, например, в случае отказа nodmraid Отключает программные RAID-массивы, организованные на уровне BIOS noapic Полезен, если вы при загрузке увидите сообщение: kernel panic — not syncing: IO-APIC + timer doesn't work! nopcmcia Отключает PCMCIA-карты (для ноутбуков). Полезен, если вы подозреваете, что у вас проблемы с PCMCIA-картой nodma Отключается DMA (Direct Memory Access, прямой доступ к памяти) для всех IDE-устройств noapm Отключает APM (Advanced Power Management) — расширенное управление питанием nousb Отключает поддержку USB noscsi Отключает поддержку SCSI pci=noacpi Не использовать ACPI (Advanced Configuration and Power Interface) для управления PCI-прерываниями apci=off Полностью отключает ACPI. Полезен на некоторых ноутбуках, когда не удается установить (а потом загрузить) Linux edd=off Отключает EDD (Enhanced Disk Drive). Если при загрузке Linux вы видите сообщение Probing EDD и загрузка на этом останавливается, тогда вам поможет параметр ядра edd=off boot_delay=N Сообщения ядра выводятся так быстро, что вы не успеваете их прочитать? С помощью этого параметра вы можете установить задержку в N секунд перед выводом следующего сообщения ядра elevator=планировщик Позволяет выбрать планировщик ввода/вывода vga=режим Позволяет задать VGA-режим. Подробнее см. файл Documentation/svga.txt. Можно также задать значение ask, чтобы ядро спросило, какой режим нужно использовать: vga=ask quiet "Тихий" режим, отключает большинство сообщений ядра Производительность многозадачной системы в целом сильно зависит от правильного планирования процессов системы. Сейчас мы попытаемся с помощью параметра ядра elevator установить нужный нам алгоритм работы ядра, что позволит существенно повысить производительность системы. Допустимы следующие значения этого параметра: - none — значение по умолчанию - as — упреждающее планирование - cfg — "честная очередь" - deadline — планирование крайних сроков Для домашнего компьютера больше подойдут значения as и cfq: - в первом случае (значение as) ядро будет пытаться "угадать" ход программы, а именно: какую операцию ввода/вывода программа "захочет" выполнить в следующий раз. Если ядро будет правильно "угадывать", то производительность системы должна существенно увеличиться. Ясно, что работа данного алгоритма очень зависит от логики программы - во втором случае (значение cfq) ядро будет равномерно планировать операции ввода/вывода. Данный алгоритм будет работать лучше первого в случае с запутанной логикой программы, когда невозможно предугадать ее следующую операцию - последнее значение (deadline) больше подходит для сервера, чем для рабочей станции, поэтому существенного прироста от него не ждите. При загрузке передать параметр ядра можно так: linux elevator=значение |
92. Разделы опций ядра
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 |
General setup Общие параметры, например, поддержка своп-памяти, межпроцессного взаимодействия System V, Sysctl. Если не знаете, для чего нужна та или иная опция, выделите ее и нажмите клавишу <F1>. А уж если не знаете английский, то до его изучения лучше опции не выключать! Enable loadable module support Поддержка загружаемых модулей. Драйверы устройств в Linux разработаны в виде модулей ядра. Здесь вы можете указать, нужна ли вам поддержка модулей. Отключать поддержку модулей на обычных машинах не рекомендуется. Если же вы хотите построить малообслуживаемый сервер, работающий по принципу "построил и забыл", отключение поддержки загружаемых модулей позволит даже повысить безопасность сервера, поскольку злоумышленник не сможет добавить свой код в ядро путем загрузки модуля. Однако в этом случае ядро будет очень громоздким, потому что вам придется все нужные вам функции, которые были реализованы в виде модулей, компилировать в ядро Enable the block layer В этом разделе вы можете включить поддержку больших блочных устройств размером более 2 Тбайт Processor type and features Здесь вы можете выбрать тип вашего процессора и включить/выключить различные функции процессора Power management and ACPI options Опции управления питанием (ACPI, APM) Bus options Здесь вы можете включить/выключить поддержку различных системных шин, а также определить их функции Executable file formats / Emulations Параметры поддержки форматов исполнимых файлов Networking support Сетевые опции ядра Device drivers Драйверы устройств. Здесь вы можете определить, какие устройства должна поддерживать ваша система, а какие — нет Firmware drivers Драйверы микропрограммного обеспечения (поддержка различных BIOS) File systems Здесь вы можете определить, какие файловые системы должна поддерживать ваша система, а какие — нет Kernel Hacking Различные параметры, относящиеся непосредственно к ядру Security options Параметры безопасности Cryptographic API Параметры криптографии (поддержка различных алгоритмов шифрования данных) Virtualization Параметры виртуализации Library routines Поддержка различных библиотечных функций (но если заглянуть в этот раздел, то вы увидите, что все эти функции связаны с вычислением контрольной суммы CRC) Unofficial 3rd party kernel additions Неофициальные дополнения ядра (от посторонних разработчиков). Сюда разработчики дистрибутива (не ядра) могут включать дополнительные модули. Вообще будьте осторожны, потому что среди них могут быть экспериментальные функции, включение которых отрицательно отразится на стабильности системы Опции ядра могут быть либо включены, либо выключены. Если опция выключена, то ее код исключается из ядра (при компиляции ядра он не будет учитываться). Если же опция включена, то ее код будет включен в состав ядра. Но есть еще третье состояние опции: M. Это означает, что опция будет включена в ядро как модуль. После сборки ядра и модулей все опции, скомпилированные в режиме M, будут "лежать" на диске, пока не понадобятся ядру. А как только это произойдет, будет загружен нужный модуль. make oldconfig make menuconfig |
93. Компиляция ядра
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
После настройки ядра конфигуратор сообщит, что для построения ядра нужно ввести команду make, а для вывода справки — make help. Спешить с вводом make не будем — ее ввести мы успеем всегда. Лучше введите "make help" для ознакомления с параметрами команды make. Если вы внимательно прочитаете вывод команды "make help", то узнаете, что команда make (без параметров) аналогична команде make all, которая соберет следующие цели: - vmlinuz — собирает обычное, "большое" ядро - modules — собирает модули ядра - bzImage — собирает сжатое ядро, которое помещается в каталог arch/i386/boot Теперь понятно, что мы можем просто ввести команду make — она проделает как раз то, что нам нужно: make Но это еще не все. Мы только откомпилировали модули и ядро, но пока не устанавливали их. Для установки модулей введите команду: make modules_install После установки модулей следует установить ядро. Это можно сделать с помощью команды: make install В процессе установки будет добавлена соответствующая метка в файл конфигурации загрузчика. После этого следует ввести команду reboot для перезагрузки. В процессе компиляции ядра создается много ненужных после его завершения файлов (у меня такого "мусора" набралось на 3 Гбайт), а команда make clean позволяет весь этот "мусор" удалить. Так что, в заключение произведем "генеральную уборку" — откройте терминал и от имени root введите команды: cd /usr/src/linux make clean |
94. Программирование на языке C.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
Давайте проверим, установлен ли gcc в вашей системе. Введите команду: gcc --version Создаем файл hello.c ------- #include <stdio.h> int main(int argc, char** argv) { printf("Hello, world!\n"); return 0; } ------- Теперь введите команду: gcc -o hello hello.c Параметр -o задает имя исполняемого файла, который должен создать компилятор (по умолчанию, если имя не задано, будет создан файл a.out). После компиляции программы в нашем случае будет создан файл hello, который можно запустить так: ./hello Вы увидите знакомое всем программистам приветствие: Hello, world! У компилятора gcc очень много параметров, их можно разбить на следующие группы: - общие параметры - параметры языка - параметры препроцессора - параметры компоновщика - параметры каталогов - параметры отладки - параметры оптимизации К общим параметрам относятся параметры -x, -c, -v и -o. С параметром -o мы уже знакомы — он задает имя результирующего файла. Параметр -v полезен начинающим программистам, которые хотят больше знать о процессе компиляции или же компиляции сложных проектов, чтобы получить больше информации о самом процессе. Параметр -x задает тип языка программы, например: gcc -x c -o hello hello.c В качестве типа языка программы можно указать: c — самый обычный язык C objective_c — язык Objective C, не нужно путать с C++ c++ — это значение нужно указать, если программа написана на C++ assembler — для программ, написанных на языке Ассемблера Вообще, указывать тип языка необязательно, поскольку в большинстве случаев компилятор сам определит его. Параметр -c полезен, если вы хотите только откомпилировать вашу программу, но не вызывать компоновщик. В результате будет создан объектный файл с "расширением" .o. Процесс компиляции состоит из двух основных этапов: трансляции, когда создается объектный файл, и компоновки, когда создается исполняемый файл. Зачем вам нужен объектный файл, вы должны знать сами. wiki: https://ru.wikipedia.org/wiki/%D0%9A%D0%BE%D0%BC%D0%BF%D0%B8%D0%BB%D1%8F%D1%82%D0%BE%D1%80 https://ru.wikipedia.org/wiki/ANSI_C А вот среди параметра препроцессора нашлось сразу три полезных параметра: -include <файл> — позволяет откомпилировать указанный файл раньше, чем все остальные, иногда это полезно -nostdinc — запрещает использовать системный каталог с заголовками. При этом компилятор будет искать заголовки в каталогах, указанных с помощью параметра -I -nostdinc++ — то же самое, но для заголовков языка C++ Самым важным параметром компоновщика является параметр -l, позволяющий указать явно библиотеку, которая будет использоваться при сборке вашей программы. Например: gcc -lmy_lib hello.c Кроме этого, вы также можете использовать параметры -nostdlib и -static. Первый запрещает использовать все стандартные библиотеки, при этом будут использоваться библиотеки из каталогов, которые заданы параметром -L. Второй параметр задает статическую линковку, учтите, что размер результирующего файла существенно увеличится. К параметрам каталогов относятся уже знакомые нам параметры -I и -L. Первый задает каталог с файлами заголовков, а второй — каталог с библиотеками. К параметрам отладки относится параметр -g, добавляющий отладочную информацию для отладчика gdb. Вы можете отлаживать свои программы, только если добавили отладочную информацию с помощью параметра -g. Компилятор gcc может оптимизировать ваши программы, в результате они будут либо быстрее запускаться, либо размер исполнимого файла станет меньше. Поэкспериментируйте с параметрами -O1, -O2, -O3 — это различные уровни оптимизации. |
95. Команда make: сборка проекта
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
Серьезные проекты состоят не из одного C-файла, а, как минимум, из нескольких. Чтобы не вводить команды компиляции несколько раз, программисты используют специальные файлы с именем Makefile. В файле Makefile содержится список файлов, которые нужно откомпилировать, и опции компилятора для каждого файла. Файл Makefile ------------- hello: hello.c gcc -o hello hello.c ------------- Первая строка — это описание файла hello.c. Вторая строка — команда для компиляции этого файла. Обратите внимание, что перед командой gcc должен быть символ табуляции. Именно символ табуляции, а не 8 пробелов! Формат Makefile следующий: цель1: список_файлов последовательность команд цельN: список_файлов последовательность команд В Makefile вы можете использовать макроопределения, например: CC=gcc PATH=/usr/include /usr/my/include FLAGS=-O3 -Wall -I${PATH} ... $(CC) $(FLAGS) -c hello.c К макроопределению можно обратиться с помощью конструкции $(имя). После создания Makefile (он должен находиться в одном каталоге с файлом hello.c) для компиляции нашего проекта уже не нужно вводить команду с параметрами компилятора, достаточно просто ввести команду: make Параметры команды make: -C каталог Перейти в указанный каталог перед началом сборки программы -d Вывести отладочную информацию -f файл Использовать указанный файл вместо Makefile -i Игнорировать ошибки компилятора -l каталог В указанном каталоге будет произведен поиск файлов, указанных в Makefile -k Продолжить работу после ошибки, если это возможно -o файл Пропустить указанный файл -s Тихий режим. Не выводить команды перед их выполнением -w Показывать текущий каталог до и после выполнения каждой команды |
96. Команды из пакета binutils
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
Утилита strings, она подходит для поиска строк как в двоичных файлах, так и на разделах жесткого диска в случае повреждения таблицы разделов. Например: strings /dev/sdaX | grep 'искомая строка' Еще программы из пакета binutils: ld Компоновщик (создает из объектного файла исполняемый) nm Выводит названия идентификаторов из двоичных файлов objcopy Копирует и транслирует двоичные файлы objdump Выводит информацию из двоичных файлов size Выводит размер секций двоичного файла strings Выводит печатаемые строки из двоичных файлов |
97. Еще полезные программы для программиста:
1 2 3 4 5 6 7 8 |
strip — удаляет таблицу символов из объектного файла, что позволяет сократить размер этого файла, правда, отладить этот файл уже не получится. gprof — профайлер для ваших программ. Профайлер — это программа, позволяющая оптимизировать выполнение вашей программы. Для каждого вызова функции профайлер выводит время ее выполнения, что позволяет проанализировать, где происходит задержка выполнения, и оптимизировать код программы при необходимости. |
98. Команда gdb: отладка программ
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
Параметры gdb: -help Показать краткое описание всех параметров gdb -nx Запрет обработки команд файла инициализации .dgbinit -q Не показывать приветствие и информацию об авторских правах -batch Командный режим. Если отладчик возвращает 0, то были выполнены все команды, которые указаны в файле, заданном параметром -x. Если же были ошибки, отладчик возвращает ненулевое значение -f Используется при отладке программ с помощью интерфейса редактора Emacs -b bps Устанавливает скорость обмена (в битах в секунду) информации по последовательному интерфейсу, если вы отлаживаете программу удаленно. Вряд ли вы будете сейчас использовать эту опцию -tty=терминал Использовать указанный терминал в качестве стандартного вывода отладчика и отлаживаемой программы -s файл Читает таблицу символов из указанного файла -write Разрешить запись в исполняемые файлы -e программа Использовать указанную программу как фильтр дампа -se Считать таблицу символов из указанного файла, этот файл будет использоваться в качестве исполняемого -core=файл Указать файл дампа -x файл Выполнить указанные в файле команды. Используется вместе с параметром -batch -d каталог Добавить указанный каталог к списку каталогов исходного текста[prog|core|procID] Отлаживаемый объект: программа (prog), файл дампа (core), идентификатор процесса (procID) при отладке уже запущенной программы -p PID Подключиться к уже запущенному процессу Чтобы отладчик gdb мог отлаживать программу, нужно добавить служебную ин формацию к исполняемому файлу. Как правило, это делается при компиляции программы (параметр -g): gcc -g -o hello hello.c После этого вызываем отладчик так: gdb hello Если же программа запустилась и завершилась с ошибкой, будет создан файл дампа (core), его тоже можно "скормить" отладчику: gdb hello core Можно даже подключиться к уже запущенному процессу, для этого нужно знать PID этого процесса (его можно узнать с помощью команд ps и top): gdb 1234 Процесс отладки программы осуществляется путем ввода команд отладчика. break [файл:]функция Установить точку останова (breakpoint) run [параметры] Запускает программу и передает ей указанные параметры bt Обратная трассировка программы print выражение Вывести значение выражения. В выражении можно использовать переменные из вашей программы C Продолжить выполнение программы после остановки next Выполнить следующую строку программы. Если следующая строка — вызов функции, то она будет выполнена за один шаг step Выполнить следующую строку программы. Если следующая строка — вызов функции, то будут выполнены пошагово все операции функции. Команду next можно использовать, если вы точно уверены, что все ваши функции корректно работают. А вот step используется для более глубокой отладки программы help [имя] Выводит общую справку или справку по указанной команде quit Выход Использование gdb: Несколько слов о самом процессе отладки. Сначала нужно запустить gdb и загрузить в него программу. Затем нужно установить точку останова, например: break main Далее запускаем программу: run Выполнение программы дойдет до функции main() и остановится. Затем с помощью команд next и step вы запускаете пошаговое выполнение программы, а с помощью команды print просматриваете значение ее переменных. |
99. Настройка bash
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 |
bash — это самая популярная командная оболочка (командный интерпретатор) Linux. Основное предназначение bash — выполнение команд, введенных пользователем. Пользователь вводит команду, bash ищет программу, соответствующую команде, в каталогах, указанных в переменной окружения PATH. Если такая программа найдена, то bash запускает ее и передает ей введенные пользователем параметры. В противном случае выводится сообщение о невозможности выполнения команды. Файл /etc/profile содержит глобальные настройки bash, он влияет на всю систему — на каждую запущенную оболочку. Обычно /etc/profile не нуждается в изменении, а при необходимости изменить параметры bash редактируют один из файлов: ~/.bash_profile — обрабатывается при каждом входе в систему ~/.bashrc — обрабатывается при каждом запуске дочерней оболочки ~/.bash_logout — обрабатывается при выходе из системы Файл ~/.bash_profile часто не существует, а если и существует, то в нем есть всего одна строка: source ~/.bashrc Данная строка означает, что нужно прочитать файл .bashrc. Поэтому будем считать основным конфигурационным файлом файл .bashrc. Но помните, что он влияет на оболочку текущего пользователя (такой файл находится в домашнем каталоге каждого пользователя, не забываем: "~" означает домашний каталог). Если же вдруг понадобится задать параметры, которые повлияют на всех пользователей, то нужно редактировать файл /etc/profile. В файле .bash_history (тоже находится в домашнем каталоге) хранится история команд, введенных пользователем. Так что вы можете просмотреть свои же команды, которые вы накануне вводили. Какие настройки могут быть в .bashrc? Как правило, в этом файле задаются псевдонимы команд, определяется внешний вид приглашения командной строки, задаются значения переменных окружения. Псевдонимы команд задаются с помощью команды alias, вот несколько примеров: alias h='fc -l' alias ll='ls -laFo' alias l='ls -l' alias g='egrep -i' Псевдонимы работают просто: при вводе команды l на самом деле будет выполнена команда ls -l. Теперь рассмотрим пример изменения приглашения командной строки. Глобальная переменная PS1 отвечает за внешний вид командной строки. По умолчанию командная строка имеет формат: пользователь@компьютер:рабочий_каталог Значение PS1 при этом будет: PS1='\u@\h:\w$' \a ASCII-символ звонка (код 07). Не рекомендуется его использовать — очень скоро начнет раздражать \d Дата в формате "день недели, месяц, число" \h Имя компьютера до первой точки \H Полное имя компьютера \j Количество задач, запущенных в оболочке в данное время \l Название терминала \n Символ новой строки \r Возврат каретки \s Название оболочки \t Время в 24-часовом формате (ЧЧ: MM: СС) \T Время в 12-часовом формате (ЧЧ: ММ: СС) \@ Время в 12-часовом формате (AM/PM) \u Имя пользователя \v Версия bash (сокращенный вариант) \V Версия bash (полная версия: номер релиза, номер патча) \w Текущий каталог (полный путь) \W Текущий каталог (только название каталога, без пути) \! Номер команды в истории \# Системный номер команды \$ Если UID пользователя равен 0, будет выведен символ #, иначе —символ $ \\ Обратный слэш $ ( ) Подстановка внешней команды Вот пример альтернативного приглашения командной строки: PS1='[\u@\h] $(date +%m/%d/%y) \$' Вид приглашения будет такой: [user@host] 12/06/10 $ В квадратных скобках выводится имя пользователя и имя компьютера, затем используется конструкция $() для подстановки даты в нужном нам формате и символ приглашения, который изменяется в зависимости от идентификатора пользователя. Установить переменную окружения можно с помощью команды export, что будет показано позже. |
100. Первый сценарий на bash «Привет, мир!»
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
vim hello --------- #!/bin/bash echo "Привет, мир!" # Комментарий --------- Первая строка нашего сценария — это указание, что он должен быть обработан программой /bin/bash. Обратите внимание: если между # и ! окажется пробел, то данная директива не сработает, поскольку будет воспринята как обычный комментарий. Комментарии начинаются, как вы уже догадались, с решетки: # Комментарий Вторая строка — это оператор echo, выводящий нашу строку. Что бы сделать сценарий исполняемым нужно выдать ему бит execute: chmod +x hello Для запуска сценария введите команду: ./hello Чтобы вводить для запуска сценария просто hello (без ./), сценарий нужно скопировать в каталог /usr/bin (точнее, в любой каталог из переменной окружения PATH): # cp ./hello /usr/bin P.S. На самом деле можно на файл натравить сам bash bash hello |
101. Использование переменных в собственных сценариях
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
В любом серьезном сценарии вы не обойдетесь без использования переменных. Переменные можно объявлять в любом месте сценария, но до места их первого применения. Рекомендуется объявлять переменные в самом начале сценария, чтобы потом не искать, где вы объявили ту или иную переменную. Для объявления переменной используется следующая конструкция: переменная=значение ADDRESS='hostname' Пример объявления переменной: ADDRESS=www.dkws.org.ua echo $ADDRESS Обратите внимание на следующие моменты: - при объявлении переменной знак доллара не ставится, но он обязателен при использовании переменной - при объявлении переменной не должно быть пробелов до и после знака = Значение для переменной указывать вручную не обязательно — его можно прочитать с клавиатуры: read ADDRESS или со стандартного вывода программы: ADDRESS='hostname' Чтение значения переменной с клавиатуры осуществляется с помощью инструкции read. При этом указывать символ доллара не нужно. Вторая команда устанавливает в качестве значения переменной ADDRESS вывод команды hostname. В Linux часто используются переменные окружения. Это специальные переменные, содержащие служебные данные. Вот примеры некоторых часто используемых переменных окружения: BASH — полный путь до исполняемого файла командной оболочки bssh BASH_VERSION — версия bash HOME — домашний каталог пользователя, который запустил сценарий HOSTNAME — имя компьютера RANDOM — случайное число в диапазоне от 0 до 32 767 OSTYPE — тип операционной системы PWD — текущий каталог PS1 — строка приглашения UID — ID пользователя, который запустил сценарий USER — имя пользователя. Для установки собственной переменной окружения используется команда export: # присваиваем переменной значение $ADDRESS=ww.dkws.org.ua # экспортируем переменную — делаем ее переменной окружения # после этого переменная ADDRESS будет доступна в других сценариях export $ADDRESS |
102. Передача параметров сценарию
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
Очень часто сценариям нужно передавать различные параметры, например режим работы или имя файла/каталога. Для передачи параметров используются следующие специальные переменные: $0 — содержит имя сценария $n — содержит значение параметра (n — номер параметра) $# — позволяет узнать количество параметров, которые были переданы Рассмотрим небольшой пример обработки параметров сценария. Я понимаю, что конструкцию case-esac мы еще не рассматривали, но общий принцип должен быть понятен Пример обработки параметров сценария ------------------------------------ # Сценарий должен вызываться так: # имя_сценария параметр # Анализируем первый параметр case "$1" in start) # Действия при получении параметра start echo "Запускаем сетевой сервис" ;; stop) # Действия при получении параметра stop echo "Останавливаем сетевой сервис" ;; *) # Действия в остальных случаях # Выводим подсказку о том, как нужно использовать сценарий, и # завершаем работу сценария echo "Usage: $0 {start|stop }" exit 1 ;; esac ------------------------------------ |
103. Массивы и bash
1 2 3 4 5 |
Интерпретатор bash позволяет использовать массивы. Массивы объявляются подобно переменным. ARRAY[0]=1 ARRAY[1]=2 echo $ARRAY[0] |
104. Циклы
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
Как и в любом языке программирования, в bash можно использовать циклы. Мы рассмотрим циклы for и while, хотя вообще в bash доступны также циклы until и select, но они применяются довольно редко. Синтаксис цикла for выглядит так: for переменная in список do команды done В цикле при каждой итерации переменной будет присвоен очередной элемент списка, над которым будут выполнены указанные команды. Чтобы было понятнее, рассмотрим небольшой пример: for n in 1 2 3; do echo $n; done Обратите внимание: список значений и список команд должны заканчиваться точкой с запятой. Как и следовало ожидать, наш сценарий выведет на экран следующее: 1 2 3 Пример вложенных for: for i in 1 2 3; do for n in 1 2 3; do #echo $i #echo $n c=$(($i + $n)) echo "$i + $n = $c" done done Синтаксис цикла while выглядит немного иначе: while условие do команды done Цикл while выполняется до тех пор, пока истинно заданное условие. Подробно об условиях потом, а сейчас напишем аналог предыдущего цикла, т. е. нам нужно вывести 1, 2 и 3, но с помощью while, а не for: Пример выполняем пока n меньше 4 n=1 while [ $n -lt 4 ] do echo "$n " n=$(( $n+1 )); done Пример выполняем пока n=4: n=1 while : do test $n -eq 4 && break echo $n n=$(($n+1)) done |
105. Условные операторы
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
В bash доступны два условных оператора: if и case. Синтаксис оператора if следующий: if условие_1 then команды_1 elif условие_2 then команды_2 ... elif условие_N then команды_N else команды_N+1 fi Оператор if в bash работает аналогично оператору if в других языках программирования. Если истинно первое условие, то выполняется первый список команд, иначе — проверяется второе условие и т. д. Количество блоков elif, понятно, не ограничено. Самая ответственная задача — это правильно составить условие. Условия записываются в квадратных скобках. Вот пример записи условий: # Переменная N = 10 [ N==10 ] # Переменная N не равна 10 [ N!=10 ] Операции сравнения указываются не с помощью привычных знаков > или <, а с помощью следующих выражений: -lt — меньше -gt — больше -le — меньше или равно -ge — больше или равно -eq — равно (используется вместо ==) Применять данные выражения нужно следующим образом: [ переменная выражение значение|переменная ] Например: # N меньше 10 [ $N -lt 10 ] # N меньше A [ $N -lt $A ] В квадратных скобках вы также можете задать выражения для проверки существования файла и каталога: -e файл — условие истинно, если файл существует -d каталог — условие истинно, если каталог существует -x файл — условие истинно, если файл является исполняемым С оператором case мы уже немного знакомы, но сейчас рассмотрим его синтаксис подробнее: case переменная in значение_1) команды_1 ;; ... значение_N) команды_N ;; *) команды_по_умолчанию;; esac Значение указанной переменной по очереди сравнивается с приведенными значениями (значение_1, ..., значение_N). Если есть совпадение, то будут выполнены команды, соответствующие значению. Если совпадений нет, то будут выполнены команды по умолчанию. |
106. Функции
1 2 3 4 5 6 7 8 9 |
В bash можно использовать функции. Синтаксис объявления функции следующий: имя() { список; } Вот пример объявления и использования функции: list_txt() { echo "Выводим текстовые файлы" ls *.txt } |
107. Сценарий мониторинга журнала
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
Начнем с простого сценария мониторинга журнала. Системные журналы постоянно обновляются, а наш сценарий будет каждые 3 секунды выводить последние 15 строк выбранного вами журнала. Сценарий будет полезен при настройке системы, когда нужно постоянно просматривать журналы, чтобы понять, как система реагирует на новые настройки. Для прекращения работы сценария нужно нажать комбинацию клавиш <Ctrl>+<C>. #!/bin/bash # Сценарий logviever # Для прекращения работы сценария нужно нажать комбинацию клавиш <Ctrl>+<C> # Интервал обновления в секундах INT=3 while [ true ] do # Выводим последние 15 строк журнала tail -n 15 $1 # Ждем sleep $INT # Две пустые строки echo; echo done #Формат вызова следующий: #./сценарий файл_журнала #Например: #./script /var/log/messages #./script /var/log/syslog #bash logviever /var/log/syslog |
108. Переименование файлов
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
Следующий сценарий сложнее: он ищет файлы в текущем каталоге, в именах которых есть пробелы, и заменяет пробелы символами подчеркивания #!/bin/bash # Сценарий file_renamer # ищет файлы в текущем каталоге, в именах которых есть пробелы, и заменяет пробелы символами подчеркивания num=0 # Сколько файлов мы переименовали for filename in * # Перебираем все файлы в текущем каталоге do # Передаем имя файла фильтру grep # Если имя файла содержит пробел, то код завершения # последней операции равен 0 echo "$filename" | grep -q " " if [ $? -eq 0 ] then # Если код завершения равен 0, переименовываем файл fname=$filename n=`echo $fname | sed -e "s/ /_/g"` mv "$fname" "$n" let "num += 1" fi done echo "Переименовано файлов: $num" exit 0 |
109. Преобразование чисел dec в hex
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
Сейчас мы напишем простенький сценарий, преобразующий десятичное число в шестнадцатеричное с помощью программы dc. Самим преобразованием будет заниматься программа dc, а наш сценарий только подготовит данные для этой программы. #!/bin/bash # Сценарий dec_hex B=16 # Основание системы счисления # Проверяем, является ли параметр $1 числом if [ -z "$1" ] then echo "Использование: dec_hex число" exit 1 fi # Передаем число ($1), систему счисления программе dc echo ""$1" "$B" o p" | dc |
110. Проверка прав пользователя
1 2 3 4 5 6 7 8 9 10 11 12 13 |
Для сценариев, требующих полномочий root, сначала нужно проверить, какой пользователь запустил сценарий. UID пользователя root всегда равен 0. Проверка, является ли пользователь, запустивший сценарий, пользователем root. #!/bin/bash ROOT_UID=0 if [ "$UID" -eq "$ROOT_UID" ] then echo "Вы — root" else echo "Вы — обычный пользователь" fi exit 0 |
111. Генератор имени временного файла
1 2 3 4 5 6 7 8 9 10 11 |
Довольно часто в процессе обработки данных есть необходимость в создании временных файлов. Чтобы имя временного файла всегда было уникальным, мы можем применить программу mcookie, генерирующую случайную строку для xauth, но в своих целях. В листинге приведен сценарий, генерирующий имя временного файла вида "tmp_случайная_строка". #!/bin/bash prefix="tmp_" suffix=`mcookie` temp_filename=$prefix.$suffix echo "Имя файла = \"$temp_filename\"" exit 0 |
112. Чтение ввода пользователя
1 2 3 |
Для чтения ввода пользователя используется конструкция "$<", например: echo -n "Введите строку: " set line = "$<" |
113. Оператор foreach
1 2 3 4 5 6 7 8 9 10 11 12 |
Оператор foreach удобно использовать для перебора массивов, его синтаксис: foreach индекс_цикла (список_аргументов) команды end Также цикл foreach удобно использовать при работе с файлами, например: foreach f ( *.txt ) echo $f end Здесь мы в цикле выводим имена всех текстовых файлов в текущем каталоге. Конечно, для этой цели проще вызвать команду ls, но здесь мы продемонстрировали использование foreach. |
114. Оператор switch
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
В ряде случаев использовать оператор switch намного удобнее, чем серию условных операторов. Синтаксис switch следующий: switch (строка) case образец1: команды1 breaksw case образец2: команды2 breaksw ... default: команды по умолчанию breaksw endsw Вот пример использования данного оператора: set string = test switch (string) case test: echo "Строка: test" breaksw case text: echo "Строка: text" breaksw default: echo "Строка не опознана" breaksw endsw |
115. Автоматизация обработки задач средствами gawk
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 |
Сценарий awk пишется, как и сценарий для оболочек bash и tcsh: это обычный текстовый файл, в начале которого задается интерпретатор: #!/usr/bin/awk -f Сценарий на языке awk состоит из одной или нескольких строк вида: образец { действие } Образец — это строка (или регулярное выражение), которая должна быть в обрабатываемом сценарием текстовом файле. Действие будет применено к строке, соответствующей образцу. Если образец — это регулярное выражение, то он заключается в слэши: /выражение/ Если образец не указан, то действие будет применено ко всем строкам обрабатываемого файла. Особого внимания заслуживают образцы BEGIN и END. Первый образец запускает команды до обработки файла, а второй — после обработки файла. Например: BEGIN { print "Мой сценарий\n" counter=0 } { print "Основная программа\n" } END { print "Сценарий завершен" printf ("\nСчетчик:\t%d\n", counter) } Операторы: < Меньше > Больше <= Меньше или равно >= Больше или равно == Равно != Не равно !~ Отрицание. Используется при задании образцов. Означает, что поле или переменная не соответствует регулярному выражению ~ Поле или переменная соответствует регулярному выражению || Логическое ИЛИ (OR) && Логическое И (AND) * Умножение / Деление % Получение остатка от деления + Сложение - Вычитание = Присваивает переменной значение или результат выражения ++ Увеличивает значение переменной -- Уменьшает значение переменной Переменные: $0 Текущая запись (в одной переменной) $n, n — число Поле с номером n в текущей записи FILENAME Имя текущего файла, null для стандартного ввода FS Разделитель полей NF Количество полей в записи NR Номер записи OFS Разделитель полей при выводе (по умолчанию пробел) ORS Разделитель записей при выводе (по умолчанию символ новой строки) RS Разделитель записей при вводе (по умолчанию символ новой строки) Строковые переменные инициализируются пустой строкой, а числовые переменные — нулем: counter=0 name="" Ассоциативные массивы: В отличие от других языков программирования, awk поддерживает ассоциативные массивы (правда, такие массивы поддерживает еще PHP и некоторые другие языки, но во многих языках таких массивов нет). В ассоциативном массиве в качестве индекса выступает не число, а строка. Пример объявления такого массива: массив[строка] = значение Затем для перебора массива используется вот такая конструкция: for (элемент in массив) действие Например: for (item in count) printf "%-20s%-20s\n" Функции: length(str) Возвращает длину строки (количество символов в str). Если строка не указана, возвращает количество символов в текущей записи int(num) Возвращает целую часть числа num index(str1,str2) Возвращает индекс строки str2 в строке str1 или 0, если строки str2 нет в строке str1 split(str,arr,del) Разбивает строку str на элементы массива arr, параметр del — это разделитель, который используется для разделения строки sprintf(fmt,args) Форматирует аргументы (параметр args) в соответствии со строкой формата fmt substr(str,pos,len) Возвращает подстроку строки str длины len, которая начинается на позиции pos tolower(str) Возвращает копию строки str, где все символы будут в нижнем регистре toupper(str) Возвращает копию строки str, где все символы будут в верхнем регистре Вывод с помощью printf Команда printf используется для вывода аргументов в соответствии с заданным форматом: printf "строка формата", аргумент1, ..., аргументN Строка формата определяет, как будут отображены аргументы. В строке формата вы можете использовать \t для вставки символа табуляции и \n для новой строки на экране. Для каждого аргумента в строке формата должен быть свой модификатор вывода. Модификатор имеет формат: %[–][x[.y]]conv Символ % обязателен, и он означает, что перед нами — модификатор. Символ "-" означает, что вывод должен быть отформатирован по левому краю. x — минимальная ширина поля, а y — количество цифр после запятой (при выводе числа с дробной частью), а conv задает формат аргумента. Параметры conv: d Десятичное число e Экспоненциальная запись числа f Число с плавающей запятой o Беззнаковое восьмеричное число s Строка x Беззнаковое шестнадцатеричное число Управляющие структуры: Условный оператор if..else Условный оператор работает так же, как и в любом другом языке программирования: if (условие) {команды1} [else {команды2}] Если условие истинно (значение выражения — true), то будут выполнены команды1, в противном случае будут выполнены команды2. Вот пример условного оператора: if (num == "one") print "Число: 1" else print "Другое число:", num } Цикл while Цикл while выполняется до тех пор, пока условие истинно. Синтаксис цикла следующий: while (условие) {команды} Рассмотрим небольшой пример: count = 1 while (count <= 10) { print n n++ } Цикл for Синтаксис цикла for следующий: for (инициализация; условие; инкремент) {команды} Цикл for — это цикл со счетчиком. Он выполняется, пока истинно условие. Перед запуском цикла выполняются команды инициализации, как правило, сбрасывается счетчик (или инициализируется). Далее проверяется условие: если оно истинно, выполняются команды. После выполнения команд происходит инкремент счетчика. Пример цикла for: for (n=1; n <= 10; n++) print n Для ассоциативных массивов синтаксис цикла for немного другой: for (элемент in массив) {команды} В теле цикла вы можете использовать команды break (прерывает цикл) и continue (прерывает текущую итерацию). Теперь рассмотрим несколько примеров. Предположим, у нас есть файл friends с данными о наших друзьях в таком формате: ник год_рождения e-mail icq Количество полей, сами понимаете, может быть произвольным. friends ------- den 1983 den@localhost 111111111 evg 1982 evg@localhost 111111112 max 1987 max@localhost 111111114 fox 1980 fox@localhost 111111113 dm 1979 dm@locahost 111111119 vvv 1980 vvv@localhost 111111117 ppt 1982 ppt@localhost 111111115 ------- Самая простая программа на языке awk выглядит так: {print} Данная программа просто выведет весь этот файл. Для ее запуска введите команду: gawk '{print}' friends Попробуем усложнить программу и вывести данные обо всех, кто родился в 1980 году. Для этого нужно использовать регулярные выражения. Регулярные выражения заключаются в слэши: gawk '/1980/' friends Теперь попробуем вывести только определенные поля. Порядок вывода полей значения не имеет: gawk '{print $2, $1}' friends Можно усложнить программу и вывести только несколько полей, но которые соответствуют регулярному выражению, например: gawk '/1980/ {print $2, $1}' friends Выведем все записи, где в первом поле есть буква d: gawk '$1 ~ /d/' friends Давайте выведем записи, где поля соответствуют тому или иному регулярному выражению. Например, вот программа, выводящая записи, где второе поле равно 1982: gawk '$2 == 1982' friends Теперь напишем awk-сценарий — более сложную программу, которая не помещается в одну строку. Программа подсчитывает, сколько человек родилось в 1980 году. Данную программу можно было бы записать в одну строку, но мы используем образцы BEGIN и END для улучшения вывода программы. #!/usr/bin/awk -f BEGIN { print "Список друзей" year=0 } { if ($2 == "1980") year=year+1 } END { printf ("\tВсего записей:\t%d\n", NR) printf ("\tВ 1980 году родилось друзей:\t%d\n", year) } Чтобы запустить сценарий, нужно сделать его исполнимым и передать ему файл друзей: $ chmod +x friends.awk $ ./friends.awk friends Вычислим сумму столбца в текстовом файле. Команда достаточно проста, поэтому ее даже не буду оформлять в виде листинга. Здесь мы подсчитываем и выводим сумму 4-го столбца файла somefile. cat somefile | awk '{s += $4} END {print s}' Awk — очень гибкий язык, с его помощью можно решить практически все задачи обработки текста. Представим, что нам нужно найти все битые ссылки на нашем сайте. Можно, конечно, перелопатить все страницы и проанализировать каждую ссылку, но гораздо проще проанализировать журнал Apache, чтобы вывести все 404-е ошибки: мы найдем отсутствующие на нашем сервере ресурсы и сможем исправить ссылки (возможно, ресурсы не отсутствуют, а мы просто допустили ошибку в имени файла). Вывод всех 404-х ошибок достигается так: awk '$9 == 404 {print $7}' /var/log/apache2/access_log | uniq -c | sort -rn | less Да, мы не найдем битые ссылки, указывающие на другие ресурсы, но зато поймем, каких файлов не хватает на нашем сервере, что тоже неплохо, особенно, если учесть, что с этой задачей мы справились с помощью одной команды. ps -uax | awk -F ' ' '{print $1,$2,$11}' awk -F ';' '{ print $1,$3 }' zxc.csv | sort | uniq sedfile ------- Алексей,+2 (522) 7234-246-57 Александр,+3 (234944) 123-73-33 Ярослав,+4 (455) 62205-111-87 Максим,+5 (315) 51014-656-923 Дмитрий,+6 (2062) 6434-994-2983 Алексей,+7 (927435) 40302-1945-39844 ------- Решение: cat zxc1.csv | sed 's/ //g' | sed 's/-//g' | sed 's/(//' | sed 's/)//g' | sed 's/+//g' | sed 's/,/ /g' cat zxc1.csv | sed -e '{s/-//g}' -e '{s/(//g}' -e 's/)//g' -e '{s/+//g}' -e '{s/ //g}' -e '{s/,/ /}' sed - пример шаблонов --------------------- 8d - удалить 8-ю строку /^$/d - удалить все пустые строки 1,/^$/d - удалить все строки до первой пустой строки, включительно /Jones/p - вывести строки, содержащие "Jones" (с ключом -n) s/Windows/Linux/ - в каждой строке, заменить первое встретившееся слово "Windows" на слово "Linux" s/BSOD/stability/g - в каждой строке, заменить все встретившиеся слова "BSOD" на "stability" s/ *$// - удалить все пробелы в конце каждой строки s/00*/0/g - заменить все последовательности ведущих нулей одним символом "0" /GUI/d - удалить все строки, содержащие "GUI" s/GUI//g - удалить все найденные "GUI", оставляя остальную часть строки без изменений 's/:.*//' - удалить от все последующие символы после двоеточия(:) -------------------- |
116. Web-сервер. Установка Apache и PHP
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
apt-get install apache2 php Эта команда установит Web-сервер Apache2 и интерпретатор PHP. После этого нужно установить следующие пакеты: php-cli — интерпретатор PHP, работающий в режиме командной строки (command-line interpreter); php-imap — поддержка протоколов POP/IMAP для PHP; php-gd — поддержка графических функций PHP; php5-mysql — поддержка функций для работы с базой данных MySQL. Для этого введите команду: sudo apt-get install php-cli php-imap php-gd php-mysql Тестирование настроек Web-сервера Протестируем Web-сервер. Откройте браузер и введите адрес: http://localhost Теперь протестируем поддержку PHP. Поместите файл test.php в каталог /var/www/. Это можно сделать с помощью команды: sudo nano /var/www/test.php <? phpinfo(); ?> Похоже, что поддержка PHP не установлена. Но на самом деле поддержка PHP уже установлена, просто нужно перезагрузить Apache — введите в терминале команду: sudo service apache2 restart Конфигурационные файлы сервера. Файлы конфигурации сервера находятся в каталоге /etc/apache2. Основной файл конфигурации называется apache2.conf. По умолчанию его настройки устроят большинство пользователей. Если вы планируете использовать Web-сервер не только локально (для экспериментов с PHP), но и как Web-сервер своей домашней сети, откройте файл apache2.conf и найдите директиву: Нужно ее раскомментировать и указать имя сервера, которое будут вводить пользователи в строке браузера. Данное имя должно быть зарегистрировано в DNS-сервере вашей сети (или указано в файле /etc/hosts каждого компьютера сети). Обычно здесь указывается имя компьютера, например: ServerName user-desktop После этого можно будет обращаться к серверу по адресу http://user-desktop/. Для остановки и перезапуска Web-сервера используются соответственно следующие команды (перезапуск необходим после изменения конфигурационных файлов сервера): sudo service apache2 stop sudo service apache2 restart |
117. Сервер баз данных MySQL
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
Для установки введите следующую команду: sudo apt-get install mysql-server mysql-client mysql-admin Команды управления пользователями MySQL-сервера Для изменения пароля root (который вы ввели при установке сервера MySQL) используется следующая команда: sudo mysqladmin -u root password ваш_пароль Этот пароль вы будете использовать для администрирования сервера (пароль может и должен отличаться от того, который вы указываете для входа в систему). Для обычной работы с сервером рекомендуется создать обычного пользователя. Для этого введите команду: mysql -u root -p mysql Программа mysql является клиентом MySQL-сервера. Она должна подключиться к базе данных mysql (служебная база данных), используя имя пользователя root (-u root). Поскольку вы только что указали пароль для пользователя root (до этого пароль для root не был задан), вам нужно ввести параметр -p. После того как программа mysql подключится к серверу, вы увидите приглашение программы. В ответ на него нужно ввести следующий SQL-оператор: insert into user(Host, User, Password, Select_priv, Insert_priv,Update_priv, Delete_priv) values ('%','username',password('123456'),'Y','Y','Y','Y'); Только что мы создали пользователя с именем username и паролем 123456. Этот пользователь имеет право использовать SQL-операторы select (выборка из таблицы), insert (добавление новой записи в таблицу), update (обновление записи), delete (удаление записи). Если вам нужно, чтобы ваш пользователь имел право создавать и удалять таблицы, добавьте привилегии Create_priv и Drop_priv: insert into user(Host, User, Password, Select_priv, Insert_priv, Update_priv, Delete_priv, Create_priv, Drop_prov) values ('%','username',password('123456'),'Y','Y','Y','Y','Y','Y'); ВНИМАНИЕ! Этот SQL-оператор можно записать в одну строку, можно разбить на несколько строк — как вам будет удобно. Но в конце каждого SQL-оператора должна быть точка с запятой! Помните об этом. Для выхода из программы mysql нужно ввести команду quit. Кроме программы mysql в состав MySQL-клиента входит одна очень полезная программа — mysqlshow, которая может вывести список таблиц, которые находятся в той или иной базе данных. Кроме этого, она еще много чего может, но в данный момент нам нужен пока список таблиц — чтобы вы знали, какие таблицы есть в той или иной базе данных: mysqlshow -p <база данных> Команды запуска и останова сервера Для управления сервером используется программа /etc/init.d/mysql. Раньше нужно было вызывать /etc/init.d/mysql непосредственно, сейчас можно вызвать управляющую программу через команду service, что намного удобнее. Для запуска сервера следует передать этой программе параметр start, для останова — stop, а для перезапуска — restart: sudo service mysql start sudo service mysql stop sudo service mysql restart Также для управления сервером можно использовать программу mysqladmin, узнать больше о ней можно с помощью команды: man mysqladmin Пройдемся по основным разделам программы MySQL Administrator: Server Information — общая информация о сервере; Service Control — управление запуском сервиса MySQL (здесь вы можете перезапустить сервер); Startup Parameters — параметры, указываемые при запуске сервера; User Administration — здесь можно добавить новых пользователей MySQL и установить права пользователей; Server Connections — позволяет просмотреть текущие соединения с сервером; Server Logs — журналы сервера; Backup — создать резервную копию сервера; Restore Backup — восстановление из резервной копии; Replication Status — состояние репликации сервера; Catalogs — позволяет просмотреть имеющиеся базы данных и таблицы внутри них. |
118 FTP-сервер
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
запуск: sudo /etc/init.d/proftpd start Основной файл конфигурации сервера ProFTPD называется /etc/proftpd/proftpd.conf. ------------- <Anonymous /var/ftp/pub> # Имя пользователя и группы #(пользователь ftp создается при установке FTP-сервера) User ftp Group nogroup # Определяем стандартный псевдоним anonymous UserAlias anonymous ftp # Отключает проверку командного интерпретатора пользователя — это лишнее RequireValidShell off # Максимальное количество анонимных клиентов MaxClients 10 # Запрещаем записывать файлы в каталог /var/ftp/pub <Directory *> <Limit WRITE> DenyAll </Limit> </Directory> </Anonymous> Теперь любой пользователь сможет подключиться к вашему серверу, используя имя пользователя anonymous и любой e-mail в качестве пароля. Они получат доступ к файлам в каталоге /var/ftp/pub. Файлы можно будет только скачивать, все остальные действия (изменение, удаление) запрещены, запрещена и загрузка файлов на сервер. Если нужно разрешить загрузку файлов на сервер, то в конце секции Anonymous (перед </Anonymous>) добавьте следующую секцию: <Directory incoming> Umask 022 <Limit WRITE> DenyAll </Limit> <Limit STOR> AllowAll </Limit> </Directory> Пользователи смогут просматривать каталог /var/ftp/pub/incoming и загружать в него новые файлы. ------------- |
119. Программы для управления пакетами
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 |
Для управления пакетами в Debian/Ubuntu используются следующие программы: dpkg — базовая программа, не умеет разрешать зависимости пакетов и не поддерживает источники пакетов apt-get — поддерживает источники пакетов и умеет разрешать зависимости. Чаще всего вы будете использовать эту программу aptitude — программа для установки пакетов с псевдографическим интерфейсом, умеет разрешать зависимости и поддерживает источники пакетов alien — используется для установки RPM-пакетов в Debian, была рассмотрена в предыдущей главе Установка пакетов: apt-get install package Программа apt-get просматривает файл /etc/apt/sources.list — в этом файле перечислены источники (репозитории) DEB-пакетов. В качестве источника может выступать как компакт-диск, содержащий пакеты, так и сервер в Интернете. Программа находит указанный пакет, читает служебную информацию о нем, затем разрешает зависимости (т. е. устанавливает все другие пакеты, нужные для работы программ устанавливаемого пакета), а после устанавливает нужный нам пакет. Все загруженные программой apt-get и менеджером Synaptic пакеты записываются в каталог /var/cache/apt/archives. Основные команды программы apt-get apt-get [опции] команды [пакет] update Синхронизирует файлы описаний пакетов (внутреннюю базу данных о пакетах) с источниками пакетов, которые указаны в файле /etc/apt/sources.list upgrade Обновляет указанный пакет. Может использоваться для обновления всех установленных пакетов. При этом установка новых пакетов не производится, а загружаются и устанавливаются только новые версии уже установленных пакетов dist-upgrade Обновление дистрибутива. Для обновления всех пакетов рекомендуется использовать именно эту команду install Установка одного или нескольких пакетов remove Удаление одного или нескольких пакетов check Используется для поиска нарушенных зависимостей clean Используется для очистки локального хранилища полученных пакетов (перед установкой пакет загружается в локальное хранилище, а затем устанавливается оттуда; данная команда может очистить хранилище для экономии дискового пространства) autoclean Похожа на clean, но удаляет только те файлы пакетов, которые больше не могут быть получены и использованы Обновление источников После каждого изменения файла sources.list нужно вводить команду: sudo apt-get update Если не ввести эту команду, то изменения из файла sources.list не будут прочитаны и программа apt-get будет использовать старый список источников пакетов. Удаление и переустановка пакетов Для удаления пакета предназначена команда remove: sudo apt-get remove <пакет> Некоторые пользователи в случае сбоя программы пытаются ее переустановить. Для этого они ее удаляют, а затем устанавливают заново. Это в корне неправильно. Чтобы переустановить пакет, гораздо правильнее использовать следующую команду: sudo apt-get —-reinstall install <пакет> Если вы все-таки хотите сначала удалить пакет, а потом установить его снова, то вместо удаления нужно использовать зачистку, когда удаляются не только исполняемые файлы программ, но и конфигурационные файлы, что очень важно. Есть вероятность, что причина некорректной работы программы кроется в неправильных настройках. А если вы удалите программу, но оставите настройки, после повторной установки программы проблема останется. Для удаления и программы, и конфигурационных файлов нужно использовать опцию --purge: sudo apt-get --purge remove <пакет> Обновление пакета и системы Для обновления одного пакета используется команда upgrade, а для обновления всей системы — команда dist-upgrade. Некоторые пользователи пытаются обновить всю систему командой upgrade, но этого не нужно делать, иначе велика вероятность "падения" системы после такого обновления. Команды обновления пакета и системы выглядят так: sudo apt-get upgrade <пакет> sudo apt-get dist-upgrade Очистка кэша пакетов Как мы уже знаем, установка программы состоит из трех основных этапов: загрузка пакетов, установка пакетов и настройка пакетов. Скачанные с Интернета пакеты помещаются в каталог /var/cache/apt/archives. Регулярно очищайте этот каталог — этим вы сэкономите немало места на диске. Если же у вас соединение с учетом трафика, тогда записывайте скачанные пакеты на CD/DVD. Если нужно будет переустановить Ubuntu, то вы можете установить все необходимые вам программы, не загружая их повторно из Интернета. Удалить все DEB-пакеты из каталога /var/cache/apt/archives можно командой: sudo rm /var/cache/apt/archives/*.deb Вообще вместо ручного удаления можно использовать команду clean: sudo apt-get clean Но эта команда оставляет некоторые файлы, поэтому лучше удалить пакеты вручную. На некоторых системах команда sudo apt-get clean включена в автозапуск, поэтому при каждой перезагрузке скачанные пакеты будут удалены. Если вам интересно, вот назначение каталогов локального кэша: /var/cache/apt/archives/ — область хранения полученных файлов /var/cache/apt/archives/partial/ — область хранения получаемых файлов (пакетов) /var/state/apt/lists/ — область хранения информации о состоянии каждого ресурса пакетов, который задан в списке источников /var/state/apt/lists/partial/ — временная область хранения информации в процессе скачивания Опции программы apt-get Иногда нужно не просто выполнить команду, а указать программе, как ее нужно выполнить. Например, можно попросить программу удалить пакет, а можно уточнить, что вы хотите также удалить и конфигурационные файлы, как было показано ранее. Для такого рода уточнений используются опции команды apt-get: -d, --download-only Только скачать пакеты. Пакеты будут скачаны с источника пакетов и помещены в локальный кэш пакетов, но не будут установлены -f, --fix-broken Программа попытается исправить систему с нарушенными зависимостями. Если опция используется с командами установки и удаления пакетов, то, возможно, некоторые пакеты будут пропущены, чтобы разрешить все зависимости. Вообще apt-get не допускает нарушений зависимостей, но если вы удалили некоторые пакеты с помощью dpkg, которая не поддерживает зависимостей, то возможны нарушения зависимостей, которые можно попытаться исправить этой опцией -m, --ignore-missing, --fix-missing Игнорировать отсутствующие пакеты. Позволяет пропустить некоторые пакеты при установке (например, те, которые не могут быть получены или загрузились с ошибками), но такое не всегда возможно, т. к. очень часто устанавливаемые группой пакеты зависят друг от друга -q, --quiet Тихий режим. Выводится минимум сообщений. Полезно для использования в сценариях bash/tcsh -s, --simulate Симулирует процесс установки, пакеты реально не устанавливаются. Состояние системы не изменяются, проверяется возможность установки пакетов -y, --yes Автоматически отвечать "да" на все вопросы программы, полезно при написании сценариев -b, --compile, --build Откомпилировать пакеты исходного кода после их получения --no-upgrade Не производить обновление пакетов. Обычно используется вместе с install, когда при установке пакета не будет произведено обновление уже установленных пакетов --force-yes Принудительное выполнение заданной операции. Очень опасная операция, которая может потенциально уничтожить систему. Лучше не использовать эту опцию! --purge Полное удаление пакета. --reinstall Переустанавливает пакет. Корова в apt-get Оказывается, пасхальные яйца есть не только в Windows, но и в Linux. Введите команду sudo apt-get moo, и вы увидите изображение... коровы |