Linux для чайника – Telegram
Linux для чайника
20K subscribers
89 photos
4 files
80 links
Linux
- Разбор утилит / инструментов
- Новости / факты
- Опросы для проверки знаний, навыков
и многое другое.

Только по вопросам сотрудничества: @altmainf

Регистрация в перечне РКН https://clck.ru/3EpL9L
Download Telegram
Команда look

Осуществляет разбор текстовых файлов и выводящей строки, начинающиеся с заданных префиксов. Она нередко используется для поиска строк в текстовых файлах в рамках сценариев. В том случае, если имя текстового файла не задано, осуществляется поиск английских слов в системном словаре, расположенном по пути /usr/share/dict/words.

Для поиска строки, начинающейся с заданного слова, в текстовом файле, достаточно использовать утилиту look:
look "Слово" text.txt 

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

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

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

Синтаксис:
objdump <флаг> <файл>

Чтобы отобразить сводную информацию из заголовков разделов объектного файла.
objdump -h some_file

Вывести заголовок файла:
objdump -f some_file

Дизассемблирование всех разделов:
objdump -D some_file

Вывести всё содержимое всех секций в шестнадцатеричном представлении:
objdump -s some_file
Поддержка сторонних файловых систем 

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

 ⁃ msdos — обеспечивает совместимость с системой MS-DOS. 
 ⁃ umsdos — расширяет возможности драйвера файловой системы MS-DOS для Linux 
 ⁃ iso9660 — стандартная файловая система для CD-ROM. 
 ⁃ xenix — файловая система Xenix. 
 ⁃ sysv — файловая система System V (версия для x86).
 ⁃ nfs — сетевая файловая система, обеспечивающая разделение одной файловой системы между несколькими компьютерами для предоставления доступа к ее файлам со всех машин по сети.
Преимущества Linux над другими ОС

 1. Лучшая операционная система— UNIX. Linux— это современный вариант UNIX, работающий практически на всех платформах.
 
 2. Исходный код всех программ под Linux открыт, при желании его можно модифицировать так, как нужно.  

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

 4. В Linux можно настроить всё и вся. Простота конфигурации и подробное описание конфигурационных файлов выгодно отличают Linux от большинства коммерческих ОС. 

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

 6. Постоянное обновление и улучшение как ядра Linux, так и большинства программных продуктов для нее. 

 7. Независимость от патентов и лицензий.
Команда aptitude

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

В последнее время стал не очень популярным, потому что делает практически всё то же, что и apt и тоже из командной строки, но иногда им пользуются.

Эта команда будет работать в большинстве дистрибутивов, основанных на Debian и Ubuntu. Что касается систем Fedora, CentOS и других использующих RPM, то там aptitude использовать не надо. Хотя установить программу можно и там.

Если запустить программу без параметров, то откроется псевдографический интерфейс.
sudo aptitude
Настройка UDEV Rules в Linux

Философия Unix гласит — всё есть файл. Таким образом, файлы в Unix — это не только информация, хранимая на жёстком диске, но и устройства.

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

Правила udev помогут вам, если вы хотите:
 ⁃ переименовать устройство, например жёсткий диск или сетевую карту;
 ⁃ создать дополнительное имя для устройства;
 ⁃ поменять права доступа к устройству;
 ⁃ установить владельца и группу;
 ⁃ выполнить скрипт при подключении или отключении устройства.

Правила udev хранятся в папке /etc/udev/rules.d. Файл правил обязательно должен иметь расширение .rules. Обычно в этой папке уже есть несколько файлов udev rules, но их трогать не рекомендуется, для своих правил лучше создать новый.
Основные файловые системы (ФС)

В зависимости от целей и задач пользователя можно выбрать любую ФС, доступную в дистрибутиве ОС:

 ⁃ Ext2 — наиболее богатая функциональными возможностями ФС Linux.  

 ⁃ Ext3 — модернизация системы Ext2. Помимо некоторых функциональных расширений является журналируемой. Получила широкое распространение. 

 ⁃ Ext4 — модернизация файловой системы Ext3. Основная особенность — увеличение максимального объема одного раздела диска до 1 эксабайта.  

 ⁃ JFS — журналируемая ФС первая альтернатива для ФС группы Ext. Ее разработали в IBM специально для операционной системы AIX UNIX.

 ⁃ ReiserFS — подходит исключительно под Linux, чаще всего ее используют в качестве возможной замены Ext3

 ⁃ XFS — журналируемая ФС, однако в логи записывает исключительно те изменения, которые претерпевают метаданные.

 ⁃ Btrfs — современная ФС, главной особенностью которой является высокая отказоустойчивость
