Π‘ΡΠΊΠΎΠ½ΠΎΠΌΡŒΡ‚Π΅ 15% Π½Π° всСх хостинговых услугах

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ свои Π½Π°Π²Ρ‹ΠΊΠΈ ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ скидку Π½Π° любой Ρ‚Π°Ρ€ΠΈΡ„Π½Ρ‹ΠΉ ΠΏΠ»Π°Π½

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΊΠΎΠ΄: Skills ΠΠ°Ρ‡Π°Ρ‚ΡŒ
Π ΡƒΠ±Ρ€ΠΈΠΊΠΈ
Linux

Команда `history` Π² Linux: ПолноС руководство ΠΏΠΎ истории Bash

Команда `history` Π² Linux β€” это встроСнная ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π° ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ Bash, которая записываСт, ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ ΠΈ управляСт ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ, Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π½ΠΎΠΉ Π² сСансС Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π°. Она считываСт Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· `~/.bash_history` ΠΈ записываСт Π² Π½Π΅Π³ΠΎ β€” простой тСкстовый Ρ„Π°ΠΉΠ» Π² домашнСм ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ, позволяя Π²Π°ΠΌ Π²ΡΠΏΠΎΠΌΠΈΠ½Π°Ρ‚ΡŒ, ΠΈΡΠΊΠ°Ρ‚ΡŒ, ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΌΠ΅ΠΆΠ΄Ρƒ сСансами Π±Π΅Π· нСобходимости ΠΈΡ… ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ³ΠΎ Π²Π²ΠΎΠ΄Π°.

Для систСмных администраторов ΠΈ ΠΎΠΏΡ‹Ρ‚Π½Ρ‹Ρ… ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ история Bash β€” это Π½Π΅ просто удобная функция, Π° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹ΠΉ ΠΆΡƒΡ€Π½Π°Π» Π°ΡƒΠ΄ΠΈΡ‚Π°, инструмСнт ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ ΠΈ ΠΌΡƒΠ»ΡŒΡ‚ΠΈΠΏΠ»ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ. ПониманиС Π΅Ρ‘ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π³ΠΎ устройства, ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ ΠΈ послСдствий для бСзопасности ΠΎΡ‚Π»ΠΈΡ‡Π°Π΅Ρ‚ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Ρ… ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ ΠΎΡ‚ ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€ΠΎΠ², ΠΈΠ·Π²Π»Π΅ΠΊΠ°ΡŽΡ‰ΠΈΡ… ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½ΡƒΡŽ ΠΏΠΎΠ»ΡŒΠ·Ρƒ ΠΈΠ· ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки.

Как Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ история Bash ΠΈΠ·Π½ΡƒΡ‚Ρ€ΠΈ

Когда Π²Ρ‹ ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚Π΅ сСанс Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π°, Bash Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚ содСрТимоС `~/.bash_history` Π² список Π² памяти. По ΠΌΠ΅Ρ€Π΅ выполнСния ΠΊΠΎΠΌΠ°Π½Π΄ ΠΎΠ½ΠΈ Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ΡΡ Π² этот Π±ΡƒΡ„Π΅Ρ€ Π² памяти. Когда сСанс Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ (Ρ‡Π΅Ρ€Π΅Π· `exit` ΠΈΠ»ΠΈ `logout`), Π±ΡƒΡ„Π΅Ρ€ сбрасываСтся ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ Π² `~/.bash_history` Π² соотвСтствии с ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌΠΈ, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹ΠΌΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ срСды.

Π­Ρ‚Π° Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π° ΠΈΠΌΠ΅Π΅Ρ‚ Π²Π°ΠΆΠ½ΠΎΠ΅ слСдствиС: Ссли ваш сСанс Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ Π°Π²Π°Ρ€ΠΈΠΉΠ½ΠΎ (ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ питания, Ρ€Π°Π·Ρ€Ρ‹Π² SSH-соСдинСния, `kill -9`), ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΈΠ· этого сСанса ΠΌΠΎΠ³ΡƒΡ‚ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π±Ρ‹Ρ‚ΡŒ записаны Π½Π° диск. Π­Ρ‚ΠΎ распространённый источник ΠΏΡƒΡ‚Π°Π½ΠΈΡ†Ρ‹, ΠΊΠΎΠ³Π΄Π° администраторы Ρ‚Π΅Ρ€ΡΡŽΡ‚ слСд ΠΊΠΎΠΌΠ°Π½Π΄, Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π½Ρ‹Ρ… Π²ΠΎ врСмя ΠΏΡ€Π΅Ρ€Π²Π°Π½Π½ΠΎΠ³ΠΎ сСанса.

Π”Π²Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ ΠΈΠ·ΠΌΠ΅Π½ΡΡŽΡ‚ это ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ записи ΠΏΡ€ΠΈ Π²Ρ‹Ρ…ΠΎΠ΄Π΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ:

  • `shopt -s histappend` β€” добавляСт Π½ΠΎΠ²ΡƒΡŽ ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ Π² `~/.bash_history` вмСсто Π΅Ρ‘ пСрСзаписи. Π­Ρ‚ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π² многосСансовых срСдах.
  • `PROMPT_COMMAND='history -a'` β€” заставляСт Bash Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ послСднюю ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ Π² Ρ„Π°ΠΉΠ» истории послС ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΡ€ΠΈΠ³Π»Π°ΡˆΠ΅Π½ΠΈΡ, обСспСчивая сохранСниС Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΈ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π°ΠΌΠΈ.

Π‘Π΅Π· `histappend` ΠΏΠΎΠ±Π΅ΠΆΠ΄Π°Π΅Ρ‚ послСдняя закрытая ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ° β€” ΠΎΠ½Π° пСрСзаписываСт Ρ„Π°ΠΉΠ» истории, ΠΌΠΎΠ»Ρ‡Π° удаляя записи ΠΈΠ· всСх ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹Ρ… сСансов.

ΠžΡΠ½ΠΎΠ²Ρ‹ использования ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ `history`

ΠžΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠ»Π½ΠΎΠΉ истории ΠΊΠΎΠΌΠ°Π½Π΄

β€œ`bash

history

β€œ`

Π’Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ ΠΏΡ€ΠΎΠ½ΡƒΠΌΠ΅Ρ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ список сохранённых ΠΊΠΎΠΌΠ°Π½Π΄. Число слСва β€” это индСкс истории, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ для обозначСния событий.

ΠžΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΠΎΠ³ΠΎ количСства послСдних ΠΊΠΎΠΌΠ°Π½Π΄

β€œ`bash

history 20

β€œ`

ΠŸΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ послСдниС 20 ΠΊΠΎΠΌΠ°Π½Π΄. Π£Π΄ΠΎΠ±Π½ΠΎ, ΠΊΠΎΠ³Π΄Π° Π½ΡƒΠΆΠ½ΠΎ быстро ΠΏΡ€ΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ нСдавнюю Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ Π±Π΅Π· ΠΏΡ€ΠΎΠΊΡ€ΡƒΡ‚ΠΊΠΈ сотСн записСй.

НСмСдлСнная запись истории Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ сСанса Π² Ρ„Π°ΠΉΠ»

β€œ`bash

history -w

β€œ`

ΠŸΡ€ΠΈΠ½ΡƒΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ записываСт Π±ΡƒΡ„Π΅Ρ€ истории ΠΈΠ· памяти Π² `~/.bash_history`. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ это ΠΏΠ΅Ρ€Π΅Π΄ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ΠΌ Π²Π°ΠΆΠ½ΠΎΠ³ΠΎ сСанса, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ ΠΏΠΎΡ‚Π΅Ρ€ΡΡ‚ΡŒ.

Π§Ρ‚Π΅Π½ΠΈΠ΅ истории ΠΈΠ· Ρ„Π°ΠΉΠ»Π° Π² Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ сСанс

β€œ`bash

history -r

β€œ`

ΠŸΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚ `~/.bash_history` Π² ΠΏΠ°ΠΌΡΡ‚ΡŒ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ сСанса. Π£Π΄ΠΎΠ±Π½ΠΎ, ΠΊΠΎΠ³Π΄Π° Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌ, Π²Π²Π΅Π΄Ρ‘Π½Π½Ρ‹ΠΌ Π² Π΄Ρ€ΡƒΠ³ΠΎΠΌ ΠΎΠΊΠ½Π΅ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π° Π² Ρ€Π°ΠΌΠΊΠ°Ρ… Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ Π²Ρ…ΠΎΠ΄Π° Π² систСму.

Π’Ρ‹Π·ΠΎΠ² ΠΈ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄

ΠžΠ±ΠΎΠ·Π½Π°Ρ‡Π΅Π½ΠΈΡ событий с `!`

Бинтаксис обозначСния событий Π² Bash позволяСт Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ историчСскиС ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΏΠΎ ссылкС:

ΠžΠ±ΠΎΠ·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠŸΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅
`!!`ΠŸΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ выполняСт нСпосрСдствСнно ΠΏΡ€Π΅Π΄ΡˆΠ΅ΡΡ‚Π²ΡƒΡŽΡ‰ΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ
`!n`ВыполняСт ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ с индСксом истории `n`
`!-n`ВыполняСт ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ, ΠΎΡ‚ΡΡ‚ΠΎΡΡ‰ΡƒΡŽ Π½Π° `n` ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΉ Π½Π°Π·Π°Π΄ ΠΎΡ‚ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ
`!string`ВыполняСт послСднюю ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ, Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΡƒΡŽΡΡ с `string`
`!?string?`ВыполняСт послСднюю ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ, ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‰ΡƒΡŽ `string` Π² любом мСстС
`!$`ΠŸΠΎΠ΄ΡΡ‚Π°Π²Π»ΡΠ΅Ρ‚ послСдний Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹
`!*`ΠŸΠΎΠ΄ΡΡ‚Π°Π²Π»ΡΠ΅Ρ‚ всС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹

ΠŸΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ β€” ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ΅ использованиС послСднСго Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°:

β€œ`bash

mkdir /var/www/myproject

cd !$

β€œ`

`!$` раскрываСтся Π² `/var/www/myproject`, избавляя вас ΠΎΡ‚ нСобходимости ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ Π²Π²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΏΡƒΡ‚ΡŒ. Π­Ρ‚ΠΎ ΠΎΠ΄Π½Π° ΠΈΠ· Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π½Π΅Π΄ΠΎΠΎΡ†Π΅Π½Ρ‘Π½Π½Ρ‹Ρ…, Π½ΠΎ высокоэффСктивных возмоТностСй истории Bash.

ΠŸΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ просмотр ΠΏΠ΅Ρ€Π΅Π΄ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ:

Π”ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ `:p` ΠΊ Π»ΡŽΠ±ΠΎΠΌΡƒ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ события, Ρ‡Ρ‚ΠΎΠ±Ρ‹ вывСсти ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ Π±Π΅Π· Π΅Ρ‘ выполнСния:

β€œ`bash

!42:p

β€œ`

Π­Ρ‚ΠΎ ваТная ΠΏΡ€ΠΈΠ²Ρ‹Ρ‡ΠΊΠ° бСзопасной Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π½Π° производствСнных сСрвСрах. ВсСгда просматривайтС дСструктивныС ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΏΠ΅Ρ€Π΅Π΄ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ.

ΠžΠ±ΠΎΠ·Π½Π°Ρ‡Π΅Π½ΠΈΡ слов для извлСчСния Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ²

Помимо ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ³ΠΎ выполнСния Ρ†Π΅Π»Ρ‹Ρ… ΠΊΠΎΠΌΠ°Π½Π΄, Bash позволяСт ΠΈΠ·Π²Π»Π΅ΠΊΠ°Ρ‚ΡŒ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ ΠΈΠ· записСй истории:

β€œ`bash

!!:2 # Second word (argument) of the last command

!!:1-3 # Words 1 through 3 of the last command

!ssh:$ # Last argument of the most recent ssh command

β€œ`

Вакая ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒ Π΄Π΅Ρ‚Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π½Π΅ΠΎΡ†Π΅Π½ΠΈΠΌΠ° ΠΏΡ€ΠΈ построСнии слоТных ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€ΠΎΠ² ΠΈΠ»ΠΈ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π΅Π½ΠΈΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ с ΠΎΠ΄Π½ΠΈΠΌΠΈ ΠΈ Ρ‚Π΅ΠΌΠΈ ΠΆΠ΅ путями ΠΊ Ρ„Π°ΠΉΠ»Π°ΠΌ.

БочСтания клавиш для Π½Π°Π²ΠΈΠ³Π°Ρ†ΠΈΠΈ ΠΏΠΎ истории

