Ẩn lịch sử -diến trong lịch sử bash


14

Nếu tôi vô tình gõ mật khẩu hoặc bất cứ thứ gì nhạy cảm trong bash, tôi có thể dễ dàng xóa dòng đó history -d ROW#, nhưng tôi luôn để lại history -d ROW#lệnh trong lịch sử cho mọi người thấy ai đó đã sửa lỗi.

Tôi có thể thêm một cái gì đó vào một lệnh để ngăn nó xuất hiện trong lịch sử bash không?

Câu trả lời:


27

Để không lưu một lệnh duy nhất trong lịch sử của bạn, chỉ cần đặt trước nó bằng một khoảng trắng (được đánh dấu ở đây):

$ echo test
test
$ history | tail -n2
 3431  echo test
 3432  history | tail -n2
$ echo test2
test2
$ history | tail -n2
 3431  echo test
 3432  history | tail -n2

Hành vi này được đặt trong ~/.bashrctệp của bạn , cụ thể là trong dòng này:

HISTCONTROL=ignoreboth

man bash nói:

HISTCONTROL
Một danh sách các giá trị được phân tách bằng dấu hai chấm kiểm soát cách các lệnh được lưu trong danh sách lịch sử. Nếu danh sách các giá trị bao gồm ignorespace , dòng bắt đầu bằng một nhân vật không gian sẽ không được lưu trong danh sách lịch sử . Giá trị bỏ qua khiến các dòng khớp với mục lịch sử trước đó không được lưu. Một giá trị của ignoreboth là viết tắt cho ignorespaceignoredups .

ignoredupsnhân tiện là lý do tại sao history | tail -n2chỉ xuất hiện một lần trong lịch sử trong bài kiểm tra trên.


Lịch sử của thiết bị đầu cuối được lưu trong RAM và chuyển sang ~/.bash_historyngay khi bạn đóng thiết bị đầu cuối. Nếu bạn muốn xóa một mục cụ thể khỏi bạn, ~/.bash_historybạn có thể làm như vậy với sed:

                                   # print every line…
sed '/^exit$/!d' .bash_history     # … which is just “exit”
sed '/^history/!d' .bash_history   # … beginning with “history”
sed '/>>log$/!d' .bash_history     # … ending with “>>log”
sed '\_/path/_!d' .bash_history    # … containing “/path/” anywhere

Trong phần trước tôi đã thay đổi dấu phân cách mặc định /thành _sử dụng bên trong cụm từ tìm kiếm, trên thực tế, điều này tương đương với sed -i '/\/path\//d' .bash_history. Nếu kết quả đầu ra lệnh chỉ có dòng bạn muốn xóa thêm -ilựa chọn và thay đổi !dđể dthực hiện việc xóa:

                                   # delete every line…
sed -i '/^exit$/d' .bash_history   # … which is just “exit”
sed -i '/^history/d' .bash_history # … beginning with “history”
sed -i '/>>log$/d' .bash_history   # … ending with “>>log”
sed -i '\_/path/_d' .bash_history  # … containing “/path/” anywhere

12

Một cách sẽ là đặt HISTIGNOREbiến môi trường. Từman bash

HISTIGNORE
      A colon-separated list of patterns used to decide which  command
      lines  should  be  saved  on  the history list.  Each pattern is
      anchored at the beginning of the line and must  match  the  com‐
      plete  line  (no  implicit  `*'  is  appended).  Each pattern is
      tested against the line after the checks specified  by  HISTCON‐
      TROL  are  applied. 

[FWIW, nó là mặc định HISTCONTROLcung cấp cách giải quyết kiểu a-space-in-front-front].

Ví dụ

HISTIGNORE='history -d*'

Nếu bạn muốn nó bền bỉ, hãy xuất nó từ ~/.bashrc

export HISTIGNORE='history -d*'

6

Bạn có thể

  • Đóng (các) cửa sổ đầu cuối . Điều này sẽ xóa lịch sử mới nhất trong cửa sổ đầu cuối mà bạn đóng gần nhất (sau khi các cửa sổ khác được đóng) vào tệp/home/$USER/.bash_history

  • Chỉnh sửa tệp/home/$USER/.bash_history mà không liên quan bash, ví dụ: bằng cách bắt đầu trình chỉnh sửa yêu thích của bạn thông qua Alt+F2

    Bằng cách này bạn có thể kiểm tra toàn bộ lịch sử và loại bỏ bất kỳ lệnh nào mà bạn không còn muốn ở đó nữa.

    nhập mô tả hình ảnh ở đây

    nhập mô tả hình ảnh ở đây


1

Tôi thường sử dụng:

history -w; history -c; $EDITOR $HISTFILE; history -r

Tệp lịch sử được ghi vào đĩa, xóa trong bộ nhớ, bạn chỉnh sửa nó để làm những gì bạn muốn và sau đó tệp lịch sử bạn đã chỉnh sửa được đọc lại.

Lưu ý rằng nếu bạn chỉnh sửa lưu tệp sao lưu, từ nghịch ngợm vẫn có thể xuất hiện trên đĩa.

Một tùy chọn khác sử dụng -dlà sử dụng số lịch sử dự đoán:

startide sr> # good thing
startide sr> # bad thing
startide sr> history | tail -n 2
17239  # bad thing
17240  history | tail -n 2
startide sr> history -w; history -d 17239; history -d 17239; history -d 17239
startide sr> # other thing
startide sr> history | tail -n 3
17239  # good thing
17240  # other thing
17241  history | tail  -n 3

Trong ví dụ này, tôi xóa điều xấu, tôi xóa lệnh để lấy số lịch sử, và sau đó tôi xóa lệnh mà tôi đã sử dụng để xóa lịch sử. Mọi thứ đã được khử trùng rồi.


0

Nếu bạn muốn chạy một lệnh mà không lưu nó trong lịch sử, hãy thêm nó vào một khoảng trống thừa

prompt$ echo saved
prompt$  echo not saved \
> #     ^ extra space

Để làm việc này, bạn cần bỏ qua khoảng trống hoặc bỏ qua trong HISTCONTROL. Ví dụ: chạy

HISTCONTROL = bỏ qua không gian Để duy trì cài đặt này, hãy đặt nó vào .bashrc của bạn.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.