Вычисления с плавающей точкой в ядре

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

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

Оно может достигаться 2-мя различными способами: 
 
1. Статически
Мы вносим собственные изменения в основное дерево исходных кодов ядра Linux, после чего производится пересборка ядра. В итоге мы получаем некоторую частную модификацию ядра. 
Преимущество: в добавляемом коде доступны все имена объектов ядра (вызовы функций, экземпляры данных). Таким способом сборщики дистрибутивных образов патчат официальное ядро, включая туда дополнения, которые они находят нужными. 

 2. Динамически
Код оформляется в формате динамически подгружаемого модуля. При выполнении системы модуль динамически загружается и становится неотъемлемой частью кода ядра. Всё связывание кода модуля производится по абсолютным адресам имён в ядре, поэтому модуль может быть собран только под конкретную версию и модификацию ядра. Ограничением этого способа является то, что коду модуля доступны только те объекты, которые явно объявлены как экспортируемые.
Демоны — что это такое?

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

Чтобы пользовательский процесс стал сервером, он должен выполнить некоторую последовательность действий, которая называется демонизацией, состоящая в том, чтобы:
 ⁃ создать свой собственный клон вызовом fork() и завершить родительский процесс;
 ⁃ создать новую сессию вызовом setsid(), при этом процесс становится лидером сессии и теряет связь с управляющим терминала; 
 ⁃ позакрывать все ненужные файловые дескрипторы.
Команда nm

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

Чтобы вывести список содержащихся в файле внешних функции:
nm -g some_file_name

Вывести идентификаторы C++ в удобочитаемом виде:
nm --demangle some_file_name

Вывести список содержащихся в файле неопределённых символов:
nm -u some_file_name

Перечислить все символы, в том числе и отладочные:
nm -a some_file_name
Зачем ядру нужна виртуальная адресация?

Управление виртуальной памятью — это функция Linux, которая обеспечивает многозадачность в системе без каких-либо ограничений. 

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

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

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

Синтаксис:
uniq options input_file output_file

Опции:
-u — выводит исключительно те строки, у которых нет повторов.
-d — если какая-либо строка повторяется несколько раз, она будет выведена лишь единожды.
-D — выводит только повторяющиеся строки.
-i — при сравнении не будет иметь значение регистр, в котором напечатаны символы (строчные и заглавные буквы).
-c — в начале каждой строки выводит число, которое обозначает количество повторов.
Системные вызовы syscall 

syscall() выполняет системный вызов, номер которого задаётся значением number и с заданными аргументами. Символьные константы для системных вызовов можно найти в заголовочном файле < sys/syscall.h >. 

Системные вызовы syscall() в Linux на процессоре x86 выполняются через прерывание int 0x80. Соглашение о системных вызовах в Linux отличается от общепринятого в UNIX (через стек) и соответствует соглашению «fastcall». Согласно ему, программа помещает в регистр eax номер системного вызова, входные аргументы размещаются в других регистрах процессора, после чего вызывается инструкция int 0x80. 

В тех относительно редких случаях, когда системному вызову необходимо передать большее количество аргументов (например, mmap), то они размещаются в структуре, адрес на которую передается в качестве первого аргумента (ebx). Результат возвращается в регистре eax, а стек вообще не используется. 

Системный вызов syscall(), попав в ядро, всегда попадает в таблицу sys_call_table, и далее переадресовывается по индексу (смещению) в этой таблице на величину 1-го параметра вызова syscall() - номера требуемого системного вызова.
Демон журналирования ядра — klogd

Демон klogd(kernel-logging daemon) предназначен для перехвата и протоколирования сообщений ядра Linux.

Основные опции:
-c n — Устанавливает уровень журналирования по умолчанию для консольных сообщений в n.
-d — Включить отладочный режим. 
-f <файл> — Журналировать сообщения в указанный файл.
-i -I — Послать сигнал уже запущенному демону klogd. Опция -i посылает сигнал загрузить информацию о символах модулей ядра. Опция -I посылает сигнал перечитать заново как информацию о статических символах ядра, так и о символах модулей ядра.

По умолчанию демон klogd вызывается системным вызовом для того, чтобы препятствовать отображению всех сообщений на консоль. Это правило не распространяется на критические сообщения ядра (kernel panic), так как эти сообщения все равно будут отображены на консоли.
Команда chgrp

