๊ฐœ๋ฐœ๋…ธํŠธ/Linux

[Linux] ๋ฆฌ๋ˆ…์Šค history ๋ช…๋ น์–ด ์™„์ „ ์ •๋ฆฌ: !!, !$, Ctrl+R๋กœ ํ„ฐ๋ฏธ๋„ ์ƒํ™œ ํŽธํ•ด์ง€๋Š” ๋ฒ• ๐Ÿš€

๋กœ๋กœ๋ฝœ 2026. 1. 2. 10:13

๋ฆฌ๋ˆ…์Šค history ๋ช…๋ น์–ด์™€ Ctrl+R, !!, !$ ๊ฐ™์€ ๋‹จ์ถ•ํ‚ค๋ฅผ ์ž˜ ํ™œ์šฉํ•˜๋ฉด ํ„ฐ๋ฏธ๋„์—์„œ ๋ช…๋ น์–ด ์žฌ์‚ฌ์šฉ ์†๋„๋ฅผ 3๋ฐฐ ์ด์ƒ ๋Œ์–ด์˜ฌ๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋งค๋ฒˆ ํƒ€์ดํ•‘ํ•˜๋˜ ๊ธด ๋ช…๋ น์„ “๋ถˆ๋Ÿฌ์™€์„œ ์‚ด์ง ์ˆ˜์ •”ํ•˜๋Š” ์Šต๊ด€๋งŒ์œผ๋กœ๋„ ์ƒ์‚ฐ์„ฑ์ด ํฌ๊ฒŒ ์˜ฌ๋ผ๊ฐ‘๋‹ˆ๋‹ค.

ํ„ฐ๋ฏธ๋„์ด ๋นจ๋ผ์ง€๋Š” ์ˆœ๊ฐ„: bash history๋ฅผ ‘๊ฒ€์ƒ‰ ์—”์ง„’์ฒ˜๋Ÿผ ์“ฐ๋Š” ๋ฒ•

bash history๋ฅผ ๊ฒ€์ƒ‰ ์—”์ง„์ฒ˜๋Ÿผ ํ™œ์šฉํ•ด ๊ธด ๋ช…๋ น์–ด(ssh, scp, make, find ํŒŒ์ดํ”„๋ผ์ธ)๋ฅผ ๋น ๋ฅด๊ฒŒ ์ฐพ์•„ ์žฌ์‚ฌ์šฉํ•˜๋Š” ๊ฐœ๋ฐœ์ž ์ผ๋Ÿฌ์ŠคํŠธ
AI ์ƒ์„ฑ ์ด๋ฏธ์ง€

๋ฆฌ๋ˆ…์Šค๋ฅผ ์˜ค๋ž˜ ์“ฐ๋‹ค ๋ณด๋ฉด ๋ช…๋ น์–ด๊ฐ€ ์ด์ƒํ•˜๊ฒŒ ๊ธธ์–ด์ง‘๋‹ˆ๋‹ค.
์ฒ˜์Œ์—” ls, cd ์ •๋„์˜€๋Š”๋ฐ ์–ด๋А ์ˆœ๊ฐ„๋ถ€ํ„ฐ๋Š”:

  • ssh -i ... -p ... user@host
  • scp -P ... ./build/... user@host:/some/long/path
  • make BOARD=... DEBUG=... -j8
  • find ... | grep ... | xargs ...

์ด๊ฑธ ๋งค๋ฒˆ ๋‹ค์‹œ ์น˜๋ฉด ์†๊ฐ€๋ฝ๋„ ํ”ผ๊ณคํ•˜๊ณ , ๋ฌด์—‡๋ณด๋‹ค ์˜คํƒ€๋กœ ์‹œ๊ฐ„์„ ์žƒ์Šต๋‹ˆ๋‹ค.
๊ทธ๋ž˜์„œ ๋งŽ์€ ๊ฐœ๋ฐœ์ž๋“ค์ด ์–ด๋А ์ˆœ๊ฐ„๋ถ€ํ„ฐ ๋ฐฉํ–ฅ์„ ๋ฐ”๊ฟ”์š”.

“๊ตฌ๊ธ€์—์„œ ๋‚ด๊ฐ€ ์ณค๋˜ ๋ช…๋ น์„ ์ฐพ๋Š” ๊ฒŒ ์•„๋‹ˆ๋ผ,
๋‚ด ํ„ฐ๋ฏธ๋„ ํžˆ์Šคํ† ๋ฆฌ์—์„œ ๋ฐ”๋กœ ๊บผ๋‚ด ์“ฐ์ž.”

์˜ค๋Š˜์€ history / Ctrl+R / !! / !$ ๊ฐ™์€ ํ•ต์‹ฌ๋งŒ ๋ฌถ์–ด์„œ, ์‹ค์ œ ์ž‘์—… ํ๋ฆ„ ๊ธฐ์ค€์œผ๋กœ ์ •๋ฆฌํ•ด๋ณผ๊ฒŒ์š”.