Π‘ΠΎΡ‡Π΅Ρ‚Π°Π½ΠΈΠ΅ ΠΊΠ»Π°Π²ΠΈΡˆΠ”Π΅ΠΉΡΡ‚Π²ΠΈΠ΅
`Up Arrow` / `Ctrl+P`ΠŸΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ ΠΊ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Π΅
`Down Arrow` / `Ctrl+N`ΠŸΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ ΠΊ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Π΅
`Ctrl+R`Π˜Π½ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Ρ‹ΠΉ поиск Π² ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΌ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΈ ΠΏΠΎ истории
`Ctrl+S`Π˜Π½ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Ρ‹ΠΉ поиск Π²ΠΏΠ΅Ρ€Ρ‘Π΄ (Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ `stty -ixon`)
`Alt+.`Π’ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ послСдний Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹
`Ctrl+G`ΠžΡ‚ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ поиск ΠΏΠΎ истории

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅ ΠΎ `Ctrl+S`: По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ `Ctrl+S` Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€ΡƒΠ΅Ρ‚ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ XON/XOFF ΠΈ Π·Π°ΠΌΠΎΡ€Π°ΠΆΠΈΠ²Π°Π΅Ρ‚ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π». Π§Ρ‚ΠΎΠ±Ρ‹ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ поиск ΠΏΠΎ истории Π²ΠΏΠ΅Ρ€Ρ‘Π΄, Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ `stty -ixon` Π² ваш `~/.bashrc`.

Поиск Π² ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΌ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ `Ctrl+R`

β€œ`

(reverse-i-search)`git': git commit -am "fix: resolve race condition"

β€œ`

Π’Π²Π΅Π΄ΠΈΡ‚Π΅ подстроку, ΠΈ Bash ΠΈΠ½ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½ΠΎ Π½Π°ΠΉΠ΄Ρ‘Ρ‚ послСднюю ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ, ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‰ΡƒΡŽ Π΅Ρ‘. НаТмитС `Ctrl+R` Π΅Ρ‰Ρ‘ Ρ€Π°Π· для ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π° ΠΊ Π±ΠΎΠ»Π΅Π΅ старым совпадСниям. НаТмитС `Enter` для выполнСния ΠΈΠ»ΠΈ `Ctrl+G` для ΠΎΡ‚ΠΌΠ΅Π½Ρ‹ Π±Π΅Π· запуска Ρ‡Π΅Π³ΠΎ-Π»ΠΈΠ±ΠΎ.

Для поиска ΠΏΠΎ Π±ΠΎΠ»ΡŒΡˆΠΎΠΌΡƒ ΠΎΠ±ΡŠΡ‘ΠΌΡƒ истории ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΏΠ΅Ρ€Π΅Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Ρ‡Π΅Ρ€Π΅Π· `grep`:

β€œ`bash

history | grep "docker run"

history | grep -E "^[[:space:]]+[0-9]+[[:space:]]+ssh"

β€œ`

Π Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ записСй истории ΠΈ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΈΠΌΠΈ

Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ записи

β€œ`bash

history -d 87

β€œ`

УдаляСт ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ с индСксом 87 ΠΈΠ· списка Π² памяти. Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ это постоянным, Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ `history -w` для записи ΠΈΠ·ΠΌΠ΅Π½Ρ‘Π½Π½ΠΎΠ³ΠΎ списка ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ Π½Π° диск.

УдалСниС диапазона записСй

β€œ`bash

for i in $(seq 85 90); do history -d 85; done

β€œ`

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ смСщаСт индСксы, всСгда удаляйтС ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ Π½ΠΎΠΌΠ΅Ρ€ индСкса Π² Ρ†ΠΈΠΊΠ»Π΅, Π° Π½Π΅ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°ΠΉΡ‚Π΅ Π΅Π³ΠΎ.

ΠžΡ‡ΠΈΡΡ‚ΠΊΠ° всСй истории Π² памяти

β€œ`bash

history -c

β€œ`

ΠžΡ‡ΠΈΡ‰Π°Π΅Ρ‚ Π±ΡƒΡ„Π΅Ρ€ истории Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ сСанса. Π­Ρ‚ΠΎ Π½Π΅ Π·Π°Ρ‚Ρ€Π°Π³ΠΈΠ²Π°Π΅Ρ‚ `~/.bash_history` Π½Π° дискС.

ПолноС ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ всСй истории

β€œ`bash

history -c && history -w

β€œ`

ΠžΡ‡ΠΈΡ‰Π°Π΅Ρ‚ Π±ΡƒΡ„Π΅Ρ€ Π² памяти, Π° Π·Π°Ρ‚Π΅ΠΌ записываСт пустой Π±ΡƒΡ„Π΅Ρ€ Π² `~/.bash_history`, фактичСски усСкая Ρ„Π°ΠΉΠ». Π­Ρ‚ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Π°Ρ Π΄Π²ΡƒΡ…ΡˆΠ°Π³ΠΎΠ²Π°Ρ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ β€” использованиС Ρ‚ΠΎΠ»ΡŒΠΊΠΎ `> ~/.bash_history` Π½Π΅ ΠΎΡ‡ΠΈΡ‰Π°Π΅Ρ‚ Π±ΡƒΡ„Π΅Ρ€ Π² памяти, поэтому Ρ„Π°ΠΉΠ» ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π·Π°Π½ΠΎΠ²ΠΎ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ ΠΏΡ€ΠΈ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠΈ сСанса.

Настройка истории Bash: ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ срСды

Всё ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ истории управляСтся ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ срСды, ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π·Π°Π΄Π°Π²Π°Π΅ΠΌΡ‹ΠΌΠΈ Π² `~/.bashrc` (ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹Π΅ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ Π±Π΅Π· Π²Ρ…ΠΎΠ΄Π° Π² систСму) ΠΈΠ»ΠΈ `~/.bash_profile` / `~/.profile` (ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ с Π²Ρ…ΠΎΠ΄ΠΎΠΌ Π² систСму). ИзмСнСния Π²ΡΡ‚ΡƒΠΏΠ°ΡŽΡ‚ Π² силу послС примСнСния Ρ„Π°ΠΉΠ»Π°:

β€œ`bash

source ~/.bashrc

β€œ`

`HISTSIZE`

УправляСт количСством ΠΊΠΎΠΌΠ°Π½Π΄, хранящихся Π² памяти Π²ΠΎ врСмя Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ сСанса.

β€œ`bash

export HISTSIZE=10000

