Как увидеть метки времени в истории Bash?


259

Есть ли способ узнать, когда команды были выполнены из истории Bash? Мы можем увидеть заказ, но есть ли способ получить время?

Итог: время выполнения в истории Bash


7
Я поражен тем, насколько плохо документировано это как на Linux, так и на BSD в man-страницах.
Шридхар Сарнобат

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

4
если вы используете zsh:history -E
Vahid

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

2
Согласно блогу, на который ссылается @ dog0, отметка времени, очевидно, не будет сохранена, если HISTTIMEFORMATпеременная не была установлена ​​при выдаче команд. Другими словами, если он не был установлен, его установка сейчас не поможет вам получить временные метки ранее выполненных команд.
Томислав Накич-Альфиревич

Ответы:


318

Нажмите 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как они установлены для сеансов, т.е. вы не можете использовать это ретроспективно. Некоторые ответы здесь создают впечатление, что команда истории сразу показывает записи с метками времени
Луи Мэддокс,

10
@ Луис - На самом деле это сработало для меня задним числом для меня?!?!
Стефенмм

19
@Jamil: для людей, которые следуют стандартам ISO, это «% y-% m-% d» для части даты;)
Gauthier

13
@Gauthier - на самом деле, просто используйте% F для даты ISO ;-) man7.org/linux/man-pages/man3/strftime.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/


Спасибо за ответ, \ это будет постоянное изменение?
13:06

1
Эй, я делаю это в OS X и Windows (через MINGW) и добавляю это в .bash_profile, в чем разница между profile и rc?
LasagnaAndroid

18

Да, вы можете: если вы установите $HISTTIMEFORMAT, .bash-historyбудет правильно помечено время. Это не поможет с существующим .bash-historyконтентом, но поможет в будущем.


1
Вы можете расширить его для большей ясности?
13:06

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
Это, скорее всего, не будет работать для пользователей, выполняющих вход через графический интерфейс, поскольку терминал по умолчанию не будет запускать оболочки входа. /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). 2. Никто не упомянул об использовании его с некорневыми пользователями. Итак, я привел пример использования sudo. 3. 3-й пример улучшает 2-й пример добавления к существующему файлу. Поскольку новички в Linux / Unix могут решить эту проблему, я разработал.
Шашанк Агравал
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.