Linux’ta `history` Komutu: Bash Geçmişine Eksiksiz Bir Kılavuz
Linux’taki `history` komutu, bir terminal oturumunda yürütülen her komutu kaydeden, görüntüleyen ve yöneten yerleşik bir Bash kabuk yardımcı programıdır. Her kullanıcının ana dizinindeki düz metin dosyası olan `~/.bash_history`’dan okur ve bu dosyaya yazar; böylece komutları yeniden yazmadan oturumlar arasında hatırlamanıza, aramanıza, yeniden çalıştırmanıza ve denetlemenize olanak tanır.
Sistem yöneticileri ve ileri düzey kullanıcılar için Bash geçmişi yalnızca bir kolaylık özelliği değildir — operasyonel bir denetim izi, bir hata ayıklama aracı ve bir verimlilik çarpanıdır. İç işleyişini, yapılandırma değişkenlerini ve güvenlik etkilerini anlamak, sıradan kullanıcıları komut satırından maksimum değer elde eden mühendislerden ayırır.
Bash Geçmişi İçsel Olarak Nasıl Çalışır
Bir terminal oturumu açtığınızda, Bash `~/.bash_history` içeriğini bellek içi bir listeye yükler. Komutları çalıştırdıkça, bunlar bu bellek içi tampona eklenir. Oturum normal şekilde kapandığında (`exit` veya `logout` aracılığıyla), tampon ortam değişkenleriniz tarafından tanımlanan kurallara göre `~/.bash_history`’a geri yazılır.
Bu mimarinin kritik bir sonucu vardır: oturumunuz anormal şekilde sonlanırsa (güç kesintisi, SSH bağlantısı kesilmesi, `kill -9`), o oturumdaki komutlar hiçbir zaman diske yazılmayabilir. Bu, yöneticilerin kesintiye uğrayan bir oturum sırasında çalıştırılan komutların izini kaybettiğinde yaşanan yaygın bir karışıklık kaynağıdır.
İki kabuk seçeneği bu varsayılan çıkışta yazma davranışını değiştirir:
- `shopt -s histappend` — `~/.bash_history`’ın üzerine yazmak yerine yeni geçmişi ekler. Bu, çok oturumlu ortamlarda zorunludur.
- `PROMPT_COMMAND='history -a'` — Bash’i her komut isteminden sonra en son komutu geçmiş dosyasına eklemeye zorlar; gerçek zamanlı kalıcılık ve terminaller arası görünürlük sağlar.
`histappend` olmadan, son kapanan kabuk kazanır — geçmiş dosyasının üzerine yazar ve diğer tüm eş zamanlı oturumların girişlerini sessizce siler.
`history` Komutunun Temel Kullanımı
Tam Komut Geçmişini Görüntüleme
“`bash
history
“`
Saklanan komutların numaralı bir listesini çıktılar. Soldaki numara, olay belirleyicileri için kullanılan geçmiş dizinidir.
Belirli Sayıda Son Komutu Görüntüleme
“`bash
history 20
“`
Son 20 komutu gösterir. Yüzlerce girişi kaydırmadan son etkinliğe hızlıca göz atmak istediğinizde kullanışlıdır.
Mevcut Oturum Geçmişini Hemen Dosyaya Yazma
“`bash
history -w
“`
Bellek içi geçmiş tamponunun `~/.bash_history`’a anında yazılmasını zorlar. Hiçbir şeyin kaybolmamasını sağlamak için kritik bir oturumu kapatmadan önce bunu kullanın.
Dosyadan Geçmişi Mevcut Oturuma Okuma
“`bash
history -r
“`
`~/.bash_history`’ı mevcut oturumun belleğine yeniden yükler. Aynı oturum açma sırasında başka bir terminal penceresinde yazılan komutlara erişmek istediğinizde kullanışlıdır.
Komutları Hatırlama ve Yeniden Çalıştırma
`!` ile Olay Belirleyicileri
Bash’in olay belirleyici sözdizimi, geçmiş komutların referansla doğrudan yeniden çalıştırılmasına olanak tanır:
| Belirleyici | Davranış |
|---|
| — | — |
|---|
| `!!` | Hemen önceki komutu yeniden çalıştırır |
|---|
| `!n` | `n` geçmiş dizinindeki komutu çalıştırır |
|---|
| `!-n` | Mevcut konumdan `n` geriye gidilen komutu çalıştırır |
|---|
| `!string` | `string` ile başlayan en son komutu çalıştırır |
|---|
| `!?string?` | Herhangi bir yerde `string` içeren en son komutu çalıştırır |
|---|
| `!$` | Önceki komutun son argümanını kullanır |
|---|
| `!*` | Önceki komutun tüm argümanlarını kullanır |
|---|
Pratik örnek — son argümanı yeniden kullanma:
“`bash
mkdir /var/www/myproject
cd !$
“`
`!$`, `/var/www/myproject` olarak genişler ve yolu yeniden yazmanızı önler. Bu, Bash geçmişinin en az kullanılan ancak en değerli özelliklerinden biridir.
Çalıştırmadan önce önizleme:
Komutu çalıştırmadan yazdırmak için herhangi bir olay belirleyicisine `:p` ekleyin:
“`bash
!42:p
“`
Bu, üretim sunucularında çalışırken kritik bir güvenlik alışkanlığıdır. Yıkıcı komutları çalıştırmadan önce her zaman önizleyin.
Argüman Çıkarmak için Sözcük Belirleyicileri
Tüm komutları yeniden çalıştırmanın ötesinde, Bash geçmiş girişlerinden belirli argümanları çıkarmanıza olanak tanır:
“`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
“`
Bu ayrıntı düzeyi, karmaşık pipeline’lar oluştururken veya aynı dosya yollarında işlemleri tekrarlarken son derece değerlidir.
Geçmiş Gezintisi için Klavye Kısayolları
| Kısayol | Eylem |
|---|
| — | — |
|---|
| `Up Arrow` / `Ctrl+P` | Önceki komuta git |
|---|
| `Down Arrow` / `Ctrl+N` | Sonraki komuta git |
|---|
| `Ctrl+R` | Geçmişte artımlı geriye dönük arama |
|---|
| `Ctrl+S` | İleriye artımlı arama (`stty -ixon` gerektirir) |
|---|
| `Alt+.` | Önceki komutun son argümanını ekle |
|---|
| `Ctrl+G` | Mevcut geçmiş aramasını iptal et |
|---|
`Ctrl+S` hakkında not: Varsayılan olarak, `Ctrl+S` XON/XOFF akış kontrolünü tetikler ve terminali dondurur. İleriye dönük geçmiş aramasını etkinleştirmek için `~/.bashrc` dosyanıza `stty -ixon` ekleyin.
`Ctrl+R` ile Geriye Dönük Arama
“`
(reverse-i-search)`git': git commit -am "fix: resolve race condition"
“`
Bir alt dize yazın; Bash onu içeren en son komutu artımlı olarak eşleştirir. Daha eski eşleşmelere geçmek için `Ctrl+R`’e tekrar basın. Çalıştırmak için `Enter`’e, hiçbir şey çalıştırmadan iptal etmek için `Ctrl+G`’e basın.
Yüksek hacimli geçmiş aramalarında `grep` üzerinden yönlendirin:
“`bash
history | grep "docker run"
history | grep -E "^[[:space:]]+[0-9]+[[:space:]]+ssh"
“`
Geçmiş Girişlerini Düzenleme ve Yönetme
Belirli Bir Girişi Silme
“`bash
history -d 87
“`
87. dizindeki komutu bellek içi listeden kaldırır. Bunu kalıcı hale getirmek için değiştirilmiş listeyi diske geri yazmak üzere `history -w` ile devam edin.
Bir Dizi Girişi Silme
“`bash
for i in $(seq 85 90); do history -d 85; done
“`
Silme işlemi dizinleri kaydırdığından, her zaman artırmak yerine döngüde aynı dizin numarasını silin.
Tüm Bellek İçi Geçmişi Temizleme
“`bash
history -c
“`
Mevcut oturumun geçmiş tamponunu siler. Bu işlem diskteki `~/.bash_history`’a dokunmaz.
Tüm Geçmişi Tamamen Silme
“`bash
history -c && history -w
“`
Bellek içi tamponu temizler ve ardından boş tamponu `~/.bash_history`’a yazar; bu da dosyayı etkin biçimde kırpar. Bu doğru iki adımlı sıradır — yalnızca `> ~/.bash_history` kullanmak bellek içi tamponu temizlemez, bu nedenle dosya oturum çıkışında yeniden doldurulabilir.
Bash Geçmişini Yapılandırma: Ortam Değişkenleri
Tüm geçmiş davranışı, genellikle `~/.bashrc` (etkileşimli oturum açmayan kabuklar) veya `~/.bash_profile` / `~/.profile` (oturum açma kabukları) içinde ayarlanan ortam değişkenleri tarafından yönetilir. Değişiklikler dosya kaynaklandıktan sonra geçerli olur:
“`bash
source ~/.bashrc
“`
`HISTSIZE`
Etkin bir oturum sırasında bellekte kaç komutun tutulacağını kontrol eder.
“`bash
export HISTSIZE=10000
“`
Bunu `0` olarak ayarlamak bellek içi geçmişi tamamen devre dışı bırakır. Bunu `-1` olarak ayarlamak (Bash 4.3+ sürümünde) sınırsız yapar.
`HISTFILESIZE`
Diskteki `~/.bash_history` dosyasında saklanan maksimum satır sayısını kontrol eder.
“`bash
export HISTFILESIZE=20000
“`
Dosya bu sınırı aştığında, Bash en eski girişleri kırpar. Uyumluluk gerektiren ortamlar için bunu büyük bir değere ayarlayın ve günlük rotasyonuyla eşleştirin.
`HISTCONTROL`
Hangi komutların kaydedileceğine ilişkin filtreleme kurallarını belirler.
| Değer | Davranış |
|---|
| — | — |
|---|
| `ignoredups` | Ardışık yinelenen komutları atlar |
|---|
| `ignorespace` | Boşlukla başlayan komutları atlar |
|---|
| `ignoreboth` | Yukarıdakilerin ikisini birleştirir |
|---|
| `erasedups` | Yeni girişi eklemeden önce bir komutun önceki tüm oluşumlarını kaldırır |
|---|
“`bash
export HISTCONTROL=ignoreboth
“`
`ignorespace` için güvenlik kullanım senaryosu: Parola veya gizli bilgi içeren herhangi bir komutun önüne kaydedilmesini önlemek için boşluk ekleyin:
“`bash
mysql -u root -pSuperSecretPassword
“`
Bu, paylaşılan veya çok kullanıcılı sistemlerde yaygın olarak kullanılan bir operasyonel güvenlik uygulamasıdır.
`HISTTIMEFORMAT`
Her geçmiş girişine `~/.bash_history` içinde yorum satırı olarak saklanan bir zaman damgası ekler.
“`bash
export HISTTIMEFORMAT="%Y-%m-%d %H:%M:%S "
“`
Çıktı örneği:
“`
487 2024-11-14 09:32:17 systemctl restart nginx
488 2024-11-14 09:32:45 tail -f /var/log/nginx/error.log
“`
Zaman damgaları, VPS Hosting ortamlarında ve özel altyapılarda olay sonrası adli analiz için zorunludur. Bunlar olmadan *ne* çalıştırıldığını bilirsiniz ama *ne zaman* çalıştırıldığını bilemezsiniz.
`HISTIGNORE`
İki nokta üst üste ile ayrılmış glob desenleri listesi. Herhangi bir desenle eşleşen komutlar geçmişe kaydedilmez.
“`bash
export HISTIGNORE="ls:ll:la:cd:pwd:exit:clear:history"
“`
Bu, önemsiz komutların geçmişinizi kirletmesini ve arama sonuçlarını seyreltmesini önler. Joker karakterler de kullanabilirsiniz:
“`bash
export HISTIGNORE="*password*:*secret*:*token*"
“`
Bu, derinlemesine savunma önlemidir — maksimum kimlik bilgisi hijyeni için `ignorespace` ile birleştirin.
Bash Geçmişi Yapılandırma Değişkenleri: Tam Referans Tablosu
| Değişken | Varsayılan | Amaç |
|---|
| — | — | — |
|---|
| `HISTSIZE` | 500–1000 | Oturum başına bellekte tutulan komutlar |
|---|
| `HISTFILESIZE` | 500–2000 | `~/.bash_history` içinde saklanan satırlar |
|---|
| `HISTCONTROL` | (ayarlanmamış) | Kaydedilen komutlar için filtreleme kuralları |
|---|
| `HISTTIMEFORMAT` | (ayarlanmamış) | Girişlere eklenen zaman damgası biçimi |
|---|
| `HISTIGNORE` | (ayarlanmamış) | Hariç tutulacak komutlar için glob desenleri |
|---|
| `HISTFILE` | `~/.bash_history` | Geçmiş dosyasının yolu |
|---|
| `histappend` (shopt) | kapalı | Oturum çıkışında ekleme veya üzerine yazma |
|---|
Birden Fazla Terminal Oturumunda Geçmişi Paylaşma
Varsayılan olarak, her Bash oturumu kendi yalıtılmış geçmiş tamponunu korur. Terminal A’da yazılan komutlar, her iki oturum da kapanıp dosya yazılana kadar Terminal B’ye görünmez. Dedicated Servers üzerinde aynı anda birden fazla SSH oturumunu yöneten yöneticiler için bu, operasyonel kayıtta boşluklar oluşturur.
Gerçek zamanlı çapraz oturum geçmiş paylaşımı için önerilen yapılandırma:
“`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'
“`
Bu yapılandırmanın işlevi:
- `history -a` — en son komutu dosyaya ekler
- `history -c` — bellek içi tamponu temizler
- `history -r` — dosyayı belleğe yeniden yükler
Her komuttan sonra, her terminal oturumu tüm etkin oturumlardan eksiksiz ve birleşik geçmişi görür. Bunun bedeli, `PROMPT_COMMAND` çalıştırmasında uygulamada ihmal edilebilir düzeyde olan hafif bir ek yüktür.
Geçmişi Verimli Arama: Gelişmiş Teknikler
`fzf` — Bulanık Geçmiş Araması
`fzf` aracı, geçmiş aramasını doğrusal taramadan etkileşimli bulanık eşleştirme arayüzüne dönüştürür:
“`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
“`
Yapılandırıldıktan sonra, `Ctrl+R` tüm geçmişiniz üzerinde tam ekran bulanık arama açar. Bu, `grep`’ın hantal hale geldiği büyük geçmiş dosyalarında (10.000’den fazla giriş) özellikle güçlüdür.
Betik Yazımı için Geçmişi Çıkarma
“`bash
Export all unique commands containing "iptables" to a script
history | grep iptables | awk '{$1=""; print $0}' | sort -u > iptables_audit.sh
“`
Bu desen, olay müdahalesi sırasında anlık olarak çalıştırılan komutlardan çalışma kitaplarını yeniden oluşturmak için kullanışlıdır.
Bash Geçmişi için Güvenlik Değerlendirmeleri
Bash geçmişi çift taraflı bir araçtır. Meşru iş akışlarını hızlandırır, ancak aynı zamanda önemli bir saldırı yüzeyi oluşturur.
Temel riskler ve azaltma yöntemleri:
- Kimlik bilgisi ifşası: Komut satırı argümanları olarak iletilen parolalar (örn. `curl -u admin:password`) `~/.bash_history` içinde düz metin olarak saklanır. Bunun yerine `ignorespace`, `HISTIGNORE` veya ortam değişkenlerini kullanın.
- Ayrıcalık yükseltme adli analizi: Kabuk erişimi kazanan saldırganlar, ortamı anlamak, kimlik bilgilerini keşfetmek ve yüksek değerli hedefleri belirlemek için rutin olarak `~/.bash_history`’ı okur. Kısıtlayıcı izinler ayarlayın: `chmod 600 ~/.bash_history`.
- Geçmiş kurcalama: Ele geçirilmiş bir kullanıcı tüm kanıtları silmek için `history -c && history -w` çalıştırabilir. Üretim sistemlerinde denetim amacıyla, kullanıcı tarafından manipüle edilemeyen `auditd` veya `syslog` tabanlı komut günlüğünü değerlendirin.
- Root geçmişi izolasyonu: Root kullanıcısının geçmişi `/root/.bash_history` içinde saklanır. Bu dosyanın dünya tarafından okunabilir olmadığından ve yedekleme ile denetim kapsamınıza dahil edildiğinden emin olun.
PCI-DSS veya SOC 2 uyumlu altyapı gibi katı komut denetimi gerektiren ortamlar için Bash geçmişi tek başına yetersizdir. Bunu `auditd` aracılığıyla çekirdek düzeyinde denetleme ve merkezi günlük gönderimi ile eşleştirin.
Bash Geçmişi ile Alternatif Kabuk Geçmiş Sistemlerinin Karşılaştırması
| Özellik | Bash Geçmişi | Zsh Geçmişi | Fish Geçmişi |
|---|
| — | — | — | — |
|---|
| Varsayılan geçmiş dosyası | `~/.bash_history` | `~/.zsh_history` | `~/.local/share/fish/fish_history` |
|---|
| Zaman damgası desteği | `HISTTIMEFORMAT` aracılığıyla | Yerleşik | Yerleşik (YAML biçimi) |
|---|
| Yineleme işleme | `HISTCONTROL` | `HIST_IGNORE_DUPS` seçeneği | Otomatik tekilleştirme |
|---|
| Çapraz oturum paylaşımı | Manuel (`PROMPT_COMMAND`) | `INC_APPEND_HISTORY` seçeneği | Otomatik (varsayılan olarak paylaşımlı) |
|---|
| Arama arayüzü | `Ctrl+R` (doğrusal) | `Ctrl+R` (doğrusal) | Sözdizimi vurgulu, bağlam duyarlı |
|---|
| Maksimum geçmiş boyutu | `HISTFILESIZE` değişkeni | `SAVEHIST` değişkeni | Sabit sınır yok |
|---|
| Kilitleme mekanizması | Yok (yarış koşulları mümkün) | Dosya kilitleme desteklenir | SQLite destekli (atomik yazma) |
|---|
Bash geçmişinin temel sınırlaması, yerleşik kilitleme mekanizmasının olmamasıdır; bu durum, birden fazla oturum aynı anda yazma yaptığında yarış koşullarına yol açabilir. Zsh ve Fish bunu kabuk düzeyinde daha zarif biçimde ele alır.
Üretim Ortamları için Pratik Yapılandırma
Aşağıda, VPS with cPanel veya özel kontrol panelleri çalıştıranlar dahil üretim Linux sunucuları için uygun, savaş testinden geçmiş bir `~/.bashrc` geçmiş yapılandırması yer almaktadır:
“`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` ve `lithist` özellikle dikkat çekicidir. `cmdhist` olmadan, çok satırlı bir komut (etkileşimli olarak yazılan bir `for` döngüsü gibi) ayrı satırlar olarak saklanır ve temiz biçimde yeniden çalıştırılması imkânsız hale gelir. `cmdhist` etkinleştirildiğinde ve `lithist` ayarlandığında, tüm yapı gerçek yeni satırlarla tek bir geçmiş girişi olarak saklanır ve yapısı korunur.
Geçmiş Tabanlı İş Akışlarını Otomatikleştirme
Komut Frekans Raporu Oluşturma
“`bash
history | awk '{print $2}' | sort | uniq -c | sort -rn | head -20
“`
Bu, en çok kullandığınız 20 komutu ortaya çıkarır — takma ad veya kabuk fonksiyonları için aday belirlemeye yarar.
`sudo` Kullanımını Denetleme
“`bash
history | grep sudo | awk '{$1=""; print $0}'
“`
Paylaşılan VPS Control Panels ortamlarında bu, bir oturum sırasında gerçekleştirilen ayrıcalıklı işlemlerin hızlı bir denetimini sağlar.
Oturum Zaman Çizelgesini Yeniden Oluşturma
“`bash
HISTTIMEFORMAT="%Y-%m-%d %H:%M:%S " history | grep "2024-11-14"
“`
Belirli bir tarihte çalıştırılan tüm komutları filtreler — olay sonrası incelemeler sırasında son derece değerlidir.
Temel Teknik Çıkarımlar ve Karar Kontrol Listesi
Herhangi bir ortamda Bash geçmiş yapılandırması dağıtmadan önce aşağıdakileri doğrulayın:
- `shopt -s histappend` ayarlanmış — eş zamanlı oturumların birbirinin üzerine yazmasından kaynaklanan geçmiş kaybını önler
- `HISTSIZE` ve `HISTFILESIZE` her ikisi de yapılandırılmış — yalnızca birini ayarlamak diğerini varsayılan değerinde bırakır ve beklenmedik kırpmaya neden olur
- `HISTTIMEFORMAT` etkin — zaman damgaları olmadan geçmişin adli değeri yoktur
- `HISTCONTROL=ignoreboth` en azından ayarlanmış — gürültüyü azaltır ve kimlik bilgilerine yakın komutların günlüğe kaydedilmesini önler
- `HISTIGNORE` önemsiz komutları dışlar — geçmişin sinyal-gürültü oranını yüksek tutar
- `~/.bash_history` için `chmod 600` izni var — diğer kullanıcıların komut geçmişinizi okumasını önler
- `cmdhist` etkin — çok satırlı komutların tutarlı birimler olarak saklanmasını sağlar
- `PROMPT_COMMAND` geçmişi gerçek zamanlı senkronize eder — çok oturumlu ortamlar için gereklidir
- `auditd` birlikte dağıtılmış — kurcalamaya karşı korumalı günlüğün gerekli olduğu üretim sistemleri için
- Kimlik bilgileri hiçbir zaman CLI argümanı olarak iletilmez — bunun yerine ortam değişkenleri, `.netrc` veya gizli yöneticileri kullanın
Sıkça Sorulan Sorular
SSH oturumunu kapattıktan sonra Bash geçmişim neden kayboluyor?
Bu genellikle `shopt -s histappend`’ın ayarlanmamış olmasından kaynaklanır. Bu olmadan, her oturum çıkışta `~/.bash_history`’ın üzerine yazar. Oturum anormal şekilde sonlanırsa (ağ kesintisi, `kill -9`), yazma işlemi hiç gerçekleşmez. Komutları gerçek zamanlı olarak kalıcı hale getirmek için `histappend` ve `PROMPT_COMMAND='history -a'` ayarlayın.
Parolaların Bash geçmişine kaydedilmesini nasıl önlerim?
İki tamamlayıcı teknik kullanın: komutun önüne boşluk ekleyin (`HISTCONTROL=ignorespace` veya `ignoreboth` gerektirir) ve hassas komut desenlerini `HISTIGNORE`’a ekleyin. Uzun vadeli hijyen için, gizli bilgileri hiçbir zaman CLI argümanı olarak iletmeyin — ortam değişkenlerini veya özel gizli yönetim araçlarını kullanın.
`HISTSIZE` ile `HISTFILESIZE` arasındaki fark nedir?
`HISTSIZE`, Bash’in etkin bir oturum sırasında bellekte kaç komutu tutacağını kontrol eder. `HISTFILESIZE`, diskteki `~/.bash_history` dosyasında kaç satırın saklandığını kontrol eder. Her ikisi de açıkça ayarlanmalıdır — büyük bir `HISTSIZE` ile küçük bir `HISTFILESIZE` kombinasyonu, oturum içi geçmişinizin zengin olduğu ancak oturum sona erdiğinde büyük bölümünün atıldığı anlamına gelir.
Silinen geçmiş girişleri kurtarılabilir mi?
`history -c && history -w` çalıştırıldıktan sonra, bellek içi tampon temizlenir ve dosya kırpılır — standart kurtarma mümkün değildir. Ancak sisteminiz dosya sistemi anlık görüntüleri veya yedekleme çözümleri kullanıyorsa, `~/.bash_history`’ın önceki sürümü bir anlık görüntüden kurtarılabilir. Bu, kritik altyapıda kurcalamaya karşı korumalı günlük için `auditd` uygulamanın bir başka nedenidir.
Birden fazla eş zamanlı terminal oturumunda Bash geçmişini nasıl paylaşırım?
`~/.bashrc` dosyasına şunları ekleyin: `shopt -s histappend` ve `PROMPT_COMMAND='history -a; history -c; history -r'`. Bu, her oturumu en son komutunu paylaşılan dosyaya eklemeye ve her komut isteminden sonra tam dosyayı yeniden yüklemeye zorlar; böylece tüm etkin terminallere komut geçmişinin birleşik, gerçek zamanlı görünümü sağlanır.
