Изучаем Линукс

Ens

Местный
Подтвержденный
Сообщения
3.471
Реакции
2.112
Я столкнулся сегодня с уродским пониманием сетевой безопасности. Меня это закоробило и теперь, мы все, ПРИНУДИТЕЛЬНО, будем изучать Линукс. В этой теме я буду выкладывать основы и лайфхаки по системе Линукс. Ага, RuTor образовательный.
Окей, мой друг. Мы сейчас не будем разбираться в дистрибутивах, как и что устанавливать, мы это в вопросах разберём потом. Всё там устанавливается как и маздайка и ничего сложного там нет. Ок! Перейдём к основам. Итак, список основных команд в Линукс.

terminal.png

Это тема скорее для новичков, хотя может быть и "старички" некоторые команды не знают. Итак, нажимаем CTRL+ALT+T, открывается терминал и вводим команды соответственно надобности.

apropos - поиск строки в заголовках и названиях документации (дополнительно вводится слово для поиска). Выдаёт список всего найденного.
ar - средство архивирования, предназначено для создания и распаковки архива.
arch - отображает данные об архитектуре центрального процессора.
at - ставит задания в очередь для последующего выполнения в указанное время.
atq - показывает список заданий которые поставлены в очередь на выполнение.
aumix - запускает в интерактивном режиме утилиту, которая управляет различными настройками звуковой карты.
autorun - автоматически распознаёт все доступные приводы CD-ROM в системе, монтирует их при вставке диска и может запускать отдельные приложения (например проигрыватель). Для использования, необходимо добавить параметры в файл привода.
badblocks - проверить указанное устройство на наличие повреждённых секторов (указать устройство).
bunzip2 - распаковывает указанный файл на 30%быстрей чем gzip.
bzip2 - сжимает указанный файл по ускоренному алгоритму.
bzip2recover - делает попытку восстановить данные из повреждённого файла сжатого bzip2.
cal - форматированный календарь на текущий месяц (добавить y и будет календарь на весь текущий год).
cd - смена текущего каталога. По умолчанию переходит в домашний каталог текущего пользователя (если без параметров).
cdda2wav - утилита предназначена для записи звуковых дорожек с аудио-компактдиска в файлы формата WAV. Если имя файла не указано, то запись идёт в файл audio.wav в текущем каталоге.
cdlabelgen - команда предназначена для подготовки обложек к коробкам компакт дисков. Результат в файле формата Post Script. Требуется наличие интерпретатора языка Perl не ниже 5.003 версии.
cdp - запуск проигрывателя аудио-компактдисков в текстовом режиме.
cdparanoia - считывает звуковые дорожки с аудиокомпактов и записывает в файлы .wav, .aiff, .raw.
chage - применяется для изменения срока действия учетной записи. Для администрирования.
chfn - изменяет сведения о пользователе в файле /etc/passwd из которого берёт информацию команда finger.
chgrp - команда для администратора, для изменения группы владельцев файла.
chmod - изменяет режим доступа к файлу. Символьный или числовой формат.
chown - смена владельца указанного файла. Требуется доступ root.
clear - очищает экран терминала (если это возможно).
cmp - производит быстрое сравнение двух указанных файлов. Если они идентичны, то никакие сообщения не выводятся.
column - форматирует входной текст из указанного файла в список из пяти колонок.
combine - объединяет два и более графических файла в один. Огромное количество спецэффектов. Является частью пакета Image Magick и можно взять
compress
- сжимает указанный файл по другому алгоритму.
convert - преобразует указанный входной графический файл, в выходной. Распознаёт множество форматов. Скачать так же как и предыдущую.
cp - копирует один файл в другой, или несколько файлов в каталог.
cpio - позволяет создавать архивы и извлекать из архивов файлы. Позволяет копировать файлы. Необходимо указывать соответствующие параметры.
crontab - обеспечивает возможность выполнения определённых задач по расписанию. Чаще используется администратором, хотя свои задачи могут быть и у пользователей.
csplit - разбивает файл на несколько частей.Надо задать метод разбивки (строки и т.д.).
date - отображает текущие дату и время, по системным часам ядра.
dc - калькулятор.
dd - копирование файла с одновременным выполнением различных, дополнительных преобразований.
debugfs - применяется для восстановления файловой системы (ext2,ext3) если недостаточно команды fsck.
df - показывает количество используемого и свободного дискового пространства для всех подключенных разделов файловой системы.
diff - сравнивает два указанных текстовых файла.Каждое отличие выводится в контексте. Позволяет сравнивать каталоги.
diff3 - сравнивает три указанных файла и выводит результаты.
dir - отображает файлы в текущем каталоге в алфавитном порядке и с учётом регистра.
dmesg - выводит на экран сообщения ядра, включая отображаемые при запуске и потом. Что бы удобней читать, вводите dmesg|less.
du - показывает количество блоков диска, занятых каждым из файлов каталога.
e2fsck - проверяет и при необходимости восстанавливает повреждённый том файловой системы (ext2,ext3).
echo - выводит строку текста на стандартное устройство вывода.
eject - извлекает носитель из указанного устройства. Если устройство смонтировано то команда производит размонтирование перед извлечением носителя.
emacs - запуск текстового редактора Emacs.
enscript - преобразует указанный текстовый файл в формат Post Script. Вывод может быть направлен на печать или записан в файл.
fdformat - форматирование гибкого диска. Дополнительно вводится имя устройства и необходимый вид форматирования.
fetchmail - утилита получения почты. Работает в фоновом режиме. Скачивает почту с указанного сервера. Если её нет, скачать можно
fg
- переводит процесс выполняемый в фоновом режиме в приоритетный режим.
fgconsole - показывает количество активных виртуальных консолей.
file - показывает тип содержимого указанного файла (текст, выполняемый, данные).
find - поиск файлов в текущем каталоге. Если указать путь, можно искать везде.
finger - отображение информации о пользователе, имя которого указано в команде.
fmt - данная утилита производит форматирование каждой строки в указанном файле таким образом, что все строки имеют одинаковую ширину.
free - отображает информацию об оперативной памяти, подкачки, кэше, свободная память, общая и т.д.
fsck - проверяет и восстанавливает файловую систему.
ftp - устанавливает соединение с указанным узлом и позволяет скачивать или закачивать файлы.
gpasswd - устанавливает пароль группы.
gpg - позволяет зашифровать и расшифровать файл. Метод шифрования открытым ключом. Позволяет создавать электронные подписи. Если этой программы нет у Вас, скачайте
groupadd
- создание группы пользователей с указанным именем.
groupdel - удаляет группу с указанным именем.
groupmod - изменяет параметры группы с указанным именем.
gunzip - распаковывает указанный файл (расширения .z, .gz, .tgz, .zip ).
gzexe - позволяет сжать исполняемый файл с указанным именем так, что бы он автоматически распаковывался и выполнялся, когда пользователь даёт команду на выполнение сжатого файла.
gzip - сжимает указанный файл.
halt - быстрое и корректное выключение системы.
head - утилита выводит первые десять строк файла. Можно и несколько файлов.
history - показывает пронумерованный список команд, которые Вы выполняли в этом и предыдущем сеансе. Если в списке истории их довольно много, то увидите последние.
hostname - команда отображает идентификатор данного узла сети (его имя). root может изменить имя узла на новое.
hwclock - встроенные часы Вашего компьютера.Для изменения даты и времени и синхронизации с системными часами, необходимы привилегии root.
id - отображает действующие значения идентификаторов пользователя и группы для текущего пользователя.
identify - определяет формат и характеристики графического файла и проверяет целостность и наличие ошибок.
ifconfig - отображает состояние текущей конфигурации сети или настраивает сетевой интерфейс.
ispell - запуск интерактивной утилиты для проверки орфографии в указанном файле.
jobs - выводит список всех выполняемых и приостановленных задач.
joe - простой в использовании редактор работающий в текстовом режиме.
kernelversion - показывает основную и дополнительную версии ядра.
kill - завершить процесс (необходимо указать какой).
killall - позволяет управлять процессами используя их имена или имена файлов, а не идентификаторы как в kill. Завершаются все указанные процессы.
last - показывает список пользователей, которые заходили в систему с момента создания файла /var/log/wtmp.
lastlog - проверяет историю входа в систему зарегистрированных пользователей. Форматирует и выводит на печать файл /var/log/lastlog.
less - отображает содержимое указанного файла на экране и позволяет удобно просмотреть.
logger - посылает запрос демону syslogd с просьбой поместить сообщение в системный журнал.
login - запрос от пользователя имени и пароля (запрос от системы к пользователю) для входа в систему (по умолчанию, при наборе пароля, он не отображается).
logout - выход из текущего сеанса оболочки.
lpr - отправляет документ на печать демону печати.
ls - показывает все файлы в текущем каталоге в алфавитном порядке. Аналогична dir.
lynx - запуск консольного WEB-браузера.
mail - утилита редактирования и просмотра электронной почты. Отправка и получение писем.
man - справочное руководство.
mc - запускает программу Midnight Commander диспетчер файлов в текстовой консоли. Напоминает MSDOS менеджеры и довольно проста и удобна в использовании. Очень много нужных и удобных функций.
mcrypt - шифрует указанный файл. Создаётся новый файл в рабочем каталоге с расширением .enc. Вам будет предложено ввести пароль. Не забудьте его.
mdecrypt - расшифровывает это же файл. Если этих утилит нет, скачайте
mdu
- показывает дисковое пространство занятое каталогом MSDOS.
mesg - контролирует доступ к Вашему терминалу, что бы коллеги не могли засыпать Вас сообщениями с помощью команды write.
mkdir - создание указанного каталога.
mkpasswd - создаёт высококачественный пароль, состоящий по умолчанию из девяти символов и содержащий по крайней мере буквы в разном регистре и цифры.
mktemp - создаёт уникальное имя файла для временной работы.
mogrify - преобразует графический файл и перезаписывает исходный.
montage - преобразование нескольких файлов в объединённое изображение. Скачать
more
- средство постраничного просмотра текстового файла.
mount - монтирование файловой системы.
mpg123 - воспроизводит на основном устройстве воспроизведения аудио файл в формате .mp3. Вписывается имя файла или его адрес в Интернет. Чтобы остановить воспроизведение Ctrl+c. Что бы остановить и выйти из программы Ctrl+c нажать дважды.
mv - переименовывает или перемещает файлы или каталоги.
netstat - вывод информации о сетевой подсистеме. Очень много настроек и параметров.
nano открывает консольный текстовый редактор.
nice - позволяет отобразить или настроить приоритет задачи.
nl - команда нумерует строки в указанном файле.
oclock - простые часы, которые висят на рабочем столе (много дополнительных параметров).
 
