ΠŸΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠΎ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Ρƒ систСмных Π»ΠΎΠ³ΠΎΠ² lastlog, btmp, utmp ΠΈ wtmp Π½Π° использованиС SQLite

Π’ спискС рассылки linux-api выставлСно Π½Π° обсуТдСниС ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ (RFC) Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΠ΅ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹Π΅ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Ρ‹ систСмных ΠΆΡƒΡ€Π½Π°Π»ΠΎΠ² lastlog, btmp, utmp ΠΈ wtmp Π½Π° Π½ΠΎΠ²Ρ‹Π΅ раздСляСмыС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠ΅ SQLite Π² качСствС бэкСнда. Π˜Π½ΠΈΡ†ΠΈΠ°Ρ‚ΠΈΠ²Π° Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½Π° Π½Π° Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π½Π°ΠΊΠΎΠΏΠΈΠ²ΡˆΠΈΡ…ΡΡ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, срСди ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ 32-разрядных счётчиков Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π² 2038 Π³ΠΎΠ΄Ρƒ, отсутствиС Ρ€Π°ΡΡˆΠΈΡ€ΡΠ΅ΠΌΠΎΡΡ‚ΠΈ, низкая ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ запросов ΠΈ отсутствиС атомарности ΠΏΡ€ΠΈ записи.

Π’ настоящСС врСмя для хранСния Π΄Π°Π½Π½Ρ‹Ρ… ΠΎ сСансах ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ°Ρ… Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ Π² Linux ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹, ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠ΅ Ρ„ΠΈΠΊΡΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ структуру:

  • /var/log/lastlog β€” врСмя послСднСго Π²Ρ…ΠΎΠ΄Π° (структура Β«struct lastlogΒ» с ΠΏΠΎΠ»Π΅ΠΌ Β«ll_timeΒ» 32-разрядного Ρ‚ΠΈΠΏΠ° time_t);
  • /var/log/btmp β€” Π½Π΅ΡƒΠ΄Π°Ρ‡Π½Ρ‹Π΅ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠΈ Π²Ρ…ΠΎΠ΄Π°;
  • /var/run/utmp β€” Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠ΅ сСансы;
  • /var/log/wtmp β€” история Π²Ρ…ΠΎΠ΄ΠΎΠ² ΠΈ Π²Ρ‹Ρ…ΠΎΠ΄ΠΎΠ².

