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

259

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

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

rɑːdʒɑ
источник
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
DimiDak
источник
0

Чтобы включить временные метки истории для всех пользователей, создайте скрипт в /etc/profile.d:

echo 'HISTTIMEFORMAT="%Y%m%d %T "' >> /etc/profile.d/timestamp.sh
III
источник
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 могут решить эту проблему, я разработал.
Шашанк Агравал