Files
Linux/Task_4-6/Linux-Cl-Praktikum_05_en.html

1295 lines
83 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="author" content="Prof. Dr. Andreas Claßen">
<title>Linux Praktikumstermin 2025_05: Processes / Files</title>
<style>
/*! Asciidoctor default stylesheet | MIT License | https://asciidoctor.org */
/* Uncomment the following line when using as a custom stylesheet */
html{font-family:sans-serif;-webkit-text-size-adjust:100%}
a{background:none}
a:focus{outline:thin dotted}
a:active,a:hover{outline:0}
h1{font-size:2em;margin:.67em 0}
b,strong{font-weight:bold}
abbr{font-size:.9em}
abbr[title]{cursor:help;border-bottom:1px dotted #dddddf;text-decoration:none}
dfn{font-style:italic}
hr{height:0}
mark{background:#ff0;color:#000}
code,kbd,pre,samp{font-family:monospace;font-size:1em}
pre{white-space:pre-wrap}
q{quotes:"\201C" "\201D" "\2018" "\2019"}
small{font-size:80%}
sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}
sup{top:-.5em}
sub{bottom:-.25em}
img{border:0}
svg:not(:root){overflow:hidden}
figure{margin:0}
audio,video{display:inline-block}
audio:not([controls]){display:none;height:0}
fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}
legend{border:0;padding:0}
button,input,select,textarea{font-family:inherit;font-size:100%;margin:0}
button,input{line-height:normal}
button,select{text-transform:none}
button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}
button[disabled],html input[disabled]{cursor:default}
input[type=checkbox],input[type=radio]{padding:0}
button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}
textarea{overflow:auto;vertical-align:top}
table{border-collapse:collapse;border-spacing:0}
*,::before,::after{box-sizing:border-box}
html,body{font-size:100%}
body{background:#fff;color:rgba(0,0,0,.8);padding:0;margin:0;font-family:"Noto Serif","DejaVu Serif",serif;line-height:1;position:relative;cursor:auto;-moz-tab-size:4;-o-tab-size:4;tab-size:4;word-wrap:anywhere;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}
a:hover{cursor:pointer}
img,object,embed{max-width:100%;height:auto}
object,embed{height:100%}
img{-ms-interpolation-mode:bicubic}
.left{float:left!important}
.right{float:right!important}
.text-left{text-align:left!important}
.text-right{text-align:right!important}
.text-center{text-align:center!important}
.text-justify{text-align:justify!important}
.hide{display:none}
img,object,svg{display:inline-block;vertical-align:middle}
textarea{height:auto;min-height:50px}
select{width:100%}
.subheader,.admonitionblock td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{line-height:1.45;color:#7a2518;font-weight:400;margin-top:0;margin-bottom:.25em}
div,dl,dt,dd,ul,ol,li,h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6,pre,form,p,blockquote,th,td{margin:0;padding:0}
a{color:#2156a5;text-decoration:underline;line-height:inherit}
a:hover,a:focus{color:#1d4b8f}
a img{border:0}
p{line-height:1.6;margin-bottom:1.25em;text-rendering:optimizeLegibility}
p aside{font-size:.875em;line-height:1.35;font-style:italic}
h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{font-family:"Open Sans","DejaVu Sans",sans-serif;font-weight:300;font-style:normal;color:#ba3925;text-rendering:optimizeLegibility;margin-top:1em;margin-bottom:.5em;line-height:1.0125em}
h1 small,h2 small,h3 small,#toctitle small,.sidebarblock>.content>.title small,h4 small,h5 small,h6 small{font-size:60%;color:#e99b8f;line-height:0}
h1{font-size:2.125em}
h2{font-size:1.6875em}
h3,#toctitle,.sidebarblock>.content>.title{font-size:1.375em}
h4,h5{font-size:1.125em}
h6{font-size:1em}
hr{border:solid #dddddf;border-width:1px 0 0;clear:both;margin:1.25em 0 1.1875em}
em,i{font-style:italic;line-height:inherit}
strong,b{font-weight:bold;line-height:inherit}
small{font-size:60%;line-height:inherit}
code{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;font-weight:400;color:rgba(0,0,0,.9)}
ul,ol,dl{line-height:1.6;margin-bottom:1.25em;list-style-position:outside;font-family:inherit}
ul,ol{margin-left:1.5em}
ul li ul,ul li ol{margin-left:1.25em;margin-bottom:0}
ul.circle{list-style-type:circle}
ul.disc{list-style-type:disc}
ul.square{list-style-type:square}
ul.circle ul:not([class]),ul.disc ul:not([class]),ul.square ul:not([class]){list-style:inherit}
ol li ul,ol li ol{margin-left:1.25em;margin-bottom:0}
dl dt{margin-bottom:.3125em;font-weight:bold}
dl dd{margin-bottom:1.25em}
blockquote{margin:0 0 1.25em;padding:.5625em 1.25em 0 1.1875em;border-left:1px solid #ddd}
blockquote,blockquote p{line-height:1.6;color:rgba(0,0,0,.85)}
@media screen and (min-width:768px){h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2}
h1{font-size:2.75em}
h2{font-size:2.3125em}
h3,#toctitle,.sidebarblock>.content>.title{font-size:1.6875em}
h4{font-size:1.4375em}}
table{background:#fff;margin-bottom:1.25em;border:1px solid #dedede;word-wrap:normal}
table thead,table tfoot{background:#f7f8f7}
table thead tr th,table thead tr td,table tfoot tr th,table tfoot tr td{padding:.5em .625em .625em;font-size:inherit;color:rgba(0,0,0,.8);text-align:left}
table tr th,table tr td{padding:.5625em .625em;font-size:inherit;color:rgba(0,0,0,.8)}
table tr.even,table tr.alt{background:#f8f8f7}
table thead tr th,table tfoot tr th,table tbody tr td,table tr td,table tfoot tr td{line-height:1.6}
h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2;word-spacing:-.05em}
h1 strong,h2 strong,h3 strong,#toctitle strong,.sidebarblock>.content>.title strong,h4 strong,h5 strong,h6 strong{font-weight:400}
.center{margin-left:auto;margin-right:auto}
.stretch{width:100%}
.clearfix::before,.clearfix::after,.float-group::before,.float-group::after{content:" ";display:table}
.clearfix::after,.float-group::after{clear:both}
:not(pre).nobreak{word-wrap:normal}
:not(pre).nowrap{white-space:nowrap}
:not(pre).pre-wrap{white-space:pre-wrap}
:not(pre):not([class^=L])>code{font-size:.9375em;font-style:normal!important;letter-spacing:0;padding:.1em .5ex;word-spacing:-.15em;background:#f7f7f8;border-radius:4px;line-height:1.45;text-rendering:optimizeSpeed}
pre{color:rgba(0,0,0,.9);font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;line-height:1.45;text-rendering:optimizeSpeed}
pre code,pre pre{color:inherit;font-size:inherit;line-height:inherit}
pre>code{display:block}
pre.nowrap,pre.nowrap pre{white-space:pre;word-wrap:normal}
em em{font-style:normal}
strong strong{font-weight:400}
.keyseq{color:rgba(51,51,51,.8)}
kbd{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;display:inline-block;color:rgba(0,0,0,.8);font-size:.65em;line-height:1.45;background:#f7f7f7;border:1px solid #ccc;border-radius:3px;box-shadow:0 1px 0 rgba(0,0,0,.2),inset 0 0 0 .1em #fff;margin:0 .15em;padding:.2em .5em;vertical-align:middle;position:relative;top:-.1em;white-space:nowrap}
.keyseq kbd:first-child{margin-left:0}
.keyseq kbd:last-child{margin-right:0}
.menuseq,.menuref{color:#000}
.menuseq b:not(.caret),.menuref{font-weight:inherit}
.menuseq{word-spacing:-.02em}
.menuseq b.caret{font-size:1.25em;line-height:.8}
.menuseq i.caret{font-weight:bold;text-align:center;width:.45em}
b.button::before,b.button::after{position:relative;top:-1px;font-weight:400}
b.button::before{content:"[";padding:0 3px 0 2px}
b.button::after{content:"]";padding:0 2px 0 3px}
p a>code:hover{color:rgba(0,0,0,.9)}
#header,#content,#footnotes,#footer{width:100%;margin:0 auto;max-width:62.5em;*zoom:1;position:relative;padding-left:.9375em;padding-right:.9375em}
#header::before,#header::after,#content::before,#content::after,#footnotes::before,#footnotes::after,#footer::before,#footer::after{content:" ";display:table}
#header::after,#content::after,#footnotes::after,#footer::after{clear:both}
#content{margin-top:1.25em}
#content::before{content:none}
#header>h1:first-child{color:rgba(0,0,0,.85);margin-top:2.25rem;margin-bottom:0}
#header>h1:first-child+#toc{margin-top:8px;border-top:1px solid #dddddf}
#header>h1:only-child{border-bottom:1px solid #dddddf;padding-bottom:8px}
#header .details{border-bottom:1px solid #dddddf;line-height:1.45;padding-top:.25em;padding-bottom:.25em;padding-left:.25em;color:rgba(0,0,0,.6);display:flex;flex-flow:row wrap}
#header .details span:first-child{margin-left:-.125em}
#header .details span.email a{color:rgba(0,0,0,.85)}
#header .details br{display:none}
#header .details br+span::before{content:"\00a0\2013\00a0"}
#header .details br+span.author::before{content:"\00a0\22c5\00a0";color:rgba(0,0,0,.85)}
#header .details br+span#revremark::before{content:"\00a0|\00a0"}
#header #revnumber{text-transform:capitalize}
#header #revnumber::after{content:"\00a0"}
#content>h1:first-child:not([class]){color:rgba(0,0,0,.85);border-bottom:1px solid #dddddf;padding-bottom:8px;margin-top:0;padding-top:1rem;margin-bottom:1.25rem}
#toc{border-bottom:1px solid #e7e7e9;padding-bottom:.5em}
#toc>ul{margin-left:.125em}
#toc ul.sectlevel0>li>a{font-style:italic}
#toc ul.sectlevel0 ul.sectlevel1{margin:.5em 0}
#toc ul{font-family:"Open Sans","DejaVu Sans",sans-serif;list-style-type:none}
#toc li{line-height:1.3334;margin-top:.3334em}
#toc a{text-decoration:none}
#toc a:active{text-decoration:underline}
#toctitle{color:#7a2518;font-size:1.2em}
@media screen and (min-width:768px){#toctitle{font-size:1.375em}
body.toc2{padding-left:15em;padding-right:0}
body.toc2 #header>h1:nth-last-child(2){border-bottom:1px solid #dddddf;padding-bottom:8px}
#toc.toc2{margin-top:0!important;background:#f8f8f7;position:fixed;width:15em;left:0;top:0;border-right:1px solid #e7e7e9;border-top-width:0!important;border-bottom-width:0!important;z-index:1000;padding:1.25em 1em;height:100%;overflow:auto}
#toc.toc2 #toctitle{margin-top:0;margin-bottom:.8rem;font-size:1.2em}
#toc.toc2>ul{font-size:.9em;margin-bottom:0}
#toc.toc2 ul ul{margin-left:0;padding-left:1em}
#toc.toc2 ul.sectlevel0 ul.sectlevel1{padding-left:0;margin-top:.5em;margin-bottom:.5em}
body.toc2.toc-right{padding-left:0;padding-right:15em}
body.toc2.toc-right #toc.toc2{border-right-width:0;border-left:1px solid #e7e7e9;left:auto;right:0}}
@media screen and (min-width:1280px){body.toc2{padding-left:20em;padding-right:0}
#toc.toc2{width:20em}
#toc.toc2 #toctitle{font-size:1.375em}
#toc.toc2>ul{font-size:.95em}
#toc.toc2 ul ul{padding-left:1.25em}
body.toc2.toc-right{padding-left:0;padding-right:20em}}
#content #toc{border:1px solid #e0e0dc;margin-bottom:1.25em;padding:1.25em;background:#f8f8f7;border-radius:4px}
#content #toc>:first-child{margin-top:0}
#content #toc>:last-child{margin-bottom:0}
#footer{max-width:none;background:rgba(0,0,0,.8);padding:1.25em}
#footer-text{color:hsla(0,0%,100%,.8);line-height:1.44}
#content{margin-bottom:.625em}
.sect1{padding-bottom:.625em}
@media screen and (min-width:768px){#content{margin-bottom:1.25em}
.sect1{padding-bottom:1.25em}}
.sect1:last-child{padding-bottom:0}
.sect1+.sect1{border-top:1px solid #e7e7e9}
#content h1>a.anchor,h2>a.anchor,h3>a.anchor,#toctitle>a.anchor,.sidebarblock>.content>.title>a.anchor,h4>a.anchor,h5>a.anchor,h6>a.anchor{position:absolute;z-index:1001;width:1.5ex;margin-left:-1.5ex;display:block;text-decoration:none!important;visibility:hidden;text-align:center;font-weight:400}
#content h1>a.anchor::before,h2>a.anchor::before,h3>a.anchor::before,#toctitle>a.anchor::before,.sidebarblock>.content>.title>a.anchor::before,h4>a.anchor::before,h5>a.anchor::before,h6>a.anchor::before{content:"\00A7";font-size:.85em;display:block;padding-top:.1em}
#content h1:hover>a.anchor,#content h1>a.anchor:hover,h2:hover>a.anchor,h2>a.anchor:hover,h3:hover>a.anchor,#toctitle:hover>a.anchor,.sidebarblock>.content>.title:hover>a.anchor,h3>a.anchor:hover,#toctitle>a.anchor:hover,.sidebarblock>.content>.title>a.anchor:hover,h4:hover>a.anchor,h4>a.anchor:hover,h5:hover>a.anchor,h5>a.anchor:hover,h6:hover>a.anchor,h6>a.anchor:hover{visibility:visible}
#content h1>a.link,h2>a.link,h3>a.link,#toctitle>a.link,.sidebarblock>.content>.title>a.link,h4>a.link,h5>a.link,h6>a.link{color:#ba3925;text-decoration:none}
#content h1>a.link:hover,h2>a.link:hover,h3>a.link:hover,#toctitle>a.link:hover,.sidebarblock>.content>.title>a.link:hover,h4>a.link:hover,h5>a.link:hover,h6>a.link:hover{color:#a53221}
details,.audioblock,.imageblock,.literalblock,.listingblock,.stemblock,.videoblock{margin-bottom:1.25em}
details{margin-left:1.25rem}
details>summary{cursor:pointer;display:block;position:relative;line-height:1.6;margin-bottom:.625rem;outline:none;-webkit-tap-highlight-color:transparent}
details>summary::-webkit-details-marker{display:none}
details>summary::before{content:"";border:solid transparent;border-left:solid;border-width:.3em 0 .3em .5em;position:absolute;top:.5em;left:-1.25rem;transform:translateX(15%)}
details[open]>summary::before{border:solid transparent;border-top:solid;border-width:.5em .3em 0;transform:translateY(15%)}
details>summary::after{content:"";width:1.25rem;height:1em;position:absolute;top:.3em;left:-1.25rem}
.admonitionblock td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{text-rendering:optimizeLegibility;text-align:left;font-family:"Noto Serif","DejaVu Serif",serif;font-size:1rem;font-style:italic}
table.tableblock.fit-content>caption.title{white-space:nowrap;width:0}
.paragraph.lead>p,#preamble>.sectionbody>[class=paragraph]:first-of-type p{font-size:1.21875em;line-height:1.6;color:rgba(0,0,0,.85)}
.admonitionblock>table{border-collapse:separate;border:0;background:none;width:100%}
.admonitionblock>table td.icon{text-align:center;width:80px}
.admonitionblock>table td.icon img{max-width:none}
.admonitionblock>table td.icon .title{font-weight:bold;font-family:"Open Sans","DejaVu Sans",sans-serif;text-transform:uppercase}
.admonitionblock>table td.content{padding-left:1.125em;padding-right:1.25em;border-left:1px solid #dddddf;color:rgba(0,0,0,.6);word-wrap:anywhere}
.admonitionblock>table td.content>:last-child>:last-child{margin-bottom:0}
.exampleblock>.content{border:1px solid #e6e6e6;margin-bottom:1.25em;padding:1.25em;background:#fff;border-radius:4px}
.sidebarblock{border:1px solid #dbdbd6;margin-bottom:1.25em;padding:1.25em;background:#f3f3f2;border-radius:4px}
.sidebarblock>.content>.title{color:#7a2518;margin-top:0;text-align:center}
.exampleblock>.content>:first-child,.sidebarblock>.content>:first-child{margin-top:0}
.exampleblock>.content>:last-child,.exampleblock>.content>:last-child>:last-child,.exampleblock>.content .olist>ol>li:last-child>:last-child,.exampleblock>.content .ulist>ul>li:last-child>:last-child,.exampleblock>.content .qlist>ol>li:last-child>:last-child,.sidebarblock>.content>:last-child,.sidebarblock>.content>:last-child>:last-child,.sidebarblock>.content .olist>ol>li:last-child>:last-child,.sidebarblock>.content .ulist>ul>li:last-child>:last-child,.sidebarblock>.content .qlist>ol>li:last-child>:last-child{margin-bottom:0}
.literalblock pre,.listingblock>.content>pre{border-radius:4px;overflow-x:auto;padding:1em;font-size:.8125em}
@media screen and (min-width:768px){.literalblock pre,.listingblock>.content>pre{font-size:.90625em}}
@media screen and (min-width:1280px){.literalblock pre,.listingblock>.content>pre{font-size:1em}}
.literalblock pre,.listingblock>.content>pre:not(.highlight),.listingblock>.content>pre[class=highlight],.listingblock>.content>pre[class^="highlight "]{background:#f7f7f8}
.literalblock.output pre{color:#f7f7f8;background:rgba(0,0,0,.9)}
.listingblock>.content{position:relative}
.listingblock code[data-lang]::before{display:none;content:attr(data-lang);position:absolute;font-size:.75em;top:.425rem;right:.5rem;line-height:1;text-transform:uppercase;color:inherit;opacity:.5}
.listingblock:hover code[data-lang]::before{display:block}
.listingblock.terminal pre .command::before{content:attr(data-prompt);padding-right:.5em;color:inherit;opacity:.5}
.listingblock.terminal pre .command:not([data-prompt])::before{content:"$"}
.listingblock pre.highlightjs{padding:0}
.listingblock pre.highlightjs>code{padding:1em;border-radius:4px}
.listingblock pre.prettyprint{border-width:0}
.prettyprint{background:#f7f7f8}
pre.prettyprint .linenums{line-height:1.45;margin-left:2em}
pre.prettyprint li{background:none;list-style-type:inherit;padding-left:0}
pre.prettyprint li code[data-lang]::before{opacity:1}
pre.prettyprint li:not(:first-child) code[data-lang]::before{display:none}
table.linenotable{border-collapse:separate;border:0;margin-bottom:0;background:none}
table.linenotable td[class]{color:inherit;vertical-align:top;padding:0;line-height:inherit;white-space:normal}
table.linenotable td.code{padding-left:.75em}
table.linenotable td.linenos,pre.pygments .linenos{border-right:1px solid;opacity:.35;padding-right:.5em;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}
pre.pygments span.linenos{display:inline-block;margin-right:.75em}
.quoteblock{margin:0 1em 1.25em 1.5em;display:table}
.quoteblock:not(.excerpt)>.title{margin-left:-1.5em;margin-bottom:.75em}
.quoteblock blockquote,.quoteblock p{color:rgba(0,0,0,.85);font-size:1.15rem;line-height:1.75;word-spacing:.1em;letter-spacing:0;font-style:italic;text-align:justify}
.quoteblock blockquote{margin:0;padding:0;border:0}
.quoteblock blockquote::before{content:"\201c";float:left;font-size:2.75em;font-weight:bold;line-height:.6em;margin-left:-.6em;color:#7a2518;text-shadow:0 1px 2px rgba(0,0,0,.1)}
.quoteblock blockquote>.paragraph:last-child p{margin-bottom:0}
.quoteblock .attribution{margin-top:.75em;margin-right:.5ex;text-align:right}
.verseblock{margin:0 1em 1.25em}
.verseblock pre{font-family:"Open Sans","DejaVu Sans",sans-serif;font-size:1.15rem;color:rgba(0,0,0,.85);font-weight:300;text-rendering:optimizeLegibility}
.verseblock pre strong{font-weight:400}
.verseblock .attribution{margin-top:1.25rem;margin-left:.5ex}
.quoteblock .attribution,.verseblock .attribution{font-size:.9375em;line-height:1.45;font-style:italic}
.quoteblock .attribution br,.verseblock .attribution br{display:none}
.quoteblock .attribution cite,.verseblock .attribution cite{display:block;letter-spacing:-.025em;color:rgba(0,0,0,.6)}
.quoteblock.abstract blockquote::before,.quoteblock.excerpt blockquote::before,.quoteblock .quoteblock blockquote::before{display:none}
.quoteblock.abstract blockquote,.quoteblock.abstract p,.quoteblock.excerpt blockquote,.quoteblock.excerpt p,.quoteblock .quoteblock blockquote,.quoteblock .quoteblock p{line-height:1.6;word-spacing:0}
.quoteblock.abstract{margin:0 1em 1.25em;display:block}
.quoteblock.abstract>.title{margin:0 0 .375em;font-size:1.15em;text-align:center}
.quoteblock.excerpt>blockquote,.quoteblock .quoteblock{padding:0 0 .25em 1em;border-left:.25em solid #dddddf}
.quoteblock.excerpt,.quoteblock .quoteblock{margin-left:0}
.quoteblock.excerpt blockquote,.quoteblock.excerpt p,.quoteblock .quoteblock blockquote,.quoteblock .quoteblock p{color:inherit;font-size:1.0625rem}
.quoteblock.excerpt .attribution,.quoteblock .quoteblock .attribution{color:inherit;font-size:.85rem;text-align:left;margin-right:0}
p.tableblock:last-child{margin-bottom:0}
td.tableblock>.content{margin-bottom:1.25em;word-wrap:anywhere}
td.tableblock>.content>:last-child{margin-bottom:-1.25em}
table.tableblock,th.tableblock,td.tableblock{border:0 solid #dedede}
table.grid-all>*>tr>*{border-width:1px}
table.grid-cols>*>tr>*{border-width:0 1px}
table.grid-rows>*>tr>*{border-width:1px 0}
table.frame-all{border-width:1px}
table.frame-ends{border-width:1px 0}
table.frame-sides{border-width:0 1px}
table.frame-none>colgroup+*>:first-child>*,table.frame-sides>colgroup+*>:first-child>*{border-top-width:0}
table.frame-none>:last-child>:last-child>*,table.frame-sides>:last-child>:last-child>*{border-bottom-width:0}
table.frame-none>*>tr>:first-child,table.frame-ends>*>tr>:first-child{border-left-width:0}
table.frame-none>*>tr>:last-child,table.frame-ends>*>tr>:last-child{border-right-width:0}
table.stripes-all>*>tr,table.stripes-odd>*>tr:nth-of-type(odd),table.stripes-even>*>tr:nth-of-type(even),table.stripes-hover>*>tr:hover{background:#f8f8f7}
th.halign-left,td.halign-left{text-align:left}
th.halign-right,td.halign-right{text-align:right}
th.halign-center,td.halign-center{text-align:center}
th.valign-top,td.valign-top{vertical-align:top}
th.valign-bottom,td.valign-bottom{vertical-align:bottom}
th.valign-middle,td.valign-middle{vertical-align:middle}
table thead th,table tfoot th{font-weight:bold}
tbody tr th{background:#f7f8f7}
tbody tr th,tbody tr th p,tfoot tr th,tfoot tr th p{color:rgba(0,0,0,.8);font-weight:bold}
p.tableblock>code:only-child{background:none;padding:0}
p.tableblock{font-size:1em}
ol{margin-left:1.75em}
ul li ol{margin-left:1.5em}
dl dd{margin-left:1.125em}
dl dd:last-child,dl dd:last-child>:last-child{margin-bottom:0}
li p,ul dd,ol dd,.olist .olist,.ulist .ulist,.ulist .olist,.olist .ulist{margin-bottom:.625em}
ul.checklist,ul.none,ol.none,ul.no-bullet,ol.no-bullet,ol.unnumbered,ul.unstyled,ol.unstyled{list-style-type:none}
ul.no-bullet,ol.no-bullet,ol.unnumbered{margin-left:.625em}
ul.unstyled,ol.unstyled{margin-left:0}
li>p:empty:only-child::before{content:"";display:inline-block}
ul.checklist>li>p:first-child{margin-left:-1em}
ul.checklist>li>p:first-child>.fa-square-o:first-child,ul.checklist>li>p:first-child>.fa-check-square-o:first-child{width:1.25em;font-size:.8em;position:relative;bottom:.125em}
ul.checklist>li>p:first-child>input[type=checkbox]:first-child{margin-right:.25em}
ul.inline{display:flex;flex-flow:row wrap;list-style:none;margin:0 0 .625em -1.25em}
ul.inline>li{margin-left:1.25em}
.unstyled dl dt{font-weight:400;font-style:normal}
ol.arabic{list-style-type:decimal}
ol.decimal{list-style-type:decimal-leading-zero}
ol.loweralpha{list-style-type:lower-alpha}
ol.upperalpha{list-style-type:upper-alpha}
ol.lowerroman{list-style-type:lower-roman}
ol.upperroman{list-style-type:upper-roman}
ol.lowergreek{list-style-type:lower-greek}
.hdlist>table,.colist>table{border:0;background:none}
.hdlist>table>tbody>tr,.colist>table>tbody>tr{background:none}
td.hdlist1,td.hdlist2{vertical-align:top;padding:0 .625em}
td.hdlist1{font-weight:bold;padding-bottom:1.25em}
td.hdlist2{word-wrap:anywhere}
.literalblock+.colist,.listingblock+.colist{margin-top:-.5em}
.colist td:not([class]):first-child{padding:.4em .75em 0;line-height:1;vertical-align:top}
.colist td:not([class]):first-child img{max-width:none}
.colist td:not([class]):last-child{padding:.25em 0}
.thumb,.th{line-height:0;display:inline-block;border:4px solid #fff;box-shadow:0 0 0 1px #ddd}
.imageblock.left{margin:.25em .625em 1.25em 0}
.imageblock.right{margin:.25em 0 1.25em .625em}
.imageblock>.title{margin-bottom:0}
.imageblock.thumb,.imageblock.th{border-width:6px}
.imageblock.thumb>.title,.imageblock.th>.title{padding:0 .125em}
.image.left,.image.right{margin-top:.25em;margin-bottom:.25em;display:inline-block;line-height:0}
.image.left{margin-right:.625em}
.image.right{margin-left:.625em}
a.image{text-decoration:none;display:inline-block}
a.image object{pointer-events:none}
sup.footnote,sup.footnoteref{font-size:.875em;position:static;vertical-align:super}
sup.footnote a,sup.footnoteref a{text-decoration:none}
sup.footnote a:active,sup.footnoteref a:active,#footnotes .footnote a:first-of-type:active{text-decoration:underline}
#footnotes{padding-top:.75em;padding-bottom:.75em;margin-bottom:.625em}
#footnotes hr{width:20%;min-width:6.25em;margin:-.25em 0 .75em;border-width:1px 0 0}
#footnotes .footnote{padding:0 .375em 0 .225em;line-height:1.3334;font-size:.875em;margin-left:1.2em;margin-bottom:.2em}
#footnotes .footnote a:first-of-type{font-weight:bold;text-decoration:none;margin-left:-1.05em}
#footnotes .footnote:last-of-type{margin-bottom:0}
#content #footnotes{margin-top:-.625em;margin-bottom:0;padding:.75em 0}
div.unbreakable{page-break-inside:avoid}
.big{font-size:larger}
.small{font-size:smaller}
.underline{text-decoration:underline}
.overline{text-decoration:overline}
.line-through{text-decoration:line-through}
.aqua{color:#00bfbf}
.aqua-background{background:#00fafa}
.black{color:#000}
.black-background{background:#000}
.blue{color:#0000bf}
.blue-background{background:#0000fa}
.fuchsia{color:#bf00bf}
.fuchsia-background{background:#fa00fa}
.gray{color:#606060}
.gray-background{background:#7d7d7d}
.green{color:#006000}
.green-background{background:#007d00}
.lime{color:#00bf00}
.lime-background{background:#00fa00}
.maroon{color:#600000}
.maroon-background{background:#7d0000}
.navy{color:#000060}
.navy-background{background:#00007d}
.olive{color:#606000}
.olive-background{background:#7d7d00}
.purple{color:#600060}
.purple-background{background:#7d007d}
.red{color:#bf0000}
.red-background{background:#fa0000}
.silver{color:#909090}
.silver-background{background:#bcbcbc}
.teal{color:#006060}
.teal-background{background:#007d7d}
.white{color:#bfbfbf}
.white-background{background:#fafafa}
.yellow{color:#bfbf00}
.yellow-background{background:#fafa00}
span.icon>.fa{cursor:default}
a span.icon>.fa{cursor:inherit}
.admonitionblock td.icon [class^="fa icon-"]{font-size:2.5em;text-shadow:1px 1px 2px rgba(0,0,0,.5);cursor:default}
.admonitionblock td.icon .icon-note::before{content:"\f05a";color:#19407c}
.admonitionblock td.icon .icon-tip::before{content:"\f0eb";text-shadow:1px 1px 2px rgba(155,155,0,.8);color:#111}
.admonitionblock td.icon .icon-warning::before{content:"\f071";color:#bf6900}
.admonitionblock td.icon .icon-caution::before{content:"\f06d";color:#bf3400}
.admonitionblock td.icon .icon-important::before{content:"\f06a";color:#bf0000}
.conum[data-value]{display:inline-block;color:#fff!important;background:rgba(0,0,0,.8);border-radius:50%;text-align:center;font-size:.75em;width:1.67em;height:1.67em;line-height:1.67em;font-family:"Open Sans","DejaVu Sans",sans-serif;font-style:normal;font-weight:bold}
.conum[data-value] *{color:#fff!important}
.conum[data-value]+b{display:none}
.conum[data-value]::after{content:attr(data-value)}
pre .conum[data-value]{position:relative;top:-.125em}
b.conum *{color:inherit!important}
.conum:not([data-value]):empty{display:none}
dt,th.tableblock,td.content,div.footnote{text-rendering:optimizeLegibility}
h1,h2,p,td.content,span.alt,summary{letter-spacing:-.01em}
p strong,td.content strong,div.footnote strong{letter-spacing:-.005em}
p,blockquote,dt,td.content,td.hdlist1,span.alt,summary{font-size:1.0625rem}
p{margin-bottom:1.25rem}
.sidebarblock p,.sidebarblock dt,.sidebarblock td.content,p.tableblock{font-size:1em}
.exampleblock>.content{background:#fffef7;border-color:#e0e0dc;box-shadow:0 1px 4px #e0e0dc}
.print-only{display:none!important}
@page{margin:1.25cm .75cm}
@media print{*{box-shadow:none!important;text-shadow:none!important}
html{font-size:80%}
a{color:inherit!important;text-decoration:underline!important}
a.bare,a[href^="#"],a[href^="mailto:"]{text-decoration:none!important}
a[href^="http:"]:not(.bare)::after,a[href^="https:"]:not(.bare)::after{content:"(" attr(href) ")";display:inline-block;font-size:.875em;padding-left:.25em}
abbr[title]{border-bottom:1px dotted}
abbr[title]::after{content:" (" attr(title) ")"}
pre,blockquote,tr,img,object,svg{page-break-inside:avoid}
thead{display:table-header-group}
svg{max-width:100%}
p,blockquote,dt,td.content{font-size:1em;orphans:3;widows:3}
h2,h3,#toctitle,.sidebarblock>.content>.title{page-break-after:avoid}
#header,#content,#footnotes,#footer{max-width:none}
#toc,.sidebarblock,.exampleblock>.content{background:none!important}
#toc{border-bottom:1px solid #dddddf!important;padding-bottom:0!important}
body.book #header{text-align:center}
body.book #header>h1:first-child{border:0!important;margin:2.5em 0 1em}
body.book #header .details{border:0!important;display:block;padding:0!important}
body.book #header .details span:first-child{margin-left:0!important}
body.book #header .details br{display:block}
body.book #header .details br+span::before{content:none!important}
body.book #toc{border:0!important;text-align:left!important;padding:0!important;margin:0!important}
body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-break-before:always}
.listingblock code[data-lang]::before{display:block}
#footer{padding:0 .9375em}
.hide-on-print{display:none!important}
.print-only{display:block!important}
.hide-for-print{display:none!important}
.show-for-print{display:inherit!important}}
@media amzn-kf8,print{#header>h1:first-child{margin-top:1.25rem}
.sect1{padding:0!important}
.sect1+.sect1{border:0}
#footer{background:none}
#footer-text{color:rgba(0,0,0,.6);font-size:.9em}}
@media amzn-kf8{#header,#content,#footnotes,#footer{padding:0}}
.subheader,.admonitionblock td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{color:rgb(0,177,172);}
h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{color:rgb(0,177,172);}
#header>h1:first-child{color:rgb(0,177,172);}
details>summary::before{left:-2.25rem;} /* ... move triangle slightly left */
#itsheader {
/* border:2px solid red; */
float: left;
width: 100%;
}
#itsheader #header-text {
width: 90%;
float: left;
}
#itsheader #header-image {
padding-top: 10px;
float: right;
/* width: 20%; */
}
.h2-summary{font-size:2.3125em;font-family:"Open Sans","DejaVu Sans",sans-serif;font-weight:300;font-style:normal;color:rgb(0,177,172);text-rendering:optimizeLegibility;margin-top:1em;margin-bottom:.5em}
.h3-summary{font-size:1.6875em;font-family:"Open Sans","DejaVu Sans",sans-serif;font-weight:300;font-style:normal;color:rgb(0,177,172);text-rendering:optimizeLegibility;margin-top:1em;margin-bottom:.5em}
headingcode{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;}
.close-button{background-color:white;border-color:rgb(0,177,172);color:rgb(0,177,172);}
</style>
<script>
const openDetailsIfAnchorHidden = (evt) => {
const el = evt.target;
let details = document.querySelector(el.getAttribute("href"));
if ( !!details.offsetHeight || details.getClientRects().length ) return;
if (details != null)
{
details = details.closest("details:not(#" + details.id + ")");
if (details == null)
return;
const summary = details.querySelector("summary");
details.setAttribute('open', '');
}
}
window.addEventListener("load", function(event) {
[...document.querySelectorAll("[href^='#']")].forEach(
el => el.addEventListener("click", openDetailsIfAnchorHidden )
);
});
</script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
</head>
<body class="article">
<div id="header">
<div id="itsheader">
<div id="header-text">
<h1>Linux Praktikumstermin 2025_05: Processes / Files</h1>
</div>
<div id="header-image"><img src="https://login.fh-aachen.de/idp/images/fh-logo-left.svg" height="120px" alt="FH Logo" id="topright"/></div>
</div>
<div class="details">
<span id="author" class="author">Prof. Dr. Andreas Claßen</span><br>
<span id="email" class="email"><a href="mailto:a.classen@fh-aachen.de">a.classen@fh-aachen.de</a></span><br>
</div>
<div id="toc" class="toc">
<div id="toctitle">Table of Contents</div>
<ul class="sectlevel1">
<li><a href="#sect_id_general_notes_with_respect_to_this_lab_exercise">General Notes with respect to this Lab Exercise</a>
<ul class="sectlevel2">
<li><a href="#sect_id_faq_concerning_lab_work_of_lehrgebiet_informationstechnische_systeme_its">FAQ concerning Lab Work of Lehrgebiet <em>Informationstechnische Systeme (ITS)</em></a></li>
<li><a href="#sect_id_on_your_own_computer_virtualbox_installation">On your own computer: VirtualBox Installation</a></li>
<li><a href="#sect_id_operating_the_virtualbox_vm">Operating the VirtualBox VM</a></li>
<li><a href="#sect_id_persistence_of_data_and_changes">Persistence of data and changes</a></li>
<li><a href="#sect_id_interrupting_the_lab_work_shut_down_the_vm_do_not_pause_it">Interrupting the Lab Work: Shut down the VM, do not pause it</a></li>
<li><a href="#sect_id_superuser_permissions">Superuser Permissions</a></li>
</ul>
</li>
<li><a href="#sect_id_download_and_setup_of_the_virtual_machine_vm_processes_files_vm"> Download and Setup of the Virtual Machine (VM) <code>Processes_Files_VM</code></a>
<ul class="sectlevel2">
<li><a href="#sect_id_starting_the_vm">Starting the VM</a></li>
<li><a href="#sect_id_account_data_for_the_vm">Account Data for the VM</a></li>
</ul>
</li>
<li><a href="#sect_id_result_logging">Result logging</a></li>
<li><a href="#sect_id_pseudo_files_for_processes">Pseudo files for Processes</a></li>
<li><a href="#sect_id_file_system_jails_chroot">File system 'Jails': chroot</a></li>
<li><a href="#sect_id_using_files_as_disks">Using Files as Disks</a></li>
<li><a href="#sect_id_simple_containers_using_overlay_filesystem">Simple Containers using Overlay Filesystem</a></li>
<li><a href="#sect_id_upload_of_console_log_file_and_completion_of_this_lab">Upload of console log file and completion of this lab</a></li>
</ul>
</div>
</div>
<div id="content">
<div class="sect1"><details id="sect_id_general_notes_with_respect_to_this_lab_exercise">
<summary class="h2-summary">General Notes with respect to this Lab Exercise</summary>
<div class="sectionbody">
<div class="sect2"><details id="sect_id_faq_concerning_lab_work_of_lehrgebiet_informationstechnische_systeme_its">
<summary class="h3-summary">FAQ concerning Lab Work of Lehrgebiet <em>Informationstechnische Systeme (ITS)</em></summary>
<div class="paragraph">
<p>As the technical setup (using VirtualBox Virtual Machines) is similar
in several of Prof. Classen&#8217;s lectures / labs, we provide shared FAQ answers
in a separate, shared Ilias course at
<a href="https://www.ili.fh-aachen.de/goto_elearning_crs_367289.html">Support für die WF Praktika Prof. Claßen</a>.
Feel free to become a member of that Ilias course.</p>
</div>
<div class="paragraph">
<p>A
<a href="https://www.ili.fh-aachen.de/ilias.php?baseClass=ilWikiHandlerGUI&amp;ref_id=367292&amp;cmd=view">Wiki</a>
there provides FAQ answers
related to the technical setup of the Prof. Classen labs.
New FAQ answers will be added on demand.
If you have problems creating and starting the VM,
first check the information in our FAQ.
In particular, the points on the topic of activating hardware virtualization on Windows systems.</p>
</div>
<div class="paragraph">
<p>Specific questions specifically related
to one module' lab only will however not be answered there, but in the Ilias of the specific module
instead. Only questions that are valid for multiple / all of the labs will be handled
via the shared Support Wiki.</p>
</div>
<button class="close-button" onclick="document.getElementById('sect_id_faq_concerning_lab_work_of_lehrgebiet_informationstechnische_systeme_its').open=false">(close: FAQ concerning Lab Work of Lehrgebiet <em>Informationstechnische Systeme (ITS)</em>)</button>
</details></div>
<div class="sect2"><details id="sect_id_on_your_own_computer_virtualbox_installation">
<summary class="h3-summary">On your own computer: VirtualBox Installation</summary>
<div class="paragraph">
<p>VirtualBox Version 7.x is installed on the terminal computers.</p>
</div>
<div class="paragraph">
<p>If you are working on your own computer,
so you should also install and use the latest version of Virtualbox 7.x.</p>
</div>
<button class="close-button" onclick="document.getElementById('sect_id_on_your_own_computer_virtualbox_installation').open=false">(close: On your own computer: VirtualBox Installation)</button>
</details></div>
<div class="sect2"><details id="sect_id_operating_the_virtualbox_vm">
<summary class="h3-summary">Operating the VirtualBox VM</summary>
<div class="paragraph">
<p>With VirtualBox, the mouse and keyboard may be "caught" in the VM,
as soon as you click in the console window.
You can then "release" it by pressing the right <code>Ctrl</code> key.</p>
</div>
<button class="close-button" onclick="document.getElementById('sect_id_operating_the_virtualbox_vm').open=false">(close: Operating the VirtualBox VM)</button>
</details></div>
<div class="sect2"><details id="sect_id_persistence_of_data_and_changes">
<summary class="h3-summary">Persistence of data and changes</summary>
<div class="paragraph">
<p>The changes in the virtual machine are persistent
even if you have to shut down or reboot the virtual machine during the lab exercises.</p>
</div>
<button class="close-button" onclick="document.getElementById('sect_id_persistence_of_data_and_changes').open=false">(close: Persistence of data and changes)</button>
</details></div>
<div class="sect2"><details id="sect_id_interrupting_the_lab_work_shut_down_the_vm_do_not_pause_it">
<summary class="h3-summary">Interrupting the Lab Work: Shut down the VM, do not pause it</summary>
<div class="paragraph">
<p>If you need to interrupt your lab work,
please do not pause the VM,
instead, shut down the VM.
Otherwise, when paused, the VM will not have a
working network connection when you continue your work.</p>
</div>
<button class="close-button" onclick="document.getElementById('sect_id_interrupting_the_lab_work_shut_down_the_vm_do_not_pause_it').open=false">(close: Interrupting the Lab Work: Shut down the VM, do not pause it)</button>
</details></div>
<div class="sect2"><details id="sect_id_superuser_permissions">
<summary class="h3-summary">Superuser Permissions</summary>
<div class="paragraph">
<p>Many of the commands and file content changes in the following exercises
require superuser (<code>root</code>) permissions, because they impact general system settings. In many cases, this is explicitly mentioned in the explanation of the respective exercise.
We do however expect you to understand the concept,
so therefore there might be cases where you are expected to recognize and handle this yourself.
As a general hint: should you get error messages like <code>command not found</code> or <code>Permission denied</code>
when issueing a command, this might be an indication
that the respective command needs to be executed as
<code>root</code> superuser.</p>
</div>
<button class="close-button" onclick="document.getElementById('sect_id_superuser_permissions').open=false">(close: Superuser Permissions)</button>
</details></div>
</div>
<button class="close-button" onclick="document.getElementById('sect_id_general_notes_with_respect_to_this_lab_exercise').open=false">(close: General Notes with respect to this Lab Exercise)</button>
</details></div>
<div class="sect1"><details id="sect_id_download_and_setup_of_the_virtual_machine_vm_processes_files_vm">
<summary class="h2-summary"> Download and Setup of the Virtual Machine (VM) <headingcode>Processes_Files_VM</headingcode></summary>
<div class="sectionbody">
<details>
<summary class="title"><strong>On the FH Aachen PCs:</strong></summary>
<div class="content">
<div class="paragraph">
<p>Start VirtualBox.</p>
</div>
<div class="paragraph">
<p><strong>Importing the appliance for the ITS-VM ("ITS" == "Lehrgebiet Informationstechnische Systeme, Prof. Claßen"):</strong></p>
</div>
<div class="paragraph">
<p>Open the windows command shell <strong>cmd.exe</strong> by clicking on the menu in the bottom left corner, then "blindly" type in <strong>cmd</strong>, followed
by a left click onto <strong>cmd.exe</strong>.
Enter the following command into the shell:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="pygments highlight" style="background: #f8f8f8;"><code data-lang="cmd"><div class="lineno"><table class="linenotable"><tr><td class="linenos"><div class="linenodiv"><pre><span style="color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px;">1</span></pre></div></td><td class="code"><div><pre style="line-height: 125%;"><span></span>net use S: \\ad.fh-aachen.de\files\FB05\StudiShare
</pre></div></td></tr></table></div></code></pre>
</div>
</div>
<div class="paragraph">
<p>You should now see a new drive <code>S:</code> in the explorer.</p>
</div>
<div class="paragraph">
<p>=== Importing the appliance for the VM) <code>Processes_Files_VM</code></p>
</div>
<div class="paragraph">
<p>In VirtualBox menu <code>file</code> :
<code>import appliance</code>, select <code>ITS_Client_debian12_AMD64_V02.ova</code> in
<code>S:\Classen\VM_OVAs\</code> ,
click <code>Next</code>,
change <code>name</code> setting to <code>Processes_Files_VM</code>.</p>
</div>
<div class="paragraph">
<p>On FH terminal room computers:
change <code>virtual disk image</code> to
<code>D:\VMs\Processes_Files_VM.vmdk</code>.</p>
</div>
<div class="admonitionblock important">
<table>
<tr>
<td class="icon">
<i class="fa icon-important" title="Important"></i>
</td>
<td class="content">
<div class="title">Assign a new MAC address</div>
Important (on all computers):
Make sure to set the checkbox
<code>Assign new MAC addresses for all network cards</code>,
alternatively go to <code>MAC Address Policy</code>
and set <code>Include all network adapter MAC addresses</code>.
</td>
</tr>
</table>
</div>
<div class="paragraph">
<p>Finally click on <code>Import</code>.</p>
</div>
</div>
</details>
<details>
<summary class="title"><strong>On your private computer:</strong></summary>
<div class="content">
<div class="paragraph">
<p>Download <code>ITS_Client_debian12_AMD64_V02.ova</code> from
<a href="https://fh-aachen.sciebo.de/s/voHfcjRsXAfYbfJ" class="bare">https://fh-aachen.sciebo.de/s/voHfcjRsXAfYbfJ</a></p>
</div>
<div class="paragraph">
<p>In VirtualBox menu <code>file</code> :
<code>import appliance</code>, select <code>ITS_Client_debian12_AMD64_V02.ova</code>
from your local download folder,
click <code>Next</code>,
change <code>name</code> setting to <code>Processes_Files_VM</code>.</p>
</div>
<div class="admonitionblock important">
<table>
<tr>
<td class="icon">
<i class="fa icon-important" title="Important"></i>
</td>
<td class="content">
<div class="title">Assign a new MAC address</div>
Important (on all computers):
Make sure to set the checkbox
<code>Assign new MAC addresses for all network cards</code>,
alternatively go to <code>MAC Address Policy</code>
and set <code>Include all network adapter MAC addresses</code>.
</td>
</tr>
</table>
</div>
<div class="paragraph">
<p>Finally click on <code>Import</code>.</p>
</div>
</div>
</details>
<div class="sect2"><details id="sect_id_starting_the_vm">
<summary class="h3-summary">Starting the VM</summary>
<div class="paragraph">
<p>Start the VM.</p>
</div>
<div class="paragraph">
<p>Should you get an error message when starting the VM regarding
<code>VirtualBox Host-Only Ethernet Adapter is not a Host-Only Network</code>
(or similar), the name of the host-only network in your VirtualBox installation differs from
the name expected by the VM definition.
For the VM refusing to start, click on <code>Configure</code> (upper-left of the
VirtualBox window) and a settings window will open for that VM.
Click on <code>OK</code> without changing any VM settings.
This will nevertheless update the VM settings and correct the problem.
Start the VM again.</p>
</div>
<button class="close-button" onclick="document.getElementById('sect_id_starting_the_vm').open=false">(close: Starting the VM)</button>
</details></div>
<div class="sect2"><details id="sect_id_account_data_for_the_vm">
<summary class="h3-summary">Account Data for the VM</summary>
<div class="paragraph">
<p>The user accounts of the VM are:</p>
</div>
<div class="ulist">
<ul>
<li>
<p>User: <code>itsadmin</code>, Password: <code>itsadmin</code></p>
</li>
<li>
<p>Administrator-User: <code>root</code>, Password: <code>itsadmin</code></p>
</li>
</ul>
</div>
<button class="close-button" onclick="document.getElementById('sect_id_account_data_for_the_vm').open=false">(close: Account Data for the VM)</button>
</details></div>
</div>
<button class="close-button" onclick="document.getElementById('sect_id_download_and_setup_of_the_virtual_machine_vm_processes_files_vm').open=false">(close: Download and Setup of the Virtual Machine (VM) <headingcode>Processes_Files_VM</headingcode>)</button>
</details></div>
<div class="sect1"><details id="sect_id_result_logging">
<summary class="h2-summary">Result logging</summary>
<div class="sectionbody">
<div class="paragraph">
<p>To show that you have successfully finished this lab, please upload a log file to ILIAS. The log file
will contain all commands that you typed in during your session and all system outputs.</p>
</div>
<div class="paragraph">
<p>It is not a problem if there are commands in the logfile that did not work on first try or were typed in wrong,
we just want to see that at some point all the required commands were used correctly.</p>
</div>
<div class="paragraph">
<p>Open a terminal in the virtual
machine and start the logging by using the <code>script</code> command
(option <code>-a</code> means: <em>append to file</em> in case the file is non-empty
when the logging to file is started):</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="pygments highlight" style="background: #f8f8f8;"><code data-lang="bash"><div class="lineno"><table class="linenotable"><tr><td class="linenos"><div class="linenodiv"><pre><span style="color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px;">1</span></pre></div></td><td class="code"><div><pre style="line-height: 125%;"><span></span>script<span style="color: #bbbbbb"> </span>-a<span style="color: #bbbbbb"> </span>Linux-praktikum-05.log
</pre></div></td></tr></table></div></code></pre>
</div>
</div>
<div class="paragraph">
<p>The following output should appear:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="pygments highlight" style="background: #f8f8f8;"><code data-lang="bash"><div class="lineno"><table class="linenotable"><tr><td class="linenos"><div class="linenodiv"><pre><span style="color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px;">1</span></pre></div></td><td class="code"><div><pre style="line-height: 125%;"><span></span>Script<span style="color: #bbbbbb"> </span>started,<span style="color: #bbbbbb"> </span>file<span style="color: #bbbbbb"> </span>is<span style="color: #bbbbbb"> </span>Linux-praktikum-05.log
</pre></div></td></tr></table></div></code></pre>
</div>
</div>
<div class="paragraph">
<p>From now on, please only use the console in which the logger is running, so that everything gets logged correctly!</p>
</div>
<div class="paragraph">
<p>If you want to interrupt the lab and shut down the virtual machine, e.g. to take a break, or if you get interrupted somehow,
you have to restart the logging when you continue.
Choose a new / different file name.
Finally, use a text editor to merge the resulting log files into a single file in the correct order.</p>
</div>
<div class="paragraph">
<p>After completing the lab, upload the complete result files to the Ilias course.</p>
</div>
</div>
<button class="close-button" onclick="document.getElementById('sect_id_result_logging').open=false">(close: Result logging)</button>
</details></div>
<div class="sect1"><details id="sect_id_pseudo_files_for_processes">
<summary class="h2-summary">Pseudo files for Processes</summary>
<div class="sectionbody">
<div class="paragraph">
<p>Start a Python Interpreter in the background. The interpreter shall solely execute a continuous loop:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="pygments highlight" style="background: #f8f8f8;"><code data-lang="bash"><div class="lineno"><table class="linenotable"><tr><td class="linenos"><div class="linenodiv"><pre><span style="color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px;">1</span></pre></div></td><td class="code"><div><pre style="line-height: 125%;"><span></span>python<span style="color: #bbbbbb"> </span>-c<span style="color: #bbbbbb"> </span><span style="color: #BA2121">&quot;while True: pass&quot;</span><span style="color: #bbbbbb"> </span>&amp;
</pre></div></td></tr></table></div></code></pre>
</div>
</div>
<div class="paragraph">
<p>Find out via the <code>/proc</code> subdirectory related to the Python process which working directory the Python process was started with.
That means if the Python process tries to read a file from his "current directory", which directory would be searched forthe file?
(Such questions should only be answered for yourself, you do not have to answer "submit" &#8230;&#8203;)</p>
</div>
<div class="paragraph">
<p>Find out via the <code>/proc</code> subdirectory related to the Python process which command this process was started with.
You should see the full command, but all parts of the command are "glued together". Why?
Because the driver for the <code>/proc</code> filesystem separates the individual parts (parameters) of the command with <code>\0</code> (<code>NULL</code>),
which means it is a list of C-strings. The following command at least shows that there are still "separators" between the parts of the command:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="pygments highlight" style="background: #f8f8f8;"><code data-lang="bash"><div class="lineno"><table class="linenotable"><tr><td class="linenos"><div class="linenodiv"><pre><span style="color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px;">1</span>
<span style="color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px;">2</span></pre></div></td><td class="code"><div><pre style="line-height: 125%;"><span></span><span style="color: #19177C">PYTHON_PID</span><span style="color: #666666">=</span><span style="color: #008000; font-weight: bold">$(</span>pgrep<span style="color: #bbbbbb"> </span>--newest<span style="color: #bbbbbb"> </span>python<span style="color: #008000; font-weight: bold">)</span>
cat<span style="color: #bbbbbb"> </span>--show-all<span style="color: #bbbbbb"> </span>/proc/<span style="color: #19177C">$PYTHON_PID</span>/cmdline
</pre></div></td></tr></table></div></code></pre>
</div>
</div>
<div class="paragraph">
<p>And by means of the following command, all <code>\0</code> characters are replaced by a line break:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="pygments highlight" style="background: #f8f8f8;"><code data-lang="bash"><div class="lineno"><table class="linenotable"><tr><td class="linenos"><div class="linenodiv"><pre><span style="color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px;">1</span></pre></div></td><td class="code"><div><pre style="line-height: 125%;"><span></span>cat<span style="color: #bbbbbb"> </span>/proc/<span style="color: #19177C">$PYTHON_PID</span>/cmdline<span style="color: #bbbbbb"> </span>|<span style="color: #bbbbbb"> </span>tr<span style="color: #bbbbbb"> </span><span style="color: #BA2121">&#39;\0&#39;</span><span style="color: #bbbbbb"> </span><span style="color: #BA2121">&#39;\n&#39;</span>
</pre></div></td></tr></table></div></code></pre>
</div>
</div>
<div class="paragraph">
<p>Let the system output the environment (i.e., the list of environment variables with their values) of the <code>python</code> process.</p>
</div>
<div class="paragraph">
<p>Kill the running Python Interpreter:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="pygments highlight" style="background: #f8f8f8;"><code data-lang="bash"><div class="lineno"><table class="linenotable"><tr><td class="linenos"><div class="linenodiv"><pre><span style="color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px;">1</span></pre></div></td><td class="code"><div><pre style="line-height: 125%;"><span></span>pkill<span style="color: #bbbbbb"> </span>python
</pre></div></td></tr></table></div></code></pre>
</div>
</div>
</div>
<button class="close-button" onclick="document.getElementById('sect_id_pseudo_files_for_processes').open=false">(close: Pseudo files for Processes)</button>
</details></div>
<div class="sect1"><details id="sect_id_file_system_jails_chroot">
<summary class="h2-summary">File system 'Jails': chroot</summary>
<div class="sectionbody">
<div class="paragraph">
<p>Download the <code>tar</code> archive (= "packed" archive file) of a basic Linux filesystem:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="pygments highlight" style="background: #f8f8f8;"><code data-lang="bash"><div class="lineno"><table class="linenotable"><tr><td class="linenos"><div class="linenodiv"><pre><span style="color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px;">1</span>
<span style="color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px;">2</span></pre></div></td><td class="code"><div><pre style="line-height: 125%;"><span></span><span style="color: #008000">cd</span><span style="color: #bbbbbb"> </span>/home/itsadmin
wget<span style="color: #bbbbbb"> </span>https://github.com/ericchiang/containers-from-scratch/releases/download/v0.1.0/rootfs.tar.gz
</pre></div></td></tr></table></div></code></pre>
</div>
</div>
<div class="paragraph">
<p>Unzip the archive as user itsadmin:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="pygments highlight" style="background: #f8f8f8;"><code data-lang="bash"><div class="lineno"><table class="linenotable"><tr><td class="linenos"><div class="linenodiv"><pre><span style="color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px;">1</span></pre></div></td><td class="code"><div><pre style="line-height: 125%;"><span></span>sudo<span style="color: #bbbbbb"> </span>tar<span style="color: #bbbbbb"> </span>zxf<span style="color: #bbbbbb"> </span>rootfs.tar.gz
</pre></div></td></tr></table></div></code></pre>
</div>
</div>
<div class="paragraph">
<p>Take a look at the archive contents:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="pygments highlight" style="background: #f8f8f8;"><code data-lang="bash"><div class="lineno"><table class="linenotable"><tr><td class="linenos"><div class="linenodiv"><pre><span style="color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px;">1</span>
<span style="color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px;">2</span></pre></div></td><td class="code"><div><pre style="line-height: 125%;"><span></span>ls<span style="color: #bbbbbb"> </span>rootfs
ls<span style="color: #bbbbbb"> </span>-al<span style="color: #bbbbbb"> </span>rootfs/bin/
</pre></div></td></tr></table></div></code></pre>
</div>
</div>
<div class="paragraph">
<p>Create a blank file <code>in-rootfs.txt</code> as follows.
This serves as a "marking" to recognize the directory <code>/home/itsadmin/rootfs</code> based on the existence of this file:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="pygments highlight" style="background: #f8f8f8;"><code data-lang="bash"><div class="lineno"><table class="linenotable"><tr><td class="linenos"><div class="linenodiv"><pre><span style="color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px;">1</span>
<span style="color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px;">2</span></pre></div></td><td class="code"><div><pre style="line-height: 125%;"><span></span>sudo<span style="color: #bbbbbb"> </span>touch<span style="color: #bbbbbb"> </span>rootfs/in-rootfs.txt
ls<span style="color: #bbbbbb"> </span>rootfs
</pre></div></td></tr></table></div></code></pre>
</div>
</div>
<div class="paragraph">
<p>Check that you are currently working as user <code>itsadmin</code>:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="pygments highlight" style="background: #f8f8f8;"><code data-lang="bash"><div class="lineno"><table class="linenotable"><tr><td class="linenos"><div class="linenodiv"><pre><span style="color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px;">1</span></pre></div></td><td class="code"><div><pre style="line-height: 125%;"><span></span>id
</pre></div></td></tr></table></div></code></pre>
</div>
</div>
<div class="paragraph">
<p>Now execute the <code>chroot</code> command with administrator rights.
The command should start a bash shell (= command prompt, console session)
with the directory <code>/home/itsadmin/rootfs</code> as a root directory:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="pygments highlight" style="background: #f8f8f8;"><code data-lang="bash"><div class="lineno"><table class="linenotable"><tr><td class="linenos"><div class="linenodiv"><pre><span style="color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px;">1</span></pre></div></td><td class="code"><div><pre style="line-height: 125%;"><span></span>sudo<span style="color: #bbbbbb"> </span>chroot<span style="color: #bbbbbb"> </span>./rootfs<span style="color: #bbbbbb"> </span>/bin/bash
</pre></div></td></tr></table></div></code></pre>
</div>
</div>
<div class="paragraph">
<p>Check that this shell really has the directory above as its root directory by looking for the file <code>in-rootfs.txt</code>:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="pygments highlight" style="background: #f8f8f8;"><code data-lang="bash"><div class="lineno"><table class="linenotable"><tr><td class="linenos"><div class="linenodiv"><pre><span style="color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px;">1</span></pre></div></td><td class="code"><div><pre style="line-height: 125%;"><span></span>ls<span style="color: #bbbbbb"> </span>/
</pre></div></td></tr></table></div></code></pre>
</div>
</div>
<div class="paragraph">
<p>Check that due to the <code>chroot</code> you are now working as administrator user <code>root</code>:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="pygments highlight" style="background: #f8f8f8;"><code data-lang="bash"><div class="lineno"><table class="linenotable"><tr><td class="linenos"><div class="linenodiv"><pre><span style="color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px;">1</span></pre></div></td><td class="code"><div><pre style="line-height: 125%;"><span></span>id
</pre></div></td></tr></table></div></code></pre>
</div>
</div>
<div class="paragraph">
<p>Now check that even the Administrator user <code>root</code> can not leave the "restricted root directory":</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="pygments highlight" style="background: #f8f8f8;"><code data-lang="bash"><div class="lineno"><table class="linenotable"><tr><td class="linenos"><div class="linenodiv"><pre><span style="color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px;">1</span>
<span style="color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px;">2</span>
<span style="color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px;">3</span>
<span style="color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px;">4</span></pre></div></td><td class="code"><div><pre style="line-height: 125%;"><span></span><span style="color: #008000">cd</span><span style="color: #bbbbbb"> </span>/
ls
<span style="color: #008000">cd</span><span style="color: #bbbbbb"> </span>..
ls
</pre></div></td></tr></table></div></code></pre>
</div>
</div>
<div class="paragraph">
<p>But by leaving the shell by means of <code>exit</code> you get out of the <code>chroot</code> "filesystem jail".
<code>chroot</code> was only applicable for the <code>bash</code> shell program that was started by it &#8230;&#8203;</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="pygments highlight" style="background: #f8f8f8;"><code data-lang="bash"><div class="lineno"><table class="linenotable"><tr><td class="linenos"><div class="linenodiv"><pre><span style="color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px;">1</span></pre></div></td><td class="code"><div><pre style="line-height: 125%;"><span></span><span style="color: #008000">exit</span>
</pre></div></td></tr></table></div></code></pre>
</div>
</div>
<div class="paragraph">
<p>Also applications can run in a <code>chroot</code>.
We will try this via a Python interpreter that will run a mini web server.
First, we check that Python interpreter executable exists within the filesystem under <code>rootfs</code>:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="pygments highlight" style="background: #f8f8f8;"><code data-lang="bash"><div class="lineno"><table class="linenotable"><tr><td class="linenos"><div class="linenodiv"><pre><span style="color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px;">1</span></pre></div></td><td class="code"><div><pre style="line-height: 125%;"><span></span>ls<span style="color: #bbbbbb"> </span>rootfs/usr/bin/python
</pre></div></td></tr></table></div></code></pre>
</div>
</div>
<div class="paragraph">
<p>For Python to work, the following workaround is necessary (otherwise <code>/dev/urandom</code> will b emissing, which is needed by Python):</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="pygments highlight" style="background: #f8f8f8;"><code data-lang="bash"><div class="lineno"><table class="linenotable"><tr><td class="linenos"><div class="linenodiv"><pre><span style="color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px;">1</span></pre></div></td><td class="code"><div><pre style="line-height: 125%;"><span></span>sudo<span style="color: #bbbbbb"> </span>mount<span style="color: #bbbbbb"> </span>--bind<span style="color: #bbbbbb"> </span>/dev/<span style="color: #bbbbbb"> </span>rootfs/dev
</pre></div></td></tr></table></div></code></pre>
</div>
</div>
<div class="paragraph">
<p>Now we can start Python in the <code>chroot</code> "jail":</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="pygments highlight" style="background: #f8f8f8;"><code data-lang="bash"><div class="lineno"><table class="linenotable"><tr><td class="linenos"><div class="linenodiv"><pre><span style="color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px;">1</span></pre></div></td><td class="code"><div><pre style="line-height: 125%;"><span></span>sudo<span style="color: #bbbbbb"> </span>chroot<span style="color: #bbbbbb"> </span>rootfs<span style="color: #bbbbbb"> </span>python<span style="color: #bbbbbb"> </span>-m<span style="color: #bbbbbb"> </span>http.server
</pre></div></td></tr></table></div></code></pre>
</div>
</div>
<div class="paragraph">
<p>Via a new, other console, call a web page served by this web server:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="pygments highlight" style="background: #f8f8f8;"><code data-lang="bash"><div class="lineno"><table class="linenotable"><tr><td class="linenos"><div class="linenodiv"><pre><span style="color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px;">1</span></pre></div></td><td class="code"><div><pre style="line-height: 125%;"><span></span>curl<span style="color: #bbbbbb"> </span>localhost:8000
</pre></div></td></tr></table></div></code></pre>
</div>
</div>
<div class="paragraph">
<p>Note: The file <code>in-rootfs.txt</code> is also part of the listing on this web page!</p>
</div>
<div class="paragraph">
<p>Switch to the console in which the Python program is running.
Exit the program via <code>Ctrl-C</code>.</p>
</div>
<div class="paragraph">
<p>Leave the <code>chroot</code> "filesystem jail":</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="pygments highlight" style="background: #f8f8f8;"><code data-lang="bash"><div class="lineno"><table class="linenotable"><tr><td class="linenos"><div class="linenodiv"><pre><span style="color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px;">1</span></pre></div></td><td class="code"><div><pre style="line-height: 125%;"><span></span><span style="color: #008000">exit</span>
</pre></div></td></tr></table></div></code></pre>
</div>
</div>
<div class="paragraph">
<p>End the above workaround:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="pygments highlight" style="background: #f8f8f8;"><code data-lang="bash"><div class="lineno"><table class="linenotable"><tr><td class="linenos"><div class="linenodiv"><pre><span style="color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px;">1</span></pre></div></td><td class="code"><div><pre style="line-height: 125%;"><span></span>sudo<span style="color: #bbbbbb"> </span>umount<span style="color: #bbbbbb"> </span>rootfs/dev
</pre></div></td></tr></table></div></code></pre>
</div>
</div>
<div class="paragraph">
<p>"::h1 Simple Container"</p>
</div>
<div class="paragraph">
<p>Now combine PID namespaces and <code>chroot</code> using the following command:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="pygments highlight" style="background: #f8f8f8;"><code data-lang="bash"><div class="lineno"><table class="linenotable"><tr><td class="linenos"><div class="linenodiv"><pre><span style="color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px;">1</span></pre></div></td><td class="code"><div><pre style="line-height: 125%;"><span></span>sudo<span style="color: #bbbbbb"> </span>unshare<span style="color: #bbbbbb"> </span>--pid<span style="color: #bbbbbb"> </span>--fork<span style="color: #bbbbbb"> </span>chroot<span style="color: #bbbbbb"> </span>./rootfs<span style="color: #bbbbbb"> </span>/bin/bash
</pre></div></td></tr></table></div></code></pre>
</div>
</div>
<div class="paragraph">
<p>Take a look at the root filesystem as well as the current user of the "container".</p>
</div>
<div class="paragraph">
<p>To view the processes in the "container", a command must be executed that instructs the <code>procfs</code> driver to
make the needed pseudo files available within the <code>/proc</code> directory of the "container".</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="pygments highlight" style="background: #f8f8f8;"><code data-lang="bash"><div class="lineno"><table class="linenotable"><tr><td class="linenos"><div class="linenodiv"><pre><span style="color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px;">1</span></pre></div></td><td class="code"><div><pre style="line-height: 125%;"><span></span>mount<span style="color: #bbbbbb"> </span>t<span style="color: #bbbbbb"> </span>proc<span style="color: #bbbbbb"> </span>procfs<span style="color: #bbbbbb"> </span>/proc
</pre></div></td></tr></table></div></code></pre>
</div>
</div>
<div class="paragraph">
<p>Now the processes visible in the "container" can be viewed via the <code>ps</code> command.</p>
</div>
<div class="paragraph">
<p>End the container via <code>exit</code>.</p>
</div>
</div>
<button class="close-button" onclick="document.getElementById('sect_id_file_system_jails_chroot').open=false">(close: File system 'Jails': chroot)</button>
</details></div>
<div class="sect1"><details id="sect_id_using_files_as_disks">
<summary class="h2-summary">Using Files as Disks</summary>
<div class="sectionbody">
<div class="paragraph">
<p>Use the <code>dd</code> command to create a file <code>/tmp/disk1.img</code>.
The file shall have a size of <code>512 MB</code> and shall be filled with zeros:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="pygments highlight" style="background: #f8f8f8;"><code data-lang="bash"><div class="lineno"><table class="linenotable"><tr><td class="linenos"><div class="linenodiv"><pre><span style="color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px;">1</span></pre></div></td><td class="code"><div><pre style="line-height: 125%;"><span></span>dd<span style="color: #bbbbbb"> </span><span style="color: #008000; font-weight: bold">if</span><span style="color: #666666">=</span>/dev/zero<span style="color: #bbbbbb"> </span><span style="color: #19177C">of</span><span style="color: #666666">=</span>/tmp/disk1.img<span style="color: #bbbbbb"> </span><span style="color: #19177C">bs</span><span style="color: #666666">=</span>1M<span style="color: #bbbbbb"> </span><span style="color: #19177C">count</span><span style="color: #666666">=512</span>
</pre></div></td></tr></table></div></code></pre>
</div>
</div>
<div class="paragraph">
<p>Within the file, create a File system of <code>ext3</code> type.</p>
</div>
<div class="paragraph">
<p>Create a directory <code>/mnt/disk1</code>.</p>
</div>
<div class="paragraph">
<p>Mount the file into the just created directory (<code>mount</code>).</p>
</div>
<div class="paragraph">
<p>Create a new file in the directory.
You may have to do so as <code>root</code>, because standard users do not have write permissions in the directory.
Alternatively, you can also grant write permissions to the directory to all users and then create the file as the default user.</p>
</div>
<div class="paragraph">
<p>Check that the file is created successfully.</p>
</div>
<div class="paragraph">
<p>Check as well that a subdirectory <code>lost+found</code> also exists in that directory.
This automatically created directory is a good indicator that the directory is the root directory of a filesystem of a separate disk:
it is a kind of "wastebasket of the filesystem", where the filesystem possibly stores
orphaned files when filesystem operations should run into errors.</p>
</div>
<div class="paragraph">
<p>Unmount the "disk implemented via a file" at the location <code>/mnt/disk1</code> again.</p>
</div>
<div class="paragraph">
<p>Delete the directory <code>/mnt/disk1</code> as well as the data file <code>/tmp/disk1.img</code>.</p>
</div>
</div>
<button class="close-button" onclick="document.getElementById('sect_id_using_files_as_disks').open=false">(close: Using Files as Disks)</button>
</details></div>
<div class="sect1"><details id="sect_id_simple_containers_using_overlay_filesystem">
<summary class="h2-summary">Simple Containers using Overlay Filesystem</summary>
<div class="sectionbody">
<div class="paragraph">
<p>Download the following file into the directory <code>/home/itsadmin</code> using <code>wget</code>:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="pygments highlight" style="background: #f8f8f8;"><code data-lang="bash"><div class="lineno"><table class="linenotable"><tr><td class="linenos"><div class="linenodiv"><pre><span style="color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px;">1</span></pre></div></td><td class="code"><div><pre style="line-height: 125%;"><span></span>https://github.com/ericchiang/containers-from-scratch/releases/download/v0.1.0/rootfs.tar.gz
</pre></div></td></tr></table></div></code></pre>
</div>
</div>
<div class="paragraph">
<p>Unzip with administrator rights (important) the downloaded file:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="pygments highlight" style="background: #f8f8f8;"><code data-lang="bash"><div class="lineno"><table class="linenotable"><tr><td class="linenos"><div class="linenodiv"><pre><span style="color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px;">1</span></pre></div></td><td class="code"><div><pre style="line-height: 125%;"><span></span>sudo<span style="color: #bbbbbb"> </span>tar<span style="color: #bbbbbb"> </span>-zxf<span style="color: #bbbbbb"> </span>rootfs.tar.gz
</pre></div></td></tr></table></div></code></pre>
</div>
</div>
<div class="paragraph">
<p>Switch to the <code>rootfs</code> subdirectory just created and as <code>root</code> user create four subdirectories there:
<code>container1_subdir_1</code>, <code>container1_subdir_2</code>, <code>container2_subdir_1</code>, <code>container2_subdir_2</code></p>
</div>
<div class="paragraph">
<p>Let the system output the contents of directory <code>/home/`datei1.txt</code>, <code>datei2.txt</code>. /rootfs` and check that the four directories are present.</p>
</div>
<div class="paragraph">
<p>As <code>root</code> user, create two files in each of the four directories:
<code>datei1.txt</code>, <code>datei2.txt</code>.
The content of the files does not matter and can also be empty.</p>
</div>
<div class="paragraph">
<p>Back as user itsadmin, in the <code>/home/itsadmin</code> directory, create the following subdirectories:
<code>upper1</code>, <code>upper2</code>, <code>work1</code>, <code>work2</code>, <code>overlay1</code>, <code>overlay2</code>.</p>
</div>
<div class="paragraph">
<p>Now create two overlay filesystem structures:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="pygments highlight" style="background: #f8f8f8;"><code data-lang="bash"><div class="lineno"><table class="linenotable"><tr><td class="linenos"><div class="linenodiv"><pre><span style="color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px;">1</span>
<span style="color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px;">2</span></pre></div></td><td class="code"><div><pre style="line-height: 125%;"><span></span>sudo<span style="color: #bbbbbb"> </span>mount<span style="color: #bbbbbb"> </span>-t<span style="color: #bbbbbb"> </span>overlay<span style="color: #bbbbbb"> </span>-o<span style="color: #bbbbbb"> </span><span style="color: #19177C">lowerdir</span><span style="color: #666666">=</span>rootfs,upperdir<span style="color: #666666">=</span>upper1,workdir<span style="color: #666666">=</span>work1<span style="color: #bbbbbb"> </span>none<span style="color: #bbbbbb"> </span>overlay1
sudo<span style="color: #bbbbbb"> </span>mount<span style="color: #bbbbbb"> </span>-t<span style="color: #bbbbbb"> </span>overlay<span style="color: #bbbbbb"> </span>-o<span style="color: #bbbbbb"> </span><span style="color: #19177C">lowerdir</span><span style="color: #666666">=</span>rootfs,upperdir<span style="color: #666666">=</span>upper2,workdir<span style="color: #666666">=</span>work2<span style="color: #bbbbbb"> </span>none<span style="color: #bbbbbb"> </span>overlay2
</pre></div></td></tr></table></div></code></pre>
</div>
</div>
<div class="paragraph">
<p>Let the system list the directory contents of the directories <code>/home/itsadmin/overlay1</code> and <code>/home/itsadmin/overlay2</code>.
You should both times see the files from <code>rootfs</code>.</p>
</div>
<div class="paragraph">
<p>Enter the command <code>mount</code> and watch the last two lines of the output of the command.
There you should find the mounted overlay structures.</p>
</div>
<div class="paragraph">
<p>Open a new command line or a new command line tab and start a "simple container" there:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="pygments highlight" style="background: #f8f8f8;"><code data-lang="bash"><div class="lineno"><table class="linenotable"><tr><td class="linenos"><div class="linenodiv"><pre><span style="color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px;">1</span></pre></div></td><td class="code"><div><pre style="line-height: 125%;"><span></span>sudo<span style="color: #bbbbbb"> </span>unshare<span style="color: #bbbbbb"> </span>--pid<span style="color: #bbbbbb"> </span>--mount<span style="color: #bbbbbb"> </span>--fork<span style="color: #bbbbbb"> </span>chroot<span style="color: #bbbbbb"> </span>overlay1<span style="color: #bbbbbb"> </span>/bin/bash
</pre></div></td></tr></table></div></code></pre>
</div>
</div>
<div class="paragraph">
<p>Check your user identity in the container and have the system output the contents of the root directory of the container using the command <code>ls /</code>.
You should see the files from <code>rootfs</code> there.</p>
</div>
<div class="paragraph">
<p>In this first container, delete the directory <code>/srv</code> and all of its content.
Check that the directory is indeed deleted.</p>
</div>
<div class="paragraph">
<p>In the root directory of the container, create a file <code>container1_added.txt</code>.
The file contents do not matter and can also be empty.
Insert a directory <code>/container1_added_subdir_1</code> and in this directory a file <code>/container1_added_subdir_1/container1_added.txt</code>.</p>
</div>
<div class="paragraph">
<p>In the container, recursively delete the directory <code>/container1_subdir_1</code> with all its contents.
Create a new file <code>/container1_subdir_2/container1_added.txt</code> and delete the file <code>/container1_subdir_2/file1.txt</code>.</p>
</div>
<div class="paragraph">
<p>After all these steps in the container, check that the required changes have all been executed correctly.</p>
</div>
<div class="paragraph">
<p>Now open another new command line or a new command line tab and start a second "simple container" there:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="pygments highlight" style="background: #f8f8f8;"><code data-lang="bash"><div class="lineno"><table class="linenotable"><tr><td class="linenos"><div class="linenodiv"><pre><span style="color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px;">1</span></pre></div></td><td class="code"><div><pre style="line-height: 125%;"><span></span>sudo<span style="color: #bbbbbb"> </span>unshare<span style="color: #bbbbbb"> </span>--pid<span style="color: #bbbbbb"> </span>--mount<span style="color: #bbbbbb"> </span>--fork<span style="color: #bbbbbb"> </span>chroot<span style="color: #bbbbbb"> </span>overlay2<span style="color: #bbbbbb"> </span>/bin/bash
</pre></div></td></tr></table></div></code></pre>
</div>
</div>
<div class="paragraph">
<p>Check your user identity in the container and have the system output the contents of the root directory of the container using the command <code>ls /</code>.
You should see the files from <code>rootfs</code> there.</p>
</div>
<div class="paragraph">
<p>In this second container, delete the directory <code>/media</code> including all its contents.
Check that the directory is indeed deleted.
Also, check that the <code>/srv</code> directory still exists, i.e. the deletion of this directory in container1 obviously has had no effect on container2.</p>
</div>
<div class="paragraph">
<p>In the root directory of the container, create a file <code>container2_added.txt</code>.
The file contents do not matter and can also be empty.</p>
</div>
<div class="paragraph">
<p>Create a directory <code>/container2_added_subdir_1</code> and in this directory a file <code>/container2_added_subdir_1/container2_added.txt</code>.</p>
</div>
<div class="paragraph">
<p>In the container, recursively delete the directory <code>/container2_subdir_1</code> with all its contents.</p>
</div>
<div class="paragraph">
<p>Create a new file <code>/container2_subdir_2/container2_added.txt</code> and delete the file <code>/container2_subdir_2/file1.txt</code>.</p>
</div>
<div class="paragraph">
<p>Switch to each of the command lines of Container1 and Container2 and check that the changes made in each container did not have an impact on each other container.</p>
</div>
<div class="paragraph">
<p>Switch to the command line of Container2.
Use the command <code>ps aux</code> to view the list of processes in the container and
terminate this command line and thus the container via <code>exit</code>.</p>
</div>
<div class="paragraph">
<p>Also leave the command line or the command line tab that was opened for the container by means of <code>exit</code>.</p>
</div>
<div class="paragraph">
<p>Switch to the command line of Container1.
Use <code>ps aux</code> to get the list of processes in the container and
terminate this command line and thus the container via <code>exit</code>.</p>
</div>
<div class="paragraph">
<p>Also leave the command line or the command line tab that was opened for this container by means of <code>exit</code>.</p>
</div>
<div class="paragraph">
<p>Stop the mounting and end the existence of the two overlay filesystem structures:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="pygments highlight" style="background: #f8f8f8;"><code data-lang="bash"><div class="lineno"><table class="linenotable"><tr><td class="linenos"><div class="linenodiv"><pre><span style="color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px;">1</span>
<span style="color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px;">2</span></pre></div></td><td class="code"><div><pre style="line-height: 125%;"><span></span>sudo<span style="color: #bbbbbb"> </span>umount<span style="color: #bbbbbb"> </span>/home/itsadmin/overlay2
sudo<span style="color: #bbbbbb"> </span>umount<span style="color: #bbbbbb"> </span>/home/itsadmin/overlay1
</pre></div></td></tr></table></div></code></pre>
</div>
</div>
<div class="paragraph">
<p>Now look at the contents of the directories <code>upper1</code> and <code>upper2</code> (including their subdirectories)
and analyze the results for yourself.</p>
</div>
<div class="paragraph">
<p>Take a look at the content of the <code>rootfs</code> directory and observe that all these activities have no changed the original directory contents.
The <code>container&#8230;&#8203;</code> subdirectories should also be completely present;
these were created before the containers were started and thus belong to the "initial state".
Also observe that in <code>rootfs</code>, the directories <code>srv</code> and <code>media</code> are still available with their contents.</p>
</div>
<div class="paragraph">
<p>With administrator permissions, recursively delete the directories
<code>upper1</code>, <code>upper2</code>, <code>work1</code>, <code>work2</code>, <code>overlay1</code>, <code>overlay2</code> und <code>rootfs</code>
with all their contents.</p>
</div>
</div>
<button class="close-button" onclick="document.getElementById('sect_id_simple_containers_using_overlay_filesystem').open=false">(close: Simple Containers using Overlay Filesystem)</button>
</details></div>
<div class="sect1"><details id="sect_id_upload_of_console_log_file_and_completion_of_this_lab">
<summary class="h2-summary">Upload of console log file and completion of this lab</summary>
<div class="sectionbody">
<div class="paragraph">
<p>When you have finalized your lab work, you need to end the logging by entering <code>exit</code> into your console. The following output should appear:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="pygments highlight" style="background: #f8f8f8;"><code data-lang="bash"><div class="lineno"><table class="linenotable"><tr><td class="linenos"><div class="linenodiv"><pre><span style="color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px;">1</span></pre></div></td><td class="code"><div><pre style="line-height: 125%;"><span></span>Script<span style="color: #bbbbbb"> </span><span style="color: #008000; font-weight: bold">done</span>,<span style="color: #bbbbbb"> </span>file<span style="color: #bbbbbb"> </span>is<span style="color: #bbbbbb"> </span>Linux-praktikum-05.log
</pre></div></td></tr></table></div></code></pre>
</div>
</div>
<div class="paragraph">
<p>Start a webbrowser inside the virtual machine and upload the log file to ILIAS, using this web browser.</p>
</div>
<div class="paragraph">
<p>Shut down the VM, remove the VM completely (<code>delete all files</code>) and end your session.</p>
</div>
</div>
<button class="close-button" onclick="document.getElementById('sect_id_upload_of_console_log_file_and_completion_of_this_lab').open=false">(close: Upload of console log file and completion of this lab)</button>
</details></div>
</div>
<div id="footer">
<div id="footer-text">
</div>
</div>
</body>
</html>