{"id":31926,"date":"2022-02-21T22:33:04","date_gmt":"2022-02-21T21:33:04","guid":{"rendered":"https:\/\/www.linuxboxen.dk\/?p=31926"},"modified":"2022-02-21T22:33:04","modified_gmt":"2022-02-21T21:33:04","slug":"bash-history-styrning","status":"publish","type":"post","link":"https:\/\/www.linuxboxen.dk\/?p=31926","title":{"rendered":"Bash history styring"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-31738\" src=\"https:\/\/www.linuxboxen.dk\/wp-content\/uploads\/2021\/08\/png-transparent-bash-shell-script-gnu-bourne-shell-shell-1.png\" alt=\"\" width=\"471\" height=\"390\" \/><\/p>\n<p>BASH (Bourne Again SHell) er standarden i praktisk talt alle Linux-baserede operativsystemer. Alle de kommandoer, vi skriver i terminalen, fortolkes af en shell og bliver en del af dens historie. I denne tutorial ser vi, hvor shell-historikken er gemt, og hvordan man administrerer den ved hj\u00e6lp af den indbyggede &#8220;historie&#8221;-kommando og nogle systemvariabler.<br \/>\n<span id=\"more-12616\"><\/span><\/p>\n<p><strong>I denne vejledning vil du l\u00e6re om<\/strong>:<\/p>\n<ul>\n<li>Hvor og hvordan er BASH kommando historie gemt.<\/li>\n<li>Hvordan man visualisere den aktive shell historie.<\/li>\n<li>Hvordan man i BASH sletter alle kommandoer i historie filen.<\/li>\n<li>Hvordan man i BASH laver en opdatering af bash history filen.<\/li>\n<li>Hvordan man \u00e6ndre BASH historie opf\u00f8rsel via environment variabler.<\/li>\n<\/ul>\n<figure id=\"attachment_12617\" class=\"wp-caption aligncenter\" aria-describedby=\"caption-attachment-12617\"><figcaption id=\"caption-attachment-12617\" class=\"wp-caption-text\">Styring af Bash historie<\/figcaption><\/figure>\n<hr id=\"system-readmore\" \/>\n<h2>Software som skal bruges eller bliver brugt.<\/h2>\n<table class=\"uk-table uk-table-strIPed uk-table-condensed\">\n<caption>Softwarekrav og Linux-kommandolinje<\/caption>\n<thead>\n<tr>\n<th>Kategori<\/th>\n<th>Anvendte krav, konventioner eller softwareversion<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td class=\"uk-text-primary uk-text-bold\">System<\/td>\n<td>Distributions uafh\u00e6ngig<\/td>\n<\/tr>\n<tr>\n<td class=\"uk-text-primary uk-text-bold\">Software<\/td>\n<td>Bash shell<\/td>\n<\/tr>\n<tr>\n<td class=\"uk-text-primary uk-text-bold\">Andet<\/td>\n<td>Ingen<\/td>\n<\/tr>\n<tr>\n<td class=\"uk-text-primary uk-text-bold\">Conventions<\/td>\n<td># \u2013 Kr\u00e6ver at en given <a href=\"https:\/\/linuxconfig.org\/linux-commands\">linux-commands<\/a> skal udf\u00f8res af en root privileges enten som root bruger eller brug af <code>sudo<\/code> kommandoen.<br \/>\n$ \u2013 Kr\u00e6ver at en given <a href=\"https:\/\/linuxconfig.org\/linux-commands\">linux-commands<\/a> skal udf\u00f8res som en normal bruger.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h2>Hvor er BASH historie gemt?<\/h2>\n<p>Hvis vi \u00e5bner en terminal emulator, eller vi arbejder i en TTY, og vi \u00f8nsker at genkalde en kommando, vi har k\u00f8rt tidligere, trykker vi normalt p\u00e5 den \u00f8verste piletast for at navigere tilbage eller p\u00e5 pil ned for at navigere frem i shell historikken. Har du nogensinde spekuleret p\u00e5, hvor og hvordan Bash-historikken gemmes? Listen over kommandoer, vi kalder i Bash-shell, er gemt i den s\u00e5kaldte &#8220;history fil&#8221;, som som standard er <code>~\/.bash_profile<\/code>.<\/p>\n<p>Kommandoer er gemt en pr linje i historie filen, de sidste brugte kommandoer gemmen i memory og skrives f\u00f8rst til filen n\u00e5r shell sessionen bliver lukket eller der bliver giver besked om en opdatering. (Vi kommer ind p\u00e5 det senere i denne guide).<\/p>\n<h2>Arbejde med \u201chistory\u201d indbygget kommando.<\/h2>\n<hr \/>\n<p>For at vise indholdet at den nuv\u00e6rende shell historie, kan vi bruge <code>history<\/code> kommandoen, uden nogle argumenter. Som vist her:<\/p>\n<pre>$ history\n    1  echo \"linuxconfig.org\"\n    2  cat \/etc\/hostname\n    3  ls -l \/etc\/hostname\n    4  history\n<\/pre>\n<h3>Oprydning af Bash shell-historien<\/h3>\n<p>The\u00a0<code>history<\/code> kommandoen bruges ikke kun til at vise den. Den kan ogs\u00e5 andre operationer en vise bash historien. For at fjerne alle historie kommandoer fra bash kan du bruge -c parameteren.<\/p>\n<p>Vi kan ogs\u00e5 fjerne en bestemt linje fra den med \u00a0<code>-d<\/code>\u00a0 parameteren. Hvis vi eksempel vi hvis vil fjerne den f\u00f8rste linje fra bash historie fra memory skrives kommandoen som vist her.<\/p>\n<pre>$ history -d 1<\/pre>\n<p>Negative tal kan bruges som offset: Hvis vi g\u00f8r det, starter linjet\u00e6llingen fra slutningen af listen. Hvis du for eksempel overf\u00f8rer -1 som offset til -d indstillingen, vil den sidste linje i historikken blive fjernet. N\u00e5r vi udf\u00f8rer en s\u00e5dan handling, skal der dog tages h\u00f8jde for \u00e9n ting: Fjernelsen finder sted, efter at historikken -d kommandoen er tilf\u00f8jet til selve listen, s\u00e5 for at slette den tredje linje fra slutningen af historikken burde vi faktisk k\u00f8re historie -d -4. Som et alternativ kunne vi \u00e6ndre vores konfiguration for at f\u00e5 nogle kommandoer som historik ikke med p\u00e5 listen. Vi kan g\u00f8re det ved at arbejde med <code>HISTCONTROL<\/code> eller <code>HISTIGNORE<\/code> variabler.<\/p>\n<h3>Skrivning af history filen manuelt.<\/h3>\n<p>Som vi allerede har n\u00e6vnt, bliver historikken for den shell, vi i \u00f8jeblikket arbejder i, kun skrevet til historiefilen, n\u00e5r shell-sessionen er lukket. Hvad hvis vi \u00f8nsker at tvinge in-memory historie til at blive skrevet p\u00e5 et bestemt tidspunkt? Igen kan vi bruge historik kommandoen til at udf\u00f8re en s\u00e5dan handling. Denne gang skal vi bruge -w indstillingen, som ikke tager noget argument:<\/p>\n<pre>$ history -w<\/pre>\n<h2>\u00c6ndre historie opf\u00f8rsel med environment variabler.<\/h2>\n<hr \/>\n<p>M\u00e5den p\u00e5 at shell-historikken kan \u00e6ndres er ved at indstille v\u00e6rdien af nogle milj\u00f8variabler. Lad os se nogle eksempler.<\/p>\n<h3>HISTCONTROL variable<\/h3>\n<p>Vi har talt lidt om <code>HISTCONTROL<\/code> variablen, hvor vi talt om hvilken type kommandoer som bliver gemt i history filen. Denne variable tager colon separeret &#8220;liste&#8221; af v\u00e6rdier som beskrive hvordan komandoerne er gemt. I de fleste distributioner bliver der brugt <code>ignoredups<\/code>:<\/p>\n<pre>$ echo $HISTCONTROL\nignoredups\n<\/pre>\n<p>hvad betyder det s\u00e5 ?. <code>ignoredups<\/code> beskriver at hvis den forrige kommando er identisk til den, bliver den ikke gemt i history filen. Hvis vi vil undg\u00e5 dubletter i hele shell-historikken uanset hvilken position de har, kan vi bruge\u00a0<code>erasedups<\/code> v\u00e6rdien i stedet for.<\/p>\n<p>En anden brugt v\u00e6rdi som bliver brugt er <code>ignorespace<\/code> hvilken beskriver at alle kommandoer som starter med et space &#8221; &#8221; ikke skal gemmes i\u00a0 shell-historikken. Lad os lave en \u00e6ndring og check at det virker.<\/p>\n<pre>$ HISTCONTROL=\"ignoredups:ignorespace\"\n$  echo \"Denne kommando vil ikke blive gemt i history.\"\n\"Denne kommando vil ikke blive gemt i history.\"\n$  history\n    1  HISTCONTROL=\"ignoredups:ignorespace\"\n<\/pre>\n<p>F\u00f8rst \u00e6ndret vi v\u00e6rdien for <code>HISTCONTROL<\/code> fra\u00a0 \u201cignoredups\u201d til \u201cignoredups:ignorespace\u201d. Vi kunne ogs\u00e5 her bruge <code>ignoreboth<\/code> som betyder det samme. Efter vi har \u00e6ndret HISTCONTROL kan du pr\u00f8ve med en history og du vil se er det kun variable HISTCONTROL=&#8221;ignoredups:ignorespace&#8221; som vises i history. da echo kommandoen starter med et space tegn.<\/p>\n<p>Husk at det vi \u00e6ndre her ikke ikke bliver gemt, efter du har lavet en logout. For at gemme disse \u00e6ndringer skal du \u00e6ndre shell environment filen.<\/p>\n<h3>The HISTIGNORE variable<\/h3>\n<p>Lige som <code>HISTCONTROL<\/code> variablen. S\u00e5 bruges <code>HISTIGNORE<\/code> p\u00e5 samme m\u00e5de med &#8220;:&#8221; som element separator. Men der beskrives hvilken kommandoer som IKKE skal med i shell history filen.<\/p>\n<p>hvad betyder det s\u00e5 ?. Lad os sige vi vil ignorere <code>ls<\/code> og <code>history<\/code> kommandoen. Her er hvad vi skal skrive til <code>HISTIGNORE<\/code><\/p>\n<pre>$ HISTIGNORE=\"ls:history\"\n$ echo \"Dette vil blive gemt i history.\"\nDette vil blive gemt i history\n$ ls\nfile.txt\n$ history\n    1  echo \"Dette vil blive gemt i history\"\n<\/pre>\n<p>&nbsp;<\/p>\n<div class=\"incontent_ads\" data-fuse=\"22189504509\" data-fuse-code=\"fuse-slot-22189504509-1\" data-fuse-slot=\"\/71161633,180063765\/LINUX_linuxconfig\/article_incontent_3\">\n<div id=\"fuse-slot-22189504509-1\" class=\"fuse-slot\" data-google-query-id=\"CJvtqcWFqPUCFRV64Aod9JYLZw\">\n<div id=\"google_ads_iframe_\/71161633,180063765\/LINUX_linuxconfig\/article_incontent_3_0__container__\"><\/div>\n<\/div>\n<\/div>\n<hr \/>\n<p>Som du kan se efter vi har \u00e6ndret v\u00e6rdien gemt i <code>HISTIGNORE<\/code> variablen, bliver kun echo kommandoen vist. Der er lige en ting at huske her. Hvis du havde brugt <code>ls -l<\/code> ville kommandoen blive gemt i history da det kun er <code>ls<\/code> som vi har givet som ignore kommando.<\/p>\n<pre>$ HISTIGNORE=\"ls:history\"\n$ echo \"Dette vil blive gemt i history.\"\nDette vil blive gemt i history.\n$ ls -l\n-rw-rw-r--. 1 egdoc egdoc    0 Jan  7 11:51 file.txt\n$ history\n    1  echo \"Dette vil blive gemt i history.\"\n    2  ls -l\n<\/pre>\n<p>&nbsp;<\/p>\n<p>For at overkomme dette problem kan du bruge * som beskriver alt som kommer efter kommandoen. Vi skulle \u00e6ndre for <code>HISTIGNORE<\/code> p\u00e5 denne m\u00e5de:<\/p>\n<pre>$ HISTIGNORE=\"ls *:history\"\n$ echo \"Dette vil blive gemt i history.\"\nDette vil blive gemt i history.\n$ ls -l\n-rw-rw-r--. 1 gdoc gdoc    0 Jan  7 11:51 file.txt\n$ history\n    1 HISTIGNORE=\"ls *:history\"\n    2 echo \"Dette vil blive gemt i history.\"\n<\/pre>\n<h2>HISTSIZE variablen<\/h2>\n<p><code>HISTSIZE<\/code> beskriver hvor mange linjer som bliver gemt i Bash history. I Ubuntu 18.04 Lts er v\u00e6rdien 1000 linjer default.<\/p>\n<pre>$ echo $HISTSIZE\n1000\n<\/pre>\n<p>Vi kan \u00e6ndre dette med HISTSIZE efter \u00f8nske.<\/p>\n<pre>HISTSIZE=3\n$ echo \"f\u00f8rste kommando\"\nf\u00f8rste kommando\n$ echo \"anden kommando\"\nanden kommando\n$ echo \"tredje kommando\"\ntredje kommando\n$ history\n    2 echo \"f\u00f8rste kommando\"\n    3 echo \"anden kommando\"\n    4 echo \"tredje kommando\"\n<\/pre>\n<p>Som du kan se er HISTSIZE=3 kommandoen slettet fra history, da det var den f\u00f8rste kommando af de fire kommando er udf\u00f8rte. M\u00e5ske lidt extremt, men h\u00e5ber det giver dig en ide om hvordan det virker.<\/p>\n<h2>HISTTIMEFORMAT variablen<\/h2>\n<hr \/>\n<p><code>HISTTIMEFORMAT<\/code>variablen kan bruges til at lave et tids stemple hvorn\u00e5r kommandoen er udf\u00f8rt. Dette timestamp format er bestemt at <code>HISTTIMEFORMAT<\/code> variablen. Nogle at v\u00e6rdierne som du kan bruge er disse:<\/p>\n<table>\n<thead>\n<tr>\n<th>Format<\/th>\n<th>Betydning<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>%d<\/td>\n<td>Dag<\/td>\n<\/tr>\n<tr>\n<td>%m<\/td>\n<td>M\u00e5ned<\/td>\n<\/tr>\n<tr>\n<td>%Y<\/td>\n<td>\u00c5r<\/td>\n<\/tr>\n<tr>\n<td>%H<\/td>\n<td>Time<\/td>\n<\/tr>\n<tr>\n<td>%M<\/td>\n<td>Minuter<\/td>\n<\/tr>\n<tr>\n<td>%S<\/td>\n<td>Sekunder<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Som altid et eksempel. Lad os sige du vil have formatet til at v\u00e6re DD\/MM\/YYYY format. Her er hvad du skal skrive.<\/p>\n<pre>$ HISTTIMEFORMAT=\"%d\/%m\/%Y %H:%M:%S \"\n$ echo \"Denne kommando vil blive gemt i history med tidsstempel.\"\nDenne kommando vil blive gemt i history med tidsstempel.\n$ history\n    1  21\/01\/2022 17:12:09 HISTTIMEFORMAT=\"%d\/%m\/%Y %H:%M:%S \"\n    2  21\/01\/2022 17:12:12 echo \"Denne kommando vil blive gemt i history med tidsstempel.\n<\/pre>\n<h2>Konklusion.<\/h2>\n<p>I denne tutorial skal vi se p\u00e5 hvordan kommandoer vi skriver, n\u00e5r vi bruger Bash, huskes i shell-historikken. Vi s\u00e5, at historien til at begynde med opbevares i hukommelsen og derefter gemmes i den s\u00e5kaldte &#8220;historie fil&#8221;, n\u00e5r shell-sessionen er lukket. Vi s\u00e5, hvordan man visualiserer den nuv\u00e6rende shell-historie, hvordan man renser den, og hvordan man tvinger den til at blive skrevet til fil med det samme med kommandoen &#8220;historie&#8221;. Vi s\u00e5 ogs\u00e5, hvordan man \u00e6ndrer historie adf\u00e6rd via nogle bash systemvariabler.<\/p>\n<div class=\"pvc_clear\"><\/div>\n<p id=\"pvc_stats_31926\" class=\"pvc_stats all  \" data-element-id=\"31926\" style=\"\"><i class=\"pvc-stats-icon medium\" aria-hidden=\"true\"><svg aria-hidden=\"true\" focusable=\"false\" data-prefix=\"far\" data-icon=\"chart-bar\" role=\"img\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"svg-inline--fa fa-chart-bar fa-w-16 fa-2x\"><path fill=\"currentColor\" d=\"M396.8 352h22.4c6.4 0 12.8-6.4 12.8-12.8V108.8c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v230.4c0 6.4 6.4 12.8 12.8 12.8zm-192 0h22.4c6.4 0 12.8-6.4 12.8-12.8V140.8c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v198.4c0 6.4 6.4 12.8 12.8 12.8zm96 0h22.4c6.4 0 12.8-6.4 12.8-12.8V204.8c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v134.4c0 6.4 6.4 12.8 12.8 12.8zM496 400H48V80c0-8.84-7.16-16-16-16H16C7.16 64 0 71.16 0 80v336c0 17.67 14.33 32 32 32h464c8.84 0 16-7.16 16-16v-16c0-8.84-7.16-16-16-16zm-387.2-48h22.4c6.4 0 12.8-6.4 12.8-12.8v-70.4c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v70.4c0 6.4 6.4 12.8 12.8 12.8z\" class=\"\"><\/path><\/svg><\/i> <img loading=\"lazy\" decoding=\"async\" width=\"16\" height=\"16\" alt=\"Loading\" src=\"https:\/\/www.linuxboxen.dk\/wp-content\/plugins\/page-views-count\/ajax-loader-2x.gif\" border=0 \/><\/p>\n<div class=\"pvc_clear\"><\/div>\n","protected":false},"excerpt":{"rendered":"<p>BASH (Bourne Again SHell) er standarden i praktisk talt alle Linux-baserede operativsystemer. Alle de kommandoer, vi skriver i terminalen, fortolkes af en shell og bliver en del af dens historie. I denne tutorial ser vi, hvor shell-historikken er gemt, og hvordan man administrerer den ved hj\u00e6lp af den indbyggede &#8220;historie&#8221;-kommando og nogle systemvariabler. I denne [&hellip;]<\/p>\n<div class=\"pvc_clear\"><\/div>\n<p id=\"pvc_stats_31926\" class=\"pvc_stats all  \" data-element-id=\"31926\" style=\"\"><i class=\"pvc-stats-icon medium\" aria-hidden=\"true\"><svg aria-hidden=\"true\" focusable=\"false\" data-prefix=\"far\" data-icon=\"chart-bar\" role=\"img\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"svg-inline--fa fa-chart-bar fa-w-16 fa-2x\"><path fill=\"currentColor\" d=\"M396.8 352h22.4c6.4 0 12.8-6.4 12.8-12.8V108.8c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v230.4c0 6.4 6.4 12.8 12.8 12.8zm-192 0h22.4c6.4 0 12.8-6.4 12.8-12.8V140.8c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v198.4c0 6.4 6.4 12.8 12.8 12.8zm96 0h22.4c6.4 0 12.8-6.4 12.8-12.8V204.8c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v134.4c0 6.4 6.4 12.8 12.8 12.8zM496 400H48V80c0-8.84-7.16-16-16-16H16C7.16 64 0 71.16 0 80v336c0 17.67 14.33 32 32 32h464c8.84 0 16-7.16 16-16v-16c0-8.84-7.16-16-16-16zm-387.2-48h22.4c6.4 0 12.8-6.4 12.8-12.8v-70.4c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v70.4c0 6.4 6.4 12.8 12.8 12.8z\" class=\"\"><\/path><\/svg><\/i> <img loading=\"lazy\" decoding=\"async\" width=\"16\" height=\"16\" alt=\"Loading\" src=\"https:\/\/www.linuxboxen.dk\/wp-content\/plugins\/page-views-count\/ajax-loader-2x.gif\" border=0 \/><\/p>\n<div class=\"pvc_clear\"><\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_sitemap_exclude":false,"_sitemap_priority":"","_sitemap_frequency":"","footnotes":""},"categories":[5,2,8],"tags":[],"class_list":["post-31926","post","type-post","status-publish","format-standard","hentry","category-bash","category-tips","category-shell"],"a3_pvc":{"activated":true,"total_views":32,"today_views":0},"_links":{"self":[{"href":"https:\/\/www.linuxboxen.dk\/index.php?rest_route=\/wp\/v2\/posts\/31926","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.linuxboxen.dk\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.linuxboxen.dk\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.linuxboxen.dk\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.linuxboxen.dk\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=31926"}],"version-history":[{"count":0,"href":"https:\/\/www.linuxboxen.dk\/index.php?rest_route=\/wp\/v2\/posts\/31926\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.linuxboxen.dk\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=31926"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.linuxboxen.dk\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=31926"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.linuxboxen.dk\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=31926"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}