Продолжение...

passwd - позволяет пользователю с указанным именем изменять пароль своей учётной записи. root может изменить пароль любого пользователя.
paste - объединяет соответствующие строки файлов в колонки. При желании можно объединить несколько файлов.
pdf2ps - преобразует файл формата PDF в Post Script. Результат записывает на диск.
pdftotext - преобразует файл из формата PDF в текст и записывает результат на диск.
pico - простой и удобный в использовании текстовый редактор. Удобен для редактирования конфигурационных и простых файлов.
ping - отправка на указанный адрес пакетов для проверки возможности соединения с этим узлом.
play - воспроизводит звуковой файл с указанным именем. Автоматически распознаёт тип файла. Позволяет добавлять различные звуковые эффекты к воспроизводимым файлам.
playmidi - воспроизводит звуковые файлы в формате MIDI.
poweroff - корректное выключение системы.
pr - подготавливает текст к печати, осуществляя форматирование с разбиением на страницы.Можно подготовить несколько файлов.
ps - выводит список всех работающих процессов.
pstree - показывает иерархию процессов системы, что хорошо показывает их взаимозависимость.
pwd - отображает полный путь к текущему каталогу.
pwgen - создаёт высококачественный пароль, который хорошо запоминается. Длинна пароля указывается числом. Если этой утилиты нет, скачать
quota
- показывает текущую статистику использования диска и текущие ограничения для пользователя или группы с указанным именем.
quotacheck - исследует файловую систему на предмет использования дискового пространства.
quotaon - включает и отключает ограничения на использование дискового пространства.
rcp - применяется для копирования файлов с одного компьютера на другой.
rdate - получает значение даты и времени от другого узла сети. Используется для синхронизации системного времени узлов.
rdev - при вызове без параметров выводит информацию о текущей файловой системе.
reboot - корректное выключение с последующей загрузкой. Перезагрузка.
rec - записывает входной сигнал с микрофона или других входов в звуковой файл. Тип файла следует указать с помощью параметра (type). Есть возможность добавить звуковые эффекты.
rename - переименовывает файлы. Очень удобно, когда много файлов.
renice - задаёт приоритет для указанной задачи.
resize - изменяет размер окна виртуального терминала в графическом окружении.
restore - восстанавливает файлы заархивированные с помощью команды dump.
rm (remove) - удаление указанного файла. Можно и много удалить.
rmdir - удаление указанного пустого каталога.
rpm - запускает менеджер пакетов, утилиту, позволяющую устанавливать, проверять и обновлять пакеты с расширением .rpm.
rpmfind - поиск нужного пакета в базе пакетов RPM через Интернет. Последняя версия утилиты
runlevel
- отображает текущий и предыдущий уровни выполнения.
safedelete - удаление указанного файла в каталог safedelete, где он хранится некоторое время перед необратимым удалением.
script - позволяет записывать весь вывод с терминала в файл. Чтобы остановить запись нажмите Ctrl+d. Если имя файла не указано то записывается в typescript.
shred - выполняет безопасное удаление файла предварительно перезаписав его содержимое на другой диск.
shutdown - останавливает систему и предотвращает повреждение файловой системы при этом, но, используется только при работе в консольном режиме. При работе в режиме X Window, не используйте.
sleep - приостанавливает начало выполнения процесса на заданное количество секунд.
sort - команда позволяет отсортировать строки файла в алфавитном порядке.
sox - преобразует сэмплы из формата входного сигнала, на выходной с добавлением эффектов.
split - разбивает файл на части.
startx - команда для запуска графического интерфейса X Window (не путайте с системой Windows. Не бойтесь. Это не она).
stat - отображение всей доступной информации об указанном файле.
su - вход в сеанс администратора, но придётся ввести пароль. Для выхода из этого сеанса наберите exit и нажмите Enter.
sudo
- выполняет команду переданную ей как аргумент с правами суперпользователя (root). Графический аналог - gksu, kdesu.
sync - очищает буферы файловой системы.
talk - позволяет вести интерактивный диалог с пользователем сети Интернет.
tar - помещает два и более файлов в новый или существующий архив или извлекает их из архива. При задании каталога, заархивирует все файлы в каталоге и подкаталоге.
tee - отсылает выходные данные на два устройства вывода.Можно одновременно вывести на экран и в файл.
telnet - открывает окно терминала на удалённом узле и запускает интерактивный сеанс.
times - показывает полное время выполнения процессов для всей системы и данного пользователя.
tmpwatch - удаление всех файлов в указанном каталоге, если к ним не осуществлялся доступ в течении последних N часов. Очищает временные каталоги.
toe - выдаёт сведения о существующих терминалах, которые могут быть использованы для дальнейшей работы.
top - запускает программу , которая позволяет управлять процессами. И ещё много дополнительной, полезной информации.
touch - изменяет время последнего доступа или изменения файла на текущее время. Если файл не существует, то создаёт новый, пустой файл.
tzselect - запуск утилиты, которая позволяет выбрать часовой пояс.
umount - отмонтирование файловой системы (в обоих командах необходимо указать, что именно).
uname - выводит информацию об используемой операционной системе (при вводе дополнительных параметров команды , выдаёт довольно много информации).
unarj - распаковывает или выводит список содержимого указанного архива в формате .arj (формат сжатия MS DOS).
uncompress - распаковывает файл сжатый предыдущей командой.
undelete - восстанавливает файлы удалённые командой safedelete.
unzip - распаковывает и извлекает файлы из архивов, созданных утилитами ZIP (Linux, MS DOS, Microsoft Windows).
uptime - показывает текущее время, продолжительность сеанса , количество пользователей и загруженность процессора.
useradd - создание нового пользователя с указанным именем.
userdel - удаляет пользователя с указанным именем.
usermod - изменяет параметры пользователя с указанным именем.
users - отображает краткий список пользователей работающих в системе в данный момент.
usleep - приостанавливает на микросекунды.
uudecode - декодирует выше названный файл.
vi - запуск классического текстового редактора VI для UNIX систем.
vmstat - выдаёт сведения о процессах, памяти и загруженности центрального процессора.
w - подробная информация о всех пользователях, работающих в данный момент и также простой, вход в систему и др. Если нужен один пользователь, то указать имя в параметре.
wall - отправляет сообщение на терминал каждого пользователя находящегося в системе в данный момент.
wc - показывает число строк, слов и символов в файле.
whatis - поиск по базе данных страниц руководства и отображение краткого описания.
whereiz - находит файлы, страницы справочного руководства для указанной команды.
which - показывает полный путь к исполняемому файлу команды.
who - список пользователей работающих в системе в данный момент.
whoami - показывает текущий идентификатор пользователя, работающего в данном терминале.
write - отправляет сообщение другому пользователю, находящемуся в системе, путём копирования строк с терминала отправителя на терминал получателя.
wvdial - программа подключается к Интернету по протоколу PPP с использованием параметров, хранящихся в файле /etc/wvdial.conf
wvdialconf - осуществляет поиск модема, определяет порт, к которому он подключен, его строку инициализации и максимальную скорость передачи данных. Эта информация автоматически записывается в файл (смотри выше). Требуется доступ root.
xkill - закрывает принудительно при зависании программу, если она не отвечает. Появляется крестик, который вы наводите на зависшее приложение, кликаете мышкой и закрываете.
zcat; zmore - выводит содержимое файла сжатого gzip на экран без распаковки.
zcmp; zdiff - сравнивает сжатые gzip два файла без распаковки.

zegrep; zfgrep; zgrep - осуществляют поиск указанной строки, выражения в файле сжатом gzip, без распаковки.
zforce - добавляет расширение .gz ко всем файлам в рабочем каталоге, или к указанному файлу, которые были сжаты, но не имеют расширения. Т.е. предотвращает повторное сжатие.
zip - архивирует и сжимает файлы.
zipinfo - отображает информацию о содержимом архива. Если указать имя, то выдаст информацию о конкретном файле.
zipnote - позволяет вывести и отредактировать комментарии к файлам из архива ZIP.
zipsplit - позволяет разделить архив .zip на достаточно маленькие части, для записи их на сменные носители, и записывает файлы на указанное устройство (дискеты).
 
Думаю никто всех не знает) А еще есть параметры..
 
Нужно тут наверное общие для всех дистров команды выкладывать. Некоторые очень специфичны (менеджеры пакетов например везде разные).
Как мне кажется, помнить всех команд не нужно, большинство можно прям из головы придумать при некоторых знаниях английского :)

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