β€œ`

Установка значСния `0` ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ Π² памяти. Установка значСния `-1` (Π² Bash 4.3+) Π΄Π΅Π»Π°Π΅Ρ‚ Π΅Ρ‘ Π½Π΅ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΠΎΠΉ.

`HISTFILESIZE`

УправляСт ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌ количСством строк, хранящихся Π² `~/.bash_history` Π½Π° дискС.

β€œ`bash

export HISTFILESIZE=20000

β€œ`

Когда Ρ„Π°ΠΉΠ» ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ°Π΅Ρ‚ этот Π»ΠΈΠΌΠΈΡ‚, Bash удаляСт самыС старыС записи. Для срСд с трСбованиями соотвСтствия Π½ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠ²Π½Ρ‹ΠΌ трСбованиям установитС большоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Ρ€ΠΎΡ‚Π°Ρ†ΠΈΡŽ ΠΆΡƒΡ€Π½Π°Π»ΠΎΠ².

`HISTCONTROL`

ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅Ρ‚ ΠΏΡ€Π°Π²ΠΈΠ»Π° Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ для записываСмых ΠΊΠΎΠΌΠ°Π½Π΄.

Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠŸΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅
`ignoredups`ΠŸΡ€ΠΎΠΏΡƒΡΠΊΠ°Π΅Ρ‚ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Π΄ΡƒΠ±Π»ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠ΅ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹
`ignorespace`ΠŸΡ€ΠΎΠΏΡƒΡΠΊΠ°Π΅Ρ‚ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ с ΠΏΡ€ΠΎΠ±Π΅Π»ΠΎΠΌ Π² Π½Π°Ρ‡Π°Π»Π΅
`ignoreboth`ΠžΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΠ΅Ρ‚ ΠΎΠ±Π° Π²Ρ‹ΡˆΠ΅ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Ρ… ΠΏΡ€Π°Π²ΠΈΠ»Π°
`erasedups`УдаляСт всС ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠ΅ вхоТдСния ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΏΠ΅Ρ€Π΅Π΄ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ Π½ΠΎΠ²ΠΎΠΉ

β€œ`bash

export HISTCONTROL=ignoreboth

β€œ`

ΠŸΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ `ignorespace` Π² цСлях бСзопасности: Π”ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ ΠΏΡ€ΠΎΠ±Π΅Π» ΠΏΠ΅Ρ€Π΅Π΄ любой ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ, содСрТащСй ΠΏΠ°Ρ€ΠΎΠ»ΡŒ ΠΈΠ»ΠΈ сСкрСт, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Π΅Ρ‘ запись:

β€œ`bash

mysql -u root -pSuperSecretPassword

β€œ`

Π­Ρ‚ΠΎ ΡˆΠΈΡ€ΠΎΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠ°Ρ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ бСзопасности Π½Π° ΠΎΠ±Ρ‰ΠΈΡ… ΠΈΠ»ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΡ… систСмах.

`HISTTIMEFORMAT`

ДобавляСт ΠΌΠ΅Ρ‚ΠΊΡƒ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ записи истории, сохраняСмой Π² Π²ΠΈΠ΄Π΅ строки коммСнтария Π² `~/.bash_history`.

β€œ`bash

export HISTTIMEFORMAT="%Y-%m-%d %H:%M:%S "

β€œ`

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π²Ρ‹Π²ΠΎΠ΄Π°:

β€œ`

487 2024-11-14 09:32:17 systemctl restart nginx

488 2024-11-14 09:32:45 tail -f /var/log/nginx/error.log

β€œ`

ΠœΠ΅Ρ‚ΠΊΠΈ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ для криминалистичСского Π°Π½Π°Π»ΠΈΠ·Π° послС ΠΈΠ½Ρ†ΠΈΠ΄Π΅Π½Ρ‚ΠΎΠ² Π² срСдах VPS Π₯остинга ΠΈ Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ инфраструктурС. Π‘Π΅Π· Π½ΠΈΡ… Π²Ρ‹ Π·Π½Π°Π΅Ρ‚Π΅ *Ρ‡Ρ‚ΠΎ* Π±Ρ‹Π»ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΎ, Π½ΠΎ Π½Π΅ *ΠΊΠΎΠ³Π΄Π°*.

`HISTIGNORE`

Π Π°Π·Π΄Π΅Π»Ρ‘Π½Π½Ρ‹ΠΉ двоСточиями список шаблонов glob. ΠšΠΎΠΌΠ°Π½Π΄Ρ‹, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ Π»ΡŽΠ±ΠΎΠΌΡƒ ΡˆΠ°Π±Π»ΠΎΠ½Ρƒ, Π½Π΅ ΡΠΎΡ…Ρ€Π°Π½ΡΡŽΡ‚ΡΡ Π² истории.

β€œ`bash

export HISTIGNORE="ls:ll:la:cd:pwd:exit:clear:history"

β€œ`

Π­Ρ‚ΠΎ ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ засорСниС истории Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌΠΈ ΠΈ сниТСниС качСства Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² поиска. Π’Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ подстановочныС Π·Π½Π°ΠΊΠΈ:

β€œ`bash

export HISTIGNORE="*password*:*secret*:*token*"

