Làm thế nào để xem tem thời gian trong lịch sử bash?


259

Có cách nào tôi có thể thấy tại thời điểm các lệnh được thực thi từ lịch sử bash không? Chúng tôi có thể xem thứ tự nhưng có cách nào tôi có thể nhận được thời gian không?

Dòng dưới cùng: Thời gian thực hiện trong lịch sử Bash


7
Tôi ngạc nhiên về việc tài liệu này kém cả trên Linux và BSD trong các trang.
Sridhar Sarnobat


4
nếu bạn đang sử dụng zsh:history -E
Vahid

4
Không chắc chắn tại sao hai câu trả lời dưới đây cảm thấy cần phải cho bạn biết cách mở thiết bị đầu cuối ..
mwfearnley

2
Theo blog được tham chiếu bởi @ dog0, dấu thời gian rõ ràng không được lưu trừ khi HISTTIMEFORMATbiến được đặt khi lệnh được ban hành. Nói cách khác, nếu bạn chưa cài đặt, cài đặt ngay bây giờ sẽ không giúp bạn truy xuất dấu thời gian của các lệnh đã ban hành trước đó.
Tomislav Nakic-Alfirevic

Câu trả lời:


316

Nhấn Ctrl+ Alt+ Tđể mở Terminal, sau đó chạy lệnh bên dưới:

HISTTIMEFORMAT="%d/%m/%y %T "

Hoặc, để thay đổi vĩnh viễn cho người dùng hiện tại:

echo 'HISTTIMEFORMAT="%d/%m/%y %T "' >> ~/.bashrc
source ~/.bashrc

Sau đó

history

Để biết thêm thông tin, hãy xem man bash hoặc Chỉ số AZ của dòng lệnh Bash cho Linux .

Đối với các lệnh đã được chạy trước đó HISTTIMEFORMAT được đặt, thời gian hiện tại sẽ được lưu dưới dạng dấu thời gian. Các lệnh chạy sau khi HISTTIMEFORMATđược đặt sẽ có dấu thời gian thích hợp được lưu.


7
Tại sao khai báo nó với exporttrong .bash_profile? Nó là một biến chỉ được đọc bởi bash, không phải bởi các lệnh được khởi chạy từ nó, vì vậy nó không nên được xuất.
Alvaro Gutierrez Perez

71
Lưu ý rằng điều này sẽ chỉ ghi lại dấu thời gian cho các mục lịch sử mới , sau khi HISTTIMEFORMATđược đặt cho các phiên, tức là bạn không thể sử dụng hồi cứu này. Một số câu trả lời ở đây cho ấn tượng lệnh lịch sử ngay lập tức hiển thị các mục được đánh dấu thời gian
Louis Maddox

9
@Louis - Thật ra cái này có tác dụng với tôi hồi tố?!?!
stephenmm

19
@Jamil: đối với những người tuân theo tiêu chuẩn ISO, đó là "% y-% m-% d" cho phần ngày;)
Gauthier

13
@Gauthier - thực ra, chỉ cần sử dụng% F cho ngày ISO ;-) man7.org/linux/man-pages/man3/strftime.3.html
brianmearns

73

Mở terminal Ctrl+ Alt+ Tvà chạy,

HISTTIMEFORMAT="%d/%m/%y %T "

sau đó,

history

Để thay đổi vĩnh viễn, hãy làm theo các bước dưới đây,

gedit ~/.bashrc

bạn cần thêm dòng dưới đây vào tệp .bashrc và sau đó lưu nó,

export HISTTIMEFORMAT="%d/%m/%y %T "

chạy lệnh dưới đây để tập tin nguồn .bashrc,

source ~/.bashrc

Sau đó chạy historylệnh.

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

nguồn : http://www.cyberciti.biz/faq/unix-linux-bash-history-display-date-time/


Cảm ơn bạn đã trả lời, \ nó sẽ là thay đổi vĩnh viễn?
rdʒɑ

1
Xin chào, tôi đang làm điều này trong OS X và Windows (thông qua MINGW) và tôi đang thêm nó vào .bash_profile, sự khác biệt giữa hồ sơ và RC là gì?
LasagnaAndroid

18