Добавлю от себя:
cat - просмотр содержимого файла
sensors - просмотр температур hardware
htop - улучшенный аналог top
ps -ef | grep NAME - так очень удобно искать процесс NAME
su - переводится не Super User, как думают многие, а Substitute User - смена текущего пользователя, т.е. команда может быть и su root и su ftpuser
shutdown - лучше всего использовать вместо всяких reboot'ов. Например shutdown -r 10 перезагрузить компьютер через 10 секунд, а shutdown - h 0 выключить компьютер сразу (аргументы - reboot и halt)
crontab - выполняет задания по расписанию (команды). Можно например им настроить или .
chmod - смена прав у файла/директории (кстати, с точки зрения классической теории, директория - тоже файл, т.е. и файл и директория - просто размеченное пространство на диске).
rsync - удобно использовать для создания бэкапов. хорошо работает в связке с tar.
alias - создание синонима для команды, т.е. на 2 буквы можно повесить целую команду, которая часто используется.
df - удобнее использовать в виде df -h, можно просто повесить на alias
fdisk - стандартная утилита для работы с жестким диском.
blkid - показывает информацию по разделам жесткого диска. Например, если прописываем в fstab авто-монтирование разделов, то корректнее прописывать эти разделы по UUID.
mount - без нее никуда, но иногда "нужно смонтировать" ссылку на директорию, то есть это как alias для команды mount. Используем аттрибут --bind, например, так можно будет обращаться к директории /mnt/sda1/film по пути /home/user/media/film:
mount --bind /mnt/sda1/film /home/user/media/film

На полную правду не претендую, у меня на никсах только домашний сервак (торренто-качалка, медиасервер, облачное хранилище и т.д.)

ОФФТОП: кто не доверяет всяким дроп-боксам и прочей лаже обратите внимание на btsync - очень удобная штука, работает через bt и не требует статичного ip.
 
Последнее редактирование:
Надо было тут по ssh запустить одну команду на удаленном сервере и оставить ее работать.
Для этих целей есть утилиста screen - создает новый "экран" с новой сессией.
Стандартное использование на любой случай жизни "screen -DR".

Т.е. запускаем например putty, выполняем эту команду и получаем новую сессию. В новой сессии запускаем нужную нам команду и просто закрываем окно putty.
Если нужно вернеться в последнюю сессию - опять подрубаемся по ssh и выполняем "screen -DR".
 
Ты установил Линукс и видишь перед собой непонятные темы. Здесь нет диска С:/ и прочее, здесь нет documents and settings и прочее. А что же тут есть? Тут много что есть. Попёрли!

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

Только пользователь root имеет право писать и изменять файлы этом каталоге.

Обратите внимание что у пользователя root домашний каталог /root, но не сам /.

/bin - (binaries) бинарные файлы пользователя
Этот каталог содержит исполняемые файлы. Здесь расположены программы, которые можно использовать в однопользовательском режиме или режиме восстановления. Одним словом, те утилиты, которые могут использоваться пока еще не подключен каталог /usr/. Это такие общие команды, как cat, ls, tail, ps и т д.

/sbin - (system binaries) системные исполняемые файлы
Так же как и /bin, содержит двоичные исполняемые файлы, которые доступны на ранних этапах загрузки, когда не примонтирован каталог /usr. Но здесь находятся программы, которые можно выполнять только с правами суперпользователя. Это разные утилиты для обслуживания системы. Например, iptables, reboot, fdisk, ifconfig,swapon и т д.

/etc - (etcetera) конфигурационные файлы
В этой папке содержатся конфигурационные файлы всех программ, установленных в системе.

Кроме конфигурационных файлов, в системе инициализации Init Scripts, здесь находятся скрипты запуска и завершения системных демонов, монтирования файловых систем и автозагрузки программ. Структура каталогов linux в этой папке может быть немного запутанной, но предназначение всех их - настройка и конфигурация.

/dev - (devices) файлы устройств
В Linux все, в том числе внешние устройства являются файлами. Таким образом, все подключенные флешки, клавиатуры, микрофоны, камеры - это просто файлы в каталоге /dev/. Этот каталог содержит не совсем обычную файловую систему. Структура файловой системы Linux и содержащиеся в папке /dev файлы инициализируются при загрузке системы, сервисом udev. Выполняется сканирование всех подключенных устройств и создание для них специальных файлов. Это такие устройства, как: /dev/sda, /dev/sr0, /dev/tty1, /dev/usbmon0 и т д.

/proc - (proccess) информация о процессах
Это тоже необычная файловая система, а подсистема, динамически создаваемая ядром. Здесь содержится вся информация о запущенных процессах в реальном времени. По сути, это псевдофайловая система, содержащая подробную информацию о каждом процессе, его Pid, имя исполняемого файла, параметры запуска, доступ к оперативной памяти и так далее. Также здесь можно найти информацию об использовании системных ресурсов, например /proc/cpuinfo, /proc/meminfo или /proc/uptime. Кроме файлов в этом каталоге есть большая структура папок linux, из которых можно узнать достаточно много информации о системе.

/var (variable) - Переменные файлы
Название каталога /var говорит само за себя, он должен содержать файлы, которые часто изменяются. Размер этих файлов постоянно увеличивается. Здесь содержаться файлы системных журналов, различные кеши, базы данных и так далее. Дальше рассмотрим назначение каталогов Linux в папке /var/.

/var/log - Файлы логов
Здесь содержатся большинство файлов логов всех программ, установленных в операционной системе. У многих программ есть свои подкаталоги в этой папке, например, /var/log/apache - логи веб-сервера, /var/log/squid - файлы журналов кеширующего сервера squid. Если в системе что-либо сломалось, скорее всего, ответы вы найдете здесь.

/var/lib - базы данных
Еще один тип изменяемых файлов - это файлы баз данных, пакеты, сохраненные пакетным менеджером и т д.

/var/mail - почта
В эту папку почтовый сервер складывает все полученные или отправленные электронные письма, здесь же могут находиться его логи и файлы конфигурации.

/var/spool - принтер
Изначально, эта папка отвечала за очереди печати на принтере и работу набора программ cpus.

/var/lock - файлы блокировок
Здесь находятся файлы блокировок. Эти файлы означают, что определенный ресурс, файл или устройство занят и не может быть использован другим процессом. Apt-get, например, блокирует свою базу данных, чтобы другие программы не могли ее использовать, пока программа с ней работает.

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

/tmp (temp) - Временные файлы
В этом каталоге содержатся временные файлы, созданные системой, любыми программами или пользователями. Все пользователи имеют право записи в эту директорию.

Файлы удаляются при каждой перезагрузке. Аналогом Windows является папка Windows\Temp, здесь тоже хранятся все временные файлы.

/usr - (user applications) Программы пользователя
Это самый большой каталог с большим количеством функций. Тут наиболее большая структура каталогов Linux. Здесь находятся исполняемые файлы, исходники программ, различные ресурсы приложений, картинки, музыку и документацию.

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

/usr/sbin/
Содержит двоичные файлы программ для системного администрирования, которые нужно выполнять с правами суперпользователя. Например, таких как Gparted, sshd, useradd, userdel и т д.

/usr/lib/ - Библиотеки
Содержит библиотеки для программ из /usr/bin или /usr/sbin.

/usr/local - Файлы пользователя
Содержит файлы программ, библиотек, и настроек созданные пользователем. Например, здесь могут храниться программы собранные и установленные из исходников и скрипты, написанные вручную.

/home - Домашняя папка
В этой папке хранятся домашние каталоги всех пользователей. В них они могут хранить свои личные файлы, настройки программ и т д. Например, /home/sergiy и т д. Если сравнивать с Windows, то это ваша папка пользователя на диске C, но в отличии от WIndows, home как правило размещается на отдельном разделе, поэтому при переустановке системы все ваши данные и настройки программ сохранятся.

/boot - Файлы загрузчика
Содержит все файлы, связанные с загрузчиком системы. Это ядро vmlinuz, образ initrd, а также файлы загрузчика, находящие в каталоге /boot/grub.

/lib (library) - Системные библиотеки
Содержит файлы системных библиотек, которые используются исполняемыми файлами в каталогах /bin и /sbin.

Библиотеки имеют имена файлов с расширением *.so и начинаются с префикса lib*. Например, libncurses.so.5.7. Папка /lib64 в 64 битных системах содержит 64 битные версии библиотек из /lib. Эту папку можно сравнить с WIndows\system32, там тоже сгружены все библиотеки системы, только там они лежат смешанные с исполняемыми файлами, а здесь все отдельно.

/opt (Optional applications) - Дополнительные программы
В эту папку устанавливаются проприетарные программы, игры или драйвера. Это программы созданные в виде отдельных исполняемых файлов самыми производителями. Такие программы устанавливаются в под-каталоги /opt/, они очень похожи на программы Windows, все исполняемые файлы, библиотеки и файлы конфигурации находятся в одной папке.

/mnt (mount) - Монтирование
В этот каталог системные администраторы могут монтировать внешние или дополнительные файловые системы.

/media - Съемные носители
В этот каталог система монтирует все подключаемые внешние накопители - USB флешки, оптические диски и другие носители информации.

/srv (server) - Сервер
В этом каталоге содержатся файлы серверов и сервисов. Например, могут содержаться файлы веб-сервера apache.

/run - процессы
Еще один каталог, содержащий PID файлы процессов, похожий на /var/run, но в отличие от него, он размещен в TMPFS, а поэтому после перезагрузки все файлы теряются.

/sys (system) - Информация о системе
Назначение каталогов Linux из этой папки - получение информации о системе непосредственно от ядра. Это еще одна файловая система организуемая ядром и позволяющая просматривать и изменить многие параметры работы системы, например, работу swap, контролировать вентиляторы и многое другое.



Немного вникли, друг мой?
 
Анатомия ядра Linux
История и архитектурная организация

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

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

Краткий обзор истории Linux

Хотя Linux, по всей видимости, является самой популярной операционной системой с открытым исходным кодом, на самом деле ее история в сравнении с другими операционными системами относительно коротка. На заре компьютерной эры программисты разрабатывали свои программы для "голой" аппаратуры, используя языки, понятные для этой аппаратуры. В отсутствие операционной системы использовать всю большую и дорогую вычислительную машину в каждый конкретный момент времени могло только одно приложение (и один пользователь). Первые операционные системы были разработаны в 1950-е годы, чтобы облегчить жизнь разработчиков. В качестве примера можно назвать General Motors Operating System (GMOS), разработанную для IBM 701, и FORTRAN Monitor System (FMS), созданную North American Aviation для IBM 709.

