Vaatimus on kaapata komentorivihistoria tiedostoon, jossa on tietty päivämäärä ja aika komennoilla, kun ne suoritettiin.

Alla oleva komentosarja tallentaa historiaan päivämäärän ja kellonajan, mutta määrittää myös nykyisen päivämäärän ja kellonajan vanhemmille komennoille. Haluan myös laajentaa komentosarjaa ottamaan osittaisen varmuuskopion historiatiedostosta.

#!/bin/bash . ~/.bash_profile HISTFILE=~/.bash_history set -o history history >/home/user/hist_`date "+%d%b%y%T"` 

Kommentit

  • Älä ' älä käytä tähän shell-historiaa. Käytä kirjanpitoa tai sudoa (ja kirjaa sudo-komentoja).
  • Kuinka kirjanpitoa tai sudoa käytetään tiedostojen historian sieppaamiseen
  • sudo voidaan määrittää sieppaamaan sen historia (ja jopa tty-tulos ) tiedostoon (tai syslogin kautta). Mitä tarkoitat " kirjanpidolla "?
  • @SunLynx, katso Miten kirjaat kaikki kirjoitetut komennot

Vastaa

Ei aivan mitä halusi, mutta voit saada bash lisätä aikaleimat jokaiselle historian riville automaattisesti. Yksinkertaisesti määritä esimerkillesi:

HISTTIMEFORMAT="%d%b%y%T " 

history -komento ilman argumentteja näyttää sitten historiatietosi näin:

23Jul1515:48:14 ls -ld . 

history -w -komento kirjoittaa kuitenkin aina historiatiedoston sisäisessä muodossa :

#1437659315 ls -ld . 

ts kahdella rivillä ensimmäinen rivi pitää ajan sekunteina ”aikakaudesta lähtien” (eli 1. tammikuuta 1970) # edessä, jotta sitä ei sekoiteta komentoon.

Kommentit

  • Haluan kaapata historiaa päivittäin, yllä oleva komentosarja toimii, mutta se määrittää nykyisen päivämäärän kaikille komennoille. Jokaisen komennon jälkeen generoidaan myös yksi numero, jota en halua ' halua. Jos joku voi auttaa, siitä on todella hyötyä.
  • En tiedä mitä tarkoitat " yksi numero tuottaa ". Voisitko muokata alkuperäistä kysymystäsi esimerkillä haettavista tiedostoista ja niiden sisällöstä?
  • 598 05Jul15 00: 00: 01less .bash_history 599 05Jul15 00: 00: 01 # 1435987168 600 05Jul15 00: 00: 01man rsync 601 05Jul15 00: 00: 01 # 1435988263 602 05Jul15 00: 00: 01ls -lrt / srv / cloud- * 603 05Jul15 00: 00: 01 # 1435988281 604 05Jul15 00: 00: 01crontab -l 605 05Jul15 00: 00: 01 # 1435988290 606 05Jul15 00: 00: 01kissa /srv/cloud-user_hist.sh
  • kuten tämä viesti synnyttää
  • tätä on vaikea lukea kommentista. poista kommenttisi ja muokkaa kysymystä , jonka kirjoitit alun perin.

Vastaa

Bashissa on vaihtoehto, joka kehottaa bashia tallentamaan aikaleiman jokaisen komennon kanssa. Teet tämän määrittämällä hyödyllisen arvon ympäristömuuttujalle HISTTIMEFORMAT. bash -sivulta:

Jos tämä muuttuja on asetettu eikä nolla, sen arvoa käytetään format string for strftime(3) tulostaaksesi aikaleiman, joka liittyy jokaisen sisäänrakennetun historian näyttämään historiatiedoon. Jos tämä muuttuja on asetettu, aikaleimat kirjoitetaan historiatiedostoon, jotta ne voidaan säilyttää shell-istunnoissa. Tämä käyttää historiakommenttimerkkiä erottamaan aikaleimat muista historiariveistä.

Ympäristössä käytän

HISTTIMEFORMAT="%s (%H:%M:%S):" 

Jotta komennot voidaan lajitella helposti (%s on aikaleima sekunneissa) ja ihmisen luettavissa. Kun kirjoitan komentotulkkiin history, näen jotain seuraavaa:

3 1437664568 (17:16:08):man bash 4 1437664699 (17:18:19):history 

EDIT: OPs question ei ole täysin vastattu.

Haluan myös laajentaa komentosarjaa ottamaan osittaisen varmuuskopion historian tulostetiedostosta

En ole varma, mitä tarkoitat historiatiedoston ”inkrementaalisella varmuuskopioinnilla”. Ehkä haluat yksinkertaisesti, että historia varmuuskopioidaan säännöllisesti. Voit tehdä muutaman lähestymistavan:

  • Määritä PROMPT_COMMAND-muuttuja history -a -toiminnolla päivittääksesi historiakomennon jatkuvasti jokaisen kutsun jälkeen (toisin kuin uloskirjautumisen odottamista).
  • Trap DEBUG signaali määrittelemälläsi toiminnolla. Joka kerta, kun komento syötetään, toiminto kutsutaan. Funktion sisällä voit tehdä kaiken. (Hieman luotettavampi kuin PROMPT_COMMAND).
  • cronjob ajoittain kopioimiseksi / arkistoimiseksi historiatiedosto.

Kommentit

  • Kiitos ehdotuksista, mutta olen ' testannut yllä. Voitteko kertoa tarkemmin historiasta -a. Shell-komentosarja toimii hyvin, mutta väärät aikaleimat.Tämä on yksi ongelma ja toinen on yksi numero jokaisen komennon jälkeen, joka alkaa numerolla #. esimerkiksi # 1435987168.
  • Historiatiedoston #1435987168 on aikaleima ! On olemassa muutama tapa muuntaa se käyttäjäystävälliseksi muodoksi, mukaan lukien: lataa historiatiedosto bash-tiedostoon history -n _filename_ ja sitten history . Tai voit tehdä jotain tällaista: perl -lane '{ /^#(\d+)$/&&print "#".localtime($1) or print;}' $HISTFILE näyttääksesi historian ja aikaleimat. Joten ' luultavasti aikaleimat ovat oikein, mutta onko sinulla kieli- tai aikavyöhykeongelma?
  • Selvitä history -a ?? Man-sivu on hieman harhaanjohtava. Se lisää nykyisen istuntohistorian tiedostoon, jonka $ HISTFILE on määrittänyt. Seuraavat puhelut lisäävät edellisen kutsun jälkeen luodun historian (se ei korvaa ' t koko tiedostoa uudestaan ja uudestaan)

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *