ΠΠΎΠΌΠ°Π½Π΄Π° `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'`. ΠΡΠΎ Π·Π°ΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ΅Π°Π½Ρ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ ΠΏΠΎΡΠ»Π΅Π΄Π½ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π² ΠΎΠ±ΡΠΈΠΉ ΡΠ°ΠΉΠ» ΠΈ ΠΏΠ΅ΡΠ΅Π·Π°Π³ΡΡΠΆΠ°ΡΡ ΠΏΠΎΠ»Π½ΡΠΉ ΡΠ°ΠΉΠ» ΠΏΠΎΡΠ»Π΅ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΡΠΈΠ³Π»Π°ΡΠ΅Π½ΠΈΡ, ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡ Π²ΡΠ΅ΠΌ Π°ΠΊΡΠΈΠ²Π½ΡΠΌ ΡΠ΅ΡΠΌΠΈΠ½Π°Π»Π°ΠΌ Π΅Π΄ΠΈΠ½ΠΎΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΈΡΡΠΎΡΠΈΠΈ ΠΊΠΎΠΌΠ°Π½Π΄ Π² ΡΠ΅Π°Π»ΡΠ½ΠΎΠΌ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ.
Π½Π° Π²ΡΠ΅Ρ
Ρ
ΠΎΡΡΠΈΠ½Π³ΠΎΠ²ΡΡ
ΡΡΠ»ΡΠ³Π°Ρ