Câu hỏi Chế độ ẩn danh của thiết bị đầu cuối '?


Tôi sử dụng Terminal rất nhiều, và đôi khi tôi đang chạy lệnh, không phải những thứ tôi không muốn người khác nhìn thấy, nhưng nhiều lệnh hơn nếu tôi vô tình mũi tên lên và vô tình thực hiện sẽ gây ra rất nhiều rắc rối.

Vì vậy, tôi tự hỏi nếu có, hoặc tôi có thể thực hiện, một số loại chế độ ẩn danh 'của Terminal' sẽ cho phép tôi, khi thực hiện một lệnh nhất định, ngừng ghi lại lịch sử của tôi, và sau đó chỉ bắt đầu ghi sau khi tôi thực hiện bắt đầu ghi lại lịch sử một lần nữa lệnh và thoát khỏi 'chế độ ẩn danh', hoặc tôi chỉ cần khởi động lại Terminal?

Bởi vì tôi thấy mình sau này sẽ đi và loại bỏ các công cụ từ của tôi .bash_history, khi nó sẽ dễ dàng hơn nhiều nếu tôi có thể dừng ghi âm ở đó ngay từ đầu, hoặc ít nhất là cố gắng ghi lại nó ở đâu đó mà nó sẽ không được phép, và cuối cùng sẽ không ghi lại nó.


225
2018-05-18 14:53


gốc


@Sparhawk: Cái gì?
Vâng, có lẽ bạn là hoang tưởng rằng lịch sử của bạn sẽ được đọc bởi những người khác? - Sparhawk
@ Sparhawk: Vâng, một phần là, và bên tôi không muốn vô tình thực hiện một lệnh bảo trì có thể chết người khi tôi chỉ mới bắt đầu trong tương lai! : D
Chỉ cần thêm, bạn không cần phải biện minh cho chính mình: "đó không phải là điều tôi không muốn người khác thấy". Đó cũng là một lý do hoàn toàn hợp lệ với tôi. (Đặc biệt trong thời đại và thời đại này, mọi người cố gắng làm cho bạn có vẻ tội lỗi vì có "những điều cần che giấu") - ereOn
Nếu bạn mở hai tab, thực hiện các công cụ trong tab đầu tiên, thực hiện các công cụ trong phần thứ hai, sau đó đóng thứ hai TRƯỚC KHI cái đầu tiên, chỉ có lịch sử đầu tiên có vẻ được ghi vào .bash_history. (Ubuntu 15.04 bị hủy hoại Terminal, may mắn đây là một USB sống.) - Hitechcomputergeek


Các câu trả lời:


Chạy một lệnh mà không cần đặt nó trong lịch sử:

Đơn giản chỉ cần đặt một không gian trước khi lệnh. Bash sẽ bỏ qua các lệnh với một không gian được thêm vào trước:

Thí dụ: Không gianecho "Some secret text"

Lưu ý: Điều này chỉ hoạt động nếu HISTCONTROL biến được đặt thành ignorespace hoặc là ignoreboth.


Tắt lịch sử tạm thời:

  • Chạy Không gianset +o history hoặc là Không gianshopt -uo history để tắt lịch sử.
  • Chạy set -o history hoặc là shopt -so history để bật lại.

Tắt lịch sử cho phiên hiện tại (sẽ không nhớ bất kỳ lệnh nào từ phiên):

unset HISTFILE

Lưu ý: Bạn sẽ có thể thấy các lệnh nhấn Lên cho đến khi bạn đóng terminal.


Xóa lệnh khỏi lịch sử:

Chạy Không gianhistory | grep "part of your secret command"

Nó sẽ hiển thị một danh sách các lệnh đã chạy trước đó, theo định dạng sau:

casa@portátil:~$  history | grep pkill
  302  pkill $$
  467  pkill gone-cal
  468  pkill actionaz
  500  pkill chrome
  550  pkill super

Chọn số mục nhập ở bên trái của lệnh. Bạn có thể sao chép nó bằng Ctrl+Shift+C

Chạy Không gianhistory -d <number> Ở đâu <number> là số mục nhập để xóa mục nhập.
Bạn có thể dán số đó bằng Ctrl+Shift+V


Câu trả lời thú vị khác:


260
2018-05-19 15:01



Nếu bạn dùng history -d để xóa một dòng, điều này sẽ xóa nội dung của dòng, nhưng bạn không bao giờ có thể xóa thực tế là bạn đã chạy history -d (trừ khi bạn sử dụng lần đầu set +o history trước khi chạy history -d) - AJFaraday
Nó chỉ nhắc tôi về logic siêu lệnh, đó là tất cả;) - AJFaraday
(OT) Các liên kết là một tài liệu pháp lý giúp mọi người không xuất bản điều gì đó. Lệnh cấm cấp cao cũng khiến họ không xuất bản thực tế họ bị từ chối khả năng xuất bản. Một số đối số lôgic hỏi liệu họ có thể xuất bản rằng họ đã bị từ chối khả năng xuất bản một số thông tin. Sau đó, nó trở thành một đối số theo chu kỳ. - AJFaraday
@ Helio Tôi nghĩ rằng nó tốt hơn cho người dùng để biết cách "thích hợp" để sao chép - đặc biệt là nếu họ vô tình đi và chọn một số văn bản. Tôi không chắc chắn làm thế nào để làm không gian, có thể làm rõ thêm rằng không gian là có? [Không gian] trông hơi vụng về với tôi ... - Tim
Các unset HISTFILE cách tiếp cận cũng hoạt động trở lại cho tất cả các lệnh chưa được ghi vào .bash_history chưa. - kasperd