1. history์˜ ์ •์ฒด: “๋‚ด๊ฐ€ ์นœ ๋ช…๋ น์˜ ๋ชฉ๋ก”์ด ์•„๋‹ˆ๋ผ “์žฌ์‚ฌ์šฉ ์žฌ๋ฃŒ”

bash history ํ•ต์‹ฌ ์š”์•ฝ ์ธํฌ๊ทธ๋ž˜ํ”ฝ: ๋ฒˆํ˜ธ๋Š” ์žฌ์‹คํ–‰ ํ•ธ๋“ค์ด๊ณ , history โ˜ tail -n 20์œผ๋กœ ์ตœ๊ทผ ๋ช…๋ น์„ ๋น ๋ฅด๊ฒŒ ์ฐพ์œผ๋ฉฐ, ~/.bash_history์™€ HISTFILE ์ €์žฅ ๋ฐฉ์‹์„ ์„ค๋ช…
bash history ์š”์•ฝ: “๋ชฉ๋ก”์ด ์•„๋‹ˆ๋ผ “์žฌ์‚ฌ์šฉ ์žฌ๋ฃŒ” (history, tail, ~/.bash_history, HISTFILE)

๊ฐ€์žฅ ๊ธฐ๋ณธ์€ history์ž…๋‹ˆ๋‹ค.

history
 

๋ฒˆํ˜ธ์™€ ํ•จ๊ป˜ ๊ณผ๊ฑฐ ๋ช…๋ น์ด ์ญ‰ ๋‚˜์˜ค์ฃ . ์ด๋•Œ ์ค‘์š”ํ•œ ํฌ์ธํŠธ๋Š” ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค.

  • ๋ฒˆํ˜ธ๋Š” ‘๋‹ค์‹œ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ํ•ธ๋“ค’์ด๋‹ค.

์ž์ฃผ ์“ฐ๋Š” ํŒจํ„ด์€ ๋งˆ์ง€๋ง‰๋งŒ ๋ณด๋Š” ๊ฒ๋‹ˆ๋‹ค.

history | tail -n 20
 

ํžˆ์Šคํ† ๋ฆฌ๋Š” ์–ด๋”” ์ €์žฅ๋ ๊นŒ? (bash ๊ธฐ์ค€)

๋ณดํ†ต ํžˆ์Šคํ† ๋ฆฌ ํŒŒ์ผ์€ ~/.bash_history์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ธฐ๋ณธ ๋™์ž‘์€ ์ด๋ ‡์Šต๋‹ˆ๋‹ค.

  • bash๋Š” ํžˆ์Šคํ† ๋ฆฌ๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์— ์Œ“์•„๋‘๋‹ค๊ฐ€
  • ์‰˜์ด ์ข…๋ฃŒ๋  ๋•Œ HISTFILE๋กœ ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค. 

๊ทธ๋ž˜์„œ “๋‹ค๋ฅธ ํ„ฐ๋ฏธ๋„์—์„œ ์นœ ๋ช…๋ น์ด ์ง€๊ธˆ ์ฐฝ์—์„œ ๋ฐ”๋กœ ์•ˆ ๋ณด์ด๋Š”๋ฐ?” ๊ฐ™์€ ์ผ์ด ์ƒ๊น๋‹ˆ๋‹ค(๋’ค์—์„œ ํ•ด๊ฒฐ ํŒ๋„ ๋‹ค๋ฃน๋‹ˆ๋‹ค).


2. ์ œ์ผ ๋จผ์ € ์†์— ์ตํž 3์ข… ์„ธํŠธ: Ctrl+R / !! / !$

(1) Ctrl+R: ํžˆ์Šคํ† ๋ฆฌ๋ฅผ ‘๊ฒ€์ƒ‰์ฐฝ’์ฒ˜๋Ÿผ

bash์—์„œ Ctrl+R reverse-i-search๋กœ ssh ๋ช…๋ น์„ ๊ฒ€์ƒ‰ํ•˜๋Š” ํ™”๋ฉด
Ctrl+R๋กœ ํžˆ์Šคํ† ๋ฆฌ๋ฅผ ๊ฒ€์ƒ‰ํ•˜๋Š” ๋ชจ์Šต

ํ„ฐ๋ฏธ๋„์—์„œ Ctrl+R์„ ๋ˆ„๋ฅด๋ฉด ์•„๋ž˜์ฒ˜๋Ÿผ ๋ฐ”๋€๋‹ˆ๋‹ค.