β€œ`

Π­Ρ‚ΠΎ ΠΌΠ΅Ρ€Π° Π³Π»ΡƒΠ±ΠΎΠΊΠΎΠΉ Π·Π°Ρ‰ΠΈΡ‚Ρ‹ β€” сочСтайтС Π΅Ρ‘ с `ignorespace` для максимальной Π·Π°Ρ‰ΠΈΡ‚Ρ‹ ΡƒΡ‡Ρ‘Ρ‚Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ….

Полная справочная Ρ‚Π°Π±Π»ΠΈΡ†Π° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ истории Bash

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°ΡΠŸΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽΠΠ°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅
`HISTSIZE`500–1000ΠšΠΎΠΌΠ°Π½Π΄Ρ‹, хранящиСся Π² памяти Π·Π° сСанс
`HISTFILESIZE`500–2000Π‘Ρ‚Ρ€ΠΎΠΊΠΈ, хранящиСся Π² `~/.bash_history`
`HISTCONTROL`(Π½Π΅ Π·Π°Π΄Π°Π½ΠΎ)ΠŸΡ€Π°Π²ΠΈΠ»Π° Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ для записываСмых ΠΊΠΎΠΌΠ°Π½Π΄
`HISTTIMEFORMAT`(Π½Π΅ Π·Π°Π΄Π°Π½ΠΎ)Π€ΠΎΡ€ΠΌΠ°Ρ‚ ΠΌΠ΅Ρ‚ΠΊΠΈ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, добавляСмой ΠΏΠ΅Ρ€Π΅Π΄ записями
`HISTIGNORE`(Π½Π΅ Π·Π°Π΄Π°Π½ΠΎ)Π¨Π°Π±Π»ΠΎΠ½Ρ‹ glob для ΠΈΡΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΡ‹Ρ… ΠΊΠΎΠΌΠ°Π½Π΄
`HISTFILE``~/.bash_history`ΠŸΡƒΡ‚ΡŒ ΠΊ Ρ„Π°ΠΉΠ»Ρƒ истории
`histappend` (shopt)Π²Ρ‹ΠΊΠ».Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ вмСсто пСрСзаписи ΠΏΡ€ΠΈ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠΈ сСанса

БовмСстноС использованиС истории Π² Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… сСансах Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π°

По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ сСанс Bash ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ собствСнный ΠΈΠ·ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Π±ΡƒΡ„Π΅Ρ€ истории. ΠšΠΎΠΌΠ°Π½Π΄Ρ‹, Π²Π²Π΅Π΄Ρ‘Π½Π½Ρ‹Π΅ Π² Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π΅ A, Π½Π΅Π²ΠΈΠ΄ΠΈΠΌΡ‹ для Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π° B Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° ΠΎΠ±Π° сСанса Π½Π΅ Π·Π°ΠΊΡ€ΠΎΡŽΡ‚ΡΡ ΠΈ Ρ„Π°ΠΉΠ» Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ записан. Для администраторов, ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΠΈΡ… нСсколькими SSH-сСансами ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Π½Π° Π’Ρ‹Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… сСрвСрах, это создаёт ΠΏΡ€ΠΎΠ±Π΅Π»Ρ‹ Π² ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… записях.

РСкомСндуСмая конфигурация для совмСстного использования истории ΠΌΠ΅ΠΆΠ΄Ρƒ сСансами Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ:

β€œ`bash

~/.bashrc

export HISTSIZE=100000

export HISTFILESIZE=100000

export HISTCONTROL=ignoreboth

export HISTTIMEFORMAT="%Y-%m-%d %H:%M:%S "

shopt -s histappend

PROMPT_COMMAND='history -a; history -c; history -r'

β€œ`

Π§Ρ‚ΠΎ это Π΄Π΅Π»Π°Π΅Ρ‚:

  • `history -a` β€” добавляСт послСднюю ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ Π² Ρ„Π°ΠΉΠ»
  • `history -c` β€” ΠΎΡ‡ΠΈΡ‰Π°Π΅Ρ‚ Π±ΡƒΡ„Π΅Ρ€ Π² памяти
  • `history -r` β€” ΠΏΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚ Ρ„Π°ΠΉΠ» Π² ΠΏΠ°ΠΌΡΡ‚ΡŒ

ПослС ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ сСанс Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π° Π²ΠΈΠ΄ΠΈΡ‚ ΠΏΠΎΠ»Π½ΡƒΡŽ, Π΅Π΄ΠΈΠ½ΡƒΡŽ ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ ΠΈΠ· всСх Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹Ρ… сСансов. ΠšΠΎΠΌΠΏΡ€ΠΎΠΌΠΈΡΡ β€” Π½Π΅Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Π½Π°ΠΊΠ»Π°Π΄Π½Ρ‹Π΅ расходы Π½Π° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ `PROMPT_COMMAND`, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ ΠΏΡ€Π΅Π½Π΅Π±Ρ€Π΅ΠΆΠΈΠΌΠΎ ΠΌΠ°Π»Ρ‹.

Π­Ρ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΉ поиск ΠΏΠΎ истории: ΠΏΡ€ΠΎΠ΄Π²ΠΈΠ½ΡƒΡ‚Ρ‹Π΅ Ρ‚Π΅Ρ…Π½ΠΈΠΊΠΈ

`fzf` β€” Π½Π΅Ρ‡Ρ‘Ρ‚ΠΊΠΈΠΉ поиск ΠΏΠΎ истории

Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚ `fzf` ΠΏΡ€Π΅Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ поиск ΠΏΠΎ истории ΠΈΠ· Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠ³ΠΎ сканирования Π² ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΉ интСрфСйс Π½Π΅Ρ‡Ρ‘Ρ‚ΠΊΠΎΠ³ΠΎ поиска:

β€œ`bash

Install fzf (Debian/Ubuntu)

sudo apt install fzf

Bind Ctrl+R to fzf-powered history search

Add to ~/.bashrc:

[ -f ~/.fzf.bash ] && source ~/.fzf.bash

β€œ`

ПослС настройки `Ctrl+R` ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ полноэкранный Π½Π΅Ρ‡Ρ‘Ρ‚ΠΊΠΈΠΉ поиск ΠΏΠΎ всСй вашСй истории. Π­Ρ‚ΠΎ особСнно эффСктивно ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с большими Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ истории (Π±ΠΎΠ»Π΅Π΅ 10 000 записСй), Π³Π΄Π΅ `grep` становится Π½Π΅ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΌ.

Π˜Π·Π²Π»Π΅Ρ‡Π΅Π½ΠΈΠ΅ истории для написания скриптов

β€œ`bash

Export all unique commands containing "iptables" to a script

history | grep iptables | awk '{$1=""; print $0}' | sort -u > iptables_audit.sh

