Форум русскоязычного сообщества Ubuntu


Получить помощь и пообщаться с другими пользователями Ubuntu можно
на irc канале #ubuntu-ru в сети Freenode
и в Jabber конференции ubuntu@conference.jabber.ru

Автор Тема: Задача которую неделю не могу решить.  (Прочитано 780448 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн StreetWorld

  • Автор темы
  • Новичок
  • *
  • Сообщений: 11
    • Просмотр профиля
Здравствуйте! :coolsmiley:

В качестве обучения дали задачу на написание скрипта.
Я всё ни как не могу понять, как выполнить шаг связанный с получением данных из /var/log/syslog и /var/log/boot.log.

Задание:
         Записать первые 10 строк из файла /var/log/syslog в файл .../home/q/0.txt (например)
         Записать последние 30 строк из файла /var/log/boot.log в фай  .../home/q/0.txt (например)
         Найти в файле /var/log/syslog строки в которых есть ключ "error" и записать найденные строки в фай  .../home/q/0.txt (наприм)

Условие:
         Все действия должны выполняться из-под обычного пользователя.
         Запрещается использовать sudo.
         Менять права файлов "syslog" и "boot.log" запрещается.
         Для "syslog" получение инфы через "journalctl" не допускается (говорят нужно использовать иной способ).
         
Права доступа у файлов:
         -rw-r----- 1 syslog adm 47122788 апр 20 00:17 /var/log/syslog
         -rw------- 1 root root 0 апр 20 00:00 /var/log/boot.log

Система:
         Ubuntu 22.04.4

Какие есть варианты решения задачи?

Оффлайн Usermaster

  • СуперМодератор
  • Старожил
  • *
  • Сообщений: 2623
    • Просмотр профиля
Re: Задача которую неделю не могу решить.
« Ответ #1 : 19 Апреля 2024, 19:41:12 »
Я всё ни как не могу понять, как выполнить шаг связанный с получением данных из /var/log/syslog и /var/log/boot.log.
Ты и не пытался, ты здесь только условия задачи выдал.
А своих попыток ни одной не выдал.

Записать первые 10 строк из файла /var/log/syslog в файл .../home/q/0.txt (например)
sed -n 1,10p /var/log/syslog > dvoeshnik_ty.txt
Найти в файле /var/log/syslog строки в которых есть ключ "error" и записать найденные строки в фай  .../home/q/0.txt (наприм)
cat /var/log/syslog | grep -i error > dvoeshnik_ty.txtИли так
grep -i error /var/log/syslog > dvoeshnik_ty.txt :2funny:
echo Поставьте мне тройку! Клянусь никогда не учиться на программиста! > prepodu.txt
Намёк дал а дальше сам додумывай. Всю домашку я за тебя делать не буду.
« Последнее редактирование: 19 Апреля 2024, 20:01:18 от Usermaster »
А чего это вы тут делаете, а?

Оффлайн StreetWorld

  • Автор темы
  • Новичок
  • *
  • Сообщений: 11
    • Просмотр профиля
Re: Задача которую неделю не могу решить.
« Ответ #2 : 19 Апреля 2024, 20:20:55 »
А своих попыток ни одной не выдал.

Извиняюсь, вот часть команд которые попробовал ввести

cat /var/log/boot.log                                           cat /var/log/syslog | egrep -i "(error|fail|warning)"

less /var/log/boot.log                                          dd if=/var/log/syslog of=/home/q/1/9/b.txt bs=1 count=10 2>/dev/null

tail (-f) /var/log/boot.log                                     od -A n -t c -N 10 /var/log/syslog

head -n /var/log/boot.log                                       hexdump -n 10 -C /var/log/syslog | cut -c 11- | sed 's/^[ \t]*//'                   

grep "pattern" /var/log/boot.log                                hexdump -n 10 -C /var/log/syslog
 
awk '/pattern/ {print}' /var/log/boot.log                       dd if=/var/log/syslog bs=1 count=10 2>/dev/null

sed -n '/pattern/p' /var/log/boot.log                           awk 'NR<=10' /var/log/syslog > ~/1/9/b.txt

vi /var/log/boot.log                                            sed '10q' /var/log/syslog > ~/1/9/b.txt

strings /var/log/boot.log                                       cp /var/log/syslog ~/1/9/b.txt

more /var/log/boot.log                                          dd if=/var/log/syslog bs=1 count=40240 2>/dev/null > ~/1/9/b.txt     

strings /var/log/boot.log                                       cat /var/log/syslog | head -n 10 > ~/1/9/b2.txt

vi /var/log/boot.log                                            tail -n $(($(wc -l < /var/log/syslog) - 9)) /var/log/syslog                         
 
tail -n +1 /var/log/syslog | head -n 10                         zcat /var/log/syslog                                                     

gzip: /var/log/syslog: Permission denied

Остальные команды подобны.

При использовании команд выдавалась ошибка:
                                            Отказ в доступе.
 
Но вот в условии сказано, что производить все действия без sudo через обычного пользователя.
 
« Последнее редактирование: 19 Апреля 2024, 20:23:27 от StreetWorld »

Оффлайн Usermaster

  • СуперМодератор
  • Старожил
  • *
  • Сообщений: 2623
    • Просмотр профиля
Re: Задача которую неделю не могу решить.
« Ответ #3 : 19 Апреля 2024, 20:30:54 »
boot.log ты не прочитаешь без прав root.

ls -lh /var/log/ | grep boot.log
-rw-------  1 root              root               0 апр 19 17:54 boot.log
-rw-------  1 root              root             28K апр 19 17:54 boot.log.1
-rw-------  1 root              root            1,7K апр 13 00:00 boot.log.2
-rw-------  1 root              root            9,6K апр 12 18:13 boot.log.3
-rw-------  1 root              root             17K апр  6 11:40 boot.log.4
-rw-------  1 root              root             11K апр  5 18:33 boot.log.5
-rw-------  1 root              root            8,5K мар 31 10:57 boot.log.6
-rw-------  1 root              root            9,6K мар 29 17:21 boot.log.7
« Последнее редактирование: 19 Апреля 2024, 20:32:34 от Usermaster »
А чего это вы тут делаете, а?

Оффлайн StreetWorld

  • Автор темы
  • Новичок
  • *
  • Сообщений: 11
    • Просмотр профиля
Re: Задача которую неделю не могу решить.
« Ответ #4 : 20 Апреля 2024, 02:34:22 »

boot.log ты не прочитаешь без прав root.

а с syslog тоже получается так просто не прочту и не достану информацию? =(

я  действительно кучу способов перебрал, самый единственный более менее рабочий, это journalctl.
Но руководитель пояснил, что данные с syslog можно получить и другим способом, другими командами.
Я не могу найти эти команды не используя sudo.

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



Оффлайн Usermaster

  • СуперМодератор
  • Старожил
  • *
  • Сообщений: 2623
    • Просмотр профиля
Re: Задача которую неделю не могу решить.
« Ответ #5 : 20 Апреля 2024, 02:48:03 »
-rw-r-----  1 syslog            adm             537K апр 20 02:38 syslog
Если пользователь в имеет прва sudo то и без комманды sudo можно прочитать, ключ r во второй группе.
Если не имеет прва sudo то не прочитает.
А чего это вы тут делаете, а?

Оффлайн andrei94

  • Новичок
  • *
  • Сообщений: 25
    • Просмотр профиля
Re: Задача которую неделю не могу решить.
« Ответ #6 : 20 Апреля 2024, 05:23:46 »
по этой причине, я создал тему, чтоб узнать у компетентных людей ответ на сложную для меня задачу.
ChatGPT, Gemini

Оффлайн Peter_I

  • Старожил
  • *
  • Сообщений: 3037
    • Просмотр профиля
Re: Задача которую неделю не могу решить.
« Ответ #7 : 20 Апреля 2024, 12:06:04 »
А не получится с помощью uucp скопировать /var/log/boot.log на другую систему на раздел в FAT?
Пётр.

Оффлайн StreetWorld

  • Автор темы
  • Новичок
  • *
  • Сообщений: 11
    • Просмотр профиля
Re: Задача которую неделю не могу решить.
« Ответ #8 : 20 Апреля 2024, 13:30:48 »
Здравствуй!

я вёл команду,  что б узнать хост
hostname --fqdn
xxx.myguest.virtualbox.org

потом ввёл такую команду
uucp /var/log/boot.log q@xxx.myguest.virtualbox.org:/media/flashdrive/

и в итоге ошибка: нет разрешений на доступ к файлу.



Оффлайн F12

  • Администратор
  • Старожил
  • *
  • Сообщений: 4510
    • Просмотр профиля
Re: Задача которую неделю не могу решить.
« Ответ #9 : 20 Апреля 2024, 13:34:47 »
Но руководитель пояснил, что данные с syslog можно получить и другим способом, другими командами.
- и что, на лекциях про этот другой способ ничего не рассказывали?  :)

Оффлайн StreetWorld

  • Автор темы
  • Новичок
  • *
  • Сообщений: 11
    • Просмотр профиля
Re: Задача которую неделю не могу решить.
« Ответ #10 : 20 Апреля 2024, 14:11:16 »
- и что, на лекциях про этот другой способ ничего не рассказывали?
Нет, это была не лекция.
У меня сейчас этап погружения в рабочий процесс
Хотя я обычный ручной тестер, но в компании есть требования касаемо линукса.
Дали задание, я его должен решить.
Вот и решаю =))


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

         -rw-r----- 1 syslog adm 47122788 апр 20 00:17 /var/log/syslog
         -rw------- 1 root root 0 апр 20 00:00 /var/log/boot.log

Это получается, что где-то есть ы системе "копия" этого файла?

как мне найти её?

Использовал команду:         
                             find / -samefile /var/log/syslog 2>/dev/null 
                             find / -inum "$(stat -c '%i' /var/log/boot.log)" 2>/dev/null
                             find / -inum "$(stat -c '%i' /var/log/boot.log)" 2>/dev/null
         
результат: /var/log/syslog




« Последнее редактирование: 20 Апреля 2024, 14:13:18 от StreetWorld »

Оффлайн ALiEN

  • Администратор
  • Старожил
  • *
  • Сообщений: 6767
  • 20% Cooler
    • Просмотр профиля
Re: Задача которую неделю не могу решить.
« Ответ #11 : 20 Апреля 2024, 15:00:56 »
Это получается, что где-то есть ы системе "копия" этого файла?
Нет. Для файла 1 - Это и есть этот файл.

Пользователь добавил сообщение 20 Апреля 2024, 15:03:09:
   -rw-r----- 1 syslog adm 47122788 апр 20 00:17 /var/log/syslog
         -rw------- 1 root root 0 апр 20 00:00 /var/log/boot.log

Эти файлы вы не прочитаете без повышения привилегий пользователя,
Для первого пользователь должен хотя-бы состоять в группе adm.
Второй может прочесть только root. Без вариантов.

