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

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

Регистрация в перечне РКН https://clck.ru/3EpL9L
Download Telegram
Команда awk не является простой командой с единственным способом применения; на самом деле это мощный C-подобный скриптовый язык построчного разбора и обработки входного потока по заданным шаблонам, которому посвящены целые книги.

К сожалению, искусство применения языка awk сейчас практически утрачено, поскольку его заменили более развитые языки, такие как Python.

Очень многие пользователи используют команду awk с единственной целью: чтобы выбрать отдельное поле из потока ввода, например:

ls -l | awk '{print $5}'

Эта команда выводит пятое поле из отчета команды ls (размер файла). В результате получится список, содержащий размеры файлов.
Использование кавычек может привести к некоторым запутанным моментам.

Допустим, вы желаете напечатать строку $100 и для этого набираете следующее:
echo $100
Получаем: 00

Почему? Потому что оболочка увидела фрагмент $1, который является переменной оболочки.

Вы могли бы решить, что, если поместить текст в кавычки, оболочка не заметит фрагмент $1. Но это тоже не работает:
echo "$100"
Получаем: 00

Тогда вы спрашиваете об этом у приятеля, который отвечает, что необходимо вместо двойных кавычек использовать одинарные:
echo '$100'
Получаем: $100
Если необходимо использовать арифметические операторы в сценариях оболочки, поможет команда expr (которая выполняет даже некоторые операции со строками).

Например: expr 5 + 2 выводит результат 7.

Полный перечень операций: expr --help

expr
не хранит результат, а по умолчанию просто печатает ответ. Но никто не запрещает сохранять результат в переменные:
A=$( expr 12 - 7 )
echo $A # 5

Применение команды expr — это неуклюжий и медленный способ выполнения математических вычислений.

Если вам часто приходится заниматься ими, то, лучше использовать что-то вроде Python.
Как сохранить изменения и выйти в текстовом редакторе nano

NANO простой текстовый редактор. Чтобы сохранить изменения нужно нажать сочетание клавиш Ctrl + O , после этого редактор попросит ввести имя файла для сохранение. И когда все готово, достаточно нажать Enter. Чтобы выйти — Ctrl+X

Однако, если вы попытаетесь сохранить данные в файл, к которому у вас нет доступа, то получите ошибку: "Ошибка записи /имя/файла: Отказано в доступе"

Проще всего, закрыть редактор, нажав Ctrl+X не сохраняя изменений. На вопрос редактора про сохранение буфера надо ответить No. А затем открыть редактор уже от имени суперпользователя.

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

Новый файл сохранится туда, потом вы сможете переместить его вместо старого в помощью команды mv уже используя sudo.
Команда more

Утилита more предназначена для постраничного просмотра файлов в терминале Linux. Команда more — одна из самых примитивных команд для работы с текстом.

Примеры использования:

Для того, чтобы просмотреть текст из файла filename.txt:
more filename.txt

Также в команде можно перечислить несколько имён файлов одно за другим, разделяя их пробелом. Содержимое этих файлов будет выведено в том же порядке:
more file1.txt file2.txt

Порой необходимо вывести на экран не весь текст, а только его часть. Для таких случаев предусмотрены опции - (минус) и + (плюс), рядом с которыми указывается число строк. Чтобы увидеть содержимое файла, начиная с 8-й строки, следует добавить к команде опцию +8, а чтобы команда выводила результат, состоящий максимум из 5-ти строк, опцию -5:
more +8 -5 filename.txt

Также more умеет работать не только с выводами других команд:
locate bin | more -10
Инициализация физических томов

Команда pvcreate позволяет инициализировать блочное устройство как физический том. Принципиально инициализация подобна форматированию файловой системы. 

Команда инициализации /dev/sdd1, /dev/sde1 и /dev/sdf1 выглядит так:
pvcreate /dev/sdd1 /dev/sde1 /dev/sdf1

Для инициализации отдельных разделов применяется команда pvcreate. Следующий пример инициализирует /dev/hdb1 как физический том для дальнейшего включения в логический том LVM.

pvcreate /dev/hdb1
.IMG файл

Файл IMG представляет собой файл образа диска, созданный различными приложениями для работы с образами дисков, такими как H+H Software Virtual CD. Он хранит точную копию данных на CD или DVD и используется для резервного копирования и записи новых дисков.

Файлы IMG, созданные разными программами создания образа диска, могут использовать разные форматы. Например, файлы IMG, созданные SlySoft CloneCD, должны быть объединены в пару с соответствующими файлами .CCD и .SUB, прежде чем их можно будет использовать для создания диска.

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

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

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

Самый простой способ использования команды nl:
cat <file> | nl

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

Блочное устройство (block device) — вид файла устройств в UNIX/Linux-системах, обеспечивающий интерфейс к устройству, реальному или виртуальному, в виде файла в файловой системе.

Типичные примеры блочных устройств: жёсткий диск, CD-ROM, НГМД.

Чтобы выполнить поиск блочных устройств для создания физических томов на их основе, можно воспользоваться командой lvmdiskscan.
Копирование файлов по ssh

Чтобы скопировать локальный файл myfile.txt на компьютер с IP адресом 192.168.12.124 в директорию /home/mycomputer:
scp myfile.txt mycomputer@192.168.12.124:/home/mycomputer

А наоборот, скопировать файл с удаленного компьютера в текущую директорию:
scp mycomputer@192.168.12.124:/home/mycomputer

Также копировать можно не только файлы, но и и целые директории.

Чтобы скопировать с локального компьютера директорию ~/mydir на удаленный компьютер в директорию /home/mycomputer:
scp -r ~/mydir mycomputer@192.168.1.17:/home/mycomputer
Inxi — утилита командной строки для отображения подробной информации о системе в Linux и других Unix-подобных ОС. Она предоставляет обширные данные о конфигурации системы, включая информацию о железе, сети, процессах и многом другом.

Для получения подробной информации о системе, можно запустить команду: inxi -F (Параметр -F (или --full) выводит полную информацию о системе, включая аппаратные и программные компоненты).
inxi -x: выводит более подробную информацию о процессоре и памяти.
inxi -S: показывает информацию только о системе, такой как дистрибутив, версия ядра и архитектура.
inxi -G: отображает только информацию о графической карте.

Для большинства дистрибутивов Inxi доступен через стандартные репозитории:
В Ubuntu/Debian: sudo apt install inxi
В Fedora:
sudo dnf install inxi
В Arch Linux:
sudo pacman -S inxi
httpie

Инструмент командной строки, который упрощает взаимодействие с веб-API, предоставляя более человекочитаемый вывод по сравнению с curl. Он предоставляет удобный синтаксис для отправки HTTP-запросов.

Из преимуществ:
- Удобный формат вывода (JSON, HTML).
- Автоматическая обработка ошибок.
- Легкость в отправке запросов с JSON-данными.

Debian, Ubuntu: sudo apt install httpie
AlmaLinux, CentOS: sudo yum install httpie
Fedora: sudo dnf install httpie

Пример использования: http GET https://example.com
Для отправки POST-запроса: http POST https://example.com key=value
Свободные лицензии

Выделяют две группы:

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

Разрешительные лицензии — содержат минимум пользовательских требований и разрешают создавать проприетарный софт на основе исходной программы. С другой стороны, разрешительные лицензии не позволяют автору исходного кода контролировать судьбу модифицированной версии ПО. К ним относятся: BSD, MIT и Apache.

Совместимость лицензий означает, что программы, распространяемые под этими лицензиями, могут быть объединены или код одной программы может быть использован в другой. Разрешительные лицензии в основном совместимы между собой, а вот версии GPL — нет.
Команда modinfo

Выводит информации о модуле: файл модуля, краткое описание, авторы, лицензия, параметры. 

modinfo <опция> <имя_модуля|имя_файла>
Если имя модуля не является именем файла, то будет выполнен поиск в каталоге /lib/modules/версия

Опции:
-V либо --version — Вывести версию modinfo.
-F либо --field — Вывести только значение этого поля, по одному в строке. 
-k — Предоставить информацию о другом ядре, а не о используемом в настоящее время. Эта возможность может потребоваться для извлечения информации из недавно установленного набора модулей.
Процесс загрузки Linux

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

Init делает это с помощью запуска демона udev, Когда udev запущен, все оставшиеся файловые системы, которые не были примонтированы, монтируются, и запускаются остальные сервисы.

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

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


Xclip
— отличный инструмент, который используется в качестве буфера обмена.

Устанавливаем Xclip в Ubuntu: sudo apt install xclip

Примеры использования:

Предположим, вы хотите скопировать имя любого веб-сайта в буфер обмена, а затем, позже, вы также можете вставить его с помощью: echo "<URL>" | xclip

отобразить дату и время с помощью буфера обмена: date | xclip

Копирование содержимого любого текстового файла и затем вставка его в терминал: cat textfile.txt | xclip
Как правильно запускать gdb, чтобы не было ошибок

Иногда при запуске программы в gdb (GNU Debugger) может возникать ошибка: "No symbol table is loaded"

Чтобы эта ошибка больше не появлялась, есть несколько способов:

1. Добавить дополнительный флаг -g при компиляции программы. Например: gcc -g main.c file.c -o main
2. Также вместо -g программу можно скомпилировать с флагом -ggdb.
3. Уже при запущенном gdb можно использовать команду file
(gdb) file main
Reading symbols from /home/usr/main… done.

где main - это наша скомпилированная программа.
Найти и заменить строку с помощью sed

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

Общая форма поиска и замены текста с помощью sed имеет следующий вид:
sed -i 's/SEARCH_REGEX/REPLACEMENT/g' INPUTFILE

где -i — опция, указывающая sed редактировать файлы на месте.
s — заменяющая команда
/ — Символ-разделитель
SEARCH_REGEX — обычная строка или регулярное выражение для поиска
REPLACEMENT — строка замены
g — Флаг глобальной замены
INPUTFILE — имя файла, для которого вы хотите запустить команду
Выборка файлов для поиска с помощью grep

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

Чтобы выполнить поиск только по файлам с определенным расширением, например, .txt нужно использовать опцию --include:
grep -r --include=«*.txt» <слово> </путь/к/папке>

А для того чтобы исключить все файлы с расширением .txt используйте опцию --exclude:
grep -r --exclude=«*.txt» <слово> </путь/к/папке>
Если вам когда-нибудь станет скучно и захочется чем-нибудь заняться, то попробуйте изучить вопрос: «Какие форматы ключей SSH лучше использовать?»
Споры на эту тему бесконечны... используйте RSA, ECDSA и ED25519 и избегайте DSA. Удалите DSA-ключ хоста, а остальные оставьте.

RSA — самый старый тип. Ключи этого типа достаточно стойкие и обеспечивают максимальную совместимость.

ECDSA и ED25519 — более новые типы ключей, очень эффективные и менее затратные в вычислительном отношении.

Некоторые старые клиенты SSH не поддерживают ECDSA и ED25519. Надеюсь, вы не используете их, поскольку ECDSA и ED25519 появились вместе с OpenSSH 6.5 в 2014 году. Чрезвычайно важно обновлять службы безопасности и не использовать старые и небезопасные клиенты.