Як знайти історію команд оболонки з моменту створення машини?


23

Я створив віртуальну машину Ubuntu пару тижнів тому і з тих пір працюю над проектами.

Тепер я хотів би знайти синтаксис деяких команд, які я набрав у терміналі тиждень тому, але я відкрив і закрив вікно терміналу та багато разів перезапустив машину.

Як я можу отримати historyкоманду повернутися до першої команди, яку я набрав після створення машини?
Або є інше місце, де всі команди зберігаються в Ubuntu?


2
Наскільки я знаю, ви не можете. Ви можете повернутися лише до тих пір, поки було встановлено буфер історії. Якщо ви запитуєте про те, який пакет ви могли б встановити, щоб нескінченно зберігати історію команд у майбутньому, можливо, вам слід переглянути своє питання.
RobotHumans

Відповіді:


26

Отримати всі команди може або не можливо. Це залежить від того, скільки команд ви виконали та як встановлено ліміт історії.

Однак ви можете бачити, що список історії зберігається тут

/home/<YOUR_USERNAME>/.bash_history

Пов’язане запитання (для обробки декількох історій оболонок):

Чи можна негайно зробити запис у .bash_history?


3
Неправда, що історія зберігається лише з одного терміналу / оболонки. Коли ви запускаєте history, він показує історію поточної оболонки як найновішу, а також історію з усіх інших оболонок (включаючи оболонки на попередніх сесіях, включаючи цикли потужності) перед цим. Усі екземпляри оболонки зберігають свою історію до .bash_historyвиходу. Жоден екземпляр не зберігає його там автоматично до цього моменту.
Елія Каган

6

За замовчуванням не існує місця, де всі команди записуються та зберігаються нескінченно, хоча ~/.bash_historyмістять останні кілька команд (якщо ви використовуєте bash, що є оболонкою за замовчуванням в Ubuntu).

Якщо ви хочете, щоб кожна команда, набрана bashзаписана назавжди , вам доведеться її налаштувати самостійно. Наприклад, ви можете помістити у свій ~/.bashrcфайл наступне, щоб увійти в файл усі команди, введені в bashоболонку ~/.command_log:

# log every command typed and when
if [ -n "${BASH_VERSION}" ]; then
    trap "caller >/dev/null || \
printf '%s\\n' \"\$(date '+%Y-%m-%dT%H:%M:%S%z')\
 \$(tty) \${BASH_COMMAND}\" 2>/dev/null >>~/.command_log" DEBUG
fi

Вищезазначене встановлює пастку DEBUG, яка виконується безпосередньо перед виконанням звичайної команди. callerВбудований використовуються для тестування чи команда в даний час , набрані в інтерактивній оболонці або запустити через що - щось подібне ~/.bashrc. Значення ${BASH_COMMAND}містить команду, яка виконується в даний час.


Хотілося б зазначити, що на macOS ця методика також реєструється update_terminal_cwdу файлі історії, що є командою, яку користувач не запускає, а автоматично запускається.
Ashish Ahuja

5

Щось, що також може вас зацікавити, - це пошук за попередньою історією команд. Ви можете скасувати пошук своєї історії в командному рядку, натиснувши Ctrl+rта ввівши літери, які ви хочете зіставити. Якщо у вас є декілька сумісних команд, натисніть Ctrl+rще раз. Щоб вийти із зворотного пошуку, натисніть Ctrl+g.

http://www.ice2o.com/bash_quick_ref.html


4

Ви можете повернутися лише до тих пір, поки встановлено обмеження вашої історії; як тільки вона досягне цієї точки, історія почне переписуватися. Однак можливо мати більший розмір історії на майбутнє. Помістіть це у свій .bashrc та вкажіть значення (у мене встановлено значення 1000):

export HISTSIZE=1000
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.