Як бачити часові позначки в історії башу?


259

Чи я можу побачити, в який час команди виконувалися з історії башів? Ми можемо бачити замовлення, але чи є спосіб, щоб я також отримав час?

Підсумок: Час виконання в історії Bash


7
Я вражений тим, наскільки погано задокументовано це як на Linux, так і на BSD в manpages.
Шрідхар Сарнобат

Перевірте цей блог - sanctum.geek.nz/arabesque/better-bash-history .
abhicantdraw

4
якщо ви використовуєте zsh:history -E
Вахід

4
Не впевнений, чому дві відповіді нижче відчувають потребу сказати вам, як відкрити термінал ..
mwfearnley

2
Згідно з блогом, на який посилається @ dog0, часові позначки timetampse, очевидно, не зберігаються, якщо HISTTIMEFORMATзмінна не була встановлена ​​при видачі команд. Іншими словами, якщо у вас його не було встановлено, його встановлення зараз не допоможе отримати часові позначки раніше виданих команд.
Томіслав Накіч-Альфіревич

Відповіді:


316

Натисніть Ctrl+ Alt+, Tщоб відкрити термінал, а потім запустіть команду нижче:

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

Або зробити зміни постійними для поточного користувача:

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

Тоді

history

Для отримання додаткової інформації див. Man bash або індекс AZ командного рядка Bash для Linux .

Для команд, які були виконані раніше, HISTTIMEFORMAT було встановлено поточний час як часова мітка. Команди, запущені після того, як HISTTIMEFORMATбуло встановлено, буде збережено належну позначку часу.


7
Навіщо це зазначати exportв .bash_profile? Це змінна, прочитана лише командою bash, а не командами, запущеними з неї, тому її не слід експортувати.
Альваро Гутьєррес Перрес

71
Зауважте, що це буде записувати лише часові позначки для нових елементів історії після того, як HISTTIMEFORMATбуде встановлено сеанси, тобто ви не можете використовувати це заднім числом. Деякі відповіді тут справляють враження, що команда історії одразу показує записи, накреслені часом
Луї Маддокс

9
@Louis - Насправді це спрацювало на мене заднім числом?!?!
stephenmm

19
@Jamil: для людей, які відповідають стандартам ISO, це "% y-% m-% d" для частини дати;)
Готьє

13
@Gauthier - фактично просто використовуйте% F для дати ISO ;-) man7.org/linux/man-pages/man3/strWeather.3.html
brianmearns

73

Відкрийте термінал Ctrl+ Alt+ Tі запустіть,

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

тоді,

history

Щоб зміни були постійними, виконайте наведені нижче дії,

gedit ~/.bashrc

вам потрібно додати рядок нижче до .bashrc-файлу, а потім зберегти його,

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

запустіть команду нижче для вихідного файлу .bashrc,

source ~/.bashrc

Після цього запустіть historyкоманду.

введіть тут опис зображення

джерело : http://www.cyberciti.biz/faq/unix-linux-bash-history-display-date-time/


Дякую за відповідь, \ чи це буде постійною зміною?
rɑːdʒɑ

1
Гей, я роблю це в OS X та Windows (через MINGW), і я додаю його у .bash_profile, чим відрізняється профіль та rc?
LasagnaAndroid

18

Так, ви можете: якщо ви встановите $HISTTIMEFORMAT, .bash-historyзаповіт буде встановлено належним чином. Це не допомагає наявному .bash-historyвмісту, але допоможе в майбутньому.


1
чи можете ви розширити його для більшої ясності?
rɑːdʒɑ

5
Виправлення попереднього допису: Налаштування HISTTIMEFORMAT дозволяє відображати часові позначки ... навіть існуючі. Мій улюблений: HISTTIMEFORMAT = '% F% T', оскільки не важливо, з якої країни ви проживаєте ... всі одразу знають, який саме час. :)

4
Я встановив $ HISTTIMEFORMAT, і я отримав часи на сьогодні ще до команд цього набору.
Ясін Окумуш

@ user491029 "... навіть існуючий". Це правда, але вводить в оману. Принаймні, на ubuntu 14.04 він починав показувати часові позначки для всіх записів історії, коли я встановив HISTTIMEFORMAT, але схоже, що часові позначки для будь-якої команди, виконаної перед поточним сеансом, були часовими позначками входу поточного сеансу.
jbobbins

1

Ви побачите зміни під час наступного входу.

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

0

Щоб увімкнути часові позначки історії для всіх користувачів, створіть сценарій у /etc/profile.d:

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

1
Це, ймовірно, не спрацює для користувачів, які входять у систему через GUI, оскільки термінал за замовчуванням не запускає оболонки входу. /etc/bash.bashrcбуло б краще місце.
муру

0

Я знаю, я відповідаю на це дуже пізно, але щоб це зробити для всіх користувачів, ви можете створити будь-який .shфайл у ньому /etc/profile.dта додати до нього наступний рядок:

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

Якщо ви не ввійшли в систему як rootабо суперпользователь, для цього вам потрібно скористатися teeкомандою:

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

Якщо ви хочете додати будь-який існуючий файл, передайте -aпрапор teeкоманді:

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

введіть тут опис зображення


Привіт Шашанку, дякую за додавання відповіді, але чим ця відповідь відрізняється від інших? Якщо ваша відповідь зовсім інша, то ми раді мати її, але якщо ні, то можна вдосконалити існуючі відповіді.
rɑːdʒɑ

Привіт, дякую за коментар. Це відрізняється від інших наступним чином: 1. Деякі з них згадували про створення для всіх користувачів, але ніхто не згадував про створення / пояснення будь-якого імені файлу в /etc/profile.d. timestamp.shвиглядає дуже близько до технічного (тому він створює плутанину), тому я використав ім'я existing-foo-file.sh(foo-bar concept). 2. Ніхто не згадував про його використання з некористувальними користувачами. Тому я наводив приклад використання sudo. 3. 3-й приклад покращує 2-й приклад додавання до вже наявного файлу. Оскільки початківці Linux / unix можуть вирішити цю проблему, я детально розробив.
Шашанк Агравал
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.