ฉันกำลังทำงานบนเป้าหมาย x86 ที่ใช้งาน fedora 9
เมื่อใดก็ตามที่ฉันรีบูตประวัติของฉันกลับสู่สถานะบางอย่างและฉันไม่มีคำสั่งที่ฉันทำในเซสชันก่อนที่จะรีบูต
ฉันต้องเปลี่ยนอะไรเพื่อให้มีการอัปเดตประวัติที่ฉันมีก่อนรีบูต
ฉันกำลังทำงานบนเป้าหมาย x86 ที่ใช้งาน fedora 9
เมื่อใดก็ตามที่ฉันรีบูตประวัติของฉันกลับสู่สถานะบางอย่างและฉันไม่มีคำสั่งที่ฉันทำในเซสชันก่อนที่จะรีบูต
ฉันต้องเปลี่ยนอะไรเพื่อให้มีการอัปเดตประวัติที่ฉันมีก่อนรีบูต
คำตอบ:
ประวัติศาสตร์ใด ทุบตีประวัติศาสตร์? หากคุณสูญเสียประวัติทุบตีและคุณมีหลายครั้งในแต่ละครั้งนั่นเป็นเพราะแต่ละเซสชันกำลังเขียนทับประวัติของเซสชันอื่น
คุณอาจต้องการบอกให้ทุบตีว่าจะไม่เขียนทับประวัติในแต่ละครั้ง คุณสามารถทำได้โดยการปรับเปลี่ยน .bashrc shopt -s histappend
ของคุณทำงาน
นอกจากนี้คุณยังสามารถเพิ่มขนาดไฟล์ประวัติของคุณโดยการส่งออก HISTSIZE ให้เป็นตัวเลขขนาดใหญ่ (มีหน่วยเป็นไบต์ดังนั้น 100,000 ควรมีมากมาย)
HISTSIZE
คือจำนวนคำสั่งที่ต้องจำไม่ใช่จำนวนไบต์
ฉันกำลังทุกข์ทรมานจากปัญหาเดียวกัน - แต่.bashrc
ไฟล์ของฉันมีshopt -s histappend
และถูกต้องHISTFILE
แล้วHISTSIZE
, HISTFILESIZE
.
สำหรับฉันปัญหาคือ.bash_history
ไฟล์ของฉันเป็นของrootแทนที่จะเป็นชื่อผู้ใช้ของฉันดังนั้นผู้ใช้ของฉันจะไม่สามารถบันทึกลงในไฟล์นั้นเมื่อออก
sudo chmod your_user_name .bash_history
ทำมัน! ขอบคุณ
sudo chown user_name:user_name ~.bash_history
แก้ไขมัน!
ค้นหาตัวแปรสภาพแวดล้อม HISTFILE, HISTSIZE, HISTFILESIZE
ฉันได้เขียนสคริปต์สำหรับการตั้งค่าไฟล์ประวัติต่อเซสชั่นหรืองานของมันขึ้นอยู่กับต่อไปนี้
# write existing history to the old file
history -a
# set new historyfile
export HISTFILE="$1"
export HISET=$1
# touch the new file to make sure it exists
touch $HISTFILE
# load new history file
history -r $HISTFILE
ไม่จำเป็นต้องบันทึกทุกคำสั่งประวัติ แต่จะบันทึกคำสั่งที่ฉันสนใจและง่ายต่อการดึงข้อมูลจากนั้นจะผ่านทุกคำสั่ง เวอร์ชันของฉันยังแสดงรายการไฟล์ประวัติทั้งหมดและให้ความสามารถในการค้นหาไฟล์ทั้งหมด
แหล่งที่มาเต็มรูปแบบ: https://github.com/simotek/scripts-config/blob/master/hiset.sh
ฉันเขียนบางบรรทัดใน. bashrc ซึ่งทำสิ่งต่อไปนี้สำเร็จ: บันทึกทุกเซสชันหลังจากแต่ละคำสั่งไปยังไฟล์ จะมีไฟล์ประวัติมากเท่าที่คุณเริ่มเทอร์มินัล ในการเริ่มต้นเทอร์มินัลใหม่ที่เริ่มต้นจากไฟล์ประวัติล่าสุดจะโหลดไฟล์ประวัติทั้งหมดจากเซสชันก่อนหน้าลงในบัฟเฟอร์ประวัติจนกระทั่งถึงเกณฑ์การนับบรรทัด
HISTCONTROL=''
HISTFOLDER=~/.bash_histories
HISTFILEEXT=history # only files in $HISTFOLDER with this extension will be read
shopt -s histappend # append when closing session
mkdir -p $HISTFOLDER
HISTFILE=$HISTFOLDER/$(date +%Y-%m-%d_%H-%M-%S_%N).$HISTFILEEXT # create unique file name for this session. Nanoseconds seems to be unique enough, try: for ((i=0; i<=10; i++)); do date +%Y-%m-%d_%H-%M-%S_%N; done
# if HISTFILE unset, history is not saved on exit -> not really necessary if we save after each command, but its a double net safety
HISTSIZE=-1 # maximum number of commands to hold inside bash history buffer
HISTFILESIZE=-1 # maximum number of lines in history file
# history -a $HISTFILE # bash saves the total history commands entered since startup or since the last save and saves that amount of commands to the file. This means reading a history file after typing commands will trip up bash, but this won't be a problem if the history file is only loaded in the beginning. This means that only new commands are saved not all the old loaded commands, thereby we can load as many history files into the buffer as we want and still only save newly thereafter typed commands
PROMPT_COMMAND="history -a $HISTFILE; $PROMPT_COMMAND" # This command is executed after very typed command -> save history after each command instead after only closing the session
# Load old histories from last 5 files/sessions
HISTLINESTOLOAD=2000
# --reverse lists newest files at first
names=($(ls --reverse $HISTFOLDER/*.$HISTFILEEXT 2>/dev/null))
toload=()
linecount=0
# Check if is really file and count lines and only append to $toload if linecount under $HISTLINESTOLOAD
for fname in ${names[*]}; do
if test -f $fname; then
linecount=$((linecount+$(wc -l < $fname) ))
if test $linecount -ge $HISTLINESTOLOAD; then
break
fi
toload+=($fname)
fi
done
# Beginning with the oldest load files in $toload into bash history buffer
for (( i=${#toload[*]}-1; i>=0; i-- )); do
history -r ${toload[$i]}
done
ฉันจะมั่นใจได้ว่า. bash_history มีอยู่จริง หากไม่เป็นเช่นนั้นก็จะไม่มีการทุบตีบันทึกประวัติคำสั่ง
หาก. bash_history ไม่มีอยู่ให้สร้างขึ้นโดยเรียกใช้ touch:
touch ~/.bash_history
นี่เป็นเพียงการสร้างไฟล์. bash_history ที่ว่างเปล่าในโฮมไดเร็กตอรี่ของคุณ, ซึ่งจะเติมคำสั่งของคุณ, และควรคงอยู่ระหว่างเซสชัน
อินสแตนซ์ Amazon EC2 Ubuntu ของฉันไม่ได้บันทึกประวัติ .bashrc
มีคำสั่งที่จำเป็นทั้งหมดตามที่ระบุไว้ในคำตอบอื่น ๆ แต่สิ่งเดียวที่ขาดหายไปคือไฟล์ ฉันต้องแตะมันเพื่อให้มันใช้งานได้
touch ~/.bash_history
คำตอบที่ดีสำหรับคำถามนี้อยู่ที่นี่:
http://linuxcommando.blogspot.com/2007/11/keeping-command-history-across-multiple.html