Как показать содержимое директории (файла)? ls
Как сменить рабочую директорию (текущую директорию)? cd
Как скопировать, как удалить, как переместить файлы? cp rm mv
Как найти файл (каталог) по признаку, атрибуту или по имени? find
Как найти что-либо внутри файлов в директории? grep
Как запаковать, разархивировать файл? tar
Как создать симлинк? ln
Как узнать объём, занимаемый директорией? du
Как подсчитать что-либо, получив число (процессы, файлы, строки, слова)? wc
Как получить справку о ключах и принципе работы какой-либо команды? man
Как временно получить права суперпользователя (root)? su sudo
Каким просмотрщиком лучше всего смотреть/читать текстовые файлы? less
Как получить список процессов? ps
Как узнать о состоянии памяти? free top
Как узнать, какие диски-разделы подключены? df mount
Как получить список открытых портов? netstat
Как узнать настройки сети? ifconfig route
Как узнать состояние сетевого интерфейса? mii ifconfig
Как получить список открытых файлов? lsof
Каким редактором редактировать файлы конфигурации? vi
Как убить процесс или как перезапустить процесс? kill killall
Как написать из запустить скрипт?
Как запустить сервис? /etc/init.d/servicename start|stop|restart
Как заморозить выполнение программы? Ctrl+Z
Как заблокировать одной командой досаждающие айпишники? iptables
Как узнать версию Linux? cat /etc/*-release
Как узнать версию ядра и название Unix-а? uname
Как узнать, где пропадает пакет, недоступен сервер, сайт? traceroute
Что делать, если не работает моя железка, нет драйвера или что?
Как скомпилировать ядро?
Как подключить, отключить партицию, флешку, диск, шару, узнать доступные диски? mount
Как узнать/сменить текущую кодировку? locale export
Что такое переменные среды и как их использовать? set export echo
Как сменить владельца файла, сделать исполнимым скрипт? chown chmod
Чем консоль лучше mc (Midnight Commander-а)?
Как отсортировать нужную информацию в выводимом потоке? sed
Как установить программу? rpm dpkg apt
Как узнать, сколько пользователей работает в системе? w
Как узнать, сколько пользователей вообще есть в системе? cat /etc/passwd
Как посмотреть, чем занят компьютер и по какой причине всё висит?
Как перезагрузить X-сервер? Ctrl+Alt+Backspace
Как узнать, кому принадлежит тот или иной IP-адрес? whois
Как узнать IP-адрес какого-либо сервера или сайта по DNS-имени? ping dig host
Как посмотреть картинку, проиграть файл в плеере из консоли?
Что такое регулярные выражения и маски имён объектов?
Что такое удалённо зайти/залогиниться и как это сделать? ssh telnet putty
Где поискать ответы на мои вопросы?
Чем скачать файл из интернета? wget curl
Все эти вопросы я перечисляю для того, чтобы эту информацию чаще находили по поиску через поисковики. Ответы на эти вопросы ниже.
Некоторая вступительная информация:
Юниксы в целом более ориентированы на сеть и многопользовательский режим, чем Windows. Из-за этого, а также из-за равнения не на дебилов, это более простая и эффективная модель безопасности, расширенное и простое управление процессами, доступами и файлами в целом. Как следствие можно отметить удобство автоматизации любых действий и нереальную гибкость в пострении любых схем обработки информации. Этим обусловлено использование именно консольных средств работы с системой, нежели графических визардов с кнопочками, фишечками и галочками в силу ограниченности последних. Переводя на примеры, удобнее и быстрее с человеком объясниться с помощью слов (консоль), а не жестов, пинков и толчков (GUI).
Из особенностей:
* Обычно есть только один пользователь, которому можно всё. Это root. Всем остальным нельзя ничего, кроме как использование системных ресурсов и пространства своей домашней директории. root может делегировать какие-либо права определённым пользователям.
* Графический интерфейс не более чем одна из программ. Её наличие или отсутствие некритично для работы и функциональности системы.
* Все или почти все настройки системы хранятся в отдельных текстовых файлах, которые легко отредактировать любым редактором. Формат записей в этих файлах разный и целиком зависит от каждой конкретной программы. Есть стили форматов – типа ini-файлов, apache-стиль, xml-стиль и ещё куча всяких.
* У каждой программы есть объемлющая и главное – внятно написанная и полезная справка, мануал (man), а не то говно, которым отмазывается большинство софта в Windows. Когда говорят – RTFM, это означает – “иди и читай чёртов мануал”. Многие вещи очень просты и лежат на поверхности – незнание их является лишь следствием игнорирования файлов помощи. Некультурно задавать любой вопрос, не прочитав перед этим доступной справочной информации и не попытавшись решить проблему самостоятельно.
* Файловая система не имеет виртуальных имён разделов (как-то: Диск С, D и проч.) – вместо этого есть один системный раздел под названием корень (/) и остальные разделы, которые крепятся к нему, как ветки к стволу. Для того, чтобы можно было куда-то приклеить ветку, нужно для начала создать директорию (mkdir) – это и будет местом монтирования (прикрепления) партиции (раздела диска). Например, один раздел подключен к главному (системному) как папка /home. Следовательно, все данные, находящиеся в папке /home физически находятся на этом разделе, а не на системном. Существуют также виртуальные файловые системы. Типичный пример – /proc – там лежит разнообразная системная информация и информация о текущих процессах в виде файлов и папок.
* По сравнению с Windows, где всё или почти всё свалено на одном разделе и в одну кучу, в Unix существует строгая и оправданная иерархия размещения файлов по типам, по методу использования и по частоте обращения. Скажем, в /boot лежат ядра, в /sbin, /usr/sbin, /bin, /usr/bin – исполняемые бинарники для root и для обычных пользователей, в /etc – файлы конфигурации, в /var – часто изменяемые файлы, базы данных и прочая временная или непостоянная информация, в /tmp – информация с более краткосрочным периодом жизни, в /home – домашние каталоги пользователей и так далее.
* В системе присутствуют только две субстанции: файлы и процессы. Всё остальное – лишь следствие. Исходя из этой идеи, все физические устройства имеют свои файлы-представители в каталоге /dev и информацию о себе в /sys, вся информация о текущих процессах выполнена в виде виртуальной файловой системы /proc. Эту область можно освещать и далее, но не здесь.
Описания команд и консоли в целом
Консоль – не более, чем процесс-посредник между ядром и пользователем, умеющим запускать другие программы и понимающий многие смысловые комбинации для упрощения работы пользователя.
Все команды имеют ключи, начинающиеся со знака тире “-“. Ключи модифицируют работу команд. Многие команды употребляются почти всегда с ключами. Кроме ключей есть параметры, указывающиеся последними в строке. Обычно это имена обрабатываемых файлов и каталогов. Команды можно комбинировать друг с другом посредством вертикальной черты – при этом информация от первой команды поступает для обработки второй команде. Знак больше перенаправляет вывод команды (например, в файл). Пример – одна команда достаёт информацию из файла , вторая в цепочке фильтрует только нужное и третья, завершающая, сортирует в удобный формат. Из нагромождения информации, например, в журнальных файлах, получается лаконичный отчёт по заданным характеристикам.
Для того, чтобы из графического режима перейти в консоль, либо откройте любой терминал (gnome-terminal, konsole, xterm), либо нажмите Ctrl+Alt+F1 (также можно Ctr+Alt+F2…F6). Переход обратно в графический режим – Ctrl+Alt+F7. Это для того, у кого неверно работает графический режим, либо не смогли найти эмулятор терминала.
Итак, наверное, первая команда, это
man
Показывает справку к интересующей вас команде.
Синтаксис: man [раздел глоссария] имя_команды
Пример:
man tail Получить полную справку о команде tail
man 1 ed Получить справку о команде ed из общепользовательского глоссария.
Всего глоссариев 8:
1 общепользовательские
2 команды ядра
3 для разработчиков
4 периферия
5 системные софты
6 игрушки
7 касательно железа и спецификаций
8 администрирование
База данных справок находится в каталоге /usr/share/man и состоит из текстовых файликов, отформатированных в одном из гипертекстовых диалектов (man-db). Если у вас установлен пакет manpages-ru, некоторые файлы справки будут русскоязычными.
Навигационные и файловые команды
ls
Показывает содержимое текущего каталога. При наличии параметра пытается отобразить файлы, подпадающие под этот параметр, либо каталоги, перечисленные в параметрах.
Синтаксис использования: ls [маска или путь]
Примеры использования:
ls * (показать все файлы)
ls directory (отобразить содержимое директории directory)
Самые частые ключи для использования:
ls -l Показать список файлов со всеми их атрибутами (время, права, владельцы). Этот ключ часто доступен как алиас ll (две буквы l подряд).
ls -t Показать, отсортировав по времени – сначала самые новые файлы
ls -a Показать все файлы, даже скрытые, начинающиеся на точку
Частые приёмы использования с другими командами:
ls |wc -l Подсчитать количество файлов в текущей директории
man ls Узнать всё об использовании команды ls. 😉
cd
Меняет текущий каталог на любой другой указанный. Аналог этого в графическом режиме – щёлканье по папкам в проводнике. Одна из самых частых команд при работе с файлами и директориями.
Синтаксис использования: cd куда
Примеры использования:
cd .. Перейти на один каталог вверх, выше.
cd ../../ Перейти на два каталога выше.
cd Desktop Перейти в каталог Desktop, находящийся в текущей директории
cd /mnt Перейти в каталог mnt, находящийся в корне файловой системы линукса.
cd ~ Перейти в домашний каталог текущего пользователя (обычно это каталог /home/$USER).
pwd
Отображает текущий путь в системе (то, где вы находитесь). Ключей и параметров нет.
cp
Копирует файлы-каталоги из одного места в другое. Требует обязательного наличия двух путей – куда и чего. Естественно!
Синтаксис использования: cp что-то куда-то
Примеры использования:
cp filename directory Скопировать файл filename внутрь директории directory
cp filename filename2 Сделать копию файла filename с именем filename2 (дубликат)
cp * /tmp Скопировать все файлы в текущей директории в папку tmp, которая находится в корне файловой системы.
cp -r * /tmp Скопировать все файлы и каталоги в текущей директории в директорию /tmp.
Самые частые ключи для использования:
cp -r Копировать рекурсивно – необходимо для копирования директорий, иначе они будут просто пропущены.
cp -v Копировать, перечисляя все копируемые объекты.
cp -f Копировать, не обращая внимания на ошибки.
cp -pRdfv Копировать, полностью сохраняя атрибуты, типы и владельцы файлов.
rm
Удаляет файл или каталог. Нафиг. Без всяких там корзин…
Синтаксис использования: rm что-нибудь
Примеры использования:
rm -rf * Уничтожить всё в текущем каталоге. Это не касается скрытых объектов, начинающихся на знак точки “.”
rm filename Уничтожить файл.
rm directory/*tmp Удалить все файлы, оканчивающиеся на “tmp” в директории directory
Самые частые ключи для использования:
rm -r Удалять рекурсивно, то есть, включая поддиректории.
rm -f Удалять, невзирая на ошибки и не жаловаться.
mv
Перемещает файлы и/или каталоги из одного места в другое. Должны присутствовать параметры – что перемещать и куда. Итого целых два.
Синтаксис использования: mv что куда
Примеры использования:
mv * /tmp Переместить всё из текущей директории в директорию /tmp
mv file1 file2 file3 Desktop Переместить три указанных файла в поддиректорию Desktop относительно текущего пути.
mv file1 file2 Переименовать файл. (Полезная фича! 🙂 )
find
Ищет файлы-каталоги по именам. Классная команда. Обычно ею не умеют пользоваться.
Синтаксис использования: find откуда_искать что_искать
Примеры использования:
find . -name ‘*bmp’ Найти относительно текущего каталога все файлы, оканчивающиеся на bmp (рисунки то бишь)
find / -name ‘*bak’ Найти по всей системе файлы резервных копий
find / -сtime -1 Найти в системе файлы, изменённые в последние сутки
find / -size +1024k Найти файлы, размером больше 1 мегабайта
find . -type d Найти все поддиректории, которые вложены в текущую директорию.
Частые приёмы использования с другими командами:
find . -size -2048k -exec rm -f {} ; Уничтожить все файлы относительно текущей директории, которые имеют размер менее 2-х мегабайт (например, почистить директорию с музыкой от мусора и недокачанных файлов)
grep
Выбирает из потока информации строки, в которых есть совпадения. Часто используется для поиска внутри файлов (даже рекурсивно). Если не указан файл, ждёт информации со входа, через вертикальную черту. Иначе обидится и повиснет. 🙂
Синтаксис использования: grep [ключи] [имя_файла]
Примеры использования:
grep -rn maska * Найти рекурсивно во всех файлах и каталогах строки со словом maska и указать номера строк и имена файлов.
grep -i -e ‘one’ -e ‘two’ filename Вывести строки из файла filename, в которых есть слова one и/или two, независимо от регистра (большие-маленькие).
grep -v ‘^$’ filename Вывести всё содержимое файла, исключая пустые строки
grep ‘^[^#]’ filename Вывести содержимое файла, исключая пустые строки и строки комментариев
grep -q karamba filename && echo Yes || echo No Сказать Yes, если в файле filename присутствует слово karamba или No в противном случае.
du
Подсчитывает, сколько места занимает тот или иной объект. Например, сколько “весит” текущий каталог.
Синтаксис использования: du [ключи] [объекты]
Примеры использования:
du * Выводит таблицу всех объектов и их размеров в текущем каталоге
du -s directory Показывает размер указанного каталога directory в байтах
du -sh Показывает размер текущего каталога, добавляя нужную букву множителя (М, Г, к)
Самые частые ключи для использования:
du -sh Выдаёт суммарное занимаемое место объекта или текущего каталога
du -ha Выводит всё подряд, но в конце подсчитывает ещё и общее занимаемое место.
wc
подсчитывает количество объектов на входе или в файле. Обычно используется вторым в связке (через вертикальную линию)
Синтаксис использования: wc [ключи] [файл]
Примеры использования:
wc -l filename Подсчитывает количество строк в файле
wc -c filename Подсчитывает количество байт в файле
wc -w filename Подсчитывает количество слов в файле
Частые приёмы использования с другими командами:
cat filename | wc -l Подсчёт строк в файле
cat filename |grep -v ‘#’| wc -l Подсчёт незакомментированных строк в файле (конфигурации чего-либо)
ln
Создаёт симлинки (ссылки) на каталоги и файлы. Это полезно, если файл лежит в одном месте, а доступ к нему хочется иметь в разных местах. С первого раза может это казаться излишним, но огромное число системных связок в линуксе работают именно так. Выглядит, как файл маленького размера, но если прочитать его – выведется содержимое файла, на который он ссылается.
Синтаксис использования: ln [ключи] файл_откуда линк_куда
Примеры использования:
ln -s /dev/ttyS0 /dev/ttyS1 Делает линк с /dev/ttyS0 как файл с именем ttyS1
ln -s libname.so.1.1 /usr/lib/libname.so Делает укороченное второе имя для библиотеки. (Именно так, по укороченным именам софты находят нужные библиотеки).
tar
Архиватор. Этим всё сказано.
Синтаксис использования: tar ключи имя_файла_архива [имена архивируемых объектов]
Примеры использования:
tar xzf archive.tar.gz Распаковать файл архива tar.gz
tar czf archive.tar.gz file1 file2 Сжать два файла в архив
tar cf archive.tar file1 directory1 Собрать без сжатия файлы и директории в один файл
tar xjf archive.tar.bz2 Распаковать файл архива tar.bz2
tar cjf archive.tar.bz2 * Сжать все файлы и каталоги в текущей директории в архив .tar.bz2
Примечание: .tar.gz и .tgz – это одно и то же. .tar.bz2 и .tbz – это тоже одно и то же. bz2 сжимает лучше, чем gz
cat
Показывает содержимое указанного файла.
Синтаксис: cat имя_файла
Примеры:
cat filename Выводит на консоль содержимое файла filename
cat directory/filename Выводит на консоль содержимое файла filename, который находится в поддиректории directory
Частые приёмы использования с другими командами:
cat filename | grep word Ищет слово word в строках файла filename и выводит строки, содержащие это слово.
head
Выводит первые несколько строк файла, либо того, что поступило на вход через вертикальную черту.
Синтаксис: head [ключи] [файл]
Примеры:
head -1 filename Вывести первую строчку из файла filename
head -100 filename Вывести первые сто строк из файла filename
Частые приёмы использования с другими командами:
cat filename | head -1 Вывести первую строку из файла filename
tail
Выводит последние несколько строк файла, либо того, что поступило на вход через вертикальную черту.
Синтаксис: tail [ключи] [файл]
Примеры:
tail -1 filename Вывести последнюю строчку из файла filename
tail -100 filename Вывести последние сто строк из файла filename
Частые приёмы использования:
tail -n 0 -f /var/log/syslog & Выводить на консоль всё, что добавляется в системный журнал. (Попытка чтения из системного журнала часто требует права суперпользователя)
less
Удобный просмотрщик текстовых файлов. Плавная прокрутка, быстрый поиск, множество опций, встроенная справка.
Синтаксис: less имя_файла
Примеры:
less /etc/apache/httpd.conf Открыть для просмотра и поиска файл конфигурации сервера apache.
ps -ef | less Просмотреть список процессов (с прокруткой и поиском).
Команды навигации при просмотре: стрелки – прокрутка, / – поиск, n – следующий найденный элемент, Ctrl+G – перейти в конец файла,!команда – выполнить команду оболочки, не выходя из редактора, q – выход из просмотрщика.
vi
Мощный текстовый редактор. Стандарт де-факто редактирования системных конфигурационных файлов – поддерживает множество расцветок, “знает” все конфигурационные файлы, сигнализирует цветом о неправильном синтаксисе, есть абсолютно на всех юниксах. Хотя на многих его подделка, а не он сам – nvi – умеет гораздо меньше и входит в базовые пакеты.
Мало кто знает, но есть замечательный вводный курс-учебник – команда “vimtutor ru”. Быстро и эффективно на примерах обучает азам работы.
Синтаксис vi имя_файла
Примеры:
vi /etc/fstab Открытие на редактирование файла конфигурации автоподключения разделов.
Имеет три режима – командный (по умолчанию) – ожидает ввода команд через клавиатуру, выделения (выделение/копирование блоков текста) и редактирования – обычный, как у всех редакторов.
Команды в командном режиме:
/слово – поиск “слова”
n – следующий поиск
Ctrl+G – перейти в конец файла
:команда – одна из множества команд редактора
:!команда – выполнение внешней команды системы и возвращение в редактор
:w – запись файла
:q – выход из файла
:q! – выход без сохранения
:saveas filename – сохранить файл как filename
:wq – сохранить и выйти
x – вырезать в буфер по умолчанию
dd – удалить строку
d10d удалить 10 строк
y – скопировать символ или выделенную область
Y – скопировать текущую строку или выделенные строки в буфер по умолчанию
dw – удалить слово
o – переход в режим редактирования, вставив пустую строку
a – передвижение на следующий символ и перевод в режим редактирования
i – просто переход в режим редактирования
Команды в режиме выделения:
v – начать выделение (выделять можно стрелками). Затем копировать, удалять или вырезать, как указано выше.
Команды в режиме редактирования:
как обычно, но esc – выход в режим команд (сохранить, выйти и прочее).
Примеры команд:
:%s/a/b/g Заменить все буквы а на букву б по всему тексту.
:set hls включить подсветку найденных слов при поиске.
:split filename Разделить экран горизонтально на две части, в каждой части редактируется разный файл. Удобно для копирования-перемещения-сравнения. Если выполнить команду без параметра имени файла, разделит текущий файл. Модификация :vsplit разделит экран по вертикали. Между частями можно перемещаться сочетанием клавиш Ctrl+W, затем влево-вправо-вверх-вниз.
Частые приёмы использования:
vi filename + Открывает файл и перемещает окно просмотра на последнюю строку
vi filename +123 Открывает файл и перемещает окно просмотра на 123ю строку
chmod и chown
У всех файлов (и директорий) есть права доступа, ориентируясь по которым, система либо отказывает конкретному пользователю в доступе, либо разрешает использовать этот объект. Права доступа содержат три настройки – для владельца файла, для группы владельцев и для всех остальных. К примеру, если создать файл, то Ваш ID пользователя в системе станет владельцем этого файла, а ваша группа по умолчанию, в которую входит Ваш системный аккаунт, станет группой владельцев этого файла. Так сказать – я и моя семья. Ну и все чужаки. 🙂
Логично, что только владелец может менять уровень доступа для каждой из этих градаций. Ну и ещё root. Но root вообще может всё и всегда. Даже владельца файла менять.
Продолжим. Собственно, уровней доступа немного (гораздо меньше, чем в windows, на первый взгляд). Это:
Нет доступа Вообще. Числовое значение: 0, буквенное: –
Доступ на чтение Файлы при этом можно копировать и просматривать, числовое значение: 4, буквенное: r
Доступ на запись Файлы можно изменять и всё такое :-). Числовое значение: 2, буквенное: w
Доступ на исполнение Файлы можно выполнять, как процессы. В директории можно заходить. Числовое значение: 1, буквенное: x
Есть ещё специальные метки, например, метка SUID. Когда процессы создаются, они всегда имеют владельцем и группой владельца того, кто их запустил. Благодаря SUID при создании процесса можно владельцем этого процесса сделать пользователя, которому этот файл принадлежит. Например, скрипт создал Серёжа и поставил на него метку SUID, потом этот скрипт запустила Маша и без проблем обработала им фотографии, которые слил на комп всё тот же Серёжа. Если бы бита не было, у Маши по умолчанию не было бы доступа к Серёжиным фотографиям.
Биты можно комбинировать. Например, если у владельца выставлены все права на файл, то это можно представить как rwx (в буквенном выражении) или 7 в числовом. Соответственно, 5 – это rx, 6 – это rw, а 3 – это wx. То же самое касается всех остальных настроек – для группы и для других пользователей.
Исходя из этого, полную настройку безопасности для какого-то файла-папки можно указать тремя цифрами или 9ю буквами:
rwxrwxrwx
777
Утилита chmod меняет уровни доступа для объектов.
Синтаксис: chmod [-R] метка объект
Примеры использования:
chmod 755 file.ext Дать владельцу все права на файл, группе владельцев и всем остальным только чтение и выполнение.
chmod -R o-w directory Убрать для незнакомцев-не_владельцев (other) доступ на запись ко всем объектам внутри directory рекурсивно.
chmod a+x directory Дать всем (all) разрешение на вход в директорию
chmod u+s filename Дать файлу бит SUID
chmod g-w filename Запретить группе владельцев изменять файл
Есть ещё одна утилита, chown, она меняет ID-шники владельцев файла и пользоваться ей может только root. Ещё бы!
Синтаксис: chown [-R] владелец:группа объект
Примеры использования:
chown -R stimpack:users /home/stimpack Сбросить рекурсивно метки владельцев на владельца stimpack и группу владельцев users для всех объектов
su
Переключает текущий терминал на другого пользователя (по умолчанию на root-а). Запрашивается пароль пользователя (если он не пустой).
Синтаксис: su [-] [username]
Примеры:
su – Получить права суперпользователя.
su – username Получить права пользователя username. От root-а при этом пароль не требует. Всех остальных пароль спрашивает. Подлиза ещё та!
ps
Показывает список процессов, запущенных в системе. Очень много ключей.
Синтаксис: ps ключи
Частые приёмы использования:
ps Перечисление всех запущенных процессов на текущей консоли
ps -ef Просто вывод максимальной информации о всех процессах
ps -C ls Вывод имеющихся в системе процессов ls
Частые приёмы использования с другими командами:
ps -ef | grep X | grep -v grep Выборка из полного списка процессов всех графических серверов
ps -eo pid,user,args,nice Посмотреть владельца, PID, строку запуска и приоритет запущенных процессов.
top
Показывает текущий список процессов в памяти с важными характеристиками системы. В отличие от ps, умеет показывать занимаемые каждым процессом ресурсы системы – память, подкачку, процессор (а также общие данные системы вверху). Его дальний родственник в Windows – Task Manager.
Синтаксис: top [ключи]
Обычно запускается без параметров. Обновляется каждые несколько секунд. Чтобы выйти из него, нажмите q. Чтобы Показать краткую справку по управлению – нажмите h.
Частые приёмы использования
top -n 1 -b -i Отображает только те процессы, которые работают и сразу завершает работу.
kill
Убивает или перезапускает системный процесс по его номеру.
Синтаксис: kill [команда] PID1 PID2 PID3 … PIDN
Примеры использования:
kill -9 1114 12459 Убивает перечисленные процессы
kill 12312 Посылает сигнал культурного завершения процессу.
kill -1 334 Перезапускает процесс.
killall
Убивает или перезапускает системный процесс по имени его исполнимого файла. То же самое, что и kill, но вместо номеров процессов нужно подставлять имена исполняемых файлов. Это обычно удобнее человеку.
nice
Указывает приоритет при создании процесса. Есть понятие приоритета процесса – процессы с более низким приоритетом не смогут замедлить работу процессов с более высоким приоритетом. Т.е., на их выполнение будет тратиться время, незанятое процессами с высоким приоритетом. Таким образом, можно ускорить работу одной программы и замедлить работу другой. Например, вы слушаете музыку, качаете файлы и обжимаете видео. Чтобы музыка не подвисала, ей назначаете более высокий приоритет. Кстати сказать, в Linux более действенный механизм приоритетов. В Windows в отдельных случаях возможно торможение программ даже с максимальным приоритетом, если программа с низким приоритетом пытается сожрать все ресурсы.
Синтаксис: nice приоритет команда
Примеры:
nice -n -25 make Запустить программу компиляции с максимальным приоритетом.
nice -n +14 sync Запустить синхронизацию записи данных на диск с минимальным приоритетом (в свободное время).
renice
Меняет приоритет уже работающего процесса. Эта команда употребляется чаще nice в силу особенностей человеческого мышления 🙂 Ещё примечательна тем, что может менять приоритеты сразу всем процессам определённого пользователя или группы пользователей.
Синтаксис использования: renice приоритет кому.
Примеры:
renice -19 12315 Повысить приоритет до максимума процессу 12315.
renice +19 -u masha Опустить приоритет всем процессам пользователя masha. Мести ради.
free
Показывает состояние оперативной памяти в системе (загружено, свободно, в наличии, подкачка).
В принципе, это же самое показывает top в заголовке. Ключи -m и -g показывают все размеры в мегабайтах и гигабайтах.
df
Показывает подключенные разделы дисков в системы, в том числе компакт-диски, дискеты, сетевые шары. При указании пути выводит строчку подключенного раздела, на котором находится этот путь. Очень удобно, чтобы сообразить, на каком физическом диске мы сейчас находимся.
Синтаксис: df [ключи] [путь]
Частые приёмы использования:
df -h Показать все подключенные разделы и примонтированные сетевые ресурсы с размерами в читабельном формате (Гб, Мб, Кб)
Частые приёмы использования с другими командами:
df -h `pwd` Сколько места и размера на том разделе, где мы сейчас стоим.
lsof
Показывает открытые файлы…
Команды работы с сетью
mii-tool
Показывает состояние сетевых интерфейсов. Некоторые сетевые карты не поддерживают команд опроса mii, информация об этом появится после запуска команды.
netstat
Показывает активные сетевые сокеты, порты, соединения.
Синтаксис: netstat ключи
Приёмы использования:
netstat -na Быстро вывести все активные подключения и открытые порты.
netstat -nle Быстро вывести все открытые порты с подробной информацией.
netstat -nlp Быстро вывести все открытые порты с именами и PID-ами процессов, открывших их.
netstat -rn То же самое, что и route -n – показать список маршрутизации.
ifconfig
Конфигурирует и отображает состояние сетевых интерфейсов. Эта команда находится в каталоге /sbin, обычному пользователю (не root) может понадобиться указать полный путь к ней, вот так: /sbin/ifconfig.. ВНИМАНИЕ: Эта команда изменяет настройки интерфейсов только в оперативной памяти и никуда не сохраняет их на диске. То есть, после перезагрузки настройки будут приведены в изначальное состояние. Чтобы сохранить их, в suse воспользуйтесь программой yast, в debian (и его клонах) настройте файл /etc/network/interfaces, в redhat и его клонах создайте/измените файлы настроек в каталоге /etc/sysconfig/network-scripts/. Не приветствуется изменять файлы через графические визарды настроек, скажем того же redhat-а или mandriva – неимоверно глючат-с…
Синтаксис: ifconfig ключи | интерфейс параметры
Примеры использования
ifconfig -a Показать все существующие интерфейсы, в том числе не настроенные.
ifconfig eth0 192.168.0.1 netmask 255.255.255.0 Сконфигурировать первую сетевую карту, задать ей IP-адрес и сеть
ifconfig eth0:1 192.168.1.1 netmask 255.255.255.128 Создать виртуальный интерфейс с именем eth0:1, базирующийся на первой сетевой карте и дать ему другой IP-адрес и сеть.
ifconfig eth0 down Отключить сетевой интерфейс eth0. Прекращает всякую активность на интерфейсе и убирает из списка интерфейсов, показывающегося по умолчанию при запуске без ключей.
ifconfig eth0 up Включает ранее отключенный интерфейс.
ifconfig eth0 hw class 00:00:00:00:01:CC Изменяет MAC-адрес сетевой карты, если это поддерживает драйвер (обычно поддерживает). Перед этим необходимо отключить интерфейс (ключом down), затем поднять (up).
route
Настраивает роутинг, маршрутизацию потоков. Эта команда находится в каталоге /sbin, обычному пользователю (не root) может понадобиться указать полный путь к ней, вот так: /sbin/route. Так же, как и ifconfig, route не сохраняет настройки после перезагрузки и конфигурировать постоянные настройки нужно путём изменения файлов конфигурации. Для изменения настроек маршрутизации необходимы права root.
Синтаксис: route ключи
Примеры использования
route -n Отобразить таблицу маршрутизации. То же, что и netstat -rn.
route add default gw 192.168.0.1 dev eth0 Установить шлюз с указанным IP-адресом по умолчанию через первый сетевой интерфейс (eth0). Адрес шлюза должен принадлежать той же сети, что и адрес интерфейса.
route add -net 10.0.0.0 netmask 255.0.0.0 gw 192.168.0.3 Установить маршрут для сети 10.0.0.0/8 через хост 192.168.0.3.
route del -host 192.168.50.1 gw 192.168.0.4 Удалить маршрут к хосту 192.168.50.1 через хост 192.168.0.4.
iptables
Настраивает файерволл, позволяет блокировать и маршрутизировать пакеты. Настройки сохраняются только до перезагрузки системы. Для того, чтобы восстанавливать после перезагрузки, воспользуйтесь командами iptables-save >rules.txt и iptables-restore <rules.txt. Для работы необходимы права root.
Синтаксис:iptables [ключи] [таблица] [цепочка] [условие] [команда]
Рассказывать ну очень долго. Довольно внятный и удачный мануал на русском можно найти здесь: http://iptables-tutorial.frozentux.net/
Часто для выполнения какой-либо задачи требуется несколько команд iptables.
Примеры использования:
iptables -n -L Показать содержимое таблицы filter (отсева пакетов)
iptables -n -t nat -L Показать содержимое таблицы nat (подмены адресов)
iptables -I INPUT 1 -s 192.168.0.5 -j REJECT Запретить доступ с адреса 192.168.0.5
traceroute
Рассказывает, через какие шлюзы проходит соединение с указанным вами хостом. Полезно для разрешения конфликтных ситуаций – когда не знаете по какой причине нет доступа к какому-либо серверу. Как правило, виноват в отсутствии доступа последний полученный в списке адрес, после которого идут сплошные звёздочки. Можно указывать как имя, так и ip-адрес хоста, к которому хотите узнать маршрут. В Windows аналог – tracert, правда, более тормозной…
Синтаксис: traceroute host
Теперь, когда освещены основные команды и в руках есть инструменты, начнут возникать вопросы типа: а как мне то совместить с этим? А как мне отменить действие того? А как…? То есть, требуется осветить ухищрения и дополнения, касающиеся взаимодействия именно пользователя с консолью, оболочкой.
Чтобы прервать действие текущей команды и выгрузить её к чертям, нажмите Ctrl+C
Если Вы хотите только заморозить её на время, нажать паузу – нажмите Ctrl+Z
Чтобы вернуть процессу жизнь – напишите fg и нажмите Enter. Вы вернули процесс на foreground (передний план)
Если вы хотите, чтобы процесс работал на заднем фоне, а вам отдал приглашение для дальнейшей работы, вместо fg укажите bg – и он уйдёт на background – задний план.
Кроме того, можно сразу запустить процесс на задний план – для этого в конце строки всего лишь надо добавить символ &
Например: cp -r * /mnt/hda6/ & Начнёт на заднем фоне копирование, а вам вернёт приглашение для работы и номер процесса копирования (PID).
Можно выполнить команды последовательно одну за другой, разделив их знаком точки с запятой,
Например: cp -r * /mnt/hda6 ; /sbin/poweroff Скопирует все файлы в каталог, а затем выключит компьютер.
Можно быстро автоматизировать контроль над выполнением программы – например, в случае удачного завершения какого-либо действия выполнить одну команду, а в случае неудачи – другую:
copy * /mnt/hda6 && /sbin/poweroff || echo “ERROR!” – как видно на примере, разделительные символы между командами характеризуют удачность выполнения команд. Хитрость в определении удачности кроется в возвращаемом цифровом коде выхода программы. Если не произошла ошибка во время выполнения, команда возвращает 0, иначе число больше 0.
Простые циклы и постановка условий
Для построения разного рода смысловых схем из программ полезно использовать циклы и условия. Это является основой всех программ. Это полезно в малых дозах и при обычной работе с системой. Например так:
do
if [ -d $i ]
then
echo “Directory: $i”
elif [ -L $i ]
then
echo “Symlink: $i”
else
echo “File: $i”
fi
done
То же самое можно написать в одну строчку:
Здесь квадратные кавычки являются завуалированной командой test. Это или программа, или команда оболочки, подробнее о её параметрах можно узнать через man test или man sh.
Как писать простые скрипты
Скрипты – текстовые файлы с битом исполняемости или без. В заголовке (первые байты) имеют сигнатуру запуска с помощью программы-интерпретатора. Эта сигнатура состоит из двух символов “#!”, после которых идёт путь к программе-интерпретатору. Например, заголовок скрипта, который исполняется программой-оболочкой:
#!/bin/sh
Если запустить файл, содержащий это в самом начале, на выполнение, то запустится новый процесс sh, на вход которого будут переданы все команды, находящиеся в теле скрипта. Это удобнее тем, что команды можно писать не в одну строку, а в развёрнутом виде и с возможностью удобного редактирования, повторного применения. Есть два варианта выполнения уже написанного скрипта – либо дать ему бит исполняемости и запустить непосредственно из командной строки, либо дать его в качестве параметра требуемому интерпретатору, вот так:
1 Вариант:
./filename.sh
2 Вариант:
Чисто системные вещи
Как узнать, в какой конкретно системе я нахожусь?
Первое движение – наберите команду:
uname -a
Это сообщит версию ядра, тип системы, время компиляции, тип железа.
Затем, в большинстве дистрибутивов в каталоге /etc находится файл блаблабла-release или блаблабла_version, где блаблабла – что-то близкое к названию дистрибутива.
Узнать наличие можно так:
ls /etc/*(release,version)
Затем вывести на экран содержимое подходящих среди найденного файлов:
cat /etc/debian_version
Это более подробно расскажет о дистрибутиве.
Что такое переменные среды и как их использовать?
Переменные среды – это контейнеры в памяти оболочки (shell, консоль) для содержания настроек. Полный их список можно посмотреть командой
set
Некоторые меняются автоматически, остальные довольно статичны. Они используются программами для более корректной работы в среде. Каждая программа (вернее, процесс) получает слепок значений этих переменных на момент запуска и затем пользуется ими до конца своей работы. То есть, если вы обновили какие-либо переменные и хотите, чтобы об этом узнали уже запущенные процессы, их придётся перезапустить. Но, в отличие от Windows, где изменение переменных среды в консоли сразу применяется в среде в целом, в Unix изменение переменных может наследоваться лишь текущим или дочерним процессом, относительно того, который совершил изменение переменной. Образно говоря, если на дереве процессов одна ветвь изменила свой слепок переменных, то этот слепок будет использоваться лишь ею и её дочерними ветвями переменных. Изменение не применится к любому вновь созданному процессу, родителем которого стала другая консоль (tty)! Вот почему в ряде случаев приходится перезапускать X-сервер или другие, серверные процессы.
Изменить переменные можно простой операцией присваивания:
имя_переменной=значение (Внимание – пробелы недопустимы. Если в строке значения есть пробелы, нужно взять всё значение в кавычки.)
Таким образом новое значение переменной будет в дальнейшем использоваться этим процессом. Для того, чтобы это значение наследовали все вновь созданные дочерние процессы, нужно экспортировать переменную для потомков:
export имя_переменной
Во многих оболочках, например, bash, zsh – можно объединить эти две команды в одну:
export имя_переменной=значение
Можно использовать значения переменных в своих командах и скриптах. Для этого перед именем переменной нужно поставить знак бакса.
/bin/zsh
В переменных хранится многое – например, форма вашего приглашения командной строки:
echo $PS1
Самая важная – это, безусловно, PATH. Содержит в себе пути, разделённые через двоеточие, в которых ищется набранная вами команда. У root-а в PATH кроме стандартных путей, присутствуют пути /sbin и /usr/sbin, где лежат команды, которыми обычно пользуется только root.
Что такое кодировка и как её посмотреть/поменять
Кодировка – это название порядка, в котором расположены все символы в шрифте. Для показа текста программы используют шрифты. Шрифт может поддерживать одну или более кодировок. Есть такие термины, как текущая кодировка, системная кодировка, кодировка по умолчанию. То есть существует переменная, содержащая в себе название кодировки. Её можно менять как глобально, так и для каждого приложения на время работы. Посмотреть все переменные, относящиеся к кодировке, можно командой:
locale
Изменить достаточно просто, например:
export LANG=ru_RU.CP1251 Таким образом меняем кодировку на cp1251.
В большинстве современных дистрибутивов кодировка по умолчанию UTF8 (юникод, содержащий в себе сразу все известные символы). Другие кодировки обычно содержат в себе кроме латинских символов ограниченные наборы других букв для разных языков. Предыдущим стандартом де-факто для русскоязычных дистрибутивов была кодировка KOI8-R. Многие консольные программы привязываются к значениям переменных, перечисленных в locale и выводят свои сообщения и другую информацию на языке, который указан перед кодировкой. К примеру, если у вас переменная LANG равна en_EN.что-то ещё, программы предпочтут общаться с вами по-английски, даже если имеют множество переводов в запасе. Также текущая кодировка влияет на отображение имён файлов, находящихся на разделах и подключенных сетевых ресурсах. См. команду mount. Ранее проблема русификации и борьбы с кодировками была актуальной, но примерно с 2003-2004 года ситуация значительно изменилась к лучшему и проблем почти нет.
монтирование файловых систем
Для многих это заметная часть работы с linux со множеством подробностей и путей решения.
Как уже говорилось выше, для монтирования необходимы два объекта – блочное устройство (в /dev/) и какая-либо директория, желательно пустая (точка монтирования), в которую будет монтироваться это устройство. В системе есть файл /etc/fstab, в котором прописаны все статичные точки и объекты монтирования. Его синтаксис довольно прост:
устройство точка_монтирования файловая_система параметры_монтирования бит_критичности бит_проверки
Если устройство уже указано в этом файле, его можно монтировать без указания параметров:
mount /dev/устройство
Если же устройство там не указано, то в большинстве случаев смонтировать его может только root и при этом как минимум придётся указывать точку монтирования. Если для указанного в fstab устройства в параметрах есть опция users, любые пользователи смогут смонтировать и размонтировать указанное устройство. Не получится размонтировать устройство, примонтированное другим пользователем. Оно и логично. Параметры монтирования сильно зависят от файловой системы, под котору отформатировано устройство. Кроме того, в системе есть файл /etc/mtab, в котором перечислены все уже смонтированные устройства и указаны все параметры, которые были применены при монтировании. Его аналог в виртуальной системе /proc – файл /proc/mounts. Также полезен файл /proc/partitions для изучения присутствующих в системе блочных устройств. К примеру, если вы воткнёте флешку, в /proc/partitions добавится одна-две строки с указанием имени устройства и размера раздела (партиции) флешки.
Смонтировать удастся только те разделы, которые отформатированы в доступные этому ядру файловые системы. Список доступных файловых систем перечислен в /proc/filesystems. Изменить этот список можно перекомпиляцией ядра (см. ниже).
Пример монтирования флешки с файловой системой FAT32 и файлами с русскими именами, созданными под Windows (типичная ситуация):
mount /dev/sda1 /mnt/sda1 -t vfat -o codepage=866,iocharset=koi8-r
iocharset указывает на текущую локаль (см. выше – кодировка). Указывать тип файловой системы необязательно – mount обычно правильно определяет сам.
запись для быстрого монтирования в fstab:
/dev/sda1 /mnt/sda1 vfat noauto,users,uid=username,gid=groupname,codepage=866,iocharset=koi8-r 0 0
Параметр noauto говорит о том, что монтирование будет произведено вручную, а не при старте системы.
То же самое для ресурса samba:
mount //servername/sharename /mnt/samba_share -t smbfs -o username=user_name/domain_name,ip=IP,codepage=cp866,iocharset=utf8
//servername/sharename /mnt/samba_share smbfs noauto,users,username=user_name/domain_name,ip=IP,codepage=cp866,iocharset=utf8 0 0
Если вы сами скомпиляли ядро с указанием правильной codepage и пр. – указывать эти параметры не нужно.
Кроме реальных файловых систем и сетевых шар, в /etc/fstab обычно прописывается некоторое количество виртуальных fs, нужных для функционирования системы, а также разделы подкачки (да, да – Вы не ошиблись – разделов, а не файлов. Разделов, у которых нет фрагментации :-)). Конечно, можно подкачку сделать и файлом… Здесь вообще возможно всё. Например, смонтировать ISO-образ, как папку:
mount /mnt/image_cd.iso /mnt/iso -o loop
По-моему, до этого никогда не дорастёт Windows в силу избыточности абстракционных прокладок между юзером и системой.
Кстати, можно создать файл, отформатировать его и подключить, как раздел. 🙂 Вот три строчки:
dd if=/dev/zero of=filename.ext bs=1048576 count=размер_в_мегабайтах
mkfs.ext3 ./filename.ext
mount ./filename.ext /mnt/some_directory -o loop
Можно также ещё и зашифровать его, но тут полезно бы почитать материальчики в гугле. В принципе, всё просто.
Касательно новых систем. Файл /etc/fstab был удобной штукой, но не совсем. Пока root явно не разрешит – ничего не смонтировать. В свете распространения кучи съёмных носителей, фотоаппаратов, прописывать всякие строчки в fstab стало мучением. Придумано много вариантов, с HAL, например. В итоге, в момент появления флешки в системе, запускается тот или иной скрипт, автоматом монтирующий её в только что созданную поддиректорию в /media. Обычно название директории равно её лейблу или носит название типа носителя, например, usbdisk. А вот с размонтированием посложнее. Да и с указанием дополнительных параметров (например, локализации) придётся попариться. Мож я и варвар, но если не используется pmount (debian-системы), то я делаю sync и просто вытаскиваю флешку. Системная команда sync делает одноимённый системный вызов и сбрасывает все несохранённые данные в кэшах дисков на носители (чтобы не осталось ничего недописанного), а факт отсутствия носителя обычно размонтирует его. Утилита pmount позволяет монтировать/размонтировать съёмные носители под обычными пользователями, пользуясь полномочиями root-а.
Например, так:
pumount /dev/sda1
Не пытайтесь найти её установленной. Такие системы как suse, mandrake, redhat – просто синхронизируют fstab перед монтированием съёмных носителей и ограничиваются командой mount.
Как запустить сервис?
Сервис в linux – это не более, чем обычный бинарник, запущенный при старте системы. Для удобства вокруг каждого такого бинарника “оплетён” скрипт, который его запускает и останавливает с разными параметрами командной строки, следит за его ID-шником и так далее. Исходя из этого, легко создать свой “сервис”, который запускается при старте. Обычно все эти скрипты хранятся в каталоге /etc/init.d. Не все скрипты, которые находятся в этом каталоге, запускаются при старте системы. У системы при запуске есть несколько уровней (вариантов запуска) на выбор. Каждый уровень определяет, какие сервисы будут загружены при старте. Уровни представляют собой каталоги с симлинками на нужные сервисы и при запуске определённого уровня просто происходит запуск всех симлинков в определённом каталоге. Т.е., всё примитивно и просто. Каталоги уровней выглядят обычно так: /etc/rcN.d (почти все линуксы) или /etc/rc.d/rcN.d (redhat-suse), где N – это номер уровня. Кроме того, есть три специальных уровня – S, 0 и 6, которые являются начальной (необходимой) загрузкой, уровнем выключения и уровнем перезагрузки. Дело в том, что при запуске все скрипты-сервисы запускаются с параметром start, а при останове – с параметром stop. Поэтому почти все сервисы, симлинки на которые находятся в уровнях 0 и 6, запускаются с параметром stop, что приводит к корректному выключению всех служб.
Указатель уровня загрузки по умолчанию указан в файле /etc/inittab и выглядит так:
где 3 – уровень загрузки системы по умолчанию. Всё это вместе (симлинки, скрипты сервисов и прочее) называется стандартом SystemV. Есть ещё BSD-стандарт загрузки, он применяется в Linux Slackware и BSD-юниксах – там нет симлинков и директорий, а все действия по загрузке прописаны в единственном скрипте.
Примеры:
/etc/rc6.d/K20samba Симлинк останова сервиса samba при перезагрузке.
/tc/rcS.d/S40networking Симлинк поднятия сетевых интерфейсов при начальном старте системы.
/etc/rc2.d/S15ejabberd Симлинк поднятия службы EJABBERD при старте во втором уровне.
Использование:
init 5 Переключиться на уровень 5. Доступно только root-у.
init 0 Выключить систему.
init 6 Перезагрузить систему
/etc/init.d/ssh restart Перезагрузить сервис ssh
/etc/init.d/inetd start Запустить сервис inetd
Кстати, в Unix-системах существует интересный сервис inetd (или xinetd) – его народное название “суперсервис”. Он существенно облегчает нагрузку на систему в случае кучи поднятых служб – в результате реально в памяти висит его единственный процесс и прослушивает кучу сетевых портов, которые закреплены за подвластными ему службами. В момент обращения на какой-либо порт извне, inetd быстро запускает процесс службы и передаёт ему соединение. Это оправданно при редких соединениях и большом количестве служб. Его конфигурация хранится в /etc/inetd.conf или /etc/xinetd.d
Установка программ
#TODO:
Что делать, если не найдена в линуксе моя железяка?
Для начала взять свежую версию ядра и скомпилять его, поискав в перечне драйверов свою железяку.
Как скомпилять ядро?
Итак, ядро – это файл vmlinuz-version в папке /boot, где version – номер в цифирках. Кроме того, типично в папке /lib/modules/version хранится энное количество файлов модулей (драйверов). Почти все драйвера можно воткнуть или в само ядро или вынести отдельно в эту папку в виде файла. То есть, получается три состояния какого-либо отдельного драйвера – не скомпилян вообще, скомпилян в виде модуля, вкомпилян в ядро намертво. Преимущество модулей перед вариантом вкомпилирования в ядро в том, что их можно загружать и выгружать по необходимости, а вкомпилянные намертво грузятся при старте ядра и висят в памяти всегда. Существуют и монолитные ядра – в них всё, что необходимо – вкомпиляно прямо в ядро, а поддержка модулей вырублена вообще. Это применяют на боевых защищённых системах, чтобы исключить шанс загрузки самодельного модуля злоумышленником. Кроме драйверных модулей в ядре есть много другого кода, отвечающего за логику работы системы и прочие фишки.
Также существует такая вещь, как initrd – это такой сжатый образ раздела, содержащий дополнительные модули ко всяким хитрым скази-контроллерам и редкоиспользуемым файловым системам, который подменяет при самом старте ядра реальный корень и используется лишь до тех пор, пока в нём существует необходимость. Когда же все необходимые модули с него были использованы, то ядро опять цепляет вместо него реальный корневой раздел. Это своего рода костыль, но он широко применяется во всех дистрибутивах, потому что заранее неизвестно, какое железо окажется у клиента, а всю дрянь подряд прямо в ядро компилять некультурно. Для поддержки этого режима (загрузки с помощью initrd) во всех загрузчиках даже есть отдельная опция – initrd с параметром пути к файлу. Повторюсь, что initrd – это такой сжатый файл с образом диска внутри, где есть всякие левые модули. Т.е., ничего принципиально нового. Используется лишь тогда, когда ядро имеет шанс не достучаться до реального корневого раздела из-за отсутствия необходимых модулей (драйверов). Если же компилять собственное ядро под определённое железо, то initrd не нужен в принципе и только жрёт лишнее место-память.
Далее. В большинстве дистрибутивов ядра по умолчанию идут с максимальным включением всех драйверов, имеющихся в той версии ядра, которое будет в составе дистрибутива. Ну, чтобы на всём железе загрузилось. Поэтому, когда возникает ситуация, что что-то не работает, то первое, что надо сделать – это скачать наираспоследнейшую версию ядра и прокомпилять её, указав только то железо в настройках, которое у Тебя есть. Выборочная, а не тотальная компиляция всех фич ядра сильно экономит время и немного экономит дисковое пространство. Скачивать последнюю версию ядра (исходники) надо с ftp://ftp.kernel.org,
там много веток, но стабильные (нужные) – лишь те, которые чётные. Типа 2.0, 2.2, 2.4, 2.6… Конкретный файл будет иметь больше цифирок в версии, например, 2.6.15.16 Скачивать лучше тот файл, который имеет меньший вес. Т.к. там одна и та же версия сразу сжата в как минимум, два типа архиватора – gz (меньшее сжатие) и bzip2 (bz – большее сжатие, но распаковщик есть не на всех дистрибутивах). Кроме того, есть файлы с хешем, размер несколько байт (для проверки корректности скачивания). Общий расклад размеров таков:
Сжатый исходник ядра – 30-50 Мбайт
Распакованный исходник ядра – 300-500 Мбайт
Скомпилянное ядро с модулями – 1 – 50 Мбайт
Распаковывать просто – через:
tar xjf linux-XXXXXX.tgz
Помещать распакованное ядро рекомендуется, но не обязательно, в папку /usr/src. Т.е., скачиваем, заходим под рутом в папку /usr/src и уже оттуда делаем распаковку:
$ su –
Password:
# cd /usr/src
# tar xjf /home/username/linux-2.6.18.tbz
# ln -s linux-2.6.18 linux
# cd linux
# make menuconfig
Только версия, конечно, может отличаться.
Если при запуске в каталоге с распакованным ядром make menuconfig выводятся ошибки – скорее всего, отсутствуют пакеты компиляторов (gcc, make и проч.).
Что именно выбирать дальше – это отдельная история. Если вы собираетесь скомпилировать без поддержки initrd, то в Filesystems вам необходимо выбрать не модулем [M], а внутрь ядра [*] ту файловую систему, под которую отформатирован ваш корневой (/) раздел (см. через mount). Кроме того, внимательно смотрим спецификацию железа и точно таким же образом ([*]) компилируем драйвер к своему IDE/SATA/SCSI/USB-контроллеру, через который подключен ваш винт с корневым разделом.
После того, как вы определились с нужными драйверами, выходите с сохранением файла конфигурации (имя файла будет .config, увидеть можно через ls -a) и набирайте такое заклинание:
make bzImage && make modules && make modules_install && make install
Затем может понадобиться внести новые записи в /boot/grub/menu.lst (если у вас загрузчик grub) или в /etc/lilo.conf (если у вас lilo – для него, кстати, ещё необходимо запустить команду lilo)
Всё это в принципе несложные вещи, главное, понимать, что делаешь в каждый момент времени. Фактически Вы сформируете новый файл ядра, о котором должен знать загрузчик, а также получите набор указанных Вами модулей в каталое /lib/modules. Затем перезагрузка и выбор вашего пункта в загрузчике. Т.е. загрузится тот же самый Ваш линукс, только с другим ядром. Старое ядро тоже останется на всякий случай.
Насколько я знаю, с первого раза почти ни у кого не получается скомпилировать ядро удачно. Это как конструктор Lego – получится обязательно, но после того, как вы осознаете роль каждой детали в схеме…
Чем консоль лучше mc?
Midnight Commander – популярный файл-менеджер с двумя панелями, клон far и Norton Commander для Unix-а. Популярность его основана на том, что наглядность работы с ним лежит на поверхности и не нужно ничего изучать, чтобы начать с ним работать. К сожалению, на этом все достоинства этой программы заканчиваются. Наглядность работы в консоли можно довести до уровня MC и даже больше – советую посмотреть на ZSH. Для этого достаточно нескольких строк настроек в профиле пользователя. А вот по части безглючности и гибкости – тут MC явный аутсайдер. Да и по части логичной автоматичности – далеко не удачный выбор. Скажем, простейшая операция – я хочу скопировать рекурсивно содержимое одной директории в другую. Для этого мне в одной панели нужно встать на директорию, откуда я собираюсь скопировать объекты, а в другой – куда. Щелчков и ударов по клавишам для этого придётся выполнить немало, ну да ладно. В консоли мне придётся написать это:
cp -r /from /to
Следует учесть, что пути к директориям в консоли добиваются [tab]-ами, т.е., набор минимален и в принципе сравним с количеством нажатий клавиш в варианте с MC.
Теперь начнём копировать. По идее, MC гораздо нагляднее – выводит скорость копирования, процент завершения, время до конца копирования, имена копируемых файлов и всё такое… Хм. Всё это наглядно лишь в том случае, если вы собираетесь наблюдать за этим процессом. Обычно, если процесс будет быстротечным, смотреть на это нет смысла. Если же очень долгим – то же самое. Лишь изредка смотреть – завершилось или нет.
А что касается возможных ошибок чтения-записи? По умолчанию MC остановится и затормозит процесс копирования после первой ошибки доступа. Т.е., приходим мы через час, а там – 1% выполнения. Смешно? Хорошо, будем справедливы – в настройках можно выставить игнорирование ошибок – тогда процесс будет продолжаться непрерывно. А где же список ошибок?, спросите вы. Опаньки, приехали.
Спрашивается, зачем мучать ж, когда всё это из коробки будет в консоли? И лог ошибок, и чтение-запись без остановки и уровень подробности и флаги перемещения. Это всё при примерно одинаковом уровне сложности набора.
Тот, кто имеет довод типа “Если надо скопировать некоторые файлы, то я замучаюсь их все писать в одну строку в консоли”, скорее всего незнаком ни с ZSH, ни с регулярными выражениями. Ибо выбирать в консоли можно как стрелками, так и буквами и даже спецсимволами и регулярными выражениями.
Обратная сторона медали сомнительной наглядности кроется в торможении изучения системы – очень часто люди, подсевшие на MC, начинают спрашивать меня – как сделать то или это, что выходит за рамки его функционала, либо нудно делают монотонные действия в MC, могущие решить проблему… Зачем?? Лишь бы не напрягать голову. Помнится, в составе Redhat Enterprise нет mc. Сколько было криков по этому поводу! Прямо-таки невозможно работать. 🙂
Полезные ссылки про систему:
http://citkit.ru/articles/281/