Kirjoittaja Aihe: Komentohistorian tiedosto hukassa ? [Ratkaistu]  (Luettu 2012 kertaa)

ajaaskel

  • Palvelimen ylläpitäjä
  • Käyttäjä
  • Viestejä: 3401
    • Profiili
Kaikkihan tietävät että päätteessä kun kirjoittelet komennon niin se tallettuu historiatiedostoon josta sen voi kutsua uudestaan vaikkapa nuolinäppäimellä ja että komentojen pitäisi tallettua ".bash_history" tiedostoon ? Noin ainakin oppikirjan mukaan.
Ok, tehdään pieni koe. Kirjoitetaan jokin höpöhöpö komennoksi jolloin sitä on helppoa etsiä, vaikkapa

Koodia: [Valitse]
abcde
Nythän tuon pitäisi löytyä tuolta ".bash_history" tiedostosta:
Koodia: [Valitse]
cat .bash_history | grep "abcde"
Hups, ei löytynytkään.  Silti tallessa eli löytyy jos painaa nuoli ylös tai kirjoittaa "history".

Poistetaanpas kokeeksi historiatiedosto kokonaan:

Koodia: [Valitse]
cp .bash_history .bash_history_old
Koodia: [Valitse]
rm .bash_history
Historianhan pitäisi olla poissa ?   Eipä olekaan.  Historia löytyy edelleen eli säilyy jossain muualla !

Mitenköhän tuo historiamekanismi on oikeasti toteutettu ?  Osaksi muistissa ja loppu levyllä ?  Tuolta se hieman näyttää kun sulkee ja uudelleen avaa päätettä kurkkien mitä on tapahtunut vaikkapa

Koodia: [Valitse]
cat .bash_history
 
« Viimeksi muokattu: 17.01.13 - klo:13.17 kirjoittanut ajaaskel »
Autamme ilolla ja ilmaiseksi omalla ajallamme.  Ethän vaadi, uhoa tai isottele näin saamasi palvelun johdosta.

Elekaz

  • Käyttäjä
  • Viestejä: 92
    • Profiili
    • Piece of code
Vs: Komentohistorian tiedosto hukassa ?
« Vastaus #1 : 17.01.13 - klo:10.34 »
Taitaa mennä niin, että .bash_history päivitetään aina kun sessio päättyy. Testasin itse näin:

1. Katsoin aikaleiman .bash_historysta, joka näytti pari päivää aikaisemmaksi
2. Avasin uuden terminaalin ja suoritin saman komennon, vieläkin sama aikaleima
3. Suljin avatun terminaalin ja katsoin auki olleesta terminaalista aikaleiman ja se oli päivittynyt,

Joten history ottanee session komennot + .bash_historysta löytyvät.

kuutio

  • Vieras
Vs: Komentohistorian tiedosto hukassa ?
« Vastaus #2 : 17.01.13 - klo:11.43 »
Taitaa mennä niin, että .bash_history päivitetään aina kun sessio päättyy.
Näin se oletuksena tekee, mutta history-tiedoston saa kyllä bashissakin päivittymään jokaisen komennon jälkeen halutessaan (joskin hieman mutkikkaammin kuin esim. zsh:ssa):
http://askubuntu.com/questions/67283/is-it-possible-to-make-writing-to-bash-history-immediate

ajaaskel

  • Palvelimen ylläpitäjä
  • Käyttäjä
  • Viestejä: 3401
    • Profiili
Vs: Komentohistorian tiedosto hukassa ?
« Vastaus #3 : 17.01.13 - klo:13.17 »
Lueskelin linkit ja näyttää selvinneen mitä tuossa tapahtuu.  Asia on kuten "Elekaz" ja "kuutio" tuossa yllä sanoivat.

Ketju näyttänee tältä:

1) Pääte käynnistetään. Tiedosto "~/.bash_history" luetaan muistiin.

2) Katseltaessa historiaa esim. "history" komennolla näytetään muistissa olevat tiedot.

2) Kun annetaan uusi komento se talletetaan vain muistissa olevaan historiaan.

3) Vasta kun pääte suljetaan kirjoitetaan sen hetkisen tiedoston loppuun vain ne komennot jotka oli annettu tässä päätteessä.

Miksi puhun "sen hetkisestä" tiedostosta ?  Koska päätteitä voi olla auki monta ja edellinen suljettu pääte on voinut tällä välin jo muuttaa historiatiedostoa.

Tuon toimintatavan voisi kuvailla toisinkin:  Historiatiedostoa käytetään alkulähtökohtana kun pääte avataan mutta tiedostoa ei ylläpidetä joka komennon jälkeen vaan vasta kun pääte suljetaan.  Kaikki päätteen aukioloaikana annetut komennot kirjoitetaan historiatiedoston jatkoksi päätteen sulkemisvaiheessa.
Hyvä tietää sillä tuo lukee aivan tuoreessa oppikirjassakin väärin.

Tuosta herää kysymys että jos meillä on kaksi päätettä auki ja tehdään jotain komentoja päätteessä A niin milläs tuon sitten saa näkyviin päätteessä B ?   Vastaus on aika yksinkertainen jos haluaa tehdä tuon siirron yhden kerran itse:  

Päätteessä A:
Koodia: [Valitse]
history -aeli kirjoitetaan heti historiatiedoston loppuun tässä päätteessä annetut komennot("-a" = append)

Päätteessä B:
Koodia: [Valitse]
history -rluetaan historiatiedosto ilman että hukataan tässä päätteessä jo annetuja komentoja

Muutakin löytyy:
Koodia: [Valitse]
history -ctyhjentää tämän päätteen muistissa olevan historian

Koodia: [Valitse]
history -wkirjoittaa historiatiedoston yli (vanhat tiedot häipyvät) sillä historialla mikä näkyy tässä päätteessä.
« Viimeksi muokattu: 17.01.13 - klo:15.18 kirjoittanut ajaaskel »
Autamme ilolla ja ilmaiseksi omalla ajallamme.  Ethän vaadi, uhoa tai isottele näin saamasi palvelun johdosta.