Π€ΠΎΡ€ΠΌΠ°Ρ‚ Π΄Π°Π½Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ² Π±Ρ‹Π» Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½ нСсколько дСсятилСтий Π½Π°Π·Π°Π΄ ΠΈ ΠΈΠΌΠ΅Π΅Ρ‚ ряд Ρ„ΡƒΠ½Π΄Π°ΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ:

  • ПолС Β«tv_secΒ» Π² структурС Β«utmpxΒ» ΠΈ ΠΏΠΎΠ»Π΅ Β«ll_timeΒ» Π² Β«lastlogΒ» ΠΈΠΌΠ΅ΡŽΡ‚ Ρ‚ΠΈΠΏ Β«int32_tΒ», Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ счётчиков Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π½Π° основС ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ пСрСполнится 19 января 2038 Π³ΠΎΠ΄Π°. Из-Π·Π° Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ ABI‑совмСстимости Π΄Π°ΠΆΠ΅ Π½Π° 64-разрядных систСмах эти поля ΠΎΡΡ‚Π°ΡŽΡ‚ΡΡ 32-разрядными, поэтому ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π·Π°Ρ‚Ρ€ΠΎΠ½Π΅Ρ‚ всС установки Linux.
  • Ѐиксированный Ρ€Π°Π·ΠΌΠ΅Ρ€ записСй Π½Π΅ позволяСт Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ Π½ΠΎΠ²Ρ‹Π΅ поля (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°, имя сСрвиса, IP-адрСс) Π±Π΅Π· ΠΏΠΎΠ»Π½ΠΎΠΉ Π·Π°ΠΌΠ΅Π½Ρ‹ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° ΠΈ пСрСкомпиляции всСх ΡƒΡ‚ΠΈΠ»ΠΈΡ‚.
  • Π£Ρ‚ΠΈΠ»ΠΈΡ‚Ρ‹ last, lastb, who ΠΈ lastlog Π²Ρ‹Π½ΡƒΠΆΠ΄Π΅Π½Ρ‹ Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π±ΠΈΡ€Π°Ρ‚ΡŒ содСрТимоС Ρ„Π°ΠΉΠ»ΠΎΠ². ΠŸΡ€ΠΈ большом Ρ€Π°Π·ΠΌΠ΅Ρ€Π΅ ΠΆΡƒΡ€Π½Π°Π»ΠΎΠ² Π±Π΅Π· использования индСксов, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΡ… эффСктивно Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ²Π°Ρ‚ΡŒ записи, Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠ° Π½Π° систСму Π²Π²ΠΎΠ΄Π°/Π²Ρ‹Π²ΠΎΠ΄Π° ΠΈ Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠΈ ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ запросов становятся Π½Π΅ΠΏΡ€ΠΈΠ΅ΠΌΠ»Π΅ΠΌΡ‹ΠΌΠΈ.
  • Π—Π°ΠΏΠΈΡΡŒ Π² Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» Π½Π΅ являСтся Π°Ρ‚ΠΎΠΌΠ°Ρ€Π½ΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠ΅ΠΉ. ΠŸΡ€ΠΈ сбоС запись ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ частично ΠΏΠΎΠ²Ρ€Π΅ΠΆΠ΄Π΅Π½Π°.
  • Для ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΎΠ² ΠΏΡ€ΠΈ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ записи Π² ΠΆΡƒΡ€Ρ‚Π°Π» нСсколькими процСссами (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, sshd ΠΈ login) ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ flock-Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΡŽΡ‚ Π°Ρ‚ΠΎΠΌΠ°Ρ€Π½ΠΎΡΡ‚ΡŒ ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΊ Π²Π·Π°ΠΈΠΌΠ½Ρ‹ΠΌ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ°ΠΌ.

Автор RFC ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΎΡ‚ΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ ΠΎΡ‚ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹Ρ… Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΎΠ² Π² ΠΏΠΎΠ»ΡŒΠ·Ρƒ спСциализированных раздСляСмых Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΡ… SQLite. Для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° ΠΆΡƒΡ€Π½Π°Π»ΠΎΠ² создаётся ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Π°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° с Π΅Π΄ΠΈΠ½ΠΎΠΎΠ±Ρ€Π°Π·Π½Ρ‹ΠΌ C-интСрфСйсом: liblastlog2, libbtmp2, libutmp2 ΠΈ libwtmp2. ВсС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ с Π‘Π”, схСма ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ 64-разрядныС Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΊΠΈ (Ρ‚ΠΈΠΏ INTEGER) ΠΈ индСксы ΠΏΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ ΠΈ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. Π˜ΠΌΠ΅Π΅Ρ‚ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ добавлСния Π½ΠΎΠ²Ρ‹Ρ… ΠΏΠΎΠ»Π΅ΠΉ Π±Π΅Π· Π½Π°Ρ€ΡƒΡˆΠ΅Π½ΠΈΡ совмСстимости (Ρ‡Π΅Ρ€Π΅Π· ALTER TABLE).

Π‘Ρ€Π΅Π΄ΠΈ Π΄ΠΎΠ²ΠΎΠ΄ΠΎΠ² Π² ΠΏΠΎΠ»ΡŒΠ·Ρƒ использования SQLite упоминаСтся использованиС 64-разрядного Ρ‚ΠΈΠΏΠ° INTEGER для хранСния ΡΠΏΠΎΡ…Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, задСйствованиС индСксов для сниТСния Π²Π²ΠΎΠ΄Π°/Π²Ρ‹Π²ΠΎΠ΄Π° Π·Π° счёт Π²Ρ‹Π±ΠΎΡ€ΠΎΡ‡Π½ΠΎΠ³ΠΎ обращСния ΠΊ записями вмСсто ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ сканирования, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ добавлСния Π½ΠΎΠ²Ρ‹Ρ… ΠΏΠΎΠ»Π΅ΠΉ Π±Π΅Π· измСнСния ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… записСй, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° ACID-Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ, Ρ€Π΅ΠΆΠΈΠΌ WAL (Write-Ahead Logging) для ΠΊΠΎΠ½ΠΊΡƒΡ€Π΅Π½Ρ‚Π½ΠΎΠ³ΠΎ доступа Π±Π΅Π· Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΎΠΊ, провСрСнная Π½Π°Π΄Ρ‘ΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρ‹ SQLite.

Для обСспСчСния ΠΏΠ»Π°Π²Π½ΠΎΠ³ΠΎ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π° прСдлагаСтся стратСгия Β«Π΄Π²ΠΎΠΉΠ½ΠΎΠΉ записи» (dual-write):

  • ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΈΡˆΡƒΡ‚ Π² Π±ΠΈΠ½Π°Ρ€Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ (login, sshd, sudo, cron ΠΈ Π΄Ρ€.), ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΡŽΡ‚ΡΡ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ запись ΠΈ Π² старый Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ», ΠΈ Π² Π½ΠΎΠ²ΡƒΡŽ SQLite-Π±Π°Π·Ρƒ Ρ‡Π΅Ρ€Π΅Π· ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΡƒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ.
  • Π Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π½ΠΎΠ²Ρ‹Π΅ вСрсии ΡƒΡ‚ΠΈΠ»ΠΈΡ‚ (last2, lastb2, who2, lastlog2), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ‡ΠΈΡ‚Π°ΡŽΡ‚ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· SQLite-Π±Π°Π·, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ индСксы для быстрой Ρ€Π°Π±ΠΎΡ‚Ρ‹. Π‘Ρ‚Π°Ρ€Ρ‹Π΅ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°ΡŽΡ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с ΠΏΡ€Π΅ΠΆΠ½ΠΈΠΌΠΈ Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ.
  • Π§Π΅Ρ€Π΅Π· нСсколько Π»Π΅Ρ‚, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΠ΄Π°Π²Π»ΡΡŽΡ‰Π΅Π΅ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ систСм обновятся, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° записи Π² старыС Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½Π°, Π° старыС ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹ β€” ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Ρ‹ ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΠΌΠΈ.

Вопросы, выставлСнныС для Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ обсуТдСния:

  • Π¦Π΅Π»Π΅ΡΠΎΠΎΠ±Ρ€Π°Π·Π½ΠΎΡΡ‚ΡŒ раздСлСния Π½Π° ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΈΠ»ΠΈ объСдинСния Π² ΠΎΠ΄Π½Ρƒ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, libsession2).
  • Π’Ρ‹Π±ΠΎΡ€ ΠΈΠΌΡ‘Π½ для Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ ΠΈ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚ (ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ историчСскиС названия ΠΈΠ»ΠΈ ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ ΠΊ Π±ΠΎΠ»Π΅Π΅ ΠΎΠ±Ρ‰ΠΈΠΌ).
  • РасполоТСниС Ρ„Π°ΠΉΠ»ΠΎΠ² Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ… (/var/lib/ ΠΊΠ°ΠΊ для состояния ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΈΠ»ΠΈ /var/log/ ΠΊΠ°ΠΊ для Π»ΠΎΠ³ΠΎΠ²).
  • ΠœΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ вСрсионирования схСмы ΠΈ ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΈ.
  • ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ SQLite для Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… сцСнариСв (сСрвСры, встраиваСмыС систСмы).
  • ΠŸΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»Π΅Π½ΠΈΠ΅ fallback-бэкСнда, хранящСго ΠΆΡƒΡ€Π½Π°Π»Ρ‹ Π² ΡƒΠΏΡ€ΠΎΡ‰Ρ‘Π½Π½ΠΎΠΌ Π±ΠΈΠ½Π°Ρ€Π½ΠΎΠΌ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅, для систСм, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… SQLite ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ ΠΈΠ·Π±Ρ‹Ρ‚ΠΎΡ‡Π½Ρ‹ΠΌ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, встраиваСмыС устройства с Тёсткими ограничСниями ΠΏΠΎ памяти).

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: opennet.ru

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