β€œ`

Π­Ρ‚ΠΎΡ‚ шаблон ΠΏΠΎΠ»Π΅Π·Π΅Π½ для восстановлСния инструкций ΠΏΠΎ эксплуатации ΠΈΠ· ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΊΠΎΠΌΠ°Π½Π΄, Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π½Ρ‹Ρ… Π²ΠΎ врСмя рСагирования Π½Π° ΠΈΠ½Ρ†ΠΈΠ΄Π΅Π½Ρ‚Ρ‹.

БообраТСния бСзопасности для истории Bash

Π˜ΡΡ‚ΠΎΡ€ΠΈΡ Bash β€” это инструмСнт с Π΄Π²ΠΎΠΉΠ½Ρ‹ΠΌ Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ. Она ускоряСт Π·Π°ΠΊΠΎΠ½Π½Ρ‹Π΅ Ρ€Π°Π±ΠΎΡ‡ΠΈΠ΅ процСссы, Π½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ прСдставляСт Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΏΠΎΠ²Π΅Ρ€Ρ…Π½ΠΎΡΡ‚ΡŒ Π°Ρ‚Π°ΠΊΠΈ.

ΠšΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ риски ΠΈ ΠΌΠ΅Ρ€Ρ‹ ΠΏΠΎ ΠΈΡ… сниТСнию:

  • РаскрытиС ΡƒΡ‡Ρ‘Ρ‚Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…: ΠŸΠ°Ρ€ΠΎΠ»ΠΈ, ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΡ‹Π΅ Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, `curl -u admin:password`), хранятся Π² ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎΠΌ Π²ΠΈΠ΄Π΅ Π² `~/.bash_history`. ВмСсто этого ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ `ignorespace`, `HISTIGNORE` ΠΈΠ»ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ срСды.
  • ΠšΡ€ΠΈΠΌΠΈΠ½Π°Π»ΠΈΡΡ‚ΠΈΠΊΠ° ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΡ ΠΏΡ€ΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΠΉ: Π—Π»ΠΎΡƒΠΌΡ‹ΡˆΠ»Π΅Π½Π½ΠΈΠΊΠΈ, ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ²ΡˆΠΈΠ΅ доступ ΠΊ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ΅, рСгулярно Ρ‡ΠΈΡ‚Π°ΡŽΡ‚ `~/.bash_history` для изучСния срСды, обнаруТСния ΡƒΡ‡Ρ‘Ρ‚Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ выявлСния Ρ†Π΅Π½Π½Ρ‹Ρ… Ρ†Π΅Π»Π΅ΠΉ. УстановитС ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΏΡ€Π°Π²Π° доступа: `chmod 600 ~/.bash_history`.
  • ПоддСлка истории: Π‘ΠΊΠΎΠΌΠΏΡ€ΠΎΠΌΠ΅Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ `history -c && history -w` для уничтоТСния всСх ΡƒΠ»ΠΈΠΊ. Π’ цСлях Π°ΡƒΠ΄ΠΈΡ‚Π° Π½Π° производствСнных систСмах рассмотритС Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ вСдСния ΠΆΡƒΡ€Π½Π°Π»Π° ΠΊΠΎΠΌΠ°Π½Π΄ Π½Π° основС `auditd` ΠΈΠ»ΠΈ `syslog`, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Ρ‹ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ.
  • Π˜Π·ΠΎΠ»ΡΡ†ΠΈΡ истории root: Π˜ΡΡ‚ΠΎΡ€ΠΈΡ ΡΡƒΠΏΠ΅Ρ€ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ хранится Π² `/root/.bash_history`. Π£Π±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ этот Ρ„Π°ΠΉΠ» нСдоступСн для чтСния Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌΠΈ ΠΈ Π²ΠΊΠ»ΡŽΡ‡Ρ‘Π½ Π² ΠΎΠ±Π»Π°ΡΡ‚ΡŒ Ρ€Π΅Π·Π΅Ρ€Π²Π½ΠΎΠ³ΠΎ копирования ΠΈ Π°ΡƒΠ΄ΠΈΡ‚Π°.

Для срСд, Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‰ΠΈΡ… строгого Π°ΡƒΠ΄ΠΈΡ‚Π° ΠΊΠΎΠΌΠ°Π½Π΄ β€” Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ инфраструктура, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π°Ρ PCI-DSS ΠΈΠ»ΠΈ SOC 2, β€” ΠΎΠ΄Π½ΠΎΠΉ истории Bash нСдостаточно. Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ Π΅Ρ‘ Π°ΡƒΠ΄ΠΈΡ‚ΠΎΠΌ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ ядра Ρ‡Π΅Ρ€Π΅Π· `auditd` ΠΈ Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠΉ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΎΠΉ ΠΆΡƒΡ€Π½Π°Π»ΠΎΠ².

Π˜ΡΡ‚ΠΎΡ€ΠΈΡ Bash Π² сравнСнии с Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΌΠΈ систСмами истории ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ

Π€ΡƒΠ½ΠΊΡ†ΠΈΡΠ˜ΡΡ‚ΠΎΡ€ΠΈΡ BashΠ˜ΡΡ‚ΠΎΡ€ΠΈΡ ZshΠ˜ΡΡ‚ΠΎΡ€ΠΈΡ Fish
Π€Π°ΠΉΠ» истории ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ`~/.bash_history``~/.zsh_history``~/.local/share/fish/fish_history`
ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° ΠΌΠ΅Ρ‚ΠΎΠΊ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈΠ§Π΅Ρ€Π΅Π· `HISTTIMEFORMAT`ВстроСннаяВстроСнная (Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ YAML)
ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π΄ΡƒΠ±Π»ΠΈΠΊΠ°Ρ‚ΠΎΠ²ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ `HISTCONTROL`ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ `HIST_IGNORE_DUPS`АвтоматичСскоС ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ Π΄ΡƒΠ±Π»ΠΈΠΊΠ°Ρ‚ΠΎΠ²
БовмСстноС использованиС ΠΌΠ΅ΠΆΠ΄Ρƒ сСансамиРучноС (`PROMPT_COMMAND`)ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ `INC_APPEND_HISTORY`АвтоматичСскоС (ΠΎΠ±Ρ‰Π΅Π΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ)
Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ поиска`Ctrl+R` (Π»ΠΈΠ½Π΅ΠΉΠ½Ρ‹ΠΉ)`Ctrl+R` (Π»ΠΈΠ½Π΅ΠΉΠ½Ρ‹ΠΉ)Π‘ подсвСткой синтаксиса, контСкстно-зависимый
ΠœΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΈΡΡ‚ΠΎΡ€ΠΈΠΈΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ `HISTFILESIZE`ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ `SAVEHIST`Π‘Π΅Π· Тёсткого ограничСния
ΠœΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈΠžΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΠ΅Ρ‚ (Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ состояния Π³ΠΎΠ½ΠΊΠΈ)ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ΡΡ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° файловНа основС SQLite (атомарная запись)

ОсновноС ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ истории Bash β€” отсутствиС встроСнной Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ состояния Π³ΠΎΠ½ΠΊΠΈ ΠΏΡ€ΠΈ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ записи ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… сСансов. Zsh ΠΈ Fish Ρ€Π΅ΡˆΠ°ΡŽΡ‚ эту ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ Π±ΠΎΠ»Π΅Π΅ изящно Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ.

ΠŸΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΠ°Ρ конфигурация для производствСнных срСд

НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π° провСрСнная конфигурация истории `~/.bashrc`, подходящая для производствСнных Linux-сСрвСров, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ Ρ‚Π΅, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ VPS с cPanel ΠΈΠ»ΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΌΠΈ панСлями управлСния:

β€œ`bash