А задачу и условия вы дословно скопировали? Мне кажется, что что-то недописано или изменено.
« Последнее редактирование: 20 Апреля 2024, 15:15:36 от ALiEN »
🖥 AsRock B550M Pro4 :: AMD Ryzen 5 3600 :: 16 GB DDR4 :: AMD Radeon RX 6600 :: XFCE
💻 ACER 5750G :: Intel Core i5-2450M :: 6 GB DDR3 :: GeForce GT 630M :: XFCE

Оффлайн StreetWorld

  • Автор темы
  • Новичок
  • *
  • Сообщений: 11
    • Просмотр профиля
Re: Задача которую неделю не могу решить.
« Ответ #12 : 20 Апреля 2024, 15:53:55 »
Спасибо вам за ответ

А задачу и условия вы дословно скопировали? Мне кажется, что что-то не дописано или изменено.

Вот полный тест задания



Задание:

Необходимо подготовить BASH скрипт, в котором будут выполняться:

1.1 Создать директорию с именем 180424 в домашней директории пользователя
1.2 Создать внутри директории файл с именем пользователя и расширением TXT
1.3 Получить текущую системную дату и время и записать в файл из п.1.2 в формате:
Задание 1 - дата и время
1.4 Создать символическую ссылку на уровень выше файла
1.5 Записать имя символической ссылки в файл из п.1.2 в формате:
Задание 2 - имя символической ссылки
1.6 Создать жесткую ссылку на уровень выше файла
1.7 Записать имя жесткой ссылки в файл из п.1.2 в формате:
Задание 3 - имя жесткой ссылки
1.8 Записать первые 10 строк из файла /var/log/syslog в файл из п.1.2 в формате:
Задание 4 - первые 10 строк из файла /var/log/syslog
1.9 Записать последние 30 строк из файла /var/log/boot.log в файл из п.1.2 в формате:
Задание 5 - первые 30 строк из файла /var/log/boot.log
1.20 Найти в файле /var/log/syslog строки в которых есть ключ "error" и записать найденные строки в файл из п.1.2 в формате (если по ключу ничего не найдено, то в файл пишем фразу "Ничего не найдено"):
Задание 6 - найденные строки из файла /var/log/syslog
1.21 Создать в домашней директории пользователя папку с именем 190424
1.22 Создать в папке с именем 190424 1 файл с размером от 1 Мб и именем QWERTY
1.23 Дописать содержимое текстового файла QWERTY в конец файл из п.1.2
1.24 Разбить текстовый файл из п.1.2 на несколько файлов по 10 строк в каждом
1.25 Установить максимальные права доступа на файл из п.1.2 (Каждый пользователь может читать, редактировать и запускать на выполнение)
1.26 Удалить 50-ю строку файла из п.1.2
1.27 Вывести текущие активные процессы, взять идентификатор первого и записать в файл из п.1.2 в формате:
Задание 7 - идентификатор первого процесса
1.28 Записать в файл из п.1.2 конфигурацию сетевого интерфейса в формате:
Задание 8 - конфигурация сетевого интерфейса
1.29 Записать в файл из п.1.2 используемую версию ядра в формате:
Задание 9 - используемая версия ядра
1.30 Конвертировать содержимое тестового файла из п.1.2 в html-файл mytest.html
Скрипт должен запускаться автоматически 1 раз в час в течение суток.




Вот как я выполнил задание


#!/bin/bash

# Создаем файл лога
log_file="/home/q/1/9/log.txt"

# Отслеживаем выполнение команд и записываем вывод

{

# Включить трассировку на каждый шаг
#set -x

# 1.1 Создать директорию с именем 180424 в домашней директории пользователя
mkdir -p ~/180424

# 1.2 Создать внутри директории файл с именем пользователя и расширением TXT
touch ~/180424/$(whoami).txt

# 1.3 Получить текущую системную дату и время и записать в файл
echo "***" >> ~/180424/$(whoami).txt
echo "╔═══════════════════════════════════════════════════╗" >> ~/180424/$(whoami).txt
echo "║Задание 1 - $(date)            ║" > ~/180424/$(whoami).txt
echo "╚═══════════════════════════════════════════════════╝" >> ~/180424/$(whoami).txt

# 1.4 Создать символическую ссылку на уровень выше файла
ln -sf $(dirname ~/180424/$(whoami).txt) ~/180424/symlink

# 1.5 Записать имя символической ссылки в файл
echo "╔═══════════════════╗" >> ~/180424/$(whoami).txt
echo "║Задание 2 - symlink║" >> ~/180424/$(whoami).txt
echo "╚═══════════════════╝" >> ~/180424/$(whoami).txt

# 1.6 Создать жесткую ссылку на уровень выше файла
ln -f ~/180424/$(whoami).txt ~/180424/hardlink.txt

# 1.7 Записать имя жесткой ссылки в файл
echo "╔════════════════════╗" >> ~/180424/$(whoami).txt
echo "║Задание 3 - hardlink║" >> ~/180424/$(whoami).txt
echo "╚════════════════════╝" >> ~/180424/$(whoami).txt

# 1.8 Записать первые 10 строк из файла /var/log/syslog в файл
echo "╔═══════════════════════════════════════════════════╗" >> ~/180424/$(whoami).txt
echo "║Задание 4 - первые 10 записей из системного журнала║🚀" >> ~/180424/$(whoami).txt
echo "╚═══════════════════════════════════════════════════╝" >> ~/180424/$(whoami).txt
journalctl -n 10 >> ~/180424/$(whoami).txt

# 1.9 Записать последние 30 строк из файла /var/log/boot.log в файл
echo "╔══════════════════════════════════════════════════╗" >> ~/180424/$(whoami).txt
echo "║Задание 5 - последние 30 строк из журнала загрузки║🚀" >> ~/180424/$(whoami).txt
echo "╚══════════════════════════════════════════════════╝" >> ~/180424/$(whoami).txt
journalctl -b -n 30 >> ~/180424/$(whoami).txt

# 1.20 Найти в файле /var/log/syslog строки с ключом "error" и записать в файл
echo "╔══════════════════════════════════════════════════╗" >> ~/180424/$(whoami).txt
echo "║Задание 6 - найденные строки из системного журнала║🚀" >> ~/180424/$(whoami).txt
echo "╚══════════════════════════════════════════════════╝" >> ~/180424/$(whoami).txt
journalctl | grep "error" >> ~/180424/$(whoami).txt

# 1.21 Создать в домашней директории пользователя папку с именем 190424
mkdir -p ~/190424

# 1.22 Создать в папке с именем 190424 файл с размером от 1 Мб и именем QWERTY
dd if=/home/q/1/0/1mb.txt of=~/190424/QWERTY bs=1M count=1

#1.23 Дописать содержимое текстового файла QWERTY в конец файл из п.1.2
echo " " >> ~/180424/$(whoami).txt
echo "╔═════════════════════╗" >> ~/180424/$(whoami).txt
echo "║Текст файла "QWERTY"   ║" >> ~/180424/$(whoami).txt
echo "╚═════════════════════╝" >> ~/180424/$(whoami).txt
cat ~/190424/QWERTY >> ~/180424/$(whoami).txt
echo " " >> ~/180424/$(whoami).txt

# 1.24 Разбить текстовый файл из п.1.2 на несколько файлов по 10 строк в каждом
split -l 10 -d -a 3 ~/180424/$(whoami).txt ~/180424/split_


# 1.26 Удалить 50-ю строку файла из п.1.2
sed -i '50d' ~/180424/$(whoami).txt

# 1.27 Вывести текущие активные процессы, взять идентификатор первого и записать в файл
echo "╔══════════════════════════════════════════╗" >> ~/180424/$(whoami).txt
echo "║Задание 7 - идентификатор первого процесса║" >> ~/180424/$(whoami).txt
echo "╚══════════════════════════════════════════╝" >> ~/180424/$(whoami).txt
top -n 1 -b | sed -n '8p' | awk '{print $1}' >> ~/180424/$(whoami).txt

# 1.28 Записать в файл конфигурацию сетевого интерфейса
echo "╔════════════════════════════════════════════╗" >> ~/180424/$(whoami).txt
echo "║Задание 8 - конфигурация сетевого интерфейса║" >> ~/180424/$(whoami).txt
echo "╚════════════════════════════════════════════╝" >> ~/180424/$(whoami).txt
ifconfig >> ~/180424/$(whoami).txt 2>/dev/null

# 1.29 Записать в файл используемую версию ядра
echo "╔════════════════════════════════════╗" >> ~/180424/$(whoami).txt
echo "║Задание 9 - используемая версия ядра║" >> ~/180424/$(whoami).txt
echo "╚════════════════════════════════════╝" >> ~/180424/$(whoami).txt
if [ -f /proc/version ]; then
cat /proc/version >> ~/180424/$(whoami).txt 2>/dev/null
else
echo "Файл /proc/version недоступен" >> ~/180424/$(whoami).txt
fi

1.30 Конвертировать содержимое текстового файла в html-файл

# на этом этапе внутри файла "m.html" текст становится не читаемым
txt2html /home/q/180424/q.txt > /home/q/180424/m.html




# 1.32 Создание файла con.py
touch /home/q/180424/con.py


# 1.34 Добавляем текст в файл
CON_PY_FILE="/home/q/180424/con.py"

# Удаление существующего файла, если таковой уже существует
rm -f "$CON_PY_FILE"

# Строки скрипта
SCRIPT_LINES=(
    "from bs4 import BeautifulSoup"
    ""
    "# Пути к файлам"
    "input_file = \"/home/q/180424/q.txt\""
    "html_output_file = \"/home/q/180424/mytest.html\""
    ""
    "try:"
    "    # Чтение содержимого файла"
    "    with open(input_file, 'r', encoding='utf-8', errors='ignore') as f:"
    "        content = f.read()"
    ""
    "    # Генерация HTML-кода с использованием BeautifulSoup"
    "    soup = BeautifulSoup(\"<!DOCTYPE html><html><head><title>My Test</title></head><body></body></html>\", 'html.parser')"
    "    body_tag = soup.body"
    "    body_tag.append(BeautifulSoup(f\"<pre>{content}</pre>\", 'html.parser'))"
    ""
    "    # Запись HTML-кода в файл"
    "    with open(html_output_file, 'w', encoding='utf-8') as f:"
    "        f.write(str(soup))"
    ""
    "    print(\"Файл успешно сконвертирован в HTML и сохранен как\", html_output_file)"
    ""
    "except Exception as e:"
    "    print(\"Ошибка при конвертации файла:\", e)"
)

# Запись строк скрипта в файл con.py
for line in "${SCRIPT_LINES[@]}"; do
    echo "$line" >> "$CON_PY_FILE"
done

# Изменение прав доступа
chmod +x "$CON_PY_FILE"

# Запуск скрипта
python3 "$CON_PY_FILE"


# Строка, которую нужно добавить в crontab
cron_line="0 * 28 4 * /home/q/1/0/script.sh"

# Добавление строки в файл crontab
echo "$cron_line" >> /tmp/crontab.tmp

# Установка нового crontab из временного файла
crontab /tmp/crontab.tmp

# Удаление временного файла
rm /tmp/crontab.tmp



} > "$log_file"