В 1960-е годы в Массачусетском Технологическом институте (MIT) и в ряде компаний была разработана экспериментальная операционная система Multics (Multiplexed Information and Computing Service) для машины GE-645. Один из разработчиков этой ОС, компания AT&T, отошла от Multics и в 1970 году разработала свою собственную систему Unics. Вместе с этой ОС поставлялся язык C. При этом C был разработан и написан так, чтобы обеспечить переносимость разработки операционной системы.

Двадцать лет спустя Эндрю Танненбаум (Andrew Tanenbaum) создал микроядерную версию UNIX® под названием MINIX (minimal UNIX), которая могла работать на небольших персональных компьютерах. Эта операционная система с открытым исходным кодом вдохновила Линуса Торвальдса (Linus Torvalds) на разработку первой версии Linux в начале 1990-х.

Linux быстро превратился из инициативы энтузиаста-одиночки во всемирный проект, в котором участвуют тысячи разработчиков. Одним из важнейших решений в судьбе Linux стало принятие лицензии GNU General Public License (GPL). GPL защитила ядро Linux от коммерческой эксплуатации и одновременно открыла путь к использованию разработок сообщества пользователей проекта GNU, основанного Ричардом Столлманом (Richard Stallman), объемы кода которого значительно превосходят даже объем ядра Linux. Это позволило использовать в Linux такие полезные приложения, как комплекс компиляторов GNU Compiler Collection (GCC) и различные командные оболочки.

Введение в ядро Linux

Перейдем к общему обзору архитектуры операционной системы GNU/Linux. Операционную систему можно условно разделить на два уровня, как показано на Рис. 2.

Рис. 2. Фундаментальная архитектура операционной системы GNU/Linux

figure2.jpg


На верхнем уровне находится пользовательское пространство (пространство приложений). Здесь исполняются приложения пользователя. Под пользовательским пространством располагается пространство ядра. Здесь функционирует ядро Linux.

Имеется также библиотека GNU C (glibc). Она предоставляет интерфейс системных вызовов, который обеспечивает связь с ядром и дает механизм для перехода от приложения, работающего в пространстве пользователя, к ядру. Это важно, поскольку ядро и пользовательское приложение располагаются в разных защищенных адресных пространствах. При этом, в то время как каждый процесс в пространстве пользователя имеет свое собственное виртуальное адресное пространство, ядро занимает одно общее адресное пространство.

Ядро Linux можно, в свою очередь, разделить на три больших уровня. Наверху располагается интерфейс системных вызовов, который реализует базовые функции, например,чтение и запись. Ниже интерфейса системных вызовов располагается код ядра, точнее говоря, архитектурно-независимый код ядра. Этот код является общим для всех процессорных архитектур, поддерживаемых Linux. Еще ниже располагается архитектурно-зависимый код, образующий т.н. BSP (Board Support Package - пакет поддержки аппаратной платформы). Этот код зависит от процессора и платформы для конкретной архитектуры.

Свойства ядра Linux

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

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

С течением времени ядро Linux стало более эффективным с точки зрения использования памяти и процессорных ресурсов и приобрело исключительную стабильность. Однако самый интересный аспект Linux, учитывая размер и сложность этой системы - это ее переносимость. Linux можно откомпилировать для огромного количества разных процессоров и платформ, имеющих разные архитектурные ограничения и потребности. Например, Linux может работать на процессоре как с блоком управления памятью (MMU), так и без MMU. Поддержка процессоров без MMU реализована в версии ядра uClinux.

Основные подсистемы ядра Linux

Давайте рассмотрим некоторые основные компоненты ядра Linux, следуя структуре, изображенной на рис. 3.

Рис. 3. Один из возможных взглядов на архитектуру ядра Linux
figure3.jpg


Интерфейс системных вызовов

SCI - это тонкий уровень, предоставляющий средства для вызова функций ядра из пространства пользователя. Как уже говорилось, этот интерфейс может быть архитектурно зависимым, даже в пределах одного процессорного семейства. SCI фактически представляет собой службу мультиплексирования и демультиплексирования вызова функций. Реализация SCI находится в ./linux/kernel, а архитектурно-зависимая часть - в ./linux/arch.

Управление процессами

Управление процессами сконцентрировано на исполнении процессов. В ядре эти процессы называются потоками (threads); они соответствуют отдельным виртуализованным объектам процессора (код потока, данные, стек, процессорные регистры). В пространстве пользователя обычно используется термин процесс, хотя в реализации Linux эти две концепции (процессы и потоки) не различают. Ядро предоставляет интерфейс программирования приложений (API) через SCI для создания нового процесса (порождения копии, запуска на исполнение, вызова функций Portable Operating System Interface [POSIX]), остановки процесса (kill, exit), взаимодействия и синхронизации между процессами (сигналы или механизмы POSIX).

Еще одна задача управления процессами - совместное использование процессора активными потоками. В ядре реализован новаторский алгоритм планировщика, время работы которого не зависит от числа потоков, претендующих на ресурсы процессора. Название этого планировщика - O(1) - подчеркивает, что на диспетчеризацию одного потока затрачивается столько же времени, как и на множество потоков. Планировщик O(1) также поддерживает симметричные многопроцессорные конфигурации (SMP). Исходные коды системы управления процессами находятся в ./linux/kernel, а коды архитектурно-зависимой части - в ./linux/arch).

Управление памятью


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

Однако управление памятью - это значительно больше, чем просто управление буферами по 4 КБ. Linux предоставляет абстракции над этими 4 КБ буферами, например, механизм распределения slab allocator. Этот механизм управления базируется на 4 КБ буферах, но затем размещает структуры внутри них, следя за тем, какие страницы полны, какие частично заполнены и какие пусты. Это позволяет динамически расширять и сокращать схему в зависимости от потребностей вышележащей системы.

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

Виртуальная файловая система

Еще один интересный аспект ядра Linux - виртуальная файловая система (VFS), которая предоставляет общую абстракцию интерфейса к файловым системам. VFS предоставляет уровень коммутации между SCI и файловыми системами, поддерживаемыми ядром (см. Рис. 4).

Рис. 4. VFS предоставляет коммутационную матрицу между пользователями и файловыми системами
figure4.jpg


На верхнем уровне VFS располагается единая API-абстракция таких функций, как открытие, закрытие, чтение и запись файлов. На нижнем уровне VFS находятся абстракции файловых систем, которые определяют, как реализуются функции верхнего уровня. Они представляют собой подключаемые модули для конкретных файловых систем (которых существует более 50). Исходные коды файловых систем находятся в ./linux/fs.

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

Сетевой стек

Сетевой стек по своей конструкции имеет многоуровневую архитектуру, повторяющую структуру самих протоколов. Вы помните, что протокол Internet Protocol (IP) - это базовый протокол сетевого уровня, располагающийся ниже транспортного протокола Transmission Control Protocol, TCP). Выше TCP находится уровень сокетов, вызываемый через SCI.

Уровень сокетов представляет собой стандартный API к сетевой подсистеме. Он предоставляет пользовательский интерфейс к различным сетевым протоколам. Уровень сокетов реализует стандартизованный способ управления соединениями и передачи данных между конечными точками, от доступа к "чистым" кадрам данных и блокам данных протокола IP (PDU) и до протоколов TCP и User Datagram Protocol (UDP). Исходные коды сетевой подсистемы ядра находятся в каталоге ./linux/net.

Драйверы устройств

Подавляющее большинство исходного кода ядра Linux приходится на драйверы устройств, обеспечивающие возможность работы с конкретными аппаратными устройствами. В дереве исходных кодов Linux имеется подкаталог драйверов, в котором, в свою очередь, имеются подкаталоги для различных типов поддерживаемых устройств, таких как Bluetooth, I2C, последовательные порты и т.д. Исходные коды драйверов устройств находятся в ./linux/drivers.

Архитектурно-зависимый код

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

Интересные особенности ядра Linux

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

Linux, как широко используемая на практике операционная система с открытым исходным кодом, является отличной испытательной площадкой для новых протоколов и их усовершенствований. Linux поддерживает большое количество сетевых протоколов, включая традиционный TCP/IP и его высокоскоростные расширения (для сетей быстрее Gigabit Ethernet [GbE] и 10 GbE). Linux также поддерживает такие протоколы, как Stream Control Transmission Protocol (SCTP), реализующий множество дополнительных функций, отсутствующих в TCP (применяется в качестве альтернативного протокола транспортного уровня).

Следует отметить, что ядро Linux является динамическим (поддерживает добавление и удаление программных компонентов без остановки системы). Эти компоненты называются динамически загружаемыми модулями ядра. Их можно вводить в систему при необходимости, как во время загрузки (если найдено конкретное устройство, для которого требуется такой модуль), так и в любое время по желанию пользователя.

Еще одно недавнее усовершенствование Linux - возможность ее использования в качестве операционной системы для других операционных систем (т.н. гипервизора). Недавно в ядро было внесено усовершенствование, получившее название Kernel-based Virtual Machine (KVM, виртуальная машина на базе ядра). В результате этой модификации в пространстве пользователя был реализован новый интерфейс, позволяющий исполнять поверх ядра с поддержкой KVM другие операционные системы. В таком режиме можно не только исполнять другие экземпляры Linux, но и виртуализовать Microsoft® Windows®. Единственное ограничение состоит в том, что используемый процессор должен поддерживать новые инструкции виртуализации.

 
Работаем с файловой системой. Практика

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

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

linux-filesystem-2-001.jpg


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

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

Навигация и базовые операции