(reverse-i-search)`':
 

์—ฌ๊ธฐ์„œ ํ‚ค์›Œ๋“œ๋ฅผ ์น˜๋ฉด, ๊ณผ๊ฑฐ ๋ช…๋ น์ด ์ฆ‰์‹œ ๋– ์š”.
๊ฐ™์€ ํ‚ค์›Œ๋“œ๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ๋ฉด Ctrl+R์„ ๋ฐ˜๋ณตํ•ด์„œ ๋” ๊ณผ๊ฑฐ๋กœ ๋„˜์–ด๊ฐ‘๋‹ˆ๋‹ค. 

  • ๊ทธ๋Œ€๋กœ ์‹คํ–‰: Enter
  • ๊บผ๋‚ด์„œ ์ˆ˜์ •: ํ™”์‚ดํ‘œ/ํŽธ์ง‘ํ‚ค๋กœ ๋ผ์ธ ํŽธ์ง‘ ํ›„ ์‹คํ–‰

ํ˜„์‹ค ํŒ: “์„œ๋ฒ„ ์ฃผ์†Œ”, “ํ”„๋กœ์ ํŠธ ํด๋”๋ช…”, “BOARD=”, “-P 2222” ๊ฐ™์€ ๋‚˜๋งŒ์˜ ํ‚ค์›Œ๋“œ๋ฅผ ๊ธฐ์–ตํ•ด๋‘๋ฉด Ctrl+R์€ ๊ฑฐ์˜ ์น˜ํŠธํ‚ค๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.


(2) !!: ๋ฐฉ๊ธˆ ์นœ ๋ช…๋ น ๋‹ค์‹œ ์‹คํ–‰ (sudo์™€ ์ฐฐ๋–ก)

bash์—์„œ !!์™€ sudo !!๋กœ ์ง์ „ ๋ช…๋ น์„ ์žฌ์‹คํ–‰ํ•˜๊ณ , !!:p ๋ฐ shopt -s histverify๋กœ ์‹คํ–‰ ์ „ ํ™•์ธํ•˜๋Š” ์•ˆ์ „ ์Šต๊ด€์„ ๋ณด์—ฌ์ฃผ๋Š” ํ„ฐ๋ฏธ๋„ ํ™”๋ฉด
! / sudo !!๋กœ ์ง์ „ ๋ช…๋ น ์žฌ์‹คํ–‰ + !!:p, histverify๋กœ ์•ˆ์ „ํ•˜๊ฒŒ ํ™•์ธํ•˜๊ธฐ

!!          # ์ง์ „ ๋ช…๋ น ์žฌ์‹คํ–‰
sudo !!     # ์ง์ „ ๋ช…๋ น์„ sudo๋กœ ์žฌ์‹คํ–‰
 

์˜ˆ๋ฅผ ๋“ค์–ด ๊ถŒํ•œ ๋•Œ๋ฌธ์— ์‹คํŒจํ–ˆ์„ ๋•Œ:

apt-get install some-package
# Permission denied

sudo !!

์ด ํŒจํ„ด ํ•˜๋‚˜๋งŒ์œผ๋กœ๋„ “๋‹ค์‹œ ํƒ€์ดํ•‘”์ด ํ™• ์ค„์–ด๋“ญ๋‹ˆ๋‹ค.

์•ˆ์ „ํ•˜๊ฒŒ ์“ฐ๋Š” ์Šต๊ด€(์ค‘์š”)

!! ๊ฐ™์€ ํžˆ์Šคํ† ๋ฆฌ ํ™•์žฅ์€ “๋ฐ”๋กœ ์‹คํ–‰”๋  ์ˆ˜ ์žˆ์–ด์š”.
๊ทธ๋ž˜์„œ ์•„๋ž˜ ๋‘˜ ์ค‘ ํ•˜๋‚˜๋Š” ์ถ”์ฒœํ•ฉ๋‹ˆ๋‹ค.

  • ์‹คํ–‰ ์—†์ด ๊ฒฐ๊ณผ๋งŒ ์ถœ๋ ฅ: :p(print-only) ์‚ฌ์šฉ 
!!:p
  • ํ™•์žฅ ๊ฒฐ๊ณผ๋ฅผ ํŽธ์ง‘ ๋ฒ„ํผ์— ์˜ฌ๋ ค์„œ ํ™•์ธ: histverify
shopt -s histverify

ํŠนํžˆ rm, dd, ์šด์˜ ์„œ๋ฒ„ ๋ฐฐํฌ ์Šคํฌ๋ฆฝํŠธ ๊ฐ™์€ ๊ฑด “ํ™•์ธ ํ›„ ์‹คํ–‰”์ด ์Šต๊ด€์ด๋ฉด ์‚ฌ๊ณ  ํ™•๋ฅ ์ด ํ™• ๋‚ด๋ ค๊ฐ‘๋‹ˆ๋‹ค.


(3) !$: ์ง์ „ ๋ช…๋ น์˜ “๋งˆ์ง€๋ง‰ ์ธ์ž” ์žฌ์‚ฌ์šฉ

bash์—์„œ !$๋กœ ์ง์ „ ๋ช…๋ น์˜ ๋งˆ์ง€๋ง‰ ํ† ํฐ(ํŒŒ์ผ ๊ฒฝ๋กœ/๋””๋ ‰ํ† ๋ฆฌ)์„ ๊ฐ€์ ธ์™€ vim !$, cd !$์ฒ˜๋Ÿผ ๊ธด ๊ฒฝ๋กœ๋ฅผ ์žฌ์‚ฌ์šฉํ•˜๋Š” ํ„ฐ๋ฏธ๋„
!$๋กœ ๋งˆ์ง€๋ง‰ ํ† ํฐ ์žฌ์‚ฌ์šฉํ•˜๊ธฐ: vim !$ · cd !$๋กœ ๊ธด ๊ฒฝ๋กœ ํƒ€์ดํ•‘ ์ค„์ด๊ธฐ

๊ธด ๊ฒฝ๋กœ๋ฅผ ๋‹ค์‹œ ์•ˆ ์น˜๊ฒŒ ํ•ด์ฃผ๋Š” ์นœ๊ตฌ๊ฐ€ !$์ž…๋‹ˆ๋‹ค.

cp config/default.conf /etc/myapp/config.conf
vim !$
 

๋˜๋Š”:

mkdir -p /tmp/test-long-path/project/logs
cd !$
 

“๋ฐ”๋กœ ์ „์— ์“ด ๋งˆ์ง€๋ง‰ ํ† ํฐ์„ ๋Œ์–ด์˜จ๋‹ค” ์ด ๊ฐ๊ฐ๋งŒ ์žกํ˜€๋„, ๊ธด ๊ฒฝ๋กœ ํƒ€์ดํ•‘์ด ํ™• ์ค„์–ด์š”.


3. ๋ฒˆํ˜ธ๋กœ ํŠน์ • ํžˆ์Šคํ† ๋ฆฌ ์‹คํ–‰: !๋ฒˆํ˜ธ

history ๋ชฉ๋ก ๋งจ ์•ž์— ๋ถ™์€ ๋ฒˆํ˜ธ๋กœ ํŠน์ • ๋ช…๋ น์„ ๋‹ค์‹œ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

bash history์—์„œ ๋ฒˆํ˜ธ๋ฅผ ํ™•์ธํ•œ ๋’ค !1001์ฒ˜๋Ÿผ ๋ฒˆํ˜ธ๋กœ ํŠน์ • ๋ช…๋ น์„ ๋‹ค์‹œ ์‹คํ–‰ํ•˜๊ณ , ํ•„์š”ํ•˜๋ฉด ์ˆ˜์ •ํ•ด์„œ ์žฌ์‹คํ–‰ํ•˜๋Š” ๊ณผ์ •์„ 2x2(1·2 / 3·4) 4์ปทํˆฐ์œผ๋กœ ๋ณด์—ฌ์ฃผ๋Š” ์ธํฌ๊ทธ๋ž˜ํ”ฝ
!๋ฒˆํ˜ธ๋กœ ํžˆ์Šคํ† ๋ฆฌ ์‹คํ–‰ 4์ปทํˆฐ

!1001

๋ผ๊ณ  ํ•˜๋ฉด, history ์ถœ๋ ฅ์—์„œ 1001๋ฒˆ์งธ ์ค„์— ์žˆ๋Š” ๋ช…๋ น์ด ๋‹ค์‹œ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

์‚ฌ์šฉ ํ๋ฆ„:

$ history | tail
  998  cd ~/projects/app
  999  git status
 1000  make clean
 1001  make all
 1002  ./app --config config.yaml

$ !1001
# => "make all" ์ด ๋‹ค์‹œ ์‹คํ–‰๋จ
 

์˜คํƒ€๋กœ ์ž˜๋ชป๋œ ๋ช…๋ น์„ ์น˜๊ณ  ๋‹ค์‹œ ๊ณ ์น˜๊ณ … ํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค,
“๋ฒˆํ˜ธ ์ฐ์–ด์„œ ๋‹ค์‹œ ์‹คํ–‰ + ํ•„์š”ํ•˜๋ฉด ์ˆ˜์ •”์ด ๋” ํŽธํ•  ๋•Œ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค.


4. ๊ธด ๋ช…๋ น ํŽธ์ง‘ ์†๋„๋ฅผ ์˜ฌ๋ฆฌ๋Š” ๋‹จ์ถ•ํ‚ค

ํžˆ์Šคํ† ๋ฆฌ์—์„œ ๊บผ๋‚ด์™”์œผ๋ฉด ๊ฒฐ๊ตญ “์‚ด์ง ์ˆ˜์ •”์„ ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
์ด๋•Œ ํ™”์‚ดํ‘œ๋งŒ ์“ฐ๋ฉด ์†์ด ๋„ˆ๋ฌด ๋ฉ€๋ฆฌ ๊ฐ€์š”.

bash ๋ช…๋ น์ค„ ํŽธ์ง‘ ๋‹จ์ถ•ํ‚ค ์น˜ํŠธ์‹œํŠธ(Ctrl+A, Ctrl+E, Ctrl+U, Ctrl+K ๋“ฑ)
ํ„ฐ๋ฏธ๋„ ํŽธ์ง‘ ๋‹จ์ถ•ํ‚ค ํ•ต์‹ฌ ์š”์•ฝ

์ž์ฃผ ์“ฐ๋Š” ๊ฒƒ๋งŒ ๋จผ์ €:

  • Ctrl+A ์ค„ ๋งจ ์•ž, Ctrl+E ์ค„ ๋งจ ๋
  • Alt+B / Alt+F ๋‹จ์–ด ๋‹จ์œ„ ์ด๋™
  • Ctrl+U ์ปค์„œ ์•ž ์ „๋ถ€ ์‚ญ์ œ, Ctrl+K ์ปค์„œ ๋’ค ์ „๋ถ€ ์‚ญ์ œ
  • Ctrl+W ์•ž ๋‹จ์–ด ์‚ญ์ œ, Alt+D ๋’ค ๋‹จ์–ด ์‚ญ์ œ

5. ๊ฐœ๋ฐœ์ž์šฉ history ์„ค์ • 5์ค„

~/.bashrc์— ์•„๋ž˜ ์ •๋„๋งŒ ๋„ฃ์–ด๋„ ์ฒด๊ฐ์ด ํฝ๋‹ˆ๋‹ค.

~/.bashrc์— HISTSIZE HISTCONTROL histappend HISTTIMEFORMAT์„ ์„ค์ •ํ•œ ์˜ˆ์‹œ
๊ฐœ๋ฐœ์ž์šฉ bash history ์ถ”์ฒœ ์„ค์ •

(1) ํžˆ์Šคํ† ๋ฆฌ ํฌ๊ธฐ ๋Š˜๋ฆฌ๊ธฐ

export HISTSIZE=5000
export HISTFILESIZE=10000
 

HISTSIZE๋Š” ๋ฉ”๋ชจ๋ฆฌ, HISTFILESIZE๋Š” ํŒŒ์ผ ๋ณด๊ด€๋Ÿ‰ ๊ฐœ๋…์ž…๋‹ˆ๋‹ค.

(2) ์ค‘๋ณต/๊ณต๋ฐฑ ๋ช…๋ น ์ค„์ด๊ธฐ

export HISTCONTROL=ignoredups:ignorespace
 
  • ignoredups: ์—ฐ์† ์ค‘๋ณต ์ €์žฅ ์ค„์ด๊ธฐ
  • ignorespace: ์•ž์— ๊ณต๋ฐฑ ๋ถ™์ธ ๋ช…๋ น์€ ๊ธฐ๋ก ์•ˆ ํ•จ

๋‹ค๋งŒ “๊ณต๋ฐฑ ๋ถ™์ด๋ฉด ์•ˆ์ „” ์ˆ˜์ค€์œผ๋กœ ๊ณผ์‹ ํ•˜์ง„ ๋งˆ์„ธ์š”(์Šคํฌ๋กค๋ฐฑ/๋กœ๊ทธ/๊ฐ์‚ฌ ์ •์ฑ…์€ ๋ณ„๊ฐœ์ž…๋‹ˆ๋‹ค).

(3) ์—ฌ๋Ÿฌ ํ„ฐ๋ฏธ๋„์—์„œ ๋ฎ์–ด์“ฐ๊ธฐ ๋ฐฉ์ง€: histappend

shopt -s histappend
 

์ด ์˜ต์…˜์ด ์ผœ์ง€๋ฉด bash ์ข…๋ฃŒ ์‹œ ํžˆ์Šคํ† ๋ฆฌ๋ฅผ ํŒŒ์ผ์— appendํ•ฉ๋‹ˆ๋‹ค(๋ฎ์–ด์“ฐ๊ธฐ X).

(4) ์‹œ๊ฐ„๊นŒ์ง€ ๋‚จ๊ธฐ๊ธฐ

export HISTTIMEFORMAT='%F %T '
 

์–ธ์ œ ์–ด๋–ค ๋ช…๋ น์„ ์ณค๋Š”์ง€ ์ถ”์ ์ด ์‰ฌ์›Œ์ง‘๋‹ˆ๋‹ค.

(5) ๋ฉ€ํ‹ฐ ํ„ฐ๋ฏธ๋„ “๋™๊ธฐํ™””๊ฐ€ ํ•„์š”ํ•˜๋ฉด(์˜ต์…˜)

์›ํ•˜๋ฉด history์—๋Š” ํŒŒ์ผ/๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋‹ค๋ฃจ๋Š” ์˜ต์…˜์ด ์žˆ์Šต๋‹ˆ๋‹ค. 

  • ํ˜„์žฌ ์„ธ์…˜ ๊ธฐ๋ก์„ ํŒŒ์ผ์— ์ถ”๊ฐ€: history -a
  • ํŒŒ์ผ์˜ ์ƒˆ ํ•ญ๋ชฉ์„ ํ˜„์žฌ ์„ธ์…˜์œผ๋กœ ์ฝ๊ธฐ: history -n
  • ํŒŒ์ผ ์ „์ฒด๋ฅผ ์ฝ์–ด์„œ ๋ถ™์ด๊ธฐ: history -r
  • ํŒŒ์ผ์„ ํ˜„์žฌ ์„ธ์…˜ ๊ธฐ์ค€์œผ๋กœ ๋ฎ์–ด์“ฐ๊ธฐ: history -w

“์—ฌ๋Ÿฌ ์ฐฝ์—์„œ ์นœ ๋ช…๋ น์„ ์ง€๊ธˆ ์ฐฝ์—์„œ ๋ฐ”๋กœ ๋ณด๊ณ  ์‹ถ๋‹ค”๋ฉด ์ด ์ถ•์„ ์•Œ์•„๋‘๋ฉด ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค.


6. ๋ณด์•ˆ·์•ˆ์ „: ํžˆ์Šคํ† ๋ฆฌ๋Š” ‘ํŽธํ•œ ๋งŒํผ ์œ„ํ—˜’ํ•  ์ˆ˜ ์žˆ๋‹ค

bash ํžˆ์Šคํ† ๋ฆฌ์— ํ† ํฐ·๋น„๋ฐ€๋ฒˆํ˜ธ๊ฐ€ ๋‚จ์„ ์ˆ˜ ์žˆ๋Š” ์œ„ํ—˜๊ณผ, mysql -p๋กœ ํ”„๋กฌํ”„ํŠธ ์ž…๋ ฅ์„ ์“ฐ๋Š” ์˜ˆ๋ฐฉ, history -d๋กœ ํŠน์ • ์ค„ ์‚ญ์ œ, history -w๋กœ ํŒŒ์ผ ๋ฐ˜์˜๊นŒ์ง€์˜ ํ๋ฆ„์„ Dev↔Sec ๋Œ€ํ™”
๋ณด์•ˆ·์•ˆ์ „: ํžˆ์Šคํ† ๋ฆฌ๋Š” ํŽธํ•œ ๋งŒํผ ์œ„ํ—˜, ๋…ธ์ถœ ์˜ˆ๋ฐฉ ์ •๋ฆฌ(history -d, history -w)

๊ฐ€์žฅ ํ”ํ•œ ์‚ฌ๊ณ ๋Š” ์ด๊ฒ๋‹ˆ๋‹ค.

curl "https://example.com/api?token=VERY_SECRET"
mysql -u root -pMySecretPassword
 

์ด๋Ÿฐ ๊ฑด ํžˆ์Šคํ† ๋ฆฌ ํŒŒ์ผ์— ๊ทธ๋Œ€๋กœ ๋‚จ์„ ์ˆ˜ ์žˆ์–ด์š”.
๊ทธ๋ž˜์„œ ์›์น™์€ ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค.

  • ๋น„๋ฐ€๋ฒˆํ˜ธ/ํ† ํฐ์„ ๋ช…๋ นํ–‰์— ๋ฐ•์ง€ ๋ง๊ธฐ
  • ํ•„์š”ํ•˜๋ฉด ํ”„๋กฌํ”„ํŠธ ์ž…๋ ฅ(์˜ˆ: mysql -p)
  • ์ •๋ง ์‹ค์ˆ˜๋กœ ๋‚จ๊ฒผ๋‹ค๋ฉด ์ง€์šฐ๊ธฐ

ํŠน์ • ์ค„ ์‚ญ์ œ / ํŒŒ์ผ ๋ฐ˜์˜

history | tail -n 20
history -d 1050
history -w
 

history ์˜ต์…˜๋“ค(-d, -w ๋“ฑ)์€ bash ๋‚ด์žฅ ๊ธฐ๋Šฅ์œผ๋กœ ์ •๋ฆฌ๋ผ ์žˆ์Šต๋‹ˆ๋‹ค.


๋งˆ๋ฌด๋ฆฌ: “์™ธ์šฐ๋Š” ๊ฒƒ”๋ณด๋‹ค “๋ฃจํ‹ด 5๊ฐœ”๋งŒ ๊ฐ€์ ธ๊ฐ€๋ฉด ๋ฉ๋‹ˆ๋‹ค

์ฒ˜์Œ๋ถ€ํ„ฐ ๋‹ค ์™ธ์šธ ํ•„์š” ์—†์Šต๋‹ˆ๋‹ค. ์•„๋ž˜ 5๊ฐœ๋งŒ ์†์— ๋ถ™์ด๋ฉด ํ„ฐ๋ฏธ๋„ ์†๋„๊ฐ€ ๋‹ฌ๋ผ์ ธ์š”.

  • Ctrl+R (๊ฒ€์ƒ‰)
  • !! (์ง์ „ ์žฌ์‹คํ–‰)
  • sudo !! (๊ถŒํ•œ ์—๋Ÿฌ ๋ณต๊ตฌ)
  • !$ (๋งˆ์ง€๋ง‰ ์ธ์ž ์žฌ์‚ฌ์šฉ)
  • Ctrl+A / Ctrl+E / Ctrl+U / Ctrl+K (ํŽธ์ง‘)

ํ„ฐ๋ฏธ๋„์€ ๊ฒฐ๊ตญ “๋ช…๋ น์–ด ์ง€์‹” ์‹ธ์›€์ด ์•„๋‹ˆ๋ผ, ๋‚ด๊ฐ€ ํ–ˆ๋˜ ์ž‘์—…์„ ์–ผ๋งˆ๋‚˜ ๋นจ๋ฆฌ ์žฌ์‚ฌ์šฉํ•˜๋А๋ƒ ์‹ธ์›€์ž…๋‹ˆ๋‹ค.


FAQ: ๋ฆฌ๋ˆ…์Šค history ๋ช…๋ น์–ด & ๋‹จ์ถ•ํ‚ค ๊ด€๋ จ ์ž์ฃผ ๋ฌป๋Š” ์งˆ๋ฌธ

Q1. ํ„ฐ๋ฏธ๋„์„ ์ƒˆ๋กœ ์—ด๋ฉด ๋ฐฉ๊ธˆ ์ณค๋˜ ๋ช…๋ น์ด history์— ์•ˆ ๋ณด์ด๋Š”๋ฐ์š”?
A. bash๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ “์…ธ์„ ์ข…๋ฃŒํ•  ๋•Œ” ํžˆ์Šคํ† ๋ฆฌ๋ฅผ ํŒŒ์ผ์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์—ฌ๋Ÿฌ ํ„ฐ๋ฏธ๋„์„ ๋™์‹œ์— ์—ด๋ฉด ๊ธฐ๋ก์ด ์ฆ‰์‹œ ํ•ฉ์ณ์ง€์ง€ ์•Š์„ ์ˆ˜ ์žˆ์–ด์š”.
์šฐ์„  ๋ฎ์–ด์“ฐ๊ธฐ ๋ฐฉ์ง€์šฉ์œผ๋กœ ์•„๋ž˜ ์„ค์ •์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.

shopt -s histappend

์—ฌ๋Ÿฌ ํ„ฐ๋ฏธ๋„์—์„œ “์ข€ ๋” ์ž์ฃผ” ๊ณต์œ ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด(์„ ํƒ), ํ”„๋กฌํ”„ํŠธ๊ฐ€ ๋œฐ ๋•Œ๋งˆ๋‹ค ํ˜„์žฌ ์„ธ์…˜ ๊ธฐ๋ก์„ ํŒŒ์ผ์— ์ถ”๊ฐ€ํ•˜๊ณ , ํŒŒ์ผ์˜ ์ƒˆ ๊ธฐ๋ก์„ ์ฝ์–ด์˜ค๋Š” ๋ฐฉ์‹๋„ ๋งŽ์ด ์”๋‹ˆ๋‹ค.

PROMPT_COMMAND='history -a; history -n'

Q2. history์— ์‹œ๊ฐ„๊นŒ์ง€ ๊ฐ™์ด ๋ณด์ด๊ฒŒ ํ•˜๊ณ  ์‹ถ์€๋ฐ ์–ด๋–ป๊ฒŒ ํ•˜๋‚˜์š”?
A. ~/.bashrc ๋“ฑ์— ์•„๋ž˜๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ํ„ฐ๋ฏธ๋„์„ ์ƒˆ๋กœ ์—ด๊ณ  history๋ฅผ ๋ณด๋ฉด ๋‚ ์งœ/์‹œ๊ฐ„์ด ํ•จ๊ป˜ ์ถœ๋ ฅ๋ฉ๋‹ˆ๋‹ค.

export HISTTIMEFORMAT='%F %T '
 

๊ทธ ๋‹ค์Œ ํ„ฐ๋ฏธ๋„์„ ์ƒˆ๋กœ ์—ด๊ณ  history๋ฅผ ๋ณด๋ฉด, YYYY-MM-DD HH:MM:SS ํ˜•์‹์˜ ์‹œ๊ฐ„์ด ํ•จ๊ป˜ ์ถœ๋ ฅ๋ฉ๋‹ˆ๋‹ค.


Q3. ํžˆ์Šคํ† ๋ฆฌ์—์„œ ํŠน์ • ๋‹จ์–ด๊ฐ€ ๋“ค์–ด๊ฐ„ ๋ช…๋ น๋งŒ ๋ณด๊ณ  ์‹ถ์–ด์š”.
A. history | grep๋กœ ํ•„ํ„ฐ๋งํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ๊ฒฐ๊ณผ๊ฐ€ ๋งŽ์œผ๋ฉด tail์ด๋‚˜ less๋ฅผ ๋ถ™์—ฌ์„œ ๋ณด๊ธฐ ์ข‹๊ฒŒ ์ค„์ด์„ธ์š”.

history | grep ssh
history | grep docker
history | grep "make "
history | grep ssh | tail -n 20
history | grep ssh | less

 


Q4. ๋น„๋ฐ€๋ฒˆํ˜ธ/ํ† ํฐ์ด ์ฐํžŒ ์ค„์„ ์‹ค์ˆ˜๋กœ ๋‚จ๊ฒผ์Šต๋‹ˆ๋‹ค. ์–ด๋–ป๊ฒŒ ์ง€์šฐ๋‚˜์š”?
A. ๋จผ์ € ๋ฒˆํ˜ธ๋ฅผ ํ™•์ธํ•˜๊ณ , ํ•ด๋‹น ์ค„์„ ์‚ญ์ œํ•œ ๋’ค ํŒŒ์ผ์— ๋ฐ˜์˜ํ•˜์„ธ์š”. ์—ฌ๋Ÿฌ ์ค„์„ ์ง€์šธ ๋•Œ๋Š” ์‚ญ์ œํ•˜๋ฉด์„œ ๋ฒˆํ˜ธ๊ฐ€ ๋ฐ”๋€” ์ˆ˜ ์žˆ์œผ๋‹ˆ ์ฃผ์˜๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
๊ทธ๋ฆฌ๊ณ  ๊ฐ€์žฅ ์ข‹์€ ๊ฑด ์• ์ดˆ์— ๋น„๋ฐ€๋ฒˆํ˜ธ/ํ† ํฐ์„ ๋ช…๋ นํ–‰์— ์ง์ ‘ ๋„ฃ์ง€ ์•Š๋Š” ์Šต๊ด€์ž…๋‹ˆ๋‹ค.

history | tail -n 30
history -d 1050
history -w

Q5. !!, !$ ๊ฐ™์€ history expansion์ด ๋ถˆํŽธํ•ด์„œ ๋„๊ณ  ์‹ถ์€๋ฐ ๊ฐ€๋Šฅํ•œ๊ฐ€์š”?
A. bash ๊ธฐ์ค€์œผ๋กœ๋Š” ๋‹ค์Œ์ฒ˜๋Ÿผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

set +H      # history expansion ๋„๊ธฐ
set -H      # ๋‹ค์‹œ ์ผœ๊ธฐ
set +o histexpand
set -o histexpand

Q6. zsh์—์„œ๋Š” ๋ฆฌ๋ˆ…์Šค history ๋ช…๋ น์–ด๊ฐ€ bash์™€ ๋‹ค๋ฅด๊ฒŒ ๋™์ž‘ํ•˜๋‚˜์š”?
A. ๊ธฐ๋ณธ ๊ฐœ๋…(history, !!, !$, Ctrl+R)์€ ๊ฑฐ์˜ ๋น„์Šทํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋งŒ zsh๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ์œผ๋กœ “ํ™”์‚ดํ‘œ ๊ธฐ๋ฐ˜ ํžˆ์Šคํ† ๋ฆฌ ๊ฒ€์ƒ‰” ๊ฐ™์€ ํ™•์žฅ์ด ์‰ฌ์šด ํŽธ์ด๋ผ, ๋” ํŽธํ•œ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ๋งŒ๋“ค๊ธฐ ์ข‹์Šต๋‹ˆ๋‹ค.


Q7. history๊ฐ€ ๋„ˆ๋ฌด ๊ธธ์–ด์„œ ํ”„๋ผ์ด๋ฒ„์‹œ๊ฐ€ ๊ฑฑ์ •๋ฉ๋‹ˆ๋‹ค.
A. ๋ฐฉ๋ฒ•์€ ์—ฌ๋Ÿฌ ๊ฐ€์ง€๊ฐ€ ์žˆ์–ด์š”. ํžˆ์Šคํ† ๋ฆฌ ํฌ๊ธฐ๋ฅผ ์ค„์ด๊ฑฐ๋‚˜, ๋ฏผ๊ฐํ•œ ์ค„๋งŒ ์ง€์šฐ๊ฑฐ๋‚˜, ํ•„์š”ํ•˜๋ฉด ์ „์ฒด๋ฅผ ๋น„์šฐ๋Š” ์‹์œผ๋กœ ์ƒํ™ฉ์— ๋งž๊ฒŒ ์„ ํƒํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

export HISTSIZE=500
export HISTFILESIZE=1000
export HISTCONTROL=ignoredups:ignorespace
history -d 1050
history -w
history -c
history -w

Q8. Ctrl+R์ด ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์™œ ๊ทธ๋Ÿด๊นŒ์š”?
A. ๋ณดํ†ต์€ ํ‚ค ๋ฐ”์ธ๋”ฉ(readline) ๋ฌธ์ œ์ด๊ฑฐ๋‚˜, zsh์—์„œ keymap/ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ๋‹จ์ถ•ํ‚ค๋ฅผ ๋ฎ์–ด์“ด ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค. bash๋ผ๋ฉด ๋ฐ”์ธ๋”ฉ ์ƒํƒœ๋ฅผ ์•„๋ž˜์ฒ˜๋Ÿผ ํ™•์ธํ•ด๋ณด๋ฉด ์›์ธ ํŒŒ์•…์ด ๋นจ๋ผ์š”.

bind -P | grep reverse-search