New post for revisiting terminal session history with both input and output.
This commit is contained in:
@ -8,7 +8,7 @@ showToc: true
|
||||
TocOpen: false
|
||||
draft: false
|
||||
hidemeta: false
|
||||
description: "Learn about running a quick automation that turns rows in your Google Sheets and plugs it into a Google [Slide](2024-02-26_slide.md) template to easily share more attractive content."
|
||||
description: "Learn about running a quick automation that turns rows in your Google Sheets and plugs it into a Google Slide template to easily share more attractive content."
|
||||
disableHLJS: true # to disable highlightjs
|
||||
disableShare: false
|
||||
disableHLJS: false
|
||||
@ -27,6 +27,7 @@ cover:
|
||||
relative: false
|
||||
hidden: true
|
||||
---
|
||||
|
||||
# Overview
|
||||
|
||||
Recently, my wife needed help in sharing weekly content with a group of people. The original way this group was sharing
|
||||
@ -61,6 +62,7 @@ screenshots of what this looks like for my example:
|
||||

|
||||
|
||||

|
||||
<img src="./img/google_slides_for_scripts_example.png" alt="Example image">
|
||||
|
||||
## Sheets Setup
|
||||
|
||||
|
||||
89
content/posts/save_terminal_to_file.md
Normal file
89
content/posts/save_terminal_to_file.md
Normal file
@ -0,0 +1,89 @@
|
||||
---
|
||||
title: "How to Revisit your Terminal Session's History"
|
||||
date: 2024-03-19T11:00:53-04:00
|
||||
tags: ["cli", "terminal", "documentation"]
|
||||
author: "Me"
|
||||
showToc: true
|
||||
TocOpen: false
|
||||
draft: false
|
||||
hidemeta: false
|
||||
description: 'Go beyond zsh/bash_history and save both your commands and the output to a file for later review! This command will help any homelabber that struggles with documentation for their network and services.'
|
||||
disableHLJS: true # to disable highlightjs
|
||||
disableShare: false
|
||||
disableHLJS: false
|
||||
hideSummary: false
|
||||
searchHidden: true
|
||||
ShowReadingTime: true
|
||||
ShowBreadCrumbs: true
|
||||
ShowPostNavLinks: true
|
||||
ShowWordCount: true
|
||||
ShowRssButtonInSectionTermList: true
|
||||
UseHugoToc: true
|
||||
cover:
|
||||
image: "<image path/url>"
|
||||
alt: "<alt text>"
|
||||
caption: "<text>"
|
||||
relative: false
|
||||
hidden: true
|
||||
---
|
||||
|
||||
I can't believe I didn't know about this command beforehand. When I first got into self-hosting and homelabbing, one of the app ideas I had that would help me with internal documentation is a terminal program that saves your input and output to a file for you to review later and extract the key commands you used. I also had the bonus idea that you could add comments as you were writing out commands.
|
||||
|
||||
Little did I know at the time that comments from the CLI were already possible! I've already begun using comments which has been helpful if I need to look back at my `zsh_history` file. Here's an example of a command I would use with my docker services.
|
||||
|
||||
```bash
|
||||
docker logs {container_name} --since 5m ;: The container is failing 5 minutes after startup.
|
||||
```
|
||||
|
||||
{{< box info >}}
|
||||
You can write comments in `bash` and `powershell` as well!
|
||||
* Powershell: `rem`
|
||||
* ZSH: `;:`
|
||||
* Bash: `#`
|
||||
{{< /box >}}
|
||||
|
||||
Turns out, I don't need a fancy app to log the input/output of a terminal session! It exists in most unix based systems already and the command is simply this: `script`. That's it!
|
||||
|
||||
Unlike `.zsh_history` or `.bash_history` which only saves the commands you input into the terminal, `script` will save both your commands _and_ it's output. Why didn't I know about this before I started setting up my homelab?!
|
||||
|
||||
The next time I want to setup a new service or debug something on a server, I will now make sure I start my session with `script {date}-{service_name}.txt` and then start writing out commands. As long as I can remember to write my inline comments during the session, looking back and trying to figure out what I was thinking at the time should be a breeze! I can dump these files into my internal wiki as placeholders. Then, ideally, I'll remove the commands that lead me down a dead end, clean up and expand comments, and easily keep my wiki growing. Ideally being the key word here... I'll take a dump of history files for the time being.
|
||||
|
||||
Either way, I will literally have the output of my brain when doing CLI work in a file. Incredible.
|
||||
|
||||
Here's a quick overview about script, taken from `man script`.
|
||||
|
||||
```bash
|
||||
SCRIPT(1)
|
||||
|
||||
NAME
|
||||
script – make typescript of terminal session
|
||||
|
||||
SYNOPSIS
|
||||
script [-aeFkqr] [-t time] [file [command ...]]
|
||||
script -p [-deq] [-T fmt] [file]
|
||||
|
||||
DESCRIPTION
|
||||
The script utility makes a typescript of everything printed on your terminal. It is useful for students who need a hardcopy record of an interactive session as proof of an assignment, as the typescript file can be
|
||||
printed out later with lpr(1).
|
||||
|
||||
If the argument file is given, script saves all dialogue in file. If no file name is given, the typescript is saved in the file typescript.
|
||||
|
||||
If the argument command is given, script will run the specified command with an optional argument vector instead of an interactive shell.
|
||||
```
|
||||
|
||||
<style>
|
||||
.box-shortcode {
|
||||
color: #e8e8e8;
|
||||
border: none;
|
||||
}
|
||||
.post-content img {
|
||||
margin: auto
|
||||
}
|
||||
details {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
border: none;
|
||||
background: transparent;
|
||||
box-shadow: none;
|
||||
}
|
||||
</style>
|
||||
@ -13,7 +13,7 @@
|
||||
<link>/posts/google_scripts_sheets_to_slides.html</link>
|
||||
<pubDate>Sun, 25 Feb 2024 10:14:30 -0500</pubDate>
|
||||
<guid>/posts/google_scripts_sheets_to_slides.html</guid>
|
||||
<description>Learn about running a quick automation that turns rows in your Google Sheets and plugs it into a Google [Slide](2024-02-26_slide.md) template to easily share more attractive content.</description>
|
||||
<description>Learn about running a quick automation that turns rows in your Google Sheets and plugs it into a Google Slide template to easily share more attractive content.</description>
|
||||
</item>
|
||||
<item>
|
||||
<title>BirdNET-PI & HomeAssistant: Part 2</title>
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
<html lang="en" dir="auto">
|
||||
|
||||
<head>
|
||||
<meta name="generator" content="Hugo 0.123.3"><meta charset="utf-8">
|
||||
<meta name="generator" content="Hugo 0.123.8"><meta charset="utf-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
||||
<meta name="robots" content="index, follow">
|
||||
@ -136,6 +136,18 @@
|
||||
</footer>
|
||||
</article>
|
||||
|
||||
<article class="post-entry">
|
||||
<header class="entry-header">
|
||||
<h2 class="entry-hint-parent">How to Revisit your Terminal Session's History
|
||||
</h2>
|
||||
</header>
|
||||
<div class="entry-content">
|
||||
<p>I can’t believe I didn’t know about this command beforehand. When I first got into self-hosting and homelabbing, one of the app ideas I had that would help me with internal documentation is a terminal program that saves your input and output to a file for you to review later and extract the key commands you used. I also had the bonus idea that you could add comments as you were writing out commands....</p>
|
||||
</div>
|
||||
<footer class="entry-footer"><span title='2024-03-19 11:00:53 -0400 EDT'>March 19, 2024</span> · 3 min · 481 words · Me</footer>
|
||||
<a class="entry-link" aria-label="post link to How to Revisit your Terminal Session's History" href="./posts/save_terminal_to_file.html"></a>
|
||||
</article>
|
||||
|
||||
<article class="post-entry">
|
||||
<header class="entry-header">
|
||||
<h2 class="entry-hint-parent">Google Sheets to Slides with Scripts: an Automation
|
||||
@ -211,20 +223,6 @@ The best way to do this is by just type e from any screen in the HomeAssistant U
|
||||
<footer class="entry-footer"><span title='2023-10-04 10:35:23 -0400 EDT'>October 4, 2023</span> · 10 min · 1986 words · Me</footer>
|
||||
<a class="entry-link" aria-label="post link to BirdNET-PI & HomeAssistant: Part 2" href="./posts/birdnet_homeassistant_part2.html"></a>
|
||||
</article>
|
||||
|
||||
<article class="post-entry">
|
||||
<header class="entry-header">
|
||||
<h2 class="entry-hint-parent">Creating a BirdNetPi Dashboard in HomeAssistant - Part 1
|
||||
</h2>
|
||||
</header>
|
||||
<div class="entry-content">
|
||||
<p>This is Part One of a Two Part Series. You can find Part Two, here.
|
||||
Update: 10/11/2023. A huge thanks to Mastodon User e_mobile2014 who found a broken link in this guide and pointed out that I never explained how to get the mqtt sensors into HomeAssistant!
|
||||
What you will need BirdNET-Pi HomeAssistant AppDaemon MQTT Broker (I use Mosquitto) Background In early 2023, at the height of the Raspberry Pi shortage I felt like a king with an extra Rpi laying around, not being used....</p>
|
||||
</div>
|
||||
<footer class="entry-footer"><span title='2023-09-30 11:21:55 -0400 EDT'>September 30, 2023</span> · 12 min · 2484 words · Me</footer>
|
||||
<a class="entry-link" aria-label="post link to Creating a BirdNetPi Dashboard in HomeAssistant - Part 1" href="./posts/birdnet_homeassistant.html"></a>
|
||||
</article>
|
||||
<footer class="page-footer">
|
||||
<nav class="pagination">
|
||||
<a class="next" href="./page/2.html">Next »
|
||||
|
||||
@ -6,14 +6,21 @@
|
||||
<description>Recent content on Norm-working Packets 💾</description>
|
||||
<generator>Hugo -- gohugo.io</generator>
|
||||
<language>en-us</language>
|
||||
<lastBuildDate>Sun, 25 Feb 2024 10:14:30 -0500</lastBuildDate>
|
||||
<lastBuildDate>Tue, 19 Mar 2024 11:00:53 -0400</lastBuildDate>
|
||||
<atom:link href="/index.xml" rel="self" type="application/rss+xml" />
|
||||
<item>
|
||||
<title>How to Revisit your Terminal Session's History</title>
|
||||
<link>/posts/save_terminal_to_file.html</link>
|
||||
<pubDate>Tue, 19 Mar 2024 11:00:53 -0400</pubDate>
|
||||
<guid>/posts/save_terminal_to_file.html</guid>
|
||||
<description>Go beyond zsh/bash_history and save both your commands and the output to a file for later review! This command will help any homelabber that struggles with documentation for their network and services.</description>
|
||||
</item>
|
||||
<item>
|
||||
<title>Google Sheets to Slides with Scripts: an Automation</title>
|
||||
<link>/posts/google_scripts_sheets_to_slides.html</link>
|
||||
<pubDate>Sun, 25 Feb 2024 10:14:30 -0500</pubDate>
|
||||
<guid>/posts/google_scripts_sheets_to_slides.html</guid>
|
||||
<description>Learn about running a quick automation that turns rows in your Google Sheets and plugs it into a Google [Slide](2024-02-26_slide.md) template to easily share more attractive content.</description>
|
||||
<description>Learn about running a quick automation that turns rows in your Google Sheets and plugs it into a Google Slide template to easily share more attractive content.</description>
|
||||
</item>
|
||||
<item>
|
||||
<title>QuickHits: OpenResty and Package Updates</title>
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
<html lang="en" dir="auto">
|
||||
|
||||
<head>
|
||||
<meta name="generator" content="Hugo 0.123.3"><meta charset="utf-8">
|
||||
<meta name="generator" content="Hugo 0.123.8"><meta charset="utf-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
||||
<meta name="robots" content="index, follow">
|
||||
@ -102,6 +102,20 @@
|
||||
</header>
|
||||
<main class="main">
|
||||
|
||||
<article class="post-entry">
|
||||
<header class="entry-header">
|
||||
<h2 class="entry-hint-parent">Creating a BirdNetPi Dashboard in HomeAssistant - Part 1
|
||||
</h2>
|
||||
</header>
|
||||
<div class="entry-content">
|
||||
<p>This is Part One of a Two Part Series. You can find Part Two, here.
|
||||
Update: 10/11/2023. A huge thanks to Mastodon User e_mobile2014 who found a broken link in this guide and pointed out that I never explained how to get the mqtt sensors into HomeAssistant!
|
||||
What you will need BirdNET-Pi HomeAssistant AppDaemon MQTT Broker (I use Mosquitto) Background In early 2023, at the height of the Raspberry Pi shortage I felt like a king with an extra Rpi laying around, not being used....</p>
|
||||
</div>
|
||||
<footer class="entry-footer"><span title='2023-09-30 11:21:55 -0400 EDT'>September 30, 2023</span> · 12 min · 2484 words · Me</footer>
|
||||
<a class="entry-link" aria-label="post link to Creating a BirdNetPi Dashboard in HomeAssistant - Part 1" href="../posts/birdnet_homeassistant.html"></a>
|
||||
</article>
|
||||
|
||||
<article class="post-entry">
|
||||
<header class="entry-header">
|
||||
<h2 class="entry-hint-parent">Pushing a Single Local Git Repo to Multiple Remote Repos
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
<html lang="en" dir="auto">
|
||||
|
||||
<head>
|
||||
<meta name="generator" content="Hugo 0.123.3"><script src="/livereload.js?mindelay=10&v=2&port=1313&path=livereload" data-no-instant defer></script><meta charset="utf-8">
|
||||
<meta name="generator" content="Hugo 0.123.8"><script src="/livereload.js?mindelay=10&v=2&port=1313&path=livereload" data-no-instant defer></script><meta charset="utf-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
||||
<meta name="robots" content="index, follow">
|
||||
@ -11,6 +11,7 @@
|
||||
<meta name="description" content="A semi-technical blog & series of experiences working in tech and my homelab">
|
||||
<meta name="author" content="Norm Rasmussen">
|
||||
<link rel="canonical" href="//localhost:1313/">
|
||||
<script defer data-domain="selfhosted.rsmsn.co" src="https://analytics.rsmsn.co/js/script.js"></script>
|
||||
<link crossorigin="anonymous" href="../assets/css/stylesheet.b609c58d5c11bb90b1a54e04005d74ad1ddf22165eb79f5533967e57df9c3b50.css" integrity="sha256-tgnFjVwRu5CxpU4EAF10rR3fIhZet59VM5Z+V9+cO1A=" rel="preload stylesheet" as="style">
|
||||
<link rel="icon" href="//localhost:1313/favicon.ico">
|
||||
<link rel="icon" type="image/png" sizes="16x16" href="//localhost:1313/favicon-16x16.png">
|
||||
@ -101,6 +102,20 @@
|
||||
</header>
|
||||
<main class="main">
|
||||
|
||||
<article class="post-entry">
|
||||
<figure class="entry-cover"><img loading="lazy" src="//localhost:1313/hugo-nginx-trouble.png" alt="Hugo Logo, Nginx Logo, Tired Face emoji">
|
||||
</figure>
|
||||
<header class="entry-header">
|
||||
<h2 class="entry-hint-parent">Trouble Hosting Hugo with Nginx
|
||||
</h2>
|
||||
</header>
|
||||
<div class="entry-content">
|
||||
<p>Intro For the last 3 days, I have been spending a few hours after working trying to figure out why my brand new Hugo site was not loading correctly on my sub-domain. For context, I use Nginx to host all my apps and servers, most of them using reverse proxy protocols such as $proxy_host, $forward_scheme, and $port. There are a few more and I’m happy to share some reverse proxy nginx config files....</p>
|
||||
</div>
|
||||
<footer class="entry-footer"><span title='2023-09-20 11:33:22 -0400 EDT'>September 20, 2023</span> · 5 min · 888 words · Me</footer>
|
||||
<a class="entry-link" aria-label="post link to Trouble Hosting Hugo with Nginx" href="//localhost:1313/posts/hosting_hugo_troubles.html"></a>
|
||||
</article>
|
||||
|
||||
<article class="post-entry">
|
||||
<header class="entry-header">
|
||||
<h2 class="entry-hint-parent">Tutorial: Move from NginxProxyManager to Nginx
|
||||
|
||||
@ -108,6 +108,18 @@
|
||||
</h1>
|
||||
</header>
|
||||
|
||||
<article class="post-entry">
|
||||
<header class="entry-header">
|
||||
<h2 class="entry-hint-parent">How to Revisit your Terminal Session's History
|
||||
</h2>
|
||||
</header>
|
||||
<div class="entry-content">
|
||||
<p>I can’t believe I didn’t know about this command beforehand. When I first got into self-hosting and homelabbing, one of the app ideas I had that would help me with internal documentation is a terminal program that saves your input and output to a file for you to review later and extract the key commands you used. I also had the bonus idea that you could add comments as you were writing out commands....</p>
|
||||
</div>
|
||||
<footer class="entry-footer"><span title='2024-03-19 11:00:53 -0400 EDT'>March 19, 2024</span> · 3 min · 481 words · Me</footer>
|
||||
<a class="entry-link" aria-label="post link to How to Revisit your Terminal Session's History" href="./posts/save_terminal_to_file.html"></a>
|
||||
</article>
|
||||
|
||||
<article class="post-entry">
|
||||
<header class="entry-header">
|
||||
<h2 class="entry-hint-parent">Google Sheets to Slides with Scripts: an Automation
|
||||
@ -183,20 +195,6 @@ The best way to do this is by just type e from any screen in the HomeAssistant U
|
||||
<footer class="entry-footer"><span title='2023-10-04 10:35:23 -0400 EDT'>October 4, 2023</span> · 10 min · 1986 words · Me</footer>
|
||||
<a class="entry-link" aria-label="post link to BirdNET-PI & HomeAssistant: Part 2" href="./posts/birdnet_homeassistant_part2.html"></a>
|
||||
</article>
|
||||
|
||||
<article class="post-entry">
|
||||
<header class="entry-header">
|
||||
<h2 class="entry-hint-parent">Creating a BirdNetPi Dashboard in HomeAssistant - Part 1
|
||||
</h2>
|
||||
</header>
|
||||
<div class="entry-content">
|
||||
<p>This is Part One of a Two Part Series. You can find Part Two, here.
|
||||
Update: 10/11/2023. A huge thanks to Mastodon User e_mobile2014 who found a broken link in this guide and pointed out that I never explained how to get the mqtt sensors into HomeAssistant!
|
||||
What you will need BirdNET-Pi HomeAssistant AppDaemon MQTT Broker (I use Mosquitto) Background In early 2023, at the height of the Raspberry Pi shortage I felt like a king with an extra Rpi laying around, not being used....</p>
|
||||
</div>
|
||||
<footer class="entry-footer"><span title='2023-09-30 11:21:55 -0400 EDT'>September 30, 2023</span> · 12 min · 2484 words · Me</footer>
|
||||
<a class="entry-link" aria-label="post link to Creating a BirdNetPi Dashboard in HomeAssistant - Part 1" href="./posts/birdnet_homeassistant.html"></a>
|
||||
</article>
|
||||
<footer class="page-footer">
|
||||
<nav class="pagination">
|
||||
<a class="next" href="./posts/page/2.html">Next »
|
||||
|
||||
@ -7,7 +7,7 @@
|
||||
<meta name="robots" content="index, follow">
|
||||
<title>Google Sheets to Slides with Scripts: an Automation | Norm-working Packets 💾</title>
|
||||
<meta name="keywords" content="google, scripts, sheets">
|
||||
<meta name="description" content="Learn about running a quick automation that turns rows in your Google Sheets and plugs it into a Google [Slide](2024-02-26_slide.md) template to easily share more attractive content.">
|
||||
<meta name="description" content="Learn about running a quick automation that turns rows in your Google Sheets and plugs it into a Google Slide template to easily share more attractive content.">
|
||||
<meta name="author" content="Me">
|
||||
<link rel="canonical" href="../posts/google_scripts_sheets_to_slides.html">
|
||||
<script defer data-domain="selfhosted.rsmsn.co" src="https://analytics.rsmsn.co/js/script.js"></script>
|
||||
@ -29,7 +29,7 @@
|
||||
|
||||
</style>
|
||||
</noscript><meta property="og:title" content="Google Sheets to Slides with Scripts: an Automation" />
|
||||
<meta property="og:description" content="Learn about running a quick automation that turns rows in your Google Sheets and plugs it into a Google [Slide](2024-02-26_slide.md) template to easily share more attractive content." />
|
||||
<meta property="og:description" content="Learn about running a quick automation that turns rows in your Google Sheets and plugs it into a Google Slide template to easily share more attractive content." />
|
||||
<meta property="og:type" content="article" />
|
||||
<meta property="og:url" content="/posts/google_scripts_sheets_to_slides.html" />
|
||||
<meta property="og:image" content="/%3Cimage%20path/url%3E" /><meta property="article:section" content="posts" />
|
||||
@ -39,7 +39,7 @@
|
||||
<meta name="twitter:card" content="summary_large_image" />
|
||||
<meta name="twitter:image" content="/%3Cimage%20path/url%3E" />
|
||||
<meta name="twitter:title" content="Google Sheets to Slides with Scripts: an Automation"/>
|
||||
<meta name="twitter:description" content="Learn about running a quick automation that turns rows in your Google Sheets and plugs it into a Google [Slide](2024-02-26_slide.md) template to easily share more attractive content."/>
|
||||
<meta name="twitter:description" content="Learn about running a quick automation that turns rows in your Google Sheets and plugs it into a Google Slide template to easily share more attractive content."/>
|
||||
|
||||
|
||||
<script type="application/ld+json">
|
||||
@ -68,7 +68,7 @@
|
||||
"@type": "BlogPosting",
|
||||
"headline": "Google Sheets to Slides with Scripts: an Automation",
|
||||
"name": "Google Sheets to Slides with Scripts: an Automation",
|
||||
"description": "Learn about running a quick automation that turns rows in your Google Sheets and plugs it into a Google [Slide](2024-02-26_slide.md) template to easily share more attractive content.",
|
||||
"description": "Learn about running a quick automation that turns rows in your Google Sheets and plugs it into a Google Slide template to easily share more attractive content.",
|
||||
"keywords": [
|
||||
"google", "scripts", "sheets"
|
||||
],
|
||||
@ -152,7 +152,7 @@
|
||||
Google Sheets to Slides with Scripts: an Automation
|
||||
</h1>
|
||||
<div class="post-description">
|
||||
Learn about running a quick automation that turns rows in your Google Sheets and plugs it into a Google [Slide](2024-02-26_slide.md) template to easily share more attractive content.
|
||||
Learn about running a quick automation that turns rows in your Google Sheets and plugs it into a Google Slide template to easily share more attractive content.
|
||||
</div>
|
||||
<div class="post-meta"><span title='2024-02-25 10:14:30 -0500 EST'>February 25, 2024</span> · 14 min · 2963 words · Me
|
||||
|
||||
@ -307,7 +307,8 @@ screenshots of what this looks like for my example:</p>
|
||||
<p><img loading="lazy" src="../posts/img/google_sheets_for_scripts_example.png" alt="Google Sheets Example" />
|
||||
</p>
|
||||
<p><img loading="lazy" src="../posts/img/google_slides_for_scripts_example.png" alt="Google Slides Example" />
|
||||
</p>
|
||||
|
||||
<img src="./img/google_slides_for_scripts_example.png" alt="Example image"></p>
|
||||
<h2 id="sheets-setup">Sheets Setup<a hidden class="anchor" aria-hidden="true" href="#sheets-setup">#</a></h2>
|
||||
<p>Ignoring any design from my screenshots - all credit goes to my much more creative wife - the setup for the sheet is fairly
|
||||
simple. You need various headings in Row A of the sheet which we will be using to reference data. In this tutorial, our
|
||||
@ -931,6 +932,11 @@ details {
|
||||
<li><a href="../tags/sheets.html">Sheets</a></li>
|
||||
</ul>
|
||||
<nav class="paginav">
|
||||
<a class="prev" href="../posts/save_terminal_to_file.html">
|
||||
<span class="title">« Prev</span>
|
||||
<br>
|
||||
<span>How to Revisit your Terminal Session's History</span>
|
||||
</a>
|
||||
<a class="next" href="../posts/openresty_and_package_update_issues.html">
|
||||
<span class="title">Next »</span>
|
||||
<br>
|
||||
|
||||
@ -6,14 +6,21 @@
|
||||
<description>Recent content in Posts on Norm-working Packets 💾</description>
|
||||
<generator>Hugo -- gohugo.io</generator>
|
||||
<language>en-us</language>
|
||||
<lastBuildDate>Sun, 25 Feb 2024 10:14:30 -0500</lastBuildDate>
|
||||
<lastBuildDate>Tue, 19 Mar 2024 11:00:53 -0400</lastBuildDate>
|
||||
<atom:link href="/posts/index.xml" rel="self" type="application/rss+xml" />
|
||||
<item>
|
||||
<title>How to Revisit your Terminal Session's History</title>
|
||||
<link>/posts/save_terminal_to_file.html</link>
|
||||
<pubDate>Tue, 19 Mar 2024 11:00:53 -0400</pubDate>
|
||||
<guid>/posts/save_terminal_to_file.html</guid>
|
||||
<description>Go beyond zsh/bash_history and save both your commands and the output to a file for later review! This command will help any homelabber that struggles with documentation for their network and services.</description>
|
||||
</item>
|
||||
<item>
|
||||
<title>Google Sheets to Slides with Scripts: an Automation</title>
|
||||
<link>/posts/google_scripts_sheets_to_slides.html</link>
|
||||
<pubDate>Sun, 25 Feb 2024 10:14:30 -0500</pubDate>
|
||||
<guid>/posts/google_scripts_sheets_to_slides.html</guid>
|
||||
<description>Learn about running a quick automation that turns rows in your Google Sheets and plugs it into a Google [Slide](2024-02-26_slide.md) template to easily share more attractive content.</description>
|
||||
<description>Learn about running a quick automation that turns rows in your Google Sheets and plugs it into a Google Slide template to easily share more attractive content.</description>
|
||||
</item>
|
||||
<item>
|
||||
<title>QuickHits: OpenResty and Package Updates</title>
|
||||
|
||||
@ -10,6 +10,7 @@
|
||||
<meta name="description" content="If you have used Neovim and it's massive plugin ecosystem for any length of time, then you're aware that debugging just comes with the territory. Here's my tale. Warning: It hasn't been solved at the time of writing.">
|
||||
<meta name="author" content="Me">
|
||||
<link rel="canonical" href="//localhost:1313/posts/neovim-a-config-debug-tale.html">
|
||||
<script defer data-domain="selfhosted.rsmsn.co" src="https://analytics.rsmsn.co/js/script.js"></script>
|
||||
<link crossorigin="anonymous" href="../assets/css/stylesheet.b609c58d5c11bb90b1a54e04005d74ad1ddf22165eb79f5533967e57df9c3b50.css" integrity="sha256-tgnFjVwRu5CxpU4EAF10rR3fIhZet59VM5Z+V9+cO1A=" rel="preload stylesheet" as="style">
|
||||
<link rel="icon" href="//localhost:1313/favicon.ico">
|
||||
<link rel="icon" type="image/png" sizes="16x16" href="//localhost:1313/favicon-16x16.png">
|
||||
|
||||
@ -10,6 +10,7 @@
|
||||
<meta name="description" content="Regex101 has long been one of my favorite reference tools. As of today, I will be adding ExplainShell to the list of must-use tools!.">
|
||||
<meta name="author" content="Me">
|
||||
<link rel="canonical" href="//localhost:1313/posts/new-favorite-website.html">
|
||||
<script defer data-domain="selfhosted.rsmsn.co" src="https://analytics.rsmsn.co/js/script.js"></script>
|
||||
<link crossorigin="anonymous" href="../assets/css/stylesheet.b609c58d5c11bb90b1a54e04005d74ad1ddf22165eb79f5533967e57df9c3b50.css" integrity="sha256-tgnFjVwRu5CxpU4EAF10rR3fIhZet59VM5Z+V9+cO1A=" rel="preload stylesheet" as="style">
|
||||
<link rel="icon" href="//localhost:1313/favicon.ico">
|
||||
<link rel="icon" type="image/png" sizes="16x16" href="//localhost:1313/favicon-16x16.png">
|
||||
|
||||
@ -108,6 +108,20 @@
|
||||
</h1>
|
||||
</header>
|
||||
|
||||
<article class="post-entry">
|
||||
<header class="entry-header">
|
||||
<h2 class="entry-hint-parent">Creating a BirdNetPi Dashboard in HomeAssistant - Part 1
|
||||
</h2>
|
||||
</header>
|
||||
<div class="entry-content">
|
||||
<p>This is Part One of a Two Part Series. You can find Part Two, here.
|
||||
Update: 10/11/2023. A huge thanks to Mastodon User e_mobile2014 who found a broken link in this guide and pointed out that I never explained how to get the mqtt sensors into HomeAssistant!
|
||||
What you will need BirdNET-Pi HomeAssistant AppDaemon MQTT Broker (I use Mosquitto) Background In early 2023, at the height of the Raspberry Pi shortage I felt like a king with an extra Rpi laying around, not being used....</p>
|
||||
</div>
|
||||
<footer class="entry-footer"><span title='2023-09-30 11:21:55 -0400 EDT'>September 30, 2023</span> · 12 min · 2484 words · Me</footer>
|
||||
<a class="entry-link" aria-label="post link to Creating a BirdNetPi Dashboard in HomeAssistant - Part 1" href="../../posts/birdnet_homeassistant.html"></a>
|
||||
</article>
|
||||
|
||||
<article class="post-entry">
|
||||
<header class="entry-header">
|
||||
<h2 class="entry-hint-parent">Pushing a Single Local Git Repo to Multiple Remote Repos
|
||||
|
||||
@ -10,6 +10,7 @@
|
||||
<meta name="description" content="Posts - Norm-working Packets 💾">
|
||||
<meta name="author" content="Norm Rasmussen">
|
||||
<link rel="canonical" href="//localhost:1313/posts.html">
|
||||
<script defer data-domain="selfhosted.rsmsn.co" src="https://analytics.rsmsn.co/js/script.js"></script>
|
||||
<link crossorigin="anonymous" href="../../assets/css/stylesheet.b609c58d5c11bb90b1a54e04005d74ad1ddf22165eb79f5533967e57df9c3b50.css" integrity="sha256-tgnFjVwRu5CxpU4EAF10rR3fIhZet59VM5Z+V9+cO1A=" rel="preload stylesheet" as="style">
|
||||
<link rel="icon" href="//localhost:1313/favicon.ico">
|
||||
<link rel="icon" type="image/png" sizes="16x16" href="//localhost:1313/favicon-16x16.png">
|
||||
|
||||
@ -10,6 +10,7 @@
|
||||
<meta name="description" content="I often find myself with various files that need to be parsed and transferred to a CSV. This is how I use python to parse a long and convoluted file.">
|
||||
<meta name="author" content="Me">
|
||||
<link rel="canonical" href="//localhost:1313/posts/parsing_files_with_python.html">
|
||||
<script defer data-domain="selfhosted.rsmsn.co" src="https://analytics.rsmsn.co/js/script.js"></script>
|
||||
<link crossorigin="anonymous" href="../assets/css/stylesheet.b609c58d5c11bb90b1a54e04005d74ad1ddf22165eb79f5533967e57df9c3b50.css" integrity="sha256-tgnFjVwRu5CxpU4EAF10rR3fIhZet59VM5Z+V9+cO1A=" rel="preload stylesheet" as="style">
|
||||
<link rel="icon" href="//localhost:1313/favicon.ico">
|
||||
<link rel="icon" type="image/png" sizes="16x16" href="//localhost:1313/favicon-16x16.png">
|
||||
|
||||
517
public/posts/save_terminal_to_file.html
Normal file
517
public/posts/save_terminal_to_file.html
Normal file
@ -0,0 +1,517 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en" dir="auto">
|
||||
|
||||
<head><meta charset="utf-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
||||
<meta name="robots" content="index, follow">
|
||||
<title>How to Revisit your Terminal Session's History | Norm-working Packets 💾</title>
|
||||
<meta name="keywords" content="cli, terminal, documentation">
|
||||
<meta name="description" content="Go beyond zsh/bash_history and save both your commands and the output to a file for later review! This command will help any homelabber that struggles with documentation for their network and services.">
|
||||
<meta name="author" content="Me">
|
||||
<link rel="canonical" href="../posts/save_terminal_to_file.html">
|
||||
<script defer data-domain="selfhosted.rsmsn.co" src="https://analytics.rsmsn.co/js/script.js"></script>
|
||||
<link crossorigin="anonymous" href="../assets/css/stylesheet.b609c58d5c11bb90b1a54e04005d74ad1ddf22165eb79f5533967e57df9c3b50.css" integrity="sha256-tgnFjVwRu5CxpU4EAF10rR3fIhZet59VM5Z+V9+cO1A=" rel="preload stylesheet" as="style">
|
||||
<link rel="icon" href="../favicon.ico">
|
||||
<link rel="icon" type="image/png" sizes="16x16" href="../favicon-16x16.png">
|
||||
<link rel="icon" type="image/png" sizes="32x32" href="../rsmsncircles.ico">
|
||||
<link rel="apple-touch-icon" href="../apple-touch-icon.png">
|
||||
<link rel="mask-icon" href="../safari-pinned-tab.svg">
|
||||
<meta name="theme-color" content="#2e2e33">
|
||||
<meta name="msapplication-TileColor" content="#2e2e33">
|
||||
<link rel="alternate" hreflang="en" href="../posts/save_terminal_to_file.html">
|
||||
<noscript>
|
||||
<style>
|
||||
#theme-toggle,
|
||||
.top-link {
|
||||
display: none;
|
||||
}
|
||||
|
||||
</style>
|
||||
</noscript><meta property="og:title" content="How to Revisit your Terminal Session's History" />
|
||||
<meta property="og:description" content="Go beyond zsh/bash_history and save both your commands and the output to a file for later review! This command will help any homelabber that struggles with documentation for their network and services." />
|
||||
<meta property="og:type" content="article" />
|
||||
<meta property="og:url" content="/posts/save_terminal_to_file.html" />
|
||||
<meta property="og:image" content="/%3Cimage%20path/url%3E" /><meta property="article:section" content="posts" />
|
||||
<meta property="article:published_time" content="2024-03-19T11:00:53-04:00" />
|
||||
<meta property="article:modified_time" content="2024-03-19T11:00:53-04:00" /><meta property="og:site_name" content="Norm-working Packets" />
|
||||
|
||||
<meta name="twitter:card" content="summary_large_image" />
|
||||
<meta name="twitter:image" content="/%3Cimage%20path/url%3E" />
|
||||
<meta name="twitter:title" content="How to Revisit your Terminal Session's History"/>
|
||||
<meta name="twitter:description" content="Go beyond zsh/bash_history and save both your commands and the output to a file for later review! This command will help any homelabber that struggles with documentation for their network and services."/>
|
||||
|
||||
|
||||
<script type="application/ld+json">
|
||||
{
|
||||
"@context": "https://schema.org",
|
||||
"@type": "BreadcrumbList",
|
||||
"itemListElement": [
|
||||
{
|
||||
"@type": "ListItem",
|
||||
"position": 1 ,
|
||||
"name": "Posts",
|
||||
"item": "/posts.html"
|
||||
}
|
||||
{
|
||||
"@type": "ListItem",
|
||||
"position": 1 ,
|
||||
"name": "How to Revisit your Terminal Session's History",
|
||||
"item": "/posts/save_terminal_to_file.html"
|
||||
}
|
||||
]
|
||||
}
|
||||
</script>
|
||||
<script type="application/ld+json">
|
||||
{
|
||||
"@context": "https://schema.org",
|
||||
"@type": "BlogPosting",
|
||||
"headline": "How to Revisit your Terminal Session's History",
|
||||
"name": "How to Revisit your Terminal Session\u0027s History",
|
||||
"description": "Go beyond zsh/bash_history and save both your commands and the output to a file for later review! This command will help any homelabber that struggles with documentation for their network and services.",
|
||||
"keywords": [
|
||||
"cli", "terminal", "documentation"
|
||||
],
|
||||
"articleBody": "I can’t believe I didn’t know about this command beforehand. When I first got into self-hosting and homelabbing, one of the app ideas I had that would help me with internal documentation is a terminal program that saves your input and output to a file for you to review later and extract the key commands you used. I also had the bonus idea that you could add comments as you were writing out commands.\nLittle did I know at the time that comments from the CLI were already possible! I’ve already begun using comments which has been helpful if I need to look back at my zsh_history file. Here’s an example of a command I would use with my docker services.\ndocker logs {container_name} --since 5m ;: The container is failing 5 minutes after startup. You can write comments in bash and powershell as well!\nPowershell: rem ZSH: ;: Bash: # Turns out, I don’t need a fancy app to log the input/output of a terminal session! It exists in most unix based systems already and the command is simply this: script. That’s it!\nUnlike .zsh_history or .bash_history which only saves the commands you input into the terminal, script will save both your commands and it’s output. Why didn’t I know about this before I started setting up my homelab?!\nThe next time I want to setup a new service or debug something on a server, I will now make sure I start my session with script {date}-{service_name}.txt and then start writing out commands. As long as I can remember to write my inline comments during the session, looking back and trying to figure out what I was thinking at the time should be a breeze! I can dump these files into my internal wiki as placeholders. Then, ideally, I’ll remove the commands that lead me down a dead end, clean up and expand comments, and easily keep my wiki growing. Ideally being the key word here… I’ll take a dump of history files for the time being.\nEither way, I will literally have the output of my brain when doing CLI work in a file. Incredible.\nHere’s a quick overview about script, taken from man script.\nSCRIPT(1) NAME script – make typescript of terminal session SYNOPSIS script [-aeFkqr] [-t time] [file [command ...]] script -p [-deq] [-T fmt] [file] DESCRIPTION The script utility makes a typescript of everything printed on your terminal. It is useful for students who need a hardcopy record of an interactive session as proof of an assignment, as the typescript file can be printed out later with lpr(1). If the argument file is given, script saves all dialogue in file. If no file name is given, the typescript is saved in the file typescript. If the argument command is given, script will run the specified command with an optional argument vector instead of an interactive shell. ",
|
||||
"wordCount" : "481",
|
||||
"inLanguage": "en",
|
||||
"image":"/%3Cimage%20path/url%3E","datePublished": "2024-03-19T11:00:53-04:00",
|
||||
"dateModified": "2024-03-19T11:00:53-04:00",
|
||||
"author":{
|
||||
"@type": "Person",
|
||||
"name": "Me"
|
||||
},
|
||||
"mainEntityOfPage": {
|
||||
"@type": "WebPage",
|
||||
"@id": "/posts/save_terminal_to_file.html"
|
||||
},
|
||||
"publisher": {
|
||||
"@type": "Organization",
|
||||
"name": "Norm-working Packets 💾",
|
||||
"logo": {
|
||||
"@type": "ImageObject",
|
||||
"url": "/favicon.ico"
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
</head>
|
||||
|
||||
<body class=" dark" id="top">
|
||||
<script>
|
||||
if (localStorage.getItem("pref-theme") === "light") {
|
||||
document.body.classList.remove('dark')
|
||||
}
|
||||
|
||||
</script>
|
||||
|
||||
<header class="header">
|
||||
<nav class="nav">
|
||||
<div class="logo">
|
||||
<a href="../" accesskey="h" title="Norm-working Packets 💾 (Alt + H)">Norm-working Packets 💾</a>
|
||||
<div class="logo-switches">
|
||||
<button id="theme-toggle" accesskey="t" title="(Alt + T)">
|
||||
<svg id="moon" xmlns="http://www.w3.org/2000/svg" width="24" height="18" viewBox="0 0 24 24"
|
||||
fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"
|
||||
stroke-linejoin="round">
|
||||
<path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"></path>
|
||||
</svg>
|
||||
<svg id="sun" xmlns="http://www.w3.org/2000/svg" width="24" height="18" viewBox="0 0 24 24"
|
||||
fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"
|
||||
stroke-linejoin="round">
|
||||
<circle cx="12" cy="12" r="5"></circle>
|
||||
<line x1="12" y1="1" x2="12" y2="3"></line>
|
||||
<line x1="12" y1="21" x2="12" y2="23"></line>
|
||||
<line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line>
|
||||
<line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line>
|
||||
<line x1="1" y1="12" x2="3" y2="12"></line>
|
||||
<line x1="21" y1="12" x2="23" y2="12"></line>
|
||||
<line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line>
|
||||
<line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line>
|
||||
</svg>
|
||||
</button>
|
||||
<ul class="lang-switch"><li>|</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<ul id="menu">
|
||||
<li>
|
||||
<a href="../posts.html" title="Posts">
|
||||
<span>Posts</span>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</nav>
|
||||
</header>
|
||||
<main class="main">
|
||||
|
||||
<article class="post-single">
|
||||
<header class="post-header">
|
||||
<div class="breadcrumbs"><a href="../">Home</a> » <a href="../posts.html">Posts</a></div>
|
||||
<h1 class="post-title entry-hint-parent">
|
||||
How to Revisit your Terminal Session's History
|
||||
</h1>
|
||||
<div class="post-description">
|
||||
Go beyond zsh/bash_history and save both your commands and the output to a file for later review! This command will help any homelabber that struggles with documentation for their network and services.
|
||||
</div>
|
||||
<div class="post-meta"><span title='2024-03-19 11:00:53 -0400 EDT'>March 19, 2024</span> · 3 min · 481 words · Me
|
||||
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<div class="post-content"><p>I can’t believe I didn’t know about this command beforehand. When I first got into self-hosting and homelabbing, one of the app ideas I had that would help me with internal documentation is a terminal program that saves your input and output to a file for you to review later and extract the key commands you used. I also had the bonus idea that you could add comments as you were writing out commands.</p>
|
||||
<p>Little did I know at the time that comments from the CLI were already possible! I’ve already begun using comments which has been helpful if I need to look back at my <code>zsh_history</code> file. Here’s an example of a command I would use with my docker services.</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>docker logs <span style="color:#f92672">{</span>container_name<span style="color:#f92672">}</span> --since 5m ;: The container is failing <span style="color:#ae81ff">5</span> minutes after startup.
|
||||
</span></span></code></pre></div>
|
||||
|
||||
<style type="text/css">
|
||||
.box-shortcode {
|
||||
padding: 1.6em;
|
||||
padding-top: 1.4em;
|
||||
line-height: 1.4em;
|
||||
margin-top: 1em;
|
||||
margin-bottom: 2em;
|
||||
border-radius: 4px;
|
||||
color: #444;
|
||||
background: #f3ebe850;
|
||||
}
|
||||
|
||||
.box-title {
|
||||
margin: -18px -18px 12px;
|
||||
padding: 4px 18px;
|
||||
border-radius: 4px 4px 0 0;
|
||||
font-weight: 700;
|
||||
color: #fff;
|
||||
background: #6ab0de;
|
||||
}
|
||||
.box-shortcode.warning .box-title {
|
||||
background: #ff6b6b;
|
||||
}
|
||||
.box-shortcode.warning {
|
||||
background: #ff6b6b4f;
|
||||
}
|
||||
.box-shortcode.info .box-title {
|
||||
background: #0089e488;
|
||||
}
|
||||
.box-shortcode.info {
|
||||
background: #0089e41c;
|
||||
box-shadow: 3px 3px 5px #0089e410;
|
||||
}
|
||||
.box-shortcode.important .box-title {
|
||||
background: #f7ec2c;
|
||||
}
|
||||
.box-shortcode.important {
|
||||
background: #f7ec2c7d;
|
||||
}
|
||||
.box-shortcode.tip .box-title {
|
||||
background: #a3ffa34d;
|
||||
}
|
||||
.box-shortcode.tip {
|
||||
background: #a3ffa34d;
|
||||
box-shadow: 3px 3px 5px #0089e410;
|
||||
}
|
||||
.icon-box {
|
||||
display: inline-flex;
|
||||
align-self: center;
|
||||
margin-right: 8px;
|
||||
}
|
||||
.icon-box img,
|
||||
.icon-box svg {
|
||||
height: 1em;
|
||||
width: 1em;
|
||||
fill: currentColor;
|
||||
}
|
||||
.icon-box img,
|
||||
.icon-box.baseline svg {
|
||||
top: 0.125em;
|
||||
position: relative;
|
||||
}
|
||||
.box-shortcode p {
|
||||
margin-bottom: 0.6em;
|
||||
}
|
||||
.box-shortcode p:first-of-type {
|
||||
display: inline;
|
||||
}
|
||||
.box-shortcode p:nth-of-type(2) {
|
||||
margin-top: 0.6em;
|
||||
}
|
||||
.box-shortcode p:last-child {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
</style>
|
||||
|
||||
|
||||
<svg width="0" height="0" display="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<symbol id="tip-box" viewBox="0 0 512 512" preserveAspectRatio="xMidYMid meet">
|
||||
<path
|
||||
d="M504 256c0 136.967-111.033 248-248 248S8 392.967 8 256 119.033 8 256 8s248 111.033 248 248zM227.314 387.314l184-184c6.248-6.248 6.248-16.379 0-22.627l-22.627-22.627c-6.248-6.249-16.379-6.249-22.628 0L216 308.118l-70.059-70.059c-6.248-6.248-16.379-6.248-22.628 0l-22.627 22.627c-6.248 6.248-6.248 16.379 0 22.627l104 104c6.249 6.249 16.379 6.249 22.628.001z"/>
|
||||
</symbol>
|
||||
<symbol id="important-box" viewBox="0 0 512 512" preserveAspectRatio="xMidYMid meet">
|
||||
<path
|
||||
d="M504 256c0 136.997-111.043 248-248 248S8 392.997 8 256C8 119.083 119.043 8 256 8s248 111.083 248 248zm-248 50c-25.405 0-46 20.595-46 46s20.595 46 46 46 46-20.595 46-46-20.595-46-46-46zm-43.673-165.346l7.418 136c.347 6.364 5.609 11.346 11.982 11.346h48.546c6.373 0 11.635-4.982 11.982-11.346l7.418-136c.375-6.874-5.098-12.654-11.982-12.654h-63.383c-6.884 0-12.356 5.78-11.981 12.654z"/>
|
||||
</symbol>
|
||||
<symbol id="warning-box" viewBox="0 0 576 512" preserveAspectRatio="xMidYMid meet">
|
||||
<path
|
||||
d="M569.517 440.013C587.975 472.007 564.806 512 527.94 512H48.054c-36.937 0-59.999-40.055-41.577-71.987L246.423 23.985c18.467-32.009 64.72-31.951 83.154 0l239.94 416.028zM288 354c-25.405 0-46 20.595-46 46s20.595 46 46 46 46-20.595 46-46-20.595-46-46-46zm-43.673-165.346l7.418 136c.347 6.364 5.609 11.346 11.982 11.346h48.546c6.373 0 11.635-4.982 11.982-11.346l7.418-136c.375-6.874-5.098-12.654-11.982-12.654h-63.383c-6.884 0-12.356 5.78-11.981 12.654z"/>
|
||||
</symbol>
|
||||
<symbol id="info-box" viewBox="0 0 512 512" preserveAspectRatio="xMidYMid meet">
|
||||
<path
|
||||
d="M256 8C119.043 8 8 119.083 8 256c0 136.997 111.043 248 248 248s248-111.003 248-248C504 119.083 392.957 8 256 8zm0 110c23.196 0 42 18.804 42 42s-18.804 42-42 42-42-18.804-42-42 18.804-42 42-42zm56 254c0 6.627-5.373 12-12 12h-88c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h12v-64h-12c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h64c6.627 0 12 5.373 12 12v100h12c6.627 0 12 5.373 12 12v24z"/>
|
||||
</symbol>
|
||||
</svg><div class="box box-shortcode info" >
|
||||
<span class="icon-box baseline">
|
||||
<svg><use href="#info-box"></use></svg>
|
||||
</span>
|
||||
<p>You can write comments in <code>bash</code> and <code>powershell</code> as well!</p>
|
||||
<ul>
|
||||
<li>Powershell: <code>rem</code></li>
|
||||
<li>ZSH: <code>;:</code></li>
|
||||
<li>Bash: <code>#</code></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<p>Turns out, I don’t need a fancy app to log the input/output of a terminal session! It exists in most unix based systems already and the command is simply this: <code>script</code>. That’s it!</p>
|
||||
<p>Unlike <code>.zsh_history</code> or <code>.bash_history</code> which only saves the commands you input into the terminal, <code>script</code> will save both your commands <em>and</em> it’s output. Why didn’t I know about this before I started setting up my homelab?!</p>
|
||||
<p>The next time I want to setup a new service or debug something on a server, I will now make sure I start my session with <code>script {date}-{service_name}.txt</code> and then start writing out commands. As long as I can remember to write my inline comments during the session, looking back and trying to figure out what I was thinking at the time should be a breeze! I can dump these files into my internal wiki as placeholders. Then, ideally, I’ll remove the commands that lead me down a dead end, clean up and expand comments, and easily keep my wiki growing. Ideally being the key word here… I’ll take a dump of history files for the time being.</p>
|
||||
<p>Either way, I will literally have the output of my brain when doing CLI work in a file. Incredible.</p>
|
||||
<p>Here’s a quick overview about script, taken from <code>man script</code>.</p>
|
||||
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span> SCRIPT<span style="color:#f92672">(</span>1<span style="color:#f92672">)</span>
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>NAME
|
||||
</span></span><span style="display:flex;"><span> script – make typescript of terminal session
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>SYNOPSIS
|
||||
</span></span><span style="display:flex;"><span> script <span style="color:#f92672">[</span>-aeFkqr<span style="color:#f92672">]</span> <span style="color:#f92672">[</span>-t time<span style="color:#f92672">]</span> <span style="color:#f92672">[</span>file <span style="color:#f92672">[</span>command ...<span style="color:#f92672">]]</span>
|
||||
</span></span><span style="display:flex;"><span> script -p <span style="color:#f92672">[</span>-deq<span style="color:#f92672">]</span> <span style="color:#f92672">[</span>-T fmt<span style="color:#f92672">]</span> <span style="color:#f92672">[</span>file<span style="color:#f92672">]</span>
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span>DESCRIPTION
|
||||
</span></span><span style="display:flex;"><span> The script utility makes a typescript of everything printed on your terminal. It is useful <span style="color:#66d9ef">for</span> students who need a hardcopy record of an interactive session as proof of an assignment, as the typescript file can be
|
||||
</span></span><span style="display:flex;"><span> printed out later with lpr<span style="color:#f92672">(</span>1<span style="color:#f92672">)</span>.
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span> If the argument file is given, script saves all dialogue in file. If no file name is given, the typescript is saved in the file typescript.
|
||||
</span></span><span style="display:flex;"><span>
|
||||
</span></span><span style="display:flex;"><span> If the argument command is given, script will run the specified command with an optional argument vector instead of an interactive shell.
|
||||
</span></span></code></pre></div><style>
|
||||
.box-shortcode {
|
||||
color: #e8e8e8;
|
||||
border: none;
|
||||
}
|
||||
.post-content img {
|
||||
margin: auto
|
||||
}
|
||||
details {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
border: none;
|
||||
background: transparent;
|
||||
box-shadow: none;
|
||||
}
|
||||
</style>
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
<footer class="post-footer">
|
||||
<ul class="post-tags">
|
||||
<li><a href="../tags/cli.html">Cli</a></li>
|
||||
<li><a href="../tags/terminal.html">Terminal</a></li>
|
||||
<li><a href="../tags/documentation.html">Documentation</a></li>
|
||||
</ul>
|
||||
<nav class="paginav">
|
||||
<a class="next" href="../posts/google_scripts_sheets_to_slides.html">
|
||||
<span class="title">Next »</span>
|
||||
<br>
|
||||
<span>Google Sheets to Slides with Scripts: an Automation</span>
|
||||
</a>
|
||||
</nav>
|
||||
|
||||
|
||||
<ul class="share-buttons">
|
||||
<li>
|
||||
<a target="_blank" rel="noopener noreferrer" aria-label="share How to Revisit your Terminal Session's History on x"
|
||||
href="https://x.com/intent/tweet/?text=How%20to%20Revisit%20your%20Terminal%20Session%27s%20History&url=%2fposts%2fsave_terminal_to_file.html&hashtags=cli%2cterminal%2cdocumentation">
|
||||
<svg version="1.1" viewBox="0 0 512 512" xml:space="preserve" height="30px" width="30px" fill="currentColor">
|
||||
<path
|
||||
d="M512 62.554 L 512 449.446 C 512 483.97 483.97 512 449.446 512 L 62.554 512 C 28.03 512 0 483.97 0 449.446 L 0 62.554 C 0 28.03 28.029 0 62.554 0 L 449.446 0 C 483.971 0 512 28.03 512 62.554 Z M 269.951 190.75 L 182.567 75.216 L 56 75.216 L 207.216 272.95 L 63.9 436.783 L 125.266 436.783 L 235.9 310.383 L 332.567 436.783 L 456 436.783 L 298.367 228.367 L 432.367 75.216 L 371.033 75.216 Z M 127.633 110 L 164.101 110 L 383.481 400.065 L 349.5 400.065 Z" />
|
||||
</svg>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a target="_blank" rel="noopener noreferrer" aria-label="share How to Revisit your Terminal Session's History on linkedin"
|
||||
href="https://www.linkedin.com/shareArticle?mini=true&url=%2fposts%2fsave_terminal_to_file.html&title=How%20to%20Revisit%20your%20Terminal%20Session%27s%20History&summary=How%20to%20Revisit%20your%20Terminal%20Session%27s%20History&source=%2fposts%2fsave_terminal_to_file.html">
|
||||
<svg version="1.1" viewBox="0 0 512 512" xml:space="preserve" height="30px" width="30px" fill="currentColor">
|
||||
<path
|
||||
d="M449.446,0c34.525,0 62.554,28.03 62.554,62.554l0,386.892c0,34.524 -28.03,62.554 -62.554,62.554l-386.892,0c-34.524,0 -62.554,-28.03 -62.554,-62.554l0,-386.892c0,-34.524 28.029,-62.554 62.554,-62.554l386.892,0Zm-288.985,423.278l0,-225.717l-75.04,0l0,225.717l75.04,0Zm270.539,0l0,-129.439c0,-69.333 -37.018,-101.586 -86.381,-101.586c-39.804,0 -57.634,21.891 -67.617,37.266l0,-31.958l-75.021,0c0.995,21.181 0,225.717 0,225.717l75.02,0l0,-126.056c0,-6.748 0.486,-13.492 2.474,-18.315c5.414,-13.475 17.767,-27.434 38.494,-27.434c27.135,0 38.007,20.707 38.007,51.037l0,120.768l75.024,0Zm-307.552,-334.556c-25.674,0 -42.448,16.879 -42.448,39.002c0,21.658 16.264,39.002 41.455,39.002l0.484,0c26.165,0 42.452,-17.344 42.452,-39.002c-0.485,-22.092 -16.241,-38.954 -41.943,-39.002Z" />
|
||||
</svg>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a target="_blank" rel="noopener noreferrer" aria-label="share How to Revisit your Terminal Session's History on reddit"
|
||||
href="https://reddit.com/submit?url=%2fposts%2fsave_terminal_to_file.html&title=How%20to%20Revisit%20your%20Terminal%20Session%27s%20History">
|
||||
<svg version="1.1" viewBox="0 0 512 512" xml:space="preserve" height="30px" width="30px" fill="currentColor">
|
||||
<path
|
||||
d="M449.446,0c34.525,0 62.554,28.03 62.554,62.554l0,386.892c0,34.524 -28.03,62.554 -62.554,62.554l-386.892,0c-34.524,0 -62.554,-28.03 -62.554,-62.554l0,-386.892c0,-34.524 28.029,-62.554 62.554,-62.554l386.892,0Zm-3.446,265.638c0,-22.964 -18.616,-41.58 -41.58,-41.58c-11.211,0 -21.361,4.457 -28.841,11.666c-28.424,-20.508 -67.586,-33.757 -111.204,-35.278l18.941,-89.121l61.884,13.157c0.756,15.734 13.642,28.29 29.56,28.29c16.407,0 29.706,-13.299 29.706,-29.701c0,-16.403 -13.299,-29.702 -29.706,-29.702c-11.666,0 -21.657,6.792 -26.515,16.578l-69.105,-14.69c-1.922,-0.418 -3.939,-0.042 -5.585,1.036c-1.658,1.073 -2.811,2.761 -3.224,4.686l-21.152,99.438c-44.258,1.228 -84.046,14.494 -112.837,35.232c-7.468,-7.164 -17.589,-11.591 -28.757,-11.591c-22.965,0 -41.585,18.616 -41.585,41.58c0,16.896 10.095,31.41 24.568,37.918c-0.639,4.135 -0.99,8.328 -0.99,12.576c0,63.977 74.469,115.836 166.33,115.836c91.861,0 166.334,-51.859 166.334,-115.836c0,-4.218 -0.347,-8.387 -0.977,-12.493c14.564,-6.47 24.735,-21.034 24.735,-38.001Zm-119.474,108.193c-20.27,20.241 -59.115,21.816 -70.534,21.816c-11.428,0 -50.277,-1.575 -70.522,-21.82c-3.007,-3.008 -3.007,-7.882 0,-10.889c3.003,-2.999 7.882,-3.003 10.885,0c12.777,12.781 40.11,17.317 59.637,17.317c19.522,0 46.86,-4.536 59.657,-17.321c3.016,-2.999 7.886,-2.995 10.885,0.008c3.008,3.011 3.003,7.882 -0.008,10.889Zm-5.23,-48.781c-16.373,0 -29.701,-13.324 -29.701,-29.698c0,-16.381 13.328,-29.714 29.701,-29.714c16.378,0 29.706,13.333 29.706,29.714c0,16.374 -13.328,29.698 -29.706,29.698Zm-160.386,-29.702c0,-16.381 13.328,-29.71 29.714,-29.71c16.369,0 29.689,13.329 29.689,29.71c0,16.373 -13.32,29.693 -29.689,29.693c-16.386,0 -29.714,-13.32 -29.714,-29.693Z" />
|
||||
</svg>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a target="_blank" rel="noopener noreferrer" aria-label="share How to Revisit your Terminal Session's History on facebook"
|
||||
href="https://facebook.com/sharer/sharer.php?u=%2fposts%2fsave_terminal_to_file.html">
|
||||
<svg version="1.1" viewBox="0 0 512 512" xml:space="preserve" height="30px" width="30px" fill="currentColor">
|
||||
<path
|
||||
d="M449.446,0c34.525,0 62.554,28.03 62.554,62.554l0,386.892c0,34.524 -28.03,62.554 -62.554,62.554l-106.468,0l0,-192.915l66.6,0l12.672,-82.621l-79.272,0l0,-53.617c0,-22.603 11.073,-44.636 46.58,-44.636l36.042,0l0,-70.34c0,0 -32.71,-5.582 -63.982,-5.582c-65.288,0 -107.96,39.569 -107.96,111.204l0,62.971l-72.573,0l0,82.621l72.573,0l0,192.915l-191.104,0c-34.524,0 -62.554,-28.03 -62.554,-62.554l0,-386.892c0,-34.524 28.029,-62.554 62.554,-62.554l386.892,0Z" />
|
||||
</svg>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a target="_blank" rel="noopener noreferrer" aria-label="share How to Revisit your Terminal Session's History on whatsapp"
|
||||
href="https://api.whatsapp.com/send?text=How%20to%20Revisit%20your%20Terminal%20Session%27s%20History%20-%20%2fposts%2fsave_terminal_to_file.html">
|
||||
<svg version="1.1" viewBox="0 0 512 512" xml:space="preserve" height="30px" width="30px" fill="currentColor">
|
||||
<path
|
||||
d="M449.446,0c34.525,0 62.554,28.03 62.554,62.554l0,386.892c0,34.524 -28.03,62.554 -62.554,62.554l-386.892,0c-34.524,0 -62.554,-28.03 -62.554,-62.554l0,-386.892c0,-34.524 28.029,-62.554 62.554,-62.554l386.892,0Zm-58.673,127.703c-33.842,-33.881 -78.847,-52.548 -126.798,-52.568c-98.799,0 -179.21,80.405 -179.249,179.234c-0.013,31.593 8.241,62.428 23.927,89.612l-25.429,92.884l95.021,-24.925c26.181,14.28 55.659,21.807 85.658,21.816l0.074,0c98.789,0 179.206,-80.413 179.247,-179.243c0.018,-47.895 -18.61,-92.93 -52.451,-126.81Zm-126.797,275.782l-0.06,0c-26.734,-0.01 -52.954,-7.193 -75.828,-20.767l-5.441,-3.229l-56.386,14.792l15.05,-54.977l-3.542,-5.637c-14.913,-23.72 -22.791,-51.136 -22.779,-79.287c0.033,-82.142 66.867,-148.971 149.046,-148.971c39.793,0.014 77.199,15.531 105.329,43.692c28.128,28.16 43.609,65.592 43.594,105.4c-0.034,82.149 -66.866,148.983 -148.983,148.984Zm81.721,-111.581c-4.479,-2.242 -26.499,-13.075 -30.604,-14.571c-4.105,-1.495 -7.091,-2.241 -10.077,2.241c-2.986,4.483 -11.569,14.572 -14.182,17.562c-2.612,2.988 -5.225,3.364 -9.703,1.12c-4.479,-2.241 -18.91,-6.97 -36.017,-22.23c-13.314,-11.876 -22.304,-26.542 -24.916,-31.026c-2.612,-4.484 -0.279,-6.908 1.963,-9.14c2.016,-2.007 4.48,-5.232 6.719,-7.847c2.24,-2.615 2.986,-4.484 4.479,-7.472c1.493,-2.99 0.747,-5.604 -0.374,-7.846c-1.119,-2.241 -10.077,-24.288 -13.809,-33.256c-3.635,-8.733 -7.327,-7.55 -10.077,-7.688c-2.609,-0.13 -5.598,-0.158 -8.583,-0.158c-2.986,0 -7.839,1.121 -11.944,5.604c-4.105,4.484 -15.675,15.32 -15.675,37.364c0,22.046 16.048,43.342 18.287,46.332c2.24,2.99 31.582,48.227 76.511,67.627c10.685,4.615 19.028,7.371 25.533,9.434c10.728,3.41 20.492,2.929 28.209,1.775c8.605,-1.285 26.499,-10.833 30.231,-21.295c3.732,-10.464 3.732,-19.431 2.612,-21.298c-1.119,-1.869 -4.105,-2.99 -8.583,-5.232Z" />
|
||||
</svg>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a target="_blank" rel="noopener noreferrer" aria-label="share How to Revisit your Terminal Session's History on telegram"
|
||||
href="https://telegram.me/share/url?text=How%20to%20Revisit%20your%20Terminal%20Session%27s%20History&url=%2fposts%2fsave_terminal_to_file.html">
|
||||
<svg version="1.1" xml:space="preserve" viewBox="2 2 28 28" height="30px" width="30px" fill="currentColor">
|
||||
<path
|
||||
d="M26.49,29.86H5.5a3.37,3.37,0,0,1-2.47-1,3.35,3.35,0,0,1-1-2.47V5.48A3.36,3.36,0,0,1,3,3,3.37,3.37,0,0,1,5.5,2h21A3.38,3.38,0,0,1,29,3a3.36,3.36,0,0,1,1,2.46V26.37a3.35,3.35,0,0,1-1,2.47A3.38,3.38,0,0,1,26.49,29.86Zm-5.38-6.71a.79.79,0,0,0,.85-.66L24.73,9.24a.55.55,0,0,0-.18-.46.62.62,0,0,0-.41-.17q-.08,0-16.53,6.11a.59.59,0,0,0-.41.59.57.57,0,0,0,.43.52l4,1.24,1.61,4.83a.62.62,0,0,0,.63.43.56.56,0,0,0,.4-.17L16.54,20l4.09,3A.9.9,0,0,0,21.11,23.15ZM13.8,20.71l-1.21-4q8.72-5.55,8.78-5.55c.15,0,.23,0,.23.16a.18.18,0,0,1,0,.06s-2.51,2.3-7.52,6.8Z" />
|
||||
</svg>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a target="_blank" rel="noopener noreferrer" aria-label="share How to Revisit your Terminal Session's History on ycombinator"
|
||||
href="https://news.ycombinator.com/submitlink?t=How%20to%20Revisit%20your%20Terminal%20Session%27s%20History&u=%2fposts%2fsave_terminal_to_file.html">
|
||||
<svg version="1.1" xml:space="preserve" width="30px" height="30px" viewBox="0 0 512 512" fill="currentColor"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape">
|
||||
<path
|
||||
d="M449.446 0C483.971 0 512 28.03 512 62.554L512 449.446C512 483.97 483.97 512 449.446 512L62.554 512C28.03 512 0 483.97 0 449.446L0 62.554C0 28.03 28.029 0 62.554 0L449.446 0ZM183.8767 87.9921H121.8427L230.6673 292.4508V424.0079H281.3328V292.4508L390.1575 87.9921H328.1233L256 238.2489z" />
|
||||
</svg>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
</footer>
|
||||
</article>
|
||||
</main>
|
||||
|
||||
<footer class="footer">
|
||||
<span>© 2024 <a href="../">Norm-working Packets 💾</a></span>
|
||||
<span>
|
||||
Powered by
|
||||
<a href="https://gohugo.io/" rel="noopener noreferrer" target="_blank">Hugo</a> &
|
||||
<a href="https://github.com/adityatelange/hugo-PaperMod/" rel="noopener" target="_blank">PaperMod</a>
|
||||
</span>
|
||||
</footer>
|
||||
<a href="#top" aria-label="go to top" title="Go to Top (Alt + G)" class="top-link" id="top-link" accesskey="g">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 12 6" fill="currentColor">
|
||||
<path d="M12 6H0l6-6z" />
|
||||
</svg>
|
||||
</a>
|
||||
|
||||
<script>
|
||||
let menu = document.getElementById('menu')
|
||||
if (menu) {
|
||||
menu.scrollLeft = localStorage.getItem("menu-scroll-position");
|
||||
menu.onscroll = function () {
|
||||
localStorage.setItem("menu-scroll-position", menu.scrollLeft);
|
||||
}
|
||||
}
|
||||
|
||||
document.querySelectorAll('a[href^="#"]').forEach(anchor => {
|
||||
anchor.addEventListener("click", function (e) {
|
||||
e.preventDefault();
|
||||
var id = this.getAttribute("href").substr(1);
|
||||
if (!window.matchMedia('(prefers-reduced-motion: reduce)').matches) {
|
||||
document.querySelector(`[id='${decodeURIComponent(id)}']`).scrollIntoView({
|
||||
behavior: "smooth"
|
||||
});
|
||||
} else {
|
||||
document.querySelector(`[id='${decodeURIComponent(id)}']`).scrollIntoView();
|
||||
}
|
||||
if (id === "top") {
|
||||
history.replaceState(null, null, " ");
|
||||
} else {
|
||||
history.pushState(null, null, `#${id}`);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
</script>
|
||||
<script>
|
||||
var mybutton = document.getElementById("top-link");
|
||||
window.onscroll = function () {
|
||||
if (document.body.scrollTop > 800 || document.documentElement.scrollTop > 800) {
|
||||
mybutton.style.visibility = "visible";
|
||||
mybutton.style.opacity = "1";
|
||||
} else {
|
||||
mybutton.style.visibility = "hidden";
|
||||
mybutton.style.opacity = "0";
|
||||
}
|
||||
};
|
||||
|
||||
</script>
|
||||
<script>
|
||||
document.getElementById("theme-toggle").addEventListener("click", () => {
|
||||
if (document.body.className.includes("dark")) {
|
||||
document.body.classList.remove('dark');
|
||||
localStorage.setItem("pref-theme", 'light');
|
||||
} else {
|
||||
document.body.classList.add('dark');
|
||||
localStorage.setItem("pref-theme", 'dark');
|
||||
}
|
||||
})
|
||||
|
||||
</script>
|
||||
<script>
|
||||
document.querySelectorAll('pre > code').forEach((codeblock) => {
|
||||
const container = codeblock.parentNode.parentNode;
|
||||
|
||||
const copybutton = document.createElement('button');
|
||||
copybutton.classList.add('copy-code');
|
||||
copybutton.innerHTML = 'copy';
|
||||
|
||||
function copyingDone() {
|
||||
copybutton.innerHTML = 'copied!';
|
||||
setTimeout(() => {
|
||||
copybutton.innerHTML = 'copy';
|
||||
}, 2000);
|
||||
}
|
||||
|
||||
copybutton.addEventListener('click', (cb) => {
|
||||
if ('clipboard' in navigator) {
|
||||
navigator.clipboard.writeText(codeblock.textContent);
|
||||
copyingDone();
|
||||
return;
|
||||
}
|
||||
|
||||
const range = document.createRange();
|
||||
range.selectNodeContents(codeblock);
|
||||
const selection = window.getSelection();
|
||||
selection.removeAllRanges();
|
||||
selection.addRange(range);
|
||||
try {
|
||||
document.execCommand('copy');
|
||||
copyingDone();
|
||||
} catch (e) { };
|
||||
selection.removeRange(range);
|
||||
});
|
||||
|
||||
if (container.classList.contains("highlight")) {
|
||||
container.appendChild(copybutton);
|
||||
} else if (container.parentNode.firstChild == container) {
|
||||
|
||||
} else if (codeblock.parentNode.parentNode.parentNode.parentNode.parentNode.nodeName == "TABLE") {
|
||||
|
||||
codeblock.parentNode.parentNode.parentNode.parentNode.parentNode.appendChild(copybutton);
|
||||
} else {
|
||||
|
||||
codeblock.parentNode.appendChild(copybutton);
|
||||
}
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
@ -10,6 +10,7 @@
|
||||
<meta name="description" content="A collection and living document of useful shell commands that I use.">
|
||||
<meta name="author" content="Me">
|
||||
<link rel="canonical" href="//localhost:1313/posts/useful-commands.html">
|
||||
<script defer data-domain="selfhosted.rsmsn.co" src="https://analytics.rsmsn.co/js/script.js"></script>
|
||||
<link crossorigin="anonymous" href="../assets/css/stylesheet.b609c58d5c11bb90b1a54e04005d74ad1ddf22165eb79f5533967e57df9c3b50.css" integrity="sha256-tgnFjVwRu5CxpU4EAF10rR3fIhZet59VM5Z+V9+cO1A=" rel="preload stylesheet" as="style">
|
||||
<link rel="icon" href="//localhost:1313/favicon.ico">
|
||||
<link rel="icon" type="image/png" sizes="16x16" href="//localhost:1313/favicon-16x16.png">
|
||||
|
||||
@ -10,6 +10,7 @@
|
||||
<meta name="description" content="zyxel_vlan_setup">
|
||||
<meta name="author" content="Me">
|
||||
<link rel="canonical" href="//localhost:1313/posts/zyxel_vlan_setup.html">
|
||||
<script defer data-domain="selfhosted.rsmsn.co" src="https://analytics.rsmsn.co/js/script.js"></script>
|
||||
<link crossorigin="anonymous" href="../assets/css/stylesheet.b609c58d5c11bb90b1a54e04005d74ad1ddf22165eb79f5533967e57df9c3b50.css" integrity="sha256-tgnFjVwRu5CxpU4EAF10rR3fIhZet59VM5Z+V9+cO1A=" rel="preload stylesheet" as="style">
|
||||
<link rel="icon" href="//localhost:1313/favicon.ico">
|
||||
<link rel="icon" type="image/png" sizes="16x16" href="//localhost:1313/favicon-16x16.png">
|
||||
|
||||
@ -2,6 +2,27 @@
|
||||
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
|
||||
xmlns:xhtml="http://www.w3.org/1999/xhtml">
|
||||
<url>
|
||||
<loc>/tags/cli.html</loc>
|
||||
<lastmod>2024-03-19T11:00:53-04:00</lastmod>
|
||||
</url><url>
|
||||
<loc>/tags/documentation.html</loc>
|
||||
<lastmod>2024-03-19T11:00:53-04:00</lastmod>
|
||||
</url><url>
|
||||
<loc>/posts/save_terminal_to_file.html</loc>
|
||||
<lastmod>2024-03-19T11:00:53-04:00</lastmod>
|
||||
</url><url>
|
||||
<loc>/</loc>
|
||||
<lastmod>2024-03-19T11:00:53-04:00</lastmod>
|
||||
</url><url>
|
||||
<loc>/posts.html</loc>
|
||||
<lastmod>2024-03-19T11:00:53-04:00</lastmod>
|
||||
</url><url>
|
||||
<loc>/tags.html</loc>
|
||||
<lastmod>2024-03-19T11:00:53-04:00</lastmod>
|
||||
</url><url>
|
||||
<loc>/tags/terminal.html</loc>
|
||||
<lastmod>2024-03-19T11:00:53-04:00</lastmod>
|
||||
</url><url>
|
||||
<loc>/categories.html</loc>
|
||||
<lastmod>2024-02-25T10:14:30-05:00</lastmod>
|
||||
</url><url>
|
||||
@ -10,21 +31,12 @@
|
||||
</url><url>
|
||||
<loc>/posts/google_scripts_sheets_to_slides.html</loc>
|
||||
<lastmod>2024-02-25T10:14:30-05:00</lastmod>
|
||||
</url><url>
|
||||
<loc>/</loc>
|
||||
<lastmod>2024-02-25T10:14:30-05:00</lastmod>
|
||||
</url><url>
|
||||
<loc>/posts.html</loc>
|
||||
<lastmod>2024-02-25T10:14:30-05:00</lastmod>
|
||||
</url><url>
|
||||
<loc>/tags/scripts.html</loc>
|
||||
<lastmod>2024-02-25T10:14:30-05:00</lastmod>
|
||||
</url><url>
|
||||
<loc>/tags/sheets.html</loc>
|
||||
<lastmod>2024-02-25T10:14:30-05:00</lastmod>
|
||||
</url><url>
|
||||
<loc>/tags.html</loc>
|
||||
<lastmod>2024-02-25T10:14:30-05:00</lastmod>
|
||||
</url><url>
|
||||
<loc>/categories/tutorial.html</loc>
|
||||
<lastmod>2024-02-25T10:14:30-05:00</lastmod>
|
||||
|
||||
@ -95,12 +95,18 @@
|
||||
<li>
|
||||
<a href="./tags/backups.html">backups <sup><strong><sup>3</sup></strong></sup> </a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="./tags/cli.html">cli <sup><strong><sup>1</sup></strong></sup> </a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="./tags/commandline.html">commandline <sup><strong><sup>3</sup></strong></sup> </a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="./tags/diy.html">diy <sup><strong><sup>4</sup></strong></sup> </a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="./tags/documentation.html">documentation <sup><strong><sup>1</sup></strong></sup> </a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="./tags/esp.html">esp <sup><strong><sup>1</sup></strong></sup> </a>
|
||||
</li>
|
||||
@ -140,6 +146,9 @@
|
||||
<li>
|
||||
<a href="./tags/snippet.html">snippet <sup><strong><sup>1</sup></strong></sup> </a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="./tags/terminal.html">terminal <sup><strong><sup>1</sup></strong></sup> </a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="./tags/tools.html">tools <sup><strong><sup>1</sup></strong></sup> </a>
|
||||
</li>
|
||||
|
||||
179
public/tags/cli.html
Normal file
179
public/tags/cli.html
Normal file
@ -0,0 +1,179 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en" dir="auto">
|
||||
|
||||
<head><meta charset="utf-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
||||
<meta name="robots" content="index, follow">
|
||||
<title>Cli | Norm-working Packets 💾</title>
|
||||
<meta name="keywords" content="">
|
||||
<meta name="description" content="A semi-technical blog & series of experiences working in tech and my homelab">
|
||||
<meta name="author" content="Norm Rasmussen">
|
||||
<link rel="canonical" href="../tags/cli.html">
|
||||
<script defer data-domain="selfhosted.rsmsn.co" src="https://analytics.rsmsn.co/js/script.js"></script>
|
||||
<link crossorigin="anonymous" href="../assets/css/stylesheet.b609c58d5c11bb90b1a54e04005d74ad1ddf22165eb79f5533967e57df9c3b50.css" integrity="sha256-tgnFjVwRu5CxpU4EAF10rR3fIhZet59VM5Z+V9+cO1A=" rel="preload stylesheet" as="style">
|
||||
<link rel="icon" href="../favicon.ico">
|
||||
<link rel="icon" type="image/png" sizes="16x16" href="../favicon-16x16.png">
|
||||
<link rel="icon" type="image/png" sizes="32x32" href="../rsmsncircles.ico">
|
||||
<link rel="apple-touch-icon" href="../apple-touch-icon.png">
|
||||
<link rel="mask-icon" href="../safari-pinned-tab.svg">
|
||||
<meta name="theme-color" content="#2e2e33">
|
||||
<meta name="msapplication-TileColor" content="#2e2e33">
|
||||
<link rel="alternate" type="application/rss+xml" href="../tags/cli/index.xml">
|
||||
<link rel="alternate" hreflang="en" href="../tags/cli.html">
|
||||
<noscript>
|
||||
<style>
|
||||
#theme-toggle,
|
||||
.top-link {
|
||||
display: none;
|
||||
}
|
||||
|
||||
</style>
|
||||
</noscript><meta property="og:title" content="Cli" />
|
||||
<meta property="og:description" content="A semi-technical blog & series of experiences working in tech and my homelab" />
|
||||
<meta property="og:type" content="website" />
|
||||
<meta property="og:url" content="/tags/cli.html" /><meta property="og:site_name" content="Norm-working Packets" />
|
||||
|
||||
<meta name="twitter:card" content="summary"/>
|
||||
<meta name="twitter:title" content="Cli"/>
|
||||
<meta name="twitter:description" content="A semi-technical blog & series of experiences working in tech and my homelab"/>
|
||||
|
||||
</head>
|
||||
|
||||
<body class="list dark" id="top">
|
||||
<script>
|
||||
if (localStorage.getItem("pref-theme") === "light") {
|
||||
document.body.classList.remove('dark')
|
||||
}
|
||||
|
||||
</script>
|
||||
|
||||
<header class="header">
|
||||
<nav class="nav">
|
||||
<div class="logo">
|
||||
<a href="../" accesskey="h" title="Norm-working Packets 💾 (Alt + H)">Norm-working Packets 💾</a>
|
||||
<div class="logo-switches">
|
||||
<button id="theme-toggle" accesskey="t" title="(Alt + T)">
|
||||
<svg id="moon" xmlns="http://www.w3.org/2000/svg" width="24" height="18" viewBox="0 0 24 24"
|
||||
fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"
|
||||
stroke-linejoin="round">
|
||||
<path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"></path>
|
||||
</svg>
|
||||
<svg id="sun" xmlns="http://www.w3.org/2000/svg" width="24" height="18" viewBox="0 0 24 24"
|
||||
fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"
|
||||
stroke-linejoin="round">
|
||||
<circle cx="12" cy="12" r="5"></circle>
|
||||
<line x1="12" y1="1" x2="12" y2="3"></line>
|
||||
<line x1="12" y1="21" x2="12" y2="23"></line>
|
||||
<line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line>
|
||||
<line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line>
|
||||
<line x1="1" y1="12" x2="3" y2="12"></line>
|
||||
<line x1="21" y1="12" x2="23" y2="12"></line>
|
||||
<line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line>
|
||||
<line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line>
|
||||
</svg>
|
||||
</button>
|
||||
<ul class="lang-switch"><li>|</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<ul id="menu">
|
||||
<li>
|
||||
<a href="../posts.html" title="Posts">
|
||||
<span>Posts</span>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</nav>
|
||||
</header>
|
||||
<main class="main">
|
||||
<header class="page-header"><div class="breadcrumbs"><a href="../">Home</a> » <a href="../tags.html">Tags</a></div>
|
||||
<h1>
|
||||
Cli
|
||||
</h1>
|
||||
</header>
|
||||
|
||||
<article class="post-entry tag-entry">
|
||||
<header class="entry-header">
|
||||
<h2 class="entry-hint-parent">How to Revisit your Terminal Session's History
|
||||
</h2>
|
||||
</header>
|
||||
<div class="entry-content">
|
||||
<p>I can’t believe I didn’t know about this command beforehand. When I first got into self-hosting and homelabbing, one of the app ideas I had that would help me with internal documentation is a terminal program that saves your input and output to a file for you to review later and extract the key commands you used. I also had the bonus idea that you could add comments as you were writing out commands....</p>
|
||||
</div>
|
||||
<footer class="entry-footer"><span title='2024-03-19 11:00:53 -0400 EDT'>March 19, 2024</span> · 3 min · 481 words · Me</footer>
|
||||
<a class="entry-link" aria-label="post link to How to Revisit your Terminal Session's History" href="../posts/save_terminal_to_file.html"></a>
|
||||
</article>
|
||||
</main>
|
||||
|
||||
<footer class="footer">
|
||||
<span>© 2024 <a href="../">Norm-working Packets 💾</a></span>
|
||||
<span>
|
||||
Powered by
|
||||
<a href="https://gohugo.io/" rel="noopener noreferrer" target="_blank">Hugo</a> &
|
||||
<a href="https://github.com/adityatelange/hugo-PaperMod/" rel="noopener" target="_blank">PaperMod</a>
|
||||
</span>
|
||||
</footer>
|
||||
<a href="#top" aria-label="go to top" title="Go to Top (Alt + G)" class="top-link" id="top-link" accesskey="g">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 12 6" fill="currentColor">
|
||||
<path d="M12 6H0l6-6z" />
|
||||
</svg>
|
||||
</a>
|
||||
|
||||
<script>
|
||||
let menu = document.getElementById('menu')
|
||||
if (menu) {
|
||||
menu.scrollLeft = localStorage.getItem("menu-scroll-position");
|
||||
menu.onscroll = function () {
|
||||
localStorage.setItem("menu-scroll-position", menu.scrollLeft);
|
||||
}
|
||||
}
|
||||
|
||||
document.querySelectorAll('a[href^="#"]').forEach(anchor => {
|
||||
anchor.addEventListener("click", function (e) {
|
||||
e.preventDefault();
|
||||
var id = this.getAttribute("href").substr(1);
|
||||
if (!window.matchMedia('(prefers-reduced-motion: reduce)').matches) {
|
||||
document.querySelector(`[id='${decodeURIComponent(id)}']`).scrollIntoView({
|
||||
behavior: "smooth"
|
||||
});
|
||||
} else {
|
||||
document.querySelector(`[id='${decodeURIComponent(id)}']`).scrollIntoView();
|
||||
}
|
||||
if (id === "top") {
|
||||
history.replaceState(null, null, " ");
|
||||
} else {
|
||||
history.pushState(null, null, `#${id}`);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
</script>
|
||||
<script>
|
||||
var mybutton = document.getElementById("top-link");
|
||||
window.onscroll = function () {
|
||||
if (document.body.scrollTop > 800 || document.documentElement.scrollTop > 800) {
|
||||
mybutton.style.visibility = "visible";
|
||||
mybutton.style.opacity = "1";
|
||||
} else {
|
||||
mybutton.style.visibility = "hidden";
|
||||
mybutton.style.opacity = "0";
|
||||
}
|
||||
};
|
||||
|
||||
</script>
|
||||
<script>
|
||||
document.getElementById("theme-toggle").addEventListener("click", () => {
|
||||
if (document.body.className.includes("dark")) {
|
||||
document.body.classList.remove('dark');
|
||||
localStorage.setItem("pref-theme", 'light');
|
||||
} else {
|
||||
document.body.classList.add('dark');
|
||||
localStorage.setItem("pref-theme", 'dark');
|
||||
}
|
||||
})
|
||||
|
||||
</script>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
19
public/tags/cli/index.xml
Normal file
19
public/tags/cli/index.xml
Normal file
@ -0,0 +1,19 @@
|
||||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
|
||||
<channel>
|
||||
<title>Cli on Norm-working Packets 💾</title>
|
||||
<link>/tags/cli.html</link>
|
||||
<description>Recent content in Cli on Norm-working Packets 💾</description>
|
||||
<generator>Hugo -- gohugo.io</generator>
|
||||
<language>en-us</language>
|
||||
<lastBuildDate>Tue, 19 Mar 2024 11:00:53 -0400</lastBuildDate>
|
||||
<atom:link href="/tags/cli/index.xml" rel="self" type="application/rss+xml" />
|
||||
<item>
|
||||
<title>How to Revisit your Terminal Session's History</title>
|
||||
<link>/posts/save_terminal_to_file.html</link>
|
||||
<pubDate>Tue, 19 Mar 2024 11:00:53 -0400</pubDate>
|
||||
<guid>/posts/save_terminal_to_file.html</guid>
|
||||
<description>Go beyond zsh/bash_history and save both your commands and the output to a file for later review! This command will help any homelabber that struggles with documentation for their network and services.</description>
|
||||
</item>
|
||||
</channel>
|
||||
</rss>
|
||||
10
public/tags/cli/page/1.html
Normal file
10
public/tags/cli/page/1.html
Normal file
@ -0,0 +1,10 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en-us">
|
||||
<head>
|
||||
<title>/tags/cli.html</title>
|
||||
<link rel="canonical" href="../../../tags/cli.html">
|
||||
<meta name="robots" content="noindex">
|
||||
<meta charset="utf-8">
|
||||
<meta http-equiv="refresh" content="0; url=../../../tags/cli.html">
|
||||
</head>
|
||||
</html>
|
||||
@ -10,6 +10,7 @@
|
||||
<meta name="description" content="A semi-technical blog & series of experiences working in tech and my homelab">
|
||||
<meta name="author" content="Norm Rasmussen">
|
||||
<link rel="canonical" href="//localhost:1313/tags/command-line.html">
|
||||
<script defer data-domain="selfhosted.rsmsn.co" src="https://analytics.rsmsn.co/js/script.js"></script>
|
||||
<link crossorigin="anonymous" href="../assets/css/stylesheet.b609c58d5c11bb90b1a54e04005d74ad1ddf22165eb79f5533967e57df9c3b50.css" integrity="sha256-tgnFjVwRu5CxpU4EAF10rR3fIhZet59VM5Z+V9+cO1A=" rel="preload stylesheet" as="style">
|
||||
<link rel="icon" href="//localhost:1313/favicon.ico">
|
||||
<link rel="icon" type="image/png" sizes="16x16" href="//localhost:1313/favicon-16x16.png">
|
||||
|
||||
179
public/tags/documentation.html
Normal file
179
public/tags/documentation.html
Normal file
@ -0,0 +1,179 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en" dir="auto">
|
||||
|
||||
<head><meta charset="utf-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
||||
<meta name="robots" content="index, follow">
|
||||
<title>Documentation | Norm-working Packets 💾</title>
|
||||
<meta name="keywords" content="">
|
||||
<meta name="description" content="A semi-technical blog & series of experiences working in tech and my homelab">
|
||||
<meta name="author" content="Norm Rasmussen">
|
||||
<link rel="canonical" href="../tags/documentation.html">
|
||||
<script defer data-domain="selfhosted.rsmsn.co" src="https://analytics.rsmsn.co/js/script.js"></script>
|
||||
<link crossorigin="anonymous" href="../assets/css/stylesheet.b609c58d5c11bb90b1a54e04005d74ad1ddf22165eb79f5533967e57df9c3b50.css" integrity="sha256-tgnFjVwRu5CxpU4EAF10rR3fIhZet59VM5Z+V9+cO1A=" rel="preload stylesheet" as="style">
|
||||
<link rel="icon" href="../favicon.ico">
|
||||
<link rel="icon" type="image/png" sizes="16x16" href="../favicon-16x16.png">
|
||||
<link rel="icon" type="image/png" sizes="32x32" href="../rsmsncircles.ico">
|
||||
<link rel="apple-touch-icon" href="../apple-touch-icon.png">
|
||||
<link rel="mask-icon" href="../safari-pinned-tab.svg">
|
||||
<meta name="theme-color" content="#2e2e33">
|
||||
<meta name="msapplication-TileColor" content="#2e2e33">
|
||||
<link rel="alternate" type="application/rss+xml" href="../tags/documentation/index.xml">
|
||||
<link rel="alternate" hreflang="en" href="../tags/documentation.html">
|
||||
<noscript>
|
||||
<style>
|
||||
#theme-toggle,
|
||||
.top-link {
|
||||
display: none;
|
||||
}
|
||||
|
||||
</style>
|
||||
</noscript><meta property="og:title" content="Documentation" />
|
||||
<meta property="og:description" content="A semi-technical blog & series of experiences working in tech and my homelab" />
|
||||
<meta property="og:type" content="website" />
|
||||
<meta property="og:url" content="/tags/documentation.html" /><meta property="og:site_name" content="Norm-working Packets" />
|
||||
|
||||
<meta name="twitter:card" content="summary"/>
|
||||
<meta name="twitter:title" content="Documentation"/>
|
||||
<meta name="twitter:description" content="A semi-technical blog & series of experiences working in tech and my homelab"/>
|
||||
|
||||
</head>
|
||||
|
||||
<body class="list dark" id="top">
|
||||
<script>
|
||||
if (localStorage.getItem("pref-theme") === "light") {
|
||||
document.body.classList.remove('dark')
|
||||
}
|
||||
|
||||
</script>
|
||||
|
||||
<header class="header">
|
||||
<nav class="nav">
|
||||
<div class="logo">
|
||||
<a href="../" accesskey="h" title="Norm-working Packets 💾 (Alt + H)">Norm-working Packets 💾</a>
|
||||
<div class="logo-switches">
|
||||
<button id="theme-toggle" accesskey="t" title="(Alt + T)">
|
||||
<svg id="moon" xmlns="http://www.w3.org/2000/svg" width="24" height="18" viewBox="0 0 24 24"
|
||||
fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"
|
||||
stroke-linejoin="round">
|
||||
<path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"></path>
|
||||
</svg>
|
||||
<svg id="sun" xmlns="http://www.w3.org/2000/svg" width="24" height="18" viewBox="0 0 24 24"
|
||||
fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"
|
||||
stroke-linejoin="round">
|
||||
<circle cx="12" cy="12" r="5"></circle>
|
||||
<line x1="12" y1="1" x2="12" y2="3"></line>
|
||||
<line x1="12" y1="21" x2="12" y2="23"></line>
|
||||
<line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line>
|
||||
<line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line>
|
||||
<line x1="1" y1="12" x2="3" y2="12"></line>
|
||||
<line x1="21" y1="12" x2="23" y2="12"></line>
|
||||
<line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line>
|
||||
<line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line>
|
||||
</svg>
|
||||
</button>
|
||||
<ul class="lang-switch"><li>|</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<ul id="menu">
|
||||
<li>
|
||||
<a href="../posts.html" title="Posts">
|
||||
<span>Posts</span>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</nav>
|
||||
</header>
|
||||
<main class="main">
|
||||
<header class="page-header"><div class="breadcrumbs"><a href="../">Home</a> » <a href="../tags.html">Tags</a></div>
|
||||
<h1>
|
||||
Documentation
|
||||
</h1>
|
||||
</header>
|
||||
|
||||
<article class="post-entry tag-entry">
|
||||
<header class="entry-header">
|
||||
<h2 class="entry-hint-parent">How to Revisit your Terminal Session's History
|
||||
</h2>
|
||||
</header>
|
||||
<div class="entry-content">
|
||||
<p>I can’t believe I didn’t know about this command beforehand. When I first got into self-hosting and homelabbing, one of the app ideas I had that would help me with internal documentation is a terminal program that saves your input and output to a file for you to review later and extract the key commands you used. I also had the bonus idea that you could add comments as you were writing out commands....</p>
|
||||
</div>
|
||||
<footer class="entry-footer"><span title='2024-03-19 11:00:53 -0400 EDT'>March 19, 2024</span> · 3 min · 481 words · Me</footer>
|
||||
<a class="entry-link" aria-label="post link to How to Revisit your Terminal Session's History" href="../posts/save_terminal_to_file.html"></a>
|
||||
</article>
|
||||
</main>
|
||||
|
||||
<footer class="footer">
|
||||
<span>© 2024 <a href="../">Norm-working Packets 💾</a></span>
|
||||
<span>
|
||||
Powered by
|
||||
<a href="https://gohugo.io/" rel="noopener noreferrer" target="_blank">Hugo</a> &
|
||||
<a href="https://github.com/adityatelange/hugo-PaperMod/" rel="noopener" target="_blank">PaperMod</a>
|
||||
</span>
|
||||
</footer>
|
||||
<a href="#top" aria-label="go to top" title="Go to Top (Alt + G)" class="top-link" id="top-link" accesskey="g">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 12 6" fill="currentColor">
|
||||
<path d="M12 6H0l6-6z" />
|
||||
</svg>
|
||||
</a>
|
||||
|
||||
<script>
|
||||
let menu = document.getElementById('menu')
|
||||
if (menu) {
|
||||
menu.scrollLeft = localStorage.getItem("menu-scroll-position");
|
||||
menu.onscroll = function () {
|
||||
localStorage.setItem("menu-scroll-position", menu.scrollLeft);
|
||||
}
|
||||
}
|
||||
|
||||
document.querySelectorAll('a[href^="#"]').forEach(anchor => {
|
||||
anchor.addEventListener("click", function (e) {
|
||||
e.preventDefault();
|
||||
var id = this.getAttribute("href").substr(1);
|
||||
if (!window.matchMedia('(prefers-reduced-motion: reduce)').matches) {
|
||||
document.querySelector(`[id='${decodeURIComponent(id)}']`).scrollIntoView({
|
||||
behavior: "smooth"
|
||||
});
|
||||
} else {
|
||||
document.querySelector(`[id='${decodeURIComponent(id)}']`).scrollIntoView();
|
||||
}
|
||||
if (id === "top") {
|
||||
history.replaceState(null, null, " ");
|
||||
} else {
|
||||
history.pushState(null, null, `#${id}`);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
</script>
|
||||
<script>
|
||||
var mybutton = document.getElementById("top-link");
|
||||
window.onscroll = function () {
|
||||
if (document.body.scrollTop > 800 || document.documentElement.scrollTop > 800) {
|
||||
mybutton.style.visibility = "visible";
|
||||
mybutton.style.opacity = "1";
|
||||
} else {
|
||||
mybutton.style.visibility = "hidden";
|
||||
mybutton.style.opacity = "0";
|
||||
}
|
||||
};
|
||||
|
||||
</script>
|
||||
<script>
|
||||
document.getElementById("theme-toggle").addEventListener("click", () => {
|
||||
if (document.body.className.includes("dark")) {
|
||||
document.body.classList.remove('dark');
|
||||
localStorage.setItem("pref-theme", 'light');
|
||||
} else {
|
||||
document.body.classList.add('dark');
|
||||
localStorage.setItem("pref-theme", 'dark');
|
||||
}
|
||||
})
|
||||
|
||||
</script>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
19
public/tags/documentation/index.xml
Normal file
19
public/tags/documentation/index.xml
Normal file
@ -0,0 +1,19 @@
|
||||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
|
||||
<channel>
|
||||
<title>Documentation on Norm-working Packets 💾</title>
|
||||
<link>/tags/documentation.html</link>
|
||||
<description>Recent content in Documentation on Norm-working Packets 💾</description>
|
||||
<generator>Hugo -- gohugo.io</generator>
|
||||
<language>en-us</language>
|
||||
<lastBuildDate>Tue, 19 Mar 2024 11:00:53 -0400</lastBuildDate>
|
||||
<atom:link href="/tags/documentation/index.xml" rel="self" type="application/rss+xml" />
|
||||
<item>
|
||||
<title>How to Revisit your Terminal Session's History</title>
|
||||
<link>/posts/save_terminal_to_file.html</link>
|
||||
<pubDate>Tue, 19 Mar 2024 11:00:53 -0400</pubDate>
|
||||
<guid>/posts/save_terminal_to_file.html</guid>
|
||||
<description>Go beyond zsh/bash_history and save both your commands and the output to a file for later review! This command will help any homelabber that struggles with documentation for their network and services.</description>
|
||||
</item>
|
||||
</channel>
|
||||
</rss>
|
||||
10
public/tags/documentation/page/1.html
Normal file
10
public/tags/documentation/page/1.html
Normal file
@ -0,0 +1,10 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en-us">
|
||||
<head>
|
||||
<title>/tags/documentation.html</title>
|
||||
<link rel="canonical" href="../../../tags/documentation.html">
|
||||
<meta name="robots" content="noindex">
|
||||
<meta charset="utf-8">
|
||||
<meta http-equiv="refresh" content="0; url=../../../tags/documentation.html">
|
||||
</head>
|
||||
</html>
|
||||
@ -13,7 +13,7 @@
|
||||
<link>/posts/google_scripts_sheets_to_slides.html</link>
|
||||
<pubDate>Sun, 25 Feb 2024 10:14:30 -0500</pubDate>
|
||||
<guid>/posts/google_scripts_sheets_to_slides.html</guid>
|
||||
<description>Learn about running a quick automation that turns rows in your Google Sheets and plugs it into a Google [Slide](2024-02-26_slide.md) template to easily share more attractive content.</description>
|
||||
<description>Learn about running a quick automation that turns rows in your Google Sheets and plugs it into a Google Slide template to easily share more attractive content.</description>
|
||||
</item>
|
||||
</channel>
|
||||
</rss>
|
||||
|
||||
@ -6,8 +6,29 @@
|
||||
<description>Recent content in Tags on Norm-working Packets 💾</description>
|
||||
<generator>Hugo -- gohugo.io</generator>
|
||||
<language>en-us</language>
|
||||
<lastBuildDate>Sun, 25 Feb 2024 10:14:30 -0500</lastBuildDate>
|
||||
<lastBuildDate>Tue, 19 Mar 2024 11:00:53 -0400</lastBuildDate>
|
||||
<atom:link href="/tags/index.xml" rel="self" type="application/rss+xml" />
|
||||
<item>
|
||||
<title>Cli</title>
|
||||
<link>/tags/cli.html</link>
|
||||
<pubDate>Tue, 19 Mar 2024 11:00:53 -0400</pubDate>
|
||||
<guid>/tags/cli.html</guid>
|
||||
<description></description>
|
||||
</item>
|
||||
<item>
|
||||
<title>Documentation</title>
|
||||
<link>/tags/documentation.html</link>
|
||||
<pubDate>Tue, 19 Mar 2024 11:00:53 -0400</pubDate>
|
||||
<guid>/tags/documentation.html</guid>
|
||||
<description></description>
|
||||
</item>
|
||||
<item>
|
||||
<title>Terminal</title>
|
||||
<link>/tags/terminal.html</link>
|
||||
<pubDate>Tue, 19 Mar 2024 11:00:53 -0400</pubDate>
|
||||
<guid>/tags/terminal.html</guid>
|
||||
<description></description>
|
||||
</item>
|
||||
<item>
|
||||
<title>Google</title>
|
||||
<link>/tags/google.html</link>
|
||||
|
||||
@ -10,6 +10,7 @@
|
||||
<meta name="description" content="A semi-technical blog & series of experiences working in tech and my homelab">
|
||||
<meta name="author" content="Norm Rasmussen">
|
||||
<link rel="canonical" href="//localhost:1313/tags/resources.html">
|
||||
<script defer data-domain="selfhosted.rsmsn.co" src="https://analytics.rsmsn.co/js/script.js"></script>
|
||||
<link crossorigin="anonymous" href="../assets/css/stylesheet.b609c58d5c11bb90b1a54e04005d74ad1ddf22165eb79f5533967e57df9c3b50.css" integrity="sha256-tgnFjVwRu5CxpU4EAF10rR3fIhZet59VM5Z+V9+cO1A=" rel="preload stylesheet" as="style">
|
||||
<link rel="icon" href="//localhost:1313/favicon.ico">
|
||||
<link rel="icon" type="image/png" sizes="16x16" href="//localhost:1313/favicon-16x16.png">
|
||||
|
||||
@ -10,6 +10,7 @@
|
||||
<meta name="description" content="A semi-technical blog & series of experiences working in tech and my homelab">
|
||||
<meta name="author" content="Norm Rasmussen">
|
||||
<link rel="canonical" href="//localhost:1313/tags/script.html">
|
||||
<script defer data-domain="selfhosted.rsmsn.co" src="https://analytics.rsmsn.co/js/script.js"></script>
|
||||
<link crossorigin="anonymous" href="../assets/css/stylesheet.b609c58d5c11bb90b1a54e04005d74ad1ddf22165eb79f5533967e57df9c3b50.css" integrity="sha256-tgnFjVwRu5CxpU4EAF10rR3fIhZet59VM5Z+V9+cO1A=" rel="preload stylesheet" as="style">
|
||||
<link rel="icon" href="//localhost:1313/favicon.ico">
|
||||
<link rel="icon" type="image/png" sizes="16x16" href="//localhost:1313/favicon-16x16.png">
|
||||
|
||||
@ -13,7 +13,7 @@
|
||||
<link>/posts/google_scripts_sheets_to_slides.html</link>
|
||||
<pubDate>Sun, 25 Feb 2024 10:14:30 -0500</pubDate>
|
||||
<guid>/posts/google_scripts_sheets_to_slides.html</guid>
|
||||
<description>Learn about running a quick automation that turns rows in your Google Sheets and plugs it into a Google [Slide](2024-02-26_slide.md) template to easily share more attractive content.</description>
|
||||
<description>Learn about running a quick automation that turns rows in your Google Sheets and plugs it into a Google Slide template to easily share more attractive content.</description>
|
||||
</item>
|
||||
</channel>
|
||||
</rss>
|
||||
|
||||
@ -13,7 +13,7 @@
|
||||
<link>/posts/google_scripts_sheets_to_slides.html</link>
|
||||
<pubDate>Sun, 25 Feb 2024 10:14:30 -0500</pubDate>
|
||||
<guid>/posts/google_scripts_sheets_to_slides.html</guid>
|
||||
<description>Learn about running a quick automation that turns rows in your Google Sheets and plugs it into a Google [Slide](2024-02-26_slide.md) template to easily share more attractive content.</description>
|
||||
<description>Learn about running a quick automation that turns rows in your Google Sheets and plugs it into a Google Slide template to easily share more attractive content.</description>
|
||||
</item>
|
||||
</channel>
|
||||
</rss>
|
||||
|
||||
@ -10,6 +10,7 @@
|
||||
<meta name="description" content="A semi-technical blog & series of experiences working in tech and my homelab">
|
||||
<meta name="author" content="Norm Rasmussen">
|
||||
<link rel="canonical" href="//localhost:1313/tags/shell.html">
|
||||
<script defer data-domain="selfhosted.rsmsn.co" src="https://analytics.rsmsn.co/js/script.js"></script>
|
||||
<link crossorigin="anonymous" href="../assets/css/stylesheet.b609c58d5c11bb90b1a54e04005d74ad1ddf22165eb79f5533967e57df9c3b50.css" integrity="sha256-tgnFjVwRu5CxpU4EAF10rR3fIhZet59VM5Z+V9+cO1A=" rel="preload stylesheet" as="style">
|
||||
<link rel="icon" href="//localhost:1313/favicon.ico">
|
||||
<link rel="icon" type="image/png" sizes="16x16" href="//localhost:1313/favicon-16x16.png">
|
||||
|
||||
179
public/tags/terminal.html
Normal file
179
public/tags/terminal.html
Normal file
@ -0,0 +1,179 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en" dir="auto">
|
||||
|
||||
<head><meta charset="utf-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
||||
<meta name="robots" content="index, follow">
|
||||
<title>Terminal | Norm-working Packets 💾</title>
|
||||
<meta name="keywords" content="">
|
||||
<meta name="description" content="A semi-technical blog & series of experiences working in tech and my homelab">
|
||||
<meta name="author" content="Norm Rasmussen">
|
||||
<link rel="canonical" href="../tags/terminal.html">
|
||||
<script defer data-domain="selfhosted.rsmsn.co" src="https://analytics.rsmsn.co/js/script.js"></script>
|
||||
<link crossorigin="anonymous" href="../assets/css/stylesheet.b609c58d5c11bb90b1a54e04005d74ad1ddf22165eb79f5533967e57df9c3b50.css" integrity="sha256-tgnFjVwRu5CxpU4EAF10rR3fIhZet59VM5Z+V9+cO1A=" rel="preload stylesheet" as="style">
|
||||
<link rel="icon" href="../favicon.ico">
|
||||
<link rel="icon" type="image/png" sizes="16x16" href="../favicon-16x16.png">
|
||||
<link rel="icon" type="image/png" sizes="32x32" href="../rsmsncircles.ico">
|
||||
<link rel="apple-touch-icon" href="../apple-touch-icon.png">
|
||||
<link rel="mask-icon" href="../safari-pinned-tab.svg">
|
||||
<meta name="theme-color" content="#2e2e33">
|
||||
<meta name="msapplication-TileColor" content="#2e2e33">
|
||||
<link rel="alternate" type="application/rss+xml" href="../tags/terminal/index.xml">
|
||||
<link rel="alternate" hreflang="en" href="../tags/terminal.html">
|
||||
<noscript>
|
||||
<style>
|
||||
#theme-toggle,
|
||||
.top-link {
|
||||
display: none;
|
||||
}
|
||||
|
||||
</style>
|
||||
</noscript><meta property="og:title" content="Terminal" />
|
||||
<meta property="og:description" content="A semi-technical blog & series of experiences working in tech and my homelab" />
|
||||
<meta property="og:type" content="website" />
|
||||
<meta property="og:url" content="/tags/terminal.html" /><meta property="og:site_name" content="Norm-working Packets" />
|
||||
|
||||
<meta name="twitter:card" content="summary"/>
|
||||
<meta name="twitter:title" content="Terminal"/>
|
||||
<meta name="twitter:description" content="A semi-technical blog & series of experiences working in tech and my homelab"/>
|
||||
|
||||
</head>
|
||||
|
||||
<body class="list dark" id="top">
|
||||
<script>
|
||||
if (localStorage.getItem("pref-theme") === "light") {
|
||||
document.body.classList.remove('dark')
|
||||
}
|
||||
|
||||
</script>
|
||||
|
||||
<header class="header">
|
||||
<nav class="nav">
|
||||
<div class="logo">
|
||||
<a href="../" accesskey="h" title="Norm-working Packets 💾 (Alt + H)">Norm-working Packets 💾</a>
|
||||
<div class="logo-switches">
|
||||
<button id="theme-toggle" accesskey="t" title="(Alt + T)">
|
||||
<svg id="moon" xmlns="http://www.w3.org/2000/svg" width="24" height="18" viewBox="0 0 24 24"
|
||||
fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"
|
||||
stroke-linejoin="round">
|
||||
<path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"></path>
|
||||
</svg>
|
||||
<svg id="sun" xmlns="http://www.w3.org/2000/svg" width="24" height="18" viewBox="0 0 24 24"
|
||||
fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"
|
||||
stroke-linejoin="round">
|
||||
<circle cx="12" cy="12" r="5"></circle>
|
||||
<line x1="12" y1="1" x2="12" y2="3"></line>
|
||||
<line x1="12" y1="21" x2="12" y2="23"></line>
|
||||
<line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line>
|
||||
<line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line>
|
||||
<line x1="1" y1="12" x2="3" y2="12"></line>
|
||||
<line x1="21" y1="12" x2="23" y2="12"></line>
|
||||
<line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line>
|
||||
<line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line>
|
||||
</svg>
|
||||
</button>
|
||||
<ul class="lang-switch"><li>|</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<ul id="menu">
|
||||
<li>
|
||||
<a href="../posts.html" title="Posts">
|
||||
<span>Posts</span>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</nav>
|
||||
</header>
|
||||
<main class="main">
|
||||
<header class="page-header"><div class="breadcrumbs"><a href="../">Home</a> » <a href="../tags.html">Tags</a></div>
|
||||
<h1>
|
||||
Terminal
|
||||
</h1>
|
||||
</header>
|
||||
|
||||
<article class="post-entry tag-entry">
|
||||
<header class="entry-header">
|
||||
<h2 class="entry-hint-parent">How to Revisit your Terminal Session's History
|
||||
</h2>
|
||||
</header>
|
||||
<div class="entry-content">
|
||||
<p>I can’t believe I didn’t know about this command beforehand. When I first got into self-hosting and homelabbing, one of the app ideas I had that would help me with internal documentation is a terminal program that saves your input and output to a file for you to review later and extract the key commands you used. I also had the bonus idea that you could add comments as you were writing out commands....</p>
|
||||
</div>
|
||||
<footer class="entry-footer"><span title='2024-03-19 11:00:53 -0400 EDT'>March 19, 2024</span> · 3 min · 481 words · Me</footer>
|
||||
<a class="entry-link" aria-label="post link to How to Revisit your Terminal Session's History" href="../posts/save_terminal_to_file.html"></a>
|
||||
</article>
|
||||
</main>
|
||||
|
||||
<footer class="footer">
|
||||
<span>© 2024 <a href="../">Norm-working Packets 💾</a></span>
|
||||
<span>
|
||||
Powered by
|
||||
<a href="https://gohugo.io/" rel="noopener noreferrer" target="_blank">Hugo</a> &
|
||||
<a href="https://github.com/adityatelange/hugo-PaperMod/" rel="noopener" target="_blank">PaperMod</a>
|
||||
</span>
|
||||
</footer>
|
||||
<a href="#top" aria-label="go to top" title="Go to Top (Alt + G)" class="top-link" id="top-link" accesskey="g">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 12 6" fill="currentColor">
|
||||
<path d="M12 6H0l6-6z" />
|
||||
</svg>
|
||||
</a>
|
||||
|
||||
<script>
|
||||
let menu = document.getElementById('menu')
|
||||
if (menu) {
|
||||
menu.scrollLeft = localStorage.getItem("menu-scroll-position");
|
||||
menu.onscroll = function () {
|
||||
localStorage.setItem("menu-scroll-position", menu.scrollLeft);
|
||||
}
|
||||
}
|
||||
|
||||
document.querySelectorAll('a[href^="#"]').forEach(anchor => {
|
||||
anchor.addEventListener("click", function (e) {
|
||||
e.preventDefault();
|
||||
var id = this.getAttribute("href").substr(1);
|
||||
if (!window.matchMedia('(prefers-reduced-motion: reduce)').matches) {
|
||||
document.querySelector(`[id='${decodeURIComponent(id)}']`).scrollIntoView({
|
||||
behavior: "smooth"
|
||||
});
|
||||
} else {
|
||||
document.querySelector(`[id='${decodeURIComponent(id)}']`).scrollIntoView();
|
||||
}
|
||||
if (id === "top") {
|
||||
history.replaceState(null, null, " ");
|
||||
} else {
|
||||
history.pushState(null, null, `#${id}`);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
</script>
|
||||
<script>
|
||||
var mybutton = document.getElementById("top-link");
|
||||
window.onscroll = function () {
|
||||
if (document.body.scrollTop > 800 || document.documentElement.scrollTop > 800) {
|
||||
mybutton.style.visibility = "visible";
|
||||
mybutton.style.opacity = "1";
|
||||
} else {
|
||||
mybutton.style.visibility = "hidden";
|
||||
mybutton.style.opacity = "0";
|
||||
}
|
||||
};
|
||||
|
||||
</script>
|
||||
<script>
|
||||
document.getElementById("theme-toggle").addEventListener("click", () => {
|
||||
if (document.body.className.includes("dark")) {
|
||||
document.body.classList.remove('dark');
|
||||
localStorage.setItem("pref-theme", 'light');
|
||||
} else {
|
||||
document.body.classList.add('dark');
|
||||
localStorage.setItem("pref-theme", 'dark');
|
||||
}
|
||||
})
|
||||
|
||||
</script>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
19
public/tags/terminal/index.xml
Normal file
19
public/tags/terminal/index.xml
Normal file
@ -0,0 +1,19 @@
|
||||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
|
||||
<channel>
|
||||
<title>Terminal on Norm-working Packets 💾</title>
|
||||
<link>/tags/terminal.html</link>
|
||||
<description>Recent content in Terminal on Norm-working Packets 💾</description>
|
||||
<generator>Hugo -- gohugo.io</generator>
|
||||
<language>en-us</language>
|
||||
<lastBuildDate>Tue, 19 Mar 2024 11:00:53 -0400</lastBuildDate>
|
||||
<atom:link href="/tags/terminal/index.xml" rel="self" type="application/rss+xml" />
|
||||
<item>
|
||||
<title>How to Revisit your Terminal Session's History</title>
|
||||
<link>/posts/save_terminal_to_file.html</link>
|
||||
<pubDate>Tue, 19 Mar 2024 11:00:53 -0400</pubDate>
|
||||
<guid>/posts/save_terminal_to_file.html</guid>
|
||||
<description>Go beyond zsh/bash_history and save both your commands and the output to a file for later review! This command will help any homelabber that struggles with documentation for their network and services.</description>
|
||||
</item>
|
||||
</channel>
|
||||
</rss>
|
||||
10
public/tags/terminal/page/1.html
Normal file
10
public/tags/terminal/page/1.html
Normal file
@ -0,0 +1,10 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en-us">
|
||||
<head>
|
||||
<title>/tags/terminal.html</title>
|
||||
<link rel="canonical" href="../../../tags/terminal.html">
|
||||
<meta name="robots" content="noindex">
|
||||
<meta charset="utf-8">
|
||||
<meta http-equiv="refresh" content="0; url=../../../tags/terminal.html">
|
||||
</head>
|
||||
</html>
|
||||
Reference in New Issue
Block a user