β€” Bash History Configuration β€”

export HISTSIZE=50000

export HISTFILESIZE=50000

export HISTCONTROL=ignoreboth:erasedups

export HISTTIMEFORMAT="%Y-%m-%d %H:%M:%S "

export HISTIGNORE="ls:ll:la:cd:pwd:exit:clear:bg:fg:jobs"

export HISTFILE=~/.bash_history

Append to history file; don't overwrite

shopt -s histappend

Save and reload history after each command

PROMPT_COMMAND='history -a; history -c; history -r'

Enable multi-line command history as single entry

shopt -s cmdhist

Store multi-line commands with embedded newlines

shopt -s lithist

β€œ`

`cmdhist` ΠΈ `lithist` Π·Π°ΡΠ»ΡƒΠΆΠΈΠ²Π°ΡŽΡ‚ особого упоминания. Π‘Π΅Π· `cmdhist` многострочная ΠΊΠΎΠΌΠ°Π½Π΄Π° (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ†ΠΈΠΊΠ» `for`, Π²Π²Π΅Π΄Ρ‘Π½Π½Ρ‹ΠΉ ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ) сохраняСтся ΠΊΠ°ΠΊ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ строки, Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΌ Π΅Ρ‘ чистоС ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅. ΠŸΡ€ΠΈ Π²ΠΊΠ»ΡŽΡ‡Ρ‘Π½Π½ΠΎΠΌ `cmdhist` ΠΈ Π·Π°Π΄Π°Π½Π½ΠΎΠΌ `lithist` вся конструкция сохраняСтся ΠΊΠ°ΠΊ Сдиная запись истории с Π±ΡƒΠΊΠ²Π°Π»ΡŒΠ½Ρ‹ΠΌΠΈ символами Π½ΠΎΠ²ΠΎΠΉ строки, сохраняя Π΅Ρ‘ структуру.

Автоматизация Ρ€Π°Π±ΠΎΡ‡ΠΈΡ… процСссов Π½Π° основС истории

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΎΡ‚Ρ‡Ρ‘Ρ‚Π° ΠΎ частотС использования ΠΊΠΎΠΌΠ°Π½Π΄

β€œ`bash

history | awk '{print $2}' | sort | uniq -c | sort -rn | head -20

β€œ`

Π­Ρ‚ΠΎ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ 20 Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… Π²Π°ΠΌΠΈ ΠΊΠΎΠΌΠ°Π½Π΄ β€” ΠΏΠΎΠ»Π΅Π·Π½ΠΎ для выявлСния ΠΊΠ°Π½Π΄ΠΈΠ΄Π°Ρ‚ΠΎΠ² Π½Π° созданиС псСвдонимов ΠΈΠ»ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ.

Аудит использования `sudo`

β€œ`bash

history | grep sudo | awk '{$1=""; print $0}'

β€œ`

Π’ срСдах с ПанСлями управлСния VPS это обСспСчиваСт быстрый Π°ΡƒΠ΄ΠΈΡ‚ ΠΏΡ€ΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ, Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π½Ρ‹Ρ… Π² Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ сСанса.

ВосстановлСниС Ρ…Ρ€ΠΎΠ½ΠΎΠ»ΠΎΠ³ΠΈΠΈ сСанса

β€œ`bash

HISTTIMEFORMAT="%Y-%m-%d %H:%M:%S " history | grep "2024-11-14"

