розташування файлу історії виводу файлу оболонки


13

Де зберігає bash shell фактичний термінальний сеанс? Я хочу прочитати вихід команд, які я використовував раніше. Все, що я можу знайти googling, - це збереження виводу команди.

Оскільки вихід відображається на екрані, його потрібно зберігати десь у будь-якому місці. Тож моє запитання: куди?

Відповіді:


11

Bash зберігає лише історію команд, які ви виконували (які ви можете отримати, ввівши history). Якщо ви вже не встановили кількість прокрутки на дуже високе число, немає способу побачити виходи, старші встановленого значення прокрутки. Також встановлення цього значення на дуже високе число зробить вашу прокрутку млявою, оскільки рядки зберігаються в пам'яті .

Для зберігання майбутніх команд та їх результатів є кілька варіантів:

Використання screen

Почніть сеанс на екрані , ввівши screen. Після того, як ви перебуваєте на внутрішньому екрані, натисніть Ctrl- a, а :потім введіть log. Всі введення-виведення будуть записані у screenlogфайли в каталозі, де ви запустили screenкоманду.

Використання script

Почати можна, ввівши script. Сценарій сесії розпочнеться , що фіксуватиме всі операції введення / виводу в файл з ім'ям typescript. Ви можете вийти з scriptсеансу шляхом Ctrl- d і переглянути журнали у typescriptфайлі.

Використання tee

трійник - це зручний інструмент. Ви можете зробити щось подібне:

$ bash | tee log.txt

Це відкриє нову оболонку bash всередині тієї, яку ви вже запустите. Коли ви exitвиходите з цього, ви можете бачити виходи у файлі під назвоюlog.txt

Інші способи

Як запропонував Дастін Кіркленд у цій публікації, ви також можете використовувати byobu . Хоча, я ніколи не використовував, інструменти екранізації терміналів, такі як Shelr, також звучать як варіант.


6

Є багато питань, пов’язаних з цим, але всі вони починаються з (правильного) припущення, що вихід не записаний.

Тож моє запитання: куди?

Ніде: вихід Bash (і будь-яка інша оболонка, про яку я знаю) не записується.

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

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

Однак, напевно, він не увійшов до файлу, принаймні не оболонкою, і я не знаю термінальних емуляторів, які за замовчуванням реєструють вихід у файл.

Дійсно, це не означає, що неможливо зареєструвати вихідний термінал: спочатку я згадаю щось, про що я думаю, що мало хто знає, оскільки я ніколи не бачив, щоб хтось згадував про це хоча б тут на Ask Ubuntu: Konsole дозволяє зберегти прокрутка до файлу (можливо, є й інші емулятори терміналів, які забезпечують таку функціональність, Konsole - єдиний, про кого я знаю), хоча це обмежено обмеженням розміру прокрутки Konsole.

Однак це часто не дуже корисно, і, швидше за все, ви захочете розглянути "належні" рішення, щоб записати висновок цілого сеансу у файл ( Як я реєструю весь вхід і вихід у сеансі терміналу? Та відповідь Рона ).


1

Існує команда, названа як скрипт, якщо її не встановити, то apt-get install scriptце зробить.

Потім у терміналі просто введіть скрипт.

і робіть все, що завгодно, після того, як ви закінчите, просто введіть exit і тоді у вашому поточному каталозі буде створений файл із усією інформацією stdout та stdin.

сподіваюся, що тобі це допоможе.


Пакет NA в ubuntu 18.04
markroxor

1

Це не має нічого спільного з вашою оболонкою ( bash), це не особливість емулятора терміналу, який ви використовуєте. Він зберігається у "буфері прокрутки" вашого терміналу. Я не змогла знайти чітких пояснень, де саме це зберігається, але особистий досвід показав мені, що він десь зберігається /tmp.

Як підказує відповідь на вищезазначене питання, він, швидше за все, зберігається у безіменному файлі. Щоб побачити, що я маю на увазі, відкрийте новий файл із текстовим редактором:

gedit newfile

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

rm newfile

Оскільки файл все ще відкритий gedit, ви можете продовжувати його писати. Ви навіть можете записати в нього кілька гігабайт даних, незважаючи на те, що файл видалено. Це тому, що при видаленні файлу просто видаляється посилання, що вказує на його inode . Якщо його дескриптор файлів відкритий іншою програмою, до нього можна записати дані, зневажаючи той факт, що більше немає фактичної посилання (файлу), що відповідає дескриптору файлів у файловій системі.

Все це означає, що історія вашого терміналу, ймовірно, зберігається за допомогою такого трюку десь у видаленому файлі в /tmp. Напевно, ви хочете насправді просто збільшити розмір буфера прокрутки вашого емулятора терміналу, щоб ви могли просто прокрутити вгору і побачити його. Деталі, як це зробити, залежать від емулятора терміналу, який ви використовуєте. Більшість мають перемикач командного рядка, який дозволяє вам це, і багато інших також мають спосіб його налаштування. Наприклад, у gnome-terminal(за умовчанням для Ubuntu) це Правка -> Налаштування -> Профілі --- натисніть на ваш профіль -> Редагувати -> Прокрутка -> Обмежити прокрутку до NNN:

екран опцій gnome-terminal


Цікаве розуміння. Огляд більш тривалої історії в терміналі - це не те, що я хочу, хоча: я хочу мати доступ до терміналу до терміналу, тобто все, що там написано
Із

@ DanielBöckenhoff, то ви, мабуть, хочете, scriptяк описано у прийнятій відповіді.
тердон

Звичайно. Я прийняв це :)
Даніель Бьокенхофф

-2

Сеанс терміналу зберігається у .bash_historyфайлі. Введіть це у свій термінал echo $HISTFILE, це дасть вам шлях до .bash_historyфайлу.


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