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

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

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

ld (linker) используется для связывания объектных файлов и создания исполняемых файлов или динамических библиотек.

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

1. Создание исполняемого файла:
ld -o myprogram file1.o file2.o lib1.a lib2.a

Эта команда связывает объектные файлы file1.o и file2.o с библиотеками lib1.a и lib2.a и создает исполняемый файл myprogram.

2. Создание динамической библиотеки:
ld -shared -o libmylib.so file1.o file2.o

Эта команда связывает объектные файлы file1.o и file2.o и создает динамическую библиотеку libmylib.so

3. Указание точки входа:
ld -e my_function -o myprogram file1.o file2.o lib1.a lib2.a

Эта команда связывает объектные файлы file1.o и file2.o с библиотеками lib1.a и lib2.a, указывает my_function как точку входа, и создает исполняемый файл myprogram.
Для проверки скорости записи/чтения можно использовать утилиту dd

Измеряем скорость записи:
dd if=/dev/zero of=testfile bs=1M count=1000 conv=fdatasync
Команда создаст файл testfile размером 1000 МБ, заполненный нулями, и измерит скорость записи данных в этот файл.

Измеряем скорость чтения:
dd if=testfile of=/dev/null bs=1M
Команда прочитает содержимое файла testfile и измерит скорость чтения данных из него.
Настройка и защита SSH-сервера с использованием двухфакторной аутентификации

Задача:

Настройте сервер SSH, чтобы он использовал двухфакторную аутентификацию: сначала SSH-ключи, затем временные коды из Google Authenticator.

Решение:

1. Установите Google Authenticator на сервер:
sudo apt install libpam-google-authenticator

2. Настройте Google Authenticator для пользователя:
google-authenticator
Следуйте инструкциям, чтобы сгенерировать QR-код и связать его с вашим мобильным устройством. После этого сканируйте QR-код в приложении Google Authenticator.

3. Откройте файл конфигурации SSH:
sudo nano /etc/ssh/sshd_config

Найдите и измените следующие строки:
ChallengeResponseAuthentication yes
PasswordAuthentication no


4. Настройте PAM (Pluggable Authentication Modules) для двухфакторной аутентификации. Откройте файл /etc/pam.d/sshd и добавьте:
auth required pam_google_authenticator.so

5. Перезапустите SSH-сервис:
sudo systemctl restart sshd
__________
Теперь для подключения нужно будет использовать SSH-ключ и вводить временный код из приложения Google Authenticator.
Реализация логирования и мониторинга процессов с помощью syslog и journalctl

Задача:


Настройте централизованное логирование для отслеживания ошибок приложений и мониторинга с помощью syslog и journalctl.

Решение:

1. Для начала убедитесь, что rsyslog и journalctl настроены для ведения журналов. Откройте файл /etc/rsyslog.conf и добавьте строки для централизованного логирования:
*.* @your_log_server_ip:514

2. Перезапустите службу rsyslog:
sudo systemctl restart rsyslog

3. Настройте приложение на запись в системный журнал. В вашем приложении добавьте код для логирования:
import logging
import syslog

syslog.syslog(syslog.LOG_INFO, "This is a log message")


4. Для мониторинга журналов используйте команду journalctl:
sudo journalctl -u your_service

Чтобы следить за реальными логами, используйте:
sudo journalctl -f

5. Просмотрите логи для определенных приложений:
sudo journalctl -u apache2
__________
Теперь ваше приложение будет записывать логи в системный журнал, и вы сможете следить за ними с помощью journalctl.
Настройка и управление правами пользователей и групп на сервере

Задача:

Создайте несколько пользователей и назначьте им доступ к различным каталогам с использованием групп. Используйте команду chown и chmod для управления правами.

Решение:

1. Создайте два пользователя:
sudo useradd user1
sudo useradd user2


2. Создайте группу devgroup:
sudo groupadd devgroup

3. Добавьте пользователей в эту группу:
sudo usermod -aG devgroup user1
sudo usermod -aG devgroup user2


4. Создайте директорию и установите на неё права доступа только для группы:
sudo mkdir /home/devgroup
sudo chown :devgroup /home/devgroup
sudo chmod 770 /home/devgroup