Первый и естественный вопрос возникающий при работе с файловой системой: а где я сейчас нахожусь? Ответ на этот вопрос написан в приглашении командной строки. Если этой информации там по какой-либо причине нет, либо вы затрудняетесь в ее интерпретации, то узнать свое местоположение можно командой:
Код:
pwd
На скриншоте ниже приглашение командной строки показывает, что мы находимся в домашней директории текущего пользователя, для ее краткого обозначения используется символ ~, команда pwd уточнит, что это /home/andrey.

linux-filesystem-2-002-thumb-600xauto-6916.jpg


Получить список файлов и папок в текущей директории можно командой:
Код:
ls
linux-filesystem-2-003-thumb-600xauto-6919.jpg


Подробную информацию, включая типы файлов, права, владельцев и размер можно получить добавив ключ -l:
Код:
ls -l
linux-filesystem-2-004-thumb-600xauto-6922.jpg


Все бы хорошо, но размер файлов в байтах не очень хорошо воспринимается, поэтому добавим ключ -h, а ключ -a покажет скрытые файлы и папки:
Код:
ls -lha
или
Код:
ls -l -h -a
как вам больше нравится.

linux-filesystem-2-005-thumb-600xauto-6925.jpg


Полный список ключей можно получить командой:
Код:
ls --help | less
Передача вывода утилите less позволит выводить данные постранично, листание страниц производится клавишей Пробел, выход из режима кнопкой Q.

Также вы можете просмотреть содержимое любой интересующей вас директории, например:
Код:
ls -lh /var/www/deb8.lab
Вывод покажет нам содержимое /var/www/deb8.lab, хотя мы продолжаем находиться в домашней директории.

linux-filesystem-2-006.jpg


Для перемещения по файловой системе служит иная команда:
Код:
cd
Если выполнить ее без параметров, она переместит нас в домашний каталог. Для перехода в иное место просто укажите каталог, можно использовать как абсолютные, так и относительные пути. Например:
Код:
cd /etc
переместит нас в каталог /etc вне зависимости от нашего прошлого положения, если потом выполнить:
Код:
cd squid3
то мы попадем в /etc/squid3

Команда
Код:
cd ..
позволяет быстро выйти на уровень вверх. При этом можно совершать интересные пируэты. Например, команда
Код:
cd /etc/php5
Перенесет нас в /etc/php5, а теперь выполнив
Код:
cd ../apache2
мы быстро сменим каталог на одноуровневый /etc/apache2. Это удобно когда вы находитесь в глубине файловой системы и набирать полный путь при помощи автодополнения может оказаться несколько утомительным.

А ну ка, попробуйте быстро перескочить из /var/www/client/data/www/example.com в /var/www/client/data/log? Да запросто:
Код:
cd ../../log
Следующий по важности вопрос, это найти где лежит некий файл или папка. Для этой цели служит команда find, в простейшем виде можно выполнить
Код:
find name
Это произведет поиск файлов, папок, символьных ссылок и т.п. с именем name в текущей директории. Однако возможности команды find гораздо выше. Она позволяет не только искать файлы, но и выполнять над ними определенные действия.

Для лучшего поиска мы можем указывать тип файла, используя ключ -type, в этом случае доступными опциями ключа будут f - файл, d - директория, l - ссылка, ключ -name осуществляет поиск по имени, допускаются подстановочные символы. Если мы хотим искать по регулярному выражению - используем ключ -regex. Условия поиска можно сочетать при помощи логического И (ключ -a) и логического ИЛИ (ключ -o).

Например найдем все символические ссылки в директории /home
Код:
find /home -type l
Или найдем и выведем в файл все изображения JPG или PNG в папке с сайтом:
Код:
find /var/www/deb8.lab -name *.jpg -o -name *.png > ~/image.txt
Отлично, в наших руках полный список изображений:

linux-filesystem-2-008-thumb-600xauto-6929.jpg


Допустим мы хотим найти только те изображения, которые загрузили, отбросив служебные картинки. Дополнительным критерием отбора может стать размер, скажем, 100 КБ для JPG и 200 КБ для PNG.
Код:
find /var/www/deb8.lab -name *.jpg -a -size +100k -o -name *.png -a -size +200k > ~/image.txt

linux-filesystem-2-009-thumb-600xauto-6932.jpg


А теперь на мгновение задумайтесь, каким образом можно было бы решить такую задачу в графической среде? И за какое время?

Отдельно обратим ваше внимание на использование логических условий, несмотря на то, что нам нужно найти JPG и PNG мы используем оператор ИЛИ, так как файл не может являться одновременно и JPG и PNG. А добавляя условие размера используем И. Т.е. полностью условие читается так:
Код:
Найти если имя *.jpg И размер +100k ИЛИ имя *.png И размер +200k
При передаче значения условиям оперирующим с цифровыми значениями (размер, время) мы можем использовать как точный размер, так и его границы. Просто число укажет на точное значение, знаки + и - читаются как больше и меньше.

Например, найдем все файлы в домашней директории измененные за последний час:
Код:
find ~ -mmin -60

linux-filesystem-2-010.jpg


Или найдем и удалим все бекапы старше 7 дней:
Код:
find /var/backup -name backup* -mtime +7 -delete

Также команда find позволяет выполнять над найденными файлами произвольные действия, для этого используется ключ -exec command {} \;. Допустим нам надо быстро исправить права на папки и файлы в каталоге с сайтом:
Код:
find /var/www/deb8.lab -type d -exec chmod 0755 "{}" \;
find /var/www/deb8.lab -type f -exec chmod 0644 "{}" \;
Еще одна полезная команда cat - позволяет просмотреть содержимое какого-либо файла без запуска дополнительных приложений, при чтении больших файлов следует передавать их утилитам less или more для удобного отображения.

Например:
Код:
cat image.txt

linux-filesystem-2-011-thumb-600xauto-6936.jpg


Также нельзя не упомянуть о команде tail, которая выводит на экран заданное количесто строк из указанного файла (по умолчанию 10), с ее помощью удобно просматривать последние логи. Например:
Код:
tail -2 /var/log/syslog
выведет на экран две последние строки /var/log/syslog, а будучи запущена с ключом -f команда будет отслеживать добавление новых строк и выводить их в на экран в режиме реального времени.
Код:
tail -f /var/log/syslog

linux-filesystem-2-012-thumb-600xauto-6939.jpg
 
Работа с файлами и папками

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

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

Для создания каталогов служит команда mkdir, в качестве аргументов мы можем указать один или несколько каталогов, если не указан абсолютный путь каталоги будут созданы в текущей директории. Например:
Код:
mkdir dir1 dir2
Используя ключ -p можно сразу создать дерево каталогов:
Код:
mkdir -p /dir2/dir3/dir4/dir5
Ключ -m позволяет сразу указать права доступа, например:
Код:
mkdir -m 0777 dir7

linux-filesystem-2-013.jpg


Как видим директория сразу создалась с нужными правами.

Для копирования используется команда cp. Ее синтаксис предельно прост - указываем что копируем, затем указываем куда, как и в других командах путь можно указывать абсолютный или относительный. Например:
Код:
cp image.txt dir7
Скопирует файл image.txt в директорию dir7, учтите, что по умолчанию уже существующие файлы перезаписываются, чтобы этого избежать добавьте ключ -i.
Код:
cp -i image.txt dir7

linux-filesystem-2-014.jpg


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

Для копирования каталогов следует указать ключ -r, при этом будут скопированы все вложенные каталоги.
Код:
cp -r dir2 dir1
Для визуализации процесса можно использовать ключ -v, например:
Код:
cp -rv dir2 dir1

linux-filesystem-2-015.jpg


Это удобно когда вы вручную копируете значительное количество файлов и хотите видеть ход операции.

При копировании с перезаписью можно использовать ключ -u, который скопирует только те файлы, которые новее, порой это позволяет значительно сэкономить время.

Для переименования и перемещения используется иная команда - mv, поначалу это может вызвать удивление, но с точки зрения файловой системы это одна и та же операция. Например, команда:
Код:
mv file1 file2
переименует файл file1 в file2, а команда:
Код:
mv file1 dir2
переместит file1 в каталог dir2, но если сделать так:
Код:
mv file1 dir2/file2
то мы переместим файл и переименуем одновременно.

Команда поддерживает ключи -i, -f и -n, которые означают тоже самое, что и у команды cp (спрашивать при замене, принудительно заменять и не заменять). При одновременном указании работает последний ключ. Также поддерживаются -v и -u, с теми же значениями, при работе с директориями указывать дополнительный ключ не надо.

Обе команды поддерживают работу сразу с несколькими объектами, при этом источниками считаются все указанные объекты, кроме последнего, который является назначением.
Код:
cp (mv) источник1 источник2 ... источникN назначение
Для удаления файлов используйте rm, она поддерживает ключи -r (рекурсивно) для удаления директорий, -i и -f, с теми же значениями, ключ -v также выведет на экран информацию о ходе операции.

Например удалим файл:
Код:
rm file1
затем папку
Код:
rm -r dir2
В этом месте нельзя не вспомнить об очень старой и очень злой "шутке":
Код:
rm -rf /
Данная команда полностью удаляла корневую директорию с диска, от чего пострадало большое количество начинающих, вбивавших "подсказанные" команды не думая. В современных системах есть защита от такого действия - удалить корень просто так нельзя.

linux-filesystem-2-016-thumb-600xauto-6947.jpg