Bạn chỉ cần xóa lịch sử của một phiên đầu cuối cụ thể bằng cách thêm lệnh history -cw sau khi làm việc. Không đóng terminal trước khi đưa ra lệnh.


39
2018-05-18 15:04



Điều này sẽ không xóa tất cả lịch sử? - Helio
Điều này sẽ chỉ xóa lịch sử của phiên thiết bị đầu cuối cụ thể đó. - Moithil Biswas


shopt -uo history nên làm tốt nhất.

Nuking the HISTFILE (et al) biến sẽ không dừng Lên lịch sử được đăng nhập, nó sẽ không đẩy nó vào đĩa. Điều này có thể hoặc có thể không phải là một điều tích cực cho bạn, nhưng cho bạn đề cập đến nó, tôi đoán bạn muốn cái gì tốt hơn. Thay đổi shopt cài đặt lịch sử dừng toàn bộ cơ chế lịch sử khỏi kích hoạt.

Bạn có thể bật lại đăng nhập bằng shopt -so history (các -s và -u được đặt và bỏ đặt tương ứng).

Lưu ý rằng bản thân lệnh có thể sẽ được ghi lại để thêm vào trước nó với một khoảng trống để ngăn nó được thêm vào lịch sử trước khi bạn xóa biến đó.


28
2018-05-19 22:00





Một cách khác để tiêu diệt shell hiện tại mà không cần đăng nhập vào tập tin lịch sử là:

kill -9 $$

Điều này gây ra bash (và có lẽ các shell khác nữa) để gửi tín hiệu SIGKILL tới chính nó, giết chết nó ngay tại chỗ và ngăn không cho nó ghi bất cứ thứ gì vào đĩa.


17
2018-05-18 15:02



a.k.a. 'Bắn mình vào đầu' :). Điều này có lợi thế mà bạn không cần phải nhớ làm bất cứ điều gì trước khi viết các lệnh. - Guido
Tôi sử dụng zsh với ghi lịch sử gia tăng, vì vậy tôi nghi ngờ điều này sẽ làm việc trong trường hợp của tôi - Wayne Werner


Để tạm thời vô hiệu hóa lịch sử lệnh cho phiên hiện tại, bạn có thể tạm thời không đặt biến môi trường HISTFILE.

unset HISTFILE

trong khi phiên đang hoạt động, bạn có thể truy cập lịch sử như bình thường, nhưng nó sẽ không được lưu vào đĩa.

Để đảo ngược trong cùng một phiên (tất cả thay đổi sẽ được ghi lại)

HISTFILE=$HOME/.bash_history

13
2018-05-21 00:12



Và liệu có một cách dễ dàng trong phiên hiện tại để đảo ngược điều này, và làm cho nó tiếp tục?
@ParanoidPanda Tôi đã thêm một lệnh để hoàn nguyên trong phiên hiện tại. - Bruni
@ParanoidPanda: Tại sao bạn cần một lệnh để thiết lập HISTFILE một lần nữa trong phiên hiện tại? Nếu bạn hoàn tác thay đổi (ngay cả sau khi chạy các lệnh bí mật), chúng sẽ được lưu vào lịch sử khi bạn thoát. - Helio
@ Helio: Ồ, không, tôi có nghĩa là một lệnh mà sau đó sẽ bắt đầu ghi lại, nhưng không lưu các lệnh mà tôi không muốn nó lưu lại.
@ParanoidPanda, Helio có vẻ là đúng về điều này vì lịch sử được lưu khi thoát. Tôi đã không cân nhắc điều đó. - Bruni


Bạn có thể sửa đổi các dòng lịch sử trong phiên trình bao hiện tại. Nếu bạn quay lại lịch sử (ví dụ: Lên hoặc là Ctrl+P) và thay đổi một dòng mà không thực hiện nó, chỉ phiên bản sửa đổi của dòng mới được lưu. Bạn có thể sửa đổi nó theo bất kỳ cách nào bạn thích; lựa chọn tốt sẽ bao gồm việc sử dụng Ctrl+U để hoàn toàn trống dòng hoặc sử dụng Esc# để đặt một # nhân vật bình luận ngay từ đầu.

Để lại đằng sau một dòng mà không thực hiện nó, hãy nhớ không để đánh Trở về (Đi vào). Những gì tôi làm là quay lại dòng mới nhất trong lịch sử qua Esc>.

(Thay vì Esc theo dõi bởi >, trong hầu hết các thiết bị đầu cuối bạn có thể giữ Alt và hãy nhấn >; cũng vậy với Esc# gợi ý ở trên.)

Chú thích: Bạn không thể sửa đổi vĩnh viễn các mục từ các phiên trước theo cách này. Những thay đổi đó sẽ không được áp dụng cho HISTFILE vào cuối phiên.


10
2018-05-20 03:24





Bạn cũng có thể tạo .bash_history chỉ đọc. Tôi sẽ làm trống tệp trước và sau đó thực hiện:

 chattr +i .bash_history

6
2018-05-21 20:46





Bạn có thể thực hiện các lệnh nhạy cảm trong một phiên màn hình, sau đó phá hủy phiên khi bạn hoàn thành.

Cách khác, bạn có thể giữ phiên màn hình đó còn sống nhưng tách ra và chỉ truy cập vào nó khi bạn thực sự muốn có thể tăng mũi tên lên các lệnh nguy hiểm khác.


5
2017-11-12 19:31