Có, bạn có thể: nếu bạn đặt $HISTTIMEFORMAT, .bash-historysẽ được đánh dấu thời gian chính xác. Điều đó không giúp ích gì với .bash-historynội dung hiện có , nhưng sẽ giúp ích trong tương lai.


1
bạn có thể mở rộng nó cho rõ ràng hơn?
rdʒɑ

5
Sửa lỗi cho bài viết trước: Đặt HISTTIMEFORMAT cho phép hiển thị dấu thời gian ... thậm chí còn tồn tại. Sở thích của tôi là: HISTTIMEFORMAT = '% F% T' vì vấn đề không phải từ quốc gia bạn cư trú ... mọi người đều biết ngay bây giờ là mấy giờ. :)

4
Tôi đã đặt $ HISTTIMEFORMAT và tôi đã có thời gian cho ngày hôm nay ngay cả trước các lệnh của bộ này.
Yasin Okumuş

@ user491029 "... thậm chí còn tồn tại". Điều này đúng, nhưng sai lệch. Trên Ubuntu 14.04, ít nhất, nó đã bắt đầu hiển thị dấu thời gian cho tất cả các mục lịch sử sau khi tôi đã đặt HISTTIMEFORMAT, nhưng có vẻ như dấu thời gian cho bất kỳ lệnh nào chạy trước phiên hiện tại là dấu thời gian đăng nhập của phiên hiện tại.
jbobbins

1

Bạn sẽ thấy những thay đổi trong lần đăng nhập tiếp theo.

echo 'HISTTIMEFORMAT="%d/%m/%y %T "' >> ~/.bashrc

0

Để bật dấu thời gian lịch sử cho tất cả người dùng, hãy tạo tập lệnh trong /etc/profile.d:

echo 'HISTTIMEFORMAT="%Y%m%d %T "' >> /etc/profile.d/timestamp.sh

1
Điều này có thể sẽ không hoạt động đối với người dùng đăng nhập thông qua GUI, vì thiết bị đầu cuối mặc định sẽ không chạy shell đăng nhập. /etc/bash.bashrcsẽ là một nơi tốt hơn
muru

0

Tôi biết, tôi đang trả lời rất muộn, nhưng để làm điều này cho tất cả người dùng, bạn có thể tạo bất kỳ .shtệp nào trong /etc/profile.dvà thêm dòng sau vào đó:

echo 'HISTTIMEFORMAT="%Y-%m-%d %T "' >> /etc/profile.d/existing-foo-file.sh

Nếu bạn chưa đăng nhập với tư cách là rootsiêu người dùng, bạn cần sử dụng teelệnh để thực hiện việc này:

echo 'HISTTIMEFORMAT="%Y-%m-%d %T "' | sudo tee /etc/profile.d/mytimestamp.sh

Nếu bạn muốn chắp thêm vào bất kỳ tập tin hiện có nào, hãy chuyển -acờ cho teelệnh:

echo 'HISTTIMEFORMAT="%Y-%m-%d %T "' | sudo tee -a /etc/profile.d/mytimestamp.sh

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


Xin chào Shashank, Cảm ơn bạn đã thêm câu trả lời nhưng câu trả lời này khác với những người khác như thế nào? Nếu câu trả lời của bạn là hoàn toàn khác nhau thì chúng tôi rất vui khi có nó, nhưng nếu không, bạn có thể cải thiện câu trả lời hiện có.
rɑːdʒɑ

Xin chào, cảm ơn đã bình luận. Điều này khác với những người khác theo cách sau: 1. Một số người trong số họ đã đề cập về việc tạo cho tất cả người dùng nhưng không ai đề cập đến việc tạo / giải thích bất kỳ tên tệp nào trong /etc/profile.d. timestamp.shtrông rất gần với kỹ thuật (vì vậy nó tạo ra sự nhầm lẫn) vì vậy tôi đã sử dụng tên existing-foo-file.sh(khái niệm foo-bar). 2. Không ai đã đề cập về việc sử dụng nó với người dùng không root. Vì vậy, tôi đã đưa ra một ví dụ về việc sử dụng sudo. 3. Ví dụ thứ 3 cải thiện ví dụ thứ 2 về việc gắn vào tệp hiện có. Vì người mới bắt đầu sử dụng linux / unix có thể gặp phải vấn đề này, tôi đã giải thích thêm.
Shashank Agrawal
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.