Но нет ничего невозможного, особенно если у вас есть root-права. Можно добавить ключ, услужливо подсказанный в выводе, а можно поступить проще:
Код:
rm -rf /*
Казалось бы всего добавили один символ... Но смысл команды изменился, вместо удаления корневой директории она предписывает удалить ее содержимое. И удалит, все до чего дотянется. Тушим свет:

linux-filesystem-2-017-thumb-600xauto-6950.jpg


Сливаем воду:

linux-filesystem-2-018.jpg


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

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

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

Теперь несколько слов о ссылках, для их создания предназначена команда ln, не путать с ls. На самом деле запомнить команды Linux не сложно, если знать что большинство из них связано с сокращенным наименованием действия. Так и здесь: link (ссылка) - ln, list (список) - ls.

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

linux-filesystem-2-019.jpg


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

В повседневной работе удобнее всего использовать символические ссылки, для их создания потребуется указать ключ -s:
Код:
ln -s file1 file1-1
Если при создании ссылки использовались относительные пути, то ссылка тоже будет относительной, т.е. действительной только в текущем расположении. Например, если мы напишем:
Код:
ln -s file1 dir3/file1
то такая ссылка работать не будет. Но есть небольшая хитрость, ключ -r позволит выстроить к такой ссылке относительный путь, но работать такая ссылка тоже будет только в своем расположении.
Код:
ln -sr file2 dir3/file2
Как видим первая ссылка нерабочая, в то время как вторая правильно указывает путь в вышестоящую директорию, но если мы ее куда либо переместим, то работать она перестанет.

linux-filesystem-2-020.jpg


Для чего это может быть полезным? Например, если вы находитесь в глубине файловой системы, скажем в /var/www/example/data/www/example.com/templates/system/images и вам надо сделать ссылку в соседний каталог. Это очевидный плюс. Но есть и еще один. Относительные ссылки будут работать даже при значительном изменении структуры размещения данных при условии, что ссылка и источник сохраняют взаимное расположение.

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

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

Теперь, когда вы умеете работать с файлами и папками самое время заняться архивами. Мы не будем подробно останавливаться на этой теме, уделив внимание только базовым операциям. Таких в повседневной работе ровно две: создать архив и извлечь его. В Linux наибольшее распространение получили архивы tar.gz или tar.bz, работа с которыми имеет свои особенности.

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

Стандартом де-факто является алгоритм gzip, который сочетает оптимальное соотношение потребляемых ресурсов, времени и степени сжатия. Если нужна более высокая степень сжатия и время создания или распаковки не играет особой роли, то используется алгоритм bzip2, обычно в таких архивах распространяется ПО. Не так давно мы проводили большое , которое показало, что в подавляющем большинстве случаев использование штатных алгоритмов является наиболее оптимальным и нет никакой необходимости "изобретать велосипед".

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

И самым последним должен указываться ключ задающий тип носителя, в подавляющем большинстве случаев это файл, поэтому последний ключ всегда -f. После этого ключа первым указываем имя архива и только потом то, что мы хотим в него добавить или извлечь. Попробуем:
Код:
tar -cf archive.tar file1
Эта команда создаст архив archive.tar и поместит в него файл file1. Теперь добавим туда файл file2:
Код:
tar -uf archive.tar file2
И просмотрим его содержимое:
Код:
tar -tf archive.tar

linux-filesystem-2-022.jpg


Обратите внимание на вывод второй команды, мы добавили к ней ключ -v, и если создание архива без этого ключа прошло без вывода сообщений на экран, то команда добавления вывела имя добавленного файла.

Теперь извлечем содержимое архива:
Код:
tar -xf archive.tar
Обратите внимание, что извлечение всегда происходит в текущий каталог, в приведенном виде команда извлечет содержимое архива целиком. Если нужно извлечь только отдельный файл или каталог, то его имя следует указать после имени архива. Например:
Код:
tar -xf archive.tar file1
Данная команда извлечет из архива только файл file1.

И, наконец, сжатие. Чтобы сжать архив следует указать один из ключей: -z для gzip и -j для bzip2. При извлечении указывать данные ключи не нужно. Например:
Код:
tar -czf archive.tar.gz file1
tar -cjf archive.tar.bz2 file1
По общепринятой практике таким архивам присваивают расширения tar.gz или tgz для gzip и tar.bz2 или tbz2 для bzip2. Мы советуем следовать этому правилу, чтобы потом вам или вашему коллеге не пришлось гадать, а что это за файл тут лежит и чем именно он запакован.

Монтируем съемные носители

Тема монтирования дисковых носителей также довольно обширна и далеко выходит за рамки данной статьи, поэтому мы коснемся ее лишь стороной, в части работы со съемными носителями. Начнем с оптических дисков.

Для работы с ними в Linux существует виртуальное устройство cdrom, которое представляет файл символической ссылки на блочное устройство, соответствующее дисководу, например, sr0. Чтобы смонтировать оптический диск выполните:
Код:
mount /dev/cdrom /media
После чего содержимое оптического диска будет доступно в каталоге /media файловой системы. В принципе, вы можете смонтировать диск в любую точку файловой системы, но лучше придерживаться общепринятых соглашений.

Для отмонтирования носителя используйте команду:
Код:
umount /media
Обратите внимание, что для успешного выполнения этих операций вам потребуются права суперпользователя.

Подключив флешку в первую очередь следует узнать каким образом она определилась в системе, для этого от суперпользователя выполните:
Код:
fdisk -l
Вывод покажет все дисковые накопители подключенные к вашей системе:

linux-filesystem-2-023.jpg


Как видим, наша флешка определилась как /dev/sdb1 и имеет файловую систему FAT32, для монтирования используйте команду:
Код:
mount /dev/sdb1 /mnt
Теперь содержимое флешки будет доступно в директории /mnt. Иногда требуется явно указать тип файловой системы, для чего используется ключ -t с указанием типа ФС. Например, для FAT32 - vfat, для NTFS - ntfs.

linux-filesystem-2-024-thumb-600xauto-6961.jpg


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

Из опций монтирования вам может оказаться полезной опция -o ro, позволяющая смонтировать носитель только на чтение, оптические диски монтируются только на чтение автоматически. Например:
Код:
mount -o ro /dev/sdb1 /mnt
Отмонитровать носитель также можно командой umount, при этом можно использовать ключ -f для небезопасного отключения.

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

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


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

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

Расположение логов по умолчанию
Большинство файлов логов Linux находятся в папке /var/log/ Вы можете список файлов логов для вашей системы с помощью команды ls:
Код:
ls -l /var/log/
Ниже мы рассмотрим 20 различных файлов логов Linux, размещенных в каталоге /var/log/. Некоторых из этих логов встречаются только в определенных дистрибутивах, например, dpkg.log встречается только в системах, основанных на Debian.

/var/log/messages - содержит глобальные системные логи Linux, в том числе те, которые регистрируются при запуске системы. В этот лог записываются несколько типов сообщений: это почта, cron, различные сервисы, ядро, аутентификация и другие.

/var/log/dmesg - содержит сообщения, полученные от ядра. Регистрирует много сообщений еще на этапе загрузки, в них отображается информация об аппаратных устройствах, которые инициализируются в процессе загрузки. Можно сказать это еще один лог системы Linux. Количество сообщений в логе ограничено, и когда файл будет переполнен, с каждым новым сообщением старые будут перезаписаны. Вы также можете посмотреть сообщения из этого лога с помощью команды dmseg.

/var/log/auth.log - содержит информацию об авторизации пользователей в системе, включая пользовательские логины и механизмы аутентификации, которые были использованы.

/var/log/boot.log - Содержит информацию, которая регистрируется при загрузке системы.

/var/log/daemon.log - Включает сообщения от различных фоновых демонов

/var/log/kern.log - Тоже содержит сообщения от ядра, полезны при устранении ошибок пользовательских модулей, встроенных в ядро.

/var/log/lastlog - Отображает информацию о последней сессии всех пользователей. Это нетекстовый файл, для его просмотра необходимо использовать команду lastlog.

/var/log/maillog /var/log/mail.log - журналы сервера электронной почты, запущенного в системе.

/var/log/user.log - Информация из всех журналов на уровне пользователей.

/var/log/Xorg.x.log - Лог сообщений Х сервера.

/var/log/alternatives.log - Информация о работе программы update-alternatives. Это символические ссылки на команды или библиотеки по умолчанию.

/var/log/btmp - лог файл Linux содержит информацию о неудачных попытках входа. Для просмотра файла удобно использовать команду last -f /var/log/btmp

/var/log/cups - Все сообщения, связанные с печатью и принтерами.

/var/log/anaconda.log - все сообщения, зарегистрированные при установке сохраняются в этом файле

/var/log/yum.log - регистрирует всю информацию об установке пакетов с помощью Yum.

/var/log/cron - Всякий раз когда демон Cron запускает выполнения программы, он записывает отчет и сообщения самой программы в этом файле.

/var/log/secure - содержит информацию, относящуюся к аутентификации и авторизации. Например, SSHd регистрирует здесь все, в том числе неудачные попытки входа в систему.

/var/log/wtmp или /var/log/utmp - системные логи Linux, содержат журнал входов пользователей в систему. С помощью команды wtmp вы можете узнать кто и когда вошел в систему.

/var/log/faillog - лог системы linux, содержит неудачные попытки входа в систему. Используйте команду faillog, чтобы отобразить содержимое этого файла.

/var/log/mysqld.log - файлы логов Linux от сервера баз данных MySQL.

/var/log/httpd/ или /var/log/apache2 - лог файлы linux11 веб-сервера Apache. Логи доступа находятся в файле access_log, а ошибок в error_log

/var/log/lighttpd/ - логи linux веб-сервера lighttpd

/var/log/conman/ - файлы логов клиента ConMan,

/var/log/mail/ - в этом каталоге содержатся дополнительные логи почтового сервера

/var/log/prelink/ - Программа Prelink связывает библиотеки и исполняемые файлы, чтобы ускорить процесс их загрузки. /var/log/prelink/prelink.log содержит информацию о .so файлах, которые были изменены программой.

/var/log/audit/- Содержит информацию, созданную демоном аудита auditd.

/var/log/setroubleshoot/ - SE Linux использует демон setroubleshootd (SE Trouble Shoot Daemon) для уведомления о проблемах с безопасностью. В этом журнале находятся сообщения этой программы.

/var/log/samba/ - содержит информацию и журналы файлового сервера Samba, который используется для подключения к общим папкам Windows.

/var/log/sa/ - Содержит .cap файлы, собранные пакетом Sysstat.

/var/log/sssd/ - Используется системным демоном безопасности, который управляет удаленным доступом к каталогам и механизмами аутентификации.

Просмотр логов в Linux

Чтобы посмотреть логи на Linux удобно использовать несколько утилит командной строки Linux. Это может быть любой текстовый редактор, или специальная утилита. Скорее всего, вам понадобятся права суперпользователя для того чтобы посмотреть логи в Linux. Вот команды, которые чаще всего используются для этих целей:
  • less
  • more
  • cat
  • head
  • grep
  • tail
  • zcat
  • zgrep
  • zmore
  • vi
  • nano
Я не буду останавливаться подробно на каждой из этих команд, поскольку большинство из них уже подробно рассмотрены на нашем сайте. Но приведу несколько примеров. Просмотр логов Linux выполняется очень просто:

Смотрим лог /var/log/messages, с возможностью прокрутки:
Код:
less /var/log/messages
Просмотр логов Linux, в реальном времени:
Код:
tail -f /var/log/messages
Открываем лог файл dmesg:
Код:
cat /var/log/dmesg
Первые строки dmesg:
Код:
head /var/log/dmesg
Выводим только ошибки из /var/log/messages:
Код:
grep -i error /var/log/messages
Кроме того, посмотреть логи на linux можно и с помощью графических утилит. Программа System Log Viewer может быть использована для удобного просмотра и отслеживания системных журналов на ноутбуке или персональном компьютере с Linux.

gnome-ubuntu-system-log.jpg


Вызывается она командой:
Код:
gnome-system-log &
Также для просмотра логов может использоваться любой графический тестовый редактор.

Выводы


В каталоге /var/log вы можете найти всю необходимую информацию о работе Linux. Из сегодняшней статьи вы достаточно узнали, чтобы знать где искать, и что искать. Теперь просмотр логов в Linux не вызовет у вас проблем.

 
Нашёл очень интересную утилиту. Новичкам она будет весьма полезна, особенно при изучении команд.

Утилита позволяет проверить, что сделает с файлами определённый скрипт или команда, но не выполнять их на самом деле. Получив полный список действий, можно применить их или отказаться от изменений.

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

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

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

Установка

Для maybe нужен Python 2.7+/3.2+. Если у вас есть пакетный менеджер , то просто выполните от имени su:
Код:
sudo -s
pip install maybe
Если нет, то установите pip:
Код:
sudo apt-get install python-pip
Использование
Код:
maybe COMMAND [ARGUMENT]...
Например:
Код:
maybe rm /home/user_name/Изображения/0001.jpg

maybe.png
 
Предлагаю в следующий раз рассказать что делать когда закончилось место на диске и надо маунтить новый диск для домашней директории. То есть как слить воедино старую папку home b пространство нового диска.
Сам с трудом помню как это делается. Но проблема сверхактуальная если многофайла хранится.
[doublepost=1463332913][/doublepost]и еще что делать если в результате появления лост-секторов система перестает загружаться.
 
А предлагаю следующей урок по настройке сетевой безопасности.
 
Установка программ из исходников в Ubuntu

Подготовка системы

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

Наберите следующую команду для установки инструментов:
Код:
sudo apt-get install checkinstall build-essential autoconf automake

Установка из tar.gz в Ubuntu

Не важно в какой паке будет находится архив, главное чтобы вы знали где, первой командой которую мы выполним будет переход в папку с архивом:
Код:
cd ~/путь_к_папке_с_архивом
Дальше извлечем исходники из архива:
Код:
tar -xvf имя_архива.tar.gz
И переходим в папку с только что полученными исходными файлами:
Код:
cd ./имя_архива
Обычно программы в Linux состоят из большого количества файлов, и при их сборке нужны различные параметры и опции, поэтому вместо того чтобы запускать компилятор для каждого из файлов в Linux используется утилита make которая на основе файла Makefile подбирает правильные команды компиляции. Программы часто используют внешние библиотеки, а в разных дистрибутивах путь к файлам библиотек разный, поэтому перед тем как запускать make нужно выполнить скрипт configure для проверки зависимостей. Этот скрипт можно создать на основе файла configure.in. Но это не обязательно, в многих программах скрипт конфигурации не предусмотрен и программа не требует проверки зависимостей перед сборкой, тогда файла configure.in просто нет в папке с исходниками. Если так, то просто пропустите следующие инструкции и переходите к сборке.

Configure можно создать несколькими способами, сначала попытаемся выполнить следующие скрипты:
Код:
./bootstrap
./autogen.sh
Если же этих скриптов не оказалось в исходниках, просто последовательно выполните следующие команды:
Код:
aclocal
autoheader
automake —gnu —add-missing —copy —foreign
autoconf -f -Wall
Теперь наверно самое сложное, запускаем configure:
Код:
./configure
Если скрипт обнаружит что какой то библиотеки нет (File имя_файла_библиотеки.so not found), скопилировать пакет не получится, берем название библиотеки и ищем в Google как называется ее пакет в Ubuntu, а затем устанавилваем его через apt-get. Обычно это libимя_библиотеки или libимя_библиотеки-dev.

Дальше можно собирать программу. Команда make скомпилирует программу из исходников, а скрипт checkinstall соберет deb пакет:
Код:
make
checkinstall
И только теперь мы получили программу которую можно устанавливать с помощью центра приложений или в терминале. Установка с помощью dpkg будет выглядеть вот так:
Код:
dpkg -i имя_программы.deb
Вот и все. Теперь вы знаете как установить tar.gz в Ubuntu. Ну или точнее что tar.gz это только текстовые файлы, и чтобы получить из них программу придется немного потрудится.
 
Маленький оффтоп и лайфхак от меня.

Хотите, чтобы каждый раз, открывая терминал, он вас приветствовал? Нет ничего проще! Идёте , пишите какое вы хотите приветствие, выбираете шрифт, копируете получившуюся надпись. В домашней папке создаёте текстовый файл с любым названием, например ANSCII, вставляете туда скопированную надпись, сохраняете и закрываете. Далее, ищете там же файл под названием .bashrc, открываете его любым текстовым редактором и в самом конце добавляете строчку:
Код:
cat /home/user/ANSCII
Сохраняете, закрываете. Открываете терминал и радуетесь результату. :dance3:


 
Управление процессами в Linux

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

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

В этой статье будет затронута обширная тема, мы рассмотрим такие возможности:

  • Просмотр запущенных процессов
  • Просмотр информации о процессах
  • Поиск процессов в Linux
  • Изменение приоритета процессов
  • Завершение процессов
  • Ограничение памяти доступной процессу
Я не мог не включить в статью первые пункты, но они очень просты и мы не будем разбирать их очень подробно. Но вот все остальное может показаться сложным и недостаточно описанным.

Что такое процесс?

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

На самом деле, процессы Linux не настолько абстрактны, какими они вам сейчас кажутся. Их вполне можно попытаться пощупать. Откройте ваш файловый менеджер, перейдите в корневой каталог, затем откройте папку /proc. Видите здесь кучу номеров? Так вот это все - PID всех запущенных процессов. В каждой из этих папок находится вся информация о процессе.

Например, посмотрим папку процесса 1. В папке есть другие под каталоги и много файлов. Файл cmdline содержит информацию о команде запуска процесса:
Код:
cat /proc/1/cmdline
Код:
/usr/lib/systemd/systemd
Поскольку у меня используется система инициализации Systemd, то и первый процесс запускается для нее. С помощью каталога /proc можно сделать все. Но это очень неудобно, особенно учитывая количество запущенных процессов в системе. Поэтому для реализации нужных задач существуют специальные утилиты. Перейдем к рассмотрению утилит, которые позволяют реализовать управление процессами в Linux.

Управление процессами в Linux

В Linux есть очень большое количество утилит для решения различных задач по управлению процессами. Это и такие многофункциональные решения, как htop, top, а также простые утилиты, например, ps, kill, killall, who и т д. Я не буду рассматривать в этой статье графические утилиты, и top тоже рассматривать не буду. Первое потому что слишком просто, второе - потому что htop лучше. Мы остановимся на работе с программой htop и ее аналогами в форме утилит в стиле GNU, одна утилита - одна функция.
Давайте установим htop, если она у вас еще не установлена. В Ubuntu это делается так:
Код:
sudo apt install htop
В других дистрибутивах вам нужно просто использовать свой менеджер пакетов. Имя пакета такое же.

Посмотреть запущенные процессы
Это очень простая задача, и также просто она решается. Для этого существует множество утилит, начиная от обычной ps, до более продвинутых интерактивных top, htop и так далее.

Открыв htop, мы сразу видим список запущенных процессов. Конечно, здесь отображены не все процессы linux, их-то в системе очень много, вы уже знаете, все они на один экран не поместятся. По умолчанию выводятся процессы, запущенные от имени вашего пользователя:

htop-1024x582.png

Вы можете увидеть такую информацию о процессе:

  • PID - идентификатор процесса
  • USER - пользователь, от которого был запущен процесс
  • PRI - приоритет процесса linux на уровне ядра (обычно NI+20)
  • NI - приоритет выполнения процесса от -20 до 19
  • S - состояние процесса
  • CPU - используемые ресурсы процессора
  • MEM - использованная память
  • TIME - время работы процесса
К отображению можно добавить и дополнительные параметры, но эти главные. Добавить параметры можно с помощью меню Setup. Там все очень просто, читайте подсказки и следуйте указаниям. Например, добавлен параметр PPID:

htop1-1024x574.png

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

htop2-1024x576.png

Также есть интересная возможность разместить процессы в виде дерева. Вы сможете увидеть, каким процессом был запущен тот или иной процесс. Для отображения дерева нажмите кнопку F5:

htop3-1024x575.png

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

ps-1024x576.png

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

  • -e - вывести информацию обо всех процессах
  • -a - вывести информацию обо всех наиболее часто запрашиваемых процессах
  • -t - показывать только процессы из этого терминала
  • -p - показывать информацию только об указанном процессе
  • -u - показывать процессы только определенного пользователя
Одним словом, чтобы посмотреть все активные на данный момент процессы в linux, используется сочетание опций aux:
Код:
ps aux
Программа показывает все те же параметры, только здесь нет интерактивного интерфейса. Думаете здесь нельзя отсортировать процессы, но ошибаетесь, можно. Для этого есть опция sort. Вы можете сортировать их по любому полю, например:
Код:
ps aux --sort=%mem
Список будет отсортирован в обратном порядке, внизу значения больше, вверху - меньше. Если нужно в обратном порядке, добавьте минус:
Код:
ps aux --sort=-%cpu
ps1-1024x556.png

В качестве поля для сортировки могут быть использованы приоритеты процессов Linux или любые другие параметры. Также вы можете обрезать вывод, если не нужно выводить всю информацию:
Код:
ps aux | tail
Казалось бы, у ps нет возможности стоить деревья процессов. Но не совсем, для этого существует отдельная команда:
Код:
pstree
pstree.png
[doublepost=1463953824][/doublepost]Поиск процессов в Linux

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

Чтобы найти процесс linux в htop можно использовать кнопку F3. Нажмите F3 и наберите нужное слово. Дальше чтобы перейти к следующему вхождению нажимайте F2 или Esc для завершения поиска:

htop4-1024x596.png

Для поиска процессов в htop можно использовать также фильтр htop. Нажмите F4, введите слово и будут выведены только процессы linux, имя которых включает это слово.

htop6-1024x374.png

В утилите ps фильтрации нет, но зато мы можем использовать утилиту grep, перенаправив вывод ps на нее чтобы найти процесс linux:
Код:
ps aux | grep chromium
Это очень часто употребляемая команда.

Изменение приоритета процессов

Приоритет процесса linux означает, насколько больше процессорного времени будет отдано этому процессу по сравнению с другими. Так мы можем очень тонко настроить какая программа будет работать быстрее, а какая медленнее. Значение приоритета может колебаться от 19 (минимальный приоритет) до -20 - максимальный приоритет процесса linux. Причем, уменьшать приоритет можно с правами обычного пользователя, но чтобы его увеличить нужны права суперпользователя.

В htop для управления приоритетом используется параметр Nice. Напомню, что Priv, это всего лишь поправка, она в большинстве случаев больше за Nice на 20. Чтобы изменить приоритет процесса просто установите на него курсор и нажимайте F7 для уменьшения числа (увеличения приоритета) или F8 - для увеличения числа.

Но и для решения этой задачи управления процессами Linux необязательно использовать htop. Вы можете сделать все и другими командами. Например, команда nice. С помощью нее вы можете указать приоритет для запускаемого процесса:
Код:
nice -n 10 apt-get upgrade
Или изменить приоритет для уже существующего по его pid:
Код:
renice -n 10 -p 1343
Завершение процессов в Linux

Если процесс завис и не отвечает, его необходимо завершить. В htop, чтобы убить процесс Linux, просто установите курсор на процесс и нажмите F9:

htop7-1024x598.png


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

  • SIGKILL - попросить процесс сохранить данные и завершится
  • SIGTERM - завершить процесс немедленно, без сохранения
Вообще сигналов есть несколько десятков, но мы не будем их рассматривать. Отправим сигнал SIGKILL:

Также можно воспользоваться утилитой kill:
Код:
kill -TERM 1943
Также можно уничтожить процесс по имени:
Код:
killall chromium
Ограничение процессов

Управление процессами в Linux позволяет контролировать практически все. Вы уже видели что можно сделать, но можно еще больше. С помощью команды ulimit и конфигурационного файла /etc/security/limits.conf вы можете ограничить процессам доступ к системным ресурсам, таким как память, файлы и процессор. Например, вы можете ограничить память процесса Linux, количество файлов и т д.

Запись в файле имеет следующий вид:

<домен> <тип> <элемент> <значение>

  • домен - имя пользователя, группы или UID
  • тип - вид ограничений - soft или hard
  • элемент - ресурс который будет ограничен
  • значение - необходимый предел
Жесткие ограничения устанавливаются суперпользователем и не могут быть изменены обычными пользователями. Мягкие, soft ограничения могут меняться пользователями с помощью команды ulimit.

Рассмотрим основные ограничения, которые можно применить к процессам:

  • nofile - максимальное количество открытых файлов
  • as - максимальное количество оперативной памяти
  • stack - максимальный размер стека
  • cpu - максимальное процессорное время
  • nproc - максимальное количество ядер процессора
  • locks - количество заблокированных файлов
  • nice - максимальный приоритет процесса
Например, ограничим процессорное время для процессов пользователя sergiy:
Код:
sergiy hard nproc 20
Посмотреть ограничения для определенного процесса вы можете в папке proc:
Код:
Max cpu time unlimited unlimited seconds
Max file size unlimited unlimited bytes
Max data size unlimited unlimited bytes
Max stack size 204800 unlimited bytes
Max core file size 0 unlimited bytes
Max resident set unlimited unlimited bytes
Max processes 23562 23562 processes
Max open files 1024 4096 files
Max locked memory 18446744073708503040 18446744073708503040 bytes
Max address space unlimited unlimited bytes
Max file locks unlimited unlimited locks
Max pending signals 23562 23562 signals
Max msgqueue size 819200 819200 bytes
Max nice priority 0 0
Max realtime priority 0 0
Max realtime timeout unlimited unlimited us
Ограничения, измененные, таким образом вступят в силу после перезагрузки. Но мы можем и устанавливать ограничения для текущего командного интерпретатора и создаваемых им процессов с помощью команды ulimit.

Вот опции команды:

  • -S - мягкое ограничение
  • -H - жесткое ограничение
  • -a - вывести всю информацию
  • -f - максимальный размер создаваемых файлов
  • -n - максимальное количество открытых файлов
  • -s - максимальный размер стека
  • -t - максимальное количество процессорного времени
  • -u - максимальное количество запущенных процессов
  • -v - максимальный объем виртуальной памяти
Например, мы можем установить новое ограничение для количества открываемых файлов:
Код:
ulimit -Sn 1024
Теперь смотрим:
Код:
ulimit -Sn
Установим лимит оперативной памяти:
Код:
ulimit -Sv 500000
Напоминаю, что это ограничение будет актуально для всех программ, выполняемых в этом терминале.

Выводы

Вот и все. Теперь управление процессами в Linux не вызовет у вас проблем. Мы рассмотрели очень даже подробно эту тему.

 
Ошибка с GPG ключами.

Иногда новички сталкиваются с тем, что при выполнении команды
Код:
sudo apt-get update
выскакивает например такая ошибка:
Код:
Ошибка GPG: http://ppa.launchpad.net trusty Release: Следующие подписи не могут быть проверены, так как недоступен открытый ключ: NO_PUBKEY 886DDD89
И даже если вы импортируете заново открытый ключ, выполнив команду:
Код:
sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 886DDD89
то может выскочить ошибка:
Код:
gpg: ресурс блока `/etc/apt/trusted.gpg.d/webupd8team-y-ppa-manager.gpg': нехватка ресурсов
Что же делать в этом случае? В этом случае выполняем последовательно команды:
Код:
sudo add-apt-repository ppa:nilarimogard/webupd8
sudo apt-get install launchpad-getkeys
Затем все файлы в /etc/apt/trusted.gpg.d перенесите куда-нибудь, потом удалите их если всё заработает. Далее, выполните команду:
Код:
sudo launchpad-getkeys
После этого ошибка должна изчезнуть. Проверьте командой:
Код:
sudo apt-get update
 
А так же, Всем новопришедшим на дистры Линукса, рекомендую (пост на Хабре), чтобы закрепить знания и узнать что-то новое.
Правда слегка устарела (издание 2015) и перевод кривой в местах, но именно с нее, я начал свое знакомство + гугл.
 

Похожие темы

В личные сообщения спросили почему концентрируюсь на Tails\Windows. Потому что 3/4 даркнета использует одну из этих OS. Windows в лучшем случае из худших на дедике из-под VPN. В худшем только VPN (бесплатный). Метаданные — это теги. Они нужны системе для поиска, сортировки и изменения...
Ответы
3
Просмотры
536
Ты удалил переписку. Очистил корзину. Отформатировал диск. Может даже сбросил телефон до заводских настроек. Спишь спокойно А потом твоё устройство попадает к форензику. Он подключает его к чемоданчику, запускает софт — и через пару часов всё что ты "удалил" лежит на экране. Фотки, чаты...
Ответы
0
Просмотры
134
Метаданные — невидимый деанон Как одна фотка сливает тебя с потрохами ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Приветствую, коллеги Сидишь через Tor, Tails, Monero — красавчик. А потом кидаешь скрин клиенту или фотку товара и всё, приехали. Внутри любого файла лежит куча инфы которую...
Ответы
10
Просмотры
358
Ты загружаешь файл на VirusTotal. 0 детектов из 72 движков. Зелёная галочка, всё чисто. Запускаешь — а через час все пароли из браузера, куки, крипто-кошельки и сессии Telegram уже на сервере у кого-то другого Это не баг VirusTotal. Это не глупость антивирусов. Это целая индустрия, которая...
Ответы
1
Просмотры
117
Environment - Linux Medium В прошлый раз мы начали с прохождения лёгкой машины и как я писал в первой статье, пойдём по нарастающей. Начнем прохождение машины, как всегда, с первичных сканов. Результаты сканирования с помощью Nmap показали только два открытых порта: 22/tcp open ssh syn-ack...
Ответы
2
Просмотры
758
Назад
Сверху Снизу