Оффлайн ALiEN

  • Администратор
  • Старожил
  • *
  • Сообщений: 6767
  • 20% Cooler
    • Просмотр профиля
Re: Задача которую неделю не могу решить.
« Ответ #13 : 20 Апреля 2024, 16:26:20 »
Вот полный тест задания
Все простенькие задачки. Вряд ли нужно как-то хакать права в системе.
Не указано, какую версию ubuntu использовать. Права по-умолчанию могди и поменяться.

Например, раньше можно было использовать dmesg от обычного пользователя, сейчас на относительно новых ядрах - нельзя. Изменился параметр по-умолчанию CONFIG_SECURITY_DMESG_RESTRICT. Так что может быть, что на каких-то ранних версиях ubuntu у этих файлов и были права o=r.
🖥 AsRock B550M Pro4 :: AMD Ryzen 5 3600 :: 16 GB DDR4 :: AMD Radeon RX 6600 :: XFCE
💻 ACER 5750G :: Intel Core i5-2450M :: 6 GB DDR3 :: GeForce GT 630M :: XFCE

Оффлайн bezbo

  • Старожил
  • *
  • Сообщений: 1757
    • Просмотр профиля
Re: Задача которую неделю не могу решить.
« Ответ #14 : 20 Апреля 2024, 17:24:47 »
Необходимо подготовить BASH скрипт, в котором будут выполняться:
...
Записать последние 30 строк из файла /var/log/boot.log в файл из п.1.2 в формате:
Задание 5 - первые 30 строк из файла /var/log/boot.log
...

кто на ком стоял?

 

Страница сгенерирована за 0.058 секунд. Запросов: 25.