Стандарт прав файлов пришёл в Linux из Unix. У каждого файла есть владелец и группа, помимо этого описываются права остальных пользователей. Права состоят из трёх пунктов: чтение, запись и выполнение. Для изменения прав используется команда umask, но для изменения непосредственно владельца и группы используются команды chgrp. 

Команда меняет группу на new-group для файла some_file.txt в текущей папке:
sudo chgrp new-group some_file.txt

А эта меняет группу на new-group для папки folder:
sudo chgrp new-group folder

Параметры:
-h – работать непосредственно с самими символьными ссылкам
--dereference – работать с файлами (используется по умолчанию);
-H – перейти по символической ссылке и изменить атрибуты файла/каталога. Сама ссылка остаётся без изменений. Используется вместе с параметром -R;
-L - перейти по символической ссылке и продолжить рекурсивную обработку. Сама ссылка остаётся без изменений.
Утилита DMESG

Ядро Linux, как и другие программы может и выводит различные информационные сообщения и сообщения об ошибках. Все они выводятся в буфер сообщения ядра, так называемый kernel ring buffer. 

Для получения сообщений из этого буфера можно прочитать файл /var/log/dmesg. Однако, более удобно это можно сделать с помощью команды dmesg.

Опции:
-C — очистить буфер сообщений ядра;
-c — вывести сообщения из буфера ядра, а затем очистить его;
-d — выводит время прошедшее между двумя сообщениями;
-H — включить вывод, удобный для человека;
-k — отображать только сообщения ядра;
-L — сделать вывод цветным (включается автоматически при использовании опции -H)
-r — печатать сообщения как есть, не убирая служебные префиксы;
-S — использовать Syslog для чтения сообщений от ядра, по умолчанию используется файл /dev/kmsg
Конфигурационные параметры ядра 

Все конфигурационные параметры параметры ядра, определяемые в диалоге сборки, бывают: 
 ⁃ те параметры ядра, которые были выбраны в диалоге сборки с ответом 'y' — соответствующие им конфигурационные параметры определены в файле <linux/autoconf.h> со значением 1

 ⁃ те параметры ядра, для которых в диалоге сборки были установлены символьные значения (чаще всего, это путевые имена в файловой системе Linux) — определены в файле <linux/autoconf.h> как символьные константы, имеющие именно эти значения. 

 ⁃ сложнее с теми параметрами ядра, которые были выбраны в диалоге сборки с ответом 'm' (собирать такую возможность как подгружаемый модуль) — тогда символическая константа с именем именем CONFIG_XXX, соответствующим конфигурационному параметру, не будет определена в файле <linux/autoconf.h>, но будет определена другая символическая константа с суффиксом _MODULE: CONFIG_XXX_MODULE, и значение её будет, естественно, 1.
Команда rmmod

Команда rmmod удаляет модуль из ядра Linux.

В современных системах Linux rmmod является частью двоичного файла kmod, который реализует несколько программ, используемых для управления модулями ядра Linux.

Только пользователи с правами администратора могут удалять модули.

Вы можете распечатать список всех модулей, загруженных в вашу систему, с помощью команды lsmod. Модули ядра хранятся в каталоге /lib/modules/<kernel_version>.

Чтобы удалить модуль, можно использовать команду:
rmmod module_name

-v — отобразить информацию о том, что делает команда.
-f — если вы хотите удалить модуль, который используется или не предназначен для удаления. Использование этой опции крайне опасно, поскольку может вызвать сбой системы.
Функция mmap и munmap

mmap и munmap соответственно отображают или удаляют файлы или устройства в памяти.

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

Когда вы обращаетесь к отображенной памяти в первый раз, ваш ЦП генерирует отказ страницы. Затем ядро  ОС может вмешаться, «исправить» недопустимый доступ к памяти, выделив память и выполнив файловый ввод-вывод в этом вновь выделенном буфере, а затем продолжить выполнение вашей программы, как будто ничего не произошло.

mmap может дать сбой, если ваш процесс находится за пределами адресного пространства.
Команда sourse

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

Синтаксис:
source имя_файла

Если мы выполним какой-нибудь bash скрипт с помощью этой команды, то скрипт станет доступен в командном интерпретаторе. Однако, он есть только в текущем, в других интерпретаторах его нет. В этом и есть отличие команды sourse от export, которая позволяет экспортировать переменные окружения глобально.