Команда ld
ld (linker) используется для связывания объектных файлов и создания исполняемых файлов или динамических библиотек.
Примеры использования команды ld:
1. Создание исполняемого файла:
Эта команда связывает объектные файлы
2. Создание динамической библиотеки:
Эта команда связывает объектные файлы
3. Указание точки входа:
Эта команда связывает объектные файлы
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.so3. Указание точки входа:
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
Измеряем скорость записи:
Команда создаст файл testfile размером 1000 МБ, заполненный нулями, и измерит скорость записи данных в этот файл.
Измеряем скорость чтения:
Команда прочитает содержимое файла testfile и измерит скорость чтения данных из него.
Измеряем скорость записи:
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 на сервер:
2. Настройте Google Authenticator для пользователя:
Следуйте инструкциям, чтобы сгенерировать QR-код и связать его с вашим мобильным устройством. После этого сканируйте QR-код в приложении Google Authenticator.
3. Откройте файл конфигурации SSH:
Найдите и измените следующие строки:
4. Настройте PAM (Pluggable Authentication Modules) для двухфакторной аутентификации. Откройте файл
5. Перезапустите SSH-сервис:
__________
Теперь для подключения нужно будет использовать SSH-ключ и вводить временный код из приложения Google Authenticator.
Задача:
Настройте сервер SSH, чтобы он использовал двухфакторную аутентификацию: сначала SSH-ключи, затем временные коды из Google Authenticator.
Решение:
1. Установите Google Authenticator на сервер:
sudo apt install libpam-google-authenticator2. Настройте Google Authenticator для пользователя:
google-authenticatorСледуйте инструкциям, чтобы сгенерировать QR-код и связать его с вашим мобильным устройством. После этого сканируйте QR-код в приложении Google Authenticator.
3. Откройте файл конфигурации SSH:
sudo nano /etc/ssh/sshd_configНайдите и измените следующие строки:
ChallengeResponseAuthentication yes
PasswordAuthentication no4. Настройте PAM (Pluggable Authentication Modules) для двухфакторной аутентификации. Откройте файл
/etc/pam.d/sshd и добавьте:auth required pam_google_authenticator.so5. Перезапустите SSH-сервис:
sudo systemctl restart sshd__________
Теперь для подключения нужно будет использовать SSH-ключ и вводить временный код из приложения Google Authenticator.
Реализация логирования и мониторинга процессов с помощью syslog и journalctl
Задача:
Настройте централизованное логирование для отслеживания ошибок приложений и мониторинга с помощью syslog и journalctl.
Решение:
1. Для начала убедитесь, что
2. Перезапустите службу rsyslog:
3. Настройте приложение на запись в системный журнал. В вашем приложении добавьте код для логирования:
4. Для мониторинга журналов используйте команду
Чтобы следить за реальными логами, используйте:
5. Просмотрите логи для определенных приложений:
__________
Теперь ваше приложение будет записывать логи в системный журнал, и вы сможете следить за ними с помощью
Задача:
Настройте централизованное логирование для отслеживания ошибок приложений и мониторинга с помощью syslog и journalctl.
Решение:
1. Для начала убедитесь, что
rsyslog и journalctl настроены для ведения журналов. Откройте файл /etc/rsyslog.conf и добавьте строки для централизованного логирования:*.* @your_log_server_ip:5142. Перезапустите службу rsyslog:
sudo systemctl restart rsyslog3. Настройте приложение на запись в системный журнал. В вашем приложении добавьте код для логирования:
import logging
import syslog
syslog.syslog(syslog.LOG_INFO, "This is a log message")4. Для мониторинга журналов используйте команду
journalctl:sudo journalctl -u your_serviceЧтобы следить за реальными логами, используйте:
sudo journalctl -f5. Просмотрите логи для определенных приложений:
sudo journalctl -u apache2__________
Теперь ваше приложение будет записывать логи в системный журнал, и вы сможете следить за ними с помощью
journalctl.Настройка и управление правами пользователей и групп на сервере
Задача:
Создайте несколько пользователей и назначьте им доступ к различным каталогам с использованием групп. Используйте команду chown и chmod для управления правами.
Решение:
1. Создайте два пользователя:
2. Создайте группу
3. Добавьте пользователей в эту группу:
4. Создайте директорию и установите на неё права доступа только для группы:
5. Проверьте права:
__________
Теперь только пользователи из группы
Задача:
Создайте несколько пользователей и назначьте им доступ к различным каталогам с использованием групп. Используйте команду chown и chmod для управления правами.
Решение:
1. Создайте два пользователя:
sudo useradd user1
sudo useradd user22. Создайте группу
devgroup:sudo groupadd devgroup3. Добавьте пользователей в эту группу:
sudo usermod -aG devgroup user1
sudo usermod -aG devgroup user24. Создайте директорию и установите на неё права доступа только для группы:
sudo mkdir /home/devgroup
sudo chown :devgroup /home/devgroup
sudo chmod 770 /home/devgroup5. Проверьте права:
ls -l /home__________
Теперь только пользователи из группы
devgroup могут иметь доступ к каталогу /home/devgroup.Мониторинг сетевого трафика с помощью iftop
Задача:
Используйте iftop для мониторинга входящего и исходящего сетевого трафика в реальном времени.
Решение:
1. Установите iftop:
2. Запустите iftop для мониторинга трафика:
__________
В интерфейсе вы увидите список всех активных подключений и их скорость передачи данных.
Задача:
Используйте iftop для мониторинга входящего и исходящего сетевого трафика в реальном времени.
Решение:
1. Установите iftop:
sudo apt install iftop2. Запустите iftop для мониторинга трафика:
sudo iftop__________
В интерфейсе вы увидите список всех активных подключений и их скорость передачи данных.
Поиск строк в файле с использованием grep
Задача:
Необходимо найти все строки, содержащие слово "
Решение:
1. Используем команду grep для поиска строк с ошибками:
Параметры:
•
•
2. Проверка содержимого
__________
Теперь у вас есть файл, содержащий только строки с ошибками.
Задача:
Необходимо найти все строки, содержащие слово "
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:
2. Разрешите подключение по SSH:
3. Ограничьте доступ к SSH только с определенного IP-адреса:
4. Проверьте статус:
__________
Теперь только указанный IP-адрес может подключаться по SSH.
Задача:
Настройте брандмауэр с помощью ufw, чтобы разрешить доступ к SSH только с определенного IP-адреса.
Решение:
1. Установите и активируйте ufw:
sudo apt install ufw
sudo ufw enable2. Разрешите подключение по SSH:
sudo ufw allow ssh3. Ограничьте доступ к SSH только с определенного IP-адреса:
sudo ufw allow from <your_ip_address> to any port 224. Проверьте статус:
sudo ufw status__________
Теперь только указанный IP-адрес может подключаться по SSH.
Отображение зависимостей
С помощью команды
Основной синтаксис команды
Чтобы увидеть список динамических библиотек, необходимых для работы команды /bin/ls, нужно выполнить команду:
ldd имеет несколько опций, которые могут изменить его поведение:
С помощью команды
ldd можно отобразить список динамических библиотек, необходимых для работы вашей программы. Она помогает выявлять отсутствующие зависимости и решать проблемы совместимости.Основной синтаксис команды
ldd выглядит следующим образом:ldd [опция]... [файл]...Чтобы увидеть список динамических библиотек, необходимых для работы команды /bin/ls, нужно выполнить команду:
ldd /bin/lsldd имеет несколько опций, которые могут изменить его поведение:
--version: Показать версию ldd.--verbose: Вывести всю информацию, включая информацию о версиях символов.--help: Показать справочное сообщение и выйти.Выбор столбцов из файла с использованием cut
Задача:
У вас есть файл CSV с данными о пользователях (
Решение:
1. Пример содержимого
2. Используем команду
Параметры:
•
•
3. Результат:
__________
Теперь у вас есть только имена и электронные адреса пользователей.
Задача:
У вас есть файл 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,402. Используем команду
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 для анализа данных в столбцах
Задача:
У вас есть файл с данными о продажах (
Решение:
1. Пример содержимого sales_data.txt
2. Используем команду awk для подсчета общей суммы:
Параметры:
•
•
•
3. Результат:
__________
Теперь у вас есть общая сумма продаж за все дни.
Задача:
У вас есть файл с данными о продажах (
sales_data.txt), где в первом столбце указана дата, а в последнем — сумма продажи. Необходимо вычислить общую сумму продаж за все дни.Решение:
1. Пример содержимого sales_data.txt
2021-01-01,Product1,100
2021-01-02,Product2,150
2021-01-03,Product3,2002. Используем команду 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 процессы могут быть не только запущены, но и контролируемы на уровне блокировок, изменения приоритетов, а также контроля за использованием памяти.
Пример:
Совет: Используйте nice для управления приоритетами, а также ulimit для ограничения ресурсов, чтобы не исчерпать все доступные ресурсы на сервере.
Пример:
# Отследить системные вызовы процесса с PID 12345
strace -p 12345
# Установить низкий приоритет для процесса
renice -n 15 -p 12345
# Показать ограничения по ресурсам для текущего пользователя
ulimit -a
Совет: Используйте nice для управления приоритетами, а также ulimit для ограничения ресурсов, чтобы не исчерпать все доступные ресурсы на сервере.
Для эффективного мониторинга системы необходимо использовать различные инструменты для анализа нагрузки, использования дисков и памяти.
Пример:
Совет: Настройте sysstat для логирования и анализа производительности в долгосрочной перспективе.
Пример:
# Показать статистику ввода-вывода каждую секунду
iostat -xz 1
# Показать статистику виртуальной памяти
vmstat 2
# Показать ошибки системы
sysstat -e
Совет: Настройте sysstat для логирования и анализа производительности в долгосрочной перспективе.
Поиск и замена текста с использованием sed
Задача:
У вас есть файл
Решение:
1. Используйте команду sed для замены старого домена на новый:
Параметры:
•
•
2. Проверка результата:
__________
Теперь все старые адреса были заменены на новые.
Задача:
У вас есть файл
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.
Пример:
Совет: iptables позволяет не только фильтровать пакеты, но и строить сложные сетевые политики безопасности. Использование tcpdump поможет вам выявить подозрительные пакеты.
Пример:
# Показать все открытые порты
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 будет показано почти все, что можно узнать о рассматриваемом файле, вплоть до старшего и младшего номеров устройства, на котором хранится файл.Командный конвейер, как правило, действует прямолинейно, но зачастую полезно распараллелить поток данных.
Это можно сделать с помощью команды
выводит найденные путевые имена файлов core и результат подсчета их количества.
Часто работа конвейера с командой
Это можно сделать с помощью команды
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 отображает иерархическую структуру зависимостей, что облегчает понимание взаимосвязей между библиотеками.
Чтобы увидеть дерево зависимостей для программы /bin/ls. В этом случае команда будет выглядеть следующим образом:
Если у вас ещё не установлен pax-utils, который включает в себя lddtree, вы можете установить его с помощью менеджера пакетов:
Debian или Ubuntu:
Команда
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Расстановка приоритетов
Не всегда нужно убивать процесс (по необходимости), особенно если он является частью критически важного сервиса
По умолчанию новому процессу присваивается нейтральное значение
Чем выше число, тем более покладистым будет процесс, когда дело доходит до отказа от ресурсов в пользу других. И наоборот, чем меньше число, тем больше ресурсов захватывает процесс, несмотря на другие.
Пример запуска скрипта с уступающим приоритетом:
При возникновении конфликта из-за доступа к ресурсам, ваш сценарий будет отложен, но в противном случае он будет использовать все, что доступно.
Пример с отрицательным значением, когда скрипт нужно выполнить, как можно скорее:
Можно изменить поведение уже работающего процесса, например с PID = 777
В
Не всегда нужно убивать процесс (по необходимости), особенно если он является частью критически важного сервиса
По умолчанию новому процессу присваивается нейтральное значение
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