5. Проверьте права:
ls -l /home
__________
Теперь только пользователи из группы
devgroup могут иметь доступ к каталогу /home/devgroup.
Мониторинг сетевого трафика с помощью iftop

Задача:

Используйте iftop для мониторинга входящего и исходящего сетевого трафика в реальном времени.

Решение:

1. Установите iftop:
sudo apt install iftop

2. Запустите iftop для мониторинга трафика:
sudo iftop
__________
В интерфейсе вы увидите список всех активных подключений и их скорость передачи данных.
Поиск строк в файле с использованием grep

Задача:
Необходимо найти все строки, содержащие слово "error" в логах Apache (файл apache.log), и сохранить их в новый файл error_logs.txt.

Решение:


1. Используем команду grep для поиска строк с ошибками:
grep 'error' apache.log > error_logs.txt

Параметры:
'error'ищет строки, содержащие это слово.
>перенаправляет результат в новый файл.

2. Проверка содержимого error_logs.txt:
cat error_logs.txt
__________
Теперь у вас есть файл, содержащий только строки с ошибками.
Использование ufw для настройки брандмауэра с ограничениями по IP

Задача:

Настройте брандмауэр с помощью ufw, чтобы разрешить доступ к SSH только с определенного IP-адреса.

Решение:

1. Установите и активируйте ufw:
sudo apt install ufw
sudo ufw enable


2. Разрешите подключение по SSH:
sudo ufw allow ssh

3. Ограничьте доступ к SSH только с определенного IP-адреса:
sudo ufw allow from <your_ip_address> to any port 22

4. Проверьте статус:
sudo ufw status
__________
Теперь только указанный IP-адрес может подключаться по SSH.
Отображение зависимостей

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

Основной синтаксис команды ldd выглядит следующим образом:
ldd [опция]... [файл]...

Чтобы увидеть список динамических библиотек, необходимых для работы команды /bin/ls, нужно выполнить команду:
ldd /bin/ls

ldd имеет несколько опций, которые могут изменить его поведение:
--version: Показать версию ldd.
--verbose: Вывести всю информацию, включая информацию о версиях символов.
--help: Показать справочное сообщение и выйти.
Выбор столбцов из файла с использованием cut

Задача:
У вас есть файл CSV с данными о пользователях (users.csv), и вам нужно выбрать только имя и email пользователей, которые находятся в первых двух столбцах.

Решение:

1. Пример содержимого
users.csv:ID,Name,Email,Age
1,John,john@example.com,30
2,Jane,jane@example.com,25
3,Bob,bob@example.com,40


2. Используем команду cut для выбора первых двух столбцов:
cut -d ',' -f 2,3 users.csv

Параметры:
-d ',' — указывает разделитель (запятая).
-f 2,3 — выбирает второй и третий столбцы (имя и email).

3. Результат:
Name,Email
John,john@example.com
Jane,jane@example.com
Bob,bob@example.com

__________
Теперь у вас есть только имена и электронные адреса пользователей.
Использование awk для анализа данных в столбцах

Задача:
У вас есть файл с данными о продажах (sales_data.txt), где в первом столбце указана дата, а в последнем — сумма продажи. Необходимо вычислить общую сумму продаж за все дни.

Решение:


1. Пример содержимого sales_data.txt
2021-01-01,Product1,100
2021-01-02,Product2,150
2021-01-03,Product3,200


2. Используем команду awk для подсчета общей суммы:
awk -F ',' '{sum += $3} END {print "Total Sales: " sum}' sales_data.txt

Параметры:
-F ','указывает разделитель (запятая).
{sum += $3}добавляет значение из третьего столбца (сумма продажи) к общей сумме.
END {print "Total Sales: " sum}выводит результат после обработки всех строк.

3. Результат:
Total Sales: 450
__________
Теперь у вас есть общая сумма продаж за все дни.
В Linux процессы могут быть не только запущены, но и контролируемы на уровне блокировок, изменения приоритетов, а также контроля за использованием памяти.

Пример:
# Отследить системные вызовы процесса с PID 12345
strace -p 12345

# Установить низкий приоритет для процесса
renice -n 15 -p 12345

# Показать ограничения по ресурсам для текущего пользователя
ulimit -a


Совет: Используйте nice для управления приоритетами, а также ulimit для ограничения ресурсов, чтобы не исчерпать все доступные ресурсы на сервере.
Для эффективного мониторинга системы необходимо использовать различные инструменты для анализа нагрузки, использования дисков и памяти.

Пример:
# Показать статистику ввода-вывода каждую секунду
iostat -xz 1

# Показать статистику виртуальной памяти
vmstat 2

# Показать ошибки системы
sysstat -e


Совет: Настройте sysstat для логирования и анализа производительности в долгосрочной перспективе.
Поиск и замена текста с использованием sed

Задача:
У вас есть файл report.txt, содержащий несколько строк с адресами электронной почты. Необходимо заменить все старые домены (например, old-domain.com) на новый (например, new-domain.com).

Решение:

1. Используйте команду sed для замены старого домена на новый:
sed -i 's/old-domain.com/new-domain.com/g' report.txt

Параметры:
-iизменяет файл на месте.
s/old-domain.com/new-domain.com/gзаменяет все вхождения старого домена на новый.

2. Проверка результата:
cat report.txt
__________
Теперь все старые адреса были заменены на новые.
Чтобы эффективно управлять сетью, необходимо понимать, как работать с такими инструментами, как netstat, ss, и tcpdump, а также использовать более сложные инструменты безопасности, например, iptables.

Пример:
# Показать все открытые порты
ss -tuln

# Разрешить подключение по SSH
iptables -A INPUT -p tcp --dport 22 -j ACCEPT

# Захват пакетов на порту 80
tcpdump -i eth0 port 80


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

Полный обзор статуса файла в файловой системе предоставляет команда stat, к примеру

stat some_file

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

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

find / -name core | tee log_file | wc -l

выводит найденные путевые имена файлов core и результат подсчета их количества.

Часто работа конвейера с командой tee, выводящей результаты и в файл, и в окно терминала (для проверки), занимает много времени. Вы можете понаблюдать за первыми результатами, чтобы убедиться в том, что все работает как надо, а затем смело уходите: результаты сохранятся в файле.
Команда для перезагрузки reboot отличается от более функциональной команды shutdown тем, что последняя позволяет более мягко завершать работу операционной системы, вызывая для этого системные и локальные гс.d-скрипты с параметром stop.

При выполнении команды reboot данные гс.d-скрипты не выполняются, и ресурсоемкие процессы просто не успевают сохранить свои данные.
Команда gio trash отправит файлы в корзину. Он предустановлен во многих операционных системах Linux и является преемником gvfsd-trash.

Важно помнить, что gio trash отправляет файлы в ~/.local/share/Trash/files вместо ~/.trash.

Каталог .local/share/Trash включает в себя три каталога:
info — хранит исходное местоположение удаленных файлов и время удаления.
files — хранит удаленные файлы до тех пор, пока он не будет очищен.
expunged — может временно содержать недавно очищенную корзину.
Отображения дерева зависимостей динамических библиотек

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

lddtree отображает иерархическую структуру зависимостей, что облегчает понимание взаимосвязей между библиотеками.

Чтобы увидеть дерево зависимостей для программы /bin/ls. В этом случае команда будет выглядеть следующим образом:
lddtree /bin/ls

Если у вас ещё не установлен pax-utils, который включает в себя lddtree, вы можете установить его с помощью менеджера пакетов:
Debian или Ubuntu:
sudo apt-get update
sudo apt-get install pax-utils
Fedora:
sudo dnf install pax-utils
Расстановка приоритетов 

Не всегда нужно убивать процесс (по необходимости), особенно если он является частью критически важного сервиса

По умолчанию новому процессу присваивается нейтральное значение nice, равное 0, которое вручную можно изменять на число от -20 до 19

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

Пример запуска скрипта с уступающим приоритетом:
nice -17 /var/scripts/some_script.sh

При возникновении конфликта из-за доступа к ресурсам, ваш сценарий будет отложен, но в противном случае он будет использовать все, что доступно.

Пример с отрицательным значением, когда скрипт нужно выполнить, как можно скорее:
nice --17 /var/scripts/some_script.sh

Можно изменить поведение уже работающего процесса, например с PID = 777
renice 17 -р 777  или renice -17 -р 777

В top значение nice показывается в столбце NI