β€œ`

Π€ΠΈΠ»ΡŒΡ‚Ρ€ΡƒΠ΅Ρ‚ всС ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹, Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π½Ρ‹Π΅ Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΡƒΡŽ Π΄Π°Ρ‚Ρƒ β€” Π½Π΅ΠΎΡ†Π΅Π½ΠΈΠΌΠΎ ΠΏΡ€ΠΈ Π°Π½Π°Π»ΠΈΠ·Π΅ послС ΠΈΠ½Ρ†ΠΈΠ΄Π΅Π½Ρ‚ΠΎΠ².

ΠšΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ тСхничСскиС Π²Ρ‹Π²ΠΎΠ΄Ρ‹ ΠΈ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Ρ‹ΠΉ список Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ

ΠŸΠ΅Ρ€Π΅Π΄ Ρ€Π°Π·Π²Ρ‘Ρ€Ρ‚Ρ‹Π²Π°Π½ΠΈΠ΅ΠΌ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ истории Bash Π² любой срСдС ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

  • `shopt -s histappend` Π·Π°Π΄Π°Π½ β€” ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΏΠΎΡ‚Π΅Ρ€ΡŽ истории ΠΈΠ·-Π·Π° пСрСзаписи ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ сСансами
  • `HISTSIZE` ΠΈ `HISTFILESIZE` ΠΎΠ±Π° настроСны β€” установка Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΎΠ³ΠΎ оставляСт Π΄Ρ€ΡƒΠ³ΠΎΠΉ со Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, вызывая Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½ΠΎΠ΅ усСчСниС
  • `HISTTIMEFORMAT` Π²ΠΊΠ»ΡŽΡ‡Ρ‘Π½ β€” Π±Π΅Π· ΠΌΠ΅Ρ‚ΠΎΠΊ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ история Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ криминалистичСской цСнности
  • `HISTCONTROL=ignoreboth` Π·Π°Π΄Π°Π½ ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ β€” сниТаСт ΡˆΡƒΠΌ ΠΈ ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ запись ΠΊΠΎΠΌΠ°Π½Π΄, связанных с ΡƒΡ‡Ρ‘Ρ‚Π½Ρ‹ΠΌΠΈ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ
  • `HISTIGNORE` ΠΈΡΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ β€” ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ высокоС ΡΠΎΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ сигнал/ΡˆΡƒΠΌ Π² истории
  • `~/.bash_history` ΠΈΠΌΠ΅Π΅Ρ‚ `chmod 600` β€” ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ истории ΠΊΠΎΠΌΠ°Π½Π΄ Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌΠΈ
  • `cmdhist` Π²ΠΊΠ»ΡŽΡ‡Ρ‘Π½ β€” обСспСчиваСт Ρ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ многострочных ΠΊΠΎΠΌΠ°Π½Π΄ ΠΊΠ°ΠΊ Π΅Π΄ΠΈΠ½Ρ‹Ρ… Π±Π»ΠΎΠΊΠΎΠ²
  • `PROMPT_COMMAND` синхронизируСт ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ β€” Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ для многосСансовых срСд
  • `auditd` Ρ€Π°Π·Π²Ρ‘Ρ€Π½ΡƒΡ‚ совмСстно β€” для производствСнных систСм, Π³Π΄Π΅ трСбуСтся Π·Π°Ρ‰ΠΈΡ‰Ρ‘Π½Π½ΠΎΠ΅ ΠΎΡ‚ ΠΏΠΎΠ΄Π΄Π΅Π»ΠΊΠΈ Π²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΆΡƒΡ€Π½Π°Π»Π°
  • Π£Ρ‡Ρ‘Ρ‚Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ ΠΊΠ°ΠΊ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ CLI β€” ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ срСды, `.netrc` ΠΈΠ»ΠΈ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Ρ‹ сСкрСтов

Часто Π·Π°Π΄Π°Π²Π°Π΅ΠΌΡ‹Π΅ вопросы

ΠŸΠΎΡ‡Π΅ΠΌΡƒ история Bash исчСзаСт послС закрытия SSH-сСанса?

ΠžΠ±Ρ‹Ρ‡Π½ΠΎ это происходит ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ `shopt -s histappend` Π½Π΅ Π·Π°Π΄Π°Π½. Π‘Π΅Π· Π½Π΅Π³ΠΎ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ сСанс пСрСзаписываСт `~/.bash_history` ΠΏΡ€ΠΈ Π²Ρ‹Ρ…ΠΎΠ΄Π΅. Если сСанс Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ Π°Π²Π°Ρ€ΠΈΠΉΠ½ΠΎ (Ρ€Π°Π·Ρ€Ρ‹Π² сСти, `kill -9`), запись Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½Π΅ происходит. Π—Π°Π΄Π°ΠΉΡ‚Π΅ `histappend` ΠΈ `PROMPT_COMMAND='history -a'` для сохранСния ΠΊΠΎΠΌΠ°Π½Π΄ Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ.

Как ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ сохранСниС ΠΏΠ°Ρ€ΠΎΠ»Π΅ΠΉ Π² истории Bash?

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π΄Π²Π° Π²Π·Π°ΠΈΠΌΠΎΠ΄ΠΎΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΡ… ΠΌΠ΅Ρ‚ΠΎΠ΄Π°: Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ ΠΏΡ€ΠΎΠ±Π΅Π» ΠΏΠ΅Ρ€Π΅Π΄ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ (Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ `HISTCONTROL=ignorespace` ΠΈΠ»ΠΈ `ignoreboth`) ΠΈ Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ ΠΊΠΎΠ½Ρ„ΠΈΠ΄Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΊΠΎΠΌΠ°Π½Π΄ Π² `HISTIGNORE`. Для долгосрочной Π³ΠΈΠ³ΠΈΠ΅Π½Ρ‹ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°ΠΉΡ‚Π΅ сСкрСты ΠΊΠ°ΠΊ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ CLI β€” ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ срСды ΠΈΠ»ΠΈ спСциализированныС инструмСнты управлСния сСкрСтами.

Π’ Ρ‡Ρ‘ΠΌ Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ `HISTSIZE` ΠΈ `HISTFILESIZE`?

`HISTSIZE` управляСт количСством ΠΊΠΎΠΌΠ°Π½Π΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Bash Ρ…Ρ€Π°Π½ΠΈΡ‚ Π² памяти Π²ΠΎ врСмя Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ сСанса. `HISTFILESIZE` управляСт количСством строк, сохраняСмых Π² `~/.bash_history` Π½Π° дискС. Оба Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Π·Π°Π΄Π°Π½Ρ‹ явно β€” большоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ `HISTSIZE` ΠΏΡ€ΠΈ ΠΌΠ°Π»ΠΎΠΌ `HISTFILESIZE` ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ история Π² сСансС богатая, Π½ΠΎ большая Π΅Ρ‘ Ρ‡Π°ΡΡ‚ΡŒ удаляСтся ΠΏΡ€ΠΈ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠΈ сСанса.

МоТно Π»ΠΈ Π²ΠΎΡΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΡƒΠ΄Π°Π»Ρ‘Π½Π½Ρ‹Π΅ записи истории?

ПослС выполнСния `history -c && history -w` Π±ΡƒΡ„Π΅Ρ€ Π² памяти очищаСтся, Π° Ρ„Π°ΠΉΠ» усСкаСтся β€” стандартноС восстановлСниС Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ. Однако Ссли ваша систСма ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ снимки Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмы ΠΈΠ»ΠΈ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ для Ρ€Π΅Π·Π΅Ρ€Π²Π½ΠΎΠ³ΠΎ копирования, прСдыдущая вСрсия `~/.bash_history` ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ восстановлСна ΠΈΠ· снимка. Π­Ρ‚ΠΎ Π΅Ρ‰Ρ‘ ΠΎΠ΄Π½Π° ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π° Π²Π½Π΅Π΄Ρ€ΠΈΡ‚ΡŒ `auditd` для Π·Π°Ρ‰ΠΈΡ‰Ρ‘Π½Π½ΠΎΠ³ΠΎ ΠΎΡ‚ ΠΏΠΎΠ΄Π΄Π΅Π»ΠΊΠΈ вСдСния ΠΆΡƒΡ€Π½Π°Π»Π° Π½Π° критичСской инфраструктурС.

Как совмСстно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ Bash Π² Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… сСансах Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π°?

Π”ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ Π² `~/.bashrc`: `shopt -s histappend` ΠΈ `PROMPT_COMMAND='history -a; history -c; history -r'`. Π­Ρ‚ΠΎ заставляСт ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ сСанс Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ послСднюю ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ Π² ΠΎΠ±Ρ‰ΠΈΠΉ Ρ„Π°ΠΉΠ» ΠΈ ΠΏΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ ΠΏΠΎΠ»Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» послС ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΡ€ΠΈΠ³Π»Π°ΡˆΠ΅Π½ΠΈΡ, прСдоставляя всСм Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΌ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π°ΠΌ Π΅Π΄ΠΈΠ½ΠΎΠ΅ прСдставлСниС истории ΠΊΠΎΠΌΠ°Π